Mercurial > hg > Papers > 2008 > gongo-sigos
changeset 18:b3557cf099b2
*** empty log message ***
author | pin |
---|---|
date | Wed, 23 Apr 2008 08:05:24 +0900 |
parents | d95afaf26286 |
children | d43fc19aed85 |
files | presentation/presen.html |
diffstat | 1 files changed, 135 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/presentation/presen.html Tue Apr 22 22:57:41 2008 +0900 +++ b/presentation/presen.html Wed Apr 23 08:05:24 2008 +0900 @@ -51,12 +51,12 @@ <h1>研究の背景と目的</h1> 研究背景 <ul> - <li>CPU の性能向上は、クロックサイクルを上げることよりも、 + <li>CPU の性能向上は、クロックサイクルを上げることよりも、 複数の CPU コア (Many Core Architecture) を導入することにより 得られるようになってきている</li> <li>しかし、Many Core Architecture のプログラムは複雑であり、 その信頼性を確保することは難しい - </li> + </li> </ul> <br/> @@ -64,6 +64,9 @@ <ul> <li>Many Core Architecture 向けの Fine Grain Task OS を設計する</li> <ul> + <li> + ここで Fine Grain Task の単位は、サブルーチンまたは関数 + </li> <li>Amdahl 則を考慮して、定常的な並列性を 細粒度タスクを使って実現する </li> @@ -119,7 +122,7 @@ 維持する必要がある</li> <ul> <li>逐次型プログラムの一部を並列化するという手法では不十分である</li> - <li>C 等では、for 文や配列のアクセス等に並列性が隠されてしまう</li> + <!-- <li>C 等では、for 文や配列のアクセス等に並列性が隠されてしまう</li> --> </ul> </ul> </div> @@ -154,7 +157,7 @@ </div> - <div class="slide"> + <!-- <div class="slide"> <h1>並列プログラムのデバッグ</h1> 並列プログラムのデバッグは困難とされている <ul> @@ -166,20 +169,50 @@ <li>個々の Core 上のデータを調べる必要もある</li> </ul> </div> - + --> + <div class="slide"> <h1>OSMesa/SDL を用いた Cell 上でのゲームプログラミング</h1> Cerium の先行研究 - <ul> - <li>PS3 の RSX (GDP) へのアクセスができないため、 - OSMesa を用いて Frame Buffer へ直接描画する</li> - <li>例題として、テクスチャを貼っていない一つの立方体を回転させる</li> + <ul> + <li> + PS3 の RSX (GDP) へのアクセスができない + </li> + <li> + OSMesaが生成するSpanと呼ばれる構造体からFrame Bufferへの + 描画をSPUを用いて高速化した + </li> + +<!-- <li>PS3 の RSX (GDP) へのアクセスができないため、 + OSMesa を用いて Frame Buffer へ直接描画する</li> --> +<!-- <li>例題として、テクスチャを貼っていない一つの立方体を回転させる</li> <ul> <li>ポリゴンの情報からフレームバッファに描き込むところで、 SPE を用いて高速化させている</li> - </ul> + </ul> --> </ul> - <div align="center"> + 問題点 + <ul> + <li> + OSMesaの一部の機能(Frame Bufferへの書き込み部分)を + 抽出して並列化し実行していたが、それだけでは不十分 + </li> + <li> + Polygon生成やSpan生成もまた並列化する必要がある → Cerium + </li> + </ul> + <!-- Span とは --> + <ul> + <table border="0"> + <tr> + <td><br><br><img src="img/span.jpg" /></td> + <td> + Span とは Polygon に対する、ある特定の Y 座標に関するデータ + </td> + </tr></table> + </ul> + +<!-- <div align="center"> <table border="1" cellpadding="4"> <td rowspan="4"> <img src="img/cube.tiff" width="345" height="244" /> @@ -200,10 +233,45 @@ <td>43 FPS</td> </tr> </table> - </div> + </div> --> </div> - <div class="slide"> + <div class="slide"> + <h1>Span</h1> + <pre> +class Span { + public: + long *tex_addr; + long tex_width; + long tex_height; + int x; + int y; + int length_x; + float start_z; + float end_z; + float tex_x1; + float tex_x2; + float tex_y1; + float tex_y2; +}; + </pre> + Span とは + <ul> + <li> + Polygonをy座標ごとに分割して取り出したもの + </li> + <li> + その1ラインのxyz座標、テクスチャ、RGB情報などを保持する + </li> + </ul> + <br><br> + SpanPackとは + <ul> + <li>各SPEに処理を分配するためのSpanの集合</li> + </ul> + </div> + +<!-- <div class="slide"> <h1>OSMesa の問題点</h1> <ul> <li>巨大なマクロによるプログラム記述</li> @@ -213,12 +281,12 @@ </ul> <br/> 以上のコード全てに対して、細分化や後に拡張することは難しい - </div> + </div> --> <div class="slide"> <h1>Cerium</h1> Scene Graph、Rendering Engine、Task Manager から構成され、 - 以下の3つのタスクを持つ + 以下の3つのタスクを持つ <table border="0"> <tr> @@ -239,7 +307,7 @@ </table> </div> - <div class="slide"> +<!-- <div class="slide"> <h1>Scene Graph</h1> <table border="0"> @@ -267,7 +335,7 @@ </td> </tr> </table> - </div> + </div> --> <div class="slide"> <h1>Rendering Engine</h1> @@ -298,9 +366,19 @@ <div class="slide"> <h1>Task Manager</h1> Task と呼ばれる、分割された各プログラムを管理するライブラリ - - <br/><br/> - <div align="center"> +<!-- <ol> + <li></li> + </ol> +<br><center><IMG SRC = "img/manager-load.png"></center> --> + <ul> + <li> + Task は PPE 上で生成され、SPEではそのTaskをDMA転送により + ロードする + </li> + <li></li> + </ul> +<br><br> + <div align="center"> Task Manager API <table border="1" cellpadding="4"> <tr> @@ -325,9 +403,40 @@ </tr> </table> </div> + <br> + + <!-- ここから、Task Manager を構成する特徴について述べていく --> + </div> + + <div class="slide"> + <h1>Task Manager を使った記述例</h1> + 以下にTask Manager を使った記述例を示す + <pre> +int +main(void) +{ + TaskManager *manager = new TaskManager; + Task *task1, *task2; - <br/><br/> - ここから、Task Manager を構成する特徴について述べていく + /** + * cmd : 実行するタスクID + * size : in_addr で取得するデータのバイト数 + * in_addr : 入力データ元アドレス + * out_addr : 出力データ先アドレス + */ + task1 = create_task(CMD_RUN1, size1, + in_addr1, out_addr2); + task2 = create_task(CMD_RUN2, size2, + in_addr2, out_addr2); + + task1->spawn(); + task2->spawn(); + + manager->run(); + + return 0; +} + </pre> </div> <div class="slide"> @@ -429,6 +538,8 @@ <ul> <li>タスク依存が満たされたものをアクティブキューへ</li> + <li>複数の依存関係を記述した場合、 + 全てが満たされたものをアクティブキューへ</li> <li>SPE はアクティブキューから処理するコードとデータを取得し、 自律的に実行する</li> <li>終了したタスクはPPEに終了のコマンドを発行する</li> @@ -439,7 +550,7 @@ <div class="slide"> <h1>Task Manager - PPE コードと SPE コードの互換性</h1> - Cerium では、2つのプログラム記述が可能である + Cerium では、以下の2種類のプログラム記述が可能である <ul> <li>SPE を用いる Cell 上でのみ動作する SPE プログラム</li> <li>Linux や Mac OS X などで動く、アーキテクチャに依存しない @@ -467,7 +578,7 @@ <table border="0"> <tr> <td> - <img src="img/sync.jpg" /> + <!-- <img src="img/sync.jpg" /> --> </td> <td> Cerium が扱うスレッド