annotate paper/chapter1.tex @ 55:48db1f674a83

update pdf
author Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
date Tue, 17 Feb 2015 13:47:08 +0900
parents 417431560eed
children f9b73e12a52f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
55
48db1f674a83 update pdf
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 33
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
33
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
6 \section{GPU/Cell の Architecture}
31
f0060254db3f fix introduction
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
7 \label{sec:shared_memory}
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
8 本研究では、 CPU の他に GPU 上でのプログラミング (GPGPU) にも対応する。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
9
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
10 GPU(Graphics Processing Unit) は PC の画像処理を担当するユニットで、
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
11 レンダリングに特化したプロセッサが多く集まった構造を持つ。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
12 一つ一つのプロセッサの構造は単純で、その機能は CPU に比べて限定的ではあるが
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
13 大量のデータを複数のプロセッサで並列処理することに長けている。
31
f0060254db3f fix introduction
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
14 つまり、データ並列による実行を行った際、特に GPU の性能を充分に発揮できる。
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
16 GPGPU (General Purpose computing on Graphics Processing Units) とは、
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
17 GPU の高い演算能力を画像処理ではなく汎用計算に使用することである。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
18
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 \begin{figure}[htpb]
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
28 \begin{center}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
29 \includegraphics[scale=0.4]{./images/gpu_arch.pdf}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
30 \end{center}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
31 \caption{GPU Architecture}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
32 \label{fig:gpuarch}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
33 \end{figure}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
34
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
35 \begin{figure}[htpb]
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
36 \begin{center}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
37 \includegraphics[scale=0.8]{./images/cpu_arch.pdf}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
38 \end{center}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
39 \caption{CPU Architecture}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
40 \label{fig:cpuarch}
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
41 \end{figure}
33
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
42
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
43 Shared Memory でないプロセッサとして、Cell が挙げられる。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
44
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
45 Cell は1基の制御系プロセッサコア PPE ( PowerPC Processer Element ) と
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
46 8基の演算系プロセッサコア SPE ( Synergistic Processer Element ) で構成される。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
47 各プロセッサコアはEIB (Element Interconnect Bus ) と呼ばれる高速なバスで接続されている。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
48 また、 EIB はメインメモリや外部入出力デバイスと接続されており、
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
49 各プロセッサコアは EIB を経由してデータアクセスを行う。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
50 PPE、SPE、メインメモリ、EIB の構成図を図:\ref{fig:cell_arch}に示す。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
51 \begin{figure}[htpb]
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
52 \begin{center}
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
53 \includegraphics[scale=0.8]{./images/cell_arch.pdf}
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
54 \end{center}
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
55 \caption{Cell Architecture}
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
56 \label{fig:cell_arch}
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
57 \end{figure}
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
58
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
59 \newpage
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
60 %--------
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
61 % OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
62 %--------
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
63
0
aae08d907517 first commit
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 \section{OpenCL}
3
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
65 OpenCL とは、 Khronos Group の提供するマルチコア CPU と GPU といった、
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
66 ヘテロジニアス環境を利用した並列計算を支援するフレームワークである。
1
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
67
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
68 OpenCL では演算用プロセッサ側を Device 、制御用デバイス側を Host として定義する。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
69 また、 Device 上で動作するプログラムの事を kernel と呼ぶ。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
70
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
71 OpenCL では、デバイスの操作に Command Queue を使用する。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
72 Command Queue は Device に命令を送るための仕組みである。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
73 Command Queue は clCreateCommandQueue という OpenCL API で作成され、
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
74 Command Queue が所属するコンテキストや実行対象となる Device を指定する。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
75
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
76 kernel の実行、input data への書き込み、 output data の読み込みといった
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
77 メモリ操作はこの Command Queue を通して行われる。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
78
1
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
79 OpenCL には主に2つの仕様がある。
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
80
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
81 \begin{itemize}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
82 \item OpenCL C言語
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
83 \item OpenCL Runtime API
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
84 \end{itemize}
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
85
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
86 OpenCL C は演算用プロセッサ上で動作する、 C 言語を拡張したプログラミング言語である。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
87 一方で 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
88
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
89 Host では主に Data を input/output するメモリ資源の確保を行う。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
90 OpenCL は host 側で memory buffer を作成してメモリのコピーを行う。
1
d84b6a97a86a Survey OpenCL
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
91 これらの処理や Task は Command Queue に enqueue することで実行される。
13
6277bb3a73e9 remove subsection
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
92
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
93
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
94 %------
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
95 % CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
96 %------
2
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
97 \section{CUDA}
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
98 CUDA とは、半導体メーカーNVIDIA社が提供するGPUコンピューティング向けの総合開発環境である。
0
aae08d907517 first commit
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
100 CUDA も OpenCL と同様、演算用プロセッサ (GPU) を Device 、制御用デバイス側を Host として定義する。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
101 また、 Device 上で動作するプログラムの事も kernel と呼ぶ。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
102
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
103 OpenCL における Command と CommandQueue に対応するものとして、 CUDA には Operation と Stream がある。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
104 Stream は Host 側で発行された Operation を一連の動作として Device で実行する。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
105 Operation は発行された順序で実行されることが保証されている。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
106 更に、異なる Stream に発行された Operation も依存関係が存在しない場合、Operationは並列に実行される。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
107 更に依存関係が存在しない、異なる Stream に発行された Operation は並列に実行される。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
108
2
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
109 CUDAには主に3つの仕様がある。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
110
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
111 \begin{itemize}
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
112 \item CUDA C
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
113 \item CUDA Runtime API
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
114 \item CUDA Driver API
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
115 \end{itemize}
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
116 CUDA C は GPU 上で動作する、C 言語を拡張したプログラミング言語である。
15
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
117 CUDA Runtime API も CUDA Driver API も CUDA C で記述した Kernel を Queueing するために
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
118 Host が利用するAPIである。
2
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
119 Driver API は Runtime APIに比べ、プログラマが管理しなければならないリソースが多くなる代わり、
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
120 より柔軟な処理を行う事ができる。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
121
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
122 Stream は cuStreamCreate という Driver API で生成される。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
123 引数に Stream を指定しない API は全て host 側をブロックする同期的な処理となる。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
124 複数の Stream を同時に走らせ、 Operation を並列に実行するためには非同期的な処理を行う API を利用する必要がある。
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
125
d29d75425bb0 survey CUDA
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
126 \section{StarPU}
3
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
127 StarPUはフランス国立情報学自動制御研究所 (INRIA) の StarPU 開発チームの提供する、
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
128 ヘテロジニアス環境向けのフレームワークである。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
129 GPU の制御に OpenCL と CUDA を用いており、どちらかを選択することで GPU 上で実行することができる。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
130
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
131 OpenCL と CUDA における実行の単位は kernel だったが、 StarPU では実行の単位を Task と定義している。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
132
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
133 StarPU では Task を制御するためにcodeletと呼ばれる構造体を使う。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
134 codelet を Task 生成時にポインタ渡しすることで、
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
135 演算を行うリソースや実行する関数等を指定することができる。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
136 CPU と GPU で並列に実行する例を\ref{src:codelet}に示す。
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
137
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
138 \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
139 starpu_codelet codelet = {
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
140 .where = STARPU_CPU|STARPU_CUDA,
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
141 .cpu_func = cpu_function,
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
142 .cuda_func = cuda_function,
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
143 };
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
144 \end{lstlisting}
72a886017b76 survey StarPU
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
145
33
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
146 \section{Cell Broadband Engine}
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
147 Cell Broadband Engine は、
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
148 ソニー・コンピュータエンタテイメント、ソニー、IBM 、東芝によって開発されたプロセッサである。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
149 Cell は PPE と SPE によって構成されており、これらは OpenCL や CUDA で言うところの Device にあたる。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
150 PPE は Cell Broadband Engine のメインプロセッサで、
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
151 複数の SPE をコアプロセッサとして使用できる汎用プロセッサである。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
152 メインメモリや外部デバイスへの入出力、SPE を制御する役割を担っている。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
153
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
154 SPE は PPE によって制御される演算系のプロセッサである。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
155 \ref{sec:shared_memory}節でも述べた通り、 SPE からメインメモリへ直接アクセスすることはできず、
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
156 DMA (Direct Memory Access) 転送によってアクセスを行う。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
157 DMA 転送とは CPU を介さずに周辺装置とメモリとの間でデータ転送を行う事で、
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
158 SPE が持っているコントローラが DMA Controller と通信することで行われる。手順としては以下のようになる。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
159
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
160 \begin{enumerate}
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
161 \item SPE で起動しているプログラムが、コントローラに対して DMA 転送命令を発行
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
162 \item SPE の持つコントローラが DMA Controller を介して DMA 転送を開始。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
163 この間 SPE で起動しているプログラムは停止しない
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
164 \item 転送が開始したら、SPE プログラムが転送の完了を待つ
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
165
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
166 \end{enumerate}
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
167
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
168 Cell の PPE には主に2つの仕様がある。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
169
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
170 OpenCL には主に2つの仕様がある。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
171
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
172 \begin{itemize}
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
173 \item SPU 拡張 C/C++
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
174 \item libSPE2
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
175 \end{itemize}
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
176
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
177 SPE 上で動作する、拡張された C/C++ の言語を用いる。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
178 通常の C/C++ 言語との違いは DMA 転送、SIMD 演算(加算、減算、乗算)に対応していることが挙げられる。
417431560eed benchmark data parallel
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
179 一方で libSPE2 は PPE が SPE を制御するためのライブラリ群である。