Cell上のソフトウェアレンダリングの高速化と高機能化

065725F 金城裕

指導教官:河野真治

琉球大学工学部情報工学科並列信頼研

研究目的 と 背景

現在、PS3/Cell上でのソフトウェアレンダリングエンジンを開発中である。

本研究ではそのレンダリングエンジンの高機能化と高速化を行う

研究目的 と 背景

発表の流れ

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タスク内で行う
     光源処理は以下の手順で行った

    1. 描画対象のドット座標と光源座標から光源ベクトルを算出
    2. 光源ベクトルと法線ベクトルとの内積を計算
    3. 描画対象のドッド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

      /*end*/

      ご清聴ありがとうございました

    Task Manager



      Task Manager はタスクと呼ばれる分割された各プログラムを管理する。

      タスク間の依存関係を考慮しながら実行可能になったタスクをSPEに割り振る。

      タスクの単位はサブルーチンまたは関数

    Scene Graph

      ゲーム中のオブジェクトの振る舞いや、ルールを管理する
    [any material that should appear in print but not on the slide]