Mercurial > hg > Papers > 2010 > yutaka-thesis
changeset 4:986baf7fad44
amend
author | Yutaka_Kinjyo |
---|---|
date | Tue, 16 Feb 2010 08:34:57 +0900 |
parents | dadfafc34c6e |
children | 891d6c50c05c |
files | resume/finalutf8.tex |
diffstat | 1 files changed, 33 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/resume/finalutf8.tex Tue Feb 16 03:46:18 2010 +0900 +++ b/resume/finalutf8.tex Tue Feb 16 08:34:57 2010 +0900 @@ -45,6 +45,15 @@ この2種類のCPUをプログラマ自身が用途に合わせて適切に使い分けるように考慮する必要がある。 +\vspace{0mm} +\begin{figure}[htbp] + \begin{center} + \includegraphics[scale=0.3]{pic/cell_arch.pdf} + \caption{Cell Broadband Engine Architecture} \label{cell} + \end{center} +\end{figure} + +\vspace{-8mm} \vspace{-6mm} \section{Cerium} 当研究室ではCeriumと呼ばれるゲーム開発フレームワークがあり、以下の3つの要素から構成されている。\\ @@ -61,6 +70,7 @@ Ceriumは独自にRenderingEngineを持つ。ゲーム中のオブジャクトの振る舞いやルールはSceneGraphで管理し、それらの動きやレンダリングの処理を動的にSPEに割り振るカーネルとして、TaskMnagerが用いられる。 現在Ceriumはlinux,macosx上で動作し、コンパイル方法によってアーキテクチャを切り替えられる。 +\vspace{-6mm} \section{Task Manager} TaskManagerは、タスクと呼ばれる、分割された各プログラムを管理する。タスクの単位はサブルーチンまたは関数とし、タスク同士の依存関係を考慮し、実行可能状態になったタスクを各SPEに割り振る。タスクは通常PPEスレッドで生成され、SPEスレッドに送られる。 SPEスレッドでは、受け取ったタスクをパイプラインに沿ってステージを遷移しながら複数のタスクを同時に実行していく。 @@ -105,6 +115,7 @@ \end{center} \end{figure} +\vspace{-8mm} \vspace{-6mm} \subsection{実装手法} 光源処理は DrawSpan タスク内で行う。描画対象となる Span は法線ベクトルの情報 @@ -121,6 +132,7 @@ DataUpdate タスクは DataLoad タスクで確保された領域に、指定されたデータを書き込むタスクである。 確保された領域の光源座標情報を更新するために使用している。 SPE 側でのメモリ領域の確保、参照には TaskManager の API を用いている。 +%じつは半分センセが手直ししている。 \vspace{-6mm} \subsubsection{光源処理のSIMD化} @@ -128,8 +140,11 @@ Cell では、SPEに実装されている128ビットレジスタを用いてSIMD (Single Instruction Multiple Data)を行うことが 出来る。 SIMDとは、1つの命令で複数のデータに対して処理を行う演算方式である。 -そのSIMDを用いて、本来4つの光源を計算するため同じ処理を4回行うところを、 -1度の光源処理で4つ分の光源の計算を行うことができた。以下にSIMDを用いない場合の光源ベクトルの算出コードを示す。 +%そのSIMDを用いて、本来4つの光源を計算するため同じ処理を4回行うところを、 +%1度の光源処理で4つ分の光源の計算を行うことができた。以下にSIMDを用いない場合の光源ベクトルの算出コードを示す。 + +そのSIMDを用いて、本来4命令である処理を、1命令で行うことができる。これにより光源処理の命令数を減らすことができた。 +以下にSIMDを用いない場合の光源ベクトルの算出コードを示す。 {\small \begin{verbatim} @@ -148,8 +163,9 @@ \end{verbatim} } -このように、SIMD演算を用いて、4つの演算命令を1つの演算命令で行うことができる。 +このように、SIMD演算を用いて、4つの演算命令を1つの演算命令で行っている。 +\vspace{-6mm} \section{評価とまとめ} \subsection{実行速度評価} 光源を実装した後と、光源処理をSIMD化した時のFPS(Frame Per Second)を計測した。 @@ -178,16 +194,25 @@ \end{table} \vspace{-5mm} -計測結果より、SIMDを用いた4つ分の光源処理が、SIMDを用いていない処理より約 0.4FPS の速度向上が見られた。 -また、SIMDを用いていない1つ分の光源処理との実行速度差が約 0.04FPS と近いものとなった。 -このことより、SIMD化が有効に働いており、4つの分の光源処理を一度に処理できていると言える。 -FPSはCerium全体の実行速度を対象としているため、光源数が1から4になり光源処理の計算が4倍 -なっても、FPSが4分の1になるわけではない。 +計測結果より、 +%SIMDを用いた光源数4の光源処理が、SIMDを用いていない処理より約 0.4FPS の速度向上が見られた。また、SIMDを用いていない光源数1の光源処理との実行速度差が約 0.04FPS と近いものとなった。 +光源数4のSIMDを用いた光源処理と、用いていない処理で、SIMDを用いた処理の方が約 0.4FPS の速度向上があった。また光源数1のSIMDを用いていない光源処理と比較すると 約 0.04FPS と近いものになった。 + + +このことより、SIMD化によって光源数4の処理を、光源数1の処理とほぼ同じ速度で実行できたと言え、実行速度が向上したことがわかる。 +%FPSは光源処理部分だけでなく、Cerium全体を対象としているため、 +%光源処理の速度が4倍になってもFPSが4倍になるわけではない。 +%光源数が1から4になり光源処理の計算が4倍なっても、FPSが4分の1になるわけではない。 \vspace{-6mm} \subsection{まとめ} %Rendering Engine はまだ、高速化の余地がある。今回の光源処理でも見られたように、各タスクでの演算をSIMD化することで高速化が望める。また SceneGraph から Polygon の生成はSPEによって並列実行されていない。Polygon 生成のタスクをSPEで並列実行することでも高速化が望める。 +本研究ではCell上のソフトウェアレンダリングに光源機能を実装し、SIMD演算を用いることで高速化を行った。 +WordCount\\ +ZeroClear タスク +Mail Time + \thispagestyle{fancy} \begin{thebibliography}{9}