view 3.tex @ 1:77658ee63839 kono r1

Papaer released.
author kono
date Thu, 06 Mar 2008 19:49:25 +0900
parents 685b35adf419
children
line wrap: on
line source

\section{ Many Core 上のプログラムの作り方}

本論文では、本研究室で作成したPS3上のレンダリングエンジンであるCerium
Rendering Engine を例題として使う。詳細は別な論文\cite{kono08b}
に譲り、ここでは簡単に記述する。

Cerium は、Scene Graph (3Dオブジェクトを木構造にしたもの)をフレームバッファ
上にSPUを用いて描画するRendering Engine であり、教育用としてシンプルな
構成を持っている。Cerium は、

{\small
\begin{verbatim}
    1. Scene GraphのPolygonの座標から表示する
    2. 座標の計算を行い PolygonPack を生成する
    3. PolygonPack から、同じY座標を持つ線分の集合SpanPackを生成する
    4. SpanPackを(Texture を読込ながら)Z bufferを用いて描画する。

\end{verbatim}
}

という4つのタスクを持つ。並列実行は、Scene Graphの木、PolygonPack,
SpanPack に対してデータ並列実行を行う。さらに、この4つが表示画面毎に
パイプライン的に実行される。

これらのタスクは、SPUで実行するために小さなセグメントに分割される
必要がある。分割されたタスクを、PPUまたはSPUで実行するのは
Cerium task manager である。Task manager はタスク依存を解決する
機能を持っていて、タスク依存が満たされたものをアクティブキューに
入れ、SPUを起動する。SPUはアクティブキューから、処理するコードと
データを取得し自律的に実行を行う。

Cerium Rendering engine を作るには、以下の手順に
実装とテストを行う。

{\small
\begin{verbatim}
    1. 普通のCで実装した Rendering algorithm 
    2. データ構造(PolygonPack, SpanPack)を導入したもの
    3. コードをタスクに分割し、FIFOキューでシーケンシャルに実行する
    4. タスクをSPUに割り当て並列実行する

\end{verbatim}
}

これにより、Algorithmの正しさを確認した上で並列実行に移行することが出来る。