# HG changeset patch # User Tatsuki IHA # Date 1518495771 -32400 # Node ID 05d7669c4a29a990676a8de62684fa592aa31a04 # Parent c48b78793176b295c6950027e32da3ad884093ee Fix diff -r c48b78793176 -r 05d7669c4a29 slide/slide.html --- 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 @@ @@ -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); } @@ -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); } @@ -462,7 +462,6 @@
  • Worker
  • @@ -498,7 +497,11 @@

    TaskManger

    @@ -520,7 +523,7 @@

    Worker

    @@ -528,7 +531,7 @@ message
      -
    1. Worker は Queue から Task を取得する
    2. +
    3. Worker は Queue から Task(Context)を取得する
    4. Worker の Context からTask の Context へ入れ替える
    5. Task に設定されている Code Gear を実行
    6. @@ -739,8 +742,8 @@
    7. Twice は与えられた整数配列を2倍にする例題である
    8. 並列実行の依存関係がなく、並列度が高い課題である
    9. 要素数 2^27
    10. -
    11. CPU での実行時は 2^27 を 2^6 個に分割して Task を生成する
    12. -
    13. GPU での実行時は1次元の block 数を 2^15、 block 内の thread 数を 2^10 で展開
    14. +
    15. CPU での実行時は要素数 2^27 を 2^6 個に分割して Task を生成する
    16. +
    17. GPU での実行時は1次元の block 数を 2^15、 block 内の thread 数を 2^10 で kernel を実行
    18. @@ -803,10 +806,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 を実行
      diff -r c48b78793176 -r 05d7669c4a29 slide/slide.md --- 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 に送信する
      @@ -271,14 +271,14 @@
      ## Worker -- 初期化時に Worker 用の Context を生成する +- 初期化時に Worker 用の Context を生成し、Code Gear を実行していく - TaskManager から送信された Task を一つずつ取得して実行する
      message
        -
      1. Worker は Queue から Task を取得する
      2. +
      3. Worker は Queue から Task(Context)を取得する
      4. Worker の Context からTask の Context へ入れ替える
      5. Task に設定されている Code Gear を実行
      6. @@ -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倍の速度向上