comparison 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
comparison
equal deleted inserted replaced
22:fe88829c8fe3 23:02067287fac3
107 以上の問題点を解決するため 107 以上の問題点を解決するため
108 <ul> 108 <ul>
109 <li>ソフトウェアMailQueueの実装</li> 109 <li>ソフトウェアMailQueueの実装</li>
110 <li>TaskをグルーピングするTaskArrayの実装</li> 110 <li>TaskをグルーピングするTaskArrayの実装</li>
111 <li>明示的なDMAロードを隠蔽するMemorySegmentのAPIの実装</li> 111 <li>明示的なDMAロードを隠蔽するMemorySegmentのAPIの実装</li>
112 </ul> 112 </ul><br>
113 などの改良を行い、信頼性のある並列プログラミングフレームワークを目指す。 113 などの改良を行い、信頼性のある並列プログラミングフレームワークを目指す。
114 </font> 114 </font>
115
116 <li class="slide">
117 <h1>発表構成</h1>
118 <ul>
119 <li>Cellの機能</li>
120 <li>Ceriumの構成</li>
121 <li>Ceriumに行った改良とその効果</li>
122 <ul>
123 <li>TaskArrayの実装(Mailの待ち時間の削減)</li>
124 <li>ソフトウェアMailQueueの実装(Mailの待ち時間の削減)</li>
125 <li>MemorySegmentの実装(アーキテクチャ依存記述の隠蔽)</li>
126 </ul>
127 <li>まとめ</li>
128 <li>今後の課題</li>
129 </ul>
115 130
116 <li class="slide"> 131 <li class="slide">
117 <h1>Cell Broadband Engine</h1> 132 <h1>Cell Broadband Engine</h1>
118 <font size="5"> 133 <font size="5">
119 134
133 </p> 148 </p>
134 149
135 </font> 150 </font>
136 151
137 <li class="slide"> 152 <li class="slide">
138 <h1>DMA転送</h1> 153 <h1>Cellの機能(DMA転送)</h1>
139 SPE は直接 MainMemory にアクセスできない。 明示的な DMA 転送命令を用いてデータにアクセスする。データは 154 <font size="6">
155 Cell の SPE は直接 MainMemory にアクセスできない。 明示的な DMA 転送命令を用いてデータにアクセスする。転送するデータの条件として
140 156
141 <ul> 157 <ul>
142 <li>16アラインメントに揃える</li> 158 <li>16アラインメントに揃える</li>
143 <li>16byte の倍数のサイズ</li> 159 <li>16byte の倍数のサイズでなければならない</li>
144 <li>一度の転送は16KB の大きさまで</li> 160 <li>一度の転送は16KB の大きさまでできる</li>
145 </ul> 161 </ul><br>
146 162
147 163 プログラムが明示的にDMA命令を発行して、データ転送を行う
148 <li class="slide"> 164 </font>
149 <h1>Mailbox</h1> 165
166 <li class="slide">
167 <h1>Cellの機能(Mailbox)</h1>
168 <font size="6">
150 169
151 PPE と SPE の通信には Mailbox を用いる 170 PPE と SPE の通信には Mailbox を用いる
152 171
153 <ul> 172 <ul>
154 <li>PPE と SPE 間で32ビットメッセージの交換ができる</li> 173 <li>PPE と SPE 間で32ビットメッセージの交換ができる</li>
156 <ul> 175 <ul>
157 <li>SPU inbound Mailbox: PPE -> SPE</li> 176 <li>SPU inbound Mailbox: PPE -> SPE</li>
158 <li>SPU Outbound Mailbox: SPE -> PPE</li> 177 <li>SPU Outbound Mailbox: SPE -> PPE</li>
159 <li>SPU Outbound interrupt Mailbox: SPE -> PPE (割り込み)</li> 178 <li>SPU Outbound interrupt Mailbox: SPE -> PPE (割り込み)</li>
160 </ul> 179 </ul>
161 </ul> 180 </ul><br>
162 181
182
183 </font>
163 <li class="slide"> 184 <li class="slide">
164 <h1>Cerium</h1> 185 <h1>Cerium</h1>
186 <font size="6">
165 Cerium とは 187 Cerium とは
188
166 <ul> 189 <ul>
167 <li>並列プログラミング用のフレームワーク</li> 190 <li>並列プログラミング用のフレームワーク</li>
168 <li>学生実験での使用を考慮して PS3/Cell, Linux, MacOSX で動作する</li> 191 <li>学生実験での使用を考慮して PS3/Cell, Linux, MacOSX で動作する</li>
169 <li>構成</li> 192 <li>Ceriumの構成</li>
170 <ul> 193 <ul>
171 <li>TaskManager</li> 194 <li>TaskManager</li>
172 <li>RenderingEngine</li> 195 <li>RenderingEngine</li>
173 <li>SceneGraph</li> 196 <li>SceneGraph</li>
174 </ul> 197 </ul>
175 </ul> 198 </ul>
176 199 </font>
177 200
178 <li class="slide"> 201 <li class="slide">
179 <h1>TaskManager</h1> 202 <h1>TaskManager</h1>
180 TaskManager とは Task のスケジューラ 203 TaskManager とは Task のスケジューラ
181 204
182 <ul> 205 <ul>
183 <li>Task とよばれるデータ構造を提供</li> 206 <li>Task とよばれるデータ構造を提供</li>
184 <li>処理(単位は関数に近い)を Task で記述していく</li> 207 <li>ユーザは処理(単位は関数に近い)を Task で記述していく</li>
185 <li>定義された、Task の情報に沿って各コアに処理を割り振る</li> 208 <li>定義されたTask は、Task 情報に沿って各コアに処理を割り振られる</li>
186 </ul> 209 </ul><br>
187 210
188 Task で記述された部分の、自動的な並列処理スケジューリングを行う。 211 Task で記述された部分の、自動的な並列処理スケジューリングを行う。
189 212
190 <li class="slide"> 213 <li class="slide">
191 <h1>RenderingEngine(1/2)</h1> 214 <h1>RenderingEngine(1/2)</h1>
192 PS3 では Graphics Engien の仕様が公開されていないので、独自の RenderingEngine を開発した。 215 PS3 では Graphics Engine の仕様が公開されていないので、独自の RenderingEngine を開発した。
193 Task で記述され、主に3つの Task から構成される 216 Task で記述され、主に3つの Task から構成される
194 <ul> 217 <ul>
195 <li>CreatePolygonTask</li> 218 <li>CreatePolygonTask</li>
196 <ul> 219 <ul>
197 <li>モデリングデータを、三角形のポリゴンに変換する</li> 220 <li>モデリングデータを、三角形のポリゴンに変換する</li>
215 <img class="scale" src="pix/rendering3.png" width="50%" alt="" title="At a Glance" /> 238 <img class="scale" src="pix/rendering3.png" width="50%" alt="" title="At a Glance" />
216 </p> 239 </p>
217 240
218 <li class="slide"> 241 <li class="slide">
219 <h1>SceneGraph</h1> 242 <h1>SceneGraph</h1>
220 ゲームのシーンを構成する木構造のグラフ。 243 ゲームのシーンを構成する木構造のグラフ。各 Node がゲームのオブジェクトになる。オブジェクトには Move 関数と collision 関数が設定でき、ステイトパターンで入れ替える。
221 244
222 <li class="slide"> 245 <p style="text-align: center;">
223 <h1>Cerium の改良</h1> 246 <img class="scale" src="pix/scenegraph1.png" width="30%" alt="" title="At a Glance" />
247 </p>
248
249
250 <li class="slide">
251 <h1>Cerium の改良(Mailの待ち時間)</h1>
224 <font size="5"> 252 <font size="5">
225 RenderingEngine を用いた例題で、ball bound, panel がある。(FPS = Frame per second) 253 RenderingEngine を用いた例題で、ball bound, panel がある。(FPS = Frame per second)
226 254
227 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center"> 255 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center">
228 <tr> 256 <tr>
257 <ul> 285 <ul>
258 <li>球が跳ねる例題。</li> 286 <li>球が跳ねる例題。</li>
259 </ul> 287 </ul>
260 </ul> 288 </ul>
261 289
262 ball bound では Mail 待ちが約70%と、稼働率が出ていない。<br> 290 ball bound では Mail 待ちが約70%、稼働率23%と十分な稼働率ではない。(panel は ball bound より描画の処理が重く、その分稼働率が高くなっている)<br>
263 panel は ball bound より処理の描画の処理が重く、その分稼働率が高くなっている。 291 アムダールの法則より稼働率がでないとマルチコアの性能は発揮されない。フレームワークとしての信頼性が十分でない問題がある
264 アムダールの法則より稼働率がでないとマルチコアの性能は発揮されない。フレームワークとしての信頼性が十分でない
265 </font> 292 </font>
266 293
267 <li class="slide"> 294 <li class="slide">
268 <h1>Mail 通知のスケジューリング</h1> 295 <h1>Mail 通知のスケジューリング</h1>
296 稼働率を向上させるために、Mail の待ち時間を削減する。<br><br>
269 Cerium では SPE が Mail で 待ち時間が発生するタイミングは2つ 297 Cerium では SPE が Mail で 待ち時間が発生するタイミングは2つ
270 298
271 <ul> 299 <ul>
272 <li>TaskList を待つ場合</li> 300 <li>TaskList を待つ場合</li>
273 <li>Mail の書き込みを待つ場合</li> 301 <li>SPE から Mailbox へ書き込む際の待ち</li>
274 <ul>
275
276 </ul>
277 </ul> 302 </ul>
278 303
279 <li class="slide"> 304 <li class="slide">
280 <h1>TaskListのMail待ち</h1> 305 <h1>TaskListのMail待ち</h1>
281 TaskList は処理する Task の List である。PPE で生成され SPE へ Mail で通知される 306 TaskList は処理する Task の List である。PPE で生成され SPE へ Mail で通知される
297 TaskList が生成され SPE に通知されるまで、SPE に待ち時間が発生する。 322 TaskList が生成され SPE に通知されるまで、SPE に待ち時間が発生する。
298 323
299 324
300 <li class="slide"> 325 <li class="slide">
301 <h1>TaskArray(1/3)</h1> 326 <h1>TaskArray(1/3)</h1>
302 TaskList は Cerium 側で固定長であり、ユーザは変更することができない。ユーザが設定できる TaskList のようなものが、TaskArrayである。TaskArray は複数の Task をグルーピングできる。 327 <font size="5">
328 Task毎に依存関係の解決のため、Mail を通知する。バリア同期など複数の Task が同じ Task を待つ場合にはグルーピングできる。
329 Task のグルーピングを可能にするために TaskArray を実装した。
303 330
304 <p style="text-align: center;"> 331 <p style="text-align: center;">
305 <img class="scale" src="pix/taskarray1.png" width="80%" alt="" title="At a Glance" /> 332 <img class="scale" src="pix/taskarray1.png" width="80%" alt="" title="At a Glance" />
306 </p> 333 </p>
334
335 </font>
307 336
308 <li class="slide"> 337 <li class="slide">
309 <h1>TaskArray(2/3)</h1> 338 <h1>TaskArray(2/3)</h1>
310 例えば TaskListのサイズが4, TaskArray のサイズが4の場合、Task が8個の場合 339 例えば TaskListのサイズが4, TaskArray のサイズが4の場合、Task が8個の場合
311 340
363 <th>21.3%</th> 392 <th>21.3%</th>
364 <th>11.1%</th> 393 <th>11.1%</th>
365 <th>67.6%</th> 394 <th>67.6%</th>
366 </tr> 395 </tr>
367 396
368
369 <tr> 397 <tr>
370 <th>あり</th> 398 <th>あり</th>
371 <th>4.2</th> 399 <th>4.2</th>
372 <th>22.5%</th> 400 <th>22.5%</th>
373 <th>5.7%</th> 401 <th>5.7%</th>
379 407
380 </font> 408 </font>
381 409
382 <li class="slide"> 410 <li class="slide">
383 <h1>MailQueue(1/3)</h1> 411 <h1>MailQueue(1/3)</h1>
384 ソフトウェア MailQueue の実装 412 Task 毎の Mail 書き込み時の待ち時間を削減するため、MailQueue を実装した。
385 413
386 <ul> 414 <ul>
387 <li>SPE から Mailbox に書き出せない場合に MailQueue へと書きだす</li> 415 <li>SPE から Mailbox に書き出せない場合に MailQueue へと書きだす</li>
388 <li>MailQueue に Mail がある場合は、MailQueue から Mailbox へ書き出す</li> 416 <li>MailQueue に Mail がある場合は、MailQueue から Mailbox へ書き出す</li>
389 <li>MailQueue に残っている Mail は TaskList のTask を消化した時点で、すべて書き出す処理を挟む</li> 417 <li>MailQueue に残っている Mail は TaskList のTask を消化した時点で、すべて書き出す処理を挟む</li>
390 </ul> 418 </ul>
391 419
392 Task 毎の Mail 書き込み時の待ち時間を削減するのが目的
393
394 <li class="slide"> 420 <li class="slide">
395 <h1>MailQueue(2/3)</h1> 421 <h1>MailQueue(2/3)</h1>
396 422
397 Mailbox に書き込めない場合は、MailQueue に書き込む例 423 Mailbox に書き込めない場合は、MailQueue に書き込む例
398 424
400 <img class="scale" src="pix/mailqueue1.png" width="70%" alt="" title="At a Glance" /> 426 <img class="scale" src="pix/mailqueue1.png" width="70%" alt="" title="At a Glance" />
401 </p> 427 </p>
402 428
403 <li class="slide"> 429 <li class="slide">
404 <h1>MailQueue(3/3)</h1> 430 <h1>MailQueue(3/3)</h1>
431 <font size="5">
405 MailQeueuの効果 432 MailQeueuの効果
406 433
407 <font size="5">
408 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center"> 434 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center">
409 <caption>ball bound</caption> 435 <caption>ball bound</caption>
410 <tr> 436 <tr>
411 <th>MailQueue</th> 437 <th>MailQueue</th>
412 <th>FPS</th> 438 <th>FPS</th>
459 </tr> 485 </tr>
460 486
461 </table> 487 </table>
462 </font> 488 </font>
463 489
464 <li class="slide"> 490 ball bound , panel ともに Mail 待ち時間が削減され、稼働率、FPS の向上につながった。
465 <h1>MemorySegment(1/7)</h1> 491
466 CreateSpanTask では明示的にDMA転送命令を記述している。 492
493 <li class="slide">
494 <h1>Ceriumの改良(アーキテクチャ依存記述の隠蔽)</h1>
495 RenderingEngine の Task内 では明示的にDMA転送命令を記述している。
467 496
468 <ul> 497 <ul>
469 <li>処理するデータ構造上の理由、Task内でのデータロードが必要</li> 498 <li>処理するデータ構造上の理由、Task内でのデータロードが必要</li>
470 <li>DMA転送命令は Cell アーキテクチャ依存の記述</li> 499 <li>DMA転送命令は Cell アーキテクチャ依存の記述</li>
471 <li>他のアーキテクチャなどでは不要</li> 500 <li>他のアーキテクチャなどでは不要</li>
472 </ul><br> 501 </ul><br>
473 502
503 フレームワークとしての汎用性に欠ける。
474 アーキテクチャ依存の記述を隠蔽できるAPIが必要になった。 504 アーキテクチャ依存の記述を隠蔽できるAPIが必要になった。
475 505
476 <li class="slide"> 506 <li class="slide">
477 <h1>MemorySegment(2/7)</h1> 507 <h1>MemorySegment(1/6)</h1>
478 明示的なDMA転送命令を隠蔽するため MemorySegment を実装した 508 明示的なDMA転送命令を隠蔽するため MemorySegment を実装した
479 509 MemorySegemnt はデータ構造。LS 内のデータを管理する。
480 <ul> 510 <ul>
481 <li>一定のメモリを確保し、ハッシュで管理(LRU方式)</li> 511 <li>一定のメモリを確保し、ハッシュで管理(LRU方式)</li>
482 <li>API 内部で自動的なキャッシュを行う (サイズは任意に設定できる)</li> 512 <li>API 内部で自動的なキャッシュを行う (サイズは任意に設定できる)</li>
483 <li>dma 命令を MemorySegment というデータ構造を操作する命令に置き換える</li> 513 <li>dma 命令を MemorySegment というデータ構造を操作する命令に置き換える</li>
484 <ul> 514 <ul>
487 <li>dma_wait -> wait_segment</li> 517 <li>dma_wait -> wait_segment</li>
488 </ul> 518 </ul>
489 </ul> 519 </ul>
490 520
491 <li class="slide"> 521 <li class="slide">
492 <h1>MemorySegment(3/7)</h1> 522 <h1>MemorySegment(2/6)</h1>
493 523
494 <p style="text-align: center;"> 524 <p style="text-align: center;">
495 <img class="scale" src="pix/getsegment1.png" width="50%" alt="" title="At a Glance" /> 525 <img class="scale" src="pix/getsegment1.png" width="50%" alt="" title="At a Glance" />
496 </p> 526 </p>
497 527
498 528
499 <li class="slide"> 529 <li class="slide">
500 <h1>MemorySegment(4/7)</h1> 530 <h1>MemorySegment(3/6)</h1>
501 531
502 <p style="text-align: center;"> 532 <p style="text-align: center;">
503 <img class="scale" src="pix/putsegment1.png" width="50%" alt="" title="At a Glance" /> 533 <img class="scale" src="pix/putsegment1.png" width="50%" alt="" title="At a Glance" />
504 </p> 534 </p>
505 535
506 536
507 <li class="slide"> 537 <li class="slide">
508 <h1>MemorySegment(5/7)</h1> 538 <h1>MemorySegment(4/6)</h1>
509 明示的に記述したDMA転送命令の例 539 明示的に記述したDMA転送命令の例
510 <pre> 540 <pre>
511 loop() { 541 loop() {
512 542
513 tmp_data = get_data; 543 tmp_data = get_data;
525 555
526 } 556 }
527 </pre> 557 </pre>
528 558
529 <li class="slide"> 559 <li class="slide">
530 <h1>MemorySegment(6/7)</h1> 560 <h1>MemorySegment(5/6)</h1>
531 MemorySegment を適応させた例 561 MemorySegment を適応させた例
532 <pre> 562 <pre>
533 loop() { 563 loop() {
534 564
535 wait_segment(put_ms); 565 wait_segment(put_ms);
545 calc(get_data); 575 calc(get_data);
546 } 576 }
547 </pre> 577 </pre>
548 578
549 <li class="slide"> 579 <li class="slide">
550 <h1>MemorySegment(7/7)</h1> 580 <h1>MemorySegment(6/6)</h1>
551 MemorySemgment を導入 581 MemorySemgment を導入
552 582
553 <ul> 583 <ul>
554 <li>アーキテクチャ依存の記述を隠蔽することに成功した</li> 584 <li>アーキテクチャ依存の記述を隠蔽することに成功した</li>
555 <li>汎用的な Task 内でのデータ転送APIとして使用でき</li> 585 <li>汎用的な Task 内でのデータ転送APIとして使用でき</li>
556 <li>Core i7, Xeon などの汎用のメニーコアにも対応可能</li> 586 <li>Core i7, Xeon などの汎用のメニーコアにも対応可能</li>
557 <li>CreateSpanTask 内のデータロードと、DrawspanTask の Texture のロードに使用している</li> 587 </ul>
558 </ul> 588
559 589 <li class="slide">
560 <li class="slide"> 590 <h1>まとめ(1/2)</h1>
561 <h1>まとめ(1)</h1>
562 並列プログラミングフレームワーク Cerium の改良を行った。 591 並列プログラミングフレームワーク Cerium の改良を行った。
563 592
564 <ul> 593 <ul>
565 <li>Mail の待ち時間を削減、稼働率とFPSの向上に成功</li> 594 <li>MailQeueu, TaskArry を実装、導入した。その結果 Mail の待ち時間の削減、稼働率と FPS の向上に成功した</li>
566 <li>汎用的なデータ転送APIを実装した</li> 595 <li>MemorySegment を実装し、汎用的なデータ転送APIが利用できるようになった。Cell アーキテクチャ依存の記述の隠蔽に成功</li>
567 <li>Cell アーキテクチャ依存の記述の隠蔽に成功</li> 596 </ul><br>
568 </ul> 597
569 598 以上の改良を行い、稼働率の向上、アーキテクチャ依存のコードの排除に成功し、フレームワークとしての信頼性が向上した。
570 599
571 <li class="slide"> 600 <li class="slide">
572 <h1>まとめ(2)</h1> 601 <h1>まとめ(2/2)</h1>
573 602
574 改良の効果を示す 603 改良の効果を示す
575 604
576 <font size="5"> 605 <font size="5">
577 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center"> 606 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center">
653 </table> 682 </table>
654 683
655 684
656 <li class="slide"> 685 <li class="slide">
657 <h1>今後の課題</h1> 686 <h1>今後の課題</h1>
658 アムダールの法則より、 687
659 688 <ul>
660 689 <li>SceneGraph 部分の Task 化</li>
661 <li class="slide"> 690 <ul>
662 <h1>自動的な依存関係の解決</h1> 691 <li>Task 化によって並列化率の向上</li>
663 692 </ul>
664 <li class="slide"> 693 <li>自動的な依存関係の解決</li>
665 <h1>Task 化による並列化率の向上</h1> 694 <ul>
666 695 <li>扱うデータから Task の依存関係がわかる</li>
667 <li class="slide"> 696 <li>ユーザが複雑な依存関係を設定しない</li>
668 <h1>SPE の LS の利用方法</h1> 697 </ul>
669 698 <li>プログラムとデータの On demand Load</li>
699 <ul>
700 <li>プログラムコードはすべて LS に置いている</li>
701 <li>LS の容量を圧迫しプログラムが動作しなくなる</li>
702 <li>すべてのデータを扱う包括的なデータ構造が必要</li>
703 </ul>
704 </ul>
670 705
671 <li class="slide"> 706 <li class="slide">
672 <h1></h1> 707 <h1></h1>
673 708
674 /*end*/ 709 /*end*/