Mercurial > hg > Papers > 2012 > yutaka-master
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>