Mercurial > hg > Members > kokubo > 2013-mid-thesis
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} |