Mercurial > hg > Papers > 2008 > gongo-ess
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 は、 以上の開発行程をサポートしたフレームワークとなる。