diff presen/presen1.html @ 23:02067287fac3 draft

add file
author Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
date Sun, 12 Feb 2012 23:01:44 +0900
parents fe88829c8fe3
children 716f0a413687
line wrap: on
line diff
--- a/presen/presen1.html	Sun Feb 12 17:51:19 2012 +0900
+++ b/presen/presen1.html	Sun Feb 12 23:01:44 2012 +0900
@@ -105,10 +105,25 @@
   <li>ソフトウェアMailQueueの実装</li>
   <li>TaskをグルーピングするTaskArrayの実装</li>
   <li>明示的なDMAロードを隠蔽するMemorySegmentのAPIの実装</li>
-</ul>
+</ul><br>
 などの改良を行い、信頼性のある並列プログラミングフレームワークを目指す。
 </font>
 
+<li class="slide">
+<h1>発表構成</h1>
+<ul>
+  <li>Cellの機能</li>
+  <li>Ceriumの構成</li>
+  <li>Ceriumに行った改良とその効果</li>
+  <ul>
+    <li>TaskArrayの実装(Mailの待ち時間の削減)</li>
+    <li>ソフトウェアMailQueueの実装(Mailの待ち時間の削減)</li>
+    <li>MemorySegmentの実装(アーキテクチャ依存記述の隠蔽)</li>
+  </ul>
+  <li>まとめ</li>
+  <li>今後の課題</li>
+</ul>
+
 <li class="slide">
 <h1>Cell Broadband Engine</h1>
 <font size="5">
@@ -131,18 +146,22 @@
 </font>
 
 <li class="slide">
-<h1>DMA転送</h1>
-SPE は直接 MainMemory にアクセスできない。 明示的な DMA 転送命令を用いてデータにアクセスする。データは
+<h1>Cellの機能(DMA転送)</h1>
+<font size="6">
+Cell の SPE は直接 MainMemory にアクセスできない。 明示的な DMA 転送命令を用いてデータにアクセスする。転送するデータの条件として
 
 <ul>
   <li>16アラインメントに揃える</li>
-  <li>16byte の倍数のサイズ</li>
-  <li>一度の転送は16KB の大きさまで</li>
-</ul>
+  <li>16byte の倍数のサイズでなければならない</li>
+  <li>一度の転送は16KB の大きさまでできる</li>
+</ul><br>
 
+プログラムが明示的にDMA命令を発行して、データ転送を行う
+</font>
 
 <li class="slide">
-<h1>Mailbox</h1>
+<h1>Cellの機能(Mailbox)</h1>
+<font size="6">
 
 PPE と SPE の通信には Mailbox を用いる
 
@@ -154,22 +173,26 @@
     <li>SPU Outbound Mailbox: SPE -> PPE</li>
     <li>SPU Outbound interrupt Mailbox: SPE -> PPE (割り込み)</li>
   </ul>
-</ul>
+</ul><br>
 
+
+</font>
 <li class="slide">
 <h1>Cerium</h1>
+<font size="6">
 Cerium とは
+
 <ul>
   <li>並列プログラミング用のフレームワーク</li>
   <li>学生実験での使用を考慮して PS3/Cell, Linux, MacOSX で動作する</li>
-  <li>構成</li>
+  <li>Ceriumの構成</li>
   <ul>
     <li>TaskManager</li>
     <li>RenderingEngine</li>
     <li>SceneGraph</li>
   </ul>
 </ul>
-
+</font>
 
 <li class="slide">
 <h1>TaskManager</h1>
@@ -177,15 +200,15 @@
 
 <ul>
   <li>Task とよばれるデータ構造を提供</li>
-  <li>処理(単位は関数に近い)を Task で記述していく</li>
-  <li>定義された、Task の情報に沿って各コアに処理を割り振る</li>
-</ul>
+  <li>ユーザは処理(単位は関数に近い)を Task で記述していく</li>
+  <li>定義されたTask は、Task 情報に沿って各コアに処理を割り振られる</li>
+</ul><br>
 
 Task で記述された部分の、自動的な並列処理スケジューリングを行う。
 
 <li class="slide">
 <h1>RenderingEngine(1/2)</h1>
-PS3 では Graphics Engien の仕様が公開されていないので、独自の RenderingEngine を開発した。
+PS3 では Graphics Engine の仕様が公開されていないので、独自の RenderingEngine を開発した。
 Task で記述され、主に3つの Task から構成される
 <ul>
   <li>CreatePolygonTask</li>
