view student.tex @ 4:9cd21bb81105

*** empty log message ***
author gongo
date Mon, 14 Jul 2008 17:58:53 +0900
parents 3ee6deaab278
children 6458878b4526
line wrap: on
line source

\section{学生によるTaskManagerを用いた開発}
4月から6月にかけて、学生に TaskManager を用いて
簡単な並列プログラムを書いてもらった。
開発環境は Mac OS X と PS3 Linux である。
ここでは学生の反応について報告する。

\subsection{タスクの概念}
最初は Hello, World のプログラムを書かせた。
通常のCのプログラムと違い、「Hello, World」を表示させる部分を
タスクとして記述する、そのタスクを SPE 上で実行するということが
理解しきれない学生がいた。
TaskManager の仕様だけでなく、Cell のような並列実行環境についても
学ぶ必要があった。

\subsection{タスクへのデータ入出力}
SPE へ整数の配列を DMA で送り、各要素を2倍にして
PPE へ DMA で戻すというプログラムを書かせた。
Cell の DMA にはアライメントの問題があり、
Cell の仕様を理解しきれていない学生が居た。
TaskManager ではその部分を意識させないようにしている
(\tabref{tab:tm-api}:\verb|TaskManager::allocate(size);|)。

\subsection{画像の拡大縮小回転、色の変換}
文献\Cite{gongo2} の TaskManager では、
タスクに対して入出力は一つずつしか設定できなかった。
しかし、画像の複数の行を読み込む際、メモリアドレスに間が出来るため、
一つの入力出力では足りないという学生からの意見があった。
そこで新たに、複数の入出力を設定できる \verb|add_inData()、add_outData()|
を追加した。これらで設定したデータはリスト構造になっており、
Cell の場合、 MFC List DMA \cite{cell} の機能を使用してDMA を行っている。

また、送ったピクセルデータの長さやその他のパラメータも送りたいという意見から、
32ビットパラメーターを複数送れる \verb|add_param()| というAPIを追加した。

画像の読み込みは SDL \cite{sdl} を使用しており、
最初学生は生成された SDL のデータ構造 (SDL\_Surface) を
そのまま SPE に送っていた。
SDL\_Surface にあるピクセルデータはアドレスしか無く、実体はPPE 側にしかない。
しかし、SPE 側で PPE と同じようにそのアドレスを読みに行くということをする
学生が多かった。ここでも SPE の仕様に関して学ぶ必要があった。

その問題を回避するために、アドレスではなくデータを、SDL\_Surface ではなく、
自分たちが作ったタスクに合うようなデータ構造への変換を行った。

\subsection{ソートプログラム}
整数のデータをソートするプログラムである。
データ全てを SPE に送った場合、SPE のメモリ容量では足りない可能性がある。
そこで、データを分割して、それらのブロック毎にSPEに送ってソートする。
次に、隣り合ったブロック同士でソートを行う、
というのを繰り返す (\figref{fig:sortq})。

\begin{figure}[tb]
  \begin{center}
    \includegraphics[scale=0.30]{figure/sort_q.pdf}
    \caption{Sort Program}
    \label{fig:sortq}
  \end{center}
\end{figure}

このソートプログラムの実行速度を、SPE の個数を変えて出力した
(\figref{fig:sort})。

\begin{figure}[tb]
  \begin{center}
    \includegraphics[scale=0.55]{figure/sort.pdf}
    \caption{Sort 実行結果}
    \label{fig:sort}
  \end{center}
\end{figure}