Mercurial > hg > Papers > 2018 > parusu-master
changeset 101:cf36d04d11e7
Fix
author | Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Feb 2018 11:04:20 +0900 |
parents | d340d73e3cd6 |
children | c48b78793176 |
files | slide/slide.html slide/slide.md |
diffstat | 2 files changed, 30 insertions(+), 39 deletions(-) [+] |
line wrap: on
line diff
--- a/slide/slide.html Tue Feb 13 05:51:03 2018 +0900 +++ b/slide/slide.html Tue Feb 13 11:04:20 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 05:49:42 +0900 with Markdown engine kramdown (1.13.2) + on 2018-02-13 11:03:08 +0900 with Markdown engine kramdown (1.13.2) using options {} --> @@ -125,7 +125,7 @@ <!-- _S9SLIDE_ --> <h2 id="gears-os-1">Gears OS</h2> <ul> - <li>本研究ではGears OS の並列処理機構、並列処理構文(par goto)の実装、Gears OS を実装するにつれて必要なったモジュール化の導入を行う</li> + <li>本研究では Gears OS の並列処理機構、並列処理構文(par goto)の実装、Gears OS を実装するにつれて必要なったモジュール化の導入を行う</li> <li>また、並列処理を行う例題を用いて評価、 OpenMP、 Go 言語との比較を行う</li> </ul> @@ -139,7 +139,7 @@ <li>Code Gear はプログラムの処理そのものを表す</li> <li>Data Gear はデータそのものを表す</li> <li>Code Gear は必要な Input Data Gear が揃ったら実行し、Output Data Gear を生成する</li> - <li>Code Gear と Input / Output Data Gear の対応から依存関係を解決し、Input Data Gear が揃った Code Gear の並列実行を行う</li> + <li>Code Gear と Input/Output Data Gear の対応から依存関係を解決し、Input Data Gear が揃った Code Gear の並列実行を行う</li> </ul> <div style="text-align: center;"> @@ -262,7 +262,7 @@ <li>Data Gear の型情報</li> </ul> </li> - <li>Gears OS ではメタ計算で Context を経由して Code/Data Gear にアクセスする</li> + <li>Gears OS ではメタ計算で Context を経由して Code/Data Gear に番号でアクセスする</li> </ul> @@ -273,7 +273,7 @@ <ul> <li>Data Gear にアクセスするには Context から番号を指定して行う</li> <li>だが、通常の Code Gear では Meta Data Gear である Context の参照は避ける必要がある</li> - <li>Gears OS ではメタレベルで通常の Code Gear で必要な Data Gear を Context から取り出す処理を行う stub Code Gear を用意している</li> + <li>Gears OS では Code Gear に接続する Data Gear を メタレベルである Context から取り出す処理を行う stub Code Gear を用意している</li> </ul> <div style="text-align: center;"> @@ -306,11 +306,8 @@ <li>操作(API)自体のCode Gear の型</li> </ul> </li> - <li><strong>__code next(…)</strong> は一種のクロージャであり、 引数で Code Gear を渡すことが出来る - <ul> - <li>… は可変長引数のような扱いで、Code Gear が複数の値をInput Data Gear とする可能性がある</li> - </ul> - </li> + <li><strong>__code next(…)</strong> は一種のクロージャであり、 引数で Code Gear を渡すことが出来る</li> + <li>… は可変長引数のような扱いで、Code Gear が複数の値をInput Data Gear とする可能性がある</li> </ul> <pre lang="c"><code>typedef struct Queue<Impl>{ @@ -361,7 +358,7 @@ <h2 id="interface--code-gear-">Interface を利用した Code Gear の呼び出し</h2> <ul> <li>Interface を利用した Code Gear への継続は <code>goto interface->method</code> で行われる</li> - <li>ここでの <strong>interface</strong> は Interfaceの型で包んだData Gear、 <strong>method</strong> は実装した Code Gear に対応する</li> + <li><strong>interface</strong> は Interfaceの型で包んだData Gear、 <strong>method</strong> は実装した Code Gear に対応する</li> </ul> <pre lang="c"><code>__code code1() { @@ -409,14 +406,10 @@ <li>Interface を実装した Code Gear は Interface の定義から stub Code Gear の自動生成が可能</li> </ul> -<pre lang="c"><code>__code putSingleLinkedQueue(struct Context *context,struct SingleLinkedQueue* queue, +<pre lang="c"><code>// implement put code gear +__code putSingleLinkedQueue(struct Context *context,struct SingleLinkedQueue* queue, union Data* data, enum Code next) { - Element* element = &ALLOCATE(context, Element)->Element; - element->data = data; - element->next = NULL; - queue->last->next = element; - queue->last = element; - goto meta(context, next); + ... } // generated by script @@ -456,7 +449,7 @@ </li> </ul> </li> - <li>をInterface で実装した</li> + <li>をInterface を用いて実装した</li> </ul> @@ -600,6 +593,7 @@ <li>Gears OS は Task はOutput Data Gear を書き出す処理で終了するため<strong>__exit</strong> に直接継続せずに Data Gear を書き出す処理に継続する</li> </ul> </li> + <li>par goto 構文は通常のプログラミングの関数呼び出しのように扱える</li> </ul> <pre lang="c"><code>__code code1(Integer *integer1, Integer * integer2, Integer *output) { @@ -628,7 +622,7 @@ <h2 id="cudaworker">CUDAWorker</h2> <ul> <li>CUDA で実行する Task を受け取る Worker</li> - <li>初期化の際に CUDA ライブラリの初期化等を行う</li> + <li>初期化の際に CUDA ライブラリの初期化や CUDAExecutor の生成を行う</li> </ul> @@ -637,7 +631,8 @@ <!-- _S9SLIDE_ --> <h2 id="cudaexecutor">CUDAExecutor</h2> <ul> - <li>CUDAExecutor は Executor Interface を実装した以下の Code Gear を持つ + <li>CUDAExecutor は Executor Interface を実装した Data Gear</li> + <li>以下の Code Gear を実装している <ul> <li>HostからDevice へのデータの送信(read)</li> <li>kernel の実行(exec)</li> @@ -870,7 +865,7 @@ <h2 id="go-">Go 言語との比較</h2> <ul> <li>Go 言語は並列実行を <strong>go funciton(argv)</strong> の構文で行う。 この実行を goroutine と呼ぶ</li> - <li>データの待ち合わせはチャネルというデータ構造で行う</li> + <li>goroutine 間のデータの待ち合わせはチャネルというデータ構造で行う</li> <li>チャネルでのデータの送受信は <strong><-</strong> を使用して行うため、簡潔に書くことが出来る</li> <li>しかし、 チャネルは複数の goroutine で共有されるため、データの送信元が推測しづらい</li> <li>Gears OS では goroutine は par goto 文とほぼ同等に扱える</li>
--- a/slide/slide.md Tue Feb 13 05:51:03 2018 +0900 +++ b/slide/slide.md Tue Feb 13 11:04:20 2018 +0900 @@ -18,7 +18,7 @@ - CPU、GPU などの実行環境の切り替え、データ拡張等を提供 ## Gears OS -- 本研究ではGears OS の並列処理機構、並列処理構文(par goto)の実装、Gears OS を実装するにつれて必要なったモジュール化の導入を行う +- 本研究では Gears OS の並列処理機構、並列処理構文(par goto)の実装、Gears OS を実装するにつれて必要なったモジュール化の導入を行う - また、並列処理を行う例題を用いて評価、 OpenMP、 Go 言語との比較を行う ## Code Gear/Data Gear @@ -26,7 +26,7 @@ - Code Gear はプログラムの処理そのものを表す - Data Gear はデータそのものを表す - Code Gear は必要な Input Data Gear が揃ったら実行し、Output Data Gear を生成する -- Code Gear と Input / Output Data Gear の対応から依存関係を解決し、Input Data Gear が揃った Code Gear の並列実行を行う +- Code Gear と Input/Output Data Gear の対応から依存関係を解決し、Input Data Gear が揃った Code Gear の並列実行を行う <div style="text-align: center;"> <img src="./images/codegear-datagear-dependency.svg" alt="message" width="600"> @@ -100,12 +100,12 @@ - Code Gear と同じく Data Gear も番号で指定する - 並列実行用の Task 情報 - Data Gear の型情報 -- Gears OS ではメタ計算で Context を経由して Code/Data Gear にアクセスする +- Gears OS ではメタ計算で Context を経由して Code/Data Gear に番号でアクセスする ## stub Code Gear - Data Gear にアクセスするには Context から番号を指定して行う - だが、通常の Code Gear では Meta Data Gear である Context の参照は避ける必要がある -- Gears OS ではメタレベルで通常の Code Gear で必要な Data Gear を Context から取り出す処理を行う stub Code Gear を用意している +- Gears OS では Code Gear に接続する Data Gear を メタレベルである Context から取り出す処理を行う stub Code Gear を用意している <div style="text-align: center;"> <img src="./images/contextContinuation.svg" alt="message" width="600"> @@ -124,7 +124,7 @@ - 操作(API)の引数群の型 - 操作(API)自体のCode Gear の型 - **__code next(...)** は一種のクロージャであり、 引数で Code Gear を渡すことが出来る - - ... は可変長引数のような扱いで、Code Gear が複数の値をInput Data Gear とする可能性がある +- ... は可変長引数のような扱いで、Code Gear が複数の値をInput Data Gear とする可能性がある ``` c typedef struct Queue<Impl>{ @@ -165,7 +165,7 @@ ## Interface を利用した Code Gear の呼び出し - Interface を利用した Code Gear への継続は `goto interface->method` で行われる -- ここでの **interface** は Interfaceの型で包んだData Gear、 **method** は実装した Code Gear に対応する +- **interface** は Interfaceの型で包んだData Gear、 **method** は実装した Code Gear に対応する ``` c __code code1() { @@ -200,14 +200,10 @@ - Interface を実装した Code Gear は Interface の定義から stub Code Gear の自動生成が可能 ``` c +// implement put code gear __code putSingleLinkedQueue(struct Context *context,struct SingleLinkedQueue* queue, union Data* data, enum Code next) { - Element* element = &ALLOCATE(context, Element)->Element; - element->data = data; - element->next = NULL; - queue->last->next = element; - queue->last = element; - goto meta(context, next); + ... } // generated by script @@ -230,7 +226,7 @@ - Worker 毎に POSIX Therad などを生成し、それぞれのスレッドで Code Gear を実行する - SynchronizedQueue - マルチスレッド環境でもデータの同期が行われる Queue -- をInterface で実装した +- をInterface を用いて実装した ## Task - Gears OS では Context が並列実行の Task に相当する @@ -336,10 +332,11 @@ ## CUDAWorker - CUDA で実行する Task を受け取る Worker -- 初期化の際に CUDA ライブラリの初期化等を行う +- 初期化の際に CUDA ライブラリの初期化や CUDAExecutor の生成を行う ## CUDAExecutor -- CUDAExecutor は Executor Interface を実装した以下の Code Gear を持つ +- CUDAExecutor は Executor Interface を実装した Data Gear +- 以下の Code Gear を実装している - HostからDevice へのデータの送信(read) - kernel の実行(exec) - Device から Host へのデータの書き出し(write) @@ -509,7 +506,7 @@ ## Go 言語との比較 - Go 言語は並列実行を **go funciton(argv)** の構文で行う。 この実行を goroutine と呼ぶ -- データの待ち合わせはチャネルというデータ構造で行う +- goroutine 間のデータの待ち合わせはチャネルというデータ構造で行う - チャネルでのデータの送受信は **<-** を使用して行うため、簡潔に書くことが出来る - しかし、 チャネルは複数の goroutine で共有されるため、データの送信元が推測しづらい - Gears OS では goroutine は par goto 文とほぼ同等に扱える @@ -554,7 +551,6 @@ <img src="./images/compareExamples.svg" alt="message" width="500"> </div> - ## データ並列 - data並列はあるデータ構造がサブデータへ分割することが可能で、各サブデータに行う処理が同じ場合に有効な並列処理手法 - Gears OS ではdata 並列は par goto 構文に**iterate(分割数)**を追加することで可能になる