changeset 14:091d888f7729

*** empty log message ***
author gongo
date Thu, 27 Mar 2008 02:24:48 +0900
parents a91e95964045
children 6c558cd2ac8b
files cerium-manager.tex cerium_dev.tex osmesa.tex sigos2008.pdf
diffstat 4 files changed, 58 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/cerium-manager.tex	Thu Mar 27 00:48:54 2008 +0900
+++ b/cerium-manager.tex	Thu Mar 27 02:24:48 2008 +0900
@@ -53,9 +53,6 @@
     task2 = create_task(CMD_RUN2, size2,
                         in_addr2, out_addr2);
 
-    // task2 は task1 が終了してから開始する
-    task2->set_depend(task1);
-
     task1->spawn();
     task2->spawn();
 
@@ -67,11 +64,11 @@
 \end{verbatim}
 }
 
+ここからは、Task Manager を構成する特徴について述べる。
 
 \subsubsection{Task の定義}
 タスクの定義を以下に示す。
 
-{\small
 \begin{verbatim}
 
     class Task {
@@ -85,13 +82,17 @@
 
     class HTask : public Task {
     public:
+        // 自分を待っているタスクキュー
         TaskQueue wait_me;
+
+        // 自分が待つタスクキュー
         TaskQueue wait_i;
+
+        // 実行する CPU 
         CPU_TYPE  cpu_type;
     };
 
 \end{verbatim}
-}
 
 Task クラスは SPE が実行するタスクの単位オブジェクトである。
 SPE はメインメモリの \verb|in_addr| から DMA で入力データを取得し、
@@ -99,6 +100,15 @@
 結果を メインメモリの \verb|out_addr| に DMA で送信する。
 これらの処理はパイプラインに沿って動作する (\ref{sec:pipeline}) 。
 
+また、SPE が Task を取得する際、一つずつではなく、Task の集合である
+TaskList を DMA で取得する。DMA の回数を抑えることで
+実行速度を上げるためであるが、TaskList のサイズを大きくしすぎると
+SPE の LS に入らなくなる可能性がある。本研究で並列に実行するタスクの数は、
+\figref{fig-cerium} の (SceneGraph $\rightarrow$ Polygonpack) タスクと
+(PolygonPack $\rightarrow$ SpanPack) タスク、そして SpanPack の数 $\times$
+Rendering タスクとなる。そのため、SPE を 6 個使うと考えると
+TaskList に格納する Task の数は最大で 25 としている。
+
 HTask クラスは TaskManager で管理する実行前のタスクオブジェクトである。
 \verb|wait_me, wait_i| はタスク依存の条件 (\ref{sec:task}) に、
 \verb|cpu_type| は PPE と SPE のタスクの切り替え (\ref{sec:change}) に用いる。
@@ -110,7 +120,6 @@
 DMA は CPU を介さず直接データ転送を行う方式である。
 SPE は DMA 完了を待たずに他の処理を行うことが出来るので、
 DMA のレイテンシを隠すことが出来る。
-
 また、ダブルバッファリングを行うことで
 パイプライン処理が可能となる (\figref{fig-pipeline}) 。
 
@@ -122,10 +131,12 @@
   \end{center}
 \end{figure}
 
-パイプライン処理を入れた Task Manager の Scheduler を以下に示す。
+パイプライン処理を入れたスケジューラを以下に示す。
 
 \begin{verbatim}
 
+    SpeTaskBase *task1, *task2, *task3;
+
     do {
         task3->write();
         task2->exec();
@@ -134,11 +145,14 @@
         taskTmp = task3;
         task3 = task2;
         task2 = task1;
-        task1 = task1->next(this, taskTmp);
+        task1 = task1->next();
     } while (task1);
 
 \end{verbatim}
 
+TaskList にある Task が全て終了し、PPE からプログラム終了のメッセージを
+受け取ったら while 文を抜ける。
+
 Task Manager を \figref{fig-cerium} に適用させると、
 \figref{fig-manager-pipeline} のようにパイプライン的に動作する。
 
@@ -150,7 +164,19 @@
   \end{center}
 \end{figure}
 
-\subsubsection{Dependency}  \label{sec:task}
+SpeTaskBase クラスは、スケジューラによって実行されるオブジェクトである。
+スケジューラ自身のタスクとして、以下のようなタスクがある。
+これらのオブジェクトは全て SpeTaskBase を継承している。
+
+\begin{itemize}
+\item SpeMail : PPE からのメッセージを待つ
+\item SpeTaskList : PPE から TaskList を取得する
+\item SpeTask : TaskList にある Task を実行する
+\item SpeExit : SPE を終了させる
+\end{itemize}
+
+
+\subsubsection{タスク依存}  \label{sec:task}
 Task Manager はタスク依存を解決する機能を持っている。
 以下は記述例である。
 
@@ -169,11 +195,15 @@
 アクティブキューに入れ、SPE を再び起動する。
 
 \subsubsection{PPE コードと SPE コードの互換性} \label{sec:change}
-Cerium では、 SPE を用いる Cell 上でのみ動作するプログラムの他に、
-Linux や Mac OS X などで動く、アーキテクチャに依存しないプログラムを
+Cerium では、 SPE を用いる Cell 上でのみ動作する SPE プログラムの他に、
+Linux や Mac OS X などで動く、アーキテクチャに依存しない FIFO プログラムを
 記述することが可能である。
-依存しないプログラムの場合、スケジューラはもちろんメインメモリ上で
-動作する。パイプライン処理は SPE と
+FIFO プログラムの場合、スケジューラはメインメモリ上で動作する。
+DMA 命令は、バッファのアドレス参照によりシミュレートする。
+パイプライン処理も、SPE プログラムと同様の動作を行う。
+
+Task Manager には、タスクを PPE、SPE のどちらで動かすかを決める
+機能がある (\verb|set_cpu|) 。
 
 {\small
 \begin{verbatim}
@@ -184,6 +214,19 @@
 \end{verbatim}
 }
 
+これを用いることにより、環境依存によるプログラム変換は
+分割したタスクの部分だけとなり、全体の変換は必要ない。
+
+このことはデバッグにおいても有効である。
+デバッグが困難な並列プログラムである SPE プログラムの前に、
+まずは FIFO プログラムで開発を進める。
+FIFO プログラムはシーケンシャルな記述なため、
+二分法を用いたデバッグが可能となる。
+仕様やアルゴリズムの正しさを確認できたら、SPE プログラムに移行する。
+デバッグに関する詳細は第 \ref{cerium_dev} 節で述べる。
+
+
+
 \subsubsection{PPE と SPE 間の同期}
 \ref{sec:task} で述べたように、PPE から SPE へはタスクの実行命令を、
 SPE から PPE へはタスクの終了などを伝える必要がある。
--- a/cerium_dev.tex	Thu Mar 27 00:48:54 2008 +0900
+++ b/cerium_dev.tex	Thu Mar 27 02:24:48 2008 +0900
@@ -1,4 +1,4 @@
-\section{Cerium によるゲーム開発}
+\section{Cerium によるゲーム開発} \label{cerium_dev}
 Cerium 自身や Cerium を用いた開発では、以下の段階にそれぞれ実装とテストを行う。
 
 \begin{enumerate}
--- a/osmesa.tex	Thu Mar 27 00:48:54 2008 +0900
+++ b/osmesa.tex	Thu Mar 27 02:24:48 2008 +0900
@@ -1,4 +1,4 @@
-\section{OSMesa/SDL を用いたゲームプログラミング}
+\section{OSMesa/SDL を用いた Cell 上でのゲームプログラミング}
 先行研究 \cite{akira} では、Frame Buffer Engine 用のレンダリングエンジンである
 OSMesa \cite{osmesa} と、マルチメディアライブラリの SDL \cite{sdl} の二つを
 用いて開発を行った。
Binary file sigos2008.pdf has changed