Mercurial > hg > Papers > 2018 > parusu-master
changeset 103:05d7669c4a29
Fix
author | Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Feb 2018 13:22:51 +0900 |
parents | c48b78793176 |
children | 4b49908418e2 |
files | slide/slide.html slide/slide.md |
diffstat | 2 files changed, 25 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/slide/slide.html Tue Feb 13 11:48:44 2018 +0900 +++ b/slide/slide.html Tue Feb 13 13:22:51 2018 +0900 @@ -87,7 +87,7 @@ <!-- === begin markdown block === generated by markdown/1.2.0 on Ruby 2.3.0 (2015-12-25) [x86_64-darwin16] - on 2018-02-13 11:44:16 +0900 with Markdown engine kramdown (1.13.2) + on 2018-02-13 12:53:11 +0900 with Markdown engine kramdown (1.13.2) using options {} --> @@ -389,7 +389,7 @@ Queue* queue = createSingleLinkedQueue(context); Node* node = new Node(); node->color = Red; - goto queue->put(node, queueTest2); + goto queue->put(node, code2); } </code></pre> @@ -415,7 +415,7 @@ node->color = Red; Gearef(context, Queue)->queue = (union Data*) queue; Gearef(context, Queue)->data = (union Data*) node; - Gearef(context, Queue)->next = C_queueTest2; + Gearef(context, Queue)->next = C_code2; goto meta(context, queue->put); } </code></pre> @@ -462,7 +462,6 @@ <li>Worker <ul> <li>SynchronizedQueue から Task を一つずつ取得し、実行する</li> - <li>Worker は CPU、 GPU の数分生成する</li> <li>Worker 毎に POSIX Therad などを生成し、それぞれのスレッドで Code Gear を実行する</li> </ul> </li> @@ -498,7 +497,11 @@ <!-- _S9SLIDE_ --> <h2 id="taskmanger">TaskManger</h2> <ul> - <li>Worker を作成、終了処理を行う</li> + <li>Worker を作成、終了処理を行う + <ul> + <li>CPU、 GPU の数分生成する</li> + </ul> + </li> <li>依存関係を解決した Task を各 Worker の Queue に送信する</li> </ul> @@ -520,7 +523,7 @@ <!-- _S9SLIDE_ --> <h2 id="worker">Worker</h2> <ul> - <li>初期化時に Worker 用の Context を生成する</li> + <li>初期化時に Worker 用の Context を生成し、Code Gear を実行していく</li> <li>TaskManager から送信された Task を一つずつ取得して実行する</li> </ul> @@ -528,7 +531,7 @@ <img src="./images/workerRun.svg" alt="message" style="float: left;width: 50%;" /> <div style="float: left; width: 50%;"> <ol> - <li>Worker は Queue から Task を取得する</li> + <li>Worker は Queue から Task(Context)を取得する</li> <li>Worker の Context からTask の Context へ入れ替える</li> <li>Task に設定されている Code Gear を実行</li> @@ -739,8 +742,8 @@ <li>Twice は与えられた整数配列を2倍にする例題である</li> <li>並列実行の依存関係がなく、並列度が高い課題である</li> <li>要素数 2^27</li> - <li>CPU での実行時は 2^27 を 2^6 個に分割して Task を生成する</li> - <li>GPU での実行時は1次元の block 数を 2^15、 block 内の thread 数を 2^10 で展開</li> + <li>CPU での実行時は要素数 2^27 を 2^6 個に分割して Task を生成する</li> + <li>GPU での実行時は1次元の block 数を 2^15、 block 内の thread 数を 2^10 で kernel を実行</li> </ul> @@ -803,10 +806,10 @@ <h2 id="bitonicsort">BitonicSort</h2> <ul> <li>並列処理向けのソートアルゴリズム</li> - <li>決まった2点間の要素の入れ替えをステージ毎に並列に実行し、 Output Data Gear として書き出し、次のステージの Code Gear の Input Data Gear とする</li> + <li>決まった2点間の要素の入れ替えを並列に行うことでソーティングを進めていく</li> <li>要素数 2^24</li> - <li>CPU での実行時は 2^24 を 2^6 個に分割して Task を生成する</li> - <li>GPU での実行時は1次元の block 数を 2^14、 block 内の thread 数を 2^10 で展開</li> + <li>CPU での実行時は要素数 2^24 を 2^6 個に分割して Task を生成する</li> + <li>GPU での実行時は1次元の block 数を 2^14、 block 内の thread 数を 2^10 で kernel を実行</li> </ul>
--- a/slide/slide.md Tue Feb 13 11:48:44 2018 +0900 +++ b/slide/slide.md Tue Feb 13 13:22:51 2018 +0900 @@ -191,7 +191,7 @@ Queue* queue = createSingleLinkedQueue(context); Node* node = new Node(); node->color = Red; - goto queue->put(node, queueTest2); + goto queue->put(node, code2); } ``` @@ -209,7 +209,7 @@ node->color = Red; Gearef(context, Queue)->queue = (union Data*) queue; Gearef(context, Queue)->data = (union Data*) node; - Gearef(context, Queue)->next = C_queueTest2; + Gearef(context, Queue)->next = C_code2; goto meta(context, queue->put); } ``` @@ -241,7 +241,6 @@ - Worker の生成、依存関係を解決したTask を Worker に送信する - Worker - SynchronizedQueue から Task を一つずつ取得し、実行する - - Worker は CPU、 GPU の数分生成する - Worker 毎に POSIX Therad などを生成し、それぞれのスレッドで Code Gear を実行する - SynchronizedQueue - マルチスレッド環境でもデータの同期が行われる Queue @@ -256,6 +255,7 @@ ## TaskManger - Worker を作成、終了処理を行う + - CPU、 GPU の数分生成する - 依存関係を解決した Task を各 Worker の Queue に送信する <div> @@ -271,14 +271,14 @@ </div> ## Worker -- 初期化時に Worker 用の Context を生成する +- 初期化時に Worker 用の Context を生成し、Code Gear を実行していく - TaskManager から送信された Task を一つずつ取得して実行する <div> <img src="./images/workerRun.svg" alt="message" style="float: left;width: 50%;"> <div style="float: left; width: 50%;"> <ol> - <li>Worker は Queue から Task を取得する</li> + <li>Worker は Queue から Task(Context)を取得する</li> <li>Worker の Context からTask の Context へ入れ替える</li> <li>Task に設定されている Code Gear を実行</li> @@ -406,8 +406,8 @@ - Twice は与えられた整数配列を2倍にする例題である - 並列実行の依存関係がなく、並列度が高い課題である - 要素数 2^27 -- CPU での実行時は 2^27 を 2^6 個に分割して Task を生成する -- GPU での実行時は1次元の block 数を 2^15、 block 内の thread 数を 2^10 で展開 +- CPU での実行時は要素数 2^27 を 2^6 個に分割して Task を生成する +- GPU での実行時は1次元の block 数を 2^15、 block 内の thread 数を 2^10 で kernel を実行 ## Twice の結果 - GPU は CPU との通信時間を含めた時間、 GPU(kernel only) は kernel のみの実行時間を示している @@ -458,10 +458,10 @@ ## BitonicSort - 並列処理向けのソートアルゴリズム -- 決まった2点間の要素の入れ替えをステージ毎に並列に実行し、 Output Data Gear として書き出し、次のステージの Code Gear の Input Data Gear とする +- 決まった2点間の要素の入れ替えを並列に行うことでソーティングを進めていく - 要素数 2^24 -- CPU での実行時は 2^24 を 2^6 個に分割して Task を生成する -- GPU での実行時は1次元の block 数を 2^14、 block 内の thread 数を 2^10 で展開 +- CPU での実行時は要素数 2^24 を 2^6 個に分割して Task を生成する +- GPU での実行時は1次元の block 数を 2^14、 block 内の thread 数を 2^10 で kernel を実行 ## BitonicSort の結果 - 1 CPU と 32 CPU で約22.12倍の速度向上