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