Mercurial > hg > Papers > 2008 > akira-ieice
changeset 2:dd72cabc3aff
*** empty log message ***
author | akira |
---|---|
date | Tue, 04 Mar 2008 12:55:59 +0900 |
parents | 5a47ca319df5 |
children | 4ee5cef03d5f |
files | compare.tex debug.tex introduction.tex memo multicore.tex rendering.tex src/debug.c src/render.c src/spe.c thesis.tex |
diffstat | 10 files changed, 100 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/compare.tex Tue Mar 04 12:55:59 2008 +0900 @@ -0,0 +1,2 @@ +\section{Cとの比較} +従来のCでCeriumを記述すると、
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/debug.tex Tue Mar 04 12:55:59 2008 +0900 @@ -0,0 +1,7 @@ +\section{シミュレーションによるデバッグ} +前述したCbCをいったんシーケンシャルなアルゴリズムで実装することにより、 +デバッグが可能となる。 +\input{src/debug.c} +ここではcode-segmentの頭にPPUがついたものがPPUが実行される物で、SPUがついたものがSPUで実行されるものとして表される。\\ +実際の環境ではSPUがついたものがタスクマネージャによってSPUにロードされ実 +行されることになる。
--- a/introduction.tex Mon Mar 03 20:38:53 2008 +0900 +++ b/introduction.tex Tue Mar 04 12:55:59 2008 +0900 @@ -1,1 +1,4 @@ \section{はじめに} +継続を基本とする言語CbCによるCell上の並列計算について考察する。CbCはCに継続を付 +加し、while文などのループの制御構造とサブルーチンコールを取り除いた言語 +である。Cell上でCbCを用いたときの利点をのべ、Cとの比較を行う。 \ No newline at end of file
--- a/memo Mon Mar 03 20:38:53 2008 +0900 +++ b/memo Tue Mar 04 12:55:59 2008 +0900 @@ -1,3 +1,6 @@ 激若潟違潟帥鴻若吾c 篏罕 +違純若鴻rbuf,wbuf + +筝c絎潟若莠帥鴻鐚
--- a/multicore.tex Mon Mar 03 20:38:53 2008 +0900 +++ b/multicore.tex Tue Mar 04 12:55:59 2008 +0900 @@ -1,5 +1,12 @@ -\section{潟≪激鴻荀羆篁罕} -Cell筝SPE翫罨<荀膣綽荀 +\section{マルチコアシステムの要求仕様} +ここでは簡単な例題としてCell上のDMA転送について考える。 +DMAを用いたSPEプログラムは基本的に次のようになる。 +\input{src/spe.c} +この例で示したように、Cell上でSPEを用いる場合、次のような要素がまず必要になる。 \begin{itemize} -\item 絎茵違 +\item 実行プログラム +\item 入力データアドレス +\item 入力データサイズ +\item 出力データアドレス \end{itemize} +その後でRead、Exec、Writeという構造でCellのプログラムは記述できる。
--- a/rendering.tex Mon Mar 03 20:38:53 2008 +0900 +++ b/rendering.tex Tue Mar 04 12:55:59 2008 +0900 @@ -6,7 +6,7 @@ OSMesaはメインメモリ依存でCellのようなマルチコアアーキテクチャを活かすよ うな分割を行うことは容易ではない。\\ そこで我々はシーングラフ、レンダリングエンジン、タスクマネージャからなる -Ceriumを作ることにした。\\ +Ceriumを例題として用いた。\\ ゲームの中の一つの場面(Scene)を構成するオブジェクトやその振る舞い、ゲー ムのルールの集合をSceneGraphとする。SceneGraphの各ノードがゲームの一部で あるオブジェクトのファイルやゲームのルールとなり、ノードをたどり実行する @@ -17,9 +17,18 @@ 算の部分でコピーがたくさん行われていた。それはCPUに多大な負荷を与えると ともに動作が遅くなる大きな要因となっていた。そこで我々が提案するレンダリ ングエンジンはシーングラフからポリゴンの各頂点を受け取り、頂点からSPANを -生成し、SPANniにtai対応するテクスチャを生成するシンプルな物を目指す。\\ +生成し、SPANに対応するテクスチャを生成するシンプルな物を目指す。\\ タスクマネージャはタスクを管理するライブラリで、タスクと呼ばれる分割され た各プログラムを依存関係を考慮しながらメモリ上にマッピングし、SPU上では そのプログラムをDMAによりロードする。\\ これらをCbCで実装すると次のようになる。 \input{./src/render.c} +上記のソースはシーケンシャルなアルゴリズムでの実装コードである。 +SCENEGRAPH2POLYGONではシーングラフの計算を行い、ポリゴンの情報から回転や +拡大、平行移動などの計算を行い、ポリゴンの情報を次のcode-segmentに渡す。 +POLYGON2SPANでも同様に、受け取ったPOLYGONからSPANを出力する。SPAN2DRAWで +も基本的に変わらないが、ここで終了条件をみることになる。\\ +これらのcode-segmentはすべてSPUで実行される。SPUで実行するときは前述した +通り、入力データアドレス、入力データサイズ、出力データアドレスが必要とな +る。これらはタスクマネージャに登録される。 +タスクマネージャは登録されたcode-segmentをみて、プログラムのロードを行い、入力データの読み込み、計算、出力データの書き出しを行う。
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/debug.c Tue Mar 04 12:55:59 2008 +0900 @@ -0,0 +1,34 @@ +\begin{verbatim} +__code SPU_SCENEGRAPH2POLYGON((void *)rbuf, + (void *)wbuf) +{ + + goto PPU_Memory1((void *)wbuf); +} + +__code PPU_Memory1((void *)polygon) { + + goto SPU_POLYGON2SPAN((void *)rbuf, + (void *)wbuf); +} + +__code SPU_POLYGON2SPAN((void*)rbuf, + (void*)wbuf) +{ + + goto PPU_Memory2((void *)wbuf); +} + +__code PPU_Memory2((void *)span) { + + goto SPU_SPAN2DRAW((void*)rbuf, + (void*)wbuf); +} + +__code SPU_SPAN2DRAW((void*)rbuf, + (void*)wbuf) +{ + + goto (*exit1)(0), env; +} +\end{verbatim}
--- a/src/render.c Mon Mar 03 20:38:53 2008 +0900 +++ b/src/render.c Tue Mar 04 12:55:59 2008 +0900 @@ -1,12 +1,12 @@ \begin{verbatim} -__code SceneGraph2POLYGON() { +__code SCENEGRAPH2POLYGON(POLYGON *polygon1) { - goto POLYGON2SPAN(POLYGON); + goto POLYGON2SPAN(polygon2); } -__code POLYGON2SPAN() { +__code POLYGON2SPAN(POLYGON *polygon) { - goto SPAN2DRAW(SPAN); + goto SPAN2DRAW(span); } __code SPAN2DRAW(SPAN *span) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/spe.c Tue Mar 04 12:55:59 2008 +0900 @@ -0,0 +1,23 @@ +\begin{verbatim} +typedef struct { + unsigned long long ea_in; + unsigned long long ea_out; + unsigned int size; +} params; + +int main(unsigned long long spe, + unsigned long long argp, + unsigned long long envp) +{ + /* DMA Transfer 1: Get input/output parameters */ + mfcdma(params, GET_CMD); + + /* DMA Transfer 2: Get input data */ + mfcdma(params->ea_in, GET_CMD); + + calc(); + + /* DMA Transfer 3: Put output data */ + mfcdma(params->ea_out, PUT_CMD); +} +\end{verbatim}
--- a/thesis.tex Mon Mar 03 20:38:53 2008 +0900 +++ b/thesis.tex Tue Mar 04 12:55:59 2008 +0900 @@ -66,8 +66,10 @@ \input{introduction.tex} \input{cbc.tex} \input{cell.tex} +\input{multicore.tex} \input{rendering.tex} -\input{multicore.tex} +\input{debug.tex} +\input{compare.tex} \input{finally.tex} \input{bibitem.tex} \end{document}