changeset 14:06fe904e1951

fix
author Yutaka_Kinjyo
date Wed, 13 Apr 2011 17:26:26 +0900
parents 083c7035b2cf
children 413e772d6cea
files presen/presen.html
diffstat 1 files changed, 160 insertions(+), 336 deletions(-) [+]
line wrap: on
line diff
--- a/presen/presen.html	Wed Apr 13 10:27:01 2011 +0900
+++ b/presen/presen.html	Wed Apr 13 17:26:26 2011 +0900
@@ -93,67 +93,112 @@
 <div class="slide">
 <h1>概要</h1>
 
-ゲームフレームワーク Cerium TaskManager を開発しました。
+ゲームフレームワーク 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>動作環境:MacOSX, Linux, PS3/Cell</li>
-  <li>主にCellに特化している。</li>
-  <li>SceneGraphを用いて、ゲームを記述する</li>
-
+  <li>PPEとSPE間の通信回数を削減、タイミングを変更</li>
+  <li>Taskのパイプライン化</li>
+  <li>テクスチャをSPE内でキャッシュ</li>
 </ul><br>
 
-琉球大学の学生実験で使用している。
+以上の改良により、FPSが5〜10倍程度性能向上がありました
+
+<!--以上の改良により、OpenGL-->
 
 </div>
 
 
+
+
 <div class="slide">
-<h1>Cell</h1>
-Cell Broadband Engine
+<h1>概要</h1>
+
+Amdahlの法則より<br>
+ プログラム全体の並列化率が低ければ、マルチコアの性能を活かすことはできない。<br><br>
+
+
+<u>SPEの稼働率を落とさない為の改良点</u>
 
 <ul>
-  <li>ソニー・コンピュータエンタテインメント、ソニー、IBM , 東芝によって開発されたマルチコア CPU である</li>
-  <li>1基の制御系プロセッサコアPPE(PowerPC Processor Element)</li>
-  <li>8基の演算系プロセッサコアSPE(Synergistic Processor Element)</li>
-  <li>各コアはEIB(Element Interconnect Bus)とうバスで接続されている</li>
+  <li>PPEとSPE間の通信回数を削減、タイミングを変更</li>
+  <li>Taskのパイプライン化</li>
+  <li>テクスチャをSPE内でキャッシュ</li>
 </ul><br>
 
+Ceriumの改良点を紹介していく。
+
 </div>
 
 <div class="slide">
-<h1>Cell</h1>
+<h1>Cellの構成</h1>
 Cell Broadband Engine
 
-<table height="100%" width="100%" border="0">
-<tr><td align="center" valign="middle">
-<img src="gazo/cell_arch.jpg" style="width: 50%%"></td></tr>
-</table>
-
-
-PPEは直接メインメモリアクセスできるが、SPEはそれぞれのLSにしかアクセスできない<br>
-DMA転送を用いてメインメモリからのデータを明示的に取得する
-
-</div>
-
-<div class="slide">
-<h1>Cell</h1>
-Cell のプログラミングスタイル
+<img src="gazo/cell_arch.jpg" style="display:block; width:50%; float: right; margin-top:0%">
 
 <ul>
-  <li>PPEがデータと仕事を分割し、各SPEへ割り当てる</li>
+  <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>
 
-Ceriumでは関数をTaskとして定義。Taskを各SPEへ割り当てる。<br>
-一つのTaskにはinput,output,param,等のデータを持たせる<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>
@@ -175,177 +220,34 @@
 
 </ul><br>
 
-
-
-</div>
-
-<div class="slide">
-<h1>Ceriumの構成</h1>
-
-<table height="100%" width="100%" border="0">
-<tr><td align="center" valign="middle">
-<img src="gazo/cerium.png" style="width: 50%%"></td></tr>
-</table>
-
 </div>
 
 <div class="slide">
 <h1>TaskManager</h1>
 
-TaskManager
+TaskManager は、Taskと呼ばれる分割された各プログラムを管理する。Task の単位
+はサブルーチンである。Task 同士の依存関係を考慮しながら実行していく。</p>
+<p>Task を生成する際に、以下のような要素が設定可能である</p>
 
 <ul>
