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-&gt;code[next])(context); 328 goto (context-&gt;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, &amp;context-&gt;data[Node]-&gt;node.value-&gt;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-&gt;i; 660 int i = loopCounter-&gt;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>