changeset 3:2ef36d40ee96

*** empty log message ***
author gongo
date Mon, 24 Mar 2008 17:49:30 +0900
parents 9216a2b217e6
children 869c475cc108
files cell.tex cerium-manager.tex cerium-rendering.tex cerium-scene_graph.tex cerium.tex cerium_dev.tex dummy.tex figure/cerium.bb figure/cerium.graffle figure/cerium.pdf figure/manager-load.bb figure/manager-load.graffle figure/manager-load.pdf figure/manager-pipeline.bb figure/manager-pipeline.graffle figure/manager-pipeline.pdf figure/pipeline.bb figure/pipeline.graffle figure/pipeline.pdf figure/span.bb figure/span.graffle figure/span.pdf sigos.tex
diffstat 23 files changed, 208 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- 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}
--- 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}
--- 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 される。
--- 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 でオブジェクトを作成し、
--- 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
--- 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}) に
--- /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
--- /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
+
Binary file figure/cerium.graffle has changed
Binary file figure/cerium.pdf has changed
--- /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
+
Binary file figure/manager-load.graffle has changed
Binary file figure/manager-load.pdf has changed
--- /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
+
Binary file figure/manager-pipeline.graffle has changed
Binary file figure/manager-pipeline.pdf has changed
--- /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
+
Binary file figure/pipeline.graffle has changed
Binary file figure/pipeline.pdf has changed
--- /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
+
Binary file figure/span.graffle has changed
Binary file figure/span.pdf has changed
--- 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