-  <li>Taskは関数単位</li>
-  <li>定義されたTaskは依存関係に沿って実行される</li>
-  <li>Taskはある程度の数が揃った上で、TaskListにまとめられSPEに送られる。</li>
-  <li>Taskはread,exec,write それぞれパイプライン化されて動く</li>
-  <li>Taskに必要なデータはDMA転送で送られる。転送時間はパイプライン化によって隠される</li>
-  <li>Taskの中にDMA転送命令を書くと自動ではパイプライン化されない</li>
-</ul>
-
-</div>
-
-<div class="slide">
-<h1>TaskMangerを使った例題</h1>
-
-CeriumのTaskManager を使ったSortの例題<br>
-10万個のランダムな値をクイックソートでソートする<br>
-ソートする関数をTaskにして各SPEで実行<br><br>
-
-<table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center">
-<caption>Sortの例題</caption>
-<tr>
-<th></th>
-<th>PPEのみ</th>
-<th>SPE 1つ</th>
-<th>SPE 6つ</th>
-<!--<th>Mac(Core2Duo)</th>-->
-<th>SPE稼働率</th>
-</tr>
-<tr align="center">
-<td>QuickSort</td>
-<td>5.60s</td>
-<td>6.22s</td>
-<td>1.07s</td>
-<td>97%</td>
-<!--<td>1.76s</td>-->
-</tr>
-</table>
-
-<!-- 2.13GHz -->
-</div>
-
-
-<div class="slide">
-<h1>アムダール則</h1>
-
-プログラムの全体に対する並列化した部分の割合が低いと、マルチコアの性能がでない
-<!--プログラムの8割を並列化すると、6CPUでは3倍の性能向上しか得られない-->
-
-<table height="100%" width="100%" border="0">
-<tr><td align="center" valign="middle">
-<img src="gazo/amdahl.jpg" style="width: 55%%"></td></tr>
-</table>
-
-</div>
-
-<div class="slide">
-<h1>RenderingEngine</h1>
-
-RenderingEngineの例題<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>72.6%</td>
-<td>25.4%</td>
-</tr>
-</table>
-
-
-</div>
-
-
-<div class="slide">
-<h1>RenderingEngine</h1>
-
-SortとRenderingEngineの違い
-
-<ul>
-  <li>三種類のTaskから構成されている</li>
-  <li>三つのTaskはバリア同期を行っている</li>
-  <li>すべてのTaskは一度に作られない</li>
-  <li>PPEにもTaskが割り振られている</li>
-  <li>大量のデータを扱う(ポリゴン、テクスチャ)</li>
+<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>
-
-RenderingEngienの場合の問題点
-
-<ul>
-  <li>SPEの待ちが入る(SPEの稼働率の低下、処理性能の低下)</li>
-  <ul>
-    <li>MailをPPEが読み込みのを待つ</li>
-    <li>他のSPEを待つ</li>
-    <li>次のTaskListを待つ</li>
-  </ul>
-  <li>Taskはバリア同期している</li>
-</ul>
-
-</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>
-バリア同期には二つの待ちがある
-<ul>
-  <li>SPEが他のSPEを待つ時間</li>
-  <li>バリア同期が完了し、PPE側で次のTaskが作られる時間</li>
-</ul><br>
-
-
-</div>
-
-<div class="slide">
-<h1>バリア同期</h1>
-<table height="100%" width="100%" border="0">
-<tr><td align="center" valign="middle">
-<img src="gazo/renderingengine2.png" style="width: 45%%"></td></tr>
-</table>
-
-この待ちを解消するためにTaskのパイプライン化を行った。
-
-</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>
@@ -361,10 +263,80 @@
   </ul>
 </ul><br>
 
-RenderingEngineは3種類のTaskから構成されている
+</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>
@@ -452,8 +424,6 @@
 
 </div>
 
-
-
 <div class="slide">
 <h1>SPEのキャッシュ効果</h1>
 
@@ -540,63 +510,6 @@
 
 </div>
 
