# HG changeset patch # User gongo # Date 1206348570 -32400 # Node ID 2ef36d40ee96fe8972b5b70cb8ffb6b18393f062 # Parent 9216a2b217e6671c1c865a7e1af3e88c5c5301f9 *** empty log message *** diff -r 9216a2b217e6 -r 2ef36d40ee96 cell.tex --- a/cell.tex Mon Mar 24 03:22:50 2008 +0900 +++ b/cell.tex Mon Mar 24 17:49:30 2008 +0900 @@ -10,13 +10,12 @@ \begin{center} \includegraphics[scale=0.41]{figure/cbe.pdf} \caption{Cell Architecture} - %\ecaption{Cell Broadband Engine} \label{fig-cbe} \end{center} \end{figure} -各 SPE は 256KB のローカルメモリである LS (Local Store) を持ち、 -バスに負担をかけることなく並列に計算を進めることが出来る。 +SPE には 256KB の Local Store (LS) と呼ばれる、SPE から唯一直接参照できる +メモリ領域があり、バスに負担をかけることなく並列に計算を進めることが出来る。 SPE からメインメモリへは、直接アクセスすることは出来ず、 SPE を構成する一つである MFC (Memory Flow Controller) へ、チャネルを介して DMA (Direct Memory Access) 命令を送ることで行われる (\figref{fig-cbe-spe}) 。 @@ -25,7 +24,6 @@ \begin{center} \includegraphics[scale=0.6]{figure/cbe-spe.pdf} \caption{Synergetic Processor Element} - %\ecaption{Synergetic Processor Element} \label{fig-cbe-spe} \end{center} \end{figure} diff -r 9216a2b217e6 -r 2ef36d40ee96 cerium-manager.tex --- a/cerium-manager.tex Mon Mar 24 03:22:50 2008 +0900 +++ b/cerium-manager.tex Mon Mar 24 17:49:30 2008 +0900 @@ -1,6 +1,60 @@ \subsection{Task Manager} -%% タスクの管理 (依存関係とか) -%% コードのロード、必要性 (256しかないからとか) -%% TaskManager の API -%% PPE 側と SPE 側、二つとも説明。PPE は上のでいいかな -%% SPE 側はパイプラインとか +Task Manager は、Task と呼ばれる分割された各プログラムを +管理するライブラリである。Task 同士の依存関係を考慮しながら +メモリ上にマッピングし、SPE 上ではそのプログラムを +DMA 転送によりロードする (\figref{fig-manager-load}) 。 +これは SPE の LS が 256 KB しかないため、必要なコードだけを使うように +入れ替える必要がある。 + +\begin{figure}[tb] + \begin{center} + \includegraphics[scale=0.35]{figure/manager-load.pdf} + \caption{Task Manager} + \label{fig-manager-load} + \end{center} +\end{figure} + +現在実装されている Task Manager の API を \tabref{tab:manager-api} に示す。 + +\begin{table}[b] + \caption{Task Manager API} \label{tab:manager-api} + \hbox to\hsize{\hfil + \begin{tabular}{r|l} \hline \hline + create\_task & Task を生成する \\ \hline + spawn & Task を実行 Task Queue に登録する \\ \hline + set\_depend & Task の依存関係の考慮 \\\hline + set\_cpu & Task を実行する CPU の設定 \\ \hline + run & 実行 Task Queue の実行 \\ \hline + \end{tabular}\hfil} +\end{table} + +\subsubsection{並列処理} + +Cell ではあらゆるレベルで並列に動作させることが求められる。 +ダブルバッファがその一例として挙げられる。 +前述した通り、Cell ではそれぞれのコアがメインメモリを +直接参照することは出来ず、DMA 転送によりデータをやりとりする。 +DMA は CPU を介さず直接データ転送を行う方式である。そのため、 +DMA している間は SPE は何らかの処理を行うことが出来る。 +また、SPE に Input Buffer と Output Buffer を二つずつ用意することにより、 +パイプライン処理が可能となる (\figref{fig-pipeline}) 。 + +\begin{figure}[tb] + \begin{center} + \includegraphics[scale=0.43]{figure/pipeline.pdf} + \caption{Pipeline} + \label{fig-pipeline} + \end{center} +\end{figure} + +Task Manager のパイプライン処理を \figref{fig-cerium} に適用させると、 +\figref{fig-manager-pipeline} のようにパイプライン的に動作する。 + + +\begin{figure}[tb] + \begin{center} + \includegraphics[scale=0.36]{figure/manager-pipeline.pdf} + \caption{Task Manager が行う Pipeline} + \label{fig-manager-pipeline} + \end{center} +\end{figure} diff -r 9216a2b217e6 -r 2ef36d40ee96 cerium-rendering.tex --- a/cerium-rendering.tex Mon Mar 24 03:22:50 2008 +0900 +++ b/cerium-rendering.tex Mon Mar 24 17:49:30 2008 +0900 @@ -1,5 +1,36 @@ -\subsection{Rendering Engine} -%% SPAN とはなんぞや -%% データ構造 (PolygonPack, SpanPack) とはなんぞや -%% ぐらいを説明すればおkのはず +\subsection{Rendering Engine} \label{sec-rendering-engine} +Rendering Engine は Polygon から Span を生成する部分と Span に RGB を +マッピングし描画する部分と二つに分けることが出来る。 +Span とは、Polygon に対するある特定の Y 座標に関するデータを抜き出した +ものである (\figref{fig-span}) 。 + +\begin{figure}[tb] + \begin{center} + \includegraphics[scale=0.48]{figure/span.pdf} + \caption{Span} + \label{fig-span} + \end{center} +\end{figure} + +Span はテクスチャ情報のアドレスと高さと幅、それに加えて +ポリゴンのある Y 座標に対する左端のピクセル情報、右端のピクセル情報、 +そして Span の長さを持つ。 +生成された Span を SPE に DMA 転送し描画処理を行うわけだが、 +全ての Span を SPE に送るのは問題がある。 +先に述べたように、SPE が扱えるメモリ領域は 256KB と非常に小さい。 +本研究の画面環境が 1920x1080 であるため、Span の情報は元より、 +描画に使う Z Buffer のサイズも、 +1 line だけで 1920 * 4byte(RGBA) = 7 KB となる。 +そこで、SPE に DMA 転送する前に、Y 座標を 8 line 毎に +Span のリストを生成する。これを SpanPack とする。 +8 line 毎にとっている理由は、SPE が持てる Z Buffer が 8 line 分 (60KB) +ぐらいだろうという見解からくるものである。 + +Span が持つ情報からテクスチャを計算し、ピクセル毎の RGB$\alpha$情報を +取得する。しかし、SPE の メモリ領域の問題から、あらかじめ +全てのテクスチャを転送しておくことが不可能な場合がある。 +それらを考慮し、テクスチャを分割する必要がある。 +テクスチャは、8x8 の大きさに分割される。 +Span はそれぞれのテクスチャに沿って生成される。つまり、 +Span 一つにつき、分割したテクスチャ一つが DMA される。 diff -r 9216a2b217e6 -r 2ef36d40ee96 cerium-scene_graph.tex --- a/cerium-scene_graph.tex Mon Mar 24 03:22:50 2008 +0900 +++ b/cerium-scene_graph.tex Mon Mar 24 17:49:30 2008 +0900 @@ -1,5 +1,5 @@ \subsection{Scene Graph} -本稿では、ゲーム中の一つの場面 (Scene) を構成するオブジェクトやその振る舞い、 +本研究では、ゲーム中の一つの場面 (Scene) を構成するオブジェクトやその振る舞い、 ゲームのルールの集合を Scene Graph とする。Scene Graph のノードは 親子関係を持つ木構造で構成される (\figref{fig-scene_graph}) 。 @@ -33,7 +33,11 @@ Scene Graph の親子関係に沿って TransMatrix を計算し、Move(), Collision() を 実行することで Scene Graph 内のオブジェクトが変化する。 Collision() によって Move() が変更され、Move() によって Coordinates や -Angle が変更される。これらをどのように変化させるかがゲームのルールとなる。 +Angle が変更される。ここが、\figref{fig-cerium} の Transform にあたる。 +計算が終わると、Gather で頂点を PolygonPack にまとめる。 +PolygonPack は光源の情報とテクスチャの情報、頂点の情報から構成される。 + +%% PolygonPack の定義も載せるべき? 今回は Scene Graph の作成に、オープンソースの 3D モデリングツールである Blender \cite{blender} を用いる。Blender でオブジェクトを作成し、 diff -r 9216a2b217e6 -r 2ef36d40ee96 cerium.tex --- a/cerium.tex Mon Mar 24 03:22:50 2008 +0900 +++ b/cerium.tex Mon Mar 24 17:49:30 2008 +0900 @@ -1,8 +1,22 @@ \section{Cerium} -Cerium は Scene Graph, Rendering Engine, Task Manager から構成される。 -Scene Graph と Rendering Engine が結合して初めて -画面上に描画が可能となり、その二つを Task Manager が -SPE 上で実行させる仕様となっている。 +Cerium は Scene Graph, Rendering Engine, Task Manager から構成され、 + +\begin{enumerate} + \item Scene Graph が持つ Polygon の座標から、実際に表示する座標の計算を行い、 + PolygonPack を生成する + \item PolygonPack から、同じ Y 座標を持つ線分の集合 SpanPack を生成する + \item SpanPack を (Texture を読み込みながら) Z Buffer を用いて描画する +\end{enumerate} + +という 3 つのタスクを持つ (\figref{fig-cerium})。 + +\begin{figure}[tb] + \begin{center} + \includegraphics[scale=0.35]{figure/cerium.pdf} + \caption{Cerium の 要素} + \label{fig-cerium} + \end{center} +\end{figure} \input{cerium-scene_graph} % Scene Graph \input{cerium-rendering} % Rendering Engine diff -r 9216a2b217e6 -r 2ef36d40ee96 cerium_dev.tex --- a/cerium_dev.tex Mon Mar 24 03:22:50 2008 +0900 +++ b/cerium_dev.tex Mon Mar 24 17:49:30 2008 +0900 @@ -13,14 +13,4 @@ この段階では、入力に対して出力が一意に決まる状況であり、テストは容易である。 シーケンシャルな実装であるため、デバッグも二分法により容易に行うことが出来る。 -(\ref{list_dev_2}) における SPE を考慮したデータ構造とは、 -SPE が持つ 256KB という非常に小さなメモリ領域に収まり且つ必要な情報が -効率よく格納されているデータ構造体である。 -今回は PolygonPack, SpanPack というデータ構造を定義した。 - -\begin{itemize} - \item PolygonPack : Scene Graph から得られた、三角形ポリゴンの頂点の座標、 - テクスチャの情報、光源の情報から構成される。 - \item SpanPack : - -\end{itemize} +(\ref{list_dev_2}) に diff -r 9216a2b217e6 -r 2ef36d40ee96 dummy.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dummy.tex Mon Mar 24 17:49:30 2008 +0900 @@ -0,0 +1,60 @@ +%%% jdummy.def +% +\DeclareRelationFont{JY1}{mc}{it}{}{OT1}{cmr}{it}{} +\DeclareRelationFont{JT1}{mc}{it}{}{OT1}{cmr}{it}{} +\DeclareFontShape{JY1}{mc}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*min + <10.95><12><14.4><17.28><20.74><24.88> min10 + <-> min10}{} +\DeclareFontShape{JT1}{mc}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*tmin + <10.95><12><14.4><17.28><20.74><24.88> tmin10 + <-> tmin10}{} +\DeclareRelationFont{JY1}{mc}{sl}{}{OT1}{cmr}{sl}{} +\DeclareRelationFont{JT1}{mc}{sl}{}{OT1}{cmr}{sl}{} +\DeclareFontShape{JY1}{mc}{m}{sl}{<5> <6> <7> <8> <9> <10> sgen*min + <10.95><12><14.4><17.28><20.74><24.88> min10 + <-> min10}{} +\DeclareFontShape{JT1}{mc}{m}{sl}{<5> <6> <7> <8> <9> <10> sgen*tmin + <10.95><12><14.4><17.28><20.74><24.88> tmin10 + <-> tmin10}{} +\DeclareRelationFont{JY1}{mc}{sc}{}{OT1}{cmr}{sc}{} +\DeclareRelationFont{JT1}{mc}{sc}{}{OT1}{cmr}{sc}{} +\DeclareFontShape{JY1}{mc}{m}{sc}{<5> <6> <7> <8> <9> <10> sgen*min + <10.95><12><14.4><17.28><20.74><24.88> min10 + <-> min10}{} +\DeclareFontShape{JT1}{mc}{m}{sc}{<5> <6> <7> <8> <9> <10> sgen*tmin + <10.95><12><14.4><17.28><20.74><24.88> tmin10 + <-> tmin10}{} +\DeclareRelationFont{JY1}{gt}{it}{}{OT1}{cmbx}{it}{} +\DeclareRelationFont{JT1}{gt}{it}{}{OT1}{cmbx}{it}{} +\DeclareFontShape{JY1}{mc}{bx}{it}{<5> <6> <7> <8> <9> <10> sgen*goth + <10.95><12><14.4><17.28><20.74><24.88> goth10 + <-> goth10}{} +\DeclareFontShape{JT1}{mc}{bx}{it}{<5> <6> <7> <8> <9> <10> sgen*tgoth + <10.95><12><14.4><17.28><20.74><24.88> tgoth10 + <-> tgoth10}{} +\DeclareRelationFont{JY1}{gt}{sl}{}{OT1}{cmbx}{sl}{} +\DeclareRelationFont{JT1}{gt}{sl}{}{OT1}{cmbx}{sl}{} +\DeclareFontShape{JY1}{mc}{bx}{sl}{<5> <6> <7> <8> <9> <10> sgen*goth + <10.95><12><14.4><17.28><20.74><24.88> goth10 + <-> goth10}{} +\DeclareFontShape{JT1}{mc}{bx}{sl}{<5> <6> <7> <8> <9> <10> sgen*tgoth + <10.95><12><14.4><17.28><20.74><24.88> tgoth10 + <-> tgoth10}{} +\DeclareRelationFont{JY1}{gt}{sc}{}{OT1}{cmbx}{sc}{} +\DeclareRelationFont{JT1}{gt}{sc}{}{OT1}{cmbx}{sc}{} +\DeclareFontShape{JY1}{mc}{bx}{sc}{<5> <6> <7> <8> <9> <10> sgen*goth + <10.95><12><14.4><17.28><20.74><24.88> goth10 + <-> goth10}{} +\DeclareFontShape{JT1}{mc}{bx}{sc}{<5> <6> <7> <8> <9> <10> sgen*tgoth + <10.95><12><14.4><17.28><20.74><24.88> tgoth10 + <-> tgoth10}{} +\DeclareRelationFont{JY1}{gt}{it}{}{OT1}{cmr}{it}{} +\DeclareRelationFont{JT1}{gt}{it}{}{OT1}{cmr}{it}{} +\DeclareFontShape{JY1}{gt}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*goth + <10.95><12><14.4><17.28><20.74><24.88> goth10 + <-> goth10}{} +\DeclareFontShape{JT1}{gt}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*tgoth + <10.95><12><14.4><17.28><20.74><24.88> tgoth10 + <-> tgoth10}{} +\endinput +%%%% end of jdummy.def diff -r 9216a2b217e6 -r 2ef36d40ee96 figure/cerium.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/cerium.bb Mon Mar 24 17:49:30 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./cerium.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 470 535 +%%CreationDate: Mon Mar 24 11:12:47 2008 + diff -r 9216a2b217e6 -r 2ef36d40ee96 figure/cerium.graffle Binary file figure/cerium.graffle has changed diff -r 9216a2b217e6 -r 2ef36d40ee96 figure/cerium.pdf Binary file figure/cerium.pdf has changed diff -r 9216a2b217e6 -r 2ef36d40ee96 figure/manager-load.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/manager-load.bb Mon Mar 24 17:49:30 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./manager-load.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 422 371 +%%CreationDate: Mon Mar 24 17:13:33 2008 + diff -r 9216a2b217e6 -r 2ef36d40ee96 figure/manager-load.graffle Binary file figure/manager-load.graffle has changed diff -r 9216a2b217e6 -r 2ef36d40ee96 figure/manager-load.pdf Binary file figure/manager-load.pdf has changed diff -r 9216a2b217e6 -r 2ef36d40ee96 figure/manager-pipeline.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/manager-pipeline.bb Mon Mar 24 17:49:30 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./manager-pipeline.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 557 276 +%%CreationDate: Mon Mar 24 18:15:49 2008 + diff -r 9216a2b217e6 -r 2ef36d40ee96 figure/manager-pipeline.graffle Binary file figure/manager-pipeline.graffle has changed diff -r 9216a2b217e6 -r 2ef36d40ee96 figure/manager-pipeline.pdf Binary file figure/manager-pipeline.pdf has changed diff -r 9216a2b217e6 -r 2ef36d40ee96 figure/pipeline.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/pipeline.bb Mon Mar 24 17:49:30 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./pipeline.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 465 205 +%%CreationDate: Mon Mar 24 17:57:34 2008 + diff -r 9216a2b217e6 -r 2ef36d40ee96 figure/pipeline.graffle Binary file figure/pipeline.graffle has changed diff -r 9216a2b217e6 -r 2ef36d40ee96 figure/pipeline.pdf Binary file figure/pipeline.pdf has changed diff -r 9216a2b217e6 -r 2ef36d40ee96 figure/span.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/span.bb Mon Mar 24 17:49:30 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./span.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 413 247 +%%CreationDate: Mon Mar 24 10:02:16 2008 + diff -r 9216a2b217e6 -r 2ef36d40ee96 figure/span.graffle Binary file figure/span.graffle has changed diff -r 9216a2b217e6 -r 2ef36d40ee96 figure/span.pdf Binary file figure/span.pdf has changed diff -r 9216a2b217e6 -r 2ef36d40ee96 sigos.tex --- a/sigos.tex Mon Mar 24 03:22:50 2008 +0900 +++ b/sigos.tex Mon Mar 24 17:49:30 2008 +0900 @@ -2,6 +2,8 @@ \usepackage[dvipdfm]{graphicx} \usepackage{url} +\input{dummy.tex} %% Font + % ユーザが定義したマクロなど. \makeatletter