comparison presen/presen.html @ 26:252d2d951d7e

add Task Manager
author gongo@gendarme.cr.ie.u-ryukyu.ac.jp
date Sun, 15 Feb 2009 11:44:57 +0900
parents de8ba175cc9b
children 90128e098120
comparison
equal deleted inserted replaced
25:f6ce9e298225 26:252d2d951d7e
350 <dd><strong>琉球大学 理工学研究科 情報工学専攻 並列信頼研究室</strong></dd> 350 <dd><strong>琉球大学 理工学研究科 情報工学専攻 並列信頼研究室</strong></dd>
351 </dl> 351 </dl>
352 352
353 </div> 353 </div>
354 <div class="slide" id="id1"> 354 <div class="slide" id="id1">
355 <h1>発表の流れ</h1>
356 <ul class="simple">
357 <li>研究の背景と目的</li>
358 <li>Cell アーキテクチャの概要</li>
359 <li>Many Core プログラミングの特徴</li>
360 <li>Task Manager の実装</li>
361 <li>Task Manager を用いた並列プログラム</li>
362 <li>Cerium</li>
363 <li>Cerium を用いたゲーム</li>
364 <li>まとめと今後の課題</li>
365 </ul>
366 </div>
367 <div class="slide" id="id2">
368 <h1>研究の背景</h1> 355 <h1>研究の背景</h1>
369 <p>現在、学生実験で PS3Linux を用いてゲーム開発を行っているが、 356 <p>現在、学生実験で PS3Linux を用いてゲーム開発を行っているが、
370 学生には困難であることがわかってきている</p> 357 学生には困難であることがわかってきている</p>
371 <ul> 358 <ul>
372 <li><p class="first"><span class="text-maroon">問題1</span> : <span class="text-underline">Cell アーキテクチャプログラミング</span></p> 359 <li><p class="first"><span class="text-maroon">問題1</span> : <span class="text-underline">Cell アーキテクチャプログラミング</span></p>
382 </li> 369 </li>
383 </ul> 370 </ul>
384 <p>実験期間の大半を Cell の勉強に費やさねばならず、 371 <p>実験期間の大半を Cell の勉強に費やさねばならず、
385 開発されるゲームのレベルが例年一定以上にならない</p> 372 開発されるゲームのレベルが例年一定以上にならない</p>
386 </div> 373 </div>
387 <div class="slide" id="id3"> 374 <div class="slide" id="id2">
388 <h1>研究目的</h1> 375 <h1>研究目的</h1>
389 <p>Many Core Architecture を用いた並列プログラムの開発をサポートするフレームワーク <span class="text-maroon">Fine Grain Task Manager</span> を提案する</p> 376 <p>Many Core Architecture を用いた並列プログラムの開発をサポートするフレームワーク <span class="text-maroon">Fine Grain Task Manager</span> を提案する</p>
390 <ul> 377 <ul>
391 <li><p class="first">動作環境</p> 378 <li><p class="first">動作環境</p>
392 <ul class="simple"> 379 <ul class="simple">
398 <li>サブルーチンまたは関数</li> 385 <li>サブルーチンまたは関数</li>
399 </ul> 386 </ul>
400 </li> 387 </li>
401 <li><p class="first">Task Manager を用いた開発行程</p> 388 <li><p class="first">Task Manager を用いた開発行程</p>
402 <ol class="arabic simple"> 389 <ol class="arabic simple">
403 <li>逐次型プログラム (MacOSX、Linux)</li> 390 <li>逐次型プログラム</li>
404 <li>データやコードを分割したプログラム (MacOSX、Linux)</li> 391 <li>データやコードを分割したプログラム</li>
405 <li>並列に動かすプログラム (Cell)</li> 392 <li>並列に動かすプログラム</li>
406 </ol> 393 </ol>
407 <p>各段階で信頼性を確保しながら開発を進める</p> 394 <p>各段階で信頼性を確保しながら開発を進める</p>
408 </li> 395 </li>
409 </ul> 396 </ul>
410 </div> 397 </div>
420 <li>ゲームに登場するオブジェクトやルールなど、ゲームを構成する要素を 407 <li>ゲームに登場するオブジェクトやルールなど、ゲームを構成する要素を
421 木構造として持つ <span class="text-maroon">Scene Graph</span></li> 408 木構造として持つ <span class="text-maroon">Scene Graph</span></li>
422 <li>Rendering Engine や Scene Graph の処理単位を Task とし、複数の Core へ 409 <li>Rendering Engine や Scene Graph の処理単位を Task とし、複数の Core へ
423 割り振りを行うカーネル <span class="text-maroon">TaskManager</span></li> 410 割り振りを行うカーネル <span class="text-maroon">TaskManager</span></li>
424 </ul> 411 </ul>
412 <p>学生が Cell アーキテクチャを理解しながら、
413 期間内でゲーム開発が行える、シンプルな
414 マルチタスクフレームワークを目指す</p>
415 </div>
416 <div class="slide" id="id3">
417 <h1>発表の流れ</h1>
418 <ul class="simple">
419 <li>Cell アーキテクチャの概要</li>
420 <li>Many Core プログラミングの特徴</li>
421 <li>Task Manager の実装、例題</li>
422 <li>Cerium</li>
423 <li>比較</li>
424 <li>まとめと今後の課題</li>
425 </ul>
425 </div> 426 </div>
426 <div class="slide" id="cell"> 427 <div class="slide" id="cell">
427 <h1>Cell アーキテクチャの概要</h1> 428 <h1>Cell アーキテクチャの概要</h1>
428 <ul class="simple"> 429 <ul class="simple">
429 <li><span class="text-silver">研究の背景と目的</span></li>
430 <li><span class="text-big">Cell アーキテクチャの概要</span></li> 430 <li><span class="text-big">Cell アーキテクチャの概要</span></li>
431 <li><span class="text-silver">Many Core プログラミングの特徴</span></li> 431 <li><span class="text-silver">Many Core プログラミングの特徴</span></li>
432 <li><span class="text-silver">Task Manager の実装</span></li> 432 <li><span class="text-silver">Task Manager の実装</span></li>
433 <li><span class="text-silver">Task Manager を用いた並列プログラム</span></li>
434 <li><span class="text-silver">Cerium</span></li> 433 <li><span class="text-silver">Cerium</span></li>
435 <li><span class="text-silver">Cerium を用いたゲーム</span></li> 434 <li><span class="text-silver">比較</span></li>
436 <li><span class="text-silver">まとめと今後の課題</span></li> 435 <li><span class="text-silver">まとめと今後の課題</span></li>
437 </ul> 436 </ul>
438 </div> 437 </div>
439 <div class="slide" id="cell-broadband-engine"> 438 <div class="slide" id="cell-broadband-engine">
440 <h1>Cell Broadband Engine</h1> 439 <h1>Cell Broadband Engine</h1>
448 <li>SPE からメインメモリへは直接アクセスできない<ul> 447 <li>SPE からメインメモリへは直接アクセスできない<ul>
449 <li>SPE が持つ MFC (Memory Flow Controller) へ 448 <li>SPE が持つ MFC (Memory Flow Controller) へ
450 <span class="text-maroon">DMA 命令</span> を送ることで行う</li> 449 <span class="text-maroon">DMA 命令</span> を送ることで行う</li>
451 </ul> 450 </ul>
452 </li> 451 </li>
452 <li>128 ビットレジスタを用いて SIMD (Single Instruction Multiple Data) が可能</li>
453 </ul> 453 </ul>
454 </div> 454 </div>
455 <div class="slide" id="id4"> 455 <div class="slide" id="id4">
456 <h1>Cell の基本機能</h1> 456 <h1>Cell の基本機能</h1>
457 <ul> 457 <p><strong>DMA</strong></p>
458 <li><p class="first"><span class="text-maroon">DMA (Direct Memory Access)</span></p> 458 <ul class="simple">
459 <p>メインメモリと LS 間でデータが転送される</p> 459 <li>メインメモリと LS 間でデータが転送される</li>
460 <p>DMA 転送を行うにはいくつか条件がある</p> 460 <li>DMA 転送を行うにはいくつか条件がある<ul>
461 <ul class="simple">
462 <li>データサイズは 16 バイトの倍数</li> 461 <li>データサイズは 16 バイトの倍数</li>
463 <li>転送元と転送先のアドレスが 16 バイト境界に揃えられている</li> 462 <li>転送元と転送先のアドレスが 16 バイト境界に揃えられている</li>
464 </ul> 463 </ul>
465 </li> 464 </li>
466 <li><p class="first"><span class="text-maroon">Mailbox</span></p> 465 </ul>
467 <p>SPE の MFC 内にある FIFO キュー</p> 466 <p><strong>Mailbox</strong></p>
468 <p>PPE と SPE 間で 32 ビットメッセージの交換に用いられる</p> 467 <ul>
468 <li><p class="first">SPE の MFC 内にある FIFO キュー</p>
469 </li>
470 <li><p class="first">PPE と SPE 間で 32 ビットメッセージの交換に用いられる</p>
469 <p>キューは 3 種類</p> 471 <p>キューは 3 種類</p>
470 <ul class="simple"> 472 <ul class="simple">
471 <li>SPU Inbound Mailbox : PPE → SPE</li> 473 <li>SPU Inbound Mailbox : PPE → SPE</li>
472 <li>SPU Outbound Mailbox : SPE → PPE</li> 474 <li>SPU Outbound Mailbox : SPE → PPE</li>
473 <li>SPU Outbound interrupt Mailbox : SPE → PPE (割り込み)</li> 475 <li>SPU Outbound interrupt Mailbox : SPE → PPE (割り込み)</li>
476 </ul> 478 </ul>
477 </div> 479 </div>
478 <div class="slide" id="many-core"> 480 <div class="slide" id="many-core">
479 <h1>Many Core プログラミングの特徴</h1> 481 <h1>Many Core プログラミングの特徴</h1>
480 <ul class="simple"> 482 <ul class="simple">
481 <li><span class="text-silver">研究の背景と目的</span></li>
482 <li><span class="text-silver">Cell アーキテクチャの概要</span></li> 483 <li><span class="text-silver">Cell アーキテクチャの概要</span></li>
483 <li><span class="text-big">Many Core プログラミングの特徴</span></li> 484 <li><span class="text-big">Many Core プログラミングの特徴</span></li>
484 <li><span class="text-silver">Task Manager の実装</span></li> 485 <li><span class="text-silver">Task Manager の実装</span></li>
485 <li><span class="text-silver">Task Manager を用いた並列プログラム</span></li>
486 <li><span class="text-silver">Cerium</span></li> 486 <li><span class="text-silver">Cerium</span></li>
487 <li><span class="text-silver">Cerium を用いたゲーム</span></li> 487 <li><span class="text-silver">比較</span></li>
488 <li><span class="text-silver">まとめと今後の課題</span></li> 488 <li><span class="text-silver">まとめと今後の課題</span></li>
489 </ul> 489 </ul>
490 </div> 490 </div>
491 <div class="slide" id="id5"> 491 <div class="slide" id="id5">
492 <h1>定常的な並列度の必要性</h1> 492 <h1>定常的な並列度の必要性</h1>
494 <dt><strong>Amdahl 則</strong></dt> 494 <dt><strong>Amdahl 則</strong></dt>
495 <dd>元のプログラムの並列化率が低ければ、その性能を生かすことは出来ない</dd> 495 <dd>元のプログラムの並列化率が低ければ、その性能を生かすことは出来ない</dd>
496 </dl> 496 </dl>
497 <div align="center" class="align-center"><img alt="images/amdahl.jpg" class="align-center" src="images/amdahl.jpg" style="width: 360px;" /></div> 497 <div align="center" class="align-center"><img alt="images/amdahl.jpg" class="align-center" src="images/amdahl.jpg" style="width: 360px;" /></div>
498 <div align="center" style="font-size: large;"> 498 <div align="center" style="font-size: large;">
499 6 CPU を使っても、プログラムの並列化率が 8 割程度では<br/> 499 6 CPU を使っても、プログラムの並列化率が 8 割程度では<br />
500 3倍程度の性能向上しか得られない 500 3倍程度の性能向上しか得られない
501 </div><p>Amdahl 則より、恒常的に並列プログラムの並列度を維持する必要がある</p> 501 </div><p>Amdahl 則より、恒常的に並列プログラムの並列度を維持する必要がある</p>
502 </div> 502 </div>
503 <div class="slide" id="id6"> 503 <div class="slide" id="id6">
504 <h1>プログラム及びデータの分割</h1> 504 <h1>プログラム及びデータの分割</h1>
553 <li>個々の CPU 上のデータを調べる必要がある</li> 553 <li>個々の CPU 上のデータを調べる必要がある</li>
554 </ul> 554 </ul>
555 </div> 555 </div>
556 <div class="slide" id="id8"> 556 <div class="slide" id="id8">
557 <h1>並列プログラムの開発行程</h1> 557 <h1>並列プログラムの開発行程</h1>
558 <p>並列プログラミングでは、以下の段階において、それぞれ実装とテストを行う。</p> 558 <p>以下の段階において、それぞれ実装とテストを行う</p>
559 <ol class="arabic simple"> 559 <ol class="arabic simple">
560 <li>C によるシーケンシャルな実装</li> 560 <li>C によるシーケンシャルな実装</li>
561 </ol>
562 <ul class="simple">
563 <li>アルゴリズムの確認</li>
564 </ul>
565 <ol class="arabic simple" start="2">
561 <li>並列実行を考慮したデータ構造を持つ実装</li> 566 <li>並列実行を考慮したデータ構造を持つ実装</li>
562 <li>コードを分割し、シーケンシャルに実行する実装</li> 567 </ol>
568 <ul class="simple">
569 <li>データ構造が変化しても 1. と結果が同じになるかを確認</li>
570 </ul>
571 <ol class="arabic simple" start="3">
572 <li>コードを分割し、それらをシーケンシャルに実行する実装</li>
573 </ol>
574 <ul class="simple">
575 <li>この段階まではアーキテクチャに依存しない</li>
576 <li>二分法によるデバッグが可能</li>
577 </ul>
578 <ol class="arabic simple" start="4">
563 <li>分割したコードを並列実行する実装</li> 579 <li>分割したコードを並列実行する実装</li>
564 </ol> 580 </ol>
565 </div> 581 </div>
582 <div class="slide" id="task-manager">
583 <h1>Task Manager の実装</h1>
584 <ul class="simple">
585 <li><span class="text-silver">Cell アーキテクチャの概要</span></li>
586 <li><span class="text-silver">Many Core プログラミングの特徴</span></li>
587 <li><span class="text-big">Task Manager の実装</span></li>
588 <li><span class="text-silver">Cerium</span></li>
589 <li><span class="text-silver">比較</span></li>
590 <li><span class="text-silver">まとめと今後の課題</span></li>
591 </ul>
592 </div>
593 <div class="slide" id="id9">
594 <h1>Task Manager</h1>
595 <p>Task と呼ばれる、分割された各プログラムを管理する</p>
596 <ul class="simple">
597 <li>Task はサブルーチンもしくは関数</li>
598 <li>Task 同士の依存関係を考慮</li>
599 <li>実行状態になった Task を各 SPE に割り振る</li>
600 </ul>
601 <div align="center"><p class="small">Task Manager API</p>
602 <table border="1" class="small docutils">
603 <colgroup>
604 <col width="23%" />
605 <col width="77%" />
606 </colgroup>
607 <tbody valign="top">
608 <tr><td>create_task</td>
609 <td>Task の生成</td>
610 </tr>
611 <tr><td>allocate</td>
612 <td>実行環境のアライメントを考慮した allocator</td>
613 </tr>
614 </tbody>
615 </table>
616 <p class="small">Task API</p>
617 <table border="1" class="small docutils">
618 <colgroup>
619 <col width="19%" />
620 <col width="81%" />
621 </colgroup>
622 <tbody valign="top">
623 <tr><td>add_inData</td>
624 <td>Task の入力データの設定 (入力元アドレス、データサイズ)</td>
625 </tr>
626 <tr><td>add_outData</td>
627 <td>Task の出力データの設定 (出力先アドレス、データサイズ)</td>
628 </tr>
629 <tr><td>add_param</td>
630 <td>Task のパラメータ (32bits)</td>
631 </tr>
632 <tr><td>wait_for</td>
633 <td>Task の依存関係の考慮</td>
634 </tr>
635 <tr><td>set_cpu</td>
636 <td>Task を実行する CPU の設定</td>
637 </tr>
638 </tbody>
639 </table>
640 </div></div>
566 <div class="slide" id="gallium"> 641 <div class="slide" id="gallium">
567 <h1>比較 - Gallium</h1> 642 <h1>比較 - Gallium</h1>
568 <dl class="docutils"> 643 <dl class="docutils">
569 <dt><a class="reference" href="http://www.tungstengraphics.com/wiki/index.php/Gallium3D">Gallium</a></dt> 644 <dt><a class="reference" href="http://www.tungstengraphics.com/wiki/index.php/Gallium3D">Gallium</a></dt>
570 <dd>オープンソースの 3D グラフィックドライバ</dd> 645 <dd>オープンソースの 3D グラフィックドライバ</dd>
611 <li>SceneGraph、レンダリングを SPE 上で処理する</li> 686 <li>SceneGraph、レンダリングを SPE 上で処理する</li>
612 </ul> 687 </ul>
613 </li> 688 </li>
614 </ul> 689 </ul>
615 </div> 690 </div>
616 <div class="slide" id="id10"> 691 <div class="slide" id="id11">
617 <h1>比較 - Gallium (Con't)</h1> 692 <h1>比較 - Gallium (Con't)</h1>
618 <ul class="simple"> 693 <ul class="simple">
619 <li>実行速度比較<ul> 694 <li>実行速度比較<ul>
620 <li>出力解像度は 1920x1080</li> 695 <li>出力解像度は 1920x1080</li>
621 <li>地球のテクスチャを貼った球体のオブジェクトを表示</li> 696 <li>地球のテクスチャを貼った球体のオブジェクトを表示</li>
622 </ul> 697 </ul>
623 </li> 698 </li>
624 </ul> 699 </ul>
625 <div align="center" class="align-center"><img alt="images/com_gallium.jpg" class="align-center" src="images/com_gallium.jpg" style="width: 350px;" /></div> 700 <div align="center" class="align-center"><img alt="images/com_gallium.jpg" class="align-center" src="images/com_gallium.jpg" style="width: 350px;" /></div>
626 <table border="1" class="docutils"> 701 <div align="center"><table border="1" class="docutils">
627 <colgroup> 702 <colgroup>
628 <col width="55%" /> 703 <col width="55%" />
629 <col width="45%" /> 704 <col width="45%" />
630 </colgroup> 705 </colgroup>
631 <tbody valign="top"> 706 <tbody valign="top">
638 <tr><td>Cerium (SPE 6 個)</td> 713 <tr><td>Cerium (SPE 6 個)</td>
639 <td><span class="text-maroon">9.5 FPS</span></td> 714 <td><span class="text-maroon">9.5 FPS</span></td>
640 </tr> 715 </tr>
641 </tbody> 716 </tbody>
642 </table> 717 </table>
643 </div> 718 </div></div>
644 <div class="slide" id="opengl"> 719 <div class="slide" id="opengl">
645 <h1>比較 - OpenGL</h1> 720 <h1>比較 - OpenGL</h1>
646 <dl class="docutils"> 721 <dl class="docutils">
647 <dt><a class="reference" href="http://www.opengl.org/">OpenGL</a></dt> 722 <dt><a class="reference" href="http://www.opengl.org/">OpenGL</a></dt>
648 <dd>オープンソースの3Dグラフィックスプログラムインターフェース</dd> 723 <dd>オープンソースの3Dグラフィックスプログラムインターフェース</dd>
649 </dl> 724 </dl>
650 <ul class="simple"> 725 <ul class="simple">
651 <li>ポリゴンの描画</li> 726 <li>ポリゴンの描画</li>
652 </ul> 727 </ul>
653 <div align="center" style="color: maroon; font-size: large;"> 728 <div align="center" style="color: maroon; font-size: large;">
654 // 線分3つ指定し、三角形を生成<br/> 729 // 線分3つ指定し、三角形を生成<br />
655 glVertex3d(x1, y1, z1);<br/> 730 glVertex3d(x1, y1, z1);<br />
656 glVertex3d(x2, y2, z2);<br/> 731 glVertex3d(x2, y2, z2);<br />
657 glVertex3d(x3, y3, z3);<br/> 732 glVertex3d(x3, y3, z3);<br />
658 </div><ul> 733 </div><ul>
659 <li><p class="first">OpenGL での親子関係の表現</p> 734 <li><p class="first">OpenGL での親子関係の表現</p>
660 <dl class="docutils"> 735 <dl class="docutils">
661 <dt>glPushMatrix();</dt> 736 <dt>glPushMatrix();</dt>
662 <dd><p class="first last">//現在処理してるオブジェクトの変換行列をスタックに登録</p> 737 <dd><p class="first last">//現在処理してるオブジェクトの変換行列をスタックに登録</p>
713 <li>DMA によるメモリアクセスなど、決まった記述で開発できる</li> 788 <li>DMA によるメモリアクセスなど、決まった記述で開発できる</li>
714 <li>大幅なコードの変更無く Mac OS X や Linux など複数の環境で動作させることが可能</li> 789 <li>大幅なコードの変更無く Mac OS X や Linux など複数の環境で動作させることが可能</li>
715 </ul> 790 </ul>
716 <p>Task Manager は <span class="text-maroon">OpenCL による実装の一つ</span> と言える</p> 791 <p>Task Manager は <span class="text-maroon">OpenCL による実装の一つ</span> と言える</p>
717 <ul class="simple"> 792 <ul class="simple">
718 <li>学生による Cell プログラミングフレームワークとしては Task Manager が扱いやすい</li> 793 <li>学生が Cell アーキテクチャの理解、及び Cell プログラミングを行う際は
794 Task Manager が適している</li>
719 </ul> 795 </ul>
720 </div> 796 </div>
721 </div> 797 </div>
722 </body> 798 </body>
723 </html> 799 </html>