diff presen/index.html @ 29:6b60c1277599 default tip

fix
author Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
date Sun, 12 Jan 2014 09:18:32 +0900
parents d6d545336b5c
children
line wrap: on
line diff
--- a/presen/index.html	Sat Jan 11 13:05:25 2014 +0900
+++ b/presen/index.html	Sun Jan 12 09:18:32 2014 +0900
@@ -108,13 +108,12 @@
         <hgroup>
           <h3>Kernelの記述</h3>
         </hgroup>
-        <article>
           2つのinputDataの積を取り、outputDataに返す例題Multiply
         <table  border="0" cellpadding="0" cellspacing="0">
           <tbody>
             <tr>
               <td>
-                <img src='images/kernel_description.png' style="width:650px">
+                <img src='images/kernel_description.png' style="height:570px">
               </td>
               <td style="font-size:18pt;color:black">
                 <p>
@@ -123,11 +122,11 @@
                 <p>
                   引数の受け取り方が違う。
                   <ul>
-                    <li>CPU</li>
-                    <dd>rbuf/wbufとしてDataをまとめて受け取っている</dd>
-                    <li>GPU</li>
-                    <dd>1つ1つ個別の変数として受け取っている</dd>
-                    <dd>それぞれの変数にOpenCL独自の修飾子が必要</dd>
+                    <li>CPU
+                      <dd>rbuf/wbufとしてDataをまとめて受け取っている</dd></li>
+                    <li>GPU
+                      <dd>1つ1つ個別の変数として受け取っている</dd>
+                      <dd>それぞれの変数にOpenCL独自の修飾子が必要</dd></li>
                   </ul>
                   変数で受けるなどしてこの差異を吸収すれば、同じ記述が可能。
                 </p>
@@ -136,8 +135,6 @@
             </tr>
           </tbody>
         </table>
-        <br>
-        </article>
       </slide>
 
 
@@ -206,7 +203,7 @@
          <table  border="0" cellpadding="0" cellspacing="0">
             <tbody>
               <tr>
-                <td><img src='images/gpu_data_parallel.png' style="height:400px"></td>
+                <td><img src='images/gpu_data_parallel.png' style="height:450px"></td>
                 <td style="font-size:18pt;color:black">
                   <p>
                     タスク並列だと、タスクごとにinput data と output data を転送しなければならない
@@ -234,7 +231,7 @@
          <table  border="0" cellpadding="0" cellspacing="0">
             <tbody>
               <tr>
-                <td><img src='images/ndrange_arch.png' style="height:450px"></td>
+                <td><img src='images/ndrange_arch.png' style="height:500px"></td>
                 <td style="font-size:18pt;color:black">
                   <p>
                     データを2、3次元に分割し、分割した部分に対して
@@ -298,14 +295,7 @@
           <p>
             input data を二倍してoutput data に返す例題
           </p>
-          <pre class="prettyprint" data-lang="main.cc(Iterate Task 生成)">
-    HTaskPtr twice = manager->create_task(Twice);
-    twice->set_cpu(GPU);
-    twice->set_inData(0,(memaddr)input, sizeof(float)*length);
-    twice->set_outData(0,(memaddr)output, sizeof(float)*length);
-    // paramに0~length-1(index)をsetしたtaskをlength個spawnする
-    twice->iterate(length);
-          </pre>
+          <img src="images/iterateTaskGen.png" height="250"></img>
           <p>
             iterate(length)とすることで、TaskManagerがデータ並列用にTaskを生成
           </p>
@@ -323,15 +313,7 @@
           <h3>iterate(Kernel)</h3>
         </hgroup>
         <article>
-          <pre class="prettyprint" data-lang="twice.cc(MultiCore)">
-
-            long i = (long)scheduler->x; // (long)scheduler->get_param(0);
-            output[i]=input[i]*2;
-          </pre>
-          <pre class="prettyprint" data-lang="twice.cl(GPU)">
-            long i = get_global_id(0);
-            output[i]=input[i]*2;
-          </pre>
+          <img src="images/source/iterate_kernel.png" height="300"></img>
           <p>
             MultiCoreではschedulerの持つメンバ変数x、OpenCLはget_global_idというAPIを用いて、
             自分に割り振られたid(index)を取得する。その後、そのindexに対して処理を行う。
@@ -347,18 +329,8 @@
           <h3>iterateの実装</h3>
         </hgroup>
         <article>
-          <pre class="prettyprint" data-lang="HTask.cc">
-            void
-            HTask::iterate(long x) {
-                tl->dim=1;
-                tl->x=x;
-                // 1次元なのでy軸、z軸の要素数は1
-                tl->y=1;
-                tl->z=1;
-                mimpl->spawn_task(this);
-            }
-          </pre>
-          <p>渡されたlengthはwork item のx座標の要素数となる。</p>
+          <img src="images/source/iterate.png" height="280"></img>
+          <p>渡されたlengthはwork item の要素数となる。</p>
           <p>taskにデータ分割のためのdata(dimension, や workitem size)をsetする。</p>
           <p>
             Schedulerはtaskが持ってるdataを元にtaskを複数生成し、idを割り当てる。
@@ -371,16 +343,7 @@
           <h3>iterateの実装(多次元)</h3>
         </hgroup>
         <article>
