view dev.tex @ 14:1724cf56d9cb default tip

update tags
author convert-repo
date Mon, 10 Nov 2008 05:00:05 +0000
parents cb1b97f81a4b
children
line wrap: on
line source

\section{並列プログラムの開発行程} \label{sec:debug}
並列プログラミングでは、以下の段階において、それぞれ実装とテストを行う
(\figref{fig:dev-step})。

\begin{figure}[tb]
  \begin{center}
    \includegraphics[scale=0.35]{figure/step.pdf}
    \caption{並列プログラムの開発行程}
    \label{fig:dev-step}
  \end{center}
\end{figure}

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


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

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

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

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

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

第 \ref{sec:tm} 節から説明する TaskManager は、
以上の開発行程をサポートしたフレームワークとなる。