Mercurial > hg > Papers > 2009 > gongo-master
changeset 26:252d2d951d7e
add Task Manager
author | gongo@gendarme.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Sun, 15 Feb 2009 11:44:57 +0900 |
parents | f6ce9e298225 |
children | 90128e098120 |
files | presen/presen.html presen/presen.rst presen/ui/default/gongo.css |
diffstat | 3 files changed, 225 insertions(+), 76 deletions(-) [+] |
line wrap: on
line diff
--- a/presen/presen.html Sat Feb 14 23:53:02 2009 +0900 +++ b/presen/presen.html Sun Feb 15 11:44:57 2009 +0900 @@ -352,19 +352,6 @@ </div> <div class="slide" id="id1"> -<h1>発表の流れ</h1> -<ul class="simple"> -<li>研究の背景と目的</li> -<li>Cell アーキテクチャの概要</li> -<li>Many Core プログラミングの特徴</li> -<li>Task Manager の実装</li> -<li>Task Manager を用いた並列プログラム</li> -<li>Cerium</li> -<li>Cerium を用いたゲーム</li> -<li>まとめと今後の課題</li> -</ul> -</div> -<div class="slide" id="id2"> <h1>研究の背景</h1> <p>現在、学生実験で PS3Linux を用いてゲーム開発を行っているが、 学生には困難であることがわかってきている</p> @@ -384,7 +371,7 @@ <p>実験期間の大半を Cell の勉強に費やさねばならず、 開発されるゲームのレベルが例年一定以上にならない</p> </div> -<div class="slide" id="id3"> +<div class="slide" id="id2"> <h1>研究目的</h1> <p>Many Core Architecture を用いた並列プログラムの開発をサポートするフレームワーク <span class="text-maroon">Fine Grain Task Manager</span> を提案する</p> <ul> @@ -400,9 +387,9 @@ </li> <li><p class="first">Task Manager を用いた開発行程</p> <ol class="arabic simple"> -<li>逐次型プログラム (MacOSX、Linux)</li> -<li>データやコードを分割したプログラム (MacOSX、Linux)</li> -<li>並列に動かすプログラム (Cell)</li> +<li>逐次型プログラム</li> +<li>データやコードを分割したプログラム</li> +<li>並列に動かすプログラム</li> </ol> <p>各段階で信頼性を確保しながら開発を進める</p> </li> @@ -422,17 +409,29 @@ <li>Rendering Engine や Scene Graph の処理単位を Task とし、複数の Core へ 割り振りを行うカーネル <span class="text-maroon">TaskManager</span></li> </ul> +<p>学生が Cell アーキテクチャを理解しながら、 +期間内でゲーム開発が行える、シンプルな +マルチタスクフレームワークを目指す</p> +</div> +<div class="slide" id="id3"> +<h1>発表の流れ</h1> +<ul class="simple"> +<li>Cell アーキテクチャの概要</li> +<li>Many Core プログラミングの特徴</li> +<li>Task Manager の実装、例題</li> +<li>Cerium</li> +<li>比較</li> +<li>まとめと今後の課題</li> +</ul> </div> <div class="slide" id="cell"> <h1>Cell アーキテクチャの概要</h1> <ul class="simple"> -<li><span class="text-silver">研究の背景と目的</span></li> <li><span class="text-big">Cell アーキテクチャの概要</span></li> <li><span class="text-silver">Many Core プログラミングの特徴</span></li> <li><span class="text-silver">Task Manager の実装</span></li> -<li><span class="text-silver">Task Manager を用いた並列プログラム</span></li> <li><span class="text-silver">Cerium</span></li> -<li><span class="text-silver">Cerium を用いたゲーム</span></li> +<li><span class="text-silver">比較</span></li> <li><span class="text-silver">まとめと今後の課題</span></li> </ul> </div> @@ -450,22 +449,25 @@ <span class="text-maroon">DMA 命令</span> を送ることで行う</li> </ul> </li> +<li>128 ビットレジスタを用いて SIMD (Single Instruction Multiple Data) が可能</li> </ul> </div> <div class="slide" id="id4"> <h1>Cell の基本機能</h1> -<ul> -<li><p class="first"><span class="text-maroon">DMA (Direct Memory Access)</span></p> -<p>メインメモリと LS 間でデータが転送される</p> -<p>DMA 転送を行うにはいくつか条件がある</p> +<p><strong>DMA</strong></p> <ul class="simple"> +<li>メインメモリと LS 間でデータが転送される</li> +<li>DMA 転送を行うにはいくつか条件がある<ul> <li>データサイズは 16 バイトの倍数</li> <li>転送元と転送先のアドレスが 16 バイト境界に揃えられている</li> </ul> </li> -<li><p class="first"><span class="text-maroon">Mailbox</span></p> -<p>SPE の MFC 内にある FIFO キュー</p> -<p>PPE と SPE 間で 32 ビットメッセージの交換に用いられる</p> +</ul> +<p><strong>Mailbox</strong></p> +<ul> +<li><p class="first">SPE の MFC 内にある FIFO キュー</p> +</li> +<li><p class="first">PPE と SPE 間で 32 ビットメッセージの交換に用いられる</p> <p>キューは 3 種類</p> <ul class="simple"> <li>SPU Inbound Mailbox : PPE → SPE</li> @@ -478,13 +480,11 @@ <div class="slide" id="many-core"> <h1>Many Core プログラミングの特徴</h1> <ul class="simple"> -<li><span class="text-silver">研究の背景と目的</span></li> <li><span class="text-silver">Cell アーキテクチャの概要</span></li> <li><span class="text-big">Many Core プログラミングの特徴</span></li> <li><span class="text-silver">Task Manager の実装</span></li> -<li><span class="text-silver">Task Manager を用いた並列プログラム</span></li> <li><span class="text-silver">Cerium</span></li> -<li><span class="text-silver">Cerium を用いたゲーム</span></li> +<li><span class="text-silver">比較</span></li> <li><span class="text-silver">まとめと今後の課題</span></li> </ul> </div> @@ -496,7 +496,7 @@ </dl> <div align="center" class="align-center"><img alt="images/amdahl.jpg" class="align-center" src="images/amdahl.jpg" style="width: 360px;" /></div> <div align="center" style="font-size: large;"> - 6 CPU を使っても、プログラムの並列化率が 8 割程度では<br/> + 6 CPU を使っても、プログラムの並列化率が 8 割程度では<br /> 3倍程度の性能向上しか得られない </div><p>Amdahl 則より、恒常的に並列プログラムの並列度を維持する必要がある</p> </div> @@ -555,14 +555,89 @@ </div> <div class="slide" id="id8"> <h1>並列プログラムの開発行程</h1> -<p>並列プログラミングでは、以下の段階において、それぞれ実装とテストを行う。</p> +<p>以下の段階において、それぞれ実装とテストを行う</p> <ol class="arabic simple"> <li>C によるシーケンシャルな実装</li> +</ol> +<ul class="simple"> +<li>アルゴリズムの確認</li> +</ul> +<ol class="arabic simple" start="2"> <li>並列実行を考慮したデータ構造を持つ実装</li> -<li>コードを分割し、シーケンシャルに実行する実装</li> +</ol> +<ul class="simple"> +<li>データ構造が変化しても 1. と結果が同じになるかを確認</li> +</ul> +<ol class="arabic simple" start="3"> +<li>コードを分割し、それらをシーケンシャルに実行する実装</li> +</ol> +<ul class="simple"> +<li>この段階まではアーキテクチャに依存しない</li> +<li>二分法によるデバッグが可能</li> +</ul> +<ol class="arabic simple" start="4"> <li>分割したコードを並列実行する実装</li> </ol> </div> +<div class="slide" id="task-manager"> +<h1>Task Manager の実装</h1> +<ul class="simple"> +<li><span class="text-silver">Cell アーキテクチャの概要</span></li> +<li><span class="text-silver">Many Core プログラミングの特徴</span></li> +<li><span class="text-big">Task Manager の実装</span></li> +<li><span class="text-silver">Cerium</span></li> +<li><span class="text-silver">比較</span></li> +<li><span class="text-silver">まとめと今後の課題</span></li> +</ul> +</div> +<div class="slide" id="id9"> +<h1>Task Manager</h1> +<p>Task と呼ばれる、分割された各プログラムを管理する</p> +<ul class="simple"> +<li>Task はサブルーチンもしくは関数</li> +<li>Task 同士の依存関係を考慮</li> +<li>実行状態になった Task を各 SPE に割り振る</li> +</ul> +<div align="center"><p class="small">Task Manager API</p> +<table border="1" class="small docutils"> +<colgroup> +<col width="23%" /> +<col width="77%" /> +</colgroup> +<tbody valign="top"> +<tr><td>create_task</td> +<td>Task の生成</td> +</tr> +<tr><td>allocate</td> +<td>実行環境のアライメントを考慮した allocator</td> +</tr> +</tbody> +</table> +<p class="small">Task API</p> +<table border="1" class="small docutils"> +<colgroup> +<col width="19%" /> +<col width="81%" /> +</colgroup> +<tbody valign="top"> +<tr><td>add_inData</td> +<td>Task の入力データの設定 (入力元アドレス、データサイズ)</td> +</tr> +<tr><td>add_outData</td> +<td>Task の出力データの設定 (出力先アドレス、データサイズ)</td> +</tr> +<tr><td>add_param</td> +<td>Task のパラメータ (32bits)</td> +</tr> +<tr><td>wait_for</td> +<td>Task の依存関係の考慮</td> +</tr> +<tr><td>set_cpu</td> +<td>Task を実行する CPU の設定</td> +</tr> +</tbody> +</table> +</div></div> <div class="slide" id="gallium"> <h1>比較 - Gallium</h1> <dl class="docutils"> @@ -613,7 +688,7 @@ </li> </ul> </div> -<div class="slide" id="id10"> +<div class="slide" id="id11"> <h1>比較 - Gallium (Con't)</h1> <ul class="simple"> <li>実行速度比較<ul> @@ -623,7 +698,7 @@ </li> </ul> <div align="center" class="align-center"><img alt="images/com_gallium.jpg" class="align-center" src="images/com_gallium.jpg" style="width: 350px;" /></div> -<table border="1" class="docutils"> +<div align="center"><table border="1" class="docutils"> <colgroup> <col width="55%" /> <col width="45%" /> @@ -640,7 +715,7 @@ </tr> </tbody> </table> -</div> +</div></div> <div class="slide" id="opengl"> <h1>比較 - OpenGL</h1> <dl class="docutils"> @@ -651,10 +726,10 @@ <li>ポリゴンの描画</li> </ul> <div align="center" style="color: maroon; font-size: large;"> - // 線分3つ指定し、三角形を生成<br/> - glVertex3d(x1, y1, z1);<br/> - glVertex3d(x2, y2, z2);<br/> - glVertex3d(x3, y3, z3);<br/> + // 線分3つ指定し、三角形を生成<br /> + glVertex3d(x1, y1, z1);<br /> + glVertex3d(x2, y2, z2);<br /> + glVertex3d(x3, y3, z3);<br /> </div><ul> <li><p class="first">OpenGL での親子関係の表現</p> <dl class="docutils"> @@ -715,7 +790,8 @@ </ul> <p>Task Manager は <span class="text-maroon">OpenCL による実装の一つ</span> と言える</p> <ul class="simple"> -<li>学生による Cell プログラミングフレームワークとしては Task Manager が扱いやすい</li> +<li>学生が Cell アーキテクチャの理解、及び Cell プログラミングを行う際は +Task Manager が適している</li> </ul> </div> </div>
--- a/presen/presen.rst Sat Feb 14 23:53:02 2009 +0900 +++ b/presen/presen.rst Sun Feb 15 11:44:57 2009 +0900 @@ -15,18 +15,6 @@ **琉球大学 理工学研究科 情報工学専攻 並列信頼研究室** -発表の流れ -====================== - -- 研究の背景と目的 -- Cell アーキテクチャの概要 -- Many Core プログラミングの特徴 -- Task Manager の実装 -- Task Manager を用いた並列プログラム -- Cerium -- Cerium を用いたゲーム -- まとめと今後の課題 - 研究の背景 =================== @@ -62,9 +50,9 @@ - Task Manager を用いた開発行程 - 1. 逐次型プログラム (MacOSX、Linux) - #. データやコードを分割したプログラム (MacOSX、Linux) - #. 並列に動かすプログラム (Cell) + 1. 逐次型プログラム + #. データやコードを分割したプログラム + #. 並列に動かすプログラム 各段階で信頼性を確保しながら開発を進める @@ -83,17 +71,29 @@ - Rendering Engine や Scene Graph の処理単位を Task とし、複数の Core へ 割り振りを行うカーネル :maroon:`TaskManager` +学生が Cell アーキテクチャを理解しながら、 +期間内でゲーム開発が行える、シンプルな +マルチタスクフレームワークを目指す + + +発表の流れ +====================== + +- Cell アーキテクチャの概要 +- Many Core プログラミングの特徴 +- Task Manager の実装、例題 +- Cerium +- 比較 +- まとめと今後の課題 Cell アーキテクチャの概要 =========================== -- :silver:`研究の背景と目的` - :big:`Cell アーキテクチャの概要` - :silver:`Many Core プログラミングの特徴` - :silver:`Task Manager の実装` -- :silver:`Task Manager を用いた並列プログラム` - :silver:`Cerium` -- :silver:`Cerium を用いたゲーム` +- :silver:`比較` - :silver:`まとめと今後の課題` Cell Broadband Engine @@ -113,23 +113,25 @@ - SPE が持つ MFC (Memory Flow Controller) へ :maroon:`DMA 命令` を送ることで行う +- 128 ビットレジスタを用いて SIMD (Single Instruction Multiple Data) が可能 + Cell の基本機能 ======================= -- :maroon:`DMA (Direct Memory Access)` +**DMA** - メインメモリと LS 間でデータが転送される +- メインメモリと LS 間でデータが転送される - DMA 転送を行うにはいくつか条件がある +- DMA 転送を行うにはいくつか条件がある - データサイズは 16 バイトの倍数 - 転送元と転送先のアドレスが 16 バイト境界に揃えられている -- :maroon:`Mailbox` +**Mailbox** - SPE の MFC 内にある FIFO キュー +- SPE の MFC 内にある FIFO キュー - PPE と SPE 間で 32 ビットメッセージの交換に用いられる +- PPE と SPE 間で 32 ビットメッセージの交換に用いられる キューは 3 種類 @@ -140,13 +142,11 @@ Many Core プログラミングの特徴 ================================ -- :silver:`研究の背景と目的` - :silver:`Cell アーキテクチャの概要` - :big:`Many Core プログラミングの特徴` - :silver:`Task Manager の実装` -- :silver:`Task Manager を用いた並列プログラム` - :silver:`Cerium` -- :silver:`Cerium を用いたゲーム` +- :silver:`比較` - :silver:`まとめと今後の課題` @@ -163,7 +163,7 @@ .. raw:: html <div align="center" style="font-size: large;"> - 6 CPU を使っても、プログラムの並列化率が 8 割程度では<br/> + 6 CPU を使っても、プログラムの並列化率が 8 割程度では<br /> 3倍程度の性能向上しか得られない </div> @@ -234,14 +234,75 @@ 並列プログラムの開発行程 ========================== -並列プログラミングでは、以下の段階において、それぞれ実装とテストを行う。 +以下の段階において、それぞれ実装とテストを行う 1. C によるシーケンシャルな実装 + +- アルゴリズムの確認 + 2. 並列実行を考慮したデータ構造を持つ実装 -3. コードを分割し、シーケンシャルに実行する実装 + +- データ構造が変化しても 1. と結果が同じになるかを確認 + +3. コードを分割し、それらをシーケンシャルに実行する実装 + +- この段階まではアーキテクチャに依存しない +- 二分法によるデバッグが可能 + 4. 分割したコードを並列実行する実装 +Task Manager の実装 +================================ + +- :silver:`Cell アーキテクチャの概要` +- :silver:`Many Core プログラミングの特徴` +- :big:`Task Manager の実装` +- :silver:`Cerium` +- :silver:`比較` +- :silver:`まとめと今後の課題` + + +Task Manager +================ + +Task と呼ばれる、分割された各プログラムを管理する + +- Task はサブルーチンもしくは関数 +- Task 同士の依存関係を考慮 +- 実行状態になった Task を各 SPE に割り振る + +.. raw:: html + + <div align="center"> + +.. class:: small + + Task Manager User API + + ============= ============================================ + create_task Task の生成 + allocate 実行環境のアライメントを考慮した allocator + ============= ============================================ + + Task API + + ============= ================================================== + add_inData Task の入力データの設定 (入力元アドレス、データサイズ) + add_outData Task の出力データの設定 (出力先アドレス、データサイズ) + add_param Task のパラメータ (32bits) + wait_for Task の依存関係の考慮 + set_cpu Task を実行する CPU の設定 + ============= ================================================== + +.. raw:: html + + </div> + + + + + 比較 - Gallium =========================== @@ -306,6 +367,11 @@ :align: center :width: 350px + +.. raw:: html + + <div align="center"> + ===================== =============== Gallium (SPE 6 個) 5.4 FPS --------------------- --------------- @@ -313,6 +379,10 @@ --------------------- --------------- Cerium (SPE 6 個) :maroon:`9.5 FPS` ===================== =============== + +.. raw:: html + + </div> 比較 - OpenGL @@ -328,10 +398,10 @@ .. raw:: html <div align="center" style="color: maroon; font-size: large;"> - // 線分3つ指定し、三角形を生成<br/> - glVertex3d(x1, y1, z1);<br/> - glVertex3d(x2, y2, z2);<br/> - glVertex3d(x3, y3, z3);<br/> + // 線分3つ指定し、三角形を生成<br /> + glVertex3d(x1, y1, z1);<br /> + glVertex3d(x2, y2, z2);<br /> + glVertex3d(x3, y3, z3);<br /> </div> - OpenGL での親子関係の表現 @@ -396,4 +466,5 @@ Task Manager は :maroon:`OpenCL による実装の一つ` と言える -- 学生による Cell プログラミングフレームワークとしては Task Manager が扱いやすい +- 学生が Cell アーキテクチャの理解、及び Cell プログラミングを行う際は + Task Manager が適している
--- a/presen/ui/default/gongo.css Sat Feb 14 23:53:02 2009 +0900 +++ b/presen/ui/default/gongo.css Sun Feb 15 11:44:57 2009 +0900 @@ -14,4 +14,6 @@ span.text-big {font-size: xx-large; } span.text-underline {border-bottom: solid 2px black; } +.small {font-size: medium;} + * {font-family: Osaka, 'MS Pゴシック';} \ No newline at end of file