Mercurial > hg > Papers > 2016 > parusu-sigos
comparison presen/sigos.html @ 19:a2a9d91db377
Update
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 30 May 2016 23:48:31 +0900 |
parents | 4c465c6fe2cc |
children | cd38e09f980b |
comparison
equal
deleted
inserted
replaced
18:4c465c6fe2cc | 19:a2a9d91db377 |
---|---|
85 | 85 |
86 <div class='slide '> | 86 <div class='slide '> |
87 <!-- === begin markdown block === | 87 <!-- === begin markdown block === |
88 | 88 |
89 generated by markdown/1.2.0 on Ruby 2.3.1 (2016-04-26) [x86_64-darwin15] | 89 generated by markdown/1.2.0 on Ruby 2.3.1 (2016-04-26) [x86_64-darwin15] |
90 on 2016-05-30 01:57:52 +0900 with Markdown engine kramdown (1.11.1) | 90 on 2016-05-30 23:46:39 +0900 with Markdown engine kramdown (1.11.1) |
91 using options {} | 91 using options {} |
92 --> | 92 --> |
93 | 93 |
94 <!-- _S9SLIDE_ --> | 94 <!-- _S9SLIDE_ --> |
95 <h2 id="gears-os">Gears OS</h2> | 95 <h2 id="gears-os">Gears OS</h2> |
188 </div> | 188 </div> |
189 <div class='slide '> | 189 <div class='slide '> |
190 <!-- _S9SLIDE_ --> | 190 <!-- _S9SLIDE_ --> |
191 <h2 id="code-gear-data-gear">Code Gear、 Data Gear</h2> | 191 <h2 id="code-gear-data-gear">Code Gear、 Data Gear</h2> |
192 <ul> | 192 <ul> |
193 <li>Gears OS は Code Gear、 Data Gear という Gear で構成される</li> | |
193 <li>Code Gear はプログラムの処理そのものを表す</li> | 194 <li>Code Gear はプログラムの処理そのものを表す</li> |
194 <li>Data Gear は int や 文字列などの Data そのものを表す</li> | 195 <li>Data Gear は int や 文字列などの Data そのものを表す</li> |
195 <li>Code Gear は必要な Input Data Gear が揃ったら実行し、 Output Data Gear を生成する</li> | 196 <li>Code Gear は必要な Input Data Gear が揃ったら実行し、 Output Data Gear を生成する</li> |
196 <li>Code Gear と Input / Output Data Gear の対応から依存関係を解決し、 Code Gear の並列実行を行う</li> | 197 <li>Code Gear と Input / Output Data Gear の対応から依存関係を解決し、 Code Gear の並列実行を行う</li> |
197 </ul> | 198 </ul> |
306 <div class='slide '> | 307 <div class='slide '> |
307 <!-- _S9SLIDE_ --> | 308 <!-- _S9SLIDE_ --> |
308 <h2 id="cbc--gears-os--1">CbC の Gears OS サポート</h2> | 309 <h2 id="cbc--gears-os--1">CbC の Gears OS サポート</h2> |
309 <ul> | 310 <ul> |
310 <li>実際は code1 から code2 への継続の間には Meta Code Gear である meta_code1 が実行される</li> | 311 <li>実際は code1 から code2 への継続の間には Meta Code Gear である meta_code1 が実行される</li> |
311 <li>しかし、通常は Meta Level の継続をプログラマーは意識する必要はない</li> | 312 <li>通常は Meta Level の継続をプログラマーは意識する必要はない</li> |
312 <li>そこで、CbC は Code Gear 間の接続に自動的に Meta Code Gear を挟むというサポートを行う</li> | 313 <li>そこで、CbC は Code Gear 間の接続に自動的に Meta Code Gear を挟むというサポートを行う</li> |
313 <li>CbC のサポートを行うとこのコードのように展開される</li> | 314 <li>CbC のサポートを行うとこのコードのように展開される</li> |
314 <li>メタレベルのサポートの際は <strong>context</strong> という Meta Data Gear を使用する</li> | 315 <li>メタレベルのサポートの際は <strong>context</strong> という Meta Data Gear を使用する</li> |
315 </ul> | 316 </ul> |
316 | 317 |
327 goto (context->code[next])(context); | 328 goto (context->code[next])(context); |
328 } | 329 } |
329 | 330 |
330 __code code2(struct Context* context, struct Array* array) { | 331 __code code2(struct Context* context, struct Array* array) { |
331 ... | 332 ... |
332 } | |
333 | |
334 __code code2_stub(struct Context* context) { | |
335 goto code1(context, &context->data[Node]->node.value->array); | |
336 } | 333 } |
337 </code></pre> | 334 </code></pre> |
338 | 335 |
339 | 336 |
340 </div> | 337 </div> |
449 | 446 |
450 | 447 |
451 </div> | 448 </div> |
452 <div class='slide '> | 449 <div class='slide '> |
453 <!-- _S9SLIDE_ --> | 450 <!-- _S9SLIDE_ --> |
454 <h2 id="gears-os--3">Gears OS の構成</h2> | 451 <h2 id="gears-os--3">Gears OS 構成</h2> |
455 <ul> | 452 <ul> |
456 <li>Context | 453 <li>Context |
457 <ul> | 454 <ul> |
458 <li>Thread 毎にContext を持っており、 TaskQueue と Persistent Data Tree は共有される</li> | 455 <li>Thread 毎にContext を持っており、 TaskQueue と Persistent Data Tree は共有される</li> |
459 </ul> | 456 </ul> |
569 <h2 id="persistent-data-tree">Persistent Data Tree</h2> | 566 <h2 id="persistent-data-tree">Persistent Data Tree</h2> |
570 <ul> | 567 <ul> |
571 <li>Persistent Data Tree は Data Gear の管理を行う</li> | 568 <li>Persistent Data Tree は Data Gear の管理を行う</li> |
572 <li>TaskQueue と同じですべての Thread で共有される</li> | 569 <li>TaskQueue と同じですべての Thread で共有される</li> |
573 <li>Red-Black Tree アルゴリズムを用いて木構造の平衡性を保つ</li> | 570 <li>Red-Black Tree アルゴリズムを用いて木構造の平衡性を保つ</li> |
574 <li>unix のファイルシステムに相当する的な</li> | 571 <li>木構造から読み出される Data Gear は Code Gear の Input Data Gear, 書き出すData Gear は Output Data Gear になる</li> |
575 </ul> | 572 </ul> |
573 | |
574 <div style="text-align: center;"> | |
575 <img src="./images/persistent_date_tree_2.svg" alt="message" width="700" /> | |
576 </div> | |
577 | |
578 | |
579 </div> | |
580 <div class='slide '> | |
581 <!-- _S9SLIDE_ --> | |
582 <h2 id="persistent-data-tree-1">Persistent Data Tree</h2> | |
583 <ul> | |
584 <li>Persistent Data Tree は | |
585 <ul> | |
586 <li>Tree 自体を示す Data Gear</li> | |
587 <li>Node を示す Data Gear</li> | |
588 </ul> | |
589 </li> | |
590 </ul> | |
591 | |
592 <p>を用いて木構造を表現する</p> | |
593 | |
594 <pre lang="c"><code>union Data { | |
595 struct Tree { | |
596 struct Node* root; | |
597 } tree; | |
598 struct Node { | |
599 // need to tree | |
600 enum Code next; | |
601 int key; // comparable data segment | |
602 union Data* value; | |
603 struct Node* left; | |
604 struct Node* right; | |
605 // need to balancing | |
606 enum Color { | |
607 Red, | |
608 Black, | |
609 } color; | |
610 } node; | |
611 }; | |
612 </code></pre> | |
576 | 613 |
577 | 614 |
578 </div> | 615 </div> |
579 <div class='slide '> | 616 <div class='slide '> |
580 <!-- _S9SLIDE_ --> | 617 <!-- _S9SLIDE_ --> |
581 <h2 id="worker">Worker</h2> | 618 <h2 id="worker">Worker</h2> |
582 <ul> | 619 <ul> |
583 <li>Worker は TaskQueue から Task を取得して実行する</li> | 620 <li>Worker は TaskQueue から Task を取得して実行する</li> |
584 <li>TaskQueue へのアクセスは Enqueue 操作と同じで CAS を用いる</li> | 621 </ul> |
585 <li>Task には実行する Code Gear と実行に必要な Data Gear の ree の key が格納されている</li> | 622 |
623 <table align="center"> | |
624 <tbody> | |
625 <tr> | |
626 <td> | |
627 <div> | |
628 <img src="./images/worker.svg" alt="message" width="600" /> | |
629 </div> | |
630 </td> | |
631 <td> | |
632 <ul> | |
633 <li> Worker は Task Queue から Task を取り出す(1. Dequeue Task)</li> | |
634 <li> 取り出した Task には Tree の key が入っているため Tree からその key に対応した Input Data Gear を読み込む(2. Read Data Gear) </li> | |
635 <li> Task に格納されている Code Gear を実行する </li> | |
636 <li> Code Gear を実行した結果、生成された Output Data Gear を Tree に書き出す(3.Write Data Gear) </li> | |
637 </ul> | |
638 </td> | |
639 </tr> | |
640 </tbody> | |
641 </table> | |
642 | |
643 <ul> | |
586 <li>Task が完了したら次の Task を取得する</li> | 644 <li>Task が完了したら次の Task を取得する</li> |
587 <li>Worker で実行される Code Gear は他の Code Gear と同様の記述である</li> | |
588 <li>つまり依存関係のない Code Gear は並列で動作させることができる</li> | |
589 </ul> | 645 </ul> |
590 | 646 |
591 | 647 |
592 </div> | 648 </div> |
593 <div class='slide '> | 649 <div class='slide '> |
594 <!-- _S9SLIDE_ --> | 650 <!-- _S9SLIDE_ --> |
595 <h2 id="taskmanger">TaskManger</h2> | 651 <h2 id="taskmanger">TaskManger</h2> |
596 <ul> | 652 <ul> |
597 <li>TaskManager は Task の依存関係の解決を行う</li> | 653 <li>TaskManager は Task の依存関係の解決を行う</li> |
598 <li>Thread の作成と停止も行う</li> | 654 <li>Thread の作成と停止も行う</li> |
599 <li>このコードは Thread の生成を行い、 Thread 毎の context を設定している <strong>Meta Code Gear</strong></li> | 655 <li>このコードは Thread の生成を行い、 Thread 毎の context を設定している <strong>Meta Code Gear</strong> である</li> |
600 </ul> | 656 </ul> |
601 | 657 |
602 <pre lang="c"><code>// Meta Code Gear | 658 <pre lang="c"><code>// Meta Code Gear |
603 __code createWorker(struct Context* context, struct LoopCounter* loopCounter, struct Worker* worker) { | 659 __code createWorker(struct Context* context, struct LoopCounter* loopCounter, struct Worker* worker) { |
604 int i = loopCounter->i; | 660 int i = loopCounter->i; |
664 <h2 id="section-2">並列処理の確認</h2> | 720 <h2 id="section-2">並列処理の確認</h2> |
665 <ul> | 721 <ul> |
666 <li>Twice を使用し、Gears OS が実際に並列処理されているかどうかの確認を行った</li> | 722 <li>Twice を使用し、Gears OS が実際に並列処理されているかどうかの確認を行った</li> |
667 <li>環境 | 723 <li>環境 |
668 <ul> | 724 <ul> |
669 <li>Model : MacPro Mid 2010</li> | |
670 <li>OS : Mac OS X 10.10.5</li> | |
671 <li>Memory : 16GB</li> | 725 <li>Memory : 16GB</li> |
672 <li>CPU : 6-core Intel Xeon 2.66GHZ x 2</li> | 726 <li>CPU : 6-core Intel Xeon 2.66GHZ x 2</li> |
673 </ul> | 727 </ul> |
674 </li> | 728 </li> |
675 <li>要素数 : 2^17 * 1000</li> | 729 <li>要素数 : 2^17 * 1000</li> |