Mercurial > hg > Papers > 2008 > akira-ieice
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 +
--- /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 +
--- /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 +
--- /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 +
--- 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}