annotate paper/data_parallel.tex @ 3:423b4d15e248

fix
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Wed, 06 Nov 2013 20:31:56 +0900
parents b7c8a956c10b
children 8c37fee42142
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
f4b3de446113 write introduction and cerium
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1 \section{Cerium における Data 並列}\label{data_parallel}
2
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
2 Cerium では,iterate に length を引数として渡し,length の値と渡した引数の個数を次元数として Task 数を Scheduler が計算する。
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
3 それぞれの CPU が担当する index は SchedTask に格納してある。
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
4 実行時の Task は以下のように記述する。
0
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 \begin{Verbatim}[fontsize=\footnotesize,xleftmargin=1cm]
2
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
7 static int // Task
0
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 run(SchedTask *s,void *rbuf, void *wbuf)
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 {
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 float *indata1,*indata2,*outdata;
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 indata1 = (float*)s->get_input(rbuf, 0);
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 indata2 = (float*)s->get_input(rbuf, 1);
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 outdata = (float*)s->get_output(wbuf, 0);
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
2
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
16 uisigned long i = s->x;
0
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 outdata[i]=indata1[i]*indata2[i];
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 return 0;
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 }
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 \end{Verbatim}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
2
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
22 \subsection{Data 並列における index 割り当ての実装}
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
23 4 CPU で,一次元で10個の Data に対して Data 並列実行を行った場合,
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
24 各 CPU が担当する index は表:\ref{table:data_parallel_index}のようになる。
0
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
2
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
26 この例だと各 CPU に対するindexの割り当ては,
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
27 CPU0 は index 0,4,8
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
28 CPU1 は index 1,5,9,
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
29 CPU2 は index 2,6,
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
30 CPU3 は index 3,7 となっている。
0
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 \begin{tiny}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 \begin{table}[h]
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 \begin{center}
2
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
35 \caption{Data 並列実行時の index の割り当て}
0
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 \label{table:data_parallel_index}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 \small
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 \begin{tabular}[t]{c||c|c|c|c}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 \hline
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 stage&CPU0& CPU1&CPU2&CPU3 \\
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 \hline
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 1&0&1&2&3 \\
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 \hline
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 2&4&5&6&7 \\
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 \hline
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 3&8&9& & \\
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 \hline
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 \end{tabular}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 \end{center}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 \end{table}
9e88a388ec83 first commit
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 \end{tiny}
2
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
52 この実装により,Cerium で Data 並列実行が可能になった。
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
53 並列プログラミングだと,並列化する Task が全部同一であるという事は少なくない。
b7c8a956c10b write benchmark and conclusion
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
54 iterate を使用することで,Task を生成する部分をループで回すことなく,簡単な syntax で記述できる。