Mercurial > hg > Papers > 2015 > yuhi-master
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<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 -->