0
|
1 <!DOCTYPE html>
|
|
2 <html>
|
|
3 <head>
|
|
4 <meta http-equiv="content-type" content="text/html;charset=utf-8">
|
|
5 <title>Gears OS のモジュール化と並列 API</title>
|
|
6
|
|
7 <meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin15]">
|
|
8 <meta name="author" content="Mitsuki Miyagi, Yu Tobaru, Shinji Kono" >
|
|
9
|
|
10 <!-- style sheet links -->
|
|
11 <link rel="stylesheet" href="s6/themes/screen.css" media="screen">
|
|
12 <link rel="stylesheet" href="s6/themes/print.css" media="print">
|
|
13 <link rel="stylesheet" href="s6/themes/blank.css" media="screen,projection">
|
|
14
|
|
15 <!-- JS -->
|
|
16 <script src="s6/js/jquery-1.11.3.min.js"></script>
|
|
17 <script src="s6/js/jquery.slideshow.js"></script>
|
|
18 <script src="s6/js/jquery.slideshow.counter.js"></script>
|
|
19 <script src="s6/js/jquery.slideshow.controls.js"></script>
|
|
20 <script src="s6/js/jquery.slideshow.footer.js"></script>
|
|
21 <script src="s6/js/jquery.slideshow.autoplay.js"></script>
|
|
22
|
|
23 <!-- prettify -->
|
|
24 <link rel="stylesheet" href="scripts/prettify.css">
|
|
25 <script src="scripts/prettify.js"></script>
|
|
26
|
|
27 <style>
|
|
28 .slide {page-break-after: always;}
|
|
29 </style>
|
|
30
|
|
31
|
|
32
|
|
33
|
|
34 </head>
|
|
35 <body>
|
|
36
|
|
37 <div class="layout">
|
|
38 <div id="header"></div>
|
|
39 <div id="footer">
|
|
40 <div align="right">
|
|
41 <img src="s6/images/logo.svg" width="200px">
|
|
42 </div>
|
|
43 </div>
|
|
44 </div>
|
|
45
|
|
46 <div class="presentation">
|
|
47
|
|
48 <div class='slide cover'>
|
|
49 <table width="90%" height="90%" border="0" align="center">
|
|
50 <tr>
|
|
51 <td>
|
|
52 <div align="center">
|
|
53 <h1><font color="#808db5">Gears OS のモジュール化と並列 API</font></h1>
|
|
54 </div>
|
|
55 </td>
|
|
56 </tr>
|
|
57 <tr>
|
|
58 <td>
|
|
59 <div align="left">
|
|
60 Mitsuki Miyagi, Yu Tobaru, Shinji Kono
|
|
61 琉球大学
|
|
62 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;">
|
|
63 </div>
|
|
64 </td>
|
|
65 </tr>
|
|
66 </table>
|
|
67 </div>
|
|
68
|
|
69 <div class='slide '>
|
|
70 <!-- === begin markdown block ===
|
|
71
|
|
72 generated by markdown/1.2.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin15]
|
7
|
73 on 2018-05-20 21:11:28 +0900 with Markdown engine kramdown (1.13.2)
|
0
|
74 using options {}
|
|
75 -->
|
|
76
|
|
77 <!-- _S9SLIDE_ -->
|
7
|
78 <h2 id="gears-os">Gears OS</h2>
|
0
|
79 <ul>
|
3
|
80 <li>現代のOS では拡張性と信頼性を両立させることが要求されている。
|
0
|
81 <ul>
|
3
|
82 <li>時代と共にハードウェア、サービスが進歩していき、その度に OS を検証できる必要があるため、拡張性が必要。</li>
|
|
83 <li>OS は非決定的な実行を持ち、従来の OS ではテストしきれない部分が残ってしまうため、信頼性が欠けてしまう。</li>
|
0
|
84 </ul>
|
|
85 </li>
|
3
|
86 <li>本研究室では、それらを実現することを目標に Gears OS の開発を行なっている。</li>
|
0
|
87 </ul>
|
|
88
|
|
89
|
|
90 </div>
|
|
91 <div class='slide '>
|
|
92 <!-- _S9SLIDE_ -->
|
7
|
93 <h2 id="api-">API と実装の分離</h2>
|
0
|
94 <ul>
|
3
|
95 <li>Gears OS は Continuation based C(以下、CbC)によって記述されている。</li>
|
|
96 <li>CbC は Code Gear と Data Gear の単位でプログラムを記述していて、システムやアプリケーションを作る際に、この2つは柔軟に再利用する必要がある。</li>
|
|
97 <li>この時に、機能を接続する API と実装の分離が可能であることが望ましい。</li>
|
0
|
98 </ul>
|
|
99
|
|
100
|
|
101 </div>
|
|
102 <div class='slide '>
|
|
103 <!-- _S9SLIDE_ -->
|
7
|
104 <h2 id="gears-os-interface">Gears OS での形式化とInterfaceの導入</h2>
|
|
105 <ul>
|
|
106 <li>形式化とは仕様、実装、実行を Logic で記述する事である。</li>
|
|
107 <li>Gears OS では、継続を使った関数型プログラムとして実装を記述する</li>
|
|
108 <li>Logic としては、依存型関数言語である Agda を使う(前の発表)</li>
|
|
109 <li>証明とモデル検査を使って、信頼性を確保する</li>
|
|
110 </ul>
|
|
111
|
|
112
|
|
113 </div>
|
|
114 <div class='slide '>
|
|
115 <!-- _S9SLIDE_ -->
|
|
116 <h2 id="gears-os--interface">Gears OS の Interface</h2>
|
|
117 <ul>
|
|
118 <li>この時、Code Gear と Deta Gear は Interface と呼ばれるまとまり(モジュール)で記述される。</li>
|
|
119 <li>Interface 作成時に Code Gear の集合を指定することにより複数の実装を持つことができる。</li>
|
|
120 <li>Interface は Data Gear で記述されて、Meta Deta Gear と呼ばれる。</li>
|
|
121 <li>Java などの Class に相当する。</li>
|
|
122 <li>Interface を外から呼び出すための Code Gear 群の型</li>
|
|
123 <li>Interface を呼び出す時に必要となる引数を全て格納する Data Gear</li>
|
|
124 <li>実装に使う Code Gear の番号が含まれている。</li>
|
|
125 <li>Code Gear の番号を変更することによって異なる実装を実現できる</li>
|
|
126 </ul>
|
|
127
|
|
128
|
|
129 </div>
|
|
130 <div class='slide '>
|
|
131 <!-- _S9SLIDE_ -->
|
|
132 <h2 id="api">並列API</h2>
|
0
|
133 <ul>
|
3
|
134 <li>Geas OS 信頼性を保証するために、形式化されたモジュールシステムが必要である。</li>
|
|
135 <li>本研究では、モジュールシステムとその応用である並列APIについて考察する。</li>
|
|
136 <li>並列APIは継続を基本とした関数型プログラミングと両立する必要があり、ここでは CbC の goto 文を拡張した par goto を導入する。</li>
|
0
|
137 </ul>
|
|
138
|
|
139
|
|
140 </div>
|
|
141 <div class='slide '>
|
|
142 <!-- _S9SLIDE_ -->
|
7
|
143 <h2 id="section">スライドの流れ</h2>
|
2
|
144 <ul>
|
7
|
145 <li>Interface</li>
|
3
|
146 <li>
|
|
147 <font color="red">CbC</font>
|
|
148 </li>
|
|
149 <li>Gears OS における並列実行</li>
|
|
150 <li>比較</li>
|
|
151 <li>今後の課題</li>
|
|
152 </ul>
|
|
153
|
|
154
|
|
155 </div>
|
|
156 <div class='slide '>
|
|
157 <!-- _S9SLIDE_ -->
|
7
|
158 <h2 id="cbc">CbC</h2>
|
3
|
159 <ul>
|
5
|
160 <li>ノーマルレベルとメタレベルの計算を1つの言語で表現できる言語として、本研究室で設計した CbC を用いる。</li>
|
2
|
161 <li>ノーマルレベルの計算
|
|
162 <ul>
|
5
|
163 <li>コンピュータの計算はプログラミング言語で行われる。</li>
|
2
|
164 <li>その部分をノーマルレベルの計算と呼ぶ。</li>
|
|
165 </ul>
|
|
166 </li>
|
|
167 <li>メタレベルの計算
|
|
168 <ul>
|
|
169 <li>コードが実行される際の以下の部分が、メタレベルの計算という。
|
|
170 <ul>
|
|
171 <li>処理系の詳細や使用する資源</li>
|
7
|
172 <li>コードの仕様や型などの部分</li>
|
2
|
173 </ul>
|
|
174 </li>
|
|
175 </ul>
|
|
176 </li>
|
|
177 </ul>
|
|
178
|
|
179
|
|
180 </div>
|
|
181 <div class='slide '>
|
|
182 <!-- _S9SLIDE_ -->
|
7
|
183 <h2 id="cbc-1">CbC</h2>
|
2
|
184 <ul>
|
|
185 <li>CbC を用いることで、ノーマルレベルの計算の信頼性をメタレベルから保証できるようになる。</li>
|
7
|
186 <li>CbC を用いてCode Gear と Data Gear を導入する。</li>
|
2
|
187 </ul>
|
|
188
|
|
189
|
|
190 </div>
|
|
191 <div class='slide '>
|
|
192 <!-- _S9SLIDE_ -->
|
7
|
193 <h2 id="cbc-">CbC の構文</h2>
|
3
|
194 <ul lang="c">
|
|
195 <li>CbC の Code Gear は __code という型を持つ関数として記述する。</li>
|
|
196 <li>継続で次の Code Gear に遷移するので、戻り値は持たない。</li>
|
|
197 <li>遷移は goto 文による継続で処理を行い、引数として入出力を行う。</li>
|
|
198 </ul>
|
|
199 <pre><code>__code cg0(int a, int b) {
|
|
200 goto cg1(a+b);
|
|
201 }
|
|
202 __code cg1(int c) {
|
|
203 goto cg2(c);
|
|
204 }
|
|
205 </code></pre>
|
7
|
206 <ul>
|
|
207 <li>CbC の記述だけでは並列実行にならない</li>
|
|
208 </ul>
|
5
|
209
|
|
210
|
|
211 </div>
|
|
212 <div class='slide '>
|
|
213 <!-- _S9SLIDE_ -->
|
7
|
214 <h2 id="section-1">スライドの流れ</h2>
|
5
|
215 <ul>
|
|
216 <li>CbC</li>
|
|
217 <li>
|
|
218 <font color="red">Gears OS における並列実行</font>
|
|
219 </li>
|
|
220 <li>比較</li>
|
|
221 <li>今後の課題</li>
|
|
222 </ul>
|
3
|
223
|
|
224
|
|
225 </div>
|
|
226 <div class='slide '>
|
|
227 <!-- _S9SLIDE_ -->
|
7
|
228 <h2 id="gears-">Gears における並列実行</h2>
|
2
|
229 <ul>
|
3
|
230 <li>Gears OS ではメタ計算を柔軟に記述するためのプログラミングの単位として Code Gear と Data Gear を用いる。</li>
|
|
231 <li>それぞれにメタレベルの単位が存在し、Meta Data Gear と Meta Code Gear と呼ぶ。</li>
|
|
232 <li>メタレベルの計算は Perl スクリプトによって生成され、Code Gear で記述される。</li>
|
|
233 </ul>
|
7
|
234 <div style="text-align: center;">
|
|
235 <img src="./image/meta_cg_dg.svg" alt="Gears OS の構造" width="700" />
|
|
236 </div>
|
|
237
|
|
238
|
|
239 </div>
|
|
240 <div class='slide '>
|
|
241 <!-- _S9SLIDE_ -->
|
|
242 <h2 id="gears-os-">Gears OS の構造</h2>
|
|
243 <div style="text-align: center;">
|
|
244 <img src="./image/gearsos.svg" alt="Gears OS の構造" width="700" />
|
|
245 </div>
|
|
246
|
|
247
|
|
248 </div>
|
|
249 <div class='slide '>
|
|
250 <!-- _S9SLIDE_ -->
|
|
251 <h2 id="context">Context</h2>
|
|
252 <ul>
|
|
253 <li>1つのスレッド内で使われる Interface の Code Gear と Data Gear は Meta Data Gear に格納される。</li>
|
|
254 <li>この Meta Data Gear を Context と呼ぶ。</li>
|
|
255 <li>Context を複製して複数の CPU に割り当てることにより並列実行が可能になる。</li>
|
|
256 <li>Context は Task でもある。</li>
|
|
257 <li>Task は実行する Code Gear と Data Gear を全て持っている。</li>
|
|
258 </ul>
|
3
|
259
|
|
260
|
|
261 </div>
|
|
262 <div class='slide '>
|
|
263 <!-- _S9SLIDE_ -->
|
7
|
264 <h2 id="par-goto">par goto</h2>
|
2
|
265 <ul>
|
3
|
266 <li>Context の複製には par goto を用いる。</li>
|
|
267 <li>他に、入力の同期、タスクスケジューラへの Context の登録が行われる。</li>
|
|
268 </ul>
|
|
269
|
|
270
|
|
271 </div>
|
|
272 <div class='slide '>
|
|
273 <!-- _S9SLIDE_ -->
|
7
|
274 <h2 id="code-gear--code-gear-">1つの Code Gear の実行は他の Code Gear に割り込まれない</h2>
|
3
|
275 <ul>
|
7
|
276 <li>共有された Data Gear があった時に、それに対する変更はただ1つの Code Gear だけが許される</li>
|
|
277 <li>読み込みは複数であってもいい</li>
|
|
278 <li>Agda 側で、並列実行を Code Gear の順次実行としてシミュレーションするため</li>
|
|
279 <li>このような実行になるように Gears OS の実装を行う</li>
|
2
|
280 </ul>
|
|
281
|
|
282
|
|
283 </div>
|
|
284 <div class='slide '>
|
|
285 <!-- _S9SLIDE_ -->
|
7
|
286 <h2 id="exit">__exit</h2>
|
3
|
287 <ul lang="c">
|
7
|
288 <li>複数実行した時に、共有 Data Gear に書き込みを成功したかを確認する(commit)</li>
|
|
289 <li>par goto で生成された Task は __exit に継続することで終了する</li>
|
|
290 <li>GearsOS の Task は Output Data Gear を生成した時点で終了する</li>
|
3
|
291 <li>そのため、par goto では直接 __exit に継続せず、Output Data Gear への書き出し処理に継続される。</li>
|
|
292 <li>Code Gear と Data Gear の依存関係をノーマルレベルで記述できるようになる。</li>
|
|
293 </ul>
|
|
294 <pre><code>__code code1(Integer *integer1, Integer * integer2, Integer *output) {
|
|
295 par goto add(integer1, integer2, output, __exit);
|
|
296 goto code2();
|
|
297 }
|
|
298 </code></pre>
|
|
299
|
|
300
|
|
301 </div>
|
|
302 <div class='slide '>
|
|
303 <!-- _S9SLIDE_ -->
|
7
|
304 <h2 id="section-2">スライドの流れ</h2>
|
0
|
305 <ul>
|
3
|
306 <li>CbC</li>
|
|
307 <li>Gears OS における並列実行</li>
|
0
|
308 <li>
|
3
|
309 <font color="red">比較</font>
|
0
|
310 </li>
|
|
311 <li>今後の課題</li>
|
|
312 </ul>
|
|
313
|
|
314
|
|
315 </div>
|
|
316 <div class='slide '>
|
|
317 <!-- _S9SLIDE_ -->
|
7
|
318 <h2 id="gears-os--1">Gears OS の評価(目的)</h2>
|
|
319 <ul>
|
|
320 <li>並列構文とそれを実現する Meta Compitation が十分に揃っているかを確認したい</li>
|
|
321 <li>並列処理の台数効果を確認する</li>
|
|
322 <li>既存の並列言語と比較して不要なオーバーヘッドがあるか調べたい</li>
|
|
323 </ul>
|
|
324
|
|
325
|
|
326 </div>
|
|
327 <div class='slide '>
|
|
328 <!-- _S9SLIDE_ -->
|
|
329 <h2 id="gears-os--2">Gears OS の評価(環境)</h2>
|
3
|
330 <ul>
|
|
331 <li>CPU、GPU環境で Gears OS の測定を行う。</li>
|
4
|
332 <li>使用した環境は次のようになる。
|
|
333 <ul>
|
|
334 <li>CPU 環境
|
|
335 <ul>
|
|
336 <li>Model : Dell PowerEdgeR630</li>
|
|
337 <li>Memory : 768GB</li>
|
|
338 <li>CPU : 2 × 18-Core Intel Xeon 2.30GHz</li>
|
|
339 </ul>
|
|
340 </li>
|
|
341 <li>CPU 環境
|
|
342 <ul>
|
|
343 <li>GPU : GeForce GTX 1070</li>
|
|
344 <li>Cores : 1920</li>
|
|
345 <li>ClockSpeed : 1683MHZ</li>
|
|
346 <li>Memory Size : 8GB GDDR5</li>
|
|
347 </ul>
|
|
348 </li>
|
|
349 </ul>
|
|
350 </li>
|
3
|
351 </ul>
|
0
|
352
|
|
353
|
|
354 </div>
|
|
355 <div class='slide '>
|
|
356 <!-- _S9SLIDE_ -->
|
7
|
357 <h2 id="twice">Twice</h2>
|
3
|
358 <ul>
|
|
359 <li>評価には与えられた整数配列の全ての要素を2倍にする例題である Twice を使う。</li>
|
|
360 <li>Twice では 通信時間を考慮しなければ、CPU より コア数の多い GPU が有利となる。</li>
|
|
361 <li>要素数2^27のデータに対する Twice の実行結果を示す。
|
|
362 <ul>
|
|
363 <li>CPU では2^27のデータを64個のデータに分割した。</li>
|
|
364 <li>kernel only は 通信速度を除いた速度である。</li>
|
|
365 </ul>
|
|
366 </li>
|
|
367 </ul>
|
0
|
368
|
4
|
369 <table border="1" align="center" width="50%">
|
|
370 <tbody>
|
|
371 <tr>
|
|
372 <td style="text-align: center;">Processor</td>
|
|
373 <td style="text-align: center;">Time(ms)</td>
|
|
374 </tr>
|
|
375 <tr>
|
|
376 <td style="text-align: center;">1 CPU</td>
|
|
377 <td style="text-align: right;">1181.215</td>
|
|
378 </tr>
|
|
379 <tr>
|
|
380 <td style="text-align: center;">2 CPUs</td>
|
|
381 <td style="text-align: right;">627.914</td>
|
|
382 </tr>
|
|
383 <tr>
|
|
384 <td style="text-align: center;">4 CPUs</td>
|
|
385 <td style="text-align: right;">324.059</td>
|
|
386 </tr>
|
|
387 <tr>
|
|
388 <td style="text-align: center;">8 CPUs</td>
|
|
389 <td style="text-align: right;">159.932</td>
|
|
390 </tr>
|
|
391 <tr>
|
|
392 <td style="text-align: center;">16 CPUs</td>
|
|
393 <td style="text-align: right;">85.518</td>
|
|
394 </tr>
|
|
395 <tr>
|
|
396 <td style="text-align: center;">32 CPUs</td>
|
|
397 <td style="text-align: right;">43.496</td>
|
|
398 </tr>
|
|
399 <tr>
|
|
400 <td style="text-align: center;">GPU</td>
|
|
401 <td style="text-align: right;">127.018</td>
|
|
402 </tr>
|
|
403 <tr>
|
|
404 <td style="text-align: center;">GPU(kernel only)</td>
|
|
405 <td style="text-align: right;">6.018</td>
|
|
406 </tr>
|
|
407 </tbody>
|
|
408 </table>
|
|
409
|
0
|
410
|
|
411 </div>
|
|
412 <div class='slide '>
|
|
413 <!-- _S9SLIDE_ -->
|
7
|
414 <h2 id="section-3">評価の考察</h2>
|
3
|
415 <ul>
|
|
416 <li>コア数が上がるごとに、処理速度が上がっている。</li>
|
|
417 <li>GPUでの実行は 32CPU に比べて約7.2倍の速度向上が見られた。</li>
|
|
418 <li>通信速度を含めると 16CPU より遅い。</li>
|
|
419 </ul>
|
0
|
420
|
|
421
|
|
422 </div>
|
|
423 <div class='slide '>
|
|
424 <!-- _S9SLIDE_ -->
|
7
|
425 <h2 id="go-">Go 言語との比較</h2>
|
3
|
426 <ul>
|
|
427 <li>Go 言語でも Twice を用いた検証を行い、Gears OS との速度比較を行なった。</li>
|
|
428 <li>1CPU と 32CPU では約4.33倍の速度向上が見られた。</li>
|
|
429 <li>CPU数による速度向上は、Gears OS の方が上だが、処理速度では Go言語の方が速い結果となった。</li>
|
|
430 </ul>
|
4
|
431 <div style="text-align: center;">
|
7
|
432 <img src="./image/vsgo.svg" alt="Goとの比較" width="500" />
|
4
|
433 </div>
|
0
|
434
|
|
435
|
|
436 </div>
|
|
437 <div class='slide '>
|
|
438 <!-- _S9SLIDE_ -->
|
7
|
439 <h2 id="section-4">スライドの流れ</h2>
|
3
|
440 <ul>
|
|
441 <li>CbC</li>
|
|
442 <li>Gears OS における並列実行</li>
|
|
443 <li>比較</li>
|
|
444 <li>
|
|
445 <font color="red">今後の課題</font>
|
|
446 </li>
|
|
447 </ul>
|
0
|
448
|
|
449
|
|
450 </div>
|
|
451 <div class='slide '>
|
|
452 <!-- _S9SLIDE_ -->
|
7
|
453 <h2 id="section-5">今後の課題</h2>
|
3
|
454 <ul>
|
|
455 <li>Go 言語との比較から 1CPU での動作が遅いことがわかった。</li>
|
|
456 <li>par goto 文を使用することで、Contextを生成し、並列処理を行う。</li>
|
|
457 <li>しかし、Context はメモリ空間の確保や使用する全ての Code Gear Data Gear の設定をする必要があり、生成に時間がかかってしまう事が原因。</li>
|
|
458 <li>処理が軽い場合は Context を生成しないようなチューニングが必要である。</li>
|
|
459 </ul>
|
0
|
460 <!-- === end markdown block === -->
|
|
461 </div>
|
|
462
|
|
463
|
|
464 </div><!-- presentation -->
|
|
465 </body>
|
|
466 </html>
|