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