# HG changeset patch # User Tatsuki IHA # Date 1518468663 -32400 # Node ID d340d73e3cd657a3378e336833b195482bd0c868 # Parent b6bad9440c4dc8803ac05fbe388949a250189cbb Fix Slide diff -r b6bad9440c4d -r d340d73e3cd6 slide/images/cudaDataArchitecture.svg --- a/slide/images/cudaDataArchitecture.svg Tue Feb 13 05:29:47 2018 +0900 +++ b/slide/images/cudaDataArchitecture.svg Tue Feb 13 05:51:03 2018 +0900 @@ -77,6 +77,18 @@ + + + + + + + + + + + + @@ -317,5 +329,25 @@ + + + + + + + + + + + + + + + + + + + + diff -r b6bad9440c4d -r d340d73e3cd6 slide/slide.html --- a/slide/slide.html Tue Feb 13 05:29:47 2018 +0900 +++ b/slide/slide.html Tue Feb 13 05:51:03 2018 +0900 @@ -87,7 +87,7 @@ @@ -577,9 +577,9 @@

並列構文

    -
  • 並列実行の Task の生成は新しく Context を生成し、実行する Code Gear、待ち合わせる Input Data Gear の数、Input/Output Data Gear への参照を設定する
  • +
  • 並列実行する際は新しく Context を生成し、実行する Code Gear、待ち合わせる Input Data Gear の数、Input/Output Data Gear への参照を設定する
  • この記述を直接書くと Meta Data Gear である Context を直接参照しているため、ノーマルレベルでの記述では好ましくない
  • -
  • Task の設定は煩雑な記述であるが、並列実行されることを除けば通常の CbC の goto 文と同等である
  • +
  • Context の設定は煩雑な記述であるが、並列実行されることを除けば通常の CbC の goto 文と同等である
  • そこで Context を直接参照しない並列構文、 par goto 構文を新たに考案した
