annotate paper/chapter1.tex @ 19:79d16cee0afd

Benchmark gpu.minor fix abstruct
author Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
date Fri, 13 Feb 2015 09:29:41 +0900
parents 712576635154
children f0060254db3f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
aae08d907517 first commit
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \chapter{既存のマルチプラットフォームフレームワーク}
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
2 マルチプラットフォームでプログラムを動作させる場合、そのアーキテクチャを意識する必要がある。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
3 マルチプラットフォームにはマルチコア CPU 、 GPU や Cell といったヘテロジニアスマルチコアのような
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
4 様々な構成がある。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
5
19
79d16cee0afd Benchmark gpu.minor fix abstruct
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
6 \section{Architecture}
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
7 本研究では、 CPU の他に GPU 上でのプログラミング (GPGPU) にも対応する。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
8
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
9 GPU(Graphics Processing Unit) は PC の画像処理を担当するユニットで、
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
10 レンダリングに特化したプロセッサが多く集まった構造を持つ。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
11 一つ一つのプロセッサの構造は単純で、その機能は CPU に比べて限定的ではあるが
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
12 大量のデータを複数のプロセッサで並列処理することに長けている。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
13
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
14 GPGPU (General Purpose computing on Graphics Processing Units) とは、
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
15 GPU の高い演算能力を画像処理ではなく汎用計算に使用することである。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
16
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
17 \section{Shared Memory}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
18 \label{sec:shared_memory}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
19 計算機にはメモリ空間が別の計算機と、共有メモリ(Shared Memory)な計算機がある。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
20 GPU のメモリ空間(図:\ref{fig:gpuarch})はマルチコア CPU (図:\ref{fig:cpuarch})と違い、
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
21 共有メモリ(shared mermoy)でないので Host と Device 間で Data の共有ができない。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
22 そのためマルチプラットフォーム環境に対応したフレームワークには、
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
23 Device と Host 間でデータの転送を行う API 備わっている。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
24 しかし、異なる Device 間でデータの転送を行うとネックになる。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
25 そのためデータの入出力を行う回数を減らす、入出力の処理をパイプライン処理にするなどの工夫が必要になる。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
26
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
27
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
28 \begin{figure}[htpb]
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
29 \begin{center}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
30 \includegraphics[scale=0.4]{./images/gpu_arch.pdf}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
31 \end{center}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
32 \caption{GPU Architecture}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
33 \label{fig:gpuarch}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
34 \end{figure}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
35
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
36 \begin{figure}[htpb]
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
37 \begin{center}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
38 \includegraphics[scale=0.8]{./images/cpu_arch.pdf}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
39 \end{center}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
40 \caption{CPU Architecture}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
41 \label{fig:cpuarch}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
42 \end{figure}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
43 \newpage
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
44 %--------
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
45 % OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
46 %--------
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
47
0
aae08d907517 first commit
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 \section{OpenCL}
3
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
49 OpenCL とは、 Khronos Group の提供するマルチコア CPU と GPU といった、
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
50 ヘテロジニアス環境を利用した並列計算を支援するフレームワークである。
1
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
51
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
52 OpenCL では演算用プロセッサ側を Device 、制御用デバイス側を Host として定義する。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
53 また、 Device 上で動作するプログラムの事を kernel と呼ぶ。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
54
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
55 OpenCL では、デバイスの操作に Command Queue を使用する。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
56 Command Queue は Device に命令を送るための仕組みである。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
57 Command Queue は clCreateCommandQueue という OpenCL API で作成され、
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
58 Command Queue が所属するコンテキストや実行対象となる Device を指定する。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
59
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
60 kernel の実行、input data への書き込み、 output data の読み込みといった
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
61 メモリ操作はこの Command Queue を通して行われる。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
62
1
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
63 OpenCL には主に2つの仕様がある。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
64
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
65 \begin{itemize}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
66 \item OpenCL C言語
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
67 \item OpenCL Runtime API
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
68 \end{itemize}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
69
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
70 OpenCL C は演算用プロセッサ上で動作する、 C 言語を拡張したプログラミング言語である。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
71 一方で OpenCL Runtime API は OpenCL C で記述した kernel を Queuing するために Host が利用する API である。
1
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
72
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
73 Host では主に Data を input/output するメモリ資源の確保を行う。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
74 OpenCL は host 側で memory buffer を作成してメモリのコピーを行う。
1
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
75 これらの処理や Task は Command Queue に enqueue することで実行される。
13
6277bb3a73e9 remove subsection
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
76
2
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
77 多次元のデータ構造を扱う計算において高い並列度を保つには、
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
78 多次元データを分割して並列に実行する機能が必要である。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
79 これをデータ並列実行という。 OpenCL はデータ並列実行もサポートしている。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
80 OpenCL は次元数に対応する index があり、
2
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
81 OpenCL は一つの記述から異なる index を持つ複数の kernel を自動生成する。
1
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
82 その添字を global\_id と呼ぶ。この時入力されたデータはワークアイテムという処理単位に分割される。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
83
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
84 OpenCL はワークアイテムに対してそれぞれを識別する ID ( global\_id )を割り当てる。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
85 kernel は get\_global\_id API によって ID を取得し、取得した ID に対応するデータに対して処理を行い、
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
86 データ並列を実現する。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
87 この ID によって取得してきたワークアイテムをグローバルワークアイテムという。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
88 また、ワークアイテムは3次元までのデータを渡すことができる。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
89
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
90 データ並列による kernel 実行の場合は clEnqueueNDRangeKernel API を使用するが、
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
91 この関数の引数としてワークアイテムのサイズと次元数を指定することでデータ並列で実行できる。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
92
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
93 前節でワークアイテムという処理単位について述べたが、
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
94 さらに複数個のグローバルワークアイテムを work\_group という単位にまとめることができる。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
95 work\_group 内では同期やローカルメモリの共有が可能となる。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
96
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
97 グローバルワークアイテム(ワークアイテム全体)の個数と、
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
98 ローカルワークアイテム(グループ一つ辺りのアイテム)の個数を指定することでワークアイテムを分割する。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
99 なお、このときグローバルワークアイテム数はローカルアイテム数の整数倍でなければ
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
100 clEnqueueNDRangeKernel API 呼び出しは失敗する。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
101
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
102 ローカルアイテム数は0を指定することで、コンパイル時に最適化させることができる。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
103 したがってローカルアイテムのサイズは0を指定するのが一般的である。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
104
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
105 なお、 work\_group を設定した場合は global\_id の他に work\_group\_id 、local\_id が
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
106 それぞれの kernel に割り当てられる(図:\ref{fig:workitem_id})。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
107
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
108 \begin{figure}[htpb]
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
109 \begin{center}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
110 \includegraphics[scale=0.65]{./images/workitem.pdf}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
111 \end{center}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
112 \caption{WorkItem ID}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
113 \label{fig:workitem_id}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
114 \end{figure}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
115
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
116 なお、work\_groupを設定した場合はglobal\_idの他にwork\_group\_id、local\_idが
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
117 それぞれのkernelに割り当てられる(図:\ref{fig:workitem_id})。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
118
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
119 kernel 側からそれぞれ ID に対応した API を使用して、各 ID を取得する。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
120 取得した ID から自分が担当する index を計算して導く。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
121 表:\ref{table:kernel_id_api}は kernel 側で使用できる、 ID を取得するための API となる。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
122 \begin{tiny}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
123 \begin{table}[htpb]
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
124 \begin{center}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
125 \small
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
126 \begin{tabular}[htpb]{c|l}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
127 \hline
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
128 get\_group\_id & work\_group\_id を取得 \\
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
129 \hline
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
130 get\_local\_id & local\_id を取得 \\
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
131 \hline
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
132 get\_global\_id & global\_id を取得 \\
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
133 \hline
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
134 \end{tabular}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
135 \caption{kernel で使用する ID 取得の API}
2
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
136 \label{table:kernel_id_api}
1
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
137 \end{center}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
138 \end{table}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
139 \end{tiny}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
140 なお、 local\_id 、global\_id を取得する API は引数に0、1、2の値を set することができる。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
141 id は x, y, z 座標があり、それぞれが 0, 1, 2 に対応している。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
142 例えば get\_global\_id(1) と呼び出した場合は y 座標の、
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
143 get\_global\_id(1) と呼び出した場合は z 座標の global\_id を取得する。
0
aae08d907517 first commit
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
144
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
145
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
146 %------
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
147 % CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
148 %------
2
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
149 \section{CUDA}
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
150 CUDA とは、半導体メーカーNVIDIA社が提供するGPUコンピューティング向けの総合開発環境である。
0
aae08d907517 first commit
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
151
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
152 CUDA も OpenCL と同様、演算用プロセッサ (GPU) を Device 、制御用デバイス側を Host として定義する。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
153 また、 Device 上で動作するプログラムの事も kernel と呼ぶ。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
154
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
155 OpenCL における Command と CommandQueue に対応するものとして、 CUDA には Operation と Stream がある。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
156 Stream は Host 側で発行された Operation を一連の動作として Device で実行する。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
157 Operation は発行された順序で実行されることが保証されている。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
158 更に、異なる Stream に発行された Operation も依存関係が存在しない場合、Operationは並列に実行される。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
159 更に依存関係が存在しない、異なる Stream に発行された Operation は並列に実行される。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
160
2
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
161 CUDAには主に3つの仕様がある。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
162
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
163 \begin{itemize}
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
164 \item CUDA C
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
165 \item CUDA Runtime API
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
166 \item CUDA Driver API
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
167 \end{itemize}
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
168 CUDA C は GPU 上で動作する、C 言語を拡張したプログラミング言語である。
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
169 CUDA Runtime API も CUDA Driver API も CUDA C で記述した Kernel を Queueing するために
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
170 Host が利用するAPIである。
2
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
171 Driver API は Runtime APIに比べ、プログラマが管理しなければならないリソースが多くなる代わり、
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
172 より柔軟な処理を行う事ができる。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
173
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
174 Stream は cuStreamCreate という Driver API で生成される。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
175 引数に Stream を指定しない API は全て host 側をブロックする同期的な処理となる。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
176 複数の Stream を同時に走らせ、 Operation を並列に実行するためには非同期的な処理を行う API を利用する必要がある。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
177
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
178 CUDA では OpenCL の WorkItemに相当する単位を thread として定義している。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
179 この thread をまとめた単位として block がある。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
180
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
181 CUDAでデータ並列による kernel 実行を行う場合、cuLaunchKernelAPIを使用する。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
182 この関数は引数として各座標の block 数、
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
183 各座標の block 1つ辺りの thread 数を指定することによりデータ並列実行を行う。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
184
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
185 cuLaunchKernel で kernel を実行すると各 thread に対して blockID と threadID が割り当てられる。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
186 CUDA には OpenCLと異なり、IDを取得するAPIが存在しない。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
187 それに代わり、 kernel に組み込み変数が準備されている。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
188 その組み込み変数を参照し、対応するデータに対し処理を行うことでデータ並列実行を実現する。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
189 組み込み変数は以下の3つである。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
190
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
191 \begin{itemize}
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
192 \item uint3 blockDim
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
193 \item uint3 blockIdx
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
194 \item uint3 threadIdx
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
195 \end{itemize}
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
196
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
197 3つの組み込み変数はベクター型で、 blockDim.x とすると x 座標の thread 数を参照することができる。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
198 同じように blockID 、 threadID の x 座標を参照することができる。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
199 blockDim.x * blockIdx.x + threadIdx.x とする事で OpenCL における get\_global\_id(0) で
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
200 取得できる ID に相当する値を算出する事ができる。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
201
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
202 例としてある kernel で get\_global\_id(0) の値が 8 の時、
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
203 CUDA では 図\ref{fig:calculateIndex}のように算出する。
0
aae08d907517 first commit
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
204
aae08d907517 first commit
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
205
2
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
206 \begin{figure}[htpb]
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
207 \begin{center}
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
208 \includegraphics[scale=0.5]{./images/calculateIndex.pdf}
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
209 \end{center}
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
210 \caption{Calculate Index example}
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
211 \label{fig:calculateIndex}
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
212 \end{figure}
1
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
213
2
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
214 \section{StarPU}
3
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
215 StarPUはフランス国立情報学自動制御研究所 (INRIA) の StarPU 開発チームの提供する、
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
216 ヘテロジニアス環境向けのフレームワークである。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
217 GPU の制御に OpenCL と CUDA を用いており、どちらかを選択することで GPU 上で実行することができる。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
218
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
219 OpenCL と CUDA における実行の単位は kernel だったが、 StarPU では実行の単位を Task と定義している。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
220
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
221 StarPU では Task を制御するためにcodeletと呼ばれる構造体を使う。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
222 codelet を Task 生成時にポインタ渡しすることで、
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
223 演算を行うリソースや実行する関数等を指定することができる。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
224 CPU と GPU で並列に実行する例を\ref{src:codelet}に示す。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
225
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
226 \begin{lstlisting}[frame=lrbt,label=src:codelet,caption=codeletの例,numbers=left]
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
227 starpu_codelet codelet = {
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
228 .where = STARPU_CPU|STARPU_CUDA,
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
229 .cpu_func = cpu_function,
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
230 .cuda_func = cuda_function,
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
231 };
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
232 \end{lstlisting}
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
233
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
234 計算に必要なデータは、 StarPU のデータプールに登録されている必要がある。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
235 StarPU ではデータを starpu\_data\_handle という型で登録する。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
236 Task はこの handle を参照することで値を参照することができる。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
237
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
238 \begin{figure}[htpb]
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
239 \begin{center}
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
240 \includegraphics[scale=0.5]{./images/starpu_data_parallel.pdf}
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
241 \end{center}
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
242 \caption{StarPUにおけるデータ分割}
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
243 \label{fig:data_partition}
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
244 \end{figure}
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
245
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
246 図:\ref{fig:data_partition}に StarPU におけるデータ並列実行の流れを示す。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
247 StarPU では配列の初期化や代入を行った後、
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
248 starpu\_data\_register 関数を使って StarPU のデータプールに登録する。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
249
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
250 データ並列で実行する場合、更にデータを分割する必要がある。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
251 starpu\_data\_partition 関数を用いる事で分割を行うことができる。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
252 分割数を指定することで、データプールに登録したデータを chunk と呼ばれる単位に分割する。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
253 starpu\_task\_submit 関数により chunk を CPU や GPU に割り当てることができる。