Mercurial > hg > Papers > 2010 > yutaka-thesis
view presen/presen.html @ 7:3bed8935e27a default tip
add presen
author | Yutaka_Kinjyo |
---|---|
date | Thu, 18 Feb 2010 15:09:07 +0900 |
parents | |
children |
line wrap: on
line source
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>発表資料</title> <!-- metadata --> <meta name="generator" content="S5" /> <meta name="version" content="S5 1.1" /> <meta name="presdate" content="20050728" /> <meta name="author" content="Eric A. Meyer" /> <meta name="company" content="Complex Spiral Consulting" /> <!-- configuration parameters --> <meta name="defaultView" content="slideshow" /> <meta name="controlVis" content="hidden" /> <!-- style sheet links --> <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" /> <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" /> <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" /> <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" /> <!-- S5 JS --> <script src="ui/default/slides.js" type="text/javascript"></script> <style type="text/css"> body { font-size: 100%; } p.ex10 { font-size: 2.0em; } p.ex9 { font-size: 1.9em; } p.ex8 { font-size: 1.8em; } p.ex7 { font-size: 1.7em; } p.ex6 { font-size: 1.6em; } p.ex5 { font-size: 1.5em; } p.ex4 { font-size: 1.4em; } p.ex3 { font-size: 1.3em; } p.ex2 { font-size: 1.2em; } p.ex1 { font-size: 1.1em; } p.ex0 { font-size: 1.0em; } p.ex05 { font-size: 0.5em; } span.classifier { font-family: sans-serif ; font-style: oblique } span.classifier-delimiter { font-family: sans-serif ; font-weight: bold } span.interpreted { font-family: sans-serif } span.option { white-space: nowrap } span.pre { white-space: pre } span.problematic { color: red } span.section-subtitle { /* font-size relative to parent (h1..h6 element) */ font-size: 80% } </style> </head> <body> <div class="layout"> <div id="controls"><!-- DO NOT EDIT --></div> <div id="currentSlide"><!-- DO NOT EDIT --></div> <div id="header"></div> <div id="footer"> <!--<h1>Cell上のソフトウェアレンダリングの高速化と高機能化</h1> <h2>琉球大学工学部情報工学科並列信頼研</h2>--> </div> </div> <div class="presentation"> <div class="slide"> <h1>Cell上のソフトウェアレンダリングの高速化と高機能化</h1> <h3>065725F 金城裕</h3> <h3>指導教官:河野真治</h3> <h4>琉球大学工学部情報工学科並列信頼研</h4> </div> <div class="slide"> <h1>研究目的 と 背景</h1> <p class="ex1"> 現在、PS3/Cell上でのソフトウェアレンダリングエンジンを開発中である。 </p> <ul> <li> レンダリングエンジンは、Cerium Task Manager 上に実装され、学生実験で使用中である。 </li> <br> <li>PS3 のGraphics Engine の仕様は公開されていないため、ソフトウェアレンダリングを実装する必要がある。</li> </ul> <p><font color="red">本研究ではそのレンダリングエンジンの高機能化と高速化を行う</font></p> </div> <div class="slide"> <h1>研究目的 と 背景</h1> <!--ソフトウェアレンダリングは、SceneGraph、Polygon、Span、Z buffer の各段階がある。 それぞれの段階で、並列処理を行なう必要がある。 現在は、Span の生成を1 SPE上で行ない、Z buffer を複数のSPE上で処理している。 他の段階でも並列処理を行なう必要がある。 PPEよりもSPEの方が高速なので、1SPE 上で実行するだけでも意味がある。--> <ul> <li>ソフトウェアレンダリングは段階的にわけることができる</li> <li>それぞれの段階で並列処理を行う必要がある</li> <li>現在は、一部の段階でのみ並列処理</li> <li>すべての段階で並列処理する必要がある</li> </ul> </div> <!-- <div class="slide"> <h1>研究背景</h1> <ul> 近年、CPUの消費電力増加や、クロック周波数対効果の停滞により、 CPUコア数は増加傾向にある。コア数の増加にともない処理速度の向上が見込める。<br>しかし、 CPUのコア数が増加すると、コア数に見合った並列プログラミングを行う必要がある。<br> メニーコアの1つにCellがある。Cellは「ヘテロジニアス・マルチコアプロセッサ構成」を採用し、ppe,speの2種類のCPUから構成されている。この2種類のCPUをプログラマ自身が用途に合わせて適切に使い分けるように考慮する必要がある。現在2種類のCPUを適切に使い切れておらず、Cellの性能は最大限に引き出されていない。 </ul> --> <div class="slide"> <h1>発表の流れ</h1> <ul> <li style="font-size:140%">Cellとは</li> <li style="font-size:140%">Ceriumとは</li> <li style="font-size:140%">Rendering Engine</li> <li style="font-size:140%">Rendering Engineの高機能化、高速化</li> <li style="font-size:140%">成果とまとめ</li> </ul> <div class="slide"> <h1>Cellとは</h1> <big>Cell</big>とはソニー、東芝、IBM社の3社が共同開発したマイクロプロセッサ<br><br> Cellは1基の制御系のプロセッサコア<u>PPE</u>と、8基の演算系プロセッサコア<u>SPE</u>で構成される(Ceriumで扱えるSPEの数は6基)。 PPEよりもSPEが高速なので、1SPE 上で実行するだけでも意味がある。 それぞれ高速なバスで接続されている<br><br> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/cell1.png" style="width: 40%%"></td></tr> </table> <!--<img src="gazo/cell1.png" style="width: 45%%"><br>--> </div> <div class="slide"> <h1>Ceriumとは</h1> <big>Cerium</big>とは当研究室で開発したゲーム開発用フレームワークである<br><br> <u>Task Manager</u><br> タスクと呼ばれる分割されたプログラムを管理する<br> <u>Scene Graph</u><br> ゲーム中のオブジェクトの振る舞いや、ルールを管理する。 <u>Rendering Engine</u><br> Cerium独自に開発した描画用のエンジン <br><br> の3つの要素から構成される。<br><br> Ceriumは PS3/Cell、linux, macosx 上で動作する。 </div> <div class="slide"> <h1>Rendering Engineの構成</h1> <p class="ex2">Rendering Engineは主に3つのタスクから構成されている</p> <u>CreatePolygonタスク</u><br> モデリングデータからポリゴンを生成するタスク<br> <u>CreateSpanタスク</u><br> 生成されたポリゴンを水平な直線(Span)に分割するタスク<br> <u>DrawSpanタスク</u><br> Spanのデータを元に、画面に描画するタスク<br> </div> <div class="slide"> <h1>Rendering Engineの流れ</h1> <img src="gazo/rendering1.png" style="display:block; width: 60%; margin: auto;"> <u><big>CreatePolygon</big></u>:<br> SceneGraph をもとに回転や並行移動したポリゴンを、モデルデータから生成するタスク<br> ポリゴンは三角形である<br> 回転や平行移動はSceneGraphが持っている変換行列を用いる </div> <div class="slide"> <h1>Rendering Engineの流れ</h1> <img src="gazo/rendering2.png" style="display:block; width: 60%; margin: auto;"> <div style="float: left; width: 50%;"><u><big>CreateSpan</big></u>:<br> 三角形のポリゴンを線に分割するタスク。 生成されたポリゴンを水平な直線(Span)の集合へと分割する<br> Spanとは1ドット単位で分割された線 </div> <img src="gazo/span2.png" style="display:block; width: 38%; float: right; margin-top:5%"> </div> <div class="slide"> <h1>Rendering Engineの流れ</h1> <br> <img src="gazo/rendering3.png" style="display:block; width: 65%; margin: auto;"> <u><big>DrawSpan</big></u>:<br> Spanを画面へ描画するタスク<br> Spanを1Dotずつ見ていき、対応する画面の1Dotに色をつける<br> 色はSpanに対応する画像の色をみて決める </div> <div class="slide"> <h1>Rendering Engineの高機能化と高速化</h1> <font color="red"><big>Rendering Engine に光源機能を実装した</big></font> <br> <li>光源は点光源で、数は4つに設定</li> <li>SceneGraph側から光源の位置を操作できる</li> <br> <img src="gazo/nonlightearth.png"> <img src="gazo/lightearth.png"> </div> <div class="slide"> <h1>光源の実装手法</h1> 光源処理はDrawSpanタスク内で行う<br> 光源処理は以下の手順で行った<br><br> <ol> <li>描画対象のドット座標と光源座標から光源ベクトルを算出</li> <li>光源ベクトルと法線ベクトルとの内積を計算</li> <li>描画対象のドッドRGBに内積を掛け算する</li> </ol> <br> 以上の演算を行うと、影のついた描画を行うことができる これにより光源機能を実装できた </ul> <div class="slide"> <h1>光源処理のSIMD化</h1> <font color="red"><big>光源処理で行う演算をSIMD演算で実装した</big></font><br> Cellでは、SPEに実装されている128ビットレジスタを用いてSIMDを行うことができる<br> SIMDとは、1つの命令で複数のデータに対して処理を行う演算方式である<br><br> <img src="gazo/simd1.png" style="display:block; width: 55%; margin: auto;"> </div> <div class="slide"> <h1>光源処理のSIMD化(Con't)</h1> 例えば光源ベクトルを求めるための演算をSIMD化すると<br><br> <img src="gazo/simd2.png" style="display:block; width:25%; float: right; margin-top:0%"> SIMD化なし <pre> vector[0] = x - light[0]; vector[1] = y - light[1]; vector[2] = z - light[2]; <!--vector[3] = light[3];--> </pre> SIMD化あり <pre> vector = spu_sub(xyz,light); </pre> <br> SIMD化すると1命令になる </div> <div class="slide"> <h1>SIMD有無による実行速度比較</h1> <center> <table border="3"> <tr> <th></th> <th>SIMD化なし (FPS)</th> <th>SIMD化あり (FPS)</th> </tr> <tr> <th>Cell (光源数1)</th> <td align="center">7.56</td> <td align="center">8.12</td> </tr> <tr> <th>Cell (光源数4)</th> <td align="center">7.21</td> <td align="center">7.60</td> </tr> <caption>SIMD を用いることによる実行速度の比較</caption> </table> </center> <br> 光源数4のSIMD化有無で比較すると、<font color="red">約5.4%</font>の速度向上がみられた<br><br> また光源数1のSIMDなしと光源数4のSIMDありと比較すると近いものになった。<br> このことより、SIMD化によって光源数4の処理を、光源数1の処理とほぼ同じ速度で実行できたと言え、 実行速度が向上したことがわかる。 </br> </div> <div class="slide"> <h1>成果とまとめ</h1> <dl> <dt>成果1</dt><dd>Cell上ソフトウェアレンダリングに光源機能を追加できた</dd> <dt>成果2</dt><dd>光源処理の演算をSIMD化し、高速化に成功した</dd> <dt>成果3</dt><dd>SIMD化による速度の向上がみられ、プログラムの実行速度の向上にSIMDが有効であることが確認できた</dd> </dl> この結果を用いて、レンダリングの各格段の演算をSIMD化することで、さらなる高速化が望める </div> <div class="slide"> <h1>今後の課題</h1> <ul> <li>現在はオブジェクトが重なって表示されない部分の検出を、ドット毎に描画する際に行っている</li> <li>しかし、もっと早い段階での検出もした方がよい</li> <li>例えば、Span単位での重なりを検出するなど、各段階でフィルターをかける必要がある</li> <li>それによって、必要のない演算を積極的に取り除くことができ、高速化がはかれる</li> </ul> </div> <div class="slide"> <h1>end</h1> <ul> /*end*/ <br><br> ご清聴ありがとうございました </ul> <div class="slide"> <h1>Task Manager</h1> <ul> <br> <img src="gazo/taskmanager2.png" width="350" height="250" align="right"> <br> Task Manager はタスクと呼ばれる分割された各プログラムを管理する。<br><br> タスク間の依存関係を考慮しながら実行可能になったタスクをSPEに割り振る。<br><br> タスクの単位はサブルーチンまたは関数 </ul> <div class="slide"> <h1>Scene Graph</h1> <ul> ゲーム中のオブジェクトの振る舞いや、ルールを管理する </ul> <div class="handout"> [any material that should appear in print but not on the slide] </div> </div> </div> </body> </html>