Cell Task Manager Cerium の
SPU内データ管理
多賀野海人、小林佑亮、宮國渡、河野真治
琉球大学
Apr, 24, 2009
Cell に搭載されている SPE は Local Store (256KB) にしかアクセスできない。
メインメモリにアクセスするには MFC を用いて Direct Memory Access 命令を 送らなければならない。
また、この DMA には待ち時間が存在する。待ち時間の間 SPE が動作しなければマルチコアプロセッサのパフォーマンス が極端に下がる。
SPE 内のデータ管理を行い Cell プログラミングの並列度を確保する手法を提案する。
本研究室で開発した Cerium というの Rendering Engine を 用いたゲームプログラミングを例題とする。
描画に必要な Texture データは、SPE の LS に収まりきらない場合があるので、 データを分割して転送、処理する必要がある。
既に SPE 内にデータが転送されている場合、そのデータの管理を SPE 内で行うことによって、 DMA 転送待ち時間の間も SPE 内での処理を継続させる。
DMA (Direct Memory Access)
|
Task と呼ばれる、分割された各プログラムを管理する
/* task2 は task1、task3 の終了を待つ */ task2->wait_for(task1); task2->wait_for(task3);
/* SPE1で実行する */ task1->set_cpu(SPE_1); /* SPEのどれかで実行する */ task2->set_cpu(SPE_ANY); /* PPEで実行する */ task3->set_cpu(PPE);
Texture の縮小画像の作成
描画されるオブジェクトが小さい場合、そのままの大きさの Texture は必要ない
Span の長さと、縮小 Texture の大きさが一致するような Scale の縮小 Texture を選択する
Texture は縦横ともに 1/2、1/4、1/8 と、2分の1ずつ縮小させる (最小 8x8 pixel)
Architecture | Scale なし (FPS) | Scale あり (FPS) | 速度の向上(%) |
---|---|---|---|
Mac OSX | 7.0 | 8.5 | 21 |
PS3Linux (SPE 1) | 4.3 | 5.6 | 30 |
PS3Linux (SPE 6) | 10.8 | 13.5 | 25 |
実行速度の比較を行った結果、20 ~ 30% の速度向上が見られる。
SPE 1 個のときの速度と SPE 6 個のとき
の速度で台数効果が出ていない
考えられる原因
DMA 転送待ち時間が隠されていないため遅くなっている (Amdahl則)
キャッシュ なし | キャッシュ あり | |
---|---|---|
SPE 1 個 | 0.08 FPS | 0.42 FPS |
SPE 6 個 | 0.59 FPS | 2.54 FPS |
ポリゴン数 : 1984
|
Cerium での OpenGL の使用の問題
Scale による DMA 待ち時間の有効活用と、SPE 上の Texture データのキャッシュの有 効性を証明できた
DMA 転送の待ち時間の無駄を十分に利用できていない可能性が出たので、さらに SPE 上で行う処理を増やし待ち時間の有効活用を目指す。
SceneGraph の SPE 上での実行
プログラムコードの SPE 上での
On demand load
現在は予め全てのコードを SPE 上に置いておく必要がある
SPE のメモリ領域 (256B) を考えると好ましくない