Mercurial > hg > Papers > 2013 > yuhi-prosym
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>