# HG changeset patch # User e065725@kinjou-yutaka-no-macbook.local # Date 1256843009 -32400 # Node ID 80124316f12963706a3a6e9b2a4b019224f13c98 # Parent 1089815390bd2a258272ad7dcfcf27097dce3328 change change diff -r 1089815390bd -r 80124316f129 finalutf8.tex --- a/finalutf8.tex Thu Oct 29 19:11:46 2009 +0900 +++ b/finalutf8.tex Fri Oct 30 04:03:29 2009 +0900 @@ -73,12 +73,8 @@ \section{RenderingEngine} RenderingEngineでは、SceneGraphから、実際に表示するポリゴンの抽出、ポリゴンからSpanの生成、SpanにRGBをマッピングし描画する部分と3つに分ける事ができる。ここでいうSpanとは、ポリゴンに対するある特定のY座標に関するデータを抜き出したものである。 -\subsection{高機能化} - -RenderingEngineの高機能化に関して、以下のような案を提案する。 -\vspace{-3mm} - -\subsubsection{光源} +\vspace{-6mm} +\subsection{光源} RenderingEngineで、未実装だった光源の計算を実装した。各オブジェクトには自身の座標や親子関係などの情報を持っており、その中に法線がある。法線と光のベクトルとの内積をrgbにかけ算することにより光の計算を行っている。以下に光源の計算をした画像を示す。 \vspace{0mm} @@ -90,28 +86,33 @@ \end{figure} -現在、光源はppeだけを使ったfifo形式のみに実装されている。 +%現在、光源はppeだけを使ったfifo形式のみに実装されている。 -\subsection{高速化} -RenderingEngineの高速化に関して、以下のような案を提案する。 -\vspace{-3mm} -\subsubsection{描画ルーチン} -CeriumのRenderingEngineは描画する対象がない部分も毎フレーム描画計算をしている。それでは計算する必要のない部分も計算してしまい、無駄な時間が生じる。そこで、描画する対象がない部分の計算は行わないようにすれば高速化が望める。 -また画面に背景を描画する場合は、オブジェクトとは別に背景専用のルーチンを設け高速化を計る。さらにオブジャクトが重なり描画する必要のない部分は描画計算を行わない。 +%\subsection{高速化} +%RenderingEngineの高速化に関して、以下のような案を提案する。 +%\vspace{-3mm} +%\subsection{描画ルーチン} + -\newpage +%CeriumのRenderingEngineは描画する対象がない部分も毎フレーム描画計算をしている。それでは計算する必要のない部分も計算してしまい、無駄な時間が生じる。そこで、描画する対象がない部分の計算は行わないようにすれば高速化が望める。 +%また画面に背景を描画する場合は、オブジェクトとは別に背景専用のルーチンを設け高速化を計る。さらにオブジャクトが重なり描画する必要のない部分は描画計算を行わない。 -\vspace{0mm} -\begin{figure}[htbp] - \begin{center} - \includegraphics[scale=0.45]{pic/rendering1.eps} - \caption{描画計算の範囲} \label{rendering1} - \end{center} -\end{figure} +%\vspace{0mm} +%\begin{figure}[htbp] +% \begin{center} +% \includegraphics[scale=0.45]{pic/rendering1.eps} +% \caption{描画計算の範囲} \label{rendering1} +% \end{center} +%\end{figure} \vspace{-7mm} -\subsubsection{SceneGraphからSpanを作るまで} -CeriumではSceneGraphからRenderingに至るまでに以下の図で示すような流れがある。 +\subsection{SceneGraphからSpanを作るまで} +CeriumではSceneGraphからRenderingに至るまでに以下で示すような流れがある。\\ +1.SceneGraphから、SPEのLSに収まるサイズのSceneGraphPackを生成する。\\ +2.SceneGraphが持つ情報から、Polygonの座標を計算し、PolygonPackを生成する。\\ +3.PolygonPackから、同じY座標を持つ線分の集合SpanPackを生成する。\\ +4.Spanに対応する、描画に必要なTextureをSpanPackに付与する。\\ +5.SpanPackとTextureをZ Bufferを用いて描画する\\ \vspace{0mm} \begin{figure}[htbp] @@ -121,27 +122,41 @@ \end{center} \end{figure} -以上の工程でそれぞれSPEにTaskを渡し、処理を行っているが、Taskは一つにまとめられて一基のSPEで実行されている。この部分のTaskを複数に分割、複数のSPEに割当て並列処理を行うことによって高速化を計る。 +以上の工程でそれぞれSPEにTaskを渡し、処理を行っているが、Taskは一つにまとめられて一基のSPEで実行されている。%この部分のTaskを複数に分割、複数のSPEに割当て並列処理を行うことによって高速化を計る。 \section{現状とこれからの課題} - -\vspace{-5mm} - -TaskMangerを使った例題としてWordCountを実装した。inputされたfileをmmapでメモリにマッピングし、そのdataを分割。各SPEに、WordCountのTaskと分割されたdataを渡す。SPEは渡されたdataをwordcountし、指定されたoutput領域に書き込む。全てのwordcountが実行し終えるとその結果をppe側で集計し、結果を出力する。 - -..... 光源をCell +\subsection{TaskManagerの例題} +CeriumのTaskManagerの勉強としてTaskMangerを用いたWordCountを実装した。inputされたfileをmmapでメモリにマッピングし、そのdataを分割。各SPEに、WordCountのTaskと分割されたdataを渡す。SPEは渡されたdataをwordcountし、指定されたoutput領域に書き込む。全てのwordcountが実行し終えるとその結果をppe側で集計し、結果を出力する。 +\subsection{Cell上での光源の実装} +RenderingEngineの機能として光源の計算を実装した。現在、光源はppeだけを使ったfifo形式のみに実装されているので、これからCellのspe上での実装をしなければならない。 +%..... 光源をCell +\subsection{各Rendering工程の並列化} +SceneGraphからSpanを生成するまでの各段階でTaskを分割、複数のSPEに割り振り並列に処理を行うように実装する。\\ +・SceceGraph → Polgonの並列化\\ +不要な場合もある\\ +%↑ここよくわかってない。 +・Polygon → Spanの並列化\\ +ここで生成されたSpanは同じ X, Y 領域でまとめて、次のSPU taskに渡す必要がある。バラバラな領域のSpanを渡すと幾つかのTextureをSPEのLSへローディングしなければならず、DMA転送待ちが入ってしまう。 -..... SceceGraph -> Polgon - 不要な場合もある +\subsection{Clipping} +%Zバッファ法? +描画対象のオブジャクトが重なり描画する必要のない部分が生じることがある。描画する必要のない部分を描画の早い段階で明確にし、描画対象から削除する必要がある。 -..... Polygon -> Span - Span は、同じ X, Y 領域でまとめて、次のSPU taskに渡す必要がある。 +%Clipping 完全に隠れたpolygonを早い段階で削除する + +\subsection{背景の特別扱い} + +%背景の特別扱い。どう特別扱いするのかな -Clipping 完全に隠れたpolygonを早い段階で削除する +背景は1 dot ずつ書くのではなく、特別扱いする + +オブジェクトは1dotずつ計算し描画しているが、背景はあらかじめ予想できる描画領域である。 -背景の特別扱い - 1 dot ずつ書くのではなく、特別扱いする - zero clear DMA +\subsection{描画対象がない空間の扱い} + +CeriumのRenderingEngineは描画する対象がない部分も毎フレーム描画計算をしている。それでは計算する必要のない部分も計算してしまい、無駄な時間が生じる。そこで、描画する対象がない部分の判定を行い、zero clear DMAなどを用いて計算の手間を省く必要がある。 + +%zero clear DMA %その流れを以下に示す。 @@ -164,5 +179,8 @@ \bibitem{3} fixstars: http://cell.fixstars.com/ps3linux/index.php/メインページ +\bibitem{4} OpenCL: +http://www.khronos.org/opencl/ + \end{thebibliography} \end{document}