view dev.tex @ 3:3ee6deaab278

*** empty log message ***
author gongo
date Mon, 14 Jul 2008 16:28:37 +0900
parents d40dd97c0a50
children a927f08d51e2
line wrap: on
line source

\section{TaskManager を用いた並列プログラムの開発行程} \label{sec:debug}
TaskManager を用いたプログラムの作成では、
以下の段階において、それぞれ実装とテストを行う。

\begin{enumerate}
\item C によるシーケンシャルな実装 \label{list_dev1}
\item TaskManager を考慮したデータ構造を持つ実装 \label{list_dev2}
\item コードをタスクに分割し、シーケンシャルに実行する実装 \label{list_dev3}
\item タスクを並列実行する実装 \label{list_dev4}
\end{enumerate}


段階 (\ref{list_dev1}) の実装は Task Manager を用いず、
プログラムのアルゴリズムの信頼性を確認するために用いる。

段階 (\ref{list_dev2}) ではコードをタスクに分割した際、
そのタスクが使用できるようなデータの変換が必要になり、
段階 (\ref{list_dev1}) と同じ結果を得られるかどうかを検証する。

段階 (\ref{list_dev3}) の実装からは Task Manager を用いる。
この段階まではアーキテクチャに依存しないので、
ターゲットが開発途中の段階でも記述することが可能である。
また、入力に対して出力が一意に決まる状況であり、テストは容易である。
シーケンシャルな実装であるため、デバッグも二分法により容易に行うことが出来る。

段階 (\ref{list_dev4}) では、段階 (\ref{list_dev3}) までが動いていれば
問題なく動作すると期待される。
問題が発生した場合、その原因と思われるタスクを見つけ、
一度段階 (\ref{list_dev3}) に戻した後、前後のタスクと合わせて
入出力データのチェックなどのテストしていくことが必要となる。

段階 (\ref{list_dev3}) から 段階 (\ref{list_dev4}) へのプログラムの変換は
非常に容易である。Task Manager の API である set\_cpu() を用いることにより、
Task をメインスレッドで実行するか、他 Core で実行するかを
明示的に書くことが出来るからである。