# HG changeset patch # User Tatsuki IHA # Date 1518487460 -32400 # Node ID cf36d04d11e7c0def57bc53855a68250923820cb # Parent d340d73e3cd657a3378e336833b195482bd0c868 Fix diff -r d340d73e3cd6 -r cf36d04d11e7 slide/slide.html --- 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 @@ @@ -125,7 +125,7 @@

Gears OS

@@ -139,7 +139,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 の並列実行を行う
  • @@ -262,7 +262,7 @@
  • Data Gear の型情報
  • -
  • Gears OS ではメタ計算で Context を経由して Code/Data Gear にアクセスする
  • +
  • Gears OS ではメタ計算で Context を経由して Code/Data Gear に番号でアクセスする
  • @@ -273,7 +273,7 @@
    @@ -306,11 +306,8 @@
  • 操作(API)自体のCode Gear の型
  • -
  • __code next(…) は一種のクロージャであり、 引数で Code Gear を渡すことが出来る -
      -
    • … は可変長引数のような扱いで、Code Gear が複数の値をInput Data Gear とする可能性がある
    • -
    -
  • +
  • __code next(…) は一種のクロージャであり、 引数で Code Gear を渡すことが出来る
  • +
  • … は可変長引数のような扱いで、Code Gear が複数の値をInput Data Gear とする可能性がある
  • typedef struct Queue<Impl>{
    @@ -361,7 +358,7 @@
     

    Interface を利用した Code Gear の呼び出し

    • Interface を利用した Code Gear への継続は goto interface->method で行われる
    • -
    • ここでの interface は Interfaceの型で包んだData Gear、 method は実装した Code Gear に対応する
    • +
    • interface は Interfaceの型で包んだData Gear、 method は実装した Code Gear に対応する
    __code code1() { 
    @@ -409,14 +406,10 @@
       
  • Interface を実装した Code Gear は Interface の定義から stub Code Gear の自動生成が可能
  • -
    __code putSingleLinkedQueue(struct Context *context,struct SingleLinkedQueue* queue,
    +
    // 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 @@
           
         
       
    -  
  • をInterface で実装した
  • +
  • をInterface を用いて実装した
  • @@ -600,6 +593,7 @@
  • Gears OS は Task はOutput Data Gear を書き出す処理で終了するため__exit に直接継続せずに Data Gear を書き出す処理に継続する
  • +
  • par goto 構文は通常のプログラミングの関数呼び出しのように扱える
  • __code code1(Integer *integer1, Integer * integer2, Integer *output) {
    @@ -628,7 +622,7 @@
     

    CUDAWorker

    • CUDA で実行する Task を受け取る Worker
    • -
    • 初期化の際に CUDA ライブラリの初期化等を行う
    • +
    • 初期化の際に CUDA ライブラリの初期化や CUDAExecutor の生成を行う
    @@ -637,7 +631,8 @@

    CUDAExecutor

      -
    • CUDAExecutor は Executor Interface を実装した以下の Code Gear を持つ +
    • CUDAExecutor は Executor Interface を実装した Data Gear
    • +
    • 以下の Code Gear を実装している
      • HostからDevice へのデータの送信(read)
      • kernel の実行(exec)
      • @@ -870,7 +865,7 @@

        Go 言語との比較

        • Go 言語は並列実行を go funciton(argv) の構文で行う。 この実行を goroutine と呼ぶ
        • -
        • データの待ち合わせはチャネルというデータ構造で行う
        • +
        • goroutine 間のデータの待ち合わせはチャネルというデータ構造で行う
        • チャネルでのデータの送受信は <- を使用して行うため、簡潔に書くことが出来る
        • しかし、 チャネルは複数の goroutine で共有されるため、データの送信元が推測しづらい
        • Gears OS では goroutine は par goto 文とほぼ同等に扱える
        • diff -r d340d73e3cd6 -r cf36d04d11e7 slide/slide.md --- 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 の並列実行を行う
          message @@ -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 を用意している
          message @@ -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{ @@ -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 @@ message
          - ## データ並列 - data並列はあるデータ構造がサブデータへ分割することが可能で、各サブデータに行う処理が同じ場合に有効な並列処理手法 - Gears OS ではdata 並列は par goto 構文に**iterate(分割数)**を追加することで可能になる