comparison Slide/prosym.pdf.html @ 11:6fdcb5241bda default tip

before Society
author tobaru
date Tue, 22 May 2018 11:56:32 +0900
parents d4e58a38aae7
children
comparison
equal deleted inserted replaced
10:d4e58a38aae7 11:6fdcb5241bda
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-22 10:11:16 +0900 with Markdown engine kramdown (1.13.2) 73 on 2018-05-22 10:58:28 +0900 with Markdown engine kramdown (1.13.2)
74 using options {} 74 using options {}
75 --> 75 -->
76 76
77 <!-- _S9SLIDE_ --> 77 <!-- _S9SLIDE_ -->
78 <h2 id="gears-os">Gears OS</h2> 78 <h2 id="gears-os">Gears OS</h2>
91 <div class='slide '> 91 <div class='slide '>
92 <!-- _S9SLIDE_ --> 92 <!-- _S9SLIDE_ -->
93 <h2 id="section">スライドの流れ</h2> 93 <h2 id="section">スライドの流れ</h2>
94 <ul> 94 <ul>
95 <li> 95 <li>
96 <font color="red">Interface</font> 96 <font color="red">Gears OS での形式化とInterfaceの導入</font>
97 </li> 97 </li>
98 <li>並列API</li> 98 <li>並列API</li>
99 <li>CbC</li> 99 <li>CbC</li>
100 <li>Gears OS における並列実行</li> 100 <li>Gears OS における並列実行</li>
101 <li>比較</li> 101 <li>比較</li>
104 104
105 105
106 </div> 106 </div>
107 <div class='slide '> 107 <div class='slide '>
108 <!-- _S9SLIDE_ --> 108 <!-- _S9SLIDE_ -->
109 <h2 id="gears-os-interface">Gears OS での形式化とInterfaceの導入</h2> 109 <h2 id="gears-os-">Gears OS での形式化</h2>
110 <ul> 110 <ul>
111 <li>形式化とは仕様、実装、実行を Logic で記述する事である。</li> 111 <li>形式化とは仕様、実装、実行を Logic で記述する事である。</li>
112 <li>Gears OS では、継続を使った関数型プログラムとして実装を記述する</li> 112 <li>Gears OS では、継続を使った関数型プログラムとして実装を記述する</li>
113 <li>Logic としては、依存型関数言語である Agda を使う(外間の発表)</li> 113 <li>Logic としては、依存型関数言語である Agda を使う(外間の発表)</li>
114 <li>証明とモデル検査を使って、信頼性を確保する</li> 114 <li>証明とモデル検査を使って、信頼性を確保する</li>
118 </div> 118 </div>
119 <div class='slide '> 119 <div class='slide '>
120 <!-- _S9SLIDE_ --> 120 <!-- _S9SLIDE_ -->
121 <h2 id="gears-os--interface">Gears OS の Interface</h2> 121 <h2 id="gears-os--interface">Gears OS の Interface</h2>
122 <ul> 122 <ul>
123 <li>Code Gear と Deta Gear は Interface と呼ばれるまとまり(モジュール)で記述される。 123 <li>Code Gear と Deta Gear は Interface と呼ばれるまとまりで記述される。
124 <ul> 124 <ul>
125 <li>Gears OS のモジュール化</li> 125 <li>Gears OS のモジュール化</li>
126 </ul> 126 </ul>
127 </li> 127 </li>
128 <li>Interface 作成時に Code Gear の集合を指定することにより複数の実装(並列処理)を持つことができる。</li> 128 <li>Interface 作成時に Code Gear の集合を指定することにより複数の実装(並列処理)を持つことができる。</li>
135 </div> 135 </div>
136 <div class='slide '> 136 <div class='slide '>
137 <!-- _S9SLIDE_ --> 137 <!-- _S9SLIDE_ -->
138 <h2 id="section-1">スライドの流れ</h2> 138 <h2 id="section-1">スライドの流れ</h2>
139 <ul> 139 <ul>
140 <li>Interface</li> 140 <li>Gears OS での形式化とInterfaceの導入</li>
141 <li> 141 <li>
142 <font color="red">並列API</font> 142 <font color="red">並列API</font>
143 </li> 143 </li>
144 <li>CbC</li> 144 <li>CbC</li>
145 <li>Gears OS における並列実行</li> 145 <li>Gears OS における並列実行</li>
167 </div> 167 </div>
168 <div class='slide '> 168 <div class='slide '>
169 <!-- _S9SLIDE_ --> 169 <!-- _S9SLIDE_ -->
170 <h2 id="section-2">スライドの流れ</h2> 170 <h2 id="section-2">スライドの流れ</h2>
171 <ul> 171 <ul>
172 <li>Interface</li> 172 <li>Gears OS での形式化とInterfaceの導入</li>
173 <li>並列API</li> 173 <li>並列API</li>
174 <li> 174 <li>
175 <font color="red">CbC</font> 175 <font color="red">CbC</font>
176 </li> 176 </li>
177 <li>Gears OS における並列実行</li> 177 <li>Gears OS における並列実行</li>
187 <ul> 187 <ul>
188 <li>ノーマルレベルとメタレベルの計算をまとめて表現できる言語として、本研究室で設計した CbC を用いる。 188 <li>ノーマルレベルとメタレベルの計算をまとめて表現できる言語として、本研究室で設計した CbC を用いる。
189 <ul> 189 <ul>
190 <li>ノーマルレベルの計算 190 <li>ノーマルレベルの計算
191 <ul> 191 <ul>
192 <li>コンピュータの計算はプログラミング言語で行われる。</li> 192 <li>コンピュータの計算はプログラミング言語で記述される。</li>
193 <li>その部分をノーマルレベルの計算と呼ぶ。</li> 193 <li>その部分をノーマルレベルの計算と呼ぶ。</li>
194 </ul> 194 </ul>
195 </li> 195 </li>
196 <li>メタレベルの計算 196 <li>メタレベルの計算
197 <ul> 197 <ul>
251 </div> 251 </div>
252 <div class='slide '> 252 <div class='slide '>
253 <!-- _S9SLIDE_ --> 253 <!-- _S9SLIDE_ -->
254 <h2 id="section-3">スライドの流れ</h2> 254 <h2 id="section-3">スライドの流れ</h2>
255 <ul> 255 <ul>
256 <li>Interface</li> 256 <li>Gears OS での形式化とInterfaceの導入</li>
257 <li>並列API</li> 257 <li>並列API</li>
258 <li>CbC</li> 258 <li>CbC</li>
259 <li> 259 <li>
260 <font color="red">Gears OS における並列実行</font> 260 <font color="red">Gears OS における並列実行</font>
261 </li> 261 </li>
279 279
280 280
281 </div> 281 </div>
282 <div class='slide '> 282 <div class='slide '>
283 <!-- _S9SLIDE_ --> 283 <!-- _S9SLIDE_ -->
284 <h2 id="gears-os-">Gears OS の構造</h2> 284 <h2 id="gears-os--1">Gears OS の構造</h2>
285 <ul> 285 <ul>
286 <li>Gears OS は以下の要素で構成されている 286 <li>Gears OS は以下の要素で構成されている
287 <ul> 287 <ul>
288 <li>Context</li> 288 <li>Context</li>
289 <li>TaskQueue</li> 289 <li>TaskQueue</li>
303 <!-- _S9SLIDE_ --> 303 <!-- _S9SLIDE_ -->
304 <h2 id="context">Context</h2> 304 <h2 id="context">Context</h2>
305 <ul> 305 <ul>
306 <li>1つのスレッド内で使われる Interface の Code Gear と Data Gear は Meta Data Gear に格納される。</li> 306 <li>1つのスレッド内で使われる Interface の Code Gear と Data Gear は Meta Data Gear に格納される。</li>
307 <li>この Meta Data Gear を Context と呼ぶ。</li> 307 <li>この Meta Data Gear を Context と呼ぶ。</li>
308 <li>Context を複製して複数の CPU に割り当てることにより並列実行が可能になる。</li> 308 <li><strong>Context を複製して複数の CPU に割り当てることにより並列実行が可能になる。</strong></li>
309 <li>ノーマルレベルでは見る事ができない。</li> 309 <li>ノーマルレベルでは見る事ができない。</li>
310 </ul>
311 <div style="text-align: center;">
312 <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" />
313 </div>
314
315
316 </div>
317 <div class='slide '>
318 <!-- _S9SLIDE_ -->
319 <h2 id="task">Task</h2>
320 <ul>
310 <li>Context は Task でもある。</li> 321 <li>Context は Task でもある。</li>
311 <li>Task は実行する Code Gear と Data Gear を全て持っている。</li> 322 <li>Task は実行する Code Gear と Data Gear を全て持っている。
323 <ul>
324 <li>Interface の Code Gear と Data Gear は Meta Data Gear に格納</li>
325 </ul>
326 </li>
312 </ul> 327 </ul>
313 <div style="text-align: center;"> 328 <div style="text-align: center;">
314 <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" /> 329 <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" />
315 </div> 330 </div>
316 331
346 </div> 361 </div>
347 <div class='slide '> 362 <div class='slide '>
348 <!-- _S9SLIDE_ --> 363 <!-- _S9SLIDE_ -->
349 <h2 id="code-gear--code-gear-">1つの Code Gear の実行は他の Code Gear に割り込まれない</h2> 364 <h2 id="code-gear--code-gear-">1つの Code Gear の実行は他の Code Gear に割り込まれない</h2>
350 <ul> 365 <ul>
351 <li>共有された Data Gear があった時に、それに対する変更はただ1つの Code Gear だけが許される</li> 366 <li>共有された Data Gear があった時に、それに対する変更はただ1つの Code Gear だけが許される
352 <li>読み込みは複数であってもいい</li> 367 <ul>
368 <li>読み込みは複数であってもいい</li>
369 </ul>
370 </li>
353 <li>Agda 側で、並列実行を Code Gear の順次実行としてシミュレーションするため</li> 371 <li>Agda 側で、並列実行を Code Gear の順次実行としてシミュレーションするため</li>
354 <li>このような実行になるように Gears OS の実装を行う</li> 372 <li>このような実行になるように Gears OS の実装を行う</li>
355 </ul> 373 </ul>
356 374
357 <div style="text-align: center;"> 375 <div style="text-align: center;">
358 <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" /> 376 <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" />
359 </div> 377 </div>
360 378
361 <h1 id="par-goto">par goto</h1> 379
380 </div>
381 <div class='slide '>
382 <!-- _S9SLIDE_ -->
383 <h2 id="par-goto">par goto</h2>
362 <ul> 384 <ul>
363 <li>Context(Task) の複製には par goto を用いる。</li> 385 <li>Context(Task) の複製には par goto を用いる。</li>
364 <li>他に、入力の同期、タスクスケジューラへの Context の登録が行われる。</li>
365 <li>複数実行した時に、共有 Data Gear に書き込みを成功したかを確認(commit)するために __exit を使用する。</li> 386 <li>複数実行した時に、共有 Data Gear に書き込みを成功したかを確認(commit)するために __exit を使用する。</li>
366 <li>par goto で生成された Task は __exit に継続することで終了する</li> 387 <li>par goto で生成された Task は Output Data Gear を生成した時点で終了する
367 <li>GearsOS の Task は Output Data Gear を生成した時点で終了する</li> 388 <ul>
368 <li>そのため、par goto では直接 __exit に継続せず、Output Data Gear への書き出し処理に継続される。</li> 389 <li>そのため、par goto では直接 __exit に継続せず、Output Data Gear への書き出し処理に継続される。</li>
390 <li>割り込みを防ぐため</li>
391 </ul>
392 </li>
369 </ul> 393 </ul>
370 394
371 <pre lang="c"><code>__code code1(Integer *integer1, Integer * integer2, Integer *output) { 395 <pre lang="c"><code>__code code1(Integer *integer1, Integer * integer2, Integer *output) {
372 par goto add(integer1, integer2, output, __exit); 396 par goto add(integer1, integer2, output, __exit);
373 goto code2(); 397 goto code2();
404 </div> 428 </div>
405 <div class='slide '> 429 <div class='slide '>
406 <!-- _S9SLIDE_ --> 430 <!-- _S9SLIDE_ -->
407 <h2 id="section-4">スライドの流れ</h2> 431 <h2 id="section-4">スライドの流れ</h2>
408 <ul> 432 <ul>
409 <li>Interface</li> 433 <li>Gears OS での形式化とInterfaceの導入</li>
410 <li>並列API</li> 434 <li>並列API</li>
411 <li>CbC</li> 435 <li>CbC</li>
412 <li>Gears OS における並列実行</li> 436 <li>Gears OS における並列実行</li>
413 <li> 437 <li>
414 <font color="red">比較</font> 438 <font color="red">比較</font>
418 442
419 443
420 </div> 444 </div>
421 <div class='slide '> 445 <div class='slide '>
422 <!-- _S9SLIDE_ --> 446 <!-- _S9SLIDE_ -->
423 <h2 id="gears-os--1">Gears OS の評価(目的)</h2> 447 <h2 id="gears-os--2">Gears OS の評価(目的)</h2>
424 <ul> 448 <ul>
425 <li>並列構文とそれを実現する Meta Compitation が十分に揃っているかを確認したい</li> 449 <li>並列構文とそれを実現する Meta Compitation が十分に揃っているかを確認したい</li>
426 <li>並列処理の台数効果を確認する</li> 450 <li>並列処理の台数効果を確認する</li>
427 <li>既存の並列言語と比較して不要なオーバーヘッドがあるか調べたい</li> 451 <li>既存の並列言語と比較して不要なオーバーヘッドがあるか調べたい</li>
428 </ul> 452 </ul>
429 453
430 454
431 </div> 455 </div>
432 <div class='slide '> 456 <div class='slide '>
433 <!-- _S9SLIDE_ --> 457 <!-- _S9SLIDE_ -->
434 <h2 id="gears-os--2">Gears OS の評価(環境)</h2> 458 <h2 id="gears-os--3">Gears OS の評価(環境)</h2>
435 <ul> 459 <ul>
436 <li>CPU、GPU環境で Gears OS の測定を行う。</li> 460 <li>CPU、GPU環境で Gears OS の測定を行う。</li>
437 <li>使用した環境は次のようになる。 461 <li>使用した環境は次のようになる。
438 <ul> 462 <ul>
439 <li>CPU 環境 463 <li>CPU 環境
590 </div> 614 </div>
591 <div class='slide '> 615 <div class='slide '>
592 <!-- _S9SLIDE_ --> 616 <!-- _S9SLIDE_ -->
593 <h2 id="section-6">スライドの流れ</h2> 617 <h2 id="section-6">スライドの流れ</h2>
594 <ul> 618 <ul>
595 <li>Interface</li> 619 <li>Gears OS での形式化とInterfaceの導入</li>
596 <li>並列API</li> 620 <li>並列API</li>
597 <li>CbC</li> 621 <li>CbC</li>
598 <li>Gears OS における並列実行</li> 622 <li>Gears OS における並列実行</li>
599 <li>比較</li> 623 <li>比較</li>
600 <li> 624 <li>
604 628
605 629
606 </div> 630 </div>
607 <div class='slide '> 631 <div class='slide '>
608 <!-- _S9SLIDE_ --> 632 <!-- _S9SLIDE_ -->
609 <h2 id="section-7">スライドの流れ</h2> 633 <h2 id="section-7">今後の課題</h2>
610 <ul>
611 <li>CbC</li>
612 <li>Gears OS における並列実行</li>
613 <li>比較</li>
614 <li>
615 <font color="red">今後の課題</font>
616 </li>
617 </ul>
618
619
620 </div>
621 <div class='slide '>
622 <!-- _S9SLIDE_ -->
623 <h2 id="section-8">今後の課題</h2>
624 <ul> 634 <ul>
625 <li>Go 言語との比較から 1CPU での動作が遅いことがわかった。</li> 635 <li>Go 言語との比較から 1CPU での動作が遅いことがわかった。</li>
626 <li>par goto 文を使用することで、Contextを生成し、並列処理を行う。</li> 636 <li>par goto 文を使用することで、Contextを生成し、並列処理を行う。</li>
627 <li>しかし、Context はメモリ空間の確保や使用する全ての Code Gear Data Gear の設定をする必要があり、生成に時間がかかってしまう事が原因。</li> 637 <li>しかし、Context はメモリ空間の確保や使用する全ての Code Gear Data Gear の設定をする必要があり、生成に時間がかかってしまう事が原因。</li>
628 <li>処理が軽い場合は Context を生成しないようなチューニングが必要である。</li> 638 <li>処理が軽い場合は Context を生成しないようなチューニングが必要である。</li>