-
-<div class="slide">
-<h1>Mailbox機能</h1>
-CellのMailbox機能<br>
-
-<ul>
-  <li>PPEとSPEとの間を双方向で32bitのデータを受け渡す</li>
-  <li>FIFO キュー構造</li>
-</ul><br>
-Mailboxの種類
-<ul>
-  <li>Inbount Mailbox(PPE->SPE 4つ)</li>
-  <li>Outbount Mailbox(SPE->PPE 一つ)</li>
-  <li>Outbount interrupt Mailbox(SPE->PPE 一つ)</li>
-</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>Mailbox機能</h1>
-SPE側からTaskが一つ実行完了する度に、実行完了のMailをOutboxに書きこむ<br>
-
-<ul>
-  <li>Outboxに既にMailが書きこまれている場合に、PPE側から読み込まれるまで、SPEは待つ(Cellの仕様)</li>
-  <li>PPE側のMailチェックが追いつかない場合がある。</li>
-  <li>その間、SPEは何もしないので、処理速度の低下につながる</li>
-</ul><br>
-
-そこで、Outboxに既に読み込まれていないMailがあった場合に、いったん、別のキューに追加する。(MailQueue)
-
-
-</div>
-
-<div class="slide">
-<h1>MailQueue</h1>
-
-<ul>
-  <li>TaskListを消化し、次のTaskListを要求する時に、MailQueueにMailが残っている場合はそれを先に書きだす</li>
-  <li>PPE側はMailのチェックをMailが無くなるまでループする</li>
-  <li>PPEはMailがない場合に、自分の仕事に戻る。</li>
-  <li>今のPPEのMailチェックの仕様には、一度にMailを書きだすのが向いている</li>
-</ul>
-
-</ul>
-
-</div>
-
 <div class="slide">
 <h1>MailQueueの効果</h1>
 
@@ -619,33 +532,6 @@
 地球と月を表示する例題を使って計測した。
 
 </div>
-<!--
-<div class="slide">
-<h1>Ceriumの改良点の概要</h1>
-
-Ceriumの改良点の概要
-
-<ul>
-  <li>TaskManager</li>
-  <ul>
-    <li>Taskの同期にはCellのMail機能を使う</li>
-    <li>Mailの同期するタイミングの改良</li>
-    <ul>
-      <li><s>MailQueue</s></li>
-      <li>TaskArray</li>
-    </ul>
-  </ul>
-
-  <li>RenderingEngine</li>
-  <ul>
-    <li>Taskのパイプライン化</li>
-    <li>扱う画像をSPE側でキャッシュする</li>
-  </ul>
-
-</ul>
-
-</div>
--->
 
 <div class="slide">
 <h1>TaskArray</h1>
@@ -754,69 +640,7 @@
 
 </div>
 
-<div class="slide">
-<h1>まとめ</h1>
 
-本研究ではゲームフレームワーク Cerium TaskManager の改良を行った。
-特にCell上において、SPEの稼働率に注意する必要があった。
-
-SPE、PPE間のデータのやり取りにMail通知を用いている。SPEはMailの書き込みの際に待ちが発生する
-
-<ul>
-  <li>MailQueue</li>
-  <li>TaskArray</li>
-</ul><br>
-
-で待ち時間の削減ができる
-
-</div>
-
-<div class="slide">
-<h1>まとめ</h1>
-
-RenderingEngineにおいて、Taskがバリア同期をしている。バリア同期にも待ちが発生する
-
-<ul>
-  <li>Task実行をパイプライン化</li>
-</ul><br>
-
-SPEの待ち時間を解消できる。頻繁に扱うデータはSPE内でキャッシュするのがよい
-
-</div>
-
-
-<div class="slide">
-<h1>依存関係の話</h1>
-稼働率を維持するためにパイプライン化がある
-
-<ul>
-  <li>扱うデータの依存性から、Pipelineを自動で生成できるはず</li>
-  <li>TaskArrayもデータから自動でできるはず。</li>
-  <li>データはSegmentとして扱う</li>
-</ui>
-
-</div>
-
-<div class="slide">
-<h1>Codeload</h1>
-
-Taskを事前に全部ロードしてる
-
-<ul>
-  <li>SPEのLSは256KB</li>
-  <li>大量のコードを入れるといっぱいになる</li>
-  <li>必要な時に必要な分を予測してSPEにロードするのがよい</li>
-  </ul>
-
-</div>
-
-<div class="slide">
-<h1>Segment</h1>
-
-データはすべてSegmentという形にして、SPEに必要な分を予測、読み込みするのがよい。<br>
-テクスチャのように頻繁に扱うデータはキャッシュする<br>
-
-</div>