Mercurial > hg > Papers > 2018 > parusu-master
changeset 107:0b7cf219ebfa
Fix
author | Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Feb 2018 14:35:22 +0900 |
parents | 2d411c46eeb9 |
children | 9096469e7c4a |
files | slide/slide.html slide/slide.md |
diffstat | 2 files changed, 37 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/slide/slide.html Tue Feb 13 14:15:31 2018 +0900 +++ b/slide/slide.html Tue Feb 13 14:35:22 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 14:15:23 +0900 with Markdown engine kramdown (1.13.2) + on 2018-02-13 14:35:17 +0900 with Markdown engine kramdown (1.13.2) using options {} --> @@ -406,11 +406,7 @@ </li> <li>Gearef マクロは Context から Interface の引数格納用の Data Gear を取り出す</li> <li>Context には Interface の引数を渡すための Data Gear が予め用意されている</li> - <li>goto meta では Interface の Code Gear の番号を Code Gear へのポインタに変換して継続を行う - <ul> - <li>goto meta にはメタ計算をいれることができる</li> - </ul> - </li> + <li>goto meta では Interface の Code Gear の番号を Code Gear へのポインタに変換して継続を行う</li> </ul> <pre lang="c"><code>__code code1(struct Context *context) { @@ -430,9 +426,10 @@ <!-- _S9SLIDE_ --> <h2 id="interface--stub-code-gear">Interface での stub Code Gear</h2> <ul> - <li>meta Code Gear では引数に指定された Code Gear の番号から stub Code Gear を取り出し、 継続を行う</li> + <li>meta Code Gear では引数に指定された Code Gear の番号から stub Code Gear への関数ポインタを取り出し、 継続を行う</li> <li>メタ計算で格納された引数は stub Code Gear で Code Gear に渡される</li> <li>Interface を実装した Code Gear は Interface の定義から stub Code Gear の自動生成が可能</li> + <li>必要ならばメタ計算を meta Code Gear か stub Code Gear に埋め込むことができる</li> </ul> <pre lang="c"><code>// implement put code gear @@ -462,10 +459,14 @@ <ul> <li>今回は並列処理機構である <ul> - <li>Task</li> + <li>Task + <ul> + <li>1つの Context 上で goto で遷移しながら実行される Code Gear の列</li> + </ul> + </li> <li>TaskManager <ul> - <li>Worker の生成、依存関係を解決したTask を Worker に送信する</li> + <li>依存関係を解決したTask を Worker SynchronizedQueue に送信する</li> </ul> </li> <li>Worker @@ -476,12 +477,12 @@ </li> <li>SynchronizedQueue <ul> - <li>マルチスレッド環境でもデータの同期処理が行われる Queue</li> + <li>Gears OS で記述されたマルチスレッド環境でもデータの同期処理が行われる Queue</li> </ul> </li> </ul> </li> - <li>をInterface を用いて実装した</li> + <li>これらを Interface として実装した</li> </ul> @@ -491,11 +492,12 @@ <h2 id="task">Task</h2> <ul> <li>Gears OS では Context が並列実行の Task に相当する</li> - <li>Context は Task用の情報として以下の情報をもっている + <li>Context は Task用の情報として以下の情報を付け加えた <ul> <li>実行する Code Gear</li> <li>Input/Output Data Gear の格納場所</li> <li>待っている Input Data Gear の数</li> + <li>この Task を実行する Worker</li> </ul> </li> </ul> @@ -506,11 +508,7 @@ <!-- _S9SLIDE_ --> <h2 id="taskmanger">TaskManger</h2> <ul> - <li>Worker を作成、終了処理を行う - <ul> - <li>CPU、 GPU の数分生成する</li> - </ul> - </li> + <li>Worker をCPU、 GPU の数分生成する</li> <li>依存関係を解決した Task を各 Worker の Queue に送信する</li> </ul> @@ -558,9 +556,13 @@ <!-- _S9SLIDE_ --> <h2 id="synchronized-queue">Synchronized Queue</h2> <ul> - <li>Worker で使用される Queue は Task を送信するTaskManager と Task を取得する Worker 毎で操作される</li> - <li>そのためマルチスレッドでのデータの同期処理を行える SynchronizedQueue として実装する</li> - <li>Gears OS では CAS(Check and Set、 Compare and Swap) を使用した実装を行った + <li>TaskManager と Worker 間の通信を行うための Queue + <ul> + <li>Queue は Worker の数だけ生成される</li> + </ul> + </li> + <li>マルチスレッド間でのデータの同期処理を行える</li> + <li>Gears OS では 同期機構として CAS(Check and Set、 Compare and Swap) を使用した実装を行った <ul> <li>CAS は値を更新する際に更新前の値と実際に保存されているメモリ番地の値を比較し、変化がなければ値を更新する</li> <li>メモリ番地の値が変わっているなら、もう一度 CAS を行う</li> @@ -645,7 +647,7 @@ <li>GPU で性能を出すためには GPU に合わせた並列プログラミングが必要になる</li> <li>CUDA は GPU を Device、 CPU を Host として定義する</li> <li>CUDA は処理の最小の単位を thread とし、それをまとめた block を展開し Device 上で実行されるプログラム(Kernel)を実行する</li> - <li>今回、CUDA に合わせた並列処理機構である CUDAWorker、 CUDAExecutor をInterface を用いて実装し、 CPU、GPU間のデータのマッピングのために CUDABuffer を用意した</li> + <li>今回、CUDA に合わせた並列処理機構である CUDAWorker、 CUDAExecutor をInterface を用いて実装し、 CPU、GPU 間のデータのマッピングのために CUDABuffer を用意した</li> </ul>
--- a/slide/slide.md Tue Feb 13 14:15:31 2018 +0900 +++ b/slide/slide.md Tue Feb 13 14:35:22 2018 +0900 @@ -201,7 +201,6 @@ - Gearef マクロは Context から Interface の引数格納用の Data Gear を取り出す - Context には Interface の引数を渡すための Data Gear が予め用意されている - goto meta では Interface の Code Gear の番号を Code Gear へのポインタに変換して継続を行う - - goto meta にはメタ計算をいれることができる ``` c __code code1(struct Context *context) { @@ -216,9 +215,10 @@ ``` ## Interface での stub Code Gear -- meta Code Gear では引数に指定された Code Gear の番号から stub Code Gear を取り出し、 継続を行う +- meta Code Gear では引数に指定された Code Gear の番号から stub Code Gear への関数ポインタを取り出し、 継続を行う - メタ計算で格納された引数は stub Code Gear で Code Gear に渡される - Interface を実装した Code Gear は Interface の定義から stub Code Gear の自動生成が可能 +- 必要ならばメタ計算を meta Code Gear か stub Code Gear に埋め込むことができる ``` c // implement put code gear @@ -243,25 +243,26 @@ ## 並列処理の構成 - 今回は並列処理機構である - Task + - 1つの Context 上で goto で遷移しながら実行される Code Gear の列 - TaskManager - - Worker の生成、依存関係を解決したTask を Worker に送信する + - 依存関係を解決したTask を Worker SynchronizedQueue に送信する - Worker - SynchronizedQueue から Task を一つずつ取得し、実行する - Worker 毎に POSIX Therad などを生成し、それぞれのスレッドで Code Gear を実行する - SynchronizedQueue - - マルチスレッド環境でもデータの同期処理が行われる Queue -- をInterface を用いて実装した + - Gears OS で記述されたマルチスレッド環境でもデータの同期処理が行われる Queue +- これらを Interface として実装した ## Task - Gears OS では Context が並列実行の Task に相当する -- Context は Task用の情報として以下の情報をもっている +- Context は Task用の情報として以下の情報を付け加えた - 実行する Code Gear - Input/Output Data Gear の格納場所 - 待っている Input Data Gear の数 + - この Task を実行する Worker ## TaskManger -- Worker を作成、終了処理を行う - - CPU、 GPU の数分生成する +- Worker をCPU、 GPU の数分生成する - 依存関係を解決した Task を各 Worker の Queue に送信する <div> @@ -297,9 +298,10 @@ </div> ## Synchronized Queue -- Worker で使用される Queue は Task を送信するTaskManager と Task を取得する Worker 毎で操作される -- そのためマルチスレッドでのデータの同期処理を行える SynchronizedQueue として実装する -- Gears OS では CAS(Check and Set、 Compare and Swap) を使用した実装を行った +- TaskManager と Worker 間の通信を行うための Queue + - Queue は Worker の数だけ生成される +- マルチスレッド間でのデータの同期処理を行える +- Gears OS では 同期機構として CAS(Check and Set、 Compare and Swap) を使用した実装を行った - CAS は値を更新する際に更新前の値と実際に保存されているメモリ番地の値を比較し、変化がなければ値を更新する - メモリ番地の値が変わっているなら、もう一度 CAS を行う @@ -353,7 +355,7 @@ - GPU で性能を出すためには GPU に合わせた並列プログラミングが必要になる - CUDA は GPU を Device、 CPU を Host として定義する - CUDA は処理の最小の単位を thread とし、それをまとめた block を展開し Device 上で実行されるプログラム(Kernel)を実行する -- 今回、CUDA に合わせた並列処理機構である CUDAWorker、 CUDAExecutor をInterface を用いて実装し、 CPU、GPU間のデータのマッピングのために CUDABuffer を用意した +- 今回、CUDA に合わせた並列処理機構である CUDAWorker、 CUDAExecutor をInterface を用いて実装し、 CPU、GPU 間のデータのマッピングのために CUDABuffer を用意した ## CUDAWorker - CUDA で実行する Task を受け取る Worker