Mercurial > hg > Papers > 2011 > yutaka-sigos
changeset 15:413e772d6cea
fix
author | Yutaka_Kinjyo |
---|---|
date | Thu, 14 Apr 2011 05:17:57 +0900 |
parents | 06fe904e1951 |
children | 6dfe65854e18 |
files | presen/gazo/ballbound.png presen/gazo/panel.png presen/gazo/universe.png presen/presen.html |
diffstat | 4 files changed, 302 insertions(+), 324 deletions(-) [+] |
line wrap: on
line diff
--- a/presen/presen.html Wed Apr 13 17:26:26 2011 +0900 +++ b/presen/presen.html Thu Apr 14 05:17:57 2011 +0900 @@ -38,6 +38,7 @@ p.ex2 { font-size: 1.2em; } p.ex1 { font-size: 1.1em; } p.ex0 { font-size: 1.0em; } +p.ex08 { font-size: 0.8em; } p.ex05 { font-size: 0.5em; } span.classifier { @@ -94,9 +95,11 @@ <h1>概要</h1> ゲームフレームワーク Cerium TaskManager を開発した。 + + <ul> - <li>琉球大学の学生実験で使用している</li> - <li>短期間でPS3/Cell上で並列処理されるゲーム開発が可能</li> + <li><p class="ex08">琉球大学の学生実験で使用している</p></li> + <li><p class="ex08">短期間でPS3/Cell上で並列処理されるゲーム開発が可能</p></li> </ul> <p class="ex2">Ceriumの改良を行いOpenGLと比べ、2.9倍の性能向上を達成した(Cell上)</p> @@ -131,42 +134,21 @@ <li>テクスチャをSPE内でキャッシュ</li> </ul><br> -以上の改良により、FPSが5〜10倍程度性能向上がありました +以上の改良により、FPSが5〜10倍程度性能向上があった。 <!--以上の改良により、OpenGL--> </div> - - <div class="slide"> -<h1>概要</h1> +<h1>Cellの構成</h1> +<u>Cell Broadband Engine</u> -Amdahlの法則より<br> - プログラム全体の並列化率が低ければ、マルチコアの性能を活かすことはできない。<br><br> - - -<u>SPEの稼働率を落とさない為の改良点</u> +<img src="gazo/cell_arch.jpg" style="display:block; width:60%; float: right; margin-top:0%"> <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> @@ -183,6 +165,8 @@ <u>DMA</u> <ul> <li>メインメモリとLS間でデータが転送される</li> +<li>転送されるデータは16アラインメントでないといけない</li> +<li>転送されるデータは16の倍数の大きさでないといけない</li> </ul> <u>Mailbox</u> <ul> @@ -202,20 +186,19 @@ <ul> <li>TaskManager</li> <ul> - <li>ユーザが定義したTaskを管理し、各コアに割り当てる</li> + <li><font size="4">ユーザが定義したTaskを管理し、各コアに割り当てる</font></li> </ul> <li>RenderingEngine</li> <ul> - <li>オブジェクトを画面に描画する</li> - <li>3種類のTaskから構成される</li> + <li><font size="4">オブジェクトを画面に描画する</font></li> + <li><font size="4">3種類のTaskから構成される</font></li> </ul> <li>SceneGraph</li> <ul> - <li>ゲームのルールを記述してく</li> - <li>ゲームのシーンを作成し、それを切り替えながらゲームを進行する</li> - <li>OpenSceneGraphのようなもの</li> + <li><font size="4">ゲームのシーンを作成し、それを切り替えながらゲームを進行する</font></li> + <li><font size="4">OpenSceneGraphのようなもの</font></li> </ul> </ul><br> @@ -265,92 +248,297 @@ </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> +<h1>RenderingEngineの例題</h1> +ボールが跳ねる例題 : ball bound<br> +一面に画像を表示する : panel<br> +<img src="gazo/ballbound.png" style="width:30%;"> +<img src="gazo/panel.png" style="width:40%;"> </div> <div class="slide"> -<h1>Mailbox機能</h1> +<h1>改良前RenderingEngine</h1> +<u>改良前のRenderingEngine例題</u><br> + +<p class="ex08">解像度 1920x1080</p> -<table height="100%" width="100%" border="0"> -<tr><td align="center" valign="middle"> -<img src="gazo/mailbox.png" style="width: 60%%"></td></tr> +<table border="1" cellspacing="0" cellspacing="2" cellpadding="1" align="center"> +<tr> +<th></th> +<th>FPS</th> +<th>DMA転送待ち</th> +<th>mail待ち</th> +<th>SPE稼働率</th> +<!--<th>Mac(Core2Duo)</th>--> +</tr> +<tr align="center"> +<td>ball_bound</td> +<td>4.4FPS</td> +<td>0.4%</td> +<td>53.4%</td> +<td>46.2%</td> +</tr> </table> +<p class="ex08"><u>アムダール則からmail待ちの時間を解消しないと性能は上がらない</u></p> + + <font size="5.0em">・テクスチャをSPE内でキャッシュする</font><br> + <font size="5.0em">・Mailの数の削除、タイミングを変更</font><br> + <font size="5.0em">・RenderingTaskのパイプライン化</font> + + </div> +<div class="slide"> +<h1>キャッシュの効果</h1> -<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> +<u>SPE内のキャッシュ</u> -RenderingEngineのTaskは、3つそれぞれバリア同期をしている。 +<ul> + <li>SPEで、画面にオブジェクトを描画する場合にテクスチャが必要</li> + <li>すべてのテクスチャをSPEのLS内には置けない</li> + <li>テクスチャを細かく分割し、必要な部分を必要な時にロードする</li> +</ul><br> + +頻繁に扱うテクスチャはキャッシュしたほうが、DMAロードする時間が省けるはず.という事で +SPE内にテクスチャのキャッシュを用意した </div> <div class="slide"> -<h1>パイプライン化</h1> +<h1>キャッシュ効果訂正(1/2)</h1> + +もともとSPE内のキャッシュにHITしないバグがあった<br> +そこを発見修正し、「キャッシュなし」の場合と比較した表<br> + +<table border="1" cellspacing="0" cellspacing="1" cellpadding="1" align="center"> +<caption>SPEのキャッシュの効果(ball_bound)</caption> + +<th>キャッシュ</th> +<th>FPS</th> +<th>DMA転送待ちの割合</th> +<th>mail待ちの割合</th> +<th>SPE稼働率</th> +<!--<th>Mac(Core2Duo)</th>--> +</tr> + +<tr align="center"> +<td>無(<font color="red">誤</font>)</td> +<td><font color="red">4.4FPS</font></td> +<td><font color="red">0.4%</font></td> +<td><font color="red">53.4%</font></td> +<td><font color="red">46.2%</font></td> +</tr> -地球と月を表示する例題(universe)を使用。 +<tr align="center"> +<td>有</td> +<td>30FPS</td> +<td>3%</td> +<td>80%</td> +<td>17%</td> +</tr> + +</table><br> + +<u>キャッシュの処理を無効にしきれてなかった.</u>キャッシュにHITはしないが +キャッシュ操作は行われていた. + +</div> + +<div class="slide"> +<h1>キャッシュ効果訂正(1/2)</h1> + +もともとSPE内のキャッシュにHITしないバグがあった<br> +そこを発見修正し、「キャッシュなし」の場合と比較した表<br> + +<table border="1" cellspacing="0" cellspacing="1" cellpadding="1" align="center"> +<caption>SPEのキャッシュの効果(ball_bound)</caption> + + +<th>キャッシュ</th> +<th>FPS</th> +<th>DMA転送待ちの割合</th> +<th>mail待ちの割合</th> +<th>SPE稼働率</th> +<!--<th>Mac(Core2Duo)</th>--> +</tr> -<table height="100%" width="100%" border="0"> -<tr><td align="center" valign="middle"> -<img src="gazo/universe.png" style="width: 45%%"></td></tr> +<tr align="center"> +<td><font color="red">バグ</font></td> +<td><font color="red">4.4FPS</font></td> +<td><font color="red">0.4%</font></td> +<td><font color="red">53.4%</font></td> +<td><font color="red">46.2%</font></td> +</tr> + +<tr align="center"> +<td>有</td> +<td>30FPS</td> +<td>3%</td> +<td>80%</td> +<td>17%</td> +</tr> + +</table><br> + +<u>キャッシュの処理を無効にしきれてなかった.</u>キャッシュにHITはしないが +キャッシュ操作は行われていた. + +</div> + +<div class="slide"> +<h1>キャッシュ効果訂正(2/2)</h1> + +<table border="1" cellspacing="0" cellspacing="1" cellpadding="1" align="center"> +<caption>正しいSPEのキャッシュの効果(ball_bound)</caption> + + +<th>キャッシュ</th> +<th>FPS</th> +<th>DMA転送待ちの割合</th> +<th>mail待ちの割合</th> +<th>SPE稼働率</th> +<!--<th>Mac(Core2Duo)</th>--> +</tr> + +<tr align="center"> +<td>バグ</td> +<td>4.4FPS</td> +<td>0.4%</td> +<td>53.4%</td> +<td>46.2%</td> +</tr> + +<tr align="center"> +<td><font color="red">無</font></td> +<td><font color="red">28FPS</font></td> +<td><font color="red">6.5%</font></td> +<td><font color="red">79%</font></td> +<td><font color="red">14.5%</font></td> +</tr> + +<tr align="center"> +<td><font color="red">有</font></td> +<td><font color="red">30FPS</font></td> +<td><font color="red">3%</font></td> +<td><font color="red">80%</font></td> +<td><font color="red">17%</font></td> +</tr> + </table> +・キャッシュの操作は 1Fream で8000回x100<br> +<!--・テクスチャが十分に小さいとキャッシュに収まる(ball_bound)<br> +・キャッシュ入れ替えが頻繁に起こる場合に操作の方が時間がかかる(panel)<br>--> + </div> <div class="slide"> +<h1>TaskArray</h1> + +<u>SPEとPPEの間のやり取りは、Mailを用いている </u> + +<ul> + <li>依存関係解決のためTaskが完了するとSPEからPPEにMailが通知される</li> + <!--<li>依存関係を解決し、TaskListのMailがPPEから返される</li>--> +<li>依存関係を解決したのち、次のTaskのListがPPEからMailで通知</li> + <li>Mailが多い、PPEが自分のTaskで忙しい場合に返信が遅れる場合がある</li> + <li>SPEのMail待ちの時間が増える</li> +</ul> + +<font size="5.0em">依存関係はグループ化できる</font><br> +<font size="5.0em" color="red">複数のTaskのMailを一つにするTaskArrayを実装した.</font><br> +<font size="5.0em">Mailの回数が減り、PPEの応答スピードが向上させる目的</font> + +</div> + + +<div class="slide"> +<h1>TaskArray</h1> + +TaskArrayの効果を表に示す<br> + +<table border="1" cellspacing="0" cellspacing="2" cellpadding="1" align="center"> +<caption>TaskArrayの効果(ball bound)</caption> + +<th>キャッシュ</th> +<th>FPS</th> +<th>DMA転送待ちの割合</th> +<th>mail待ちの割合</th> +<th>SPE稼働率</th> +<!--<th>Mac(Core2Duo)</th>--> +</tr> + +<tr align="center"> +<td>改良前</td> +<td>30FPS</td> +<td>3%</td> +<td>80%</td> +<td>17%</td> +</tr> + +<tr align="center"> +<td><font color="red">改良後</font></td> +<td><font color="red">35.5FPS</font></td> +<td><font color="red">3%</font></td> +<td><font color="red">70%</font></td> +<td><font color="red">27%</font></td> +</tr> + +</table> + + + +</div> + +<div class="slide"> +<h1>MailQueueの効果</h1> + +<u>SPEとPPEの間のやり取りは、Mailを用いている </u> + +<ul> + <li>SPEからのMail書き込みキューはサイズが1</li> + <li>すでに書きこまれている場合は、PPE側が読み込むまでSPEは待つ</li> + <li>その間SPEは止まってしまう(mail待ち)</li> +</ul><br> + +<font color="red">ソフト的に別な書き込みキュー(MailQueue)を実装した。</font> +書き込めるタイミングを見計らって、SPEの待ちを削減する目的 + + +</div> + +<div class="slide"> +<h1>MailQueueの効果</h1> + +<table border="1" cellspacing="0" cellspacing="2" cellpadding="1" align="center"> +<caption>MailQueueの効果</caption> +<tr> +<th></th> +<th>改良前</th> +<th>改良後</th> +<th>性能</th> +</tr> +<tr align="center"> +<td>ball_bound</td> +<td>35.5FPS</td> +<td>35.7FPS</td> +<td>0.2</tb> +</tr> +</table> + +SPE内のTaskがなくなった場合に、MailQueueの中身をすべて精算して、新しいTaskのListを +要求する。 + +</div> + + +<div class="slide"> <h1>パイプライン化の比較</h1> <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> @@ -358,254 +546,30 @@ <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> +<td>35.7FPS</td> </tr> <tr> <tr align="center"> <td>Pipelineなし</td> -<td>17FPS</td> -<td>72.6%</td> -<td>25.4%</td> +<td>37.7FPS</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> +<h1>改良のまとめ</h1> -<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"> @@ -641,17 +605,31 @@ </div> +<div class="slide"> +<h1>今後の課題</h1> +<u>処理全体の並列化率の向上</u><br> + +<font size="5">以下の部分をSPE実行し、並列化率を向上させる</font> -<div class="slide"> -<h1>END</h1> +<ul> + <li>CreatePolygonTask</li> + <li>ゲーム操作部分(SceneGraph)</li> +</ul> -/*end*/ +<u>それにはCodeLoadが必要</u> + +<ul> + <li>SPEで必要なコードはすべて事前にSPEに読み込んでいるので</li> + <li>LSは256KBしかないので、オンデマンドロードで対応</li> +</ul> </div> + + </ul> <div class="handout">