# HG changeset patch # User aaa # Date 1265873226 -32400 # Node ID 0e2dc887acbc2112f198c4091dd915d524627bb4 # Parent e7afb57e4d2ddb32415ad1f7e04fbb6f447c532b fix resume diff -r e7afb57e4d2d -r 0e2dc887acbc resume/A-6-1-065746.tex --- a/resume/A-6-1-065746.tex Thu Feb 11 11:47:08 2010 +0900 +++ b/resume/A-6-1-065746.tex Thu Feb 11 16:27:06 2010 +0900 @@ -67,11 +67,6 @@ SceneGraph の親子関係に沿って TransMatrix を計算し、Move, Collision を実行することで SceneGraph 内のオブジェクトが変化する。Collision によって Move が変更され、Move によって Coordinates や Angle が変更される。これらをどのように変更させるかがゲームのルールになる。 -%現在はゲームの main loop (PPE) で SceneGraph ノードのリストを辿り、シーケンシャルに Move, Collision を実行している。 -%ゲームは各ノードの Move, Collision を実行して SceneGraph の描画を繰り返す事で進行する。 -%Move, Collision はノードの数だけ実行されるので、ゲームの規模が大きくなればそれに比例して増大する。制御系プロセッサ PPE に膨大な量の演算をさせるのは好ましくない。 -%本研究では Move, Collision の処理を複数のコアを用いて処理させて全てのコアが常に busy 状態になることを目標とする。 - \begin{figure}[htb] \begin{center} \includegraphics[scale=0.4]{image/SceneGraph.pdf} @@ -80,38 +75,20 @@ \end{center} \end{figure} -%Cerium の並列度の向上を計り、プレイヤーが満足できるゲームの処理速度を実現させる。 -%家庭用ゲーム機 PlayStation 3 には Cell というヘテロジニアスマルチコアプロセッサが搭載されている。 -%当研究室では Cell 上でゲームプログラミングができる Cell Task Manager Cerium を開発した。 -%Cerium は TaskManager, SceneGraph, Rendering Engine の3つの機能に分けられる。 - -%Cerium の並列度の向上を計り、プレイヤーが満足できる処理速度を実現させる -%当研究室では家庭用ゲーム機 PlayStation 3 上でゲームプログラミングができる Cell Task Manager Cerium を開発した。 -%現在、PlayStation 3 の GPU にアクセスする API は公開されていないため Cerium は独自に Rendering Engine を持っている。 -%Cerium は TaskManager, Rendering, SceneGraph の三つで構成されている。 - - \section{Cell Broadband Engine} \label{sec:cell} Cell\cite{cell} は1基の PowerPC Processor Element (PPE) と8基の Synergistic Processor Element (SPE) で構成されるヘテロジニアスマルチコアプロセッサである。各プロセッサは高速バスで接続されている。本研究では6基の SPE が使用可能となっている。 -% PPE は汎用プロセッサでありオペレーティングシステムやアプリケーションの実行、SPE を制御する役割を持っている。SPE は演算を繰り返すマルチメディア系の処理を得意とする演算系プロセッサである。SPE は 演算処理を行う SPU、256 KByte の Local Store、メインメモリや他の SPE とデータをやり取りする Memory Flow Controller の3つで構成されている。 - \section{Cerium} Cerium とは当研究室で開発した Cell 上で動作するゲームフレームワークである。 Cerium は SceneGraph、OSMesa に代表される Rendering Engine、そしてそれらの実行単位を Task とし、動的に全てのコアが動作する様な割り振りを行うカーネル TaskManager で構成されている。 現在、Cerium では SceneGraph の Move, Collision を PPE でシーケンシャルに処理しているので、この部分の処理を SPE を用いて並列に処理するように変更する。 -%ゲーム内で使用するオブジェクトは Cerium 独自の xml 形式で書かれており、xml ファイルを読込んで SceneGraph を生成する。 -%Rendering に関しては処理を Task 単位に分割して SPE に投入して処理しているが、SceneGraph の処理は PPE 1つで行っている。 -%SceneGraph の move, collision の処理は PPE で行っている。しかし PPE に単純な演算の繰り返しをさせるのは好ましくない。 -%そこで、SceneGraph の処理も Task に分割して SPE に投入し、Rendering と並行に走らせる事で処理速度の向上を計る。 +\section{SceneGraph の並列処理} +\subsection{Property} +オブジェクトの動作や衝突判定に必要になるのは Coordinates や Angle であり、Polygon や Texture のデータは不要になる。そこでゲームに必要なオブジェクトの内部状態を持った Property を用いる。Property には Coordinates, Angle の他に、tree を再生成する時に必要な親子関係なども含める。一方の tree を Rendering で使用し、もう一方を Move, Collision で使用し、両方の処理が終わったら、相互にバッファを切り替える。切替える時に二つのタスクは同期する必要がある。 -\section{SceneGraph の並列処理} -Rendering と SceneGraph の処理を並行に実行するためには SceneGraph の tree と後述する Property のバッファは2つずつ用意する必要がある。 -一方の SceneGraph tree と Property を Rendering で使用し、もう一方を Move, Collision で使用し、両方の処理が終わったら、相互にバッファを切り替える。切替える時に二つのタスクは同期する必要がある。 -%ゲーム内のオブジェクトは個別に SceneGraph ノードに分けられているので、SceneGraph を別個に処理するだけで並列処理になる。 \subsection{vacuum} SceneGraph の処理の例題として、学生実験で作成されたゲーム vacuum を使用する。 vacuum には自機と吸収ブロック、敵ブロックの3種類のオブジェクトがあり、自機を上下左右に移動させ、ボタンを押している間は自機の周りのブロックを引き寄せ、うまく吸収ブロックだけを自機と衝突させるゲームである。このゲームのMoveとCollisionは以下のようになる。