@@ -595,9 +595,9 @@
  • スクリプトによって Code Gear の Input/Output の数を解析する
  • -
  • Task は __exit に継続することで終了する +
  • 並列実行される Task は __exit に継続することで終了する
      -
    • Gears OS は Output Data Gear 生成した時点で終了するため__exit に直接継続せずに Data Gear を書き出す処理に継続する
    • +
    • Gears OS は Task はOutput Data Gear を書き出す処理で終了するため__exit に直接継続せずに Data Gear を書き出す処理に継続する
  • @@ -614,11 +614,11 @@

    CUDA への対応

      -
    • Gears OS は GPU での実行もサポートする
    • +
    • Gears OS は GPU での実行もサポートしている
    • +
    • GPU で性能を出すためには GPU に合わせた並列プログラミングが必要になる
    • +
    • 今回、CUDA に合わせた並列処理機構を Interface を用いて実装した
    • CUDA は GPU を Device、 CPU を Host として定義する
    • CUDA は処理の最小の単位を thread とし、それをまとめた block を展開し Device 上で実行されるプログラム(Kernel)を実行する
    • -
    • GPU で性能を出すためには GPU に合わせた並列プログラミングが必要になる
    • -
    • 今回、CUDA に合わせた並列処理機構を Interface を用いて実装した
    @@ -681,9 +681,9 @@

    CUDA での呼び出し

      -
    • Gears OS では Task で実行される Code Gear の stub Code Gear で CUDA による実行を切り替える
    • -
    • stub Code Gear で CUDABuffer でのマッピング、実行する kernel の読み込みを行う
    • -
    • stub Code Gear は CUDA で実行する際は CUDAExecutor の Code Gear に継続する
    • +
    • Gears OS では Task に設定している Code Gear の stub Code Gear で CUDA実行を切り替える
    • +
    • CUDABuffer でのマッピング、実行する kernel の読み込みは stub Code Gear で行われる
    • +
    • CUDA で実行する際は stub Code Gear に対応する Code Gear ではなく、 CUDAExecutor の Code Gear に継続する
    @@ -734,8 +734,9 @@

    Twice の結果

      +
    • GPU は CPU との通信時間を含めた時間、 GPU(kernel only) は kernel のみの実行時間を示している
    • 1 CPU と 32 CPU では 約27.1倍の速度向上が見られた
    • -
    • GPU 実行は kernel のみの実行時間は32 CPU に比べて約7.2倍の速度向上、通信時間を含めると 16 CPU より遅い
    • +
    • GPU は通信時間を含めると 8 CPU の約1.25倍、 kernel のみの実行では 32 CPU の約7.22倍になった
    • 通信時間がオーバーヘッドになっている
    @@ -932,7 +933,7 @@
  • その結果、 Gears OS が 1CPU での動作が遅いということがわかった。
    • par goto 文を使用する度に Context を生成するため、 ある程度の時間がかかってしまう
    • -
    • モデル検査で par goto の Code Gear のフローを解析し、処理がかる場合は Context を生成せずに関数呼出しを行う等の最適化が必要
    • +
    • モデル検査で par goto で実行する Code Gear のフローを解析し、処理が軽い場合は Context を生成せずに関数呼出しを行う等の最適化が必要
  • diff -r b6bad9440c4d -r d340d73e3cd6 slide/slide.md --- a/slide/slide.md Tue Feb 13 05:29:47 2018 +0900 +++ b/slide/slide.md Tue Feb 13 05:51:03 2018 +0900 @@ -309,15 +309,16 @@ ## 並列構文 - 並列実行する際は新しく Context を生成し、実行する Code Gear、待ち合わせる Input Data Gear の数、Input/Output Data Gear への参照を設定する - この記述を直接書くと Meta Data Gear である Context を直接参照しているため、ノーマルレベルでの記述では好ましくない -- Task の設定は煩雑な記述であるが、並列実行されることを除けば通常の CbC の goto 文と同等である +- Context の設定は煩雑な記述であるが、並列実行されることを除けば通常の CbC の goto 文と同等である - そこで Context を直接参照しない並列構文、 **par goto** 構文を新たに考案した ## par goto 構文 - par goto 構文を記述すると新しく Context を生成し、TaskManager を通して Worker に送信される - par goto 構文には引数として Input/Output Data Gear等を渡す - スクリプトによって Code Gear の Input/Output の数を解析する -- Task は **__exit** に継続することで終了する - - Gears OS は Output Data Gear 生成した時点で終了するため**__exit** に直接継続せずに Data Gear を書き出す処理に継続する +- 並列実行される Task は **__exit** に継続することで終了する + - Gears OS は Task はOutput Data Gear を書き出す処理で終了するため**__exit** に直接継続せずに Data Gear を書き出す処理に継続する +- par goto 構文は通常のプログラミングの関数呼び出しのように扱える ``` c __code code1(Integer *integer1, Integer * integer2, Integer *output) { @@ -327,11 +328,11 @@ ``` ## CUDA への対応 -- Gears OS は GPU での実行もサポートする +- Gears OS は GPU での実行もサポートしている +- GPU で性能を出すためには GPU に合わせた並列プログラミングが必要になる +- 今回、CUDA に合わせた並列処理機構を Interface を用いて実装した - CUDA は GPU を Device、 CPU を Host として定義する - CUDA は処理の最小の単位を thread とし、それをまとめた block を展開し Device 上で実行されるプログラム(Kernel)を実行する -- GPU で性能を出すためには GPU に合わせた並列プログラミングが必要になる -- 今回、CUDA に合わせた並列処理機構を Interface を用いて実装した ## CUDAWorker - CUDA で実行する Task を受け取る Worker @@ -365,9 +366,9 @@
    ## CUDA での呼び出し -- Gears OS では Task で実行される Code Gear の stub Code Gear で CUDA による実行を切り替える -- stub Code Gear で CUDABuffer でのマッピング、実行する kernel の読み込みを行う -- stub Code Gear は CUDA で実行する際は CUDAExecutor の Code Gear に継続する +- Gears OS では Task に設定している Code Gear の stub Code Gear で CUDA実行を切り替える +- CUDABuffer でのマッピング、実行する kernel の読み込みは stub Code Gear で行われる +- CUDA で実行する際は stub Code Gear に対応する Code Gear ではなく、 CUDAExecutor の Code Gear に継続する
    message @@ -394,8 +395,9 @@ - GPU での実行時は1次元の block 数を 2^15、 block 内の thread 数を 2^10 で展開 ## Twice の結果 +- GPU は CPU との通信時間を含めた時間、 GPU(kernel only) は kernel のみの実行時間を示している - 1 CPU と 32 CPU では 約27.1倍の速度向上が見られた -- GPU 実行は kernel のみの実行時間は32 CPU に比べて約7.2倍の速度向上、通信時間を含めると 16 CPU より遅い +- GPU は通信時間を含めると 8 CPU の約1.25倍、 kernel のみの実行では 32 CPU の約7.22倍になった - 通信時間がオーバーヘッドになっている @@ -546,7 +548,7 @@ - OpenMP、 Go 言語で Twice を実装し、 Gears OS の性能比較を行った - その結果、 Gears OS が 1CPU での動作が遅いということがわかった。 - par goto 文を使用する度に Context を生成するため、 ある程度の時間がかかってしまう - - モデル検査で par goto の Code Gear のフローを解析し、処理がかる場合は Context を生成せずに関数呼出しを行う等の最適化が必要 + - モデル検査で par goto で実行する Code Gear のフローを解析し、処理が軽い場合は Context を生成せずに関数呼出しを行う等の最適化が必要
    message