@@ -213,10 +236,15 @@
 
 <li class="slide">
 <h1>SceneGraph</h1>
-ゲームのシーンを構成する木構造のグラフ。
+ゲームのシーンを構成する木構造のグラフ。各 Node がゲームのオブジェクトになる。オブジェクトには Move 関数と collision  関数が設定でき、ステイトパターンで入れ替える。
+
+<p style="text-align: center;">
+<img class="scale" src="pix/scenegraph1.png" width="30%" alt="" title="At a Glance" />
+</p>
+
 
 <li class="slide">
-<h1>Cerium の改良</h1>
+<h1>Cerium の改良(Mailの待ち時間)</h1>
 <font size="5">
 RenderingEngine を用いた例題で、ball bound, panel がある。(FPS = Frame per second)
 
@@ -255,21 +283,18 @@
   </ul>
 </ul>
 
-ball bound では Mail 待ちが約70%と、稼働率が出ていない。<br>
-panel は ball bound より処理の描画の処理が重く、その分稼働率が高くなっている。
-アムダールの法則より稼働率がでないとマルチコアの性能は発揮されない。フレームワークとしての信頼性が十分でない
+ball bound では Mail 待ちが約70%、稼働率23%と十分な稼働率ではない。(panel は ball bound より描画の処理が重く、その分稼働率が高くなっている)<br>
+アムダールの法則より稼働率がでないとマルチコアの性能は発揮されない。フレームワークとしての信頼性が十分でない問題がある
 </font>
 
 <li class="slide">
 <h1>Mail 通知のスケジューリング</h1>
+稼働率を向上させるために、Mail の待ち時間を削減する。<br><br>
 Cerium では SPE が Mail で 待ち時間が発生するタイミングは2つ
 
 <ul>
   <li>TaskList を待つ場合</li>
-  <li>Mail の書き込みを待つ場合</li>
-  <ul>
-
-  </ul>
+  <li>SPE から Mailbox へ書き込む際の待ち</li>
 </ul>
 
 <li class="slide">
@@ -295,12 +320,16 @@
 
 <li class="slide">
 <h1>TaskArray(1/3)</h1>
-TaskList は Cerium 側で固定長であり、ユーザは変更することができない。ユーザが設定できる TaskList のようなものが、TaskArrayである。TaskArray は複数の Task をグルーピングできる。
+<font size="5">
+Task毎に依存関係の解決のため、Mail を通知する。バリア同期など複数の Task が同じ Task を待つ場合にはグルーピングできる。
+Task のグルーピングを可能にするために TaskArray を実装した。
 
 <p style="text-align: center;">
 <img class="scale" src="pix/taskarray1.png" width="80%" alt="" title="At a Glance" />
 </p>
 
+</font>
+
 <li class="slide">
 <h1>TaskArray(2/3)</h1>
 例えば TaskListのサイズが4, TaskArray のサイズが4の場合、Task が8個の場合
@@ -361,7 +390,6 @@
 <th>67.6%</th>
 </tr>
 
-
 <tr>
 <th>あり</th>
 <th>4.2</th>
@@ -377,7 +405,7 @@
 
 <li class="slide">
 <h1>MailQueue(1/3)</h1>
-ソフトウェア MailQueue の実装
+Task 毎の Mail 書き込み時の待ち時間を削減するため、MailQueue を実装した。
 
 <ul>
   <li>SPE から Mailbox に書き出せない場合に MailQueue へと書きだす</li>
@@ -385,8 +413,6 @@
   <li>MailQueue に残っている Mail は TaskList のTask を消化した時点で、すべて書き出す処理を挟む</li>
 </ul>
 
-Task 毎の Mail 書き込み時の待ち時間を削減するのが目的
-
 <li class="slide">
 <h1>MailQueue(2/3)</h1>
 
@@ -398,9 +424,9 @@
 
 <li class="slide">
 <h1>MailQueue(3/3)</h1>
+<font size="5">
 MailQeueuの効果
 
-<font size="5">
 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5"  align="center">
 <caption>ball bound</caption>
 <tr>
@@ -457,9 +483,12 @@
 </table>
 </font>
 
+ball bound , panel ともに Mail 待ち時間が削減され、稼働率、FPS の向上につながった。
+
+
 <li class="slide">
