annotate slide/slide.md @ 105:d14f18fef819

Fix
author Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
date Tue, 13 Feb 2018 14:13:42 +0900
parents 4b49908418e2
children 2d411c46eeb9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 title: Gears OS の並列処理
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 author: 伊波 立樹
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 profile: 琉球大学理工学研究科 河野研
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 lang: Japanese
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 code-engine: coderay
82
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
6
89
bc7d11285a4a Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
7 ## 並列処理の重要性
83
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
8 - 並列処理は現在主流のマルチコアCPU の性能を発揮するには重要なものになっている
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
9 - しかし、並列処理のチューニングや信頼性を保証するのは難しい
89
bc7d11285a4a Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
10 - 共通資源の競合などの非決定的な実行が発生するため、従来のテストやデバッグではテストしきれない部分が残ってしまう
83
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
11 - GPU などのアーキテクチャに合わせた並列プログラミングの記述
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
12
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
13 ## Gears OS
87
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
14 - 本研究室では処理の単位を Code Gear、 データの単位を Data Gear を用いて 信頼性が高い並列処理を行う Gears OS を開発している
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
15 - 並列処理の Task を Code Gear と実行するときに必要な Input Data Gear と出力するための Output Data Gear の組で表現される
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
16 - 計算をノーマルレベルとメタレベルに階層化、 信頼性と拡張性をメタレベルで保証する
83
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
17 - 並列処理の信頼性を通常の計算(ノーマルレベル) に保証
89
bc7d11285a4a Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
18 - CPU、GPU などの実行環境の切り替え、データ拡張等を提供
83
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
19
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
20 ## Gears OS
101
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
21 - 本研究では Gears OS の並列処理機構、並列処理構文(par goto)の実装、Gears OS を実装するにつれて必要なったモジュール化の導入を行う
87
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
22 - また、並列処理を行う例題を用いて評価、 OpenMP、 Go 言語との比較を行う
84
5060432275ea Fix interface
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
23
89
bc7d11285a4a Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
24 ## Code Gear/Data Gear
87
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
25 - Gears OS は Code Gear、 Data Gear という単位で構成される
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 - Code Gear はプログラムの処理そのものを表す
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 - Data Gear はデータそのものを表す
82
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
28 - Code Gear は必要な Input Data Gear が揃ったら実行し、Output Data Gear を生成する
101
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
29 - Code Gear と Input/Output Data Gear の対応から依存関係を解決し、Input Data Gear が揃った Code Gear の並列実行を行う
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 <div style="text-align: center;">
94
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
32 <img src="./images/codegear-datagear-dependency.svg" alt="message" width="600">
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 </div>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
87
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
35 ## メタ計算
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
36 - メタ計算 は通常の計算を実行するための計算
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
37 - 信頼性の確保やメモリ管理、スレッド管理、CPU、GPU の資源管理等
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
38 - Gears OS のメタ計算は通常の計算とは別の階層のメタレベルで行われる
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
39 - メタレベルは Code/Data Gear に対応して Meta Code/Data Gear で行われる
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
40
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
41 ## Meta Gear
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
42 - メタ計算 は Code Gear の接続間に行われる
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
43 - この Gear を Meta Code/Data Gearと呼ぶ
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
44 - Meta Code Gear は メタ計算 のプログラム部分
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
45 - Meta Data Gear は Meta Code Gear で管理されるデータ部分
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
46 - Gears OS は通常の Code/Data Gear から Meta Code/Data Gear 部分は見えないように実装を行う
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
47
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
48 <div style="text-align: center;">
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
49 <img src="./images/meta_cg_dg.svg" alt="message" width="850">
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
50 </div>
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
51
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 ## Continuation based C
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 - Gears OS の実装は本研究室で開発している Continuation based C(CbC) を用いる
87
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
54 - CbC は Code Gear を用いて記述する事を基本とする
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 ## Continuation based C
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
57 - CbC の Code Gear の定義は **__code CG名** で行う
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
58 - Code Gear 間は **goto CG名** で移動する。この移動を継続と呼ぶ
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 - Code Gear の継続は C の関数呼び出しとは異なり、戻り値を持たないためスタックの変更を行わない
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 - このような環境を持たない継続を軽量継続と呼ぶ
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
61 - 下記のコードでは Code Gear を2つ定義し、 cg0 から cg1 への継続を示している
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 ``` c
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 __code cg0(int a, int b) {
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 goto cg1(a+b);
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 }
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 __code cg1(int c) {
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 goto cg2(c);
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 }
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 ```
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 ## Data Gear の表現
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 - Data Gear は構造体を用いて定義する
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 - メタ計算では任意の Data Gear を一律に扱うため、全ての Data Gear は共用体の中で定義される
99
b6bad9440c4d Add images
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
76 - Data Gear をメモリに確保する際のサイズ情報はこの型から決定する
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 ``` c
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 /* data Gear define */
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 union Data {
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 struct Timer {
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 union Data* timer;
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 enum Code start;
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 enum Code end;
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 enum Code next;
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 } Timer;
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 struct TimerImpl {
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 double time;
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 } TimerImpl;
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 ....
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 };
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 ```
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93
94
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
94 ## Context
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
95 - Context は従来のOS のスレッドやプロセスに対応し、以下の要素をもっている Meta Data Gear
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
96 - Data Gear を確保するためのメモリ空間
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
97 - Code Gear の名前と関数ポインタとの対応表
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
98 - Code Gear は番号(enum)で指定する
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
99 - Code Gear が参照する Data Gear へのポインタ
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
100 - Code Gear と同じく Data Gear も番号で指定する
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
101 - 並列実行用の Task 情報
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
102 - Data Gear の型情報
101
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
103 - Gears OS ではメタ計算で Context を経由して Code/Data Gear に番号でアクセスする
94
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
104
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
105 ## stub Code Gear
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
106 - Data Gear にアクセスするには Context から番号を指定して行う
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 - だが、通常の Code Gear では Meta Data Gear である Context の参照は避ける必要がある
101
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
108 - Gears OS では Code Gear に接続する Data Gear を メタレベルである Context から取り出す処理を行う stub Code Gear を用意している
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109
94
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
110 <div style="text-align: center;">
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
111 <img src="./images/contextContinuation.svg" alt="message" width="600">
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
112 </div>
87
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
113
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 ## Interface
98
c54c5fe77216 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
115 - Gears OS を実装するに連れて、stub Code Gear の記述が煩雑になることがわかった
c54c5fe77216 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
116 - そこで、Gears OS のモジュール化する仕組みとして **Interface** を導入した
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 - Interface はある Data Gear と それに対する操作(API) を行う Code Gear の集合を表現する Meta Data Gear
99
b6bad9440c4d Add images
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
118 - stub Code Gear はInteface を実装した Code Gear で決まった形になるため、自動生成が可能
87
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
119 - Interface を導入することで、 Stack や Queue などのデータ構造を仕様と実装に分けて記述することが出来る
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 - Interface は Java のインターフェース、 Haskell の型クラスに対応する
82
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
121
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
122 ## Interface の定義
85
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
123 - Interface の定義には以下の内容を定義する
94
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
124 - 操作(API)の引数群の型
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
125 - 操作(API)自体のCode Gear の型
102
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
126
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
127 ``` c
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
128 typedef struct Queue<Impl>{
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
129 // Data Gear parameter
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
130 union Data* queue;
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
131 union Data* data;
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
132 __code next(...);
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
133 __code whenEmpty(...);
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
134
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
135 // Code Gear
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
136 __code clear(Impl* queue, __code next(...));
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
137 __code put(Impl* queue, union Data* data, __code next(...));
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
138 __code take(Impl* queue, __code next(union Data*, ...));
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
139 __code isEmpty(Impl* queue, __code next(...), __code whenEmpty(...));
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
140 } Queue;
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
141 ```
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
142
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
143 ## Interface の定義
105
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
144 - **__code next(...)** は継続を表している
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
145 - ... は可変長引数に相当する
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
146 - 可変長引数部分には呼び出し元の Interface の Data Gear が入る
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
147 - 継続の引数で Output Data Gear を返すことが出来る
85
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
148
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
149 ``` c
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
150 typedef struct Queue<Impl>{
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
151 // Data Gear parameter
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
152 union Data* queue;
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
153 union Data* data;
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
154 __code next(...);
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
155 __code whenEmpty(...);
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
156
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
157 // Code Gear
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
158 __code clear(Impl* queue, __code next(...));
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
159 __code put(Impl* queue, union Data* data, __code next(...));
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
160 __code take(Impl* queue, __code next(union Data*, ...));
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
161 __code isEmpty(Impl* queue, __code next(...), __code whenEmpty(...));
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
162 } Queue;
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
163 ```
82
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
164
105
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
165 ## Interface のインスタンスの生成
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
166 - Interface は API に Code Gear を番号を入れることにより、複数の実装ヲ行うことが出来る
85
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
167 - 代入する Code Gear を入れ替えることで別の実装を表現する
105
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
168 - Interface を表す Data Gear の生成は以下の関数で行われる
85
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
169
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
170 ``` c
85
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
171 Queue* createSingleLinkedQueue(struct Context* context) {
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
172 struct Queue* queue = new Queue(); // Allocate Queue interface
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
173 struct SingleLinkedQueue* singleLinkedQueue = new SingleLinkedQueue(); // Allocate Queue implement
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
174 queue->queue = (union Data*)singleLinkedQueue;
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
175 singleLinkedQueue->top = new Element();
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
176 singleLinkedQueue->last = singleLinkedQueue->top;
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
177 queue->clear = C_clearSingleLinkedQueue;
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
178 queue->put = C_putSingleLinkedQueue;
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
179 queue->take = C_takeSingleLinkedQueue;
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
180 queue->isEmpty = C_isEmptySingleLinkedQueue;
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
181 return queue;
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
182 }
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
183 ```
972eb5656f88 Add GearImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
184
105
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
185 ## Interface の使い方
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
186 - Interface を利用した Code Gear への継続は `goto interface->method` で行われる
105
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
187 - **interface** は Interface を表す Data Gear、 **method** は実装した Code Gear に対応する
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
188
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
189 ``` c
94
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
190 __code code1() {
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
191 Queue* queue = createSingleLinkedQueue(context);
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
192 Node* node = new Node();
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
193 node->color = Red;
103
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
194 goto queue->put(node, code2);
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
195 }
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
196 ```
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
197
105
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
198 ## メタレベルでの Interface の呼び出しの詳細
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
199 - Interface を利用した Code Gear の継続はスクリプトによってメタレベルの記述に変換される
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
200 - 変換後は Context を参照するコードが生成される
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
201 - Gearef マクロは Context から Interface の引数格納用の Data Gear を取り出す
105
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
202 - Context には Interface の引数を渡すための Data Gear が予め用意されている
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
203 - goto meta では Interface の Code Gear の番号を Code Gear へのポインタに変換して継続を行う
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
204 - goto meta にはメタ計算をいれることができる
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
205
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
206 ``` c
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
207 __code code1(struct Context *context) {
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
208 Queue* queue = createSingleLinkedQueue(context);
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
209 Node* node = &ALLOCATE(context, Node)->Node;
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
210 node->color = Red;
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
211 Gearef(context, Queue)->queue = (union Data*) queue;
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
212 Gearef(context, Queue)->data = (union Data*) node;
103
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
213 Gearef(context, Queue)->next = C_code2;
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
214 goto meta(context, queue->put);
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
215 }
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
216 ```
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
217
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
218 ## Interface での stub Code Gear
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
219 - メタ計算で格納された引数は stub Code Gear で Code Gear に渡される
99
b6bad9440c4d Add images
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
220 - Interface を実装した Code Gear は Interface の定義から stub Code Gear の自動生成が可能
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
221
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
222 ``` c
101
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
223 // implement put code gear
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
224 __code putSingleLinkedQueue(struct Context *context,struct SingleLinkedQueue* queue,
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
225 union Data* data, enum Code next) {
101
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
226 ...
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
227 }
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
228
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
229 // generated by script
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
230 __code putSingleLinkedQueue_stub(struct Context* context) {
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
231 SingleLinkedQueue* queue = (SingleLinkedQueue*)GearImpl(context, Queue, queue);
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
232 Data* data = Gearef(context, Queue)->data;
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
233 enum Code next = Gearef(context, Queue)->next;
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
234 goto putSingleLinkedQueue(context, queue, data, next);
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
235 }
105
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
236
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
237 __code meta(struct Context* context, enum Code next) {
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
238 // printf("meta %d\n",next);
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
239 goto (context->code[next])(context);
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
240 ```
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
241
82
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
242 ## 並列処理の構成
94
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
243 - 今回は並列処理機構である
92
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
244 - Task
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
245 - TaskManager
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
246 - Worker の生成、依存関係を解決したTask を Worker に送信する
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 - Worker
92
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
248 - SynchronizedQueue から Task を一つずつ取得し、実行する
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
249 - Worker 毎に POSIX Therad などを生成し、それぞれのスレッドで Code Gear を実行する
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
250 - SynchronizedQueue
104
4b49908418e2 Fix typo
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
251 - マルチスレッド環境でもデータの同期処理が行われる Queue
101
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
252 - をInterface を用いて実装した
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
253
92
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
254 ## Task
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
255 - Gears OS では Context が並列実行の Task に相当する
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
256 - Context は Task用の情報として以下の情報をもっている
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
257 - 実行する Code Gear
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
258 - Input/Output Data Gear の格納場所
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
259 - 待っている Input Data Gear の数
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
260
82
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
261 ## TaskManger
92
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
262 - Worker を作成、終了処理を行う
103
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
263 - CPU、 GPU の数分生成する
82
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
264 - 依存関係を解決した Task を各 Worker の Queue に送信する
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
265
90
a9885c038bb6 Add TaskManager describe
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
266 <div>
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
267 <img src="./images/sendTask.svg" alt="message" style="float: left;width: 50%;">
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
268 <div style="float: left; width: 50%;">
90
a9885c038bb6 Add TaskManager describe
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
269 <ol>
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
270 <li value="0">Task を Input Data Gear としてTaskManager の spawn を呼び出す</li>
99
b6bad9440c4d Add images
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
271 <li value="1">Task が待っている Data Gear のカウンタである IDGCount をチェックする</li>
b6bad9440c4d Add images
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
272 <li value="2">IDGCount が0の場合 Data Gear が 揃っているので Worker の Queue に Task を送信する</li>
90
a9885c038bb6 Add TaskManager describe
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
273 </ol>
a9885c038bb6 Add TaskManager describe
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
274 </div>
a9885c038bb6 Add TaskManager describe
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
275 <div style="clear: both;"></div>
82
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
276 </div>
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
277
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 ## Worker
103
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
279 - 初期化時に Worker 用の Context を生成し、Code Gear を実行していく
94
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
280 - TaskManager から送信された Task を一つずつ取得して実行する
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
281
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
282 <div>
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
283 <img src="./images/workerRun.svg" alt="message" style="float: left;width: 50%;">
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
284 <div style="float: left; width: 50%;">
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
285 <ol>
103
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
286 <li>Worker は Queue から Task(Context)を取得する</li>
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
287 <li>Worker の Context からTask の Context へ入れ替える</li>
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
288
92
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
289 <li>Task に設定されている Code Gear を実行</li>
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
290 <li>Task の Output Data Gear の書き出し</li>
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
291 <li>Task Context から Worker の Context へ入れ替える</li>
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
292 <li>Worker は再び Queue から Task を取得する</li>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
293 </ol>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
294 </div>
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
295 <div style="clear: both;"></div>
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
296 </div>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
297
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
298 ## Synchronized Queue
99
b6bad9440c4d Add images
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
299 - Worker で使用される Queue は Task を送信するTaskManager と Task を取得する Worker 毎で操作される
b6bad9440c4d Add images
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
300 - そのためマルチスレッドでのデータの同期処理を行える SynchronizedQueue として実装する
94
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
301 - Gears OS では CAS(Check and Set、 Compare and Swap) を使用した実装を行った
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
302 - CAS は値を更新する際に更新前の値と実際に保存されているメモリ番地の値を比較し、変化がなければ値を更新する
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
303 - メモリ番地の値が変わっているなら、もう一度 CAS を行う
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
304
94
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
305 <div style="text-align: center;">
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
306 <img src="./images/synchronizedQueue.svg" alt="message" width="600">
e71d4ea8a616 Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
307 </div>
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
308
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
309 ## 依存関係の解決
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
310 - 依存関係の解決は Data Gear がメタレベルで持っている Queue を使用する
92
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
311 - この Queue には Data Gear に依存関係がある Context が格納されている
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
312
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
313 <div>
99
b6bad9440c4d Add images
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
314 <img src="./images/dependency.svg" alt="message" style="float: left;width: 50%;">
b6bad9440c4d Add images
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
315 <div style="float: left; width: 50%;">
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
316 <ol>
92
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
317 <li>Task に設定されている Code Gear を実行する</li>
99
b6bad9440c4d Add images
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
318 <li>Output Data Gear の書き出し処理を行う際にメタレベルの Queue を参照する</li>
b6bad9440c4d Add images
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
319
102
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
320 <li>依存関係にある Task を取り出し、IDGCount をデクリメントする</li>
99
b6bad9440c4d Add images
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
321
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
322 </ol>
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
323 </div>
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
324 <div style="clear: both;"></div>
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
325 </div>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
326
102
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
327 - IDGCountの値が0になった実行可能な Task は TaskManager を通して Worker に送信される
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
328
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
329 ## 並列構文
99
b6bad9440c4d Add images
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
330 - 並列実行する際は新しく Context を生成し、実行する Code Gear、待ち合わせる Input Data Gear の数、Input/Output Data Gear への参照を設定する
102
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
331 - この記述を直接書くと Meta Data Gear である Context を直接参照しているため、ノーマルレベルでの記述としては好ましくない
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
332 - Context の設定は煩雑な記述だが、並列実行されることを除けば通常の CbC の goto 文と同等
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
333 - そこで Context を直接参照しない並列構文、 **par goto** 構文を新たに考案した
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
334
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
335 ## par goto 構文
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
336 - par goto 構文を記述すると新しく Context を生成し、TaskManager を通して Worker に送信される
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
337 - par goto 構文には引数として Input/Output Data Gear等を渡す
102
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
338 - スクリプトによって Code Gear の Input/Output の数を解析し、待っている Input Data Gear の数を設定する
100
d340d73e3cd6 Fix Slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
339 - 並列実行される Task は **__exit** に継続することで終了する
102
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
340 - Gears OS の Task はOutput Data Gear を書き出す処理で終了するため **__exit** に直接継続せずに Data Gear を書き出す処理に継続する
100
d340d73e3cd6 Fix Slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
341 - par goto 構文は通常のプログラミングの関数呼び出しのように扱える
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
342
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
343 ``` c
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
344 __code code1(Integer *integer1, Integer * integer2, Integer *output) {
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
345 par goto add(integer1, integer2, output, __exit);
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
346 goto code2();
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
347 }
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
348 ```
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
349
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
350 ## CUDA への対応
100
d340d73e3cd6 Fix Slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
351 - Gears OS は GPU での実行もサポートしている
d340d73e3cd6 Fix Slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
352 - GPU で性能を出すためには GPU に合わせた並列プログラミングが必要になる
89
bc7d11285a4a Fix slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
353 - CUDA は GPU を Device、 CPU を Host として定義する
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
354 - CUDA は処理の最小の単位を thread とし、それをまとめた block を展開し Device 上で実行されるプログラム(Kernel)を実行する
102
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
355 - 今回、CUDA に合わせた並列処理機構である CUDAWorker、 CUDAExecutor をInterface を用いて実装し、 CPU、GPU間のデータのマッピングのために CUDABuffer を用意した
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
356
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
357 ## CUDAWorker
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
358 - CUDA で実行する Task を受け取る Worker
101
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
359 - 初期化の際に CUDA ライブラリの初期化や CUDAExecutor の生成を行う
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
360
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
361 ## CUDAExecutor
101
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
362 - CUDAExecutor は Executor Interface を実装した Data Gear
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
363 - 以下の Code Gear を実装している
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
364 - HostからDevice へのデータの送信(read)
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
365 - kernel の実行(exec)
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
366 - Device から Host へのデータの書き出し(write)
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
367
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
368 ``` c
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
369 typedef struct Executor<Impl>{
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
370 union Data* Executor;
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
371 struct Context* task;
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
372 __code next(...);
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
373 // method
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
374 __code read(Impl* executor, struct Context* task, __code next(...));
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
375 __code exec(Impl* executor, struct Context* task, __code next(...));
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
376 __code write(Impl* executor, struct Context* task, __code next(...));
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
377 }
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
378 ```
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
379
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
380 ## CUDABuffer
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
381 - Host、Device 間でデータのやり取りをする際、 Gears OS での Data Gear をDevice 用にマッピングする必要がある
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
382 - CUDA Buffer ではそのマッピングを行う
97
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
383 - このマッピングは Task に設定されている stub Code Gear で行われる
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
384
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
385 <div style="text-align: center;">
91
66b8451005cd Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
386 <img src="./images/cudaDataArchitecture.svg" alt="message" width="400">
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
387 </div>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
388
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
389 ## CUDA での呼び出し
100
d340d73e3cd6 Fix Slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
390 - Gears OS では Task に設定している Code Gear の stub Code Gear で CUDA実行を切り替える
d340d73e3cd6 Fix Slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
391 - CUDABuffer でのマッピング、実行する kernel の読み込みは stub Code Gear で行われる
d340d73e3cd6 Fix Slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
392 - CUDA で実行する際は stub Code Gear に対応する Code Gear ではなく、 CUDAExecutor の Code Gear に継続する
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
393
97
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
394 <div style="text-align: center;">
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
395 <img src="./images/gotoCUDAExecutor.svg" alt="message" width="600">
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
396 </div>
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
397
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
398 ## Gears OS の評価
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
399 - 並列処理のタスクの例題として Twice と BitonicSort を実装し、 以下の環境で測定を行った
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
400 - CPU 環境
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
401 - Model : Dell PowerEdgeR630
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
402 - Memory : 768GB
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
403 - CPU : 2 x 18-Core Intel Xeon 2.30GHz
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
404 - GPU 環境
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
405 - GPU : GeForce GTX 1070
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
406 - Cores : 1920
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
407 - ClockSpeed : 1683MHz
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
408 - Memory Size : 8GB GDDR5
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
409
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
410 ## Twice
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
411 - Twice は与えられた整数配列を2倍にする例題である
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
412 - 並列実行の依存関係がなく、並列度が高い課題である
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
413 - 要素数 2^27
103
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
414 - CPU での実行時は要素数 2^27 を 2^6 個に分割して Task を生成する
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
415 - GPU での実行時は1次元の block 数を 2^15、 block 内の thread 数を 2^10 で kernel を実行
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
416
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
417 ## Twice の結果
100
d340d73e3cd6 Fix Slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
418 - GPU は CPU との通信時間を含めた時間、 GPU(kernel only) は kernel のみの実行時間を示している
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
419 - 1 CPU と 32 CPU では 約27.1倍の速度向上が見られた
100
d340d73e3cd6 Fix Slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
420 - GPU は通信時間を含めると 8 CPU の約1.25倍、 kernel のみの実行では 32 CPU の約7.22倍になった
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
421 - 通信時間がオーバーヘッドになっている
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
422
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
423 <table border="1" align='center' width='50%'>
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
424 <tbody>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
425 <tr>
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
426 <td style="text-align: center;">Processor</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
427 <td style="text-align: center;">Time(ms)</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
428 </tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
429 <tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
430 <td style="text-align: center;">1 CPU</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
431 <td style="text-align: right;">1181.215</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
432 </tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
433 <tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
434 <td style="text-align: center;">2 CPUs</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
435 <td style="text-align: right;">627.914</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
436 </tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
437 <tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
438 <td style="text-align: center;">4 CPUs</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
439 <td style="text-align: right;">324.059</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
440 </tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
441 <tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
442 <td style="text-align: center;">8 CPUs</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
443 <td style="text-align: right;">159.932</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
444 </tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
445 <tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
446 <td style="text-align: center;">16 CPUs</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
447 <td style="text-align: right;">85.518</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
448 </tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
449 <tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
450 <td style="text-align: center;">32 CPUs</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
451 <td style="text-align: right;">43.496</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
452 </tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
453 <tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
454 <td style="text-align: center;">GPU</td>
87
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
455 <td style="text-align: right;">127.018</td>
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
456 </tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
457 <tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
458 <td style="text-align: center;">GPU(kernel only)</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
459 <td style="text-align: right;">6.018</td>
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
460 </tr>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
461 </tbody>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
462 </table>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
463
82
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
464 ## BitonicSort
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
465 - 並列処理向けのソートアルゴリズム
103
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
466 - 決まった2点間の要素の入れ替えを並列に行うことでソーティングを進めていく
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
467 - 要素数 2^24
103
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
468 - CPU での実行時は要素数 2^24 を 2^6 個に分割して Task を生成する
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
469 - GPU での実行時は1次元の block 数を 2^14、 block 内の thread 数を 2^10 で kernel を実行
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
470
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
471 ## BitonicSort の結果
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
472 - 1 CPU と 32 CPU で約22.12倍の速度向上
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
473 - GPU は通信時間を含めると 8 CPU の約1.16倍、 kernel のみの実行では 32 CPU の約11.48倍になった
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
474 - 現在の Gears OS の CUDA 実装では Output Data Gear を書き出す際に一度 GPU から CPU へ kernel の結果の書き出しを行っているため、差がでてしまった
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
475
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
476 <table border="1" align='center' width='50%'>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
477 <tbody>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
478 <tr>
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
479 <td style="text-align: center;">Processor</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
480 <td style="text-align: center;">Time(s)</td>
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
481 </tr>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
482 <tr>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
483 <td style="text-align: center;">1 CPU</td>
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
484 <td style="text-align: right;">41.416</td>
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
485 </tr>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
486 <tr>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
487 <td style="text-align: center;">2 CPUs</td>
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
488 <td style="text-align: right;">23.340</td>
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
489 </tr>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
490 <tr>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
491 <td style="text-align: center;">4 CPUs</td>
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
492 <td style="text-align: right;">11.952</td>
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
493 </tr>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
494 <tr>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
495 <td style="text-align: center;">8 CPUs</td>
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
496 <td style="text-align: right;">6.320</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
497 </tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
498 <tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
499 <td style="text-align: center;">16 CPUs</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
500 <td style="text-align: right;">3.336</td>
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
501 </tr>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
502 <tr>
86
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
503 <td style="text-align: center;">32 CPUs</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
504 <td style="text-align: right;">1.872</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
505 </tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
506 <tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
507 <td style="text-align: center;">GPU</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
508 <td style="text-align: right;">5.420</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
509 </tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
510 <tr>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
511 <td style="text-align: center;">GPU(kernel only)</td>
44f592c43324 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
512 <td style="text-align: right;">0.163</td>
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
513 </tr>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
514 </tbody>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
515 </table>
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
516
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
517
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
518 ## OpenMP との比較
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
519 - OpenMP は C、 C++ のプログラムにアノテーションを付けることで並列化を行う
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
520 - データの待ち合わせ処理はバリア等のアノテーションで記述する
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
521 - Gears OS は並列処理を par goto 構文、 データの待ち合わせを Code Gear と Input/Ouput Data Gear の関係で行う
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
522
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
523 ``` c
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
524 #pragma omp parallel for
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
525 for(int i = 0; i < length; i++) {
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
526 a[i] = a[i] * 2;
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
527 }
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
528 ```
77
161db9fd907a Add slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
529
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
530 ## Go 言語との比較
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
531 - Go 言語は並列実行を **go funciton(argv)** の構文で行う。 この実行を goroutine と呼ぶ
101
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
532 - goroutine 間のデータの待ち合わせはチャネルというデータ構造で行う
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
533 - チャネルでのデータの送受信は **<-** を使用して行うため、簡潔に書くことが出来る
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
534 - しかし、 チャネルは複数の goroutine で共有されるため、データの送信元が推測しづらい
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
535 - Gears OS では goroutine は par goto 文とほぼ同等に扱える
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
536 - par goto 文では書き出す Data Gear を指定するため、書き出し元が推測しやすい
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
537
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
538 ``` go
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
539 c := make(chan []int)
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
540 for i :=0; i < *split; i++ {
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
541 // call goroutine
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
542 go twice(list, prefix, i, c);
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
543 }
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
544
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
545 func twice(list []int, prefix int, index int, c chan []int) {
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
546 for i := 0; i < prefix; i++ {
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
547 list[prefix*index+i] = list[prefix*index+i] * 2;
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
548 }
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
549 c <- list
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
550 }
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
551 ```
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
552
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
553 ## まとめ
97
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
554 - Gears OS の並列処理機構を Interface を用いて実装を行った
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
555 - Interface を導入することで、見通しの良し Gears OS のプログラミングが可能となった
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
556 - par goto 構文を導入することで、ノーマルレベルで並列処理の記述が可能になった
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
557 - 2つの例題である程度の台数効果が出ることを確認した
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
558
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
559 ## 今後の課題
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
560 - Gears OS の並列処理の信頼性の保証、チューニングを行う
102
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
561 - Gears OS では証明とモデル検査をメタレベルで実現することで信頼性を保証する
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
562 - 証明は CbC のプログラムを証明支援系の Agda に対応して行う。 並列処理の信頼性を保証するには SynchronizedQueue の証明を行う必要がある
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
563 - モデル検査は CbC で記述された モデル検査器である akasha を使用して行う。 モデル検査の方針としては Code Gear の並列実行を擬似並列で実行し、全ての組合せを列挙する方法で行う
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
564 - 現在の CUDA 実装では CPU、GPU 間のデータの通信コストがかかってしまうことが例題からわかった
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
565 - Meta Data Gear に Data Gear が CPU、 GPU のどこで所持されているのかを持たせ、 GPU の Data Gear が CPU で必要になったときに始めてデータの通信を行う
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
566
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
567 ## 今後の課題
97
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
568 - OpenMP、 Go 言語で Twice を実装し、 Gears OS の性能比較を行った
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
569 - その結果、 Gears OS が 1CPU での動作が遅いということがわかった。
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
570 - par goto 文を使用する度に Context を生成するため、 ある程度の時間がかかってしまう
100
d340d73e3cd6 Fix Slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
571 - モデル検査で par goto で実行する Code Gear のフローを解析し、処理が軽い場合は Context を生成せずに関数呼出しを行う等の最適化が必要
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
572
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
573 <div style="text-align: center;">
97
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
574 <img src="./images/compareExamples.svg" alt="message" width="500">
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
575 </div>
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
576
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
577 ## データ並列
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
578 - data並列はあるデータ構造がサブデータへ分割することが可能で、各サブデータに行う処理が同じ場合に有効な並列処理手法
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
579 - Gears OS ではdata 並列は par goto 構文に**iterate(分割数)**を追加することで可能になる
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
580 - データ並列の Task は CPU で実行する際は Task にインデックスを付与して分割数分コピーして実行する
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
581 - CUDA の場合は Kernel を実行する際にパラメーターとして分割数を渡す
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
582
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
583 ## Task 間の同期処理
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
584 - Context 間での同期処理を行うために Semaphore を実装
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
585 - Semaphore はContext 停止用の待ち Queue を持つ
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
586
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
587 <div style="text-align: center;">
8596c1e30858 Update cudaDataArchitecture.graffle
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
588 <img src="./images/semaphoreSequence.svg" alt="message" width="700">
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
589 </div>
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
590
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
591 <!--
92
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
592 ## OpenMP との比較
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
593 - OpenMP で Twice を実装し、速度比較を行った
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
594 - OpenMP は 1CPU と 32CPU で約10.8倍の速度向上が見られた
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
595 - 一方 Gears OS では約27.1倍と台数効果は高くなっている
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
596 - しかし、 Gears OS は 1CPU の実行速度が OpenMP に比べて大幅に遅くなっている
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
597
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
598 <div style="text-align: center;">
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
599 <img src="./images/vsopenmp.svg" alt="message" width="500">
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
600 </div>
0050ad0b4dd7 Fix fig
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
601
88
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
602 ## Go 言語との比較
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
603 - Go 言語でも OpenMP と同様に Twice を実装し、速度比較を行った
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
604 - Go 言語は 1CPU と 32CPU で約4.33倍の速度向上が見られた
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
605 - OpenMP と同様に台数効果自体は Gears OS が高いが、 1CPU での実行時間は Go 言語が大幅に速い
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
606
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
607 <div style="text-align: center;">
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
608 <img src="./images/vsgo.svg" alt="message" width="500">
3c127f675c45 Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
609 </div>
96
14bd1b466bcc Update slide
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
610 -->