12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 <!DOCTYPE HTML>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 <html lang="en-US">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 <head>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 <title>Monad に基づくメタ計算を基本とする Gears OS の設計</title>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 <meta charset="UTF-8">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 <meta name="viewport" content="width=1274, user-scalable=no">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 <meta name="generator" content="Slide Show (S9)">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 <meta name="author" content="小久保翔平">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 <link rel="stylesheet" href="themes/ribbon/styles/style.css">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 </head>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 <body class="list">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 <header class="caption">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 <h1>Monad に基づくメタ計算を基本とする Gears OS の設計</h1>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 <p>小久保翔平</p>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 <div class="slide cover" id="Cover"><div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 <header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 <h2>Monad に基づくメタ計算を基本とする Gears OS の設計</h2>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 <h3 id="author">小久保翔平</h3>
|
19
|
22 <h3 id="profile">琉球大学大学院修士2年</h3>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 <!-- todo: add slide.classes to div -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 <!-- todo: create slide id from header? like a slug in blogs? -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 <div class="slide" id="2"><div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 <header>
|
19
|
33 <h1 id="gears-os-">Gears OS の並列性</h1>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 <!-- === begin markdown block ===
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 generated by markdown 1.1.1 on Ruby 2.0.0 (2013-02-24) [x86_64-darwin12.3.0]
|
20
|
38 on 2015-05-26 17:03:53 +0900 with Markdown engine kramdown (1.4.0)
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 using options {}
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 <!-- _S9SLIDE_ -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43
|
19
|
44 <p>処理とデータの単位として Code Gear, Data Gear を用いる</p>
|
|
45
|
|
46 <p> 並列実行の単位となる</p>
|
17
|
47
|
19
|
48 <p> 処理とデータの関係から依存関係を決定</p>
|
17
|
49
|
19
|
50 <p>Many Core CPU, GPU, Xeon Phi などを有効に利用するためにはそれぞれのアーキテクチャに合わせた記述が必要</p>
|
|
51
|
|
52 <p>Gears OS では Gear を用いて並列実行環境に合わせた設計・実装を行う</p>
|
17
|
53
|
|
54
|
|
55
|
|
56 </section>
|
|
57 </div></div>
|
|
58
|
|
59 <div class="slide" id="3"><div>
|
|
60 <section>
|
|
61 <header>
|
19
|
62 <h1 id="gears-os--1">Gears OS の柔軟性</h1>
|
17
|
63 </header>
|
|
64 <!-- _S9SLIDE_ -->
|
|
65
|
19
|
66 <p>Gear を追加することでデータ拡張や機能の追加が可能</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67
|
19
|
68 <p>バージョンが異なる Gears OS でもの Gear 共通部分を用いて通信を行う</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74
|
17
|
75 <div class="slide" id="4"><div>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 <header>
|
19
|
78 <h1 id="gears-os--2">Gears OS の信頼性</h1>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 <!-- _S9SLIDE_ -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81
|
19
|
82 <p>Code/Data Gear にはメタ計算に必要な情報として Meta Code/Data Gear が付属されている</p>
|
|
83
|
|
84 <p> 関数型言語における Monad に相当</p>
|
|
85
|
|
86 <p>プログラムに対してメタレベルで Model Checking する</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87
|
19
|
88 <p> 元のプログラムに影響を与えない</p>
|
17
|
89
|
19
|
90 <p> 並列実行時のデッドロック検出</p>
|
|
91
|
|
92 <p> Code Gear 間での型検査</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 <div class="slide" id="5"><div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 <header>
|
19
|
102 <h1 id="cerium">Cerium</h1>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 <!-- _S9SLIDE_ -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
105
|
19
|
106 <p>Cerium では Task という分割された処理を依存関係に沿って並列実行する</p>
|
|
107
|
|
108 <p>Task 同士の依存関係はプログラマ自身が記述する</p>
|
|
109
|
|
110 <p> Task の種類が増えるほど記述が複雑になる</p>
|
|
111
|
|
112 <p>Task 間の依存関係にのみ着目</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113
|
19
|
114 <p> データの依存関係を正しく保証しない</p>
|
|
115
|
|
116 <p>Task が取り扱うデータに型情報がない</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117
|
19
|
118 <p> 汎用ポインタを型変換して利用</p>
|
17
|
119
|
19
|
120 <p> 型検査できない</p>
|
17
|
121
|
|
122
|
|
123
|
|
124 </section>
|
|
125 </div></div>
|
|
126
|
|
127 <div class="slide" id="6"><div>
|
|
128 <section>
|
|
129 <header>
|
19
|
130 <h1 id="alice">Alice</h1>
|
17
|
131 </header>
|
|
132 <!-- _S9SLIDE_ -->
|
|
133
|
19
|
134 <p>Alice では処理とデータの単位として Code Segment, Data Segment を用いる</p>
|
|
135
|
|
136 <p>処理とデータの関係から Code Segment 間の依存関係が決定</p>
|
|
137
|
|
138 <p>Data Segment を待ち合わせて Code Segment を実行することを Computaion と定義</p>
|
|
139
|
|
140 <p>Computaion を実現する Computaion を Meta Computaion と定義</p>
|
17
|
141
|
19
|
142 <p> 切断や再接続時の処理、データの圧縮の機能などが相当</p>
|
|
143
|
|
144 <p> 通常の Computaion に影響しない</p>
|
|
145
|
|
146 <p> Meta Computaion 自体は Alice で記述されていない</p>
|
|
147
|
|
148 <p>Data Segment にアクセスする API が設計上の問題で複雑化している</p>
|
17
|
149
|
|
150
|
|
151
|
|
152 </section>
|
|
153 </div></div>
|
|
154
|
|
155 <div class="slide" id="7"><div>
|
|
156 <section>
|
|
157 <header>
|
19
|
158 <h1 id="codedata-gear">Code/Data Gear</h1>
|
17
|
159 </header>
|
|
160 <!-- _S9SLIDE_ -->
|
|
161
|
19
|
162 <p>通常レベルとして Code/Data Gear を用いる</p>
|
|
163
|
|
164 <p> ポインタを扱わない</p>
|
|
165
|
|
166 <p>Code Gear は処理そのもの</p>
|
|
167
|
|
168 <p> OpenCL/CUDA の kernel に相当</p>
|
|
169
|
|
170 <p> 接続された複数の Input Data Gear を参照</p>
|
17
|
171
|
19
|
172 <p> 単一または複数の Output Data Gear に書き出す</p>
|
|
173
|
|
174 <p> 自分が知らない Code/Data Gear は名前で指し示す</p>
|
|
175
|
|
176 <p>Data Gear はデータそのもの</p>
|
|
177
|
|
178 <p> C の構造体で表現</p>
|
|
179
|
|
180 <p> Primitive Data Type を格納</p>
|
17
|
181
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
182
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
183
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
184 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
185 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
186
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
187 <div class="slide" id="8"><div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
188 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
189 <header>
|
19
|
190 <h1 id="meta-codedata-gear">Meta Code/Data Gear</h1>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
191 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
192 <!-- _S9SLIDE_ -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
193
|
19
|
194 <p>メタレベルとして Meta Code/Data Gear を用いる</p>
|
|
195
|
|
196 <p> ポインタを扱う</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
197
|
19
|
198 <p>各 Gear の関連付け</p>
|
17
|
199
|
19
|
200 <p>Model Checking</p>
|
|
201
|
|
202 <p>平行制御</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
203
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
204
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
205
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
206 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
207 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
208
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
209 <div class="slide" id="9"><div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
210 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
211 <header>
|
19
|
212 <h1 id="gear--list-">Gear を用いた List の表現</h1>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
213 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
214 <!-- _S9SLIDE_ -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
215
|
19
|
216 <p>通常 List は要素と次へのポインタを持つ構造体で表現する</p>
|
17
|
217
|
19
|
218 <p>Gears OS では任意の要素を持つ Data Gear と次へのポインタを持つ Meta Data Gear の組によって List を表現する</p>
|
|
219
|
|
220 <p><img src="pictures/List.svg" alt="List" style="width: 70%" /></p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
221
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
222
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
223
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
224 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
225 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
226
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
227 <div class="slide" id="10"><div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
228 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
229 <header>
|
19
|
230 <h1 id="codedata-gear-">Code/Data Gear の性質</h1>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
231 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
232 <!-- _S9SLIDE_ -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
233
|
19
|
234 <p>ポインタの使用を通常レベルとメタレベルで分離</p>
|
|
235
|
|
236 <p> ポインタ関連のセキュリティフローを防止</p>
|
17
|
237
|
19
|
238 <p>処理が Code/Data Gear に閉じている</p>
|
|
239
|
|
240 <p> 接続された Gear のみに干渉できる</p>
|
|
241
|
|
242 <p> 処理の実行時間、メモリ使用量が予測可能</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
243
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
244
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
245
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
246 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
247 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
248
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
249 <div class="slide" id="11"><div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
250 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
251 <header>
|
19
|
252 <h1 id="gears-os--meta-computation">Gears OS における Meta Computation</h1>
|
17
|
253 </header>
|
|
254 <!-- _S9SLIDE_ -->
|
|
255
|
19
|
256 <p>関数型言語における Monad に基づいて Meta Computation を行う</p>
|
17
|
257
|
19
|
258 <p> Monad を用いる手法は Moggi らが提案</p>
|
|
259
|
|
260 <p>Gears OS の Meta Computation は Meta Code/Data Gear を用いる</p>
|
17
|
261
|
|
262
|
|
263
|
|
264 </section>
|
|
265 </div></div>
|
|
266
|
|
267 <div class="slide" id="12"><div>
|
|
268 <section>
|
|
269 <header>
|
19
|
270 <h1 id="section">実装言語</h1>
|
17
|
271 </header>
|
|
272 <!-- _S9SLIDE_ -->
|
|
273
|
19
|
274 <p>本研究室で開発している Continuation based C(CbC) で実装</p>
|
|
275
|
|
276 <p> LLVM をバックエンドした CbC コンパイラを用いる</p>
|
17
|
277
|
19
|
278 <p>CbC ではプログラムを Code Segment, Data Segment という単位で記述</p>
|
17
|
279
|
19
|
280 <p>Code Segment 間の処理の移動は goto を用いた軽量継続</p>
|
|
281
|
|
282 <p> 末尾最適化を強制</p>
|
17
|
283
|
|
284
|
|
285
|
|
286 </section>
|
|
287 </div></div>
|
|
288
|
|
289 <div class="slide" id="13"><div>
|
|
290 <section>
|
|
291 <header>
|
19
|
292 <h1 id="context">Context</h1>
|
17
|
293 </header>
|
|
294 <!-- _S9SLIDE_ -->
|
|
295
|
20
|
296 <img src="pictures/GearsOS_arch.svg" alt="arch" width="50%" align="right"/>
|
19
|
297 <p>実行に必要な情報をまとめた Context を生成</p>
|
|
298
|
|
299 <p> OS の Process, Thread に相当</p>
|
|
300
|
|
301 <p> メタレベル</p>
|
|
302
|
|
303 <p>Code Gear の名前とポインタの対応</p>
|
17
|
304
|
19
|
305 <p>Data Gear を Allocate するための情報</p>
|
|
306
|
|
307 <p>Code Gear が参照する Data Gear へのポインタ</p>
|
17
|
308
|
19
|
309 <p>Data Gear に格納される Data Type の情報</p>
|
|
310
|
17
|
311
|
|
312
|
|
313
|
|
314 </section>
|
|
315 </div></div>
|
|
316
|
|
317 <div class="slide" id="14"><div>
|
|
318 <section>
|
|
319 <header>
|
19
|
320 <h1 id="context-1">Context</h1>
|
17
|
321 </header>
|
|
322 <!-- _S9SLIDE_ -->
|
|
323
|
|
324 <pre><code>/* Context definition */
|
|
325 enum Code {
|
|
326 Code1,
|
|
327 Code2,
|
|
328 Allocator,
|
|
329 };
|
18
|
330 </code></pre>
|
17
|
331
|
19
|
332 <p>実行可能な Code Gear の名前を enum Code で宣言</p>
|
18
|
333
|
19
|
334 <p>初期化時に名前と関数ポインタを対応付ける</p>
|
18
|
335
|
|
336
|
|
337
|
|
338 </section>
|
|
339 </div></div>
|
|
340
|
|
341 <div class="slide" id="15"><div>
|
|
342 <section>
|
|
343 <header>
|
19
|
344 <h1 id="context-2">Context</h1>
|
|
345 </header>
|
|
346 <!-- _S9SLIDE_ -->
|
|
347
|
|
348 <pre><code>enum UniqueData {
|
|
349 Allocate,
|
|
350 Tree,
|
|
351 };
|
|
352 </code></pre>
|
|
353
|
|
354 <p>初期化時に確保する Data Gear を enum UniqueData で宣言</p>
|
|
355
|
|
356
|
|
357
|
|
358 </section>
|
|
359 </div></div>
|
|
360
|
|
361 <div class="slide" id="16"><div>
|
|
362 <section>
|
|
363 <header>
|
|
364 <h1 id="context-3">Context</h1>
|
18
|
365 </header>
|
|
366 <!-- _S9SLIDE_ -->
|
|
367
|
|
368 <pre><code>struct Context {
|
17
|
369 int codeNum;
|
|
370 __code (**code) (struct Context *);
|
|
371 void* heap_start;
|
|
372 void* heap;
|
|
373 long dataSize;
|
|
374 int dataNum;
|
|
375 union Data **data;
|
|
376 };
|
|
377 </code></pre>
|
|
378
|
19
|
379 <p>実行可能な Code Gear の数を示す codeNum</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
380
|
19
|
381 <p>実行可能な Code Gear へのポインタ code</p>
|
17
|
382
|
19
|
383 <p>Data Gear の Allocate 用のポインタ heap_start, heap, dataSize</p>
|
17
|
384
|
19
|
385 <p>Data Gear の数を示す dataNum</p>
|
17
|
386
|
19
|
387 <p>Data Gear へのポインタ data</p>
|
17
|
388
|
|
389
|
|
390
|
|
391 </section>
|
|
392 </div></div>
|
|
393
|
18
|
394 <div class="slide" id="17"><div>
|
17
|
395 <section>
|
|
396 <header>
|
|
397 <h1 id="data-gear">Data Gear</h1>
|
|
398 </header>
|
|
399 <!-- _S9SLIDE_ -->
|
|
400
|
|
401 <pre><code>union Data {
|
|
402 struct Tree {
|
19
|
403 // Tree member definition
|
17
|
404 } tree;
|
|
405 struct Node {
|
19
|
406 // Node member definition
|
17
|
407 } node;
|
|
408 struct Allocate {
|
|
409 long size;
|
|
410 enum Code next;
|
|
411 } allocate;
|
|
412 };
|
|
413 </code></pre>
|
|
414
|
19
|
415 <p>Data Gear は C の共用体と構造体を用いた表現する</p>
|
|
416
|
17
|
417
|
|
418
|
|
419 </section>
|
|
420 </div></div>
|
|
421
|
18
|
422 <div class="slide" id="18"><div>
|
17
|
423 <section>
|
|
424 <header>
|
19
|
425 <h1 id="persistent-data-gear">Persistent Data Gear</h1>
|
17
|
426 </header>
|
|
427 <!-- _S9SLIDE_ -->
|
|
428
|
19
|
429 <p>Data Gear の管理には木構造を用いる</p>
|
|
430
|
|
431 <p>非破壊で構成する</p>
|
17
|
432
|
19
|
433 <p> 平行して読み書き・参照を行うことが可能</p>
|
17
|
434
|
19
|
435 <p> 変更前の木構造をすべて保持しているので過去のデータにアクセス可能</p>
|
|
436
|
|
437 <p><img src="pictures/GearsOS_arch.svg" alt="arch" style="width: 50%" /></p>
|
17
|
438
|
|
439
|
|
440
|
|
441 </section>
|
|
442 </div></div>
|
|
443
|
18
|
444 <div class="slide" id="19"><div>
|
17
|
445 <section>
|
|
446 <header>
|
19
|
447 <h1 id="worker">Worker</h1>
|
|
448 </header>
|
|
449 <!-- _S9SLIDE_ -->
|
|
450
|
|
451 <p>Worker は Synchronized Queue から実行する Code Gear を取得</p>
|
|
452
|
|
453 <p>実行に必要な Data Gear は Persistent Data Gear から読み込む</p>
|
|
454
|
|
455 <p>処理が完了したら Persistent Data Gear に書き込む</p>
|
|
456
|
|
457 <p><img src="pictures/GearsOS_arch.svg" alt="arch" style="width: 50%" /></p>
|
|
458
|
|
459
|
|
460
|
|
461 </section>
|
|
462 </div></div>
|
|
463
|
|
464 <div class="slide" id="20"><div>
|
|
465 <section>
|
|
466 <header>
|
|
467 <h1 id="synchronized-queue">Synchronized Queue</h1>
|
|
468 </header>
|
|
469 <!-- _S9SLIDE_ -->
|
|
470
|
|
471 <p>List を表現する Code/Data Gear に CAS(Compare and Swap) を行う Meta Code/Data Gear を接続することで Synchronized Queue を実現する</p>
|
|
472
|
|
473 <p>Gears OS の機能は状態遷移図とクラスダイアグラムを組み合わせた GearBox という図で表現する</p>
|
|
474
|
|
475 <p>M:receiver/sender が CAS を行う Meta Code Gear となる</p>
|
|
476
|
|
477 <p><img src="pictures/synchronizedQueue.svg" alt="sync" style="width: 80%" /></p>
|
|
478
|
|
479
|
|
480
|
|
481 </section>
|
|
482 </div></div>
|
|
483
|
|
484 <div class="slide" id="21"><div>
|
|
485 <section>
|
|
486 <header>
|
|
487 <h1 id="code-gear-">Code Gear の例</h1>
|
|
488 </header>
|
|
489 <!-- _S9SLIDE_ -->
|
|
490
|
|
491 <pre><code>// Code Gear
|
|
492 __code code1(struct Context* context) {
|
|
493 context->data[Allocate]->allocate.size = sizeof(struct Node);
|
|
494 context->data[Allocate]->allocate.next = Code2;
|
|
495 goto meta(context, Allocate);
|
|
496 }
|
|
497 </code></pre>
|
|
498
|
|
499 <p>必要な情報を Data Gear に書き込み Allocate を行う Code Gear に接続する Code Gear</p>
|
|
500
|
|
501 <p>ポインタを扱っており設計思想と異なる</p>
|
|
502
|
|
503
|
|
504
|
|
505 </section>
|
|
506 </div></div>
|
|
507
|
|
508 <div class="slide" id="22"><div>
|
|
509 <section>
|
|
510 <header>
|
|
511 <h1 id="code-gear--1">Code Gear の例</h1>
|
|
512 </header>
|
|
513 <!-- _S9SLIDE_ -->
|
|
514
|
|
515 <pre><code>// Code Gear
|
|
516 __code code1(Allocate allocate) {
|
20
|
517 allocate.size = sizeof(struct Node);
|
19
|
518 allocate.next = Code2;
|
|
519 goto Allocate(allocate); // goes through meta
|
|
520 }
|
|
521 </code></pre>
|
|
522
|
|
523 <p>前の Code Gear として解釈するように CbC コンパイラを改良する</p>
|
|
524
|
|
525
|
|
526
|
|
527 </section>
|
|
528 </div></div>
|
|
529
|
|
530 <div class="slide" id="23"><div>
|
|
531 <section>
|
|
532 <header>
|
|
533 <h1 id="section-1">比較</h1>
|
|
534 </header>
|
|
535 <!-- _S9SLIDE_ -->
|
|
536
|
|
537 <p>Code Gear</p>
|
|
538
|
|
539 <p> Cerium の Task</p>
|
|
540
|
|
541 <p> Alice の Code Segment</p>
|
|
542
|
|
543 <p> OpenCL/CUDA の kernel</p>
|
|
544
|
|
545 <p>Data Gear</p>
|
|
546
|
|
547 <p> Alice の Data Segment</p>
|
|
548
|
|
549 <p> Ceirum, OpenCL/CUDA には同等のものはない</p>
|
|
550
|
|
551 <p>Gears OS は Alice と同様に処理とデータの関係から依存関係を決定</p>
|
|
552
|
|
553 <p>Cerium, OpenCL/CUDA では処理同士の依存関係を記述する</p>
|
|
554
|
|
555 <p> データの依存関係を保証できない</p>
|
|
556
|
|
557
|
|
558
|
|
559 </section>
|
|
560 </div></div>
|
|
561
|
|
562 <div class="slide" id="24"><div>
|
|
563 <section>
|
|
564 <header>
|
|
565 <h1 id="section-2">今後の課題</h1>
|
|
566 </header>
|
|
567 <!-- _S9SLIDE_ -->
|
|
568
|
20
|
569 <p>必要な機能の実装</p>
|
|
570
|
|
571 <p> Synchronized Queue</p>
|
|
572
|
|
573
|
19
|
574 <p>Cerium と同様の例題を動かし比較・評価</p>
|
|
575
|
|
576 <p> Sort</p>
|
|
577
|
|
578 <p> Word Count</p>
|
|
579
|
|
580 <p> FFT</p>
|
|
581
|
|
582 <p>GPGPU のサポート</p>
|
|
583
|
|
584
|
|
585
|
|
586 </section>
|
|
587 </div></div>
|
|
588
|
|
589 <div class="slide" id="25"><div>
|
|
590 <section>
|
|
591 <header>
|
17
|
592 <h1 id="section-3">まとめ</h1>
|
|
593 </header>
|
|
594 <!-- _S9SLIDE_ -->
|
|
595
|
19
|
596 <p>処理とデータの関係から処理同士の依存関係を解決し、並列実行するように設計を行なった</p>
|
17
|
597
|
|
598 <p>Gear という単位を用いて記述することでプログラムを柔軟に変更することを可能とした</p>
|
|
599
|
19
|
600 <p>Meta Code/Data Gear を用いて Meta Computation を実現する</p>
|
17
|
601
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
602 <!-- === end markdown block === -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
603
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
604 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
605 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
606
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
607
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
608 <script src="scripts/script.js"></script>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
609 <!-- Copyright © 2010–2011 Vadim Makeev, http://pepelsbey.net/ -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
610 </body>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
611 </html>
|