diff slide/blank.html @ 60:0690afa10eb7

add
author Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
date Tue, 17 Feb 2015 17:59:05 +0900
parents 8057614d5b77
children 1eea0dd50676
line wrap: on
line diff
--- a/slide/blank.html	Tue Feb 17 14:14:22 2015 +0900
+++ b/slide/blank.html	Tue Feb 17 17:59:05 2015 +0900
@@ -157,7 +157,7 @@
       </div>
 
       <div class='slide'>
-        <h2>Cerium での Task の例</h2>
+        <h2>Cerium における Task の生成</h2>
         
         <p>
           Cerium TaskManager では処理の単位を Task としてプログラムを記述していく。
@@ -194,8 +194,199 @@
       </div>
       
       <div class='slide'>
-        <h2></h2>
-        
+        <h2>Cerium における Task の記述</h2>
+        <p>Device 側で実行される Task の記述を示す。</p>
+        <pre class="code">
+static int
+run(SchedTask ∗s) {
+    float ∗i_data1 = (float∗)s−>get_input(0); // get input
+    float ∗i_data2 = (float∗)s−>get_input(1); // get output
+    float ∗o_data  = (float∗)s−>get_output(0); // get parameter
+    long length    = (long)s−>get_param(0);
+
+    // calculate
+    for (int i=0; i&lt;length; i++) {
+        o_data[i] = i_data1[i] ∗ i_data2[i];
+    }
+    return 0; 
+}
+        </pre>
+        <p>Host 側では Task を生成する際に様々なパラメタを設定しており、
+          Task にはそれを取得する API が用意されている。</p>
+        <table border="0" >
+          <tr bgcolor="palegreen">
+            <th align="center">API</th><th align="center">content</th>
+          </tr>
+
+          <tr bgcolor="dbffa3">
+            <th align="left" >get_input</th><th align="left">入力データのアドレスを取得</th>
+          </tr>
+          <tr bgcolor="palegreen">
+            <th align="left">get_output</th><th align="left">出力先データのアドレスを取得</th>
+          </tr>
+          <tr bgcolor="dbffa3">
+            <th align="left">get_param</th><th align="left">パラメータを取得</th>
+          </tr>
+        </table>
+      </div>
+
+      <div class='slide'>
+        <h2>TaskManager の構成</h2>
+        <div align="center">
+          <img src='images/createtask.png' width="700">
+        </div>
+        <ul>
+          <li>TaskManagerと各Threadsの間には Syncronized な Mail Queueがある。
+          <li>依存関係の解決された Task は TaskManager から Mail Queue に送られる。
+          <li>Task に設定された CPUType に対応した Threads が Mail Queue から Task を取得し、並列実行していく。
+        </ul>
+      </div>
+
+      <div class='slide'>
+        <h2>マルチコア CPU 上での並列実行</h2>
+        <div align="center">
+          <img src="images/pipeline.png" width="600">
+        </div>
+        <p>
+          Cerium は Cell 上で動作するフレームワークであったが MacOSX、Linux 上での並列実行に対応させた。
+        </p>
+        <p>
+          マルチコア CPU 上での並列実行は、Synchronized Queue とパイプラインによって実現されている。
+          TaskManager で依存関係を解決された Task は Scheduler に送信され、
+          Scheduler が持っているパイプラインの機構に沿って並列に実行する。
+        </p>
+      </div>
+
+      <div class='slide'>
+        <h2>マルチコア CPU におけるパイプラインの実装</h2>
+        <table>
+          <tr>
+            <th>
+              <pre class="code" align="left">void
+Scheduler::run(SchedTaskBase* task1) {
+    SchedTaskBase* task2 = new SchedNop();
+    SchedTaskBase* task3 = new SchedNop();
+
+    // main loop
+    do {
+
+        task1->read();
+        task2->exec();
+        task3->write();
+
+        delete task3;
+
+        task3 = task2;
+        task2 = task1;
+        task1 = task1->next(this, 0);
+
+    } while (task1);
+
+    delete task3;
+    delete task2;
+}</pre>
+            </th>
+            <th  align="left">
+              <p>
+                Cerium の Task は SchedTask と呼ばれるデータ構造で表現されている。
+                SchedTask は read/exec/write のメソッドを持っており、
+                パイプラインの各ステージで段階的に実行される。
+              </p>
+              <p>
+                引数として TaskList を受け取り、List 内の Task をパイプライン実行する。
+                task3 が write を担当しており、write が終わった Task は終了となる。
+              </p>
+              <p>
+                終了した task は delete して良い。
+                task3=task2、task2=task1 と SchedTask をずらして行き、TaskList から 次の Task を読み込む。
+              </p>
+            </th>
+          </tr>
+        </table>
+      </div>
+      
+      <div class='slide'>
+        <h2>DMA の prefetch を用いた改良</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>マルチコア CPU におけるデータ並列</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>GPGPU への対応</h2>
+      </div>
+      
+      <div class='slide'>
+        <h2>GPGPU におけるパイプラインの実装</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>GPGPU におけるデータ並列</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>Cerium の I/O(mmap による読み込み)</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>BlockedRead による I/O の並列化</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>I/O 専用のThread</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>実験に利用する例題-Sort-</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>実験に利用する例題-WordCount-</h2>
+      </div>
+      
+      <div class='slide'>
+        <h2>実験に利用する例題-FFT-</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>実験環境</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>マルチコア CPU による並列実行のベンチマーク</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>DMA の prefecth に関するベンチマーク </h2>
+      </div>
+
+      <div class='slide'>
+        <h2>GPGPU のベンチマーク</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>データ並列実行のベンチマーク</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>GPGPU のベンチマーク</h2>
+      </div>
+      
+      <div class='slide'>
+        <h2>FFT による GPGPU のベンチマーク</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>BlockedRead による並列 I/O のベンチマーク</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>まとめ</h2>
+      </div>
+
+      <div class='slide'>
+        <h2>今後の課題</h2>
       </div>
 
     </div> <!-- presentation -->