# HG changeset patch # User Tatsuki IHA # Date 1518372975 -32400 # Node ID 015f9933b245e436746f616141bf8d2785150049 # Parent 44f592c433249c741d67e72f54e077568b8db7c6 Fix diff -r 44f592c43324 -r 015f9933b245 paper/interface.tex --- a/paper/interface.tex Sun Feb 11 12:53:53 2018 +0900 +++ b/paper/interface.tex Mon Feb 12 03:16:15 2018 +0900 @@ -33,9 +33,9 @@ \lstinputlisting[caption=Context を経由した継続, label=code:contextContinuation]{./src/contextContinuation.cbc} Context はプログラム全体でみると使用する全ての Code Gear と Data Gear の集合を表現する Meta Data Gear になっている。 -しかし、Gears OS を実装する上で Context から Code Gear と Data Gear の番号の組合せを全て展開すると Code Gear がどの Data Gear の番号に対応するかを stub Code Gear に書く必要があり、\coderef{contextContinuation} 8行目のような煩雑な記述が増えてしまった。 +しかし、Gears OS を実装する上で Context から Code Gear と Data Gear の番号の組合せを全て展開すると Code Gear がどの Data Gear の番号に対応するかを stub Code Gear に書く必要があり、\coderef{contextContinuation} 9行目のような煩雑な記述が増えてしまった。 -また、stub Code Gear の記述の煩雑さを避けるために、\coderef{contextContinuation} 10行目のような決まったenumに決まった型の Data Gear を生成し、その Data Gear を複数の Code Gear で使いまわすという、Data Gear をグローバル変数のように扱う問題が多発した。 +また、stub Code Gear の記述の煩雑さを避けるために、\coderef{contextContinuation} 11行目のような決まったenumに決まった型の Data Gear を生成し、その Data Gear を複数の Code Gear で使いまわすという、Data Gear をグローバル変数のように扱う問題が多発した。 これらの問題点は Context が全ての Code Gear と Data Gear の集合を表現するために起こった問題である。 そこで、Gears OS をモジュール化する仕組みとして Interface を導入した。 diff -r 44f592c43324 -r 015f9933b245 paper/master_paper.pdf Binary file paper/master_paper.pdf has changed diff -r 44f592c43324 -r 015f9933b245 slide/slide.md --- a/slide/slide.md Sun Feb 11 12:53:53 2018 +0900 +++ b/slide/slide.md Mon Feb 12 03:16:15 2018 +0900 @@ -12,20 +12,18 @@ - GPU などのアーキテクチャに合わせた並列プログラミングの記述 ## Gears OS -- 本研究室では 処理の単位を Code Gear、 データの単位を Data Gear を用いて 信頼性が高い並列処理を行う Gears OS を開発している -- Gears OS では Task を Code Gear と実行するときに必要な Input Data Gear と出力するための Output Data Gear の組で表現される - - Input Data Gear/Output Data Gear によって依存関係が決定し、それにそって並列実行を行う -- Gears OS では計算をノーマルレベルとメタレベルに階層化 -- 信頼性と拡張性をメタレベルで保証する +- 本研究室では処理の単位を Code Gear、 データの単位を Data Gear を用いて 信頼性が高い並列処理を行う Gears OS を開発している +- 並列処理の Task を Code Gear と実行するときに必要な Input Data Gear と出力するための Output Data Gear の組で表現される +- 計算をノーマルレベルとメタレベルに階層化、 信頼性と拡張性をメタレベルで保証する - 並列処理の信頼性を通常の計算(ノーマルレベル) に保証 - CPU、GPU などの実行環境の切り替え、データ拡張等のを提供 ## Gears OS - 本研究ではGears OS の並列処理機構、並列処理構文(par goto)の実装、Gears OS を実装するにつれて必要なったモジュール化の導入を行う -- また、並列処理を行う例題を用いて評価、 Open MP、 Go 言語との比較を行う +- また、並列処理を行う例題を用いて評価、 OpenMP、 Go 言語との比較を行う ## Code Gear、 Data Gear -- Gears OS は Code Gear、 Data Gear という Gear で構成される +- Gears OS は Code Gear、 Data Gear という単位で構成される - Code Gear はプログラムの処理そのものを表す - Data Gear はデータそのものを表す - Code Gear は必要な Input Data Gear が揃ったら実行し、Output Data Gear を生成する @@ -35,20 +33,34 @@ message +## メタ計算 +- メタ計算 は通常の計算を実行するための計算 +- 信頼性の確保やメモリ管理、スレッド管理、CPU、GPU の資源管理等 +- Gears OS のメタ計算は通常の計算とは別の階層のメタレベルで行われる +- メタレベルは Code/Data Gear に対応して Meta Code/Data Gear で行われる + +## Meta Gear +- メタ計算 は Code Gear の接続間に行われる +- メタ計算 の処理も Code/Data Gear で実現する +- この Gear を Meta Code/Data Gearと呼ぶ + - Meta Code Gear は メタ計算 のプログラム部分 + - Meta Data Gear は Meta Code Gear で管理されるデータ部分 +- Gears OS は通常の Code/Data Gear から Meta Code/Data Gear 部分は見えないように実装を行う + +
+ message +
+ ## Continuation based C - Gears OS の実装は本研究室で開発している Continuation based C(CbC) を用いる -- CbC は処理を Code Gear を用いて記述する事を基本とする +- CbC は Code Gear を用いて記述する事を基本とする ## Continuation based C - Code Gear の定義は ``__code CS名`` で行う - Code Gear 間は ``goto CS名`` で移動する。この移動を継続と呼ぶ - Code Gear の継続は C の関数呼び出しとは異なり、戻り値を持たないためスタックの変更を行わない - このような環境を持たない継続を軽量継続と呼ぶ - -## Continuation based C -- このコードは cg0、cg1 の2つの Code Gear を定義している -- cg0 内の ``goto cg1`` でgj1 への継続を行っている - - ここで(a+b) が cg1 への入力になる +- 下のコード例では Code Gear を2つ定義し、 cg0 から cg1 への継続を示している ``` c __code cg0(int a, int b) { @@ -61,31 +73,13 @@ } ``` -## メタ計算 -- メタ計算 は通常の計算を実行するための計算 -- 信頼性の確保やメモリ管理、スレッド管理、CPU、GPU の資源管理等 -- Gears OS のメタ計算は通常の計算とは別の階層のメタレベルで行われる -- メタレベルは Code/Data Gear に対応して Meta Code/Data Gear で行われる - -## Meta Gear -- メタ計算 は Code Gearの接続の間に行われる -- メタ計算 の処理も Code/Data Gear で実現する -- この Gear を Meta Code/Data Gearと呼ぶ - - Meta Code Gear は メタ計算 のプログラム部分 - - Meta Data Gear は Meta Code Gear で管理されるデータ部分 -- Gears OS は通常の Code/Data Gear から Meta Code/Data Gear 部分は見えないように実装を行う - -
- message -
- ## Context - Context は接続可能な Code/Data Gear の集合を表現する Meta Data Gear -- 従来のOS のスレッドやプロセスに対応 - - 独立したメモリ空間を持つ +- 従来のOS のスレッドやプロセスに対応し、以下の要素を定義している + - 独立したメモリ空間 - Code Gear、 Data Gear へのポインタ - 並列実行用の Task 情報 -- を持つ + - Data Gear の型情報 - Gears OS ではメタ計算でこの Context を経由して Data Gear にアクセスする ## Data Gear の表現 @@ -115,18 +109,33 @@ - Gears OS では通常の Code Gear で必要な Data Gear を Context から取り出す stub Code Gear を用意する ``` c +// normal level Code Gear +__code cg0(struct Context* context, struct Integer integer, struct Queue queue) { + ... +} + +// meta level stub Code Gear +__code cg0_stub(struct Context* context) { + // get data index number + Integer integer = &context->data[context->dataNum]->Integer + // get enum data + Queue* queue = &context->data[Queue]->Queue; + // continuation Code Gear + goto cg0(context, integer, queue); +} ``` ## Context での stub Code Gear の記述の問題点 -- Context プログラム全体で使用する Code Gear と Data Gear の集合 -- 全ての Code と Data の組合せをContext から 全て展開し、その組合せを stub Code Gear に書く必要がある -- Gears OS を実装するに連れて、 stub Code Gear の記述が煩雑になる場所がでてきた +- stub Code Gear は Context から Code Gear と Data Gear の組合せを展開して記述する必要がある +- しかし、 Gears OS を実装するに連れて、 stub Code Gear の記述が煩雑になる場所がでてきた + - Context は全ての Code と Data の集合を表現しているため、全て組合せを展開する必要がある + - - そのため Gears OS のモジュール化する仕組みとして **Interface** を導入した ## Interface - Interface はある Data Gear と それに対する操作(API) を行う Code Gear の集合を表現する Meta Data Gear - stub Code Gear は実装した Code Gear で決まった形になるため、自動生成が可能である -- Interface を導入することで、 Stack や Queue などのデータ構造を使用と実装に分けて記述することが出来る +- Interface を導入することで、 Stack や Queue などのデータ構造を仕様と実装に分けて記述することが出来る - Interface は Java のインターフェース、 Haskell の型クラスに対応する ## Interface の定義 @@ -332,7 +341,7 @@ ## 並列構文 - 並列実行の Task の生成は新しく Context を生成し、実行する Code Gear、待ち合わせる Input Data Gear の数、Input/Output Data Gear への参照を設定する - この記述を直接書くと Meta Data Gear である Context を直接参照しているため、ノーマルレベルでの記述は好ましくない -- Task の設定の記述は煩雑な記述であるが、並列実行サれることを除けば通常の CbC の goto 文と同等である +- Task の設定の記述は煩雑な記述であるが、並列実行されることを除けば通常の CbC の goto 文と同等である - そこで Context を直接参照しない並列構文、 **par goto** 構文を新たに考案した - par goto 構文には引数として Input/Output Data Gear等を渡す - スクリプトによって Code Gear の Input/Output の数を解析する @@ -444,7 +453,7 @@ GPU - 43.496 + 127.018 GPU(kernel only) @@ -454,9 +463,8 @@ - 1 CPU と 32 CPU では 約27.1倍の速度向上が見られた -- GPU での実行は kernel のみの実行時間は32 CPU に比べて約7.2倍の速度向上 - - 通信時間を含めると 16 CPU より遅い - - 通信時間がオーバーヘッドになっている +- GPU 実行は kernel のみの実行時間は32 CPU に比べて約7.2倍の速度向上、通信時間を含めると 16 CPU より遅い +- 通信時間がオーバーヘッドになっている ## BitonicSort - 並列処理向けのソートアルゴリズム @@ -513,7 +521,7 @@ - 1 CPU と 32 CPU で約22.12倍の速度向上 -- GPU は通信時間を含めると 8 CPU の役1.16倍、 kernel のみの実行では 32 CPU の役11.48倍になった +- GPU は通信時間を含めると 8 CPU の約1.16倍、 kernel のみの実行では 32 CPU の約11.48倍になった - 現在の Gears OS の CUDA 実装では Output Data Gear を書き出す際に一度 GPU から CPU へ kernel の結果の書き出しを行っているため、差がでてしまった ## OpenMP との比較