# HG changeset patch # User Yutaka_Kinjyo # Date 1266473347 -32400 # Node ID 3bed8935e27aa144b7c441ec861b66763bea986d # Parent ca9104c86d87f4420313c8ef7c791a9ed3f60e0e add presen diff -r ca9104c86d87 -r 3bed8935e27a paper/thesis_paper.sty --- a/paper/thesis_paper.sty Tue Feb 16 12:22:39 2010 +0900 +++ b/paper/thesis_paper.sty Thu Feb 18 15:09:07 2010 +0900 @@ -95,7 +95,7 @@ \def\affiliation#1{\gdef\@affiliation{#1}} \let\belongto\affiliation -\def\thesis{卒業論文} +\def\thesis{平成21年度 卒業論文} %表紙 %\renewcommand{\maketitle}{% diff -r ca9104c86d87 -r 3bed8935e27a paper/thesis_paper.tex --- a/paper/thesis_paper.tex Tue Feb 16 12:22:39 2010 +0900 +++ b/paper/thesis_paper.tex Thu Feb 18 15:09:07 2010 +0900 @@ -14,7 +14,7 @@ \vskip10mm 琉球大学情報工学科} -\author{金城 裕} +\author{065725F 金城 裕\\ 指導教官 河野真治} \marklefthead{% 左上に挿入 \begin{minipage}[b]{.4\textwidth} diff -r ca9104c86d87 -r 3bed8935e27a presen/gazo/cell1.png Binary file presen/gazo/cell1.png has changed diff -r ca9104c86d87 -r 3bed8935e27a presen/gazo/lightearth.png Binary file presen/gazo/lightearth.png has changed diff -r ca9104c86d87 -r 3bed8935e27a presen/gazo/nonlightearth.png Binary file presen/gazo/nonlightearth.png has changed diff -r ca9104c86d87 -r 3bed8935e27a presen/gazo/rendering1.png Binary file presen/gazo/rendering1.png has changed diff -r ca9104c86d87 -r 3bed8935e27a presen/gazo/rendering2.png Binary file presen/gazo/rendering2.png has changed diff -r ca9104c86d87 -r 3bed8935e27a presen/gazo/rendering3.png Binary file presen/gazo/rendering3.png has changed diff -r ca9104c86d87 -r 3bed8935e27a presen/gazo/simd1.png Binary file presen/gazo/simd1.png has changed diff -r ca9104c86d87 -r 3bed8935e27a presen/gazo/simd2.png Binary file presen/gazo/simd2.png has changed diff -r ca9104c86d87 -r 3bed8935e27a presen/gazo/span1.png Binary file presen/gazo/span1.png has changed diff -r ca9104c86d87 -r 3bed8935e27a presen/gazo/span2.png Binary file presen/gazo/span2.png has changed diff -r ca9104c86d87 -r 3bed8935e27a presen/gazo/taskmanager2.png Binary file presen/gazo/taskmanager2.png has changed diff -r ca9104c86d87 -r 3bed8935e27a presen/presen.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/presen.html Thu Feb 18 15:09:07 2010 +0900 @@ -0,0 +1,397 @@ + + + + + +発表資料 + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ +
+ +
+ +

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. 光源ベクトルと法線ベクトルとの内積を計算
    4. +
    5. 描画対象のドッドRGBに内積を掛け算する
    6. +
    +
    + +以上の演算を行うと、影のついた描画を行うことができる +これにより光源機能を実装できた + + + +
    +

    光源処理の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.568.12
    Cell (光源数4)7.217.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

    +