Mercurial > hg > Papers > 2010 > yutaka-thesis
changeset 3:dadfafc34c6e
amendment
author | Yutaka_Kinjyo |
---|---|
date | Tue, 16 Feb 2010 03:46:18 +0900 |
parents | f9330d7fcfb0 |
children | 986baf7fad44 |
files | resume/finalutf8.tex |
diffstat | 1 files changed, 62 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/resume/finalutf8.tex Mon Feb 15 19:37:42 2010 +0900 +++ b/resume/finalutf8.tex Tue Feb 16 03:46:18 2010 +0900 @@ -27,7 +27,7 @@ \section{Cell上のソフトウェアレンダリング} -我々は、8SPU+2PPUのヘテロCPU構成を持つCell / PS3 上での +我々は、8SPE+2PPEのヘテロCPU構成を持つCell / PS3 上での ソフトウェアレンダリングエンジン を開発中である。これは、Cerium Task Manager 上に実装され、琉球大学情報工学科の 3年生の実験で使用中である。PS3 のGraphics Engine の仕様は公開されていない @@ -35,12 +35,12 @@ 実装する必要がある。 ソフトウェアレンダリングは、SceneGraph、Polygon、Span、Z buffer の各段階があり、 -それぞれの段階で、並列処理を行なう必要がある。現在は、Span の生成を1 SPU上で行ない、Z buffer を複数のSPU上で処理している。さらに、他の段階でも並列処理を -行なう必要がある。PPUよりもSPUの方が高速なので、1SPU 上で実行するだけでも +それぞれの段階で、並列処理を行なう必要がある。現在は、Span の生成を1 SPE上で行ない、Z buffer を複数のSPE上で処理している。さらに、他の段階でも並列処理を +行なう必要がある。PPEよりもSPEの方が高速なので、1SPE 上で実行するだけでも 意味がある。 \vspace{-5mm} -\section{ヘテロジニアス・マルチコアプロセッサCell} +\section{Cell BROADBAND ENGINE} Cellは、1基の制御系プロセッサコア (PPE:PowerPc Processor ELement) と8基の演算系プロセッサコア (SPE:Synergistic Processor Element) で構成される。各プロセッサコアは、EIB (Element Interconnect Bus) と呼ばれる高速なバスで接続されている。また、EIBはメインメモリや外部入出力デバイスとも接続されていて、各プロセッサコアはEIBを経由してデータアクセスをおこなう。 この2種類のCPUをプログラマ自身が用途に合わせて適切に使い分けるように考慮する必要がある。 @@ -59,19 +59,26 @@ \end{itemize} Ceriumは独自にRenderingEngineを持つ。ゲーム中のオブジャクトの振る舞いやルールはSceneGraphで管理し、それらの動きやレンダリングの処理を動的にSPEに割り振るカーネルとして、TaskMnagerが用いられる。 -TaskManagerは、Taskと呼ばれる、分割された各プログラムを管理する。Taskの単位はサブルーチンまたは関数とし、Task同士の依存関係を考慮しながら実行していく。 -現在Ceriumはlinux,macosx上で動作し、コンパイル方法によってCellのspeを使うかどうかを選択できる。 +現在Ceriumはlinux,macosx上で動作し、コンパイル方法によってアーキテクチャを切り替えられる。 +\section{Task Manager} +TaskManagerは、タスクと呼ばれる、分割された各プログラムを管理する。タスクの単位はサブルーチンまたは関数とし、タスク同士の依存関係を考慮し、実行可能状態になったタスクを各SPEに割り振る。タスクは通常PPEスレッドで生成され、SPEスレッドに送られる。 +SPEスレッドでは、受け取ったタスクをパイプラインに沿ってステージを遷移しながら複数のタスクを同時に実行していく。 +\vspace{-6mm} \section{Rendering Engine} Rendering Engineは主に、CreatePolygonFromSceneGraph、CreateSpan、DrawSpanという3つのタスクから構成されている。 それぞれのタスクの動作とレンダリングの流れを示す。 - \\ -1.CreatePolygonFromSceneGraph タスクによってSceneGraphをもとにモデリングデータから、実際に表示するポリゴンを生成する。\\ -2.CreateSpan タスクで生成したポリゴンからSpanの生成する。\\ -3.DrawSpan タスクでSpanをRGBにマッピングし描画する。\\ + +{\small +\begin{enumerate} + \item CreatePolygonFromSceneGraph タスクによってSceneGraphをもとにモデリングデータから、実際に表示するポリゴンを生成する。 + \item CreateSpan タスクで生成したポリゴンからSpanの生成する。 + \item DrawSpan タスクでSpanをRGBにマッピングし描画する。 ここでいうSpanとは、ポリゴンに対するある特定のY座標に関するデータを抜き出したものである。 +\end{enumerate} +} \vspace{0mm} \begin{figure}[htbp] @@ -82,10 +89,10 @@ \end{figure} -\vspace{-6mm} +\vspace{-10mm} \section{レンダリングエンジンの高速化と高機能化} \subsection{光源の実装} -レンダリングエンジンに光源処理の実装をした。光源は SceneGraph のオブジェクトと +Rendering Engine に光源処理の実装をした。光源は SceneGraph のオブジェクトと して実装され、SceneGraph 側から、操作できる。光源は点光源であり、光源数は 4 つに 設定している。 @@ -98,18 +105,24 @@ \end{center} \end{figure} +\vspace{-6mm} \subsection{実装手法} 光源処理は DrawSpan タスク内で行う。描画対象となる Span は法線ベクトルの情報 を持っている。光源の座標情報は、あらかじめ、各 SPE のローカルストアに確保してい る。描画対象のドット座標と光源の座標から光源ベクトルを求める。光源ベクトルと法線 -ベクトルとの内積を計算し、rgb 値に乗算する。 +ベクトルとの内積を計算し、rgb 値に乗算する。 それにより描画されるrgb値が、点光源の位置から +光のあたり具合を考慮にいれた値になる。 -\subsubsection{光源座標のLoad,Update} -光源座標のメモリ領域を各 SPE のローカルストアに確保するのは DataLoad タスクで -行う。確保された光源座標は DataUpdate タスクで、タスクに引数として渡された光源 -座標に更新される。SPE 側でのメモリ領域の確保、参照には TaskManager の API を用 -いている。%DataLoad タスクはレンダリングのはじめで各 SPE で実行される。DataUpdate タスクはSceneGraph を更新した後、DrawSpan タスクの前に実行される。 +\vspace{-6mm} +\subsubsection{光源座標の Load,Update の為のタスク} +光源実装のために DataLoad タスクと DataUpdate タスクを実装した。 +DataLoad タスクは指定されたサイズ分の領域をSPEに確保するタスクである。 +光源座標のメモリ領域を各 SPE のローカルストアに確保するために使用している。 +DataUpdate タスクは DataLoad タスクで確保された領域に、指定されたデータを書き込むタスクである。 +確保された領域の光源座標情報を更新するために使用している。 +SPE 側でのメモリ領域の確保、参照には TaskManager の API を用いている。 +\vspace{-6mm} \subsubsection{光源処理のSIMD化} 光源処理の演算をSIMD演算で実装した。 Cell では、SPEに実装されている128ビットレジスタを用いてSIMD @@ -118,56 +131,69 @@ そのSIMDを用いて、本来4つの光源を計算するため同じ処理を4回行うところを、 1度の光源処理で4つ分の光源の計算を行うことができた。以下にSIMDを用いない場合の光源ベクトルの算出コードを示す。 +{\small \begin{verbatim} light_vector[0] = world_x - light_xyz[i*4]; light_vector[1] = world_y - light_xyz[i*4+1]; light_vector[2] = world_z - light_xyz[i*4+2]; light_vector[3] = light_xyz[i*4+3]; \end{verbatim} +} 次に上記のコードをSIMD化したコードを示す。 +{\small \begin{verbatim} *vlight_vector = spu_sub(v_world[i],vlight_xyz[i]); \end{verbatim} +} このように、SIMD演算を用いて、4つの演算命令を1つの演算命令で行うことができる。 -\section{評価と課題} +\section{評価とまとめ} \subsection{実行速度評価} 光源を実装した後と、光源処理をSIMD化した時のFPS(Frame Per Second)を計測した。 -計測対象として地球と月のオブジェクトを表示する例題プログラムを、Cell上のPPE1個、SPE6個で実行した。 +計測対象として地球と月のオブジェクトを表示する例題プログラムを、Cell上のPPE1個、SPE6個で実行した。解像度は1920×1080である。 以下にFPSを示す。 - \begin{table}[htb] - \caption{光源実装後の実行速度} - \begin{center} - \begin{tabular}{lrrrr} \toprule - 光源数 & FPS \\ \midrule - %未実装 & 8.286088 FPS \\ - 1 & 7.568590 FPS \\ + %2 & 7.448494 FPS \\ %3 & 7.341228 FPS \\ - 4 & 7.211832 FPS \\ - 4(SIMD) & 7.602995 FPS \\ \bottomrule - \end{tabular} - \end{center} - \end{table} + +\vspace{3mm} +\begin{table}[htb] + \begin{center} + \vskip -\lastskip \vskip -20pt + \caption{SIMD を用いることによる実行速度の比較} + \hbox to\hsize{\hfil + \begin{tabular}{c|l|l} \hline \hline + & SIMDなし(FPS) & SIMDあり (FPS)\\ \hline + \hline + %Mac OSX & 7.0 & 8.5\\ \hline + Cell (光源数 1) & 7.56 & 8.12 \\ \hline + Cell (光源数 4) & 7.21 & 7.60 \\ \hline + \end{tabular}\hfil} + \label{tb:lightspeed} + \end{center} +\end{table} +\vspace{-5mm} 計測結果より、SIMDを用いた4つ分の光源処理が、SIMDを用いていない処理より約 0.4FPS の速度向上が見られた。 また、SIMDを用いていない1つ分の光源処理との実行速度差が約 0.04FPS と近いものとなった。 このことより、SIMD化が有効に働いており、4つの分の光源処理を一度に処理できていると言える。 +FPSはCerium全体の実行速度を対象としているため、光源数が1から4になり光源処理の計算が4倍 +なっても、FPSが4分の1になるわけではない。 -\subsection{課題} -Rendering Engine はまだ、高速化の余地がある。今回の光源処理でも見られたように、各タスクでの演算をSIMD化することで高速化が望める。また SceneGraph から Polygon の生成はSPEによって並列実行されていない。Polygon 生成のタスクをSPEで並列実行することでも高速化が望める。 +\vspace{-6mm} +\subsection{まとめ} +%Rendering Engine はまだ、高速化の余地がある。今回の光源処理でも見られたように、各タスクでの演算をSIMD化することで高速化が望める。また SceneGraph から Polygon の生成はSPEによって並列実行されていない。Polygon 生成のタスクをSPEで並列実行することでも高速化が望める。 + \thispagestyle{fancy} \begin{thebibliography}{9} \bibitem{1} 宮國渡 "Implementation of Fine-grain Task Manager for Cell" 平成20年度 学位論文(修士) -\bibitem{2} 多賀野海人 "並列プログラミングを用いたゲームフレームワークの設計と実装" 2008年 卒業研究中間報告資料 - \bibitem{3} fixstars: http://cell.fixstars.com/ps3linux/index.php/メインページ