changeset 8:34da095373ab

*** empty log message ***
author akira
date Wed, 05 Mar 2008 11:48:24 +0900
parents 5cfa596eece1
children a9f3e198cb96
files develop_process.tex doublebuffer.tex fig/cerium_detail.bb fig/cerium_detail.graffle fig/cerium_detail.pdf fig/heterogeneous.bb fig/heterogeneous.pdf fig/homogeneous.bb fig/homogeneous.pdf fig/pipeline1.bb fig/pipeline1.graffle fig/pipeline1.pdf src/debug.c
diffstat 13 files changed, 81 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/develop_process.tex	Wed Mar 05 11:48:24 2008 +0900
@@ -0,0 +1,24 @@
+\section{開発過程}
+開発過程として次のような順で実装する。
+\begin{enumerate}
+\item Cによるシーケンシャルな開発
+\item SPUを考慮したデータ構造を持つシーケンシャルな開発
+\item SPUを使った開発
+\item CbCをもちいた開発
+\end{enumerate}
+1のCによるシーケンシャルな開発はタスクマネージャを使わず実際にプログラム
+のアルゴリズムの信頼性をみるために行われる。Cによるシーケンシャルな開発
+ではタスクマネージャは使われない。
+
+2のSPUを考慮したデータ構造を持つシーケンシャルな開発はタスクマネージャを
+用いるが、このタスクマネージャはSPUの実行部分をシミュレーションしたタス
+クマネージャを使って、実装することができる。しかし、依存関係やSPUに送る
+データのサイズなどを考慮する必要があり、またタスクの中ではポインターを使
+うことができないなど多少の煩わしさがある。
+
+2から3へ移行するのはタスクマネージャのset\_cpuを用いることによって簡単に移行することが可能である。
+
+4のCbCを用いた開発では改めて今まで書いてきたプログラムをCbCに書き直す作
+業が待っている。しかし、CbCへの変換は今まで書いていたCのプログラムを逐次
+的にgotoでcode-segmentを接続すればよい。
+\input{src/debug.c}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doublebuffer.tex	Wed Mar 05 11:48:24 2008 +0900
@@ -0,0 +1,24 @@
+\section{並列処理}
+Cellではあらゆるレベルで並列に動作させることが求められる。
+ダブルバッファがその一例として挙げられる。Cellではそれぞれのコアがメイン
+メモリを直接参照することができない。そのためDMAによりデータをやり取りす
+るのは前述した通りである。DMAはCPUを介さずに直接データ転送を行う方式のこ
+とである。そのためDMAしている間、SPUは何らかの処理を行うことができる。
+SPUは入力用のBufferと出力用のバッファを二つずつ用意する。そうすることにより図\ref{fig:pipeline1}のようなパイプライン処理が可能となる。
+\begin{figure}[htb]
+\begin{center}
+\includegraphics[scale=.5]{./fig/pipeline1.pdf}
+\end{center}
+\caption{パイプライン}
+\label{fig:pipeline1}
+\end{figure}
+またタスクマネージャはPPUで実行するかSPUで実行するかを明示的に書くことができる。またSPUを使う場合は使うSPUの数を指定することができるようになる。
+そのため、ダブルバッファを利用した図\ref{fig:pipeline}のようなことができる可能性もある。
+\begin{figure}[htb]
+\begin{center}
+\includegraphics[scale=.5]{./fig/pipeline.pdf}
+\end{center}
+\caption{タスクマネージャが行うパイプライン}
+\label{fig:pipeline}
+\end{figure}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fig/cerium_detail.bb	Wed Mar 05 11:48:24 2008 +0900
@@ -0,0 +1,5 @@
+%%Title: ./cerium_detail.pdf
+%%Creator: ebb Version 0.5.2
+%%BoundingBox: 0 0 576 396
+%%CreationDate: Wed Mar  5 00:12:50 2008
+
Binary file fig/cerium_detail.graffle has changed
Binary file fig/cerium_detail.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fig/heterogeneous.bb	Wed Mar 05 11:48:24 2008 +0900
@@ -0,0 +1,5 @@
+%%Title: ./heterogeneous.pdf
+%%Creator: ebb Version 0.5.2
+%%BoundingBox: 0 0 345 226
+%%CreationDate: Tue Mar  4 22:41:32 2008
+
Binary file fig/heterogeneous.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fig/homogeneous.bb	Wed Mar 05 11:48:24 2008 +0900
@@ -0,0 +1,5 @@
+%%Title: ./homogeneous.pdf
+%%Creator: ebb Version 0.5.2
+%%BoundingBox: 0 0 345 226
+%%CreationDate: Tue Mar  4 22:41:34 2008
+
Binary file fig/homogeneous.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fig/pipeline1.bb	Wed Mar 05 11:48:24 2008 +0900
@@ -0,0 +1,5 @@
+%%Title: ./pipeline1.pdf
+%%Creator: ebb Version 0.5.2
+%%BoundingBox: 0 0 477 148
+%%CreationDate: Wed Mar  5 02:31:39 2008
+
Binary file fig/pipeline1.graffle has changed
Binary file fig/pipeline1.pdf has changed
--- a/src/debug.c	Wed Mar 05 11:25:22 2008 +0900
+++ b/src/debug.c	Wed Mar 05 11:48:24 2008 +0900
@@ -1,42 +1,36 @@
 \begin{verbatim}
-__code SPU_SCENEGRAPH2POLYGON((void *)rbuf,
-                              (void *)wbuf) 
+__code SceneGraph((void *)rbuf,(void *)wbuf) 
 {
     .........
-    goto PPU_Memory1((void *)wbuf);
+    goto Schedular((void *)wbuf,PPU_Memory1);
 }
 
 __code PPU_Memory1((void *)polygon) {
     ..........
-    goto SPU_POLYGON2SPAN((void *)rbuf, 
-                          (void *)wbuf);
+    goto Schedular((void *)wbuf,Create_SPAN);
 }
 
-__code SPU_POLYGON2SPAN((void*)rbuf, 
-                        (void*)wbuf) 
+__code Create_SPAN((void*)rbuf,(void*)wbuf) 
 {
     .........
-    goto PPU_Memory2((void *)wbuf);
+    goto Schedular((void *)wbuf,PPU_Memory2);
 }
 
 __code PPU_Memory2((void *)span) {
     ............
-    goto SPU_SPAN2DRAW((void*)rbuf,
-                       (void*)wbuf);
+    goto Schedular((void *)wbuf,DRAW);
 }
 
-__code SPU_SPAN2DRAW((void*)rbuf, 
-                     (void*)wbuf) 
+__code DRAW((void*)rbuf,(void*)wbuf) 
 {
 	..............
-    goto PPU_SCHEDULER;
+    goto Schedular((void*)0,SceneGraph);
 }
 
-__code PPU_SCHEDULER() {
-    if(.....)
-    goto SPU_SCENEGRAPH2POLYGON((void*)rbuf,
-                                (void*)wbuf,
-    if(......)
-    goto exit(0),env;
+__code Schedular((void*)rbuf,__code *next) {
+	if(....)
+         goto *next(rbuf);
+	if(....)
+         goto *next(rubf,wbuf);
 }
 \end{verbatim}