diff presen/presen1.html @ 22:fe88829c8fe3 draft

add file
author Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
date Sun, 12 Feb 2012 17:51:19 +0900
parents e5e563dc8270
children 02067287fac3
line wrap: on
line diff
--- a/presen/presen1.html	Sun Feb 12 00:47:34 2012 +0900
+++ b/presen/presen1.html	Sun Feb 12 17:51:19 2012 +0900
@@ -98,14 +98,13 @@
 Cerium を用いて 期間中のゲームの作成が可能になった。しかし学生実験での使用や、例題の実装を行い Cerium の信頼性が十分でない点が明らかになった。
 <ul>
   <li>仕様通りの稼働率がでない</li>
-  <li>アーキテクチャ依存の記述が避けにくい</li>
+  <li>アーキテクチャ依存の記述が含まれている</li>
 </ul><br>
 以上の問題点を解決するため
 <ul>
   <li>ソフトウェアMailQueueの実装</li>
   <li>TaskをグルーピングするTaskArrayの実装</li>
   <li>明示的なDMAロードを隠蔽するMemorySegmentのAPIの実装</li>
-  <li>細かなTaskのチューニング</li>
 </ul>
 などの改良を行い、信頼性のある並列プログラミングフレームワークを目指す。
 </font>
@@ -132,8 +131,15 @@
 </font>
 
 <li class="slide">
-<h1>DMA</h1>
-SPE は直接 MainMemory にアクセスできない。 明示的な DMA 転送を用いる
+<h1>DMA転送</h1>
+SPE は直接 MainMemory にアクセスできない。 明示的な DMA 転送命令を用いてデータにアクセスする。データは
+
+<ul>
+  <li>16アラインメントに揃える</li>
+  <li>16byte の倍数のサイズ</li>
+  <li>一度の転送は16KB の大きさまで</li>
+</ul>
+
 
 <li class="slide">
 <h1>Mailbox</h1>
@@ -218,8 +224,8 @@
 <tr>
 <th></th>
 <th>FPS</th>
-<th>DMA転送待ち時間</th>
-<th>mail待ちの割合</th>
+<th>DMA転送待ち割合</th>
+<th>mail待ち割合</th>
 <th>SPE稼働率</th>
 </tr>
 <tr>
@@ -278,7 +284,7 @@
 
 <li class="slide">
 <h1>Mail の書き込み待ち</h1>
-Task が終了した際と TaskList が終了した際に SPE が Mailbox へ書き込みを行う(依存関係解決のため)。Outbound Mailbox はサイズが1なので、他のMailが書きこまれてる場合、それが PPE側から読み込まれるまで、待つ。
+Task が終了した際と TaskList が終了した際に SPE が Mailbox へ書き込みを行う(依存関係解決のため)。Outbound Mailbox はサイズが1なので、他のMailが書き込まれている場合、それが PPE側から読み込まれるまで、待つ。
 
 <p style="text-align: center;">
 <img class="scale" src="pix/mailschedule2.png" width="80%" alt="" title="At a Glance" />
@@ -387,7 +393,7 @@
 Mailbox に書き込めない場合は、MailQueue に書き込む例
 
 <p style="text-align: center;">
-<img class="scale" src="pix/mailqueue1.png" width="80%" alt="" title="At a Glance" />
+<img class="scale" src="pix/mailqueue1.png" width="70%" alt="" title="At a Glance" />
 </p>
 
 <li class="slide">
@@ -452,7 +458,116 @@
 </font>
 
 <li class="slide">
