comparison Slide/prosym.pdf.html @ 7:dfa8973bfe10

add images
author tobaru
date Sun, 20 May 2018 21:12:40 +0900
parents 07b7aba92874
children f275411f458d
comparison
equal deleted inserted replaced
6:94494b3cd38b 7:dfa8973bfe10
68 68
69 <div class='slide '> 69 <div class='slide '>
70 <!-- === begin markdown block === 70 <!-- === begin markdown block ===
71 71
72 generated by markdown/1.2.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin15] 72 generated by markdown/1.2.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin15]
73 on 2018-05-20 17:18:27 +0900 with Markdown engine kramdown (1.13.2) 73 on 2018-05-20 21:11:28 +0900 with Markdown engine kramdown (1.13.2)
74 using options {} 74 using options {}
75 --> 75 -->
76 76
77 <!-- _S9SLIDE_ --> 77 <!-- _S9SLIDE_ -->
78 <h1 id="gears-os">Gears OS</h1> 78 <h2 id="gears-os">Gears OS</h2>
79 <ul> 79 <ul>
80 <li>現代のOS では拡張性と信頼性を両立させることが要求されている。 80 <li>現代のOS では拡張性と信頼性を両立させることが要求されている。
81 <ul> 81 <ul>
82 <li>時代と共にハードウェア、サービスが進歩していき、その度に OS を検証できる必要があるため、拡張性が必要。</li> 82 <li>時代と共にハードウェア、サービスが進歩していき、その度に OS を検証できる必要があるため、拡張性が必要。</li>
83 <li>OS は非決定的な実行を持ち、従来の OS ではテストしきれない部分が残ってしまうため、信頼性が欠けてしまう。</li> 83 <li>OS は非決定的な実行を持ち、従来の OS ではテストしきれない部分が残ってしまうため、信頼性が欠けてしまう。</li>
88 88
89 89
90 </div> 90 </div>
91 <div class='slide '> 91 <div class='slide '>
92 <!-- _S9SLIDE_ --> 92 <!-- _S9SLIDE_ -->
93 <h1 id="api-">API と実装の分離</h1> 93 <h2 id="api-">API と実装の分離</h2>
94 <ul> 94 <ul>
95 <li>Gears OS は Continuation based C(以下、CbC)によって記述されている。</li> 95 <li>Gears OS は Continuation based C(以下、CbC)によって記述されている。</li>
96 <li>CbC は Code Gear と Data Gear の単位でプログラムを記述していて、システムやアプリケーションを作る際に、この2つは柔軟に再利用する必要がある。</li> 96 <li>CbC は Code Gear と Data Gear の単位でプログラムを記述していて、システムやアプリケーションを作る際に、この2つは柔軟に再利用する必要がある。</li>
97 <li>この時に、機能を接続する API と実装の分離が可能であることが望ましい。</li> 97 <li>この時に、機能を接続する API と実装の分離が可能であることが望ましい。</li>
98 </ul> 98 </ul>
99 99
100 100
101 </div> 101 </div>
102 <div class='slide '> 102 <div class='slide '>
103 <!-- _S9SLIDE_ --> 103 <!-- _S9SLIDE_ -->
104 <h1 id="api">並列API</h1> 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>
105 <ul> 133 <ul>
106 <li>Geas OS 信頼性を保証するために、形式化されたモジュールシステムが必要である。</li> 134 <li>Geas OS 信頼性を保証するために、形式化されたモジュールシステムが必要である。</li>
107 <li>本研究では、モジュールシステムとその応用である並列APIについて考察する。</li> 135 <li>本研究では、モジュールシステムとその応用である並列APIについて考察する。</li>
108 <li>並列APIは継続を基本とした関数型プログラミングと両立する必要があり、ここでは CbC の goto 文を拡張した par goto を導入する。</li> 136 <li>並列APIは継続を基本とした関数型プログラミングと両立する必要があり、ここでは CbC の goto 文を拡張した par goto を導入する。</li>
109 </ul> 137 </ul>
110 138
111 139
112 </div> 140 </div>
113 <div class='slide '> 141 <div class='slide '>
114 <!-- _S9SLIDE_ --> 142 <!-- _S9SLIDE_ -->
115 <h1 id="section">スライドの流れ</h1> 143 <h2 id="section">スライドの流れ</h2>
116 <ul> 144 <ul>
145 <li>Interface</li>
117 <li> 146 <li>
118 <font color="red">CbC</font> 147 <font color="red">CbC</font>
119 </li> 148 </li>
120 <li>Gears OS における並列実行</li> 149 <li>Gears OS における並列実行</li>
121 <li>比較</li> 150 <li>比較</li>
124 153
125 154
126 </div> 155 </div>
127 <div class='slide '> 156 <div class='slide '>
128 <!-- _S9SLIDE_ --> 157 <!-- _S9SLIDE_ -->
129 <h1 id="cbc">CbC</h1> 158 <h2 id="cbc">CbC</h2>
130 <ul> 159 <ul>
131 <li>ノーマルレベルとメタレベルの計算を1つの言語で表現できる言語として、本研究室で設計した CbC を用いる。</li> 160 <li>ノーマルレベルとメタレベルの計算を1つの言語で表現できる言語として、本研究室で設計した CbC を用いる。</li>
132 <li>ノーマルレベルの計算 161 <li>ノーマルレベルの計算
133 <ul> 162 <ul>
134 <li>コンピュータの計算はプログラミング言語で行われる。</li> 163 <li>コンピュータの計算はプログラミング言語で行われる。</li>
138 <li>メタレベルの計算 167 <li>メタレベルの計算
139 <ul> 168 <ul>
140 <li>コードが実行される際の以下の部分が、メタレベルの計算という。 169 <li>コードが実行される際の以下の部分が、メタレベルの計算という。
141 <ul> 170 <ul>
142 <li>処理系の詳細や使用する資源</li> 171 <li>処理系の詳細や使用する資源</li>
143 <li>コードの仕様や型などの言語以外の部分</li> 172 <li>コードの仕様や型などの部分</li>
144 </ul> 173 </ul>
145 </li> 174 </li>
146 </ul> 175 </ul>
147 </li> 176 </li>
148 </ul> 177 </ul>
149 178
150 179
151 </div> 180 </div>
152 <div class='slide '> 181 <div class='slide '>
153 <!-- _S9SLIDE_ --> 182 <!-- _S9SLIDE_ -->
154 <h1 id="cbc-1">CbC</h1> 183 <h2 id="cbc-1">CbC</h2>
155 <ul> 184 <ul>
156 <li>CbC を用いることで、ノーマルレベルの計算の信頼性をメタレベルから保証できるようになる。</li> 185 <li>CbC を用いることで、ノーマルレベルの計算の信頼性をメタレベルから保証できるようになる。</li>
157 <li>CbC を用いてCode Gear と Data Gear、メタ構造を導入する。</li> 186 <li>CbC を用いてCode Gear と Data Gear を導入する。</li>
158 </ul> 187 </ul>
159 188
160 189
161 </div> 190 </div>
162 <div class='slide '> 191 <div class='slide '>
163 <!-- _S9SLIDE_ --> 192 <!-- _S9SLIDE_ -->
164 <h1 id="cbc-">CbC の構文</h1> 193 <h2 id="cbc-">CbC の構文</h2>
165 <ul lang="c"> 194 <ul lang="c">
166 <li>CbC の Code Gear は __code という型を持つ関数として記述する。</li> 195 <li>CbC の Code Gear は __code という型を持つ関数として記述する。</li>
167 <li>継続で次の Code Gear に遷移するので、戻り値は持たない。</li> 196 <li>継続で次の Code Gear に遷移するので、戻り値は持たない。</li>
168 <li>遷移は goto 文による継続で処理を行い、引数として入出力を行う。</li> 197 <li>遷移は goto 文による継続で処理を行い、引数として入出力を行う。</li>
169 </ul> 198 </ul>
172 } 201 }
173 __code cg1(int c) { 202 __code cg1(int c) {
174 goto cg2(c); 203 goto cg2(c);
175 } 204 }
176 </code></pre> 205 </code></pre>
177 206 <ul>
178 207 <li>CbC の記述だけでは並列実行にならない</li>
179 </div> 208 </ul>
180 <div class='slide '> 209
181 <!-- _S9SLIDE_ --> 210
182 <h1 id="section-1">スライドの流れ</h1> 211 </div>
212 <div class='slide '>
213 <!-- _S9SLIDE_ -->
214 <h2 id="section-1">スライドの流れ</h2>
183 <ul> 215 <ul>
184 <li>CbC</li> 216 <li>CbC</li>
185 <li> 217 <li>
186 <font color="red">Gears OS における並列実行</font> 218 <font color="red">Gears OS における並列実行</font>
187 </li> 219 </li>
191 223
192 224
193 </div> 225 </div>
194 <div class='slide '> 226 <div class='slide '>
195 <!-- _S9SLIDE_ --> 227 <!-- _S9SLIDE_ -->
196 <h1 id="gears-">Gears における並列実行</h1> 228 <h2 id="gears-">Gears における並列実行</h2>
197 <ul> 229 <ul>
198 <li>Gears OS ではメタ計算を柔軟に記述するためのプログラミングの単位として Code Gear と Data Gear を用いる。</li> 230 <li>Gears OS ではメタ計算を柔軟に記述するためのプログラミングの単位として Code Gear と Data Gear を用いる。</li>
199 <li>それぞれにメタレベルの単位が存在し、Meta Data Gear と Meta Code Gear と呼ぶ。</li> 231 <li>それぞれにメタレベルの単位が存在し、Meta Data Gear と Meta Code Gear と呼ぶ。</li>
200 <li>メタレベルの計算は Perl スクリプトによって生成され、Code Gear で記述される。</li> 232 <li>メタレベルの計算は Perl スクリプトによって生成され、Code Gear で記述される。</li>
201 </ul> 233 </ul>
202 234 <div style="text-align: center;">
203 235 <img src="./image/meta_cg_dg.svg" alt="Gears OS の構造" width="700" />
204 </div> 236 </div>
205 <div class='slide '> 237
206 <!-- _S9SLIDE_ --> 238
207 <h1 id="interface">Interface</h1> 239 </div>
208 <ul> 240 <div class='slide '>
209 <li>この時、Code Gear と Deta Gear は Interface と呼ばれるまとまり(モジュール)で記述される。</li> 241 <!-- _S9SLIDE_ -->
210 <li>Interface 作成時に Code Gear の集合を指定することにより複数の実装を持つことができる。</li> 242 <h2 id="gears-os-">Gears OS の構造</h2>
211 </ul> 243 <div style="text-align: center;">
212 244 <img src="./image/gearsos.svg" alt="Gears OS の構造" width="700" />
213 245 </div>
214 </div> 246
215 <div class='slide '> 247
216 <!-- _S9SLIDE_ --> 248 </div>
217 <h1 id="context">Context</h1> 249 <div class='slide '>
250 <!-- _S9SLIDE_ -->
251 <h2 id="context">Context</h2>
218 <ul> 252 <ul>
219 <li>1つのスレッド内で使われる Interface の Code Gear と Data Gear は Meta Data Gear に格納される。</li> 253 <li>1つのスレッド内で使われる Interface の Code Gear と Data Gear は Meta Data Gear に格納される。</li>
220 <li>この Meta Data Gear を Context と呼ぶ。</li> 254 <li>この Meta Data Gear を Context と呼ぶ。</li>
221 <li>Context を複製して複数の CPU に割り当てることにより並列実行が可能になる。</li> 255 <li>Context を複製して複数の CPU に割り当てることにより並列実行が可能になる。</li>
222 </ul> 256 <li>Context は Task でもある。</li>
223 257 <li>Task は実行する Code Gear と Data Gear を全て持っている。</li>
224 258 </ul>
225 </div> 259
226 <div class='slide '> 260
227 <!-- _S9SLIDE_ --> 261 </div>
228 <h1 id="par-goto">par goto</h1> 262 <div class='slide '>
263 <!-- _S9SLIDE_ -->
264 <h2 id="par-goto">par goto</h2>
229 <ul> 265 <ul>
230 <li>Context の複製には par goto を用いる。</li> 266 <li>Context の複製には par goto を用いる。</li>
231 <li>他に、入力の同期、タスクスケジューラへの Context の登録が行われる。</li> 267 <li>他に、入力の同期、タスクスケジューラへの Context の登録が行われる。</li>
232 </ul> 268 </ul>
233 269
234 270
235 </div> 271 </div>
236 <div class='slide '> 272 <div class='slide '>
237 <!-- _S9SLIDE_ --> 273 <!-- _S9SLIDE_ -->
238 <h1 id="task">Task</h1> 274 <h2 id="code-gear--code-gear-">1つの Code Gear の実行は他の Code Gear に割り込まれない</h2>
239 <ul> 275 <ul>
240 <li>Context は Task でもある。</li> 276 <li>共有された Data Gear があった時に、それに対する変更はただ1つの Code Gear だけが許される</li>
241 <li>実行する Code Gear と Data Gear を全て持っている。</li> 277 <li>読み込みは複数であってもいい</li>
242 </ul> 278 <li>Agda 側で、並列実行を Code Gear の順次実行としてシミュレーションするため</li>
243 279 <li>このような実行になるように Gears OS の実装を行う</li>
244 280 </ul>
245 </div> 281
246 <div class='slide '> 282
247 <!-- _S9SLIDE_ --> 283 </div>
248 <h1 id="exit">__exit</h1> 284 <div class='slide '>
285 <!-- _S9SLIDE_ -->
286 <h2 id="exit">__exit</h2>
249 <ul lang="c"> 287 <ul lang="c">
250 <li>par goto で生成された Task は __exit に継続することで終了する。</li> 288 <li>複数実行した時に、共有 Data Gear に書き込みを成功したかを確認する(commit)</li>
251 <li>GearsOS の Task は Output Data Gear を生成した時点で終了する。</li> 289 <li>par goto で生成された Task は __exit に継続することで終了する</li>
290 <li>GearsOS の Task は Output Data Gear を生成した時点で終了する</li>
252 <li>そのため、par goto では直接 __exit に継続せず、Output Data Gear への書き出し処理に継続される。</li> 291 <li>そのため、par goto では直接 __exit に継続せず、Output Data Gear への書き出し処理に継続される。</li>
253 <li>Code Gear と Data Gear の依存関係をノーマルレベルで記述できるようになる。</li> 292 <li>Code Gear と Data Gear の依存関係をノーマルレベルで記述できるようになる。</li>
254 </ul> 293 </ul>
255 <pre><code>__code code1(Integer *integer1, Integer * integer2, Integer *output) { 294 <pre><code>__code code1(Integer *integer1, Integer * integer2, Integer *output) {
256 par goto add(integer1, integer2, output, __exit); 295 par goto add(integer1, integer2, output, __exit);
260 299
261 300
262 </div> 301 </div>
263 <div class='slide '> 302 <div class='slide '>
264 <!-- _S9SLIDE_ --> 303 <!-- _S9SLIDE_ -->
265 <h1 id="section-2">スライドの流れ</h1> 304 <h2 id="section-2">スライドの流れ</h2>
266 <ul> 305 <ul>
267 <li>CbC</li> 306 <li>CbC</li>
268 <li>Gears OS における並列実行</li> 307 <li>Gears OS における並列実行</li>
269 <li> 308 <li>
270 <font color="red">比較</font> 309 <font color="red">比較</font>
274 313
275 314
276 </div> 315 </div>
277 <div class='slide '> 316 <div class='slide '>
278 <!-- _S9SLIDE_ --> 317 <!-- _S9SLIDE_ -->
279 <h1 id="gears-os-">Gears OS の評価</h1> 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>
280 <ul> 330 <ul>
281 <li>CPU、GPU環境で Gears OS の測定を行う。</li> 331 <li>CPU、GPU環境で Gears OS の測定を行う。</li>
282 <li>使用した環境は次のようになる。 332 <li>使用した環境は次のようになる。
283 <ul> 333 <ul>
284 <li>CPU 環境 334 <li>CPU 環境
302 352
303 353
304 </div> 354 </div>
305 <div class='slide '> 355 <div class='slide '>
306 <!-- _S9SLIDE_ --> 356 <!-- _S9SLIDE_ -->
307 <h1 id="twice">Twice</h1> 357 <h2 id="twice">Twice</h2>
308 <ul> 358 <ul>
309 <li>評価には与えられた整数配列の全ての要素を2倍にする例題である Twice を使う。</li> 359 <li>評価には与えられた整数配列の全ての要素を2倍にする例題である Twice を使う。</li>
310 <li>Twice では 通信時間を考慮しなければ、CPU より コア数の多い GPU が有利となる。</li> 360 <li>Twice では 通信時間を考慮しなければ、CPU より コア数の多い GPU が有利となる。</li>
311 <li>要素数2^27のデータに対する Twice の実行結果を示す。 361 <li>要素数2^27のデータに対する Twice の実行結果を示す。
312 <ul> 362 <ul>
359 409
360 410
361 </div> 411 </div>
362 <div class='slide '> 412 <div class='slide '>
363 <!-- _S9SLIDE_ --> 413 <!-- _S9SLIDE_ -->
364 <h1 id="section-3">評価の考察</h1> 414 <h2 id="section-3">評価の考察</h2>
365 <ul> 415 <ul>
366 <li>コア数が上がるごとに、処理速度が上がっている。</li> 416 <li>コア数が上がるごとに、処理速度が上がっている。</li>
367 <li>GPUでの実行は 32CPU に比べて約7.2倍の速度向上が見られた。</li> 417 <li>GPUでの実行は 32CPU に比べて約7.2倍の速度向上が見られた。</li>
368 <li>通信速度を含めると 16CPU より遅い。</li> 418 <li>通信速度を含めると 16CPU より遅い。</li>
369 </ul> 419 </ul>
370 420
371 421
372 </div> 422 </div>
373 <div class='slide '> 423 <div class='slide '>
374 <!-- _S9SLIDE_ --> 424 <!-- _S9SLIDE_ -->
375 <h1 id="go-">Go 言語との比較</h1> 425 <h2 id="go-">Go 言語との比較</h2>
376 <ul> 426 <ul>
377 <li>Go 言語でも Twice を用いた検証を行い、Gears OS との速度比較を行なった。</li> 427 <li>Go 言語でも Twice を用いた検証を行い、Gears OS との速度比較を行なった。</li>
378 <li>1CPU と 32CPU では約4.33倍の速度向上が見られた。</li> 428 <li>1CPU と 32CPU では約4.33倍の速度向上が見られた。</li>
379 <li>CPU数による速度向上は、Gears OS の方が上だが、処理速度では Go言語の方が速い結果となった。</li> 429 <li>CPU数による速度向上は、Gears OS の方が上だが、処理速度では Go言語の方が速い結果となった。</li>
380 </ul> 430 </ul>
381 <div style="text-align: center;"> 431 <div style="text-align: center;">
382 <img src="./image/vsgo.svg" alt="message" width="500" /> 432 <img src="./image/vsgo.svg" alt="Goとの比較" width="500" />
383 </div> 433 </div>
384 434
385 435
386 </div> 436 </div>
387 <div class='slide '> 437 <div class='slide '>
388 <!-- _S9SLIDE_ --> 438 <!-- _S9SLIDE_ -->
389 <h1 id="section-4">スライドの流れ</h1> 439 <h2 id="section-4">スライドの流れ</h2>
390 <ul> 440 <ul>
391 <li>CbC</li> 441 <li>CbC</li>
392 <li>Gears OS における並列実行</li> 442 <li>Gears OS における並列実行</li>
393 <li>比較</li> 443 <li>比較</li>
394 <li> 444 <li>
398 448
399 449
400 </div> 450 </div>
401 <div class='slide '> 451 <div class='slide '>
402 <!-- _S9SLIDE_ --> 452 <!-- _S9SLIDE_ -->
403 <h1 id="section-5">今後の課題</h1> 453 <h2 id="section-5">今後の課題</h2>
404 <ul> 454 <ul>
405 <li>Go 言語との比較から 1CPU での動作が遅いことがわかった。</li> 455 <li>Go 言語との比較から 1CPU での動作が遅いことがわかった。</li>
406 <li>par goto 文を使用することで、Contextを生成し、並列処理を行う。</li> 456 <li>par goto 文を使用することで、Contextを生成し、並列処理を行う。</li>
407 <li>しかし、Context はメモリ空間の確保や使用する全ての Code Gear Data Gear の設定をする必要があり、生成に時間がかかってしまう事が原因。</li> 457 <li>しかし、Context はメモリ空間の確保や使用する全ての Code Gear Data Gear の設定をする必要があり、生成に時間がかかってしまう事が原因。</li>
408 <li>処理が軽い場合は Context を生成しないようなチューニングが必要である。</li> 458 <li>処理が軽い場合は Context を生成しないようなチューニングが必要である。</li>