ゲームフレームワーク Cerium TaskManager の改良
金城 裕, 河野 真治,
多賀野 海人, 小林 佑亮
琉球大学大学院理工学研究科情報工学専攻並列信頼研
概要
ゲームフレームワーク Cerium TaskManager を開発した。
- 琉球大学の学生実験で使用している
- 短期間でPS3/Cell上で並列処理されるゲーム開発が可能
Ceriumの改良を行いOpenGLと比べ、2.9倍の性能向上を達成した(Cell上)
|
OpenGL |
Cerium |
性能差 |
dandy |
17.5FPS |
49.5FPS |
2.9倍 |
FPS(Frames Per Second)
概要
Amdahlの法則より
プログラム全体の並列化率が低ければ、マルチコアの性能を活かすことはできない。
SPEの稼働率を落とさない為の改良点
- PPEとSPE間の通信回数を削減、タイミングを変更
- Taskのパイプライン化
- テクスチャをSPE内でキャッシュ
以上の改良により、FPSが5〜10倍程度性能向上がありました
概要
Amdahlの法則より
プログラム全体の並列化率が低ければ、マルチコアの性能を活かすことはできない。
SPEの稼働率を落とさない為の改良点
- PPEとSPE間の通信回数を削減、タイミングを変更
- Taskのパイプライン化
- テクスチャをSPE内でキャッシュ
Ceriumの改良点を紹介していく。
Cellの構成
Cell Broadband Engine
- ソニー・コンピュータエンタテインメント、ソニー、IBM , 東芝によって開発されたマルチコア CPU である
- 1個のPPEと8個のSPEがリングバスで構成されている
- SPEは256KBのLocalStore(LS)を持つ
- SPEからメインメモリへは直接アクセスできない
- SPEが持つMFC(Memroy Flow Controller)へDMA命令を送ることで行う
Cellの基本機能
DMA
Mailbox
- SPEのMFC内にあるFIFOキュー
- PPEとSPE間で32bitメッセージの交換に用いられる
Ceriumの構成
Ceriumの構成
- TaskManager
- ユーザが定義したTaskを管理し、各コアに割り当てる
- RenderingEngine
- オブジェクトを画面に描画する
- 3種類のTaskから構成される
- SceneGraph
- ゲームのルールを記述してく
- ゲームのシーンを作成し、それを切り替えながらゲームを進行する
- OpenSceneGraphのようなもの
TaskManager
TaskManager は、Taskと呼ばれる分割された各プログラムを管理する。Task の単位
はサブルーチンである。Task 同士の依存関係を考慮しながら実行していく。
Task を生成する際に、以下のような要素が設定可能である
- input data, output data, parameter
これらは関数でいうところの引数に価する
- cpu type
Task を PPE または SPE のどちらで実行するのかを示している
- dependency
他の Task との依存関係を示している
RenderingEngineの構成
RenderingEngineの構成
- CreatePolygon
- CreateSpan
- ポリゴンをSpanと呼ばれる水平な線に分ける(SPE)
- DrawSpan
改良前RenderingEngine
改良前のRenderingEngineの例題
地球と月の例題
|
FPS |
mail待ちの割合 |
SPE稼働率 |
universe |
17FPS |
53.6% |
45.4% |
処理全体の45%時間がmail待ちになっている.
Mail待ちについて
mail待ちが起こるタイミング
- SPEが次のTaskのリストを待つとき
- SPEがTaskの完了を書きこむとき
- MailQueueで削減
- TaskArrayで削減
バリア同期
RenderingEngineのTaskは、3つそれぞれバリア同期をしている。
パイプライン化
地球と月を表示する例題(universe)を使用。
パイプライン化の比較
パイプライン化の効果(universe)
|
FPS |
mail待ちの割合 |
稼働率 |
Pipelineあり |
19.6FPS |
68.8% |
29% |
Pipelineなし |
17FPS |
72.6% |
25.4% |
パイプライン化の比較
地球と月を表示する例題(universe)を使用。
パイプライン化の効果(universe)
|
FPS |
mail待ちの割合 |
稼働率 |
Pipelineあり |
19.6FPS |
68.8% |
29% |
Pipelineなし |
17FPS |
72.6% |
25.4% |
RenderingEngine
RenderingEngineでは、描画するためのテクスチャをSPEに読み込む必要がある
テクスチャをSPE内でのキャッシュした。
- DrawSpan内で、描画するためのテクスチャデータを読み込む。
- テクスチャは分割さていて、必要な時に必要な部分を読み込む
- そこで、テクスチャをキャッシュするようにした(LRU)
- テクスチャのデータはハッシュで管理する
SPEのキャッシュ効果
SPEのキャッシュの効果
|
キャッシュなし |
キャッシュあり |
性能 |
ball_bound |
4FPS |
30FPS |
7.5倍 |
universe |
6FPS |
17FPS |
2.8倍 |
panel |
0.2FPS |
2.6FPS |
13倍 |
SPEのキャッシュ効果
SPEのキャッシュの効果
|
キャッシュなし |
キャッシュあり |
性能差 |
ball_bound |
28FPS |
30FPS |
+2FPS |
universe |
22.9FPS |
17FPS |
-5.9FPS |
panel |
5.0FPS |
2.6FPS |
-2.4FPS |
ball_bound は扱うテクスチャが少なく、小さい
MailQueueの効果
MailQueueの効果
|
改良前 |
改良後 |
性能 |
universe |
16FPS |
18.5FPS |
12%向上 |
地球と月を表示する例題を使って計測した。
TaskArray
Task毎のMailは、Task同士の依存関係を解決するために用いている。
- 依存関係はグループ化できる
- TaskArrayを用いて複数のTaskのMailを一つに扱う
Mailの数を減らせるので、Mailのための処理が減る。その分処理速度が上がる
TaskArray
TaskArrayの効果(universe)
|
改良前 |
改良後 |
性能 |
universe |
16FPS |
18.5FPS |
12%向上 |
MailQueueとTaskArray
MailQueueとTaskArrayの効果(universe)
TaskArray |
MailQueue |
FPS |
性能 |
あり |
あり |
20FPS |
22%向上 |
あり |
なし |
18.5FPS |
12%向上 |
なし |
あり |
18.5FPS |
12%向上 |
なし |
なし |
16.4FPS |
0%向上 |
OpenGLとの比較
OpenGL(Open Graphics Library)とは、Silicon Graphics社が開発した、3Dグラフィックス処理の
ためのプログラミングインターフェース。Taskに分割され、SPEを使用したCeriumと、PPEのみで動作
するOpenGLとで、処理速度の比較をした。
比較する例題には学生が実験中に作成したSuperDandyを用いた。
OpenGLとの比較
|
OpenGL |
Cerium |
性能差 |
dandy |
17.5FPS |
49.5FPS |
2.9倍 |
コア一つを使用するOpenGLに比べ、Cerium では2.9倍の性能向上が見られた。
SPEを活用、待ち時間の短縮を行い、性能向上がみれた。
END
/*end*/
[any material that should appear in print but not on the slide]