発表の流れ
- Cellとは
- Ceriumとは
- Rendering Engine
- Rendering Engineの高機能化、高速化
- 成果とまとめ
Cellとは
Cellとはソニー、東芝、IBM社の3社が共同開発したマイクロプロセッサ
Cellは1基の制御系のプロセッサコア
PPEと、8基の演算系プロセッサコア
SPEで構成される(Ceriumで扱えるSPEの数は6基)。
PPEよりもSPEが高速なので、1SPE 上で実行するだけでも意味がある。
それぞれ高速なバスで接続されている
Ceriumとは
Ceriumとは当研究室で開発したゲーム開発用フレームワークである
Task Manager
タスクと呼ばれる分割されたプログラムを管理する
Scene Graph
ゲーム中のオブジェクトの振る舞いや、ルールを管理する。
Rendering Engine
Cerium独自に開発した描画用のエンジン
の3つの要素から構成される。
Ceriumは PS3/Cell、linux, macosx 上で動作する。
Rendering Engineの構成
Rendering Engineは主に3つのタスクから構成されている
CreatePolygonタスク
モデリングデータからポリゴンを生成するタスク
CreateSpanタスク
生成されたポリゴンを水平な直線(Span)に分割するタスク
DrawSpanタスク
Spanのデータを元に、画面に描画するタスク
Rendering Engineの流れ
CreatePolygon:
SceneGraph をもとに回転や並行移動したポリゴンを、モデルデータから生成するタスク
ポリゴンは三角形である
回転や平行移動はSceneGraphが持っている変換行列を用いる
Rendering Engineの流れ
CreateSpan:
三角形のポリゴンを線に分割するタスク。
生成されたポリゴンを水平な直線(Span)の集合へと分割する
Spanとは1ドット単位で分割された線
Rendering Engineの流れ
DrawSpan:
Spanを画面へ描画するタスク
Spanを1Dotずつ見ていき、対応する画面の1Dotに色をつける
色はSpanに対応する画像の色をみて決める
Rendering Engineの高機能化と高速化
Rendering Engine に光源機能を実装した
光源は点光源で、数は4つに設定
SceneGraph側から光源の位置を操作できる
光源の実装手法
光源処理はDrawSpanタスク内で行う
光源処理は以下の手順で行った
- 描画対象のドット座標と光源座標から光源ベクトルを算出
- 光源ベクトルと法線ベクトルとの内積を計算
- 描画対象のドッドRGBに内積を掛け算する
以上の演算を行うと、影のついた描画を行うことができる
これにより光源機能を実装できた
光源処理のSIMD化
光源処理で行う演算をSIMD演算で実装した
Cellでは、SPEに実装されている128ビットレジスタを用いてSIMDを行うことができる
SIMDとは、1つの命令で複数のデータに対して処理を行う演算方式である
光源処理のSIMD化(Con't)
例えば光源ベクトルを求めるための演算をSIMD化すると
SIMD化なし
vector[0] = x - light[0];
vector[1] = y - light[1];
vector[2] = z - light[2];
SIMD化あり
vector = spu_sub(xyz,light);
SIMD化すると1命令になる
SIMD有無による実行速度比較
|
SIMD化なし (FPS) |
SIMD化あり (FPS) |
Cell (光源数1) |
7.56 |
8.12 |
Cell (光源数4) |
7.21 |
7.60 |
SIMD を用いることによる実行速度の比較
光源数4のSIMD化有無で比較すると、
約5.4%の速度向上がみられた
また光源数1のSIMDなしと光源数4のSIMDありと比較すると近いものになった。
このことより、SIMD化によって光源数4の処理を、光源数1の処理とほぼ同じ速度で実行できたと言え、
実行速度が向上したことがわかる。
成果とまとめ
- 成果1
- Cell上ソフトウェアレンダリングに光源機能を追加できた
- 成果2
- 光源処理の演算をSIMD化し、高速化に成功した
- 成果3
- SIMD化による速度の向上がみられ、プログラムの実行速度の向上にSIMDが有効であることが確認できた
この結果を用いて、レンダリングの各格段の演算をSIMD化することで、さらなる高速化が望める
今後の課題
- 現在はオブジェクトが重なって表示されない部分の検出を、ドット毎に描画する際に行っている
- しかし、もっと早い段階での検出もした方がよい
- 例えば、Span単位での重なりを検出するなど、各段階でフィルターをかける必要がある
- それによって、必要のない演算を積極的に取り除くことができ、高速化がはかれる
end
Task Manager
Task Manager はタスクと呼ばれる分割された各プログラムを管理する。
タスク間の依存関係を考慮しながら実行可能になったタスクをSPEに割り振る。
タスクの単位はサブルーチンまたは関数
Scene Graph
ゲーム中のオブジェクトの振る舞いや、ルールを管理する
[any material that should appear in print but not on the slide]