annotate paper/cell.tex @ 0:fd9154e03f46

thesis
author e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
date Sat, 13 Feb 2010 21:38:25 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
1 \chapter{CELL BROADBAND ENGINE} \label{chapter:cell}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
2
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
3 \section{Cell Broadband Engineの構造}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
4
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
5 ここでは研究、実験題材の対象となった Cell アーキテクチャについて説明する。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
6 Cell Broadband Engine \cite{cell} は、SCEI と IBM によって開発された
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
7 CPU である。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
8 2 thread の PPE (PowerPC Processor Element) と、8個の SPE
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
9 (Synergistic Processor Element) からなる 非対称なマルチコアプロセッサであり、
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
10 高速リングバス である EIB (Element Interface Bus) で構成されている。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
11 本研究で用いた PS3Linux (Fedora 10, Yellow Dog Linux 6.0) では、
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
12 6個の SPE を使う事ができる (\figref{cell_arch}) 。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
13
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
14 \begin{figure}[htb]
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
15 \begin{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
16 \includegraphics[scale=0.8]{./images/cell_arch.pdf}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
17 \end{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
18 \caption{Cell Broadband Engine Architecture}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
19 \label{fig:cell_arch}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
20 \end{figure}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
21
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
22
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
23
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
24 \section{PPE (PowerPC Processor Element)}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
25
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
26 PPE は Cell Broadband Engine のメインプロセッサで、複数の SPE を
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
27 コアプロセッサとして使用することができる汎用プロセッサである。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
28 メインメモリや外部デバイスへの入出力、SPEを制御する役割を担っている。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
29 PPU (PowerPC Processor Unit) は、
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
30 PPE の演算処理を行うユニットで、PowerPC アーキテクチャをベースとした
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
31 命令セットを持つ。PPSS (PowerPC Processor Storage Subsystem) は
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
32 PPU からメインメモリへのデータアクセスを制御する
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
33 ユニットである (\figref{cell_ppe}) 。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
34
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
35 \begin{figure}[htb]
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
36 \begin{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
37 \includegraphics[scale=0.8]{./images/cell_ppe.pdf}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
38 \end{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
39 \caption{PPE (PowerPC Processor Element)}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
40 \label{fig:cell_ppe}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
41 \end{figure}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
42
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
43 \section{SPE (Synergistic Processor Element)} \label{sec:cell_spe}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
44
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
45 SPE には 256KB の Local Store (LS) と呼ばれる、SPE から唯一、
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
46 直接参照できるメモリ領域があり、バスに負担をかける事無く
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
47 並列に計算を進めることが出来る。SPE からメインメモリへは、
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
48 直接アクセスすることは出来ず、SPE を構成する一つである
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
49 MFC (Memory Flow Controller) へ、チャネルを介して DMA (Direct Memory Access)
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
50 命令を送ることで行われる (\figref{cell_spe}) 。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
51
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
52 \begin{figure}[htb]
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
53 \begin{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
54 \includegraphics[scale=0.8]{./images/cell_spe.pdf}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
55 \end{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
56 \caption{SPE (Synergistic Processor Element)}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
57 \label{fig:cell_spe}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
58 \end{figure}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
59
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
60
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
61 \section{Cell の基本機能}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
62
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
63 \subsection{DMA}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
64 \ref{sec:cell_spe}節 で述べた通り、SPE は LS 以外のメモリに
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
65 直接アクセスすることができず、PPE が利用するメインメモリ上のデータに
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
66 アクセスするには DMA を用いる。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
67 DMA (Direct Memory Access) 転送とは、CPU を介さずに周辺装置と
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
68 メモリとの間でデータ転送ことで、Cell の場合は
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
69 メインメモリと LS 間でデータの転送を行う。手順としては以下の様になる。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
70
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
71 \begin{enumerate}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
72 \item SPE プログラムが MFC (Memory Flow Controller) に対して
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
73 DMA 転送命令を発行
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
74 \item MFC が DMA Controller を介して DMA 転送を開始。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
75 この間、SPE プログラムは停止しない。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
76 \item DMA 転送の終了を待つ場合、SPE プログラム内で転送の完了を待つ
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
77 \end{enumerate}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
78
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
79 この時、DMA 転送するデータとアドレスにはいくつか制限がある。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
80 転送データが 16 バイト以上の場合、データサイズは 16 バイトの倍数で、
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
81 転送元と転送先のアドレスが 16 バイト境界に揃えられている必要がある。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
82 転送データが 16 バイト未満の場合、データサイズは 1,2,4,8 バイトで、
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
83 転送サイズに応じた自然なアライメントである (転送サイズのバイト境界に
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
84 揃えられている) ことが条件となる。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
85
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
86 \subsection{SIMD (Single Instruction Multiple Data)}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
87 Cell では、SPE に実装されている 128 ビットレジスタを用いて
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
88 SIMD を行うことが出来る。SIMD とは、1 つの命令で
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
89 複数のデータに対して処理を行う演算方式である (\figref{cell_simd}) 。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
90
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
91 \begin{figure}[htb]
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
92 \begin{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
93 \includegraphics[scale=0.8]{./images/cell_simd.pdf}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
94 \end{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
95 \caption{SIMD (Single Instruction Multiple Data)}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
96 \label{fig:cell_simd}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
97 \end{figure}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
98
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
99 \figref{cell_simd} のスカラ演算は以下のような式に当てはまる。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
100
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
101 \begin{verbatim}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
102 int a[4] = {1, 2, 3, 4};
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
103 int b[4] = {5, 6, 7, 8};
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
104 int c[4];
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
105
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
106 for (int i = 0; i < 4; i++) {
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
107 a[i] + b[i] = c[i];
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
108 }
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
109 \end{verbatim}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
110
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
111 これに対し、SIMD 演算は以下のようになる。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
112
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
113 \begin{verbatim}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
114 vector signed int va = {1, 2, 3, 4};
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
115 vector signed int vb = {5, 6, 7, 8};
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
116 vector signed int vc;
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
117
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
118 vc = spu_add(va, vb);
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
119 \end{verbatim}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
120
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
121 Cell の SIMD 演算では、vector 型の変数を用いる。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
122
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
123 このように、通常は 4 回計算するところを 1 回の計算で行うことが
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
124 できる反面、すべての演算を 128 ビットで計算するため、なるべく
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
125 効果的に行う様に工夫する必要がある。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
126
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
127 \begin{verbatim}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
128 int a, b, c;
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
129
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
130 c = a + b;
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
131 \end{verbatim}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
132
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
133 この様な計算の場合でも 128 ビット同士の演算を行うため、無駄が生じる。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
134
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
135 \subsection{Mailbox} \label{sec:cell_mailbox}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
136
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
137 Mailbox とは SPE の MFC 内の FIFO キューであり、PPE と SPE 間の 32 ビット
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
138 メッセージの交換に用いられる。Mailbox では 3 つの振る舞いが
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
139 出来る様に設計されている (\figref{cell_mailbox}) 。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
140
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
141 \begin{figure}[htb]
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
142 \begin{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
143 \includegraphics[scale=0.8]{./images/cell_mailbox.pdf}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
144 \end{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
145 \caption{Mailbox}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
146 \label{fig:cell_mailbox}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
147 \end{figure}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
148
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
149 \begin{enumerate}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
150 \item SPU Inbound Mailbox \\
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
151 PPE から SPE へデータを渡すためのキュー。キューのエントリ数は
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
152 実装依存による \cite{cell} が、研究環境では最大4個までのデータを蓄積できる。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
153 このキューが空の場合は、SPE は、データがメールボックスに書き込まれるまでは、
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
154 命令でストールする。読み出すデータの順番は書き込んだ順番に保証されている。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
155 \item SPU Outbound Mailbox \\
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
156 SPE から PPE へのデータを渡すためのキュー。研究環境では最大1個までしか
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
157 データが蓄積できない。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
158 \item SPU Outbound interrupt Mailbox \\
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
159 SPU Outbound Mailbox とほとんど同じだが、このキューでは SPE から
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
160 キューにデータが書き込まれると、PPE に対して割り込みイベントが
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
161 発生し、データの読み出しタイミングを通知する事が出来る。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
162 \end{enumerate}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
163
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
164 \section{開発環境}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
165
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
166 \subsection{libSPE2}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
167
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
168 libSPE2 とは、PPE が SPE を扱うためのライブラリ群である \cite{libspe2} 。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
169 libSPE2 は SPE Context Creation、SPE Program Image Handling、
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
170 SPE Run Control、SPE Event Handling、SPE MFC Problem State Facilities、
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
171 Direct SPE Access for Applications という基本構成でできている。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
172 Cell の基本プログラムは次の様になる。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
173
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
174 \begin{enumerate}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
175 \item create N SPE context
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
176 \item Load the appropriate SPE executable object into each SPE context's local store
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
177 \item Create N threads
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
178 \item Wait for all N threads to terminate
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
179 \end{enumerate}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
180
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
181 \subsection{SPU C/C++ 言語拡張}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
182 SPE では基本的な C 言語の機能の他に、Cell 特有の拡張が行われている
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
183 \cite{cell_cpp} 。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
184 \tabref{cell_cpp} に主な API を記す。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
185
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
186 \begin{table}[htb]
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
187 \begin{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
188 \caption{SPU C/C++ 言語拡張 API}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
189 \label{tab:cell_cpp}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
190 \begin{tabular}{|l|l|}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
191 \hline
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
192 spu\_mfcdma32 & DMA 転送を開始する \\
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
193 \hline
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
194 spu\_read\_in\_mbox & PPE からの mail を取得する \\
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
195 \hline
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
196 spu\_write\_out\_mbox & PPE へ mail を送信する \\
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
197 \hline
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
198 spu\_add、spu\_sub、spu\_mul & SIMD 演算 (加算、減算、乗算) \\
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
199 \hline
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
200 \end{tabular}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
201 \end{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
202 \end{table}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
203
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
204 SPE を効率よく使う上で \tabref{cell_cpp} の様な Cell 特有の API や、
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
205 SPE アセンブラ命令を学ぶことが必要となる。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
206
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
207 \subsection{SPURS}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
208
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
209 ここでは、現在発表されている Cell の開発環境である SPURS について説明する。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
210
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
211 SPURS \cite{spurs} は、閉じた並列分散と考えることができる Cell の環境で、
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
212 いかに効率よく動作させるかということを考えたシステムである。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
213
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
214 Cell の性能を存分に生かすためには SPE を効率よく使い切ることであり、
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
215 SPE の動作を止めることなく、同期を最小限に行う必要がある。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
216 そこで SPURS では SPE を効率よく利用するために、PPE に依存せずに SPE コードを
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
217 選択し、実行することと機能は効率重視で割り切ることを挙げている。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
218 そのため、SPE 上にカーネルを組み込んでいる。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
219
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
220 アプリケーションを複数 SPE で実行するとき、アプリケーションプログラムを
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
221 出来るだけ小さな単位(タスク)に分割し、通信ライブラリを用いて
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
222 タスク間を依存関係で結合する。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
223 LS 常駐のカーネルが、実行可能なタスクを選んで実行していく
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
224 (\figref{cell_spurs_task}) 。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
225
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
226 \begin{figure}[htb]
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
227 \begin{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
228 \includegraphics[scale=0.6]{./images/cell_spurs_task}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
229 \end{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
230 \caption{SPURS Task}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
231 \label{fig:cell_spurs_task}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
232 \end{figure}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
233
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
234 %また、アプリケーションを分割するとき、プログラムがデータを伴うとき、
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
235 %ジョブに分割し、並べ替えた上で、カーネルがジョブリストから
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
236 %ジョブを取得して実行する。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
237
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
238 これらの処理はデータを扱うため、SPURS はパイプラインで実行される
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
239 (\figref{cell_spurs_pipeline}) 。
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
240
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
241 \begin{figure}[htb]
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
242 \begin{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
243 \includegraphics[scale=0.6]{./images/cell_spurs_pipeline}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
244 \end{center}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
245 \caption{SPURS Pipeline}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
246 \label{fig:cell_spurs_pipeline}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
247 \end{figure}
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
248
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
249 以上から、SPURS は複数の SPE を効率よく使うためのライブラリとして
e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
250 優れた物であると思われるが、現在一般には公開されていない。