0
|
1 \section{ CbCでのCellのプログラムの流れ}
|
|
2
|
|
3 CbCを用いて、Many Core Architecture のプログラムを作成する
|
|
4 流れは以下のようになる。
|
|
5
|
|
6 {\small
|
|
7 \begin{verbatim}
|
|
8 1. C によりアルゴリズムをシーケンシャルに記述する
|
|
9 2. データを並列用に分割した構造に変更する
|
|
10 3. Cの記述をCbCの記述に変換する(必要な部分のみ。手動)
|
|
11 4. コードセグメントを並列実行用に分割する
|
|
12 5. FIFOスケジューラにより動作を確認する
|
|
13 6. SPUスケジューラによりCell上での動作を確認する
|
|
14
|
|
15 \end{verbatim}
|
|
16 }
|
|
17
|
|
18 これらの各過程すべてでエラーが入る可能性がある。また、
|
|
19 論理的なエラーだけなく、仕様に沿った十分な性能が出るか
|
|
20 どうかも検証する必要がある。
|
|
21
|
|
22 1 の段階は通常のCのプログラミングであり、この部分がちゃんと
|
|
23 動くことが必須である。この段階では、入力に対して出力が
|
|
24 一意に決まる状況であり、テストは容易である。バグも
|
|
25 実行トレースの二分法により容易に行うことが出来る。
|
|
26
|
|
27 4段階まではプログラム変換の問題であり、一つ前の段階と
|
|
28 同じ結果を得られるかどうか検証する必要がある。
|
|
29
|
|
30 5 段階以前はアーキテクチャに依存しないので、ターゲット
|
|
31 が開発途中の段階でも記述することが可能である。しかし、
|
|
32 5段階では、FIFOスケジューラの替わりに、Randomスケジューラ
|
|
33 などを使うことができ、並列実行特有の非決定的な実行が
|
|
34 導入される。
|
|
35
|
|
36 非決定的な実行は、クロックベースのハードウェアでは
|
|
37 入力の任意性から生じることが多い。ハードウェアでも
|
|
38 複数のタスクを使用したり、外界と相互作用する場合は
|
|
39 非決定的な実行が現れる。
|
|
40
|
|
41 段階5では、これらの非決定的な実行でも4段階までと
|
|
42 同じ仕様を満たすことを検証する必要がある。これは、
|
|
43 逐次型のプログラムでは出て来ない問題である。
|
|
44
|
|
45 段階6では、段階5まできちんと動いていれば、問題なく
|
|
46 動作すると期待される。しかし、FIFOスケジューラと
|
|
47 SPUスケジューラでは、同期機構の実現が異なることが
|
|
48 ある。これは、並列実行と同期機構のの粒度と意味論
|
|
49 が異なるために起きると考えられる。
|
|
50
|
|
51 ここで、段階1が仕様であり段階5が実装であると
|
|
52 考えることもできる。実際のプログラムとは別に、
|
|
53 実行時に満たして欲しい仕様の記述がある場合もある。
|
|
54 これらの記述は、例えば、「計算がいつか終る」
|
|
55 等の時相論理的な記述になる。時相論理としては、
|
|
56 LTTL\cite{wolper82}, CTL*\cite{synBTTL}, ITL\cite{kono93b}
|
|
57 などを使うことができる。
|
|
58
|
|
59
|