annotate paper/chapter5.tex @ 4:6cf0f731cbde draft

fix
author Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
date Wed, 08 Feb 2012 21:49:40 +0900
parents 5dbcea03717e
children b69eefd9156e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \chapter{デバック}
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 並列プログラムの特徴として、デバッグが難しいことが挙げられる。実行が非決定的 (同じ状態で実行しても結果が異なる) な場合があり、バグの状態を再現することが難しい。また、個々の Core 上のデータを調べる必要があり、デバッガが複数の Core を取り扱えることが必須である。Cell の場合、動作している複数 の SPE の一つに対してgdb で breakpoint を掛ければ、PPE や他の SPE も同時にストップするが、それら全ての CPU を手動で管理するのは時間がかかる。また、PPE と SPE ではメモリ空間が違うため、SPE から直接 PPE のデータを見ることができない。
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 Cerium での開発工程は、
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 \begin{enumerate}
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 \item C によるシーケンシャルな実装
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 \item 並列実行を考慮したデータ構造を持つ実装
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 \item コードを分割し、シーケンシャルに実行する実装
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 \item 分割したコードを並列実行する実装
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 \end{enumerate}
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 となっている。逐次的な実行で正常な動作を確認した後、並列に実行した場合に正常な動作をしない場合がある。特にCell特有の問題としてデータ構造が DMA 転送に合っていないこと。つまり、DMA転送される際に、16アライメントに設定されていないか、データのサイズが16の倍数になっていない場合に注意しなければならない。またCeriumではコードがそれぞれ PPE 用と SPE 用が別個に存在するので、互いのコードが等価であるかもチェックしなければならない。一つのコードに統一しても良いが、別個で対応したい問題がでた時に対応してる。
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 バグの例として、本来 SPE で動くべき Task が PPE で動作するなど、Task のスケジューリングでのバグ、Task の設定の際のバグなどがある。