Mercurial > hg > Papers > 2008 > akira-ieice
changeset 5:cba427f17200
*** empty log message ***
author | akira |
---|---|
date | Tue, 04 Mar 2008 20:21:59 +0900 |
parents | 00ef3b6ef98a |
children | 01d07212a708 |
files | bibitem.tex cbc.tex cell.tex debug.tex fig/pipeline.bb fig/pipeline.pdf fig/scenegraph.bb fig/scenegraph.graffle fig/scenegraph.pdf finally.tex introduction.tex multicore.tex rendering.tex src/debug.c src/render.c |
diffstat | 15 files changed, 62 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/bibitem.tex Tue Mar 04 19:09:01 2008 +0900 +++ b/bibitem.tex Tue Mar 04 20:21:59 2008 +0900 @@ -6,4 +6,7 @@ OSMesa. http://www.mesa3d.org/ \bibitem{bib:Blender} Blender. http://www.blender.org/ +\bibitem{bib:cbc-develop} +河野真治. ``継続を基本とするプログラム単位を用いた組み込みシステム開発''. +組み込みソフトウェア工学シンポジウム, 2003 \end{thebibliography}
--- a/cbc.tex Tue Mar 04 19:09:01 2008 +0900 +++ b/cbc.tex Tue Mar 04 20:21:59 2008 +0900 @@ -2,9 +2,11 @@ CbCはC言語からループ制御構造とサブルーチンコールを取り除き、継続を導入し た言語である\cite{bib:CbC}。code-segmentは引数付きgotoで接続することで継 続を実現する。以下は階乗の計算の例題である。\\ -\begin{small} +\small{ \input{src/fact.c} -\end{small} +} +\normalsize + code-segmentはキーワードcodeを用いることで関数のように定義される。引数部 分はinterfaceと呼ぶ。code-segmentからの脱出は引数付きgotoである。よって CbCのプログラムは複数のcode-segmentがgotoで接続された物になる。(図\ref{fig:cbc-goto})
--- a/cell.tex Tue Mar 04 19:09:01 2008 +0900 +++ b/cell.tex Tue Mar 04 20:21:59 2008 +0900 @@ -1,7 +1,7 @@ \section{Cell} Cell Broadband EngineはメインプロセッサであるPowerPC Processor Element(PPE)と6個のデータ処理プロセッサアーキテクチャSynergistic -Processor Element(SPE)からなる非対称マルチコアプロセッサでなり、高速リン +Processor Element(SPE)からなる非対称マルチコアプロセッサでなり、EIBと呼ばれる高速リン グバスで構成されている。(図\ref{fig:Cell}) \begin{figure}[htb] \begin{center} @@ -10,9 +10,11 @@ \caption{Cellの構成} \label{fig:Cell} \end{figure} + PPEは複数のSPEをコアプロセッサとして使用することができる汎用プロセッサで、 オペレーティングシステムの役割であるメインメモリや外部デバイスへの入出力 制御を行う。\\ + SPEはPPEのような複雑な制御よりも計算を単純に繰り返すマルチメディア系の処 理を得意とする演算系プロセッサコアである。(図\ref{fig:SPE}) \begin{figure}[htb] @@ -22,8 +24,9 @@ \caption{SPE} \label{fig:SPE} \end{figure} + SPEはSPUとMFCから構成され、独自規格の命令セットを持っている。各々のSPUは -256Kbのメモリを持ち、各SPUから直接参照できる唯一のメモリとして存在する。 +256Kbのメモリを持ち、各SPUから直接参照できる唯一のメモリとして存在する。また128Kbのレジスタを128本持っていることが特徴となっている。 MFCはメインメモリや他のSPEなどとデータをやりとりするためのユニットで、 SPUはチャネルというインターフェースを介してMFCに対してデータ転送などを依 -頼し、各々のSPUが持つLSにメインメモリ上のデータなどを転送する。 \ No newline at end of file +頼し、各々のSPUが持つLSにメインメモリ上のデータなどを転送する。
--- a/debug.tex Tue Mar 04 19:09:01 2008 +0900 +++ b/debug.tex Tue Mar 04 20:21:59 2008 +0900 @@ -1,9 +1,10 @@ \section{シミュレーションによるデバッグ} 前述したCbCをいったんシーケンシャルなアルゴリズムで実装することにより、 -デバッグが可能となる。 -\begin{small} +デバッグが可能となる。\cite{bib:cbc-develop} +{\small \input{src/debug.c} -\end{small} -ここではcode-segmentの頭にPPUがついたものがPPUが実行される物で、SPUがついたものがSPUで実行されるものとして表される。\\ +} +ここではcode-segmentの頭にPPUがついたものがPPUが実行される物で、SPUがついたものがSPUで実行されるものとして表される。シーケンシャルなアルゴリズムによる実装では必ずしもCell上でデバッグする必要がない。 + 実際の環境ではSPUがついたものがタスクマネージャによってSPUにロードされ実 行されることになる。
--- a/fig/pipeline.bb Tue Mar 04 19:09:01 2008 +0900 +++ b/fig/pipeline.bb Tue Mar 04 20:21:59 2008 +0900 @@ -1,5 +1,5 @@ %%Title: ./pipeline.pdf %%Creator: ebb Version 0.5.2 %%BoundingBox: 0 0 473 410 -%%CreationDate: Tue Mar 4 19:36:25 2008 +%%CreationDate: Tue Mar 4 20:06:57 2008
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/scenegraph.bb Tue Mar 04 20:21:59 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./scenegraph.pdf +%%Creator: ebb Version 0.5.2 +%%BoundingBox: 0 0 477 411 +%%CreationDate: Tue Mar 4 20:50:21 2008 +
--- a/finally.tex Tue Mar 04 19:09:01 2008 +0900 +++ b/finally.tex Tue Mar 04 20:21:59 2008 +0900 @@ -3,6 +3,7 @@ について述べた。CbCは状態遷移を用いた記述になるので依存関係がはっきりし ており、code-segment単位をタスクと考えることができる。code-segmentをスケ ジューラをもちいることにより並列的に動作させることが可能となる。 + また、これらはシーケンシャルなアルゴリズムから並列計算に移行することが他 の言語と比較して容易にできる。そのため、シーケンシャルな環境でのデバッグ がそのまま並列分散のデバッグにもなる。
--- a/introduction.tex Tue Mar 04 19:09:01 2008 +0900 +++ b/introduction.tex Tue Mar 04 20:21:59 2008 +0900 @@ -1,4 +1,4 @@ \section{はじめに} 継続を基本とする言語CbCによるCell上の並列計算について考察する。CbCはCに継続を付 加し、while文などのループの制御構造とサブルーチンコールを取り除いた言語 -である。Cell上でCbCを用いたときの利点をのべ、Cとの比較を行う。 \ No newline at end of file +である。Cell上で実行されるタスクの呼び出しを行うタスクマネージャを使用したときのCbCの利点をのべ、Cとの比較を行う。
--- a/multicore.tex Tue Mar 04 19:09:01 2008 +0900 +++ b/multicore.tex Tue Mar 04 20:21:59 2008 +0900 @@ -11,4 +11,4 @@ \item 入力データサイズ \item 出力データアドレス \end{itemize} -その後でRead、Exec、Writeという構造でCellのプログラムは記述できる。またReadとWriteはDMAで行われるためパイプライン形式で実行が可能となっている。f +その後でRead、Exec、Writeという構造でCellのプログラムは記述できる。またReadとWriteはDMAで行われるためパイプライン形式で実行が可能となっている。
--- a/rendering.tex Tue Mar 04 19:09:01 2008 +0900 +++ b/rendering.tex Tue Mar 04 20:21:59 2008 +0900 @@ -4,15 +4,25 @@ \cite{bib:Mesa}のフレー ムバッファ用ドライバであるOSMesaを使ってゲーム開発を行っていた。しかし、 OSMesaはメインメモリ依存でCellのようなマルチコアアーキテクチャを活かすよ -うな分割を行うことは容易ではない。\\ +うな分割を行うことは容易ではない。 + そこで我々はシーングラフ、レンダリングエンジン、タスクマネージャからなる -Ceriumを例題として用いた。\\ +Ceriumを例題として用いた。 + ゲームの中の一つの場面(Scene)を構成するオブジェクトやその振る舞い、ゲー ムのルールの集合をSceneGraphとする。SceneGraphの各ノードがゲームの一部で あるオブジェクトのファイルやゲームのルールとなり、ノードをたどり実行する -ことでゲームの中の一つの場面となる。SceneGraphはゲームプログラムとしての +ことでゲームの中の一つの場面となる。(図\ref{fig:scenegraph}) +\begin{figure}[htb] +\begin{center} +\includegraphics[scale=.5]{fig/scenegraph.pdf} +\end{center} +\caption{シーングラフ} +\label{fig:scenegraph} +\end{figure} +SceneGraphはゲームプログラムとしての 条件を満たす物なので、一つのSceneGraphで小さなゲームと言える。SceneGraph -はBlender3Dモデリングツール\cite{bib:Blender}から出力されるxmlをパースし、 +はBlender3Dモデリングツール\cite{bib:Blender}から出力されるポリゴン情報やテクスチャ情報などが記述されたxmlをパースし、 ポリゴンを取得する。ポリゴンとは図\ref{fig:SPAN}の三角形の各頂点の値のこ とである。そのポリゴン座標を次の動作を汲み取った上で、動作に伴う行列演算 を行う。 @@ -32,7 +42,8 @@ 生成し、SPANに対応するテクスチャを生成するシンプルな物を目指す。ここで SPANとは図\ref{fig:SPAN}のポリゴンに対するある特定のY座標に関数データを 抜き出した構造体で、そのSPANに対応するテクスチャは右の図のあるラインに対 -応する。\\ +応する。 + タスクマネージャはタスクを管理するライブラリで、タスクと呼ばれる分割され た各プログラムを依存関係を考慮しながらメモリ上にマッピングし、SPU上では そのプログラムをDMAによりロードする。(図\ref{fig:taskmanager})\\ @@ -52,7 +63,8 @@ SCENEGRAPH2POLYGONではシーングラフの計算を行い、ポリゴンの情報から回転や 拡大、平行移動などの計算を行い、ポリゴンの情報を次のcode-segmentに渡す。 POLYGON2SPANでも同様に、受け取ったPOLYGONからSPANを出力する。SPAN2DRAWで -も基本的に変わらないが、ここで終了条件をみることになる。\\ +も基本的に変わらないが、ここで終了条件をみることになる。 + これらのcode-segmentはすべてSPUで実行される。しかし、これだけでは足りな い。実際にはSPUにテクスチャ情報をロードするcode-segmentが存在する。SPUで 実行するときは前述した通り、入力データアドレス、入力データサイズ、出力デー @@ -75,7 +87,7 @@ \end{table} \\ タスクマネージャは登録されたcode-segmentをみて、プログラムのロードを行い、 -入力データの読み込み、計算、出力データの書き出しを行う。タスクマネージャはPPUで実行するかSPUで実行するかを明示的に書くことができる。またSPUを使う場合はSPUコアを使うことができる。そうすると、以下のようなことができる可能性もある。 +入力データの読み込み、計算、出力データの書き出しを行う。またcreate\_taskのときに入力データのサイズやアドレスなどが登録される。タスクマネージャはPPUで実行するかSPUで実行するかを明示的に書くことができる。またSPUを使う場合はSPUコアを使うことができる。そうすると、図\ref{fig:pipeline}のようなことができる可能性もある。 \begin{figure}[htb] \begin{center} \includegraphics[scale=.5]{./fig/pipeline.pdf}
--- a/src/debug.c Tue Mar 04 19:09:01 2008 +0900 +++ b/src/debug.c Tue Mar 04 20:21:59 2008 +0900 @@ -2,12 +2,12 @@ __code SPU_SCENEGRAPH2POLYGON((void *)rbuf, (void *)wbuf) { - + ......... goto PPU_Memory1((void *)wbuf); } __code PPU_Memory1((void *)polygon) { - + .......... goto SPU_POLYGON2SPAN((void *)rbuf, (void *)wbuf); } @@ -15,12 +15,12 @@ __code SPU_POLYGON2SPAN((void*)rbuf, (void*)wbuf) { - + ......... goto PPU_Memory2((void *)wbuf); } __code PPU_Memory2((void *)span) { - + ............ goto SPU_SPAN2DRAW((void*)rbuf, (void*)wbuf); } @@ -28,7 +28,15 @@ __code SPU_SPAN2DRAW((void*)rbuf, (void*)wbuf) { + .............. + goto PPU_SCHEDULER; +} - goto (*exit1)(0), env; +__code PPU_SCHEDULER() { + if(.....) + goto SPU_SCENEGRAPH2POLYGON((void*)rbuf, + (void*)wbuf, + if(......) + goto exit(0),env; } \end{verbatim}
--- a/src/render.c Tue Mar 04 19:09:01 2008 +0900 +++ b/src/render.c Tue Mar 04 20:21:59 2008 +0900 @@ -1,16 +1,16 @@ \begin{verbatim} __code SCENEGRAPH2POLYGON(POLYGON *polygon1) { - + ......... goto POLYGON2SPAN(polygon2); } __code POLYGON2SPAN(POLYGON *polygon) { - + ......... goto SPAN2DRAW(span); } __code SPAN2DRAW(SPAN *span) { - + .......... goto (*exit1)(0), env; } \end{verbatim}