Mercurial > hg > Papers > 2009 > gongo-master
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> |