Mercurial > hg > Members > kokubo > 2013-mid-thesis
comparison paper/data_parallel.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におけるデータ並列}\label{data_parallel} | 1 \section{Cerium における Data 並列}\label{data_parallel} |
2 OpenCLで充分な並列度を得るには、データ並列による実行をサポートした方が良い。 | |
3 CeriumでOpenCLのデータ並列を使うために、iterateというAPIを用意した。 | |
4 | |
5 ベンチマークをとるために、まずはCPU(many core)上でデータ並列の機構を実装した。 | |
6 OpenCLでデータ並列を行う際は、NDRangeの引数でワークアイテムのサイズを設定し、以下のようにkernelを書けばよい。 | |
7 | |
8 \begin{Verbatim}[fontsize=\footnotesize,xleftmargin=1cm] | |
9 __kernel void | |
10 multi(__global const float *i_data1, | |
11 __global const float *i_data2, | |
12 __global float *o_data) | |
13 { | |
14 int i = get_global_id(0); | |
15 o_data[i] = i_data1[i]*i_data2[i]; | |
16 } | |
17 | |
18 \end{Verbatim} | |
19 kernelを複数生成し、各kernelは自分が担当するindexをget\_global\_id APIで取得し、 | |
20 その部分だけ計算を行う。CPUで実行する場合もGPU実行時のkernelとなるべく近い形式で記述できるようにする。 | |
21 | |
22 \subsection{データ並列実行の機構} | |
23 データ並列で実行する場合はspawn APIではなく、iterate APIでTaskを生成すればよい。 | 2 データ並列で実行する場合はspawn APIではなく、iterate APIでTaskを生成すればよい。 |
24 Scheduler内で引数分のTaskを生成し、それぞれに自分が担当するindexをパラメタとして設定していく。 | 3 Scheduler内で引数分のTaskを生成し、それぞれに自分が担当するindexをパラメタとして設定していく。 |
25 iterateにはlengthを引数として渡し、lengthの値と渡したlengthの個数で次元数や | 4 iterateにはlengthを引数として渡し、lengthの値と渡したlengthの個数で次元数や |
26 ワークアイテムのサイズをSchedulerが計算する。 | 5 ワークアイテムのサイズをSchedulerが計算する。 |
27 CPU実行時のkernelは以下のように記述する。 | 6 CPU実行時のkernelは以下のように記述する。 |