comparison Slide/prosym.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
84 84
85 <div class='slide '> 85 <div class='slide '>
86 <!-- === begin markdown block === 86 <!-- === begin markdown block ===
87 87
88 generated by markdown/1.2.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin15] 88 generated by markdown/1.2.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin15]
89 on 2018-05-22 10:11:16 +0900 with Markdown engine kramdown (1.13.2) 89 on 2018-05-22 10:58:28 +0900 with Markdown engine kramdown (1.13.2)
90 using options {} 90 using options {}
91 --> 91 -->
92 92
93 <!-- _S9SLIDE_ --> 93 <!-- _S9SLIDE_ -->
94 <h2 id="gears-os">Gears OS</h2> 94 <h2 id="gears-os">Gears OS</h2>
107 <div class='slide '> 107 <div class='slide '>
108 <!-- _S9SLIDE_ --> 108 <!-- _S9SLIDE_ -->
109 <h2 id="section">スライドの流れ</h2> 109 <h2 id="section">スライドの流れ</h2>
110 <ul> 110 <ul>
111 <li> 111 <li>
112 <font color="red">Interface</font> 112 <font color="red">Gears OS での形式化とInterfaceの導入</font>
113 </li> 113 </li>
114 <li>並列API</li> 114 <li>並列API</li>
115 <li>CbC</li> 115 <li>CbC</li>
116 <li>Gears OS における並列実行</li> 116 <li>Gears OS における並列実行</li>
117 <li>比較</li> 117 <li>比較</li>
120 120
121 121
122 </div> 122 </div>
123 <div class='slide '> 123 <div class='slide '>
124 <!-- _S9SLIDE_ --> 124 <!-- _S9SLIDE_ -->
125 <h2 id="gears-os-interface">Gears OS での形式化とInterfaceの導入</h2> 125 <h2 id="gears-os-">Gears OS での形式化</h2>
126 <ul> 126 <ul>
127 <li>形式化とは仕様、実装、実行を Logic で記述する事である。</li> 127 <li>形式化とは仕様、実装、実行を Logic で記述する事である。</li>
128 <li>Gears OS では、継続を使った関数型プログラムとして実装を記述する</li> 128 <li>Gears OS では、継続を使った関数型プログラムとして実装を記述する</li>
129 <li>Logic としては、依存型関数言語である Agda を使う(外間の発表)</li> 129 <li>Logic としては、依存型関数言語である Agda を使う(外間の発表)</li>
130 <li>証明とモデル検査を使って、信頼性を確保する</li> 130 <li>証明とモデル検査を使って、信頼性を確保する</li>
134 </div> 134 </div>
135 <div class='slide '> 135 <div class='slide '>
136 <!-- _S9SLIDE_ --> 136 <!-- _S9SLIDE_ -->
137 <h2 id="gears-os--interface">Gears OS の Interface</h2> 137 <h2 id="gears-os--interface">Gears OS の Interface</h2>
138 <ul> 138 <ul>
139 <li>Code Gear と Deta Gear は Interface と呼ばれるまとまり(モジュール)で記述される。 139 <li>Code Gear と Deta Gear は Interface と呼ばれるまとまりで記述される。
140 <ul> 140 <ul>
141 <li>Gears OS のモジュール化</li> 141 <li>Gears OS のモジュール化</li>
142 </ul> 142 </ul>
143 </li> 143 </li>
144 <li>Interface 作成時に Code Gear の集合を指定することにより複数の実装(並列処理)を持つことができる。</li> 144 <li>Interface 作成時に Code Gear の集合を指定することにより複数の実装(並列処理)を持つことができる。</li>
151 </div> 151 </div>
152 <div class='slide '> 152 <div class='slide '>
153 <!-- _S9SLIDE_ --> 153 <!-- _S9SLIDE_ -->
154 <h2 id="section-1">スライドの流れ</h2> 154 <h2 id="section-1">スライドの流れ</h2>
155 <ul> 155 <ul>
156 <li>Interface</li> 156 <li>Gears OS での形式化とInterfaceの導入</li>
157 <li> 157 <li>
158 <font color="red">並列API</font> 158 <font color="red">並列API</font>
159 </li> 159 </li>
160 <li>CbC</li> 160 <li>CbC</li>
161 <li>Gears OS における並列実行</li> 161 <li>Gears OS における並列実行</li>
183 </div> 183 </div>
184 <div class='slide '> 184 <div class='slide '>
185 <!-- _S9SLIDE_ --> 185 <!-- _S9SLIDE_ -->
186 <h2 id="section-2">スライドの流れ</h2> 186 <h2 id="section-2">スライドの流れ</h2>
187 <ul> 187 <ul>
188 <li>Interface</li> 188 <li>Gears OS での形式化とInterfaceの導入</li>
189 <li>並列API</li> 189 <li>並列API</li>
190 <li> 190 <li>
191 <font color="red">CbC</font> 191 <font color="red">CbC</font>
192 </li> 192 </li>
193 <li>Gears OS における並列実行</li> 193 <li>Gears OS における並列実行</li>
203 <ul> 203 <ul>
204 <li>ノーマルレベルとメタレベルの計算をまとめて表現できる言語として、本研究室で設計した CbC を用いる。 204 <li>ノーマルレベルとメタレベルの計算をまとめて表現できる言語として、本研究室で設計した CbC を用いる。
205 <ul> 205 <ul>
206 <li>ノーマルレベルの計算 206 <li>ノーマルレベルの計算
207 <ul> 207 <ul>
208 <li>コンピュータの計算はプログラミング言語で行われる。</li> 208 <li>コンピュータの計算はプログラミング言語で記述される。</li>
209 <li>その部分をノーマルレベルの計算と呼ぶ。</li> 209 <li>その部分をノーマルレベルの計算と呼ぶ。</li>
210 </ul> 210 </ul>
211 </li> 211 </li>
212 <li>メタレベルの計算 212 <li>メタレベルの計算
213 <ul> 213 <ul>
267 </div> 267 </div>
268 <div class='slide '> 268 <div class='slide '>
269 <!-- _S9SLIDE_ --> 269 <!-- _S9SLIDE_ -->
270 <h2 id="section-3">スライドの流れ</h2> 270 <h2 id="section-3">スライドの流れ</h2>
271 <ul> 271 <ul>
272 <li>Interface</li> 272 <li>Gears OS での形式化とInterfaceの導入</li>
273 <li>並列API</li> 273 <li>並列API</li>
274 <li>CbC</li> 274 <li>CbC</li>
275 <li> 275 <li>
276 <font color="red">Gears OS における並列実行</font> 276 <font color="red">Gears OS における並列実行</font>
277 </li> 277 </li>
295 295
296 296
297 </div> 297 </div>
298 <div class='slide '> 298 <div class='slide '>
299 <!-- _S9SLIDE_ --> 299 <!-- _S9SLIDE_ -->
300 <h2 id="gears-os-">Gears OS の構造</h2> 300 <h2 id="gears-os--1">Gears OS の構造</h2>
301 <ul> 301 <ul>
302 <li>Gears OS は以下の要素で構成されている 302 <li>Gears OS は以下の要素で構成されている
303 <ul> 303 <ul>
304 <li>Context</li> 304 <li>Context</li>
305 <li>TaskQueue</li> 305 <li>TaskQueue</li>
319 <!-- _S9SLIDE_ --> 319 <!-- _S9SLIDE_ -->
320 <h2 id="context">Context</h2> 320 <h2 id="context">Context</h2>
321 <ul> 321 <ul>
322 <li>1つのスレッド内で使われる Interface の Code Gear と Data Gear は Meta Data Gear に格納される。</li> 322 <li>1つのスレッド内で使われる Interface の Code Gear と Data Gear は Meta Data Gear に格納される。</li>
323 <li>この Meta Data Gear を Context と呼ぶ。</li> 323 <li>この Meta Data Gear を Context と呼ぶ。</li>
324 <li>Context を複製して複数の CPU に割り当てることにより並列実行が可能になる。</li> 324 <li><strong>Context を複製して複数の CPU に割り当てることにより並列実行が可能になる。</strong></li>
325 <li>ノーマルレベルでは見る事ができない。</li> 325 <li>ノーマルレベルでは見る事ができない。</li>
326 </ul>
327 <div style="text-align: center;">
328 <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" />
329 </div>
330
331
332 </div>
333 <div class='slide '>
334 <!-- _S9SLIDE_ -->
335 <h2 id="task">Task</h2>
336 <ul>
326 <li>Context は Task でもある。</li> 337 <li>Context は Task でもある。</li>
327 <li>Task は実行する Code Gear と Data Gear を全て持っている。</li> 338 <li>Task は実行する Code Gear と Data Gear を全て持っている。
339 <ul>
340 <li>Interface の Code Gear と Data Gear は Meta Data Gear に格納</li>
341 </ul>
342 </li>
328 </ul> 343 </ul>
329 <div style="text-align: center;"> 344 <div style="text-align: center;">
330 <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" /> 345 <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" />
331 </div> 346 </div>
332 347
362 </div> 377 </div>
363 <div class='slide '> 378 <div class='slide '>
364 <!-- _S9SLIDE_ --> 379 <!-- _S9SLIDE_ -->
365 <h2 id="code-gear--code-gear-">1つの Code Gear の実行は他の Code Gear に割り込まれない</h2> 380 <h2 id="code-gear--code-gear-">1つの Code Gear の実行は他の Code Gear に割り込まれない</h2>
366 <ul> 381 <ul>
367 <li>共有された Data Gear があった時に、それに対する変更はただ1つの Code Gear だけが許される</li> 382 <li>共有された Data Gear があった時に、それに対する変更はただ1つの Code Gear だけが許される
368 <li>読み込みは複数であってもいい</li> 383 <ul>
384 <li>読み込みは複数であってもいい</li>
385 </ul>
386 </li>
369 <li>Agda 側で、並列実行を Code Gear の順次実行としてシミュレーションするため</li> 387 <li>Agda 側で、並列実行を Code Gear の順次実行としてシミュレーションするため</li>
370 <li>このような実行になるように Gears OS の実装を行う</li> 388 <li>このような実行になるように Gears OS の実装を行う</li>
371 </ul> 389 </ul>
372 390
373 <div style="text-align: center;"> 391 <div style="text-align: center;">
374 <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" /> 392 <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" />
375 </div> 393 </div>
376 394
377 <h1 id="par-goto">par goto</h1> 395
396 </div>
397 <div class='slide '>
398 <!-- _S9SLIDE_ -->
399 <h2 id="par-goto">par goto</h2>
378 <ul> 400 <ul>
379 <li>Context(Task) の複製には par goto を用いる。</li> 401 <li>Context(Task) の複製には par goto を用いる。</li>
380 <li>他に、入力の同期、タスクスケジューラへの Context の登録が行われる。</li>
381 <li>複数実行した時に、共有 Data Gear に書き込みを成功したかを確認(commit)するために __exit を使用する。</li> 402 <li>複数実行した時に、共有 Data Gear に書き込みを成功したかを確認(commit)するために __exit を使用する。</li>
382 <li>par goto で生成された Task は __exit に継続することで終了する</li> 403 <li>par goto で生成された Task は Output Data Gear を生成した時点で終了する
383 <li>GearsOS の Task は Output Data Gear を生成した時点で終了する</li> 404 <ul>
384 <li>そのため、par goto では直接 __exit に継続せず、Output Data Gear への書き出し処理に継続される。</li> 405 <li>そのため、par goto では直接 __exit に継続せず、Output Data Gear への書き出し処理に継続される。</li>
406 <li>割り込みを防ぐため</li>
407 </ul>
408 </li>
385 </ul> 409 </ul>
386 410
387 <pre lang="c"><code>__code code1(Integer *integer1, Integer * integer2, Integer *output) { 411 <pre lang="c"><code>__code code1(Integer *integer1, Integer * integer2, Integer *output) {
388 par goto add(integer1, integer2, output, __exit); 412 par goto add(integer1, integer2, output, __exit);
389 goto code2(); 413 goto code2();
420 </div> 444 </div>
421 <div class='slide '> 445 <div class='slide '>
422 <!-- _S9SLIDE_ --> 446 <!-- _S9SLIDE_ -->
423 <h2 id="section-4">スライドの流れ</h2> 447 <h2 id="section-4">スライドの流れ</h2>
424 <ul> 448 <ul>
425 <li>Interface</li> 449 <li>Gears OS での形式化とInterfaceの導入</li>
426 <li>並列API</li> 450 <li>並列API</li>
427 <li>CbC</li> 451 <li>CbC</li>
428 <li>Gears OS における並列実行</li> 452 <li>Gears OS における並列実行</li>
429 <li> 453 <li>
430 <font color="red">比較</font> 454 <font color="red">比較</font>
434 458
435 459
436 </div> 460 </div>
437 <div class='slide '> 461 <div class='slide '>
438 <!-- _S9SLIDE_ --> 462 <!-- _S9SLIDE_ -->
439 <h2 id="gears-os--1">Gears OS の評価(目的)</h2> 463 <h2 id="gears-os--2">Gears OS の評価(目的)</h2>
440 <ul> 464 <ul>
441 <li>並列構文とそれを実現する Meta Compitation が十分に揃っているかを確認したい</li> 465 <li>並列構文とそれを実現する Meta Compitation が十分に揃っているかを確認したい</li>
442 <li>並列処理の台数効果を確認する</li> 466 <li>並列処理の台数効果を確認する</li>
443 <li>既存の並列言語と比較して不要なオーバーヘッドがあるか調べたい</li> 467 <li>既存の並列言語と比較して不要なオーバーヘッドがあるか調べたい</li>
444 </ul> 468 </ul>
445 469
446 470
447 </div> 471 </div>
448 <div class='slide '> 472 <div class='slide '>
449 <!-- _S9SLIDE_ --> 473 <!-- _S9SLIDE_ -->
450 <h2 id="gears-os--2">Gears OS の評価(環境)</h2> 474 <h2 id="gears-os--3">Gears OS の評価(環境)</h2>
451 <ul> 475 <ul>
452 <li>CPU、GPU環境で Gears OS の測定を行う。</li> 476 <li>CPU、GPU環境で Gears OS の測定を行う。</li>
453 <li>使用した環境は次のようになる。 477 <li>使用した環境は次のようになる。
454 <ul> 478 <ul>
455 <li>CPU 環境 479 <li>CPU 環境
606 </div> 630 </div>
607 <div class='slide '> 631 <div class='slide '>
608 <!-- _S9SLIDE_ --> 632 <!-- _S9SLIDE_ -->
609 <h2 id="section-6">スライドの流れ</h2> 633 <h2 id="section-6">スライドの流れ</h2>
610 <ul> 634 <ul>
611 <li>Interface</li> 635 <li>Gears OS での形式化とInterfaceの導入</li>
612 <li>並列API</li> 636 <li>並列API</li>
613 <li>CbC</li> 637 <li>CbC</li>
614 <li>Gears OS における並列実行</li> 638 <li>Gears OS における並列実行</li>
615 <li>比較</li> 639 <li>比較</li>
616 <li> 640 <li>
620 644
621 645
622 </div> 646 </div>
623 <div class='slide '> 647 <div class='slide '>
624 <!-- _S9SLIDE_ --> 648 <!-- _S9SLIDE_ -->
625 <h2 id="section-7">スライドの流れ</h2> 649 <h2 id="section-7">今後の課題</h2>
626 <ul>
627 <li>CbC</li>
628 <li>Gears OS における並列実行</li>
629 <li>比較</li>
630 <li>
631 <font color="red">今後の課題</font>
632 </li>
633 </ul>
634
635
636 </div>
637 <div class='slide '>
638 <!-- _S9SLIDE_ -->
639 <h2 id="section-8">今後の課題</h2>
640 <ul> 650 <ul>
641 <li>Go 言語との比較から 1CPU での動作が遅いことがわかった。</li> 651 <li>Go 言語との比較から 1CPU での動作が遅いことがわかった。</li>
642 <li>par goto 文を使用することで、Contextを生成し、並列処理を行う。</li> 652 <li>par goto 文を使用することで、Contextを生成し、並列処理を行う。</li>
643 <li>しかし、Context はメモリ空間の確保や使用する全ての Code Gear Data Gear の設定をする必要があり、生成に時間がかかってしまう事が原因。</li> 653 <li>しかし、Context はメモリ空間の確保や使用する全ての Code Gear Data Gear の設定をする必要があり、生成に時間がかかってしまう事が原因。</li>
644 <li>処理が軽い場合は Context を生成しないようなチューニングが必要である。</li> 654 <li>処理が軽い場合は Context を生成しないようなチューニングが必要である。</li>