changeset 4:869c475cc108

*** empty log message ***
author gongo
date Mon, 24 Mar 2008 23:10:27 +0900
parents 2ef36d40ee96
children 30bf38a518e8
files cerium-manager.tex cerium_dev.tex compare.tex figure/manager-pipeline.bb figure/manager-pipeline.graffle figure/manager-pipeline.pdf sigos.tex
diffstat 7 files changed, 118 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/cerium-manager.tex	Mon Mar 24 17:49:30 2008 +0900
+++ b/cerium-manager.tex	Mon Mar 24 23:10:27 2008 +0900
@@ -3,12 +3,14 @@
 管理するライブラリである。Task 同士の依存関係を考慮しながら
 メモリ上にマッピングし、SPE 上ではそのプログラムを
 DMA 転送によりロードする (\figref{fig-manager-load}) 。
-これは SPE の LS が 256 KB しかないため、必要なコードだけを使うように
-入れ替える必要がある。
+SPE は 256KB という小さなデータ量しか持てず、
+大量のプログラムを全て SPE 上に置いておくことはできない可能性がある。
+そのため、必要な時に必要な実行プログラムだけが SPE 上にロード
+されていることが望ましい。
 
 \begin{figure}[tb]
   \begin{center}
-    \includegraphics[scale=0.35]{figure/manager-load.pdf}
+    \includegraphics[scale=0.45]{figure/manager-load.pdf}
     \caption{Task Manager}
     \label{fig-manager-load}
   \end{center}
@@ -28,6 +30,40 @@
   \end{tabular}\hfil}
 \end{table}
 
+以下に Task Manager を使った記述を示す。
+
+{\small
+\begin{verbatim}
+int
+main(void)
+{
+    TaskManager *manager = new TaskManager;
+    Task *task1, *task2;
+
+    /**
+     * cmd  : 実行するタスクID
+     * size : in_addr で取得するデータのバイト数
+     * in_addr  : 入力データ元アドレス
+     * out_addr : 出力データ先アドレス
+     */
+    task1 = create_task(CMD_RUN1, size1,
+                        in_addr1, out_addr2);
+    task2 = create_task(CMD_RUN2, size2,
+                        in_addr2, out_addr2);
+
+    // task2 は task1 が終了してから開始する
+    task2->set_depend(task1);
+
+    task1->spawn();
+    task2->spawn();
+
+    manager->run();
+
+    return 0;
+}
+\end{verbatim}
+}
+
 \subsubsection{並列処理}
 
 Cell ではあらゆるレベルで並列に動作させることが求められる。
@@ -36,7 +72,7 @@
 直接参照することは出来ず、DMA 転送によりデータをやりとりする。
 DMA は CPU を介さず直接データ転送を行う方式である。そのため、
 DMA している間は SPE は何らかの処理を行うことが出来る。
-また、SPE に Input Buffer と Output Buffer を二つずつ用意することにより、
+また、ダブルバッファリングを行うことで
 パイプライン処理が可能となる (\figref{fig-pipeline}) 。
 
 \begin{figure}[tb]
@@ -47,10 +83,9 @@
   \end{center}
 \end{figure}
 
-Task Manager のパイプライン処理を \figref{fig-cerium} に適用させると、
+Task Manager を \figref{fig-cerium} に適用させると、
 \figref{fig-manager-pipeline} のようにパイプライン的に動作する。
 
-
 \begin{figure}[tb]
   \begin{center}
     \includegraphics[scale=0.36]{figure/manager-pipeline.pdf}
--- a/cerium_dev.tex	Mon Mar 24 17:49:30 2008 +0900
+++ b/cerium_dev.tex	Mon Mar 24 23:10:27 2008 +0900
@@ -1,16 +1,46 @@
 \section{開発過程}
-Cerium を作るために、以下の手順にそれぞれ実装とテストを行う。
+Cerium を作るために、以下の段階にそれぞれ実装とテストを行う。
 
 \begin{enumerate}
   \item C によるシーケンシャルな実装 \label{list_dev_1}
   \item SPE を考慮したデータ構造 (PolygonPack, SpanPack) を持つ実装 \label{list_dev_2}
-  \item コードをタスクに分割し、FIFO キューでシーケンシャルに実行する実装
-  \item タスクを SPE に割り当て並列実行する実装
+  \item コードをタスクに分割し、FIFO キューでシーケンシャルに実行する実装 \label{list_dev_3}
+  \item タスクを SPE に割り当て並列実行する実装 \label{list_dev_4}
 \end{enumerate}
 
-(\ref{list_dev_1}) の実装は Task Manager を用いず、プログラムのアルゴリズムの
-信頼性を確認するために用いる。
-この段階では、入力に対して出力が一意に決まる状況であり、テストは容易である。
+段階 (\ref{list_dev_1}) の実装は Task Manager を用いず、
+プログラムのアルゴリズムの信頼性を確認するために用いる。
+
+段階 (\ref{list_dev_2}) ではデータの変換が必要になり、
+段階 (\ref{list_dev_1}) と同じ結果を得られるかどうかを検証する。
+この段階までは、入力に対して出力が一意に決まる状況であり、テストは容易である。
 シーケンシャルな実装であるため、デバッグも二分法により容易に行うことが出来る。
 