-<h1>改良効果のまとめ</h1>
+<h1>MemorySegment(1/7)</h1>
+CreateSpanTask では明示的にDMA転送命令を記述している。
+
+<ul>
+  <li>処理するデータ構造上の理由、Task内でのデータロードが必要</li>
+  <li>DMA転送命令は Cell アーキテクチャ依存の記述</li>
+  <li>他のアーキテクチャなどでは不要</li>
+</ul><br>
+
+アーキテクチャ依存の記述を隠蔽できるAPIが必要になった。
+
+<li class="slide">
+<h1>MemorySegment(2/7)</h1>
+明示的なDMA転送命令を隠蔽するため MemorySegment を実装した
+
+<ul>
+  <li>一定のメモリを確保し、ハッシュで管理(LRU方式)</li>
+  <li>API 内部で自動的なキャッシュを行う (サイズは任意に設定できる)</li>
+  <li>dma 命令を MemorySegment というデータ構造を操作する命令に置き換える</li>
+  <ul>
+    <li>dma_load -> get_segment</li>
+    <li>dma_store -> put_segment</li>
+    <li>dma_wait -> wait_segment</li>
+  </ul>
+</ul>
+
+<li class="slide">
+<h1>MemorySegment(3/7)</h1>
+
+<p style="text-align: center;">
+<img class="scale" src="pix/getsegment1.png" width="50%" alt="" title="At a Glance" />
+</p>
+
+
+<li class="slide">
+<h1>MemorySegment(4/7)</h1>
+
+<p style="text-align: center;">
+<img class="scale" src="pix/putsegment1.png" width="50%" alt="" title="At a Glance" />
+</p>
+
+
+<li class="slide">
+<h1>MemorySegment(5/7)</h1>
+明示的に記述したDMA転送命令の例
+<pre>
+loop() {
+
+  tmp_data = get_data;
+  get_data = send_data;
+  send_data = tmp_data;
+
+  dma_wait(WAIT_STORE);
+
+  dma_store(send_data, send_addr, data_size, WAIT_STORE);
+  dma_load(get_data, get_addr, data_size, WAIT_LOAD);
+
+  dma_wait(WAIT_LOAD);
+
+  calc(get_data);
+
+}
+</pre>
+
+<li class="slide">
+<h1>MemorySegment(6/7)</h1>
+MemorySegment を適応させた例
+<pre>
+loop() {
+
+  wait_segment(put_ms);
+
+  put_ms = get_ms;
+
+  put_segment(put_ms);
+  get_ms = get_segment(get_addr, ml);
+
+  wait_segment(get_ms);
+  get_data =  get_ms->data;
+
+  calc(get_data);
+}
+</pre>
+
+<li class="slide">
+<h1>MemorySegment(7/7)</h1>
+MemorySemgment を導入
+
+<ul>
+  <li>アーキテクチャ依存の記述を隠蔽することに成功した</li>
+  <li>汎用的な Task 内でのデータ転送APIとして使用でき</li>
+  <li>Core i7, Xeon などの汎用のメニーコアにも対応可能</li>
+  <li>CreateSpanTask 内のデータロードと、DrawspanTask の Texture のロードに使用している</li>
+</ul>
+
+<li class="slide">
+<h1>まとめ(1)</h1>
+並列プログラミングフレームワーク Cerium の改良を行った。
+
+<ul>
+  <li>Mail の待ち時間を削減、稼働率とFPSの向上に成功</li>
+  <li>汎用的なデータ転送APIを実装した</li>
+  <li>Cell アーキテクチャ依存の記述の隠蔽に成功</li>
+</ul>
+
+
+<li class="slide">
+<h1>まとめ(2)</h1>
+
+改良の効果を示す
 
 <font size="5">
 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5"  align="center">
@@ -511,28 +626,33 @@
 </font>
 
 <li class="slide">
-<h1>MemorySegment(1/)</h1>
-CreateSpanTask では明示的にDMA転送命令を記述している。
-
-<ul>
-  <li>処理するデータ構造上の理由、Task内でのデータロードが必要</li>
-  <li>DMA転送命令は Cell アーキテクチャの依存の記述</li>
-  <li>他のアーキテクチャ などでは不要</li>
-</ul>
+<h1>OpenGL との比較</h1>
+学生実験で作成された シューティングゲーム「SuperDandy」 を例題に OpenGL と比較。OpenGL は PPE 1基のみを使用。Cerium は
+SPE6基+PPE1基を使用した。
 
-アーキテクチャ依存の記述を隠蔽できるAPIが必要
+<table border="1" cellspacing="0" cellspacing="2" cellpadding="5"  align="center">
+<caption>シューティングゲーム</caption>
+<tr>
+<th></th>
+<th>OpenGL</th>
+<th>Cerium</th>
+<th>性能差</th>
+</tr>
 
-<li class="slide">
-<h1>MemorySegment(2)</h1>
-MemorySegment を実装
+<tr>
+<th>SuperDandy</th>
+<th>17.5 FPS</th>
+<th>49.5 FPS</th>
+<th>2.9 倍</th>
+</tr>
 
-
-<li class="slide">
-<h1>まとめ</h1>
+</table>
 
 
 <li class="slide">
 <h1>今後の課題</h1>
+アムダールの法則より、
+
 
 <li class="slide">
 <h1>自動的な依存関係の解決</h1>
@@ -544,7 +664,6 @@
 <h1>SPE の LS の利用方法</h1>
 
 
-
 <li class="slide">
 <h1></h1>