annotate manycore.tex @ 9:cb1b97f81a4b

*** empty log message ***
author gongo
date Mon, 14 Jul 2008 21:20:19 +0900
parents 6458878b4526
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
1 \section{Many Core 上のプログムの特徴}
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
2 従来の逐次型のプログラムでは、Cell といった Many Core の性能を
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
3 十分に引き出すことは出来ない。
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
4
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
5 \subsection{定常的な並列度の必要性}
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
6 並列実行には Amdahl 則 \cite{amdahl} があり、
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
7 プログラムの並列化率が低ければ、その性能を生かすことは出来ない。
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
8 0.8 程度の並列化では、6 CPU でも
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
9 3 倍程度の性能向上しか得られない (\figref{fig-amdahl}) 。
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
10
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
11 \begin{figure}[tb]
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
12 \begin{center}
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
13 \includegraphics[scale=0.56]{figure/amdahl.pdf}
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
14 \caption{Amdahl 則}
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
15 \label{fig-amdahl}
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
16 \end{center}
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
17 \end{figure}
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
18
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
19 高い並列度ではなくとも、恒常的に並列度を維持する必要がある。
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
20 このため、逐次型のプログラムの一部を並列化するという手法では不十分である。
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
21 LSI などのハードウェアの場合は、演算の対象がもともと
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
22 多量の演算とデータパスを持つので、並列計算の効果を
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
23 定常的に得られることが多い。しかし、C 等で記述されたプログラムでは、
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
24 for 文や配列のアクセス等に並列性が隠されてしまい、それを引き出すことが難しい。
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
25
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
26 プログラム中の並列度は、主に二つの形で取り出すことが出来る。
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
27
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
28 \begin{itemize}
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
29 \item データ並列 :
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
30 配列や木の中の個々の要素に対して並列に実行する
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
31 \item パイプライン処理 :
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
32 複数の逐次処理の隣同士を重ねて実行する
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
33 \end{itemize}
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
34
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
35 この二つを同時に用いることで、定常的な並列度を維持することが
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
36 可能となることがある。パイプライン処理は、
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
37 プログラム中で階層的に使われることが多い。
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
38
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
39 データ並列とパイプライン処理を可能にするためには、
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
40 プログラムとデータの適切な分割を行う必要がある。
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
41 for 文、あるいは、木をだとって処理する個々のステートメントがプログラムの
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
42 分割の対象となる。
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
43
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
44 \subsection{デバッグ  }
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
45 並列プログラムの特徴として、デバッグが難しいことも挙げられる。
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
46 実行が非決定的(同じ状態で実行しても同じ結果が異なる)場合があり、
d40dd97c0a50 Initial revision
gongo
parents:
diff changeset
47 バグの状態を再現することが難しい。
5
6458878b4526 *** empty log message ***
gongo
parents: 0
diff changeset
48 例えば Cell の場合、複数動いている SPE の一つに対して
6458878b4526 *** empty log message ***
gongo
parents: 0
diff changeset
49 gdb で breakpoint を掛けても、他の SPE は動き続けるし、
6458878b4526 *** empty log message ***
gongo
parents: 0
diff changeset
50 全ての SPE を手動で管理するのは非常に厳しい。
6458878b4526 *** empty log message ***
gongo
parents: 0
diff changeset
51 また、PPE と SPE ではメモリ空間が違うため、SPE から直接 PPE のデータを
6458878b4526 *** empty log message ***
gongo
parents: 0
diff changeset
52 見る事ができない。