-(\ref{list_dev_2}) に
+段階 (\ref{list_dev_3}) の実装からは Task Manager を用いる。
+この段階まではアーキテクチャに依存しないので、
+ターゲットが開発途中の段階でも記述することが可能である。
+また、FIFO スケジューラを用いずに Random スケジューラを実装することにより、
+並列実行特有の非決定的な実行が導入される。
+非決定的な動作においても、段階 (\ref{list_dev_2}) までと同じ仕様を
+満たすことを検証する必要がある。
+これは、逐次型プログラムでは出て来ない問題である。
+
+段階 (\ref{list_dev_4}) では、段階 (\ref{list_dev_3}) までが動いていれば
+問題なく動作すると期待される。また、SPE タスクを、
+SPE が持つ命令セットを用いて最適化することにより、更なる性能向上が期待できる。
+
+段階 (\ref{list_dev_3}) から 段階 (\ref{list_dev_4}) へのプログラムの変換は
+非常に容易である。Task Manager の API である set\_cpu() を用いることにより、
+Task を PPE で実行するか SPE で実行するかを明示的に書くことが出来るからである。
+
+{\small
+\begin{verbatim}
+
+  Task *task1 = create_task(cmd1,siz1,in1,out1);
+  Task *task2 = create_task(cmd2,siz2,in2,out2);
+
+  task1->set_cpu(CPU_PPE); // PPE 上で実行される
+  task2->set_cpu(CPU_SPE); // SPE 上で実行される
+
+\end{verbatim}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compare.tex	Mon Mar 24 23:10:27 2008 +0900
@@ -0,0 +1,33 @@
+\section{評価と考察}
+Cerium Rendering Engine を用いて、OSMesa と同様に立方体を回転させる。
+今回、\figref{fig-cerium} で示した Task に対する CPU の割り振りは
+\tabref{tab:hyoka1} とする。
+
+\begin{table}[b]
+  \caption{Task の実行 CPU} \label{tab:hyoka1}
+  \hbox to\hsize{\hfil
+  \begin{tabular}{c|l} \hline \hline
+    Task & CPU \\ \hline
+    SceneGraph to PolygonPack & PPE \\ \hline
+    Polygonpack to SpanPack   & PPE \\ \hline
+    Rendering & SPE \\ \hline
+  \end{tabular}\hfil}
+\end{table}
+
+PPE/SPE に対するコンパイルの最適化及びその時の実行 FPS を
+\tabref{tab:hyoka2} に示す。描画領域は 640x88 である。
+
+\begin{table}[b]
+  \caption{Cerium 実行速度 640x88} \label{tab:hyoka2}
+  \hbox to\hsize{\hfil
+  \begin{tabular}{cc|l} \hline \hline
+    PPE & SPE & FPS \\ \hline
+    最適化なし & 最適化なし & 263 FPS \\
+    -O9 & 最適化なし & 317 FPS \\
+    最適化なし & -O9 & 812 FPS \\
+    -O9 & -O9 & 1610 FPS \\ \hline    
+  \end{tabular}\hfil}
+\end{table}
+
+\tabref{tab:hyoka2} より、SPE に対する最適化が非常に有効であるといえる。
+(続き有ります)
--- a/figure/manager-pipeline.bb	Mon Mar 24 17:49:30 2008 +0900
+++ b/figure/manager-pipeline.bb	Mon Mar 24 23:10:27 2008 +0900
@@ -1,5 +1,5 @@
 %%Title: ./manager-pipeline.pdf
 %%Creator: ebb Version 0.5.2 (+ArtBox)
-%%BoundingBox: 0 0 557 276
-%%CreationDate: Mon Mar 24 18:15:49 2008
+%%BoundingBox: 0 0 557 405
+%%CreationDate: Mon Mar 24 22:06:15 2008
 
Binary file figure/manager-pipeline.graffle has changed
Binary file figure/manager-pipeline.pdf has changed
--- a/sigos.tex	Mon Mar 24 17:49:30 2008 +0900
+++ b/sigos.tex	Mon Mar 24 23:10:27 2008 +0900
@@ -69,9 +69,11 @@
 % 本文はここから始まる
 
 \input{introduction} % はじめに
-\input{cell}             % Cell
-\input{cerium}           % Cerium
-\input{cerium_dev}       % 開発過程
+\input{cell}         % Cell
+\input{cerium}       % Cerium
+\input{cerium_dev}   % 開発過程
+\input{compare}      % 評価と考察
+
 %\input{conclusion.tex}
 
 \bibliographystyle{ipsjunsrt}