マルチコア CPU における
SceneGraph を用いたゲームの作成
- 琉球大学 工学部 情報工学科 065746J
- 仲宗根広樹
- 指導教官:河野真治
研究目的と背景
高度な並列性を持つゲームマシンの性能を生かすために
プログラムの並列度を向上させる
- 当研究室では、学生実験で PlayStation 3 上でゲームプログラミングを行っている。
- ゲーム中の一つの場面を構成するオブジェクトやその振る舞い
ゲームのルールの集合である SceneGraph を導入した。
- SceneGraph の動作や衝突判定を一つの CPU で処理している。
- プログラムの並列化率が低ければその性能を生かすことができない
本研究では SceneGraph を
複数 CPU を用いて並列処理することを目的とする
発表の流れ
- SceneGraph とは
- 動作と描画の処理
- Property の導入
- Property を用いた例題
- 評価
- 今後の課題
SceneGraph とは
SceneGraph とはゲーム中の全てのオブジェクトを表す Tree 構造である。
ゲーム内のオブジェクトは個別に SceneGraphNode に分けられているので、ノードを別個に処理すると自然と並列度がでてくる。
SceneGraph とは(Con't)
SceneGraph の内部構造
データ |
説明 |
Vertex |
ポリゴンオブジェクトの頂点座標 |
Texture |
ポリゴンオブジェクトのテクスチャ座標 |
TextureImage |
テクスチャイメージ |
TransMatrix |
ポリゴンオブジェクトの変換行列 |
Coordinates |
オブジェクトの座標 |
Angle |
オブジェクトの角度 |
Property |
オブジェクトの内部情報 |
動作 |
説明 |
Move |
自律的なオブジェクトの動き |
Collision |
他のノードとの衝突判定 |
ゲームの流れ
オブジェクトが描画されるまでの流れ
- オブジェクトの動作を Move 関数、Collision 関数として定義する
- SceneGraph に Move, Collision をセットする
- 全ての SceneGraph の Move, Collision が実行される
- Move, Collision によって SceneGraph の値が変更される
- 変更された SceneGraph を用いて描画処理を行う
動作と描画の処理
現在、画面の描画とオブジェクトの動作は逐次的に行われている。
- Cellは1基の制御系のプロセッサコアPPEと、8基の演算系プロセッサコアSPEで構成される
- 現在、オブジェクトの動作は PPE で実行されている
- しかし、PPE よりも SPE の方が演算処理に優れている
- また SPE を用いることで並列に実行できる
そこで、オブジェクトの動作を SPE で行うことにより、画面の描画と並列に実行する。
Property の導入
- SPE で処理するには PPE からデータを送り込む必要がある。
- SceneGraph はオブジェクトの動作と描画処理の両方で用いられているので Polygon や Texture などの不要なデータが含まれている。
- しかし、SPE の Local Store は 256KB しかないので、SceneGraph を全て転送すると容量を超えてしまう可能性がある。
SceneGraph の代わりにゲームに必要な内部状態を保持した構造体 Property を用いる。
Property の導入(Con't)
Property には以下のパラメータが含まれている
- オブジェクトの動作に必要な Coordinates, Angle
- Tree を構成するための親子関係の情報
- SceneGraph を生成するための固有ID
Property はゲームごとに定義されている
Property の処理
- Property を SPE に転送し、SPE 上でオブジェクトの動作を行い Property を更新する。
- 更新されて返された Property を元に SceneGraphTree を生成する。
Property を用いた例題
Property を用いた例題として鎖のシミュレーション chain を使用した
この例題では Move の処理のみを行っており、Collision の処理は行っていない
実行速度比較
chain の Move を SPE で処理した場合と PPE で処理した場合の実行速度の比較を以下に示す。
|
FPS(Frame Par Second) |
PPE |
2.708696 |
SPE |
2.893348 |
Move を SPE で処理したことで
約7%の速度向上がみられた
Move は SPE 上にあるので、SIMD 演算を用いて、速度の向上が期待できる。
まとめと今後の課題
- 複数 SPE に均等に処理を割り振る例題の作成
- Collision を SPE で処理する例題の作成
- Property から SceneGraphTree を構築する部分において、SceneGraph の新規生成と削除を考慮した設計を行う
ご清聴ありがとうございました
Cellとは
Cellとはソニー、東芝、IBM社の3社が共同開発したマイクロプロセッサ。
Cellは1基の制御系のプロセッサコアPPEと、8基の演算系プロセッサコアSPEで構成される。
(Ceriumで扱えるSPEの数は6基)それぞれ高速なバスで接続されている
Ceriumとは
Ceriumとは当研究室で開発したゲーム開発用フレームワーク
Task Manager
タスクと呼ばれる分割されたプログラムを管理する
Scene Graph
ゲーム中のオブジェクトの振る舞いや、ルールを管理する。
Rendering Engine
Cerium独自に開発した描画用のエンジン
の3つの要素から構成される。
Ceriumは PS3/Cell、linux, macosx 上で動作する。
SIMD 演算とは
SIMD 演算とは1つの命令で複数のデータに対して処理を行う演算方式
Cellでは、SPEに実装されている128ビットレジスタを用いてSIMDを行うことができる