annotate cerium_dev.tex @ 8:b70a62630a57

*** empty log message ***
author gongo
date Tue, 25 Mar 2008 20:45:05 +0900
parents a46c6f313a0b
children fea1ac32de27
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
9216a2b217e6 *** empty log message ***
gongo
parents:
diff changeset
1 \section{開発過程}
6
a46c6f313a0b *** empty log message ***
gongo
parents: 4
diff changeset
2 Cerium を用いた開発では、以下の段階にそれぞれ実装とテストを行う。
2
9216a2b217e6 *** empty log message ***
gongo
parents:
diff changeset
3
9216a2b217e6 *** empty log message ***
gongo
parents:
diff changeset
4 \begin{enumerate}
9216a2b217e6 *** empty log message ***
gongo
parents:
diff changeset
5 \item C によるシーケンシャルな実装 \label{list_dev_1}
9216a2b217e6 *** empty log message ***
gongo
parents:
diff changeset
6 \item SPE を考慮したデータ構造 (PolygonPack, SpanPack) を持つ実装 \label{list_dev_2}
4
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
7 \item コードをタスクに分割し、FIFO キューでシーケンシャルに実行する実装 \label{list_dev_3}
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
8 \item タスクを SPE に割り当て並列実行する実装 \label{list_dev_4}
2
9216a2b217e6 *** empty log message ***
gongo
parents:
diff changeset
9 \end{enumerate}
9216a2b217e6 *** empty log message ***
gongo
parents:
diff changeset
10
4
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
11 段階 (\ref{list_dev_1}) の実装は Task Manager を用いず、
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
12 プログラムのアルゴリズムの信頼性を確認するために用いる。
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
13
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
14 段階 (\ref{list_dev_2}) ではデータの変換が必要になり、
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
15 段階 (\ref{list_dev_1}) と同じ結果を得られるかどうかを検証する。
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
16 この段階までは、入力に対して出力が一意に決まる状況であり、テストは容易である。
2
9216a2b217e6 *** empty log message ***
gongo
parents:
diff changeset
17 シーケンシャルな実装であるため、デバッグも二分法により容易に行うことが出来る。
9216a2b217e6 *** empty log message ***
gongo
parents:
diff changeset
18
4
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
19 段階 (\ref{list_dev_3}) の実装からは Task Manager を用いる。
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
20 この段階まではアーキテクチャに依存しないので、
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
21 ターゲットが開発途中の段階でも記述することが可能である。
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
22 また、FIFO スケジューラを用いずに Random スケジューラを実装することにより、
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
23 並列実行特有の非決定的な実行が導入される。
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
24 非決定的な動作においても、段階 (\ref{list_dev_2}) までと同じ仕様を
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
25 満たすことを検証する必要がある。
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
26 これは、逐次型プログラムでは出て来ない問題である。
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
27
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
28 段階 (\ref{list_dev_4}) では、段階 (\ref{list_dev_3}) までが動いていれば
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
29 問題なく動作すると期待される。また、SPE タスクを、
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
30 SPE が持つ命令セットを用いて最適化することにより、更なる性能向上が期待できる。
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
31
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
32 段階 (\ref{list_dev_3}) から 段階 (\ref{list_dev_4}) へのプログラムの変換は
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
33 非常に容易である。Task Manager の API である set\_cpu() を用いることにより、
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
34 Task を PPE で実行するか SPE で実行するかを明示的に書くことが出来るからである。
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
35
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
36 {\small
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
37 \begin{verbatim}
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
38
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
39 Task *task1 = create_task(cmd1,siz1,in1,out1);
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
40 Task *task2 = create_task(cmd2,siz2,in2,out2);
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
41
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
42 task1->set_cpu(CPU_PPE); // PPE 上で実行される
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
43 task2->set_cpu(CPU_SPE); // SPE 上で実行される
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
44
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
45 \end{verbatim}
869c475cc108 *** empty log message ***
gongo
parents: 3
diff changeset
46 }