changeset 3:3ee6deaab278

*** empty log message ***
author gongo
date Mon, 14 Jul 2008 16:28:37 +0900
parents 44fb87ea539a
children 9cd21bb81105
files cerium.tex compare.tex ess2008.bib ess2008.tex student.tex task_manager.tex
diffstat 6 files changed, 87 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/cerium.tex	Mon Jul 14 13:30:06 2008 +0900
+++ b/cerium.tex	Mon Jul 14 16:28:37 2008 +0900
@@ -23,6 +23,8 @@
 行う。さらに、この 3 つのタスクは表示画面毎にパイプライン的に実行される。
 そのため、Ceritum では並列度を維持することができる。
 
+Cerium は、C++ で実装されており、プログラム行数は 6075 行である。
+
 \subsection{Scene Graph}
 本研究では、ゲーム中の一つの場面 (Scene) を構成するオブジェクトやその振る舞い、
 ゲームのルールの集合を Scene Graph とする \cite{chiaki} 。
--- a/compare.tex	Mon Jul 14 13:30:06 2008 +0900
+++ b/compare.tex	Mon Jul 14 16:28:37 2008 +0900
@@ -36,16 +36,28 @@
 \tabref{tab:hyoka3} より、SPE の台数を増やす事によって、
 実行速度が向上しているのがわかる。
 しかし、正しく台数効果が出ているとは言えない。
-原因として
 
-\begin{enumerate}
-\item アルゴリズムのミス
-\item 効率的なデータ及びコード分割がされていない
-\item 全てのタスクを SPE 上で実行していない \label{list:d3}
-\end{enumerate}
+%%原因として
+%%
+%%\begin{enumerate}
+%%\item アルゴリズムのミス
+%%\item 効率的なデータ及びコード分割がされていない
+%%\item 全てのタスクを SPE 上で実行していない \label{list:d3}
+%%\end{enumerate}
+%%
+%%等といった事が考えられる。
+%%ここでは、原因(\ref{list:d3})について考察する。
 
-等といった事が考えられる。
-ここでは、原因(\ref{list:d3})について考察する。
+今回の実験環境で、SPE 上で実行している Rendering タスクの処理は、
+PPE から取得した Span から、実際に描画する RGB 値を計算して FrameBuffer に
+書き込む事である。将来的にシェーディングやアルファブレンディングを
+実装する事になるが、現在はそこまで多くの計算をしているわけではない。
+主に PPE からの大量の Span データの取得、
+そして FrameBuffer へのメモリコピーとなる。
+従って、今回の実験結果は、Rendering タスク内のメモリネックが
+影響しているものと考えられる。
+この事に関し、描画領域を広げ、メモリコピーの量を増やす事で
+検証していく必要がある。
 
 
 %その原因として、TaskManager の実装の不備があげられる。
@@ -59,9 +71,9 @@
 %全てのタスクを SPE 上で実行できるようになれば、
 %実行速度はさらに向上すると考えられる。
 
+また、Rendering のタスクだけを SPE 上で実行しているのは、
 SPE の 256KB という容量では、現在の Cerium の全てのタスクを
-SPE 上に乗せる事は出来ないため、\tabref{tab:hyoka1} のように
-Rendering のタスクだけを SPE 上で実行している。
+SPE 上に乗せる事が出来ないからである。
 これを回避するために、SPE プログラムの on-demand load の実装が必要となる。
 実装の方法として、以下のような手段が考えられる。
 
--- a/ess2008.bib	Mon Jul 14 13:30:06 2008 +0900
+++ b/ess2008.bib	Mon Jul 14 16:28:37 2008 +0900
@@ -31,6 +31,14 @@
 year = 2005
 }
 
+@article{gongo2,
+author = "{Wataru MIYAGUNI}",
+title = "{Cell 用の Fine-grain Task Manager の実装}",
+journal = "{情報処理学会 システムソフトウェアとオペレーティング・システム研究会}",
+year = 2008,
+month = April
+}
+
 @journal{chiaki,
 author = "{Chiaki SUGIYAMA}",
 title = "{SceneGraph と StatePattern を用いたゲームフレームワークの設計と実装}",
@@ -75,3 +83,9 @@
 journal = "{IBM PROVISION No.48}",
 year = 2006
 }
+
+@misc{sdl,
+author = "",
+title = "{Simple DirectMedia Layer}",
+howpublished = "\url{http://www.libsdl.org/}"
+}
\ No newline at end of file
--- a/ess2008.tex	Mon Jul 14 13:30:06 2008 +0900
+++ b/ess2008.tex	Mon Jul 14 16:28:37 2008 +0900
@@ -72,6 +72,7 @@
 \input{manycore}      % many core system
 \input{task_manager}  % Task Manager
 \input{dev}           % 開発過程
+\input{student}       % 学生の反応
 \input{cerium}        % Cerium
 \input{compare}       % 評価と考察
 \input{conclusion}    % まとめ
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/student.tex	Mon Jul 14 16:28:37 2008 +0900
@@ -0,0 +1,45 @@
+\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{ソートプログラム}
--- a/task_manager.tex	Mon Jul 14 13:30:06 2008 +0900
+++ b/task_manager.tex	Mon Jul 14 16:28:37 2008 +0900
@@ -10,13 +10,15 @@
   \hbox to\hsize{\hfil
   \begin{tabular}{c|l} \hline \hline
     create\_task & Task を生成する \\ \hline
+    run          & 実行 Task Queue の実行 \\ \hline
+    allocate     & 環境のアライメントを考慮した allocater \\ \hline
+    \hline
     add\_inData   & Task への入力データのアドレスを追加 \\ \hline
     add\_outData  & Task からのデータ出力先アドレスを追加 \\ \hline
     add\_param    & Task のパラメータ (32 bits) \\ \hline
     wait\_for    & Task の依存関係の考慮 \\\hline
     set\_cpu     & Task を実行する CPU の設定 \\ \hline
     spawn        & Task を実行 Task Queue に登録する \\ \hline
-    run          & 実行 Task Queue の実行 \\ \hline
   \end{tabular}\hfil}
 \end{table}