comparison presen/index.md @ 19:40686d8028c5

edit
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Tue, 26 May 2015 03:46:51 +0900
parents
children bb2bf03f09b4
comparison
equal deleted inserted replaced
18:9159562b324c 19:40686d8028c5
1 title: Monad に基づくメタ計算を基本とする Gears OS の設計
2 author: 小久保翔平
3 profile: 琉球大学大学院修士2年
4
5 # Gears OS の並列性
6 処理とデータの単位として Code Gear, Data Gear を用いる
7
8  並列実行の単位となる
9
10  処理とデータの関係から依存関係を決定
11
12 Many Core CPU, GPU, Xeon Phi などを有効に利用するためにはそれぞれのアーキテクチャに合わせた記述が必要
13
14 Gears OS では Gear を用いて並列実行環境に合わせた設計・実装を行う
15
16 # Gears OS の柔軟性
17 Gear を追加することでデータ拡張や機能の追加が可能
18
19 バージョンが異なる Gears OS でもの Gear 共通部分を用いて通信を行う
20
21 # Gears OS の信頼性
22 Code/Data Gear にはメタ計算に必要な情報として Meta Code/Data Gear が付属されている
23
24  関数型言語における Monad に相当
25
26 プログラムに対してメタレベルで Model Checking する
27
28  元のプログラムに影響を与えない
29
30  並列実行時のデッドロック検出
31
32  Code Gear 間での型検査
33
34 # Cerium
35 Cerium では Task という分割された処理を依存関係に沿って並列実行する
36
37 Task 同士の依存関係はプログラマ自身が記述する
38
39  Task の種類が増えるほど記述が複雑になる
40
41 Task 間の依存関係にのみ着目
42
43  データの依存関係を正しく保証しない
44
45 Task が取り扱うデータに型情報がない
46
47  汎用ポインタを型変換して利用
48
49  型検査できない
50
51 # Alice
52 Alice では処理とデータの単位として Code Segment, Data Segment を用いる
53
54 処理とデータの関係から Code Segment 間の依存関係が決定
55
56 Data Segment を待ち合わせて Code Segment を実行することを Computaion と定義
57
58 Computaion を実現する Computaion を Meta Computaion と定義
59
60  切断や再接続時の処理、データの圧縮の機能などが相当
61
62  通常の Computaion に影響しない
63
64  Meta Computaion 自体は Alice で記述されていない
65
66 Data Segment にアクセスする API が設計上の問題で複雑化している
67
68 # Code/Data Gear
69 通常レベルとして Code/Data Gear を用いる
70
71  ポインタを扱わない
72
73 Code Gear は処理そのもの
74
75  OpenCL/CUDA の kernel に相当
76
77  接続された複数の Input Data Gear を参照
78
79  単一または複数の Output Data Gear に書き出す
80
81  自分が知らない Code/Data Gear は名前で指し示す
82
83 Data Gear はデータそのもの
84
85  C の構造体で表現
86
87  Primitive Data Type を格納
88
89 # Meta Code/Data Gear
90 メタレベルとして Meta Code/Data Gear を用いる
91
92  ポインタを扱う
93
94 各 Gear の関連付け
95
96 Model Checking
97
98 平行制御
99
100 # Gear を用いた List の表現
101 通常 List は要素と次へのポインタを持つ構造体で表現する
102
103 Gears OS では任意の要素を持つ Data Gear と次へのポインタを持つ Meta Data Gear の組によって List を表現する
104
105 ![List](pictures/List.svg){: style="width: 70%"}
106
107 # Code/Data Gear の性質
108 ポインタの使用を通常レベルとメタレベルで分離
109
110  ポインタ関連のセキュリティフローを防止
111
112 処理が Code/Data Gear に閉じている
113
114  接続された Gear のみに干渉できる
115
116  処理の実行時間、メモリ使用量が予測可能
117
118 # Gears OS における Meta Computation
119 関数型言語における Monad に基づいて Meta Computation を行う
120
121  Monad を用いる手法は Moggi らが提案
122
123 Gears OS の Meta Computation は Meta Code/Data Gear を用いる
124
125 # 実装言語
126 本研究室で開発している Continuation based C(CbC) で実装
127
128  LLVM をバックエンドした CbC コンパイラを用いる
129
130 CbC ではプログラムを Code Segment, Data Segment という単位で記述
131
132
133 Code Segment 間の処理の移動は goto を用いた軽量継続
134
135  末尾最適化を強制
136
137 # Context
138 実行に必要な情報をまとめた Context を生成
139
140  OS の Process, Thread に相当
141
142  メタレベル
143
144 Code Gear の名前とポインタの対応
145
146 Data Gear を Allocate するための情報
147
148 Code Gear が参照する Data Gear へのポインタ
149
150 Data Gear に格納される Data Type の情報
151
152 ![arch](pictures/GearsOS_arch.svg){: style="width: 50%"}
153
154 # Context
155 ```
156 /* Context definition */
157 enum Code {
158 Code1,
159 Code2,
160 Allocator,
161 };
162 ```
163
164 実行可能な Code Gear の名前を enum Code で宣言
165
166 初期化時に名前と関数ポインタを対応付ける
167
168 # Context
169 ```
170 enum UniqueData {
171 Allocate,
172 Tree,
173 };
174 ```
175
176 初期化時に確保する Data Gear を enum UniqueData で宣言
177
178 # Context
179 ```
180 struct Context {
181 int codeNum;
182 __code (**code) (struct Context *);
183 void* heap_start;
184 void* heap;
185 long dataSize;
186 int dataNum;
187 union Data **data;
188 };
189 ```
190
191 実行可能な Code Gear の数を示す codeNum
192
193 実行可能な Code Gear へのポインタ code
194
195 Data Gear の Allocate 用のポインタ heap_start, heap, dataSize
196
197 Data Gear の数を示す dataNum
198
199 Data Gear へのポインタ data
200
201 # Data Gear
202 ```
203 union Data {
204 struct Tree {
205 // Tree member definition
206 } tree;
207 struct Node {
208 // Node member definition
209 } node;
210 struct Allocate {
211 long size;
212 enum Code next;
213 } allocate;
214 };
215 ```
216
217 Data Gear は C の共用体と構造体を用いた表現する
218
219 # Persistent Data Gear
220 Data Gear の管理には木構造を用いる
221
222 非破壊で構成する
223
224  平行して読み書き・参照を行うことが可能
225
226  変更前の木構造をすべて保持しているので過去のデータにアクセス可能
227
228 ![arch](pictures/GearsOS_arch.svg){: style="width: 50%"}
229
230 # Worker
231 Worker は Synchronized Queue から実行する Code Gear を取得
232
233 実行に必要な Data Gear は Persistent Data Gear から読み込む
234
235 処理が完了したら Persistent Data Gear に書き込む
236
237 ![arch](pictures/GearsOS_arch.svg){: style="width: 50%"}
238
239 # Synchronized Queue
240 List を表現する Code/Data Gear に CAS(Compare and Swap) を行う Meta Code/Data Gear を接続することで Synchronized Queue を実現する
241
242 Gears OS の機能は状態遷移図とクラスダイアグラムを組み合わせた GearBox という図で表現する
243
244 M:receiver/sender が CAS を行う Meta Code Gear となる
245
246 ![sync](pictures/synchronizedQueue.svg){: style="width: 80%"}
247
248 # Code Gear の例
249 ```
250 // Code Gear
251 __code code1(struct Context* context) {
252 context->data[Allocate]->allocate.size = sizeof(struct Node);
253 context->data[Allocate]->allocate.next = Code2;
254 goto meta(context, Allocate);
255 }
256 ```
257
258 必要な情報を Data Gear に書き込み Allocate を行う Code Gear に接続する Code Gear
259
260 ポインタを扱っており設計思想と異なる
261
262 # Code Gear の例
263 ```
264 // Code Gear
265 __code code1(Allocate allocate) {
266 allocate.size = sizeof(long);
267 allocate.next = Code2;
268 goto Allocate(allocate); // goes through meta
269 }
270 ```
271
272 前の Code Gear として解釈するように CbC コンパイラを改良する
273
274 # 比較
275 Code Gear
276
277  Cerium の Task
278
279  Alice の Code Segment
280
281  OpenCL/CUDA の kernel
282
283 Data Gear
284
285  Alice の Data Segment
286
287  Ceirum, OpenCL/CUDA には同等のものはない
288
289 Gears OS は Alice と同様に処理とデータの関係から依存関係を決定
290
291 Cerium, OpenCL/CUDA では処理同士の依存関係を記述する
292
293  データの依存関係を保証できない
294
295 # 今後の課題
296 Cerium と同様の例題を動かし比較・評価
297
298  Sort
299
300  Word Count
301
302  FFT
303
304 GPGPU のサポート
305
306 # まとめ
307 処理とデータの関係から処理同士の依存関係を解決し、並列実行するように設計を行なった
308
309 Gear という単位を用いて記述することでプログラムを柔軟に変更することを可能とした
310
311 Meta Code/Data Gear を用いて Meta Computation を実現する
312
313 Meta Computation の一つとして Model Checking を行う