changeset 87:015f9933b245

Fix
author Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
date Mon, 12 Feb 2018 03:16:15 +0900
parents 44f592c43324
children 3c127f675c45
files paper/interface.tex paper/master_paper.pdf slide/slide.md
diffstat 3 files changed, 54 insertions(+), 46 deletions(-) [+]
line wrap: on
line diff
--- 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 を導入した。
Binary file paper/master_paper.pdf has changed
--- 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 @@
     <img src="./images/codeGear_dataGear_dependency.svg" alt="message" width="600">
 </div>
 
+## メタ計算
+- メタ計算 は通常の計算を実行するための計算
+- 信頼性の確保やメモリ管理、スレッド管理、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 部分は見えないように実装を行う
+
+<div style="text-align: center;">
+    <img src="./images/meta_cg_dg.svg" alt="message" width="850">
+</div>
+
 ## 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 部分は見えないように実装を行う
-
-<div style="text-align: center;">
-    <img src="./images/meta_cg_dg.svg" alt="message" width="850">
-</div>
-
 ## 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 @@
     </tr>
     <tr>
       <td style="text-align: center;">GPU</td>
-      <td style="text-align: right;">43.496</td>
+      <td style="text-align: right;">127.018</td>
     </tr>
     <tr>
       <td style="text-align: center;">GPU(kernel only)</td>
@@ -454,9 +463,8 @@
 </table>
 
 - 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 @@
 </table>
 
 - 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 との比較