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&lt;Impl&gt;{
@@ -361,7 +358,7 @@
 <h2 id="interface--code-gear-">Interface を利用した Code Gear の呼び出し</h2>
 <ul>
   <li>Interface を利用した Code Gear への継続は <code>goto interface-&gt;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 = &amp;ALLOCATE(context, Element)-&gt;Element;
-    element-&gt;data = data;
-    element-&gt;next = NULL;
-    queue-&gt;last-&gt;next  = element;
-    queue-&gt;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>&lt;-</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(分割数)**を追加することで可能になる