comparison paper/cerium.tex @ 1:f4b3de446113

write introduction and cerium
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Tue, 05 Nov 2013 23:59:45 +0900
parents 9e88a388ec83
children b7c8a956c10b
comparison
equal deleted inserted replaced
0:9e88a388ec83 1:f4b3de446113
1 \section{Cerium での Task の生成}\label{section:cerium} 1 \section{Cerium における Task の生成}\label{section:cerium}
2 Cerium では,user が createtask を行い、input data や依存関係の設定を行うと TaskManager で Task が生成される。 2 Cerium では,user が createtask を行い、input data や依存関係の設定し spawn を行うと TaskManager で Task が生成される。
3 3 spawn の代わりに新たに用意した iterate を利用することで,Data 並列処理を行う Task として登録される。
4 \begin{figure}[ht]
5 \begin{center}
6 \includegraphics[scale=0.4]{./images/createTask.pdf}
7 \end{center}
8 \caption{Task Manager}
9 \label{fig:createTask}
10 \end{figure}
11 図\ref{fig:createTask}は Cerium が Task を作成/実行する場合のクラスの構成となる。
12 Task 毎に依存関係を表す wait\_i と wait\_me というリストがあり、依存関係が解消されて実行可能になった 4 Task 毎に依存関係を表す wait\_i と wait\_me というリストがあり、依存関係が解消されて実行可能になった
13 Task は ActiveTaskList に移される。さらに、Scheduler に転送しやすい TaskList に変換してから各 Scheduler に 5 Task は ActiveTaskList に移される。さらに、Scheduler に転送しやすい TaskList に変換してから各 Scheduler に
14 転送される。 6 転送される。
15 \subsection{Taskの生成} 7
16 以下に Task を生成する例題を示す。 8 以下に Data 並列処理を行う Task を生成する例題を示す。
17 input data を二つ用意し、 input 同士を乗算し、 output に格納する multiply という例題となる。 9 input data を二つ用意し、 input 同士を乗算し、 output に格納する multiply という例題となる。
18 \begin{Verbatim}[fontsize=\footnotesize,xleftmargin=1cm] 10 \begin{Verbatim}[fontsize=\footnotesize,xleftmargin=1cm]
19 void 11 void
20 multiply_init 12 multiply_init
21 (HTaskPtr twice, int *i_data, int *o_data) { 13 (HTaskPtr twice, int *i_data, int *o_data) {
26 sizeof(int)*length); 18 sizeof(int)*length);
27 multiply->set_inData(1, i_data2, 19 multiply->set_inData(1, i_data2,
28 sizeof(int)*length); 20 sizeof(int)*length);
29 multiply->set_outData(0, o_data, 21 multiply->set_outData(0, o_data,
30 sizeof(int)*length); 22 sizeof(int)*length);
31 multiply->set_param(0, (memaddr)length);
32 multiply->set_cpu(SPE_ANY); 23 multiply->set_cpu(SPE_ANY);
33 multiply->spawn(); 24 multiply->iterate(length);
34 } 25 }
35 \end{Verbatim} 26 \end{Verbatim}
36 27
37 \begin{tiny} 28 \begin{tiny}
38 \begin{table}[ht] 29 \begin{table}[ht]
39 \begin{center} 30 \begin{center}
40 \caption{ Task 生成における API } 31 \caption{Task 生成における API}
41 \label{table:create_taskAPI} 32 \label{table:create_taskAPI}
42 \scalebox{0.5}[0.9] 33 \scalebox{0.5}[0.9]
43 \small 34 \small
44 \begin{tabular}[t]{c|l} 35 \begin{tabular}[t]{c|l}
45 \hline 36 \hline
46 create\_task& Task を生成する \\ 37 create\_task& Task を生成する \\
47 \hline 38 \hline
48 set\_inData & Task への入力データのアドレスを追加 \\ 39 set\_inData & Task への入力データのアドレスを追加 \\
49 \hline 40 \hline
50 set\_outData & Task への入力データのアドレスを追加 \\ 41 set\_outData & Task からの出力データのアドレスを追加 \\
51 \hline
52 set\_param & Task へ値を一つ渡す。ここでは length \\
53 \hline 42 \hline
54 set\_cpu & Task を実行するデバイスの設定 \\ 43 set\_cpu & Task を実行するデバイスの設定 \\
55 \hline 44 \hline
56 spawn& 生成した Task を ActiveTaskList に登録 \\ 45 iterate&Data 並列処理を行う Task として ActiveTaskList に登録 \\
57 \hline 46 \hline
58 \end{tabular} 47 \end{tabular}
59 \end{center} 48 \end{center}
60 \end{table} 49 \end{table}
61 \end{tiny} 50 \end{tiny}
62 Task ( OpenCL における kernel )の記述は以下のようになる。 51
63 \begin{Verbatim}[fontsize=\footnotesize,xleftmargin=1cm]
64 static int
65 run(SchedTask *s,void *rbuf, void *wbuf)
66 {
67 float i_data1=(float*)s->get_input(rbuf,0);
68 float i_data2=(float*)s->get_input(rbuf,1);
69 float o_data=(float*)s->get_output(wbuf,0);
70 long length=(long)s->get_param(0);
71 for (int i=0;i<length;i++) {
72 outdata[i]=indata1[i]*indata2[i];
73 }
74 return 0;
75 }
76 \end{Verbatim}
77 \begin{tiny} 52 \begin{tiny}
78 \begin{table}[ht] 53 \begin{table}[ht]
79 \begin{center} 54 \begin{center}
80 \caption{ Task 側で使用する API } 55 \caption{Task 側で使用する API}
81 \label{table:taskAPI} 56 \label{table:created_taskAPI}
57 \scalebox{0.5}[0.9]
82 \small 58 \small
83 \begin{tabular}[t]{c|l} 59 \begin{tabular}[t]{c|l}
84 \hline 60 \hline
85 get\_input & Schedulerからinput dataを取得 \\ 61 get\_input&Scheduler から set\_inData したアドレスを取得\\
86 \hline 62 \hline
87 get\_output & Schedulerからoutput dataを取得 \\ 63 get\_output&Scheduler から set\_outData したアドレスを取得\\
88 \hline
89 get\_param & set\_paramした値を取得 \\
90 \hline 64 \hline
91 \end{tabular} 65 \end{tabular}
92 \end{center} 66 \end{center}
93 \end{table} 67 \end{table}
94 \end{tiny} 68 \end{tiny}