-          <pre class="prettyprint" data-lang="HTask.cc">
-            void
-            HTask::iterate(long x, long y) {
-                tl->dim=2;
-                tl->x=x;
-                tl->y=y;
-                tl->z=1;
-                mimpl->spawn_task(this);
-            }
-          </pre>
+          <img src="images/source/iterate_multidim.png" height="300"></img>
           <p>
             引数を複数渡せば多次元のデータ分割ができる。3次元までサポートする。
           </p>
@@ -395,14 +358,10 @@
         <p>
           GpuSchedulerがOpenCLのAPIを呼び出し、GPUの制御を行う</p>
         <p>
-          TaskManagerからTaskを受け取り、Command Queueにenqueueする
+          TaskManagerから受け取ったTaskは必要なパラメータを各種持っている
         </p>
         <article>
-          <pre class="prettyprint" data-lang="GpuScheduler.cc">
-
-clEnqueueNDRangeKernel(command_queue, kernel[cur], task->dim, NULL,
-                       &task->x, &task->y, &task->z, NULL, NULL);
-          </pre>
+          <img src="images/source/GpuScheduler.png" height="120"></img>
           <table  border="2" style="font-size:18pt;">
             <tbody>
               <h3 class="yellow">Taskの持つメンバ変数</h3>
@@ -536,7 +495,7 @@
         </table>
         <br>
         <p>
-          CPUとGPUの同時実行は、実行するTaskに対してset_cpu(SPE_ANY)とすれば良い
+          CPUとGPUの同時実行は、実行するTaskに対してset_cpu(ANY_ANY)とすれば良い
         </p>
         <p>
           TaskはCPUとGPU、交互に割り振られる
@@ -549,47 +508,33 @@
           <h3>ベンチマーク</h3>
         </hgroup>
         <article>
-        <table >
-          <tbody>
-            <tr>
-              <td>
-                <img src="images/bench_mark_hetero.png" height="400"></img>
-              </td>
-              <td>
-                <h3 class="yellow">結果</h3>
-                <font size="5">
-                  <p>
-                    現段階ではSchedulingを行ってないため、GPU単体で動かした時よりも遅くなる。
-                  </p>
-                  <p>
-                    CPUとGPUは実行速度に差が出る場合がある。
-                    Taskの計算内容によってはどちらかのアーキテクチャに任せた方が良い。
-                    それを確認するベンチマークを動かす。
-                  </p>
-                  <p>
-
-                  </p>
-                </font>
-              </td>
-            </tr>
-          </tbody>
-        </table>
-        </article>
-      </slide>
-
-
-      <slide>
-        <hgroup>
-          <h3>ベンチマーク</h3>
-        </hgroup>
-        <article>
-          <img src="images/bench_mark_each_task.png" height="350"></img>
+          <img src="images/bench_mark_hetero.png" height="350"></img>
+          <h3 class="yellow">結果</h3>
+          <p>
+            現段階ではSchedulingを行ってないため、GPUやCPUを単体で動かした時よりも遅くなる。
+          </p>
+          <p>
+            CPUとGPUは実行速度に差が出る場合がある。
+            Taskの計算内容によってはどちらかのアーキテクチャに任せた方が良い。
+            それを確認するベンチマークを動かす。
+          </p>
+     </font>
+     </article>
+     </slide>
+     
+     
+     <slide>
+       <hgroup>
+         <h3>ベンチマーク</h3>
+       </hgroup>
+       <article>
+         <img src="images/bench_mark_each_task.png" height="350"></img>
           <p>
             FFTはSpinFactやButterfly演算等、様々なTaskで構成されている。
             それぞれのTaskについて、実行時間を計測した。
           </p>
           <p>
-            SpinFactのTaskに関しては、CPUの方が実行速度が早い。
+            大体のTaskはGPUの方が速いが、SpinFactのTaskに関してはCPUの方が実行速度が速い。
           </p>
         </article>
       </slide>
@@ -605,7 +550,7 @@
                 <td>
                   <img src="images/decide_weight.png" height="150"></img>
                 </td>
-                <td>
+                <td style="font-size:18pt;color:black">
                   並列実行するTaskをCPUとGPUで事前に一度実行し、実行時間を測定する。
                   それぞれの実行時間の割合で重みをつける。
                 </td>
@@ -614,7 +559,7 @@
                 <td>
                   <img src="images/select_arch.png" height="200"></img>
                 </td>
-                <td>
+                <td style="font-size:18pt;color:black">
                   <p>
                     それぞれの重みからCPU実行とGPU実行のどちらに適しているか判断する
                   </p>
@@ -640,7 +585,7 @@
                 <td>
                   <img src="images/decide_weight2.png" height="150"></img>
                 </td>
-                <td>
+                <td style="font-size:18pt;color:black">
                   全てのTaskがCPUの二倍、GPUの方が実行速度が早い場合
                 </td>
               </tr>
@@ -648,7 +593,7 @@
                 <td>
                   <img src="images/select_arch2.png" height="180"></img>
                 </td>
-                <td>
+                <td style="font-size:18pt;color:black">
                   <p>
                     それぞれのTaskを得意とするアーキテクチャに全て割り振るのではなく、
                     RunTimeが最小になるように割り振る
@@ -674,8 +619,9 @@
         </ul>
         <h3 class="yellow">今後の課題</h3>
         <ul>
-          <li>提案したSchedulingの手法を実装・ベンチマーク</li>
+          <li>提案したSchedulingの手法を実装/ベンチマーク</li>
           <li>ベンチマークに使用する例題の追加</li>
+          <li>GPUのSchedulerにパイプライン機構の導入</li>
         </ul>
         </article>
       </slide>