Mercurial > hg > Papers > 2011 > yutaka-sigos
view presen/presen.html @ 14:06fe904e1951
fix
author | Yutaka_Kinjyo |
---|---|
date | Wed, 13 Apr 2011 17:26:26 +0900 |
parents | 083c7035b2cf |
children | 413e772d6cea |
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"> <META http-equiv="Content-Type" content="text/html; charset=utf-8"> <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>ゲームフレームワーク Cerium TaskManager の改良</h1> <h3>金城 裕, 河野 真治, <br>多賀野 海人, 小林 佑亮</h3> <h4>琉球大学大学院理工学研究科情報工学専攻並列信頼研</h4> </div> <div class="slide"> <h1>概要</h1> ゲームフレームワーク Cerium TaskManager を開発した。 <ul> <li>琉球大学の学生実験で使用している</li> <li>短期間でPS3/Cell上で並列処理されるゲーム開発が可能</li> </ul> <p class="ex2">Ceriumの改良を行いOpenGLと比べ、2.9倍の性能向上を達成した(Cell上)</p> <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center"> <tr> <th></th> <th>OpenGL</th> <th>Cerium</th> <th>性能差</th> </tr> <tr align="center"> <td>dandy</td> <td>17.5FPS</td> <td>49.5FPS</td> <td>2.9倍</td> </tr> </table> FPS(Frames Per Second) </div> <div class="slide"> <h1>概要</h1> Amdahlの法則より<br> プログラム全体の並列化率が低ければ、マルチコアの性能を活かすことはできない。<br><br> <u>SPEの稼働率を落とさない為の改良点</u> <ul> <li>PPEとSPE間の通信回数を削減、タイミングを変更</li> <li>Taskのパイプライン化</li> <li>テクスチャをSPE内でキャッシュ</li> </ul><br> 以上の改良により、FPSが5〜10倍程度性能向上がありました <!--以上の改良により、OpenGL--> </div> <div class="slide"> <h1>概要</h1> Amdahlの法則より<br> プログラム全体の並列化率が低ければ、マルチコアの性能を活かすことはできない。<br><br> <u>SPEの稼働率を落とさない為の改良点</u> <ul> <li>PPEとSPE間の通信回数を削減、タイミングを変更</li> <li>Taskのパイプライン化</li> <li>テクスチャをSPE内でキャッシュ</li> </ul><br> Ceriumの改良点を紹介していく。 </div> <div class="slide"> <h1>Cellの構成</h1> Cell Broadband Engine <img src="gazo/cell_arch.jpg" style="display:block; width:50%; float: right; margin-top:0%"> <ul> <li>ソニー・コンピュータエンタテインメント、ソニー、IBM , 東芝によって開発されたマルチコア CPU である</li> <li>1個のPPEと8個のSPEがリングバスで構成されている</li> <li>SPEは256KBのLocalStore(LS)を持つ</li> <li>SPEからメインメモリへは直接アクセスできない</li> <ul> <li>SPEが持つMFC(Memroy Flow Controller)へDMA命令を送ることで行う</li> </ul> </ul><br> </div> <div class="slide"> <h1>Cellの基本機能</h1> <u>DMA</u> <ul> <li>メインメモリとLS間でデータが転送される</li> </ul> <u>Mailbox</u> <ul> <li>SPEのMFC内にあるFIFOキュー</li> <li>PPEとSPE間で32bitメッセージの交換に用いられる</li> </ul> </div> <div class="slide"> <h1>Ceriumの構成</h1> Ceriumの構成 <img src="gazo/cerium.png" style="display:block; width:50%; float: right; margin-top:0%"> <ul> <li>TaskManager</li> <ul> <li>ユーザが定義したTaskを管理し、各コアに割り当てる</li> </ul> <li>RenderingEngine</li> <ul> <li>オブジェクトを画面に描画する</li> <li>3種類のTaskから構成される</li> </ul> <li>SceneGraph</li> <ul> <li>ゲームのルールを記述してく</li> <li>ゲームのシーンを作成し、それを切り替えながらゲームを進行する</li> <li>OpenSceneGraphのようなもの</li> </ul> </ul><br> </div> <div class="slide"> <h1>TaskManager</h1> TaskManager は、Taskと呼ばれる分割された各プログラムを管理する。Task の単位 はサブルーチンである。Task 同士の依存関係を考慮しながら実行していく。</p> <p>Task を生成する際に、以下のような要素が設定可能である</p> <ul> <li><b>input data, output data, parameter</b><br> これらは関数でいうところの引数に価する</li> <li><b>cpu type</b><br> Task を PPE または SPE のどちらで実行するのかを示している</li> <li><b>dependency</b></li> 他の Task との依存関係を示している </li> </ul> </div> <div class="slide"> <h1>RenderingEngineの構成</h1> RenderingEngineの構成 <img src="gazo/renderingengine1.png" style="display:block; width:40%; float: right; margin-top:0%"> <ul> <li>CreatePolygon</li> <ul> <li>モデリングデータからポリゴンを生成する(PPE)</li> </ul> <li>CreateSpan</li> <ul> <li>ポリゴンをSpanと呼ばれる水平な線に分ける(SPE)</li> </ul> <li>DrawSpan</li> <ul> <li>Spanを実際にディスプレイに描画する(SPE)</li> </ul> </ul><br> </div> <div class="slide"> <h1>改良前RenderingEngine</h1> <img src="gazo/universe.png" style="display:block; width:50%; float: right; margin-top:0%"> <u>改良前のRenderingEngineの例題</u><br> 地球と月の例題 <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> <tr> <th></th> <th>FPS</th> <th>mail待ちの割合</th> <th>SPE稼働率</th> <!--<th>Mac(Core2Duo)</th>--> </tr> <tr align="center"> <td>universe</td> <td>17FPS</td> <td>53.6%</td> <td>45.4%</td> </tr> </table><br> 処理全体の45%時間がmail待ちになっている. </div> <div class="slide"> <h1>Mail待ちについて</h1> <u>mail待ちが起こるタイミング</u> <ul> <li>SPEが次のTaskのリストを待つとき</li> <ul> <li>Taskのパイプライン化で削減</li> </ul> <li>SPEがTaskの完了を書きこむとき</li> <ul> <li>MailQueueで削減</li> <li>TaskArrayで削減</li> </ul> </ul> </div> <div class="slide"> <h1>Mailbox機能</h1> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/mailbox.png" style="width: 60%%"></td></tr> </table> </div> <div class="slide"> <h1>バリア同期</h1> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/renderingengine1.png" style="width: 35%%"></td></tr> </table> RenderingEngineのTaskは、3つそれぞれバリア同期をしている。 </div> <div class="slide"> <h1>パイプライン化</h1> 地球と月を表示する例題(universe)を使用。 <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/universe.png" style="width: 45%%"></td></tr> </table> </div> <div class="slide"> <h1>パイプライン化の比較</h1> <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> <caption>パイプライン化の効果(universe)</caption> <tr> <th></th> <th>FPS</th> <th>mail待ちの割合</th> <th>稼働率</th> </tr> <tr align="center"> <td>Pipelineあり</td> <td>19.6FPS</td> <td>68.8%</td> <td>29%</td> </tr> <tr> <tr align="center"> <td>Pipelineなし</td> <td>17FPS</td> <td>72.6%</td> <td>25.4%</td> </tr> </table> </div> <div class="slide"> <h1>パイプライン化の比較</h1> 地球と月を表示する例題(universe)を使用。 <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> <caption>パイプライン化の効果(universe)</caption> <tr> <th></th> <th>FPS</th> <th>mail待ちの割合</th> <th>稼働率</th> </tr> <tr align="center"> <td>Pipelineあり</td> <td>19.6FPS</td> <td>68.8%</td> <td>29%</td> </tr> <tr> <tr align="center"> <td>Pipelineなし</td> <td>17FPS</td> <td>72.6%</td> <td>25.4%</td> </tr> </table> </div> <div class="slide"> <h1>RenderingEngine</h1> RenderingEngineでは、描画するためのテクスチャをSPEに読み込む必要がある<br> テクスチャをSPE内でのキャッシュした。 <ul> <li>DrawSpan内で、描画するためのテクスチャデータを読み込む。</li> <li>テクスチャは分割さていて、必要な時に必要な部分を読み込む</li> <li>そこで、テクスチャをキャッシュするようにした(LRU)</li> <li>テクスチャのデータはハッシュで管理する</li> </ul> </div> <div class="slide"> <h1>SPEのキャッシュ効果</h1> <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> <caption>SPEのキャッシュの効果</caption> <tr> <th></th> <th>キャッシュなし</th> <th>キャッシュあり</th> <th>性能</th> </tr> <tr align="center"> <td>ball_bound</td> <td>4FPS</td> <td>30FPS</td> <td>7.5倍</td> </tr> <tr align="center"> <td>universe</td> <td>6FPS</td> <td>17FPS</td> <td>2.8倍</td> </tr> <tr align="center"> <td>panel</td> <td>0.2FPS</td> <td>2.6FPS</td> <td>13倍</td> </tr> </table> <!--実は改良前の計測にバグが。 キャッシュを無効にした場合にキャッシュヒットはしないが、 キャッシュ処理は行う。つまり余計な処理が入っていた。 --> <!--テクスチャは頻繁に読み込みが行われるので、キャッシュは有効だった。--> <!--Span一つに対して、分割されたテクスチャが複数必要。 Spanの数は、1920x1080 の解像度で、最低でも8000ほどのテクスチャ読み込みが起こる。--> </div> <div class="slide"> <h1>SPEのキャッシュ効果</h1> <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> <caption>SPEのキャッシュの効果</caption> <tr> <th></th> <th>キャッシュなし</th> <th>キャッシュあり</th> <th>性能差</th> </tr> <tr align="center"> <td>ball_bound</td> <td>28FPS</td> <td>30FPS</td> <td>+2FPS</td> </tr> <tr align="center"> <td>universe</td> <td>22.9FPS</td> <td>17FPS</td> <td>-5.9FPS</td> </tr> <tr align="center"> <td>panel</td> <td>5.0FPS</td> <td>2.6FPS</td> <td>-2.4FPS</td> </tr> </table> ball_bound は扱うテクスチャが少なく、小さい </div> <div class="slide"> <h1>MailQueueの効果</h1> <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> <caption>MailQueueの効果</caption> <tr> <th></th> <th>改良前</th> <th>改良後</th> <th>性能</th> </tr> <tr align="center"> <td>universe</td> <td>16FPS</td> <td>18.5FPS</td> <td>12%向上</td> </tr> </table> 地球と月を表示する例題を使って計測した。 </div> <div class="slide"> <h1>TaskArray</h1> Task毎のMailは、Task同士の依存関係を解決するために用いている。 <ul> <li>依存関係はグループ化できる</li> <li>TaskArrayを用いて複数のTaskのMailを一つに扱う</li> </ul><br> Mailの数を減らせるので、Mailのための処理が減る。その分処理速度が上がる </div> <div class="slide"> <h1>TaskArray</h1> <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> <caption>TaskArrayの効果(universe)</caption> <tr> <th></th> <th>改良前</th> <th>改良後</th> <th>性能</th> </tr> <tr align="center"> <td>universe</td> <td>16FPS</td> <td>18.5FPS</td> <td>12%向上</td> </tr> </table> </div> <div class="slide"> <h1>MailQueueとTaskArray</h1> <table border="1" cellspacing="0" cellspacing="2" cellpadding="8" align="center"> <caption>MailQueueとTaskArrayの効果(universe)</caption> <tr> <th>TaskArray</th> <th>MailQueue</th> <th>FPS</th> <th>性能</th> </tr> <tr align="center"> <td>あり</td> <td>あり</td> <td>20FPS</td> <td>22%向上</td> </tr> <tr align="center"> <td>あり</td> <td>なし</td> <td>18.5FPS</td> <td>12%向上</td> </tr> <tr align="center"> <td>なし</td> <td>あり</td> <td>18.5FPS</td> <td>12%向上</td> </tr> <tr align="center"> <td>なし</td> <td>なし</td> <td>16.4FPS</td> <td>0%向上</td> </tr> </table> </div> <div class="slide"> <h1>OpenGLとの比較</h1> OpenGL(Open Graphics Library)とは、Silicon Graphics社が開発した、3Dグラフィックス処理の ためのプログラミングインターフェース。Taskに分割され、SPEを使用したCeriumと、PPEのみで動作 するOpenGLとで、処理速度の比較をした。<br><br> 比較する例題には学生が実験中に作成したSuperDandyを用いた。 </div> <div class="slide"> <h1>OpenGLとの比較</h1> <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> <tr> <th></th> <th>OpenGL</th> <th>Cerium</th> <th>性能差</th> </tr> <tr align="center"> <td>dandy</td> <td>17.5FPS</td> <td>49.5FPS</td> <td>2.9倍</td> </tr> </table> コア一つを使用するOpenGLに比べ、Cerium では2.9倍の性能向上が見られた。 SPEを活用、待ち時間の短縮を行い、性能向上がみれた。 </div> <div class="slide"> <h1>END</h1> /*end*/ </div> </ul> <div class="handout"> [any material that should appear in print but not on the slide] </div> </div> </div> </body> </html>