-<h1>MemorySegment(1/7)</h1>
-CreateSpanTask では明示的にDMA転送命令を記述している。
+<h1>Ceriumの改良(アーキテクチャ依存記述の隠蔽)</h1>
+RenderingEngine の Task内 では明示的にDMA転送命令を記述している。
 
 <ul>
   <li>処理するデータ構造上の理由、Task内でのデータロードが必要</li>
@@ -467,12 +496,13 @@
   <li>他のアーキテクチャなどでは不要</li>
 </ul><br>
 
+フレームワークとしての汎用性に欠ける。
 アーキテクチャ依存の記述を隠蔽できるAPIが必要になった。
 
 <li class="slide">
-<h1>MemorySegment(2/7)</h1>
+<h1>MemorySegment(1/6)</h1>
 明示的なDMA転送命令を隠蔽するため MemorySegment を実装した
-
+MemorySegemnt はデータ構造。LS 内のデータを管理する。
 <ul>
   <li>一定のメモリを確保し、ハッシュで管理(LRU方式)</li>
   <li>API 内部で自動的なキャッシュを行う (サイズは任意に設定できる)</li>
@@ -485,7 +515,7 @@
 </ul>
 
 <li class="slide">
-<h1>MemorySegment(3/7)</h1>
+<h1>MemorySegment(2/6)</h1>
 
 <p style="text-align: center;">
 <img class="scale" src="pix/getsegment1.png" width="50%" alt="" title="At a Glance" />
@@ -493,7 +523,7 @@
 
 
 <li class="slide">
-<h1>MemorySegment(4/7)</h1>
+<h1>MemorySegment(3/6)</h1>
 
 <p style="text-align: center;">
 <img class="scale" src="pix/putsegment1.png" width="50%" alt="" title="At a Glance" />
@@ -501,7 +531,7 @@
 
 
 <li class="slide">
-<h1>MemorySegment(5/7)</h1>
+<h1>MemorySegment(4/6)</h1>
 明示的に記述したDMA転送命令の例
 <pre>
 loop() {
@@ -523,7 +553,7 @@
 </pre>
 
 <li class="slide">
-<h1>MemorySegment(6/7)</h1>
+<h1>MemorySegment(5/6)</h1>
 MemorySegment を適応させた例
 <pre>
 loop() {
@@ -543,29 +573,28 @@
 </pre>
 
 <li class="slide">
-<h1>MemorySegment(7/7)</h1>
+<h1>MemorySegment(6/6)</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>
+<h1>まとめ(1/2)</h1>
 並列プログラミングフレームワーク Cerium の改良を行った。
 
 <ul>
-  <li>Mail の待ち時間を削減、稼働率とFPSの向上に成功</li>
-  <li>汎用的なデータ転送APIを実装した</li>
-  <li>Cell アーキテクチャ依存の記述の隠蔽に成功</li>
-</ul>
+  <li>MailQeueu, TaskArry を実装、導入した。その結果 Mail の待ち時間の削減、稼働率と FPS の向上に成功した</li>
+  <li>MemorySegment を実装し、汎用的なデータ転送APIが利用できるようになった。Cell アーキテクチャ依存の記述の隠蔽に成功</li>
+</ul><br>
 
+以上の改良を行い、稼働率の向上、アーキテクチャ依存のコードの排除に成功し、フレームワークとしての信頼性が向上した。
 
 <li class="slide">
-<h1>まとめ(2)</h1>
+<h1>まとめ(2/2)</h1>
 
 改良の効果を示す
 
@@ -651,18 +680,24 @@
 
 <li class="slide">
 <h1>今後の課題</h1>
-アムダールの法則より、
 
-
-<li class="slide">
-<h1>自動的な依存関係の解決</h1>
-
-<li class="slide">
-<h1>Task 化による並列化率の向上</h1>
-
-<li class="slide">
-<h1>SPE の LS の利用方法</h1>
-
+<ul>
+  <li>SceneGraph 部分の Task 化</li>
+  <ul>
+    <li>Task 化によって並列化率の向上</li>
+  </ul>
+  <li>自動的な依存関係の解決</li>
+  <ul>
+    <li>扱うデータから Task の依存関係がわかる</li>
+    <li>ユーザが複雑な依存関係を設定しない</li>
+  </ul>
+  <li>プログラムとデータの On demand Load</li>
+  <ul>
+    <li>プログラムコードはすべて LS に置いている</li>
+    <li>LS の容量を圧迫しプログラムが動作しなくなる</li>
+    <li>すべてのデータを扱う包括的なデータ構造が必要</li>
+  </ul>
+</ul>
 
 <li class="slide">
 <h1></h1>