comparison resume/A-6-1-065746.tex @ 2:224fa99e11d0

fix
author aaa
date Thu, 29 Oct 2009 16:09:59 +0900
parents b365717191e4
children 641a3389548d
comparison
equal deleted inserted replaced
1:b365717191e4 2:224fa99e11d0
24 \author{065746J 仲宗根広樹 指導教員 : 河野真治} 24 \author{065746J 仲宗根広樹 指導教員 : 河野真治}
25 \date{\today} 25 \date{\today}
26 \maketitle 26 \maketitle
27 \thispagestyle{fancy} 27 \thispagestyle{fancy}
28 28
29 \section{概要}
30 ゲームプログラミングにおける並列処理は、データが処理される順番を把握することができないので出力結果などが特定しづらく、デバッグが困難である。データ転送やタスクの生成、管理等のこれまで学んだことのない技術が多く存在する。短期間の学生実験では新しい技術を習得することに時間を割かれ、ゲームの完成度を上げることが難しくなる。
31
32 本研究では、PlayStation3 上でゲームプログラミングを行う際に、Cell の性能を活かしながら、アーキテクチャに依存する記述を排除した、汎用的な並列プログラミングを目的としている
33
34
29 \section{SceneGraph を使ったゲーム作成} 35 \section{SceneGraph を使ったゲーム作成}
30 SceneGraph の処理を SPE を用いて処理させて SPE を常に busy 状態にすることを目標とする。
31
32 SceneGraph とはゲーム中の1つの場面(Scene) を構成するオブジェクトやその振る舞い、ゲームのルールの集合のことである。SceneGraph のノードは親子関係を持つ tree で構成される(図\ref{fig:SceneGraph})。 36 SceneGraph とはゲーム中の1つの場面(Scene) を構成するオブジェクトやその振る舞い、ゲームのルールの集合のことである。SceneGraph のノードは親子関係を持つ tree で構成される(図\ref{fig:SceneGraph})。
33 37
34 SceneGraph ノード は以下のようなデータと動作を持つ。 38 SceneGraph ノード は以下のようなデータと動作を持つ。
35 \begin{itemize} 39 \begin{itemize}
36 \item データ 40 \item データ
47 \item Move:自律的なオブジェクトの動き 51 \item Move:自律的なオブジェクトの動き
48 \item Collision:他のノードとの衝突判定をする 52 \item Collision:他のノードとの衝突判定をする
49 \end{enumerate} 53 \end{enumerate}
50 \end{itemize} 54 \end{itemize}
51 55
52 現在はゲームの main loop (PPE) で SceneGraph ノードのリストを辿り、シーケンシャルに Move, Collision を実行している。 56 %現在はゲームの main loop (PPE) で SceneGraph ノードのリストを辿り、シーケンシャルに Move, Collision を実行している。
53 Move, Collision はノードの数だけ実行されるので、ゲームの規模が大きくなればそれに比例して増大する。制御系プロセッサ PPE に膨大な量の演算をさせるのは好ましくない。 57 ゲームは各ノードの Move, Collision を実行して SceneGraph の描画を繰り返す事で進行する。
54 58 %Move, Collision はノードの数だけ実行されるので、ゲームの規模が大きくなればそれに比例して増大する。制御系プロセッサ PPE に膨大な量の演算をさせるのは好ましくない。
55 そこで、Move, Collision の処理を6基の SPE に割り振り並列に実行させる。 59 %本研究では Move, Collision の処理を複数のコアを用いて処理させて全てのコアが常に busy 状態になることを目標とする。
56 60
57 \begin{figure}[htb] 61 \begin{figure}[htb]
58 \begin{center} 62 \begin{center}
59 \includegraphics[scale=0.4]{image/SceneGraph.pdf} 63 \includegraphics[scale=0.4]{image/SceneGraph.pdf}
60 \caption{SceneGraph} 64 \caption{SceneGraph}
86 %ゲーム内で使用するオブジェクトは Cerium 独自の xml 形式で書かれており、xml ファイルを読込んで SceneGraph を生成する。 90 %ゲーム内で使用するオブジェクトは Cerium 独自の xml 形式で書かれており、xml ファイルを読込んで SceneGraph を生成する。
87 %Rendering に関しては処理を Task 単位に分割して SPE に投入して処理しているが、SceneGraph の処理は PPE 1つで行っている。 91 %Rendering に関しては処理を Task 単位に分割して SPE に投入して処理しているが、SceneGraph の処理は PPE 1つで行っている。
88 %SceneGraph の move, collision の処理は PPE で行っている。しかし PPE に単純な演算の繰り返しをさせるのは好ましくない。 92 %SceneGraph の move, collision の処理は PPE で行っている。しかし PPE に単純な演算の繰り返しをさせるのは好ましくない。
89 %そこで、SceneGraph の処理も Task に分割して SPE に投入し、Rendering と並行に走らせる事で処理速度の向上を計る。 93 %そこで、SceneGraph の処理も Task に分割して SPE に投入し、Rendering と並行に走らせる事で処理速度の向上を計る。
90 94
91 \section{SPE を用いた SceneGraph の処理} 95 \section{SceneGraph の並列処理}
92 SPE を用いた SceneGraph の処理の例題として、学生実験で作成されたゲーム vacuum を使用する。 96 \subsection{vacuum}
97 6基の SPE を用いたSceneGraph の処理の例題として、学生実験で作成されたゲーム vacuum を使用する。
93 98
94 vacuum には自機と吸収ブロック、敵ブロックの3種類のオブジェクトがあり、自機を上下左右に移動させ、ボタンを押している間は自機の周りのブロックを引き寄せ、うまく吸収ブロックだけを自機と衝突させるゲームである。 99 vacuum には自機と吸収ブロック、敵ブロックの3種類のオブジェクトがあり、自機を上下左右に移動させ、ボタンを押している間は自機の周りのブロックを引き寄せ、うまく吸収ブロックだけを自機と衝突させるゲームである。
95 100
101
102 \subsection{Move}
103 vacuum のオブジェクトは全て独立して動くので
104 \subsection{Collision}
96 vaccum の Collision は自機と吸収ブロック(Collision A)、自機と敵ブロック(Collision B)の二つがある。 105 vaccum の Collision は自機と吸収ブロック(Collision A)、自機と敵ブロック(Collision B)の二つがある。
97 Collision の種類毎に SPE で動作する Collision Task を作成する。Collision A Task は自機のノードと吸収ブロックのノードを渡す。Collision B Task には自機のノードと敵ブロックのノードを渡す。 106 Collision の種類毎に SPE で動作する Collision Task を作成する。Collision A Task は自機のノードと吸収ブロックのノードを渡す。Collision B Task には自機のノードと敵ブロックのノードを渡す。
98 107
99 しかし、SceneGraph ノードにはポリゴンを形成するための点やテクスチャの座標等が含まれている。これらの情報を全て SPE に送ると Local Store に入りきらないので、Move、Collision に必要な Coordinates, Angle, 親子関係の情報、生成消滅の情報を持つ Property の配列を作成する。Property は例題毎に用意して適宜要素を変更する。 108 しかし、SceneGraph ノードにはポリゴンを形成するための点やテクスチャの座標等が含まれている。これらの情報を全て SPE に送ると Local Store に入りきらないので、Move、Collision に必要な Coordinates, Angle, 親子関係の情報、生成消滅の情報を持つ Property の配列を作成する。Property は例題毎に用意して適宜要素を変更する。
100 Property は各ノードと1対1で対応している。SceneGraph の処理と Rendering を並行に実行するため Property の配列と SceneGraph の tree は2つ用意する。 109 Property は各ノードと1対1で対応している。SceneGraph の処理と Rendering を並行に実行するため Property の配列と SceneGraph の tree は2つ用意する。
110 \fi 119 \fi
111 120
112 \begin{figure}[htb] 121 \begin{figure}[htb]
113 \begin{center} 122 \begin{center}
114 \includegraphics[scale=0.43]{image/sgToSPE.pdf} 123 \includegraphics[scale=0.43]{image/sgToSPE.pdf}
115 \caption{Move, Collision を各 SPE に渡す} 124 \caption{Move, Collision Task を各 SPE に渡す}
116 \label{fig:sgToSPE} 125 \label{fig:sgToSPE}
117 \end{center} 126 \end{center}
118 \end{figure} 127 \end{figure}
128
129 All Move が実行されると
119 130
120 \if0 131 \if0
121 \begin{figure}[htb] 132 \begin{figure}[htb]
122 \begin{center} 133 \begin{center}
123 \includegraphics[scale=0.4]{image/SceneGraphTask.pdf} 134 \includegraphics[scale=0.4]{image/SceneGraphTask.pdf}
125 \label{fig:SceneGraphTask} 136 \label{fig:SceneGraphTask}
126 \end{center} 137 \end{center}
127 \end{figure} 138 \end{figure}
128 \fi 139 \fi
129 140
130 SPE には Property の配列を渡して move, collision の処理を行わせ、PPE 側では返されてきた Property の情報を元に SceneGraph 生成し Tree を再構成して Rendering に渡す。図\ref{fig:SceneGraphTask} 141 SPE は受け取った Property を用いて Move, Collision の処理を行い、Property の値を更新してPPE に返す、PPE 側では返されてきた Property の情報を元に SceneGraph し Tree を再構成して Rendering に渡す。
131 SceneGraph と Rendering を並行に実行するために、Property と SceneGraph のバッファは二つ用意しておき、一方は Rendering に、一方は SceneGraph の処理に使う。
132 Change では Move Collision と Rendering の処理を待ち合わせて同期をとり、バッファの入れ替えを行っている。図
133
134 142
135 \section{まとめと今後の課題} 143 \section{まとめと今後の課題}
136 \begin{itemize} 144 \begin{itemize}
137 \item 現在は SPE 1基で SceneGraph を処理する例題の作成途中なので、複数 SPE に均等に処理を割り振る例題の作成。 145 \item 現在は SPE 1基で SceneGraph を処理する例題の作成途中なので、複数 SPE に均等に処理を割り振る例題の作成。
138 \item Property から SceneGraph を生成し tree を構築する部分において、SceneGraph の新規生成と削除を考慮した設計を行う。 146 \item Property から SceneGraph を生成し tree を構築する部分において、SceneGraph の新規生成と削除を考慮した設計を行う。