77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 <!DOCTYPE html>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 <html>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 <head>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 <meta http-equiv="content-type" content="text/html;charset=utf-8">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 <title>Gears OS の並列処理</title>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 <meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.3.0 (2015-12-25) [x86_64-darwin16]">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 <meta name="author" content="伊波 立樹" >
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 <!-- style sheet links -->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 <link rel="stylesheet" href="s6/themes/projection.css" media="screen,projection">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 <link rel="stylesheet" href="s6/themes/screen.css" media="screen">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 <link rel="stylesheet" href="s6/themes/print.css" media="print">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 <link rel="stylesheet" href="s6/themes/blank.css" media="screen,projection">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 <!-- JS -->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 <script src="s6/js/jquery-1.11.3.min.js"></script>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 <script src="s6/js/jquery.slideshow.js"></script>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 <script src="s6/js/jquery.slideshow.counter.js"></script>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 <script src="s6/js/jquery.slideshow.controls.js"></script>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 <script src="s6/js/jquery.slideshow.footer.js"></script>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 <script src="s6/js/jquery.slideshow.autoplay.js"></script>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 <!-- prettify -->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 <link rel="stylesheet" href="scripts/prettify.css">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 <script src="scripts/prettify.js"></script>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 <script>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 $(document).ready( function() {
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 Slideshow.init();
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 $('code').each(function(_, el) {
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 if (!el.classList.contains('noprettyprint')) {
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 el.classList.add('prettyprint');
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 el.style.display = 'block';
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 }
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 });
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 prettyPrint();
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 } );
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 </script>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 <!-- Better Browser Banner for Microsoft Internet Explorer (IE) -->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 <!--[if IE]>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 <script src="s6/js/jquery.microsoft.js"></script>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 <![endif]-->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 </head>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 <body>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 <div class="layout">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 <div id="header"></div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 <div id="footer">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 <div align="right">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 <img src="s6/images/logo.svg" width="200px">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 <div class="presentation">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 <div class='slide cover'>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 <table width="90%" height="90%" border="0" align="center">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 <tr>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 <td>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 <div align="center">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 <h1><font color="#808db5">Gears OS の並列処理</font></h1>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 </td>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 </tr>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 <tr>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 <td>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 <div align="left">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 伊波 立樹
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 琉球大学理工学研究科 河野研
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 </td>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 </tr>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 </table>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 <!-- === begin markdown block ===
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 generated by markdown/1.2.0 on Ruby 2.3.0 (2015-12-25) [x86_64-darwin16]
|
86
|
90 on 2018-02-11 12:53:21 +0900 with Markdown engine kramdown (1.13.2)
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 using options {}
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 -->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 <!-- _S9SLIDE_ -->
|
86
|
95 <h2 id="section">メタ計算を用いた並列処理</h2>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 <ul>
|
86
|
97 <li>並列処理は現在主流のマルチコアCPU の性能を発揮するには重要なものになっている</li>
|
|
98 <li>しかし、並列処理のチューニングや信頼性を保証するのは難しい
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 <ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 <li>スレッド間の共通資源の競合などの非決定的な実行</li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 <li>従来のテストやデバッグではテストしきれない部分が残ってしまう</li>
|
86
|
102 <li>GPU などのアーキテクチャに合わせた並列プログラミングの記述</li>
|
|
103 </ul>
|
|
104 </li>
|
|
105 </ul>
|
|
106
|
|
107
|
|
108 </div>
|
|
109 <div class='slide '>
|
|
110 <!-- _S9SLIDE_ -->
|
|
111 <h2 id="gears-os">Gears OS</h2>
|
|
112 <ul>
|
|
113 <li>本研究室では 処理の単位を Code Gear、 データの単位を Data Gear を用いて 信頼性が高い並列処理を行う Gears OS を開発している</li>
|
|
114 <li>Gears OS では Task を Code Gear と実行するときに必要な Input Data Gear と出力するための Output Data Gear の組で表現される
|
|
115 <ul>
|
|
116 <li>Input Data Gear/Output Data Gear によって依存関係が決定し、それにそって並列実行を行う</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 </li>
|
86
|
119 <li>Gears OS では計算をノーマルレベルとメタレベルに階層化</li>
|
|
120 <li>信頼性と拡張性をメタレベルで保証する
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 <ul>
|
86
|
122 <li>並列処理の信頼性を通常の計算(ノーマルレベル) に保証</li>
|
|
123 <li>CPU、GPU などの実行環境の切り替え、データ拡張等のを提供</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
124 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
125 </li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131 <!-- _S9SLIDE_ -->
|
86
|
132 <h2 id="gears-os-1">Gears OS</h2>
|
|
133 <ul>
|
|
134 <li>本研究ではGears OS の並列処理機構、並列処理構文(par goto)の実装、Gears OS を実装するにつれて必要なったモジュール化の導入を行う</li>
|
|
135 <li>また、並列処理を行う例題を用いて評価、 Open MP、 Go 言語との比較を行う</li>
|
|
136 </ul>
|
|
137
|
|
138
|
|
139 </div>
|
|
140 <div class='slide '>
|
|
141 <!-- _S9SLIDE_ -->
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
142 <h2 id="code-gear-data-gear">Code Gear、 Data Gear</h2>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
143 <ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
144 <li>Gears OS は Code Gear、 Data Gear という Gear で構成される</li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
145 <li>Code Gear はプログラムの処理そのものを表す</li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
146 <li>Data Gear はデータそのものを表す</li>
|
86
|
147 <li>Code Gear は必要な Input Data Gear が揃ったら実行し、Output Data Gear を生成する</li>
|
|
148 <li>Code Gear と Input / Output Data Gear の対応から依存関係を解決し、Input Data Gear が揃った Code Gear の並列実行を行う</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
149 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
150
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
151 <div style="text-align: center;">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
152 <img src="./images/codeGear_dataGear_dependency.svg" alt="message" width="600" />
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
153 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
154
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
155
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
156 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
157 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
158 <!-- _S9SLIDE_ -->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
159 <h2 id="continuation-based-c">Continuation based C</h2>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
160 <ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
161 <li>Gears OS の実装は本研究室で開発している Continuation based C(CbC) を用いる</li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
162 <li>CbC は処理を Code Gear を用いて記述する事を基本とする</li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
163 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
164
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
165
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
166 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
167 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
168 <!-- _S9SLIDE_ -->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
169 <h2 id="continuation-based-c-1">Continuation based C</h2>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
170 <ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
171 <li>Code Gear の定義は <code>__code CS名</code> で行う</li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
172 <li>Code Gear 間は <code>goto CS名</code> で移動する。この移動を継続と呼ぶ</li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
173 <li>Code Gear の継続は C の関数呼び出しとは異なり、戻り値を持たないためスタックの変更を行わない
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
174 <ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
175 <li>このような環境を持たない継続を軽量継続と呼ぶ</li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
176 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
177 </li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
178 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
179
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
180
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
181 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
182 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
183 <!-- _S9SLIDE_ -->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
184 <h2 id="continuation-based-c-2">Continuation based C</h2>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
185 <ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
186 <li>このコードは cg0、cg1 の2つの Code Gear を定義している</li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
187 <li>cg0 内の <code>goto cg1</code> でgj1 への継続を行っている
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
188 <ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
189 <li>ここで(a+b) が cg1 への入力になる</li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
190 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
191 </li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
192 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
193
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
194 <pre lang="c"><code>__code cg0(int a, int b) {
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
195 goto cg1(a+b);
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
196
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
197 }
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
198
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
199 __code cg1(int c) {
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
200 goto cg2(c);
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
201 }
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
202 </code></pre>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
203
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
204
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
205 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
206 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
207 <!-- _S9SLIDE_ -->
|
86
|
208 <h2 id="section-1">メタ計算</h2>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
209 <ul>
|
82
|
210 <li>メタ計算 は通常の計算を実行するための計算</li>
|
|
211 <li>信頼性の確保やメモリ管理、スレッド管理、CPU、GPU の資源管理等</li>
|
|
212 <li>Gears OS のメタ計算は通常の計算とは別の階層のメタレベルで行われる</li>
|
|
213 <li>メタレベルは Code/Data Gear に対応して Meta Code/Data Gear で行われる</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
214 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
215
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
216
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
217 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
218 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
219 <!-- _S9SLIDE_ -->
|
82
|
220 <h2 id="meta-gear">Meta Gear</h2>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
221 <ul>
|
82
|
222 <li>メタ計算 は Code Gearの接続の間に行われる</li>
|
|
223 <li>メタ計算 の処理も Code/Data Gear で実現する</li>
|
|
224 <li>この Gear を Meta Code/Data Gearと呼ぶ
|
|
225 <ul>
|
|
226 <li>Meta Code Gear は メタ計算 のプログラム部分</li>
|
|
227 <li>Meta Data Gear は Meta Code Gear で管理されるデータ部分</li>
|
|
228 </ul>
|
|
229 </li>
|
|
230 <li>Gears OS は通常の Code/Data Gear から Meta Code/Data Gear 部分は見えないように実装を行う</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
231 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
232
|
82
|
233 <div style="text-align: center;">
|
|
234 <img src="./images/meta_cg_dg.svg" alt="message" width="850" />
|
|
235 </div>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
236
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
237
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
238 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
239 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
240 <!-- _S9SLIDE_ -->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
241 <h2 id="context">Context</h2>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
242 <ul>
|
82
|
243 <li>Context は接続可能な Code/Data Gear の集合を表現する Meta Data Gear</li>
|
|
244 <li>従来のOS のスレッドやプロセスに対応
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
245 <ul>
|
82
|
246 <li>独立したメモリ空間を持つ</li>
|
|
247 <li>Code Gear、 Data Gear へのポインタ</li>
|
|
248 <li>並列実行用の Task 情報</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
249 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
250 </li>
|
82
|
251 <li>を持つ</li>
|
|
252 <li>Gears OS ではメタ計算でこの Context を経由して Data Gear にアクセスする</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
253 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
254
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
255
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
256 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
257 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
258 <!-- _S9SLIDE_ -->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
259 <h2 id="data-gear-">Data Gear の表現</h2>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
260 <ul>
|
82
|
261 <li>Data Gear は構造体を用いて定義する</li>
|
|
262 <li>メタ計算では任意の Data Gear を一律に扱うため、全ての Data Gear は共用体の中で定義される</li>
|
|
263 <li>Data Gear のメモリに確保する際のサイズ情報はこの型から決定する</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
264 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
265
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
266 <pre lang="c"><code>/* data Gear define */
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
267 union Data {
|
82
|
268 struct Timer {
|
|
269 union Data* timer;
|
|
270 enum Code start;
|
|
271 enum Code end;
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
272 enum Code next;
|
82
|
273 } Timer;
|
|
274 struct TimerImpl {
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
275 double time;
|
82
|
276 } TimerImpl;
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
277 ....
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
278 };
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
279 </code></pre>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
280
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
281
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
282 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
283 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
284 <!-- _S9SLIDE_ -->
|
82
|
285 <h2 id="code-gear--stub-code-gear">Code Gear の stub Code Gear</h2>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
286 <ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
287 <li>Data Gear にアクセスするにはContext を経由する</li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
288 <li>だが、通常の Code Gear では Meta Data Gear である Context の参照は避ける必要がある</li>
|
82
|
289 <li>Gears OS では通常の Code Gear で必要な Data Gear を Context から取り出す stub Code Gear を用意する</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
290 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
291
|
82
|
292 <pre lang="c"><code>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
293 </code></pre>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
294
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
295
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
296 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
297 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
298 <!-- _S9SLIDE_ -->
|
82
|
299 <h2 id="context--stub-code-gear-">Context での stub Code Gear の記述の問題点</h2>
|
|
300 <ul>
|
|
301 <li>Context プログラム全体で使用する Code Gear と Data Gear の集合</li>
|
|
302 <li>全ての Code と Data の組合せをContext から 全て展開し、その組合せを stub Code Gear に書く必要がある</li>
|
|
303 <li>Gears OS を実装するに連れて、 stub Code Gear の記述が煩雑になる場所がでてきた</li>
|
|
304 <li>そのため Gears OS のモジュール化する仕組みとして <strong>Interface</strong> を導入した</li>
|
|
305 </ul>
|
|
306
|
|
307
|
|
308 </div>
|
|
309 <div class='slide '>
|
|
310 <!-- _S9SLIDE_ -->
|
|
311 <h2 id="interface">Interface</h2>
|
|
312 <ul>
|
|
313 <li>Interface はある Data Gear と それに対する操作(API) を行う Code Gear の集合を表現する Meta Data Gear</li>
|
|
314 <li>stub Code Gear は実装した Code Gear で決まった形になるため、自動生成が可能である</li>
|
|
315 <li>Interface を導入することで、 Stack や Queue などのデータ構造を使用と実装に分けて記述することが出来る</li>
|
|
316 <li>Interface は Java のインターフェース、 Haskell の型クラスに対応する</li>
|
|
317 </ul>
|
|
318
|
|
319
|
|
320 </div>
|
|
321 <div class='slide '>
|
|
322 <!-- _S9SLIDE_ -->
|
|
323 <h2 id="interface-">Interface の定義</h2>
|
86
|
324 <ul>
|
|
325 <li>Interface の定義には以下の内容を定義する
|
|
326 <ul>
|
|
327 <li>引数のData Gear 群</li>
|
|
328 <li>操作(API) 実行後に継続される Code Gear</li>
|
|
329 <li>操作(API) である Code Gear と Code Gear に渡す引数情報</li>
|
|
330 </ul>
|
|
331 </li>
|
|
332 </ul>
|
|
333
|
|
334 <pre lang="c"><code>typedef struct Queue<Impl>{
|
|
335 // Data Gear parameter
|
|
336 union Data* queue;
|
|
337 union Data* data;
|
|
338 __code next(...);
|
|
339 __code whenEmpty(...);
|
|
340
|
|
341 // Code Gear
|
|
342 __code clear(Impl* queue, __code next(...));
|
|
343 __code put(Impl* queue, union Data* data, __code next(...));
|
|
344 __code take(Impl* queue, __code next(union Data*, ...));
|
|
345 __code isEmpty(Impl* queue, __code next(...), __code whenEmpty(...));
|
|
346 } Queue;
|
|
347 </code></pre>
|
82
|
348
|
|
349
|
|
350 </div>
|
|
351 <div class='slide '>
|
|
352 <!-- _S9SLIDE_ -->
|
|
353 <h2 id="interface--1">Interface の実装</h2>
|
86
|
354 <ul>
|
|
355 <li>Interface には複数の実装を行うことが出来る</li>
|
|
356 <li>実装した Code Gear を Interface で定義した Code Gear に代入することで実装を行う</li>
|
|
357 <li>代入する Code Gear を入れ替えることで別の実装を表現する</li>
|
|
358 <li>実装した Data Gear の生成は関数呼び出しで行われ、外から見るとInterface の型で扱われる</li>
|
|
359 </ul>
|
|
360
|
|
361 <pre><code>Queue* createSingleLinkedQueue(struct Context* context) {
|
|
362 struct Queue* queue = new Queue(); // Allocate Queue interface
|
|
363 struct SingleLinkedQueue* singleLinkedQueue = new SingleLinkedQueue(); // Allocate Queue implement
|
|
364 queue->queue = (union Data*)singleLinkedQueue;
|
|
365 singleLinkedQueue->top = new Element();
|
|
366 singleLinkedQueue->last = singleLinkedQueue->top;
|
|
367 queue->clear = C_clearSingleLinkedQueue;
|
|
368 queue->put = C_putSingleLinkedQueue;
|
|
369 queue->take = C_takeSingleLinkedQueue;
|
|
370 queue->isEmpty = C_isEmptySingleLinkedQueue;
|
|
371 return queue;
|
|
372 }
|
|
373 </code></pre>
|
|
374
|
|
375
|
|
376 </div>
|
|
377 <div class='slide '>
|
|
378 <!-- _S9SLIDE_ -->
|
|
379 <h2 id="interface--2">Interface の実装例</h2>
|
|
380 <ul>
|
|
381 <li>SingleLinkedQueue の put 実装</li>
|
|
382 <li>引数は Queue Interface の定義にあわせる</li>
|
|
383 <li>第1引数は 実装対象の Data Gear の型になる</li>
|
|
384 <li>第3引数の(…) は Output Data Gear を記述する
|
|
385 <ul>
|
|
386 <li>… は可変長引数のような扱いで、 継続先の Code Gear が複数の値をInput Data Gear とする可能性がある</li>
|
|
387 </ul>
|
|
388 </li>
|
|
389 </ul>
|
|
390
|
|
391 <pre lang="c"><code>__code putSingleLinkedQueue(struct SingleLinkedQueue* queue, union Data* data, __code next(...)) {
|
|
392 Element* element = new Element();
|
|
393 element->data = data;
|
|
394 element->next = NULL;
|
|
395 queue->last->next = element;
|
|
396 queue->last = element;
|
|
397 goto next(...);
|
|
398 }
|
|
399 </code></pre>
|
82
|
400
|
|
401
|
|
402 </div>
|
|
403 <div class='slide '>
|
|
404 <!-- _S9SLIDE_ -->
|
|
405 <h2 id="interface--code-gear-">Interface を利用した Code Gear の呼び出し</h2>
|
86
|
406 <ul>
|
|
407 <li>Interface を利用した Code Gear への継続は <code>goto interface->method</code> で行われる</li>
|
|
408 <li>ここでの <strong>interface</strong> は Interfaceの型で包んだポインタ、 <strong>method</strong> は実装した Code Gear に対応</li>
|
|
409 <li>この構文は実際にはスクリプトで変換される
|
|
410 <ul>
|
|
411 <li>変換後はメタレベルのコードになる</li>
|
|
412 </ul>
|
|
413 </li>
|
|
414 </ul>
|
|
415
|
|
416 <pre><code>__code code1() {
|
|
417 Queue* queue = createSingleLinkedQueue(context);
|
|
418 Node* node = new Node();
|
|
419 node->color = Red;
|
|
420 goto queue->put(node, queueTest2);
|
|
421 }
|
|
422 </code></pre>
|
82
|
423
|
|
424
|
|
425 </div>
|
|
426 <div class='slide '>
|
|
427 <!-- _S9SLIDE_ -->
|
86
|
428 <h2 id="interface--code-gear--1">Interface を利用した Code Gear の呼び出し(スクリプト変換後)</h2>
|
|
429 <ul>
|
|
430 <li>Gearef マクロは Context から Interface の引数格納用の Data Gear を取り出す</li>
|
|
431 <li>この Data Gear は Context を初期化した際に特別に生成され、型は Interface と同じになる</li>
|
|
432 <li>呼び出すCode Gear の引数情報に合わせて引数に格納</li>
|
|
433 </ul>
|
|
434
|
|
435 <pre><code>__code code1(struct Context *context) {
|
|
436 Queue* queue = createSingleLinkedQueue(context);
|
|
437 Node* node = &ALLOCATE(context, Node)->Node;
|
|
438 node->color = Red;
|
|
439 Gearef(context, Queue)->queue = (union Data*) queue;
|
|
440 Gearef(context, Queue)->data = (union Data*) node;
|
|
441 Gearef(context, Queue)->next = C_queueTest2;
|
|
442 goto meta(context, queue->put);
|
|
443 }
|
|
444 </code></pre>
|
|
445
|
|
446
|
|
447 </div>
|
|
448 <div class='slide '>
|
|
449 <!-- _S9SLIDE_ -->
|
|
450 <h2 id="interface--stub-code-gear">Interface での stub Code Gear</h2>
|
|
451 <ul>
|
|
452 <li>メタ計算で格納された引数は、 stub Code Gear で Code Gear に渡される</li>
|
|
453 <li>Interface を実装した Code Gear は stub Code Gear の自動生成が可能である</li>
|
|
454 </ul>
|
|
455
|
|
456 <pre lang="c"><code>__code putSingleLinkedQueue(struct Context *context,struct SingleLinkedQueue* queue, union Data* data, enum Code next) {
|
|
457 Element* element = &ALLOCATE(context, Element)->Element;
|
|
458 element->data = data;
|
|
459 element->next = NULL;
|
|
460 queue->last->next = element;
|
|
461 queue->last = element;
|
|
462 goto meta(context, next);
|
|
463 }
|
|
464
|
|
465 // generated by script
|
|
466 __code putSingleLinkedQueue_stub(struct Context* context) {
|
|
467 SingleLinkedQueue* queue = (SingleLinkedQueue*)GearImpl(context, Queue, queue);
|
|
468 Data* data = Gearef(context, Queue)->data;
|
|
469 enum Code next = Gearef(context, Queue)->next;
|
|
470 goto putSingleLinkedQueue(context, queue, data, next);
|
|
471 }
|
|
472 </code></pre>
|
|
473
|
|
474
|
|
475 </div>
|
|
476 <div class='slide '>
|
|
477 <!-- _S9SLIDE_ -->
|
|
478 <h2 id="section-2">並列処理の構成</h2>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
479 <ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
480 <li>今回は並列処理を行う機構の実装を行う</li>
|
82
|
481 <li>構成要素
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
482 <ul>
|
82
|
483 <li>Task(Context)</li>
|
86
|
484 <li>TaskManager
|
|
485 <ul>
|
|
486 <li>Worker の生成、依存関係を解決したTask を Worker に送信する</li>
|
|
487 </ul>
|
|
488 </li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
489 <li>Worker
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
490 <ul>
|
86
|
491 <li>SynchronizedQueue から Task を取得し、実行する</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
492 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
493 </li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
494 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
495 </li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
496 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
497
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
498
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
499 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
500 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
501 <!-- _S9SLIDE_ -->
|
82
|
502 <h2 id="taskcontext">Task(Context)</h2>
|
86
|
503 <ul>
|
|
504 <li>Gears OS では並列実行する Task を Context で表現する</li>
|
|
505 <li>Context Task用の情報として以下の情報をもっている
|
|
506 <ul>
|
|
507 <li>実行する Code Gear</li>
|
|
508 <li>Input/Output Data Gear の格納場所</li>
|
|
509 <li>待っている Input Data Gear の数</li>
|
|
510 </ul>
|
|
511 </li>
|
|
512 <li>実際に実行される Code Gear の引数情報は Interface の Code Gear 実装と同等に記述できる
|
|
513 <ul>
|
|
514 <li>stub Code Gear は自動生成される</li>
|
|
515 </ul>
|
|
516 </li>
|
|
517 </ul>
|
|
518
|
|
519 <pre lang="c"><code>__code add(struct Integer* input1, struct Integer* input2, __code next(struct Integer* output, ...)) {
|
|
520 output->value = input1->value + input2->value;
|
|
521 goto next(output, ...);
|
|
522 }
|
|
523 </code></pre>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
524
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
525
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
526 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
527 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
528 <!-- _S9SLIDE_ -->
|
82
|
529 <h2 id="taskmanger">TaskManger</h2>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
530 <ul>
|
82
|
531 <li>初期化時に決まった数の Worker を作成</li>
|
|
532 <li>依存関係を解決した Task を各 Worker の Queue に送信する</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
533 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
534
|
82
|
535 <div style="text-align: center;">
|
86
|
536 <img src="./images/sendTask.svg" alt="message" width="800" />
|
82
|
537 </div>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
538
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
539
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
540 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
541 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
542 <!-- _S9SLIDE_ -->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
543 <h2 id="worker">Worker</h2>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
544 <ul>
|
86
|
545 <li>初期化の際にスレッドと Worker 用の Context を生成する</li>
|
|
546 <li>TaskManager から送信された Task を取得して実行する</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
547 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
548
|
86
|
549 <div>
|
|
550 <div style="float: left;">
|
|
551 <img src="./images/workerRun.svg" alt="message" width="600" />
|
|
552 </div>
|
|
553 <div style="float: left; font-size=100%;">
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
554 <ol>
|
86
|
555 <li>Worker は Queue から Task を取得する</li>
|
|
556 <li>Worker Context から Task へ入れ替える</li>
|
|
557 <li>Task の Code Gear を実行</li>
|
|
558 <li>Task の Output Data Gear の書き出し</li>
|
|
559 <li>Task から WorkerContext へ入れ替える</li>
|
|
560 <li>Worker は再び Queue から Task を取得する</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
561 </ol>
|
86
|
562 </div>
|
|
563 </div>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
564
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
565
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
566 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
567 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
568 <!-- _S9SLIDE_ -->
|
82
|
569 <h2 id="synchronized-queue">Synchronized Queue</h2>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
570 <ul>
|
86
|
571 <li>Worker で使用される Queue</li>
|
|
572 <li>TaskManager を経由して Task を送信するスレッドと Task を取得するスレッドで操作される</li>
|
|
573 <li>そのためマルチスレッドでのデータの一貫性を保証する必要がある</li>
|
|
574 <li>Gears OS では CAS(Check and Set、 Compare and Swap) を使用した Synchronized Queue として実装する</li>
|
|
575 <li>この Queue は Queue Interface を実装し、 List を利用した実装を行った</li>
|
|
576 </ul>
|
|
577
|
|
578 <pre><code>struct SynchronizedQueue {
|
|
579 struct Element* top;
|
|
580 struct Element* last;
|
|
581 struct Atomic* atomic;
|
|
582 };
|
|
583 // Singly Linked List element
|
|
584 struct Element {
|
|
585 union Data* top;
|
|
586 struct Element* next;
|
|
587 };
|
|
588 </code></pre>
|
|
589
|
|
590
|
|
591 </div>
|
|
592 <div class='slide '>
|
|
593 <!-- _S9SLIDE_ -->
|
|
594 <h2 id="section-3">依存関係の解決</h2>
|
|
595 <ul>
|
|
596 <li>依存関係の解決は Data Gear にメタレベルで依存関係解決用の Queueをもたせることで行う</li>
|
|
597 <li>Code Gear を実行した後、 Output Data Gear を書き出す処理を行う</li>
|
|
598 <li>書き出し処理は Data Gear の Queue から依存関係にある Task を参照する</li>
|
|
599 <li>Task には実行に必要な Input Data Gear のカウンタを持っているため、そのカウンタをデクリメントする</li>
|
|
600 <li>カウンタが0になったら Input Data Gear が揃ったことになるため、TaskManager を経由して Worker に送信する</li>
|
|
601 </ul>
|
|
602
|
|
603 <div style="text-align: center;">
|
|
604 <img src="./images/dependency.svg" alt="message" width="600" />
|
|
605 </div>
|
|
606
|
|
607
|
|
608 </div>
|
|
609 <div class='slide '>
|
|
610 <!-- _S9SLIDE_ -->
|
|
611 <h2 id="section-4">並列構文</h2>
|
|
612 <ul>
|
|
613 <li>並列実行の Task の生成は新しく Context を生成し、実行する Code Gear、待ち合わせる Input Data Gear の数、Input/Output Data Gear への参照を設定する</li>
|
|
614 <li>この記述を直接書くと Meta Data Gear である Context を直接参照しているため、ノーマルレベルでの記述は好ましくない</li>
|
|
615 <li>Task の設定の記述は煩雑な記述であるが、並列実行サれることを除けば通常の CbC の goto 文と同等である</li>
|
|
616 <li>そこで Context を直接参照しない並列構文、 <strong>par goto</strong> 構文を新たに考案した</li>
|
|
617 <li>par goto 構文には引数として Input/Output Data Gear等を渡す
|
82
|
618 <ul>
|
86
|
619 <li>スクリプトによって Code Gear の Input/Output の数を解析する</li>
|
|
620 </ul>
|
|
621 </li>
|
|
622 </ul>
|
|
623
|
|
624 <pre lang="c"><code>__code code1(Integer *integer1, Integer * integer2, Integer *output) {
|
|
625 par goto add(integer1, integer2, output, __exit);
|
|
626 goto code2();
|
|
627 }
|
|
628 </code></pre>
|
|
629
|
|
630
|
|
631 </div>
|
|
632 <div class='slide '>
|
|
633 <!-- _S9SLIDE_ -->
|
|
634 <h2 id="cuda-">CUDA への対応</h2>
|
|
635 <ul>
|
|
636 <li>Gears OS は GPU での実行もサポートする</li>
|
|
637 <li>GPU で性能を出すためには GPU に合わせた並列プログラミングが必要になる</li>
|
|
638 <li>今回は CUDA への実行のサポートをおこなった</li>
|
|
639 <li>CUDA へ GPU を Device、 CPU を Host として定義する</li>
|
|
640 <li>CUDA は処理の最小の単位を thread とし、それをまとめた block を展開し Device 上で実行されるプログラム(Kernel)を実行する</li>
|
|
641 <li>今回 CUDAWorker、CUDAExecutor、 CUDABuffer を使用して CUDA に合わせた Code Gear を提供する</li>
|
|
642 </ul>
|
|
643
|
|
644 <div style="text-align: center;">
|
|
645 <img src="./images/cudaArchitecture.svg" alt="message" width="500" />
|
|
646 </div>
|
|
647
|
|
648
|
|
649 </div>
|
|
650 <div class='slide '>
|
|
651 <!-- _S9SLIDE_ -->
|
|
652 <h2 id="cudaexecutor">CUDAExecutor</h2>
|
|
653 <ul>
|
|
654 <li>CUDA Executor は Executor Interface を実装した以下の Code Gear を持つ
|
|
655 <ul>
|
|
656 <li>HostからDevice へのデータの送信(read)</li>
|
|
657 <li>kernel の実行(exec)</li>
|
|
658 <li>Device から Host へのデータの書き出し(write)</li>
|
|
659 </ul>
|
|
660 </li>
|
|
661 </ul>
|
|
662
|
|
663 <pre lang="c"><code>typedef struct Executor<Impl>{
|
|
664 union Data* Executor;
|
|
665 struct Context* task;
|
|
666 __code next(...);
|
|
667 // method
|
|
668 __code read(Impl* executor, struct Context* task, __code next(...));
|
|
669 __code exec(Impl* executor, struct Context* task, __code next(...));
|
|
670 __code write(Impl* executor, struct Context* task, __code next(...));
|
|
671 }
|
|
672 </code></pre>
|
|
673
|
|
674
|
|
675 </div>
|
|
676 <div class='slide '>
|
|
677 <!-- _S9SLIDE_ -->
|
|
678 <h2 id="cudabuffer">CUDABuffer</h2>
|
|
679 <ul>
|
|
680 <li>Host、 Device 間でデータのやり取りをする際、 Gears OS での Data Gear をDevice 用にマッピングする必要がある
|
|
681 <ul>
|
|
682 <li>Device にデータ領域を確保するにはサイズの指定が必要</li>
|
|
683 <li>Data Gear には Meta Data Gear でデータのサイズを持っている</li>
|
|
684 <li>だが、Data Gear の要素の中に Data Gear へのポインタがあるとポインタ分でサイズ計算してしまうため、 GPU では参照できなくなってしまう</li>
|
|
685 </ul>
|
|
686 </li>
|
|
687 <li>CUDA Buffer ではそのマッピングを行う
|
|
688 <ul>
|
|
689 <li>このマッピングは Task の stub Code Gear で行われる</li>
|
|
690 </ul>
|
|
691 </li>
|
|
692 </ul>
|
|
693
|
|
694 <div style="text-align: center;">
|
|
695 <img src="./images/cudaDataArchitecture.svg" alt="message" width="500" />
|
|
696 </div>
|
|
697
|
|
698
|
|
699 </div>
|
|
700 <div class='slide '>
|
|
701 <!-- _S9SLIDE_ -->
|
|
702 <h2 id="cuda--1">CUDA での呼び出し</h2>
|
|
703 <ul>
|
|
704 <li>Gears OS では stub Code Gear で CUDA による実行を切り替える</li>
|
|
705 <li>stub Code Gear で CUDABuffer でのマッピング、 実行する kernel の読み込みを行う</li>
|
|
706 <li>stub Code Gear は CUDA で実行する際は CUDAExecutor の Code Gear に継続する</li>
|
|
707 </ul>
|
|
708
|
|
709
|
|
710 </div>
|
|
711 <div class='slide '>
|
|
712 <!-- _S9SLIDE_ -->
|
|
713 <h2 id="gears-os-">Gears OS の評価</h2>
|
|
714 <ul>
|
|
715 <li>並列処理のタスクの例題として Twice と BitonicSort を実装し、 以下の環境で測定を行った</li>
|
|
716 <li>CPU 環境
|
|
717 <ul>
|
|
718 <li>Model : Dell PowerEdgeR630</li>
|
|
719 <li>Memory : 768GB</li>
|
|
720 <li>CPU : 2 x 18-Core Intel Xeon 2.30GHz</li>
|
|
721 </ul>
|
|
722 </li>
|
|
723 <li>GPU 環境
|
|
724 <ul>
|
|
725 <li>GPU : GeForce GTX 1070</li>
|
|
726 <li>Cores : 1920</li>
|
|
727 <li>ClockSpeed : 1683MHz</li>
|
|
728 <li>Memory Size : 8GB GDDR5</li>
|
|
729 <li>Memory Bandwidth : 256GB/s</li>
|
82
|
730 </ul>
|
|
731 </li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
732 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
733
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
734
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
735 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
736 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
737 <!-- _S9SLIDE_ -->
|
86
|
738 <h2 id="twice">Twice</h2>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
739 <ul>
|
86
|
740 <li>Twice は与えられた整数配列を2倍にする例題である</li>
|
|
741 <li>並列実行の依存関係がなく、並列度が高い課題である</li>
|
|
742 <li>要素数 2^27</li>
|
|
743 <li>CPU での実行時は 2^27 を 2^6 個に分割して Task を生成する</li>
|
|
744 <li>GPU での実行時は1次元の block 数を 2^15、 block 内の thread 数を 2^10 で展開</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
745 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
746
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
747
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
748 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
749 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
750 <!-- _S9SLIDE_ -->
|
86
|
751 <h2 id="twice-">Twice の結果</h2>
|
|
752 <table border="1" align="center" width="50%">
|
|
753 <tbody>
|
|
754 <tr>
|
|
755 <td style="text-align: center;">Processor</td>
|
|
756 <td style="text-align: center;">Time(ms)</td>
|
|
757 </tr>
|
|
758 <tr>
|
|
759 <td style="text-align: center;">1 CPU</td>
|
|
760 <td style="text-align: right;">1181.215</td>
|
|
761 </tr>
|
|
762 <tr>
|
|
763 <td style="text-align: center;">2 CPUs</td>
|
|
764 <td style="text-align: right;">627.914</td>
|
|
765 </tr>
|
|
766 <tr>
|
|
767 <td style="text-align: center;">4 CPUs</td>
|
|
768 <td style="text-align: right;">324.059</td>
|
|
769 </tr>
|
|
770 <tr>
|
|
771 <td style="text-align: center;">8 CPUs</td>
|
|
772 <td style="text-align: right;">159.932</td>
|
|
773 </tr>
|
|
774 <tr>
|
|
775 <td style="text-align: center;">16 CPUs</td>
|
|
776 <td style="text-align: right;">85.518</td>
|
|
777 </tr>
|
|
778 <tr>
|
|
779 <td style="text-align: center;">32 CPUs</td>
|
|
780 <td style="text-align: right;">43.496</td>
|
|
781 </tr>
|
|
782 <tr>
|
|
783 <td style="text-align: center;">GPU</td>
|
|
784 <td style="text-align: right;">43.496</td>
|
|
785 </tr>
|
|
786 <tr>
|
|
787 <td style="text-align: center;">GPU(kernel only)</td>
|
|
788 <td style="text-align: right;">6.018</td>
|
|
789 </tr>
|
|
790 </tbody>
|
|
791 </table>
|
|
792
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
793 <ul>
|
86
|
794 <li>1 CPU と 32 CPU では 約27.1倍の速度向上が見られた</li>
|
|
795 <li>GPU での実行は kernel のみの実行時間は32 CPU に比べて約7.2倍の速度向上
|
82
|
796 <ul>
|
86
|
797 <li>通信時間を含めると 16 CPU より遅い</li>
|
|
798 <li>通信時間がオーバーヘッドになっている</li>
|
82
|
799 </ul>
|
|
800 </li>
|
|
801 </ul>
|
|
802
|
|
803
|
|
804 </div>
|
|
805 <div class='slide '>
|
|
806 <!-- _S9SLIDE_ -->
|
86
|
807 <h2 id="bitonicsort">BitonicSort</h2>
|
82
|
808 <ul>
|
86
|
809 <li>並列処理向けのソートアルゴリズム</li>
|
|
810 <li>決まった2点間の要素の入れ替えをステージ毎に並列に実行し、 Output Data Gear として書き出し、次のステージの Code Gear の Input Data Gear とする</li>
|
|
811 <li>要素数 2^24</li>
|
|
812 <li>CPU での実行時は 2^24 を 2^6 個に分割して Task を生成する</li>
|
|
813 <li>GPU での実行時は1次元の block 数を 2^14、 block 内の thread 数を 2^10 で展開</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
814 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
815
|
86
|
816 <div style="text-align: center;">
|
|
817 <img src="./images/bitonicNetwork.svg" alt="message" width="500" />
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
818 </div>
|
82
|
819
|
|
820
|
|
821 </div>
|
|
822 <div class='slide '>
|
|
823 <!-- _S9SLIDE_ -->
|
|
824 <h2 id="bitonicsort-">BitonicSort の結果</h2>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
825
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
826 <table border="1" align="center" width="50%">
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
827 <tbody>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
828 <tr>
|
86
|
829 <td style="text-align: center;">Processor</td>
|
|
830 <td style="text-align: center;">Time(s)</td>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
831 </tr>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
832 <tr>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
833 <td style="text-align: center;">1 CPU</td>
|
86
|
834 <td style="text-align: right;">41.416</td>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
835 </tr>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
836 <tr>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
837 <td style="text-align: center;">2 CPUs</td>
|
86
|
838 <td style="text-align: right;">23.340</td>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
839 </tr>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
840 <tr>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
841 <td style="text-align: center;">4 CPUs</td>
|
86
|
842 <td style="text-align: right;">11.952</td>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
843 </tr>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
844 <tr>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
845 <td style="text-align: center;">8 CPUs</td>
|
86
|
846 <td style="text-align: right;">6.320</td>
|
|
847 </tr>
|
|
848 <tr>
|
|
849 <td style="text-align: center;">16 CPUs</td>
|
|
850 <td style="text-align: right;">3.336</td>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
851 </tr>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
852 <tr>
|
86
|
853 <td style="text-align: center;">32 CPUs</td>
|
|
854 <td style="text-align: right;">1.872</td>
|
|
855 </tr>
|
|
856 <tr>
|
|
857 <td style="text-align: center;">GPU</td>
|
|
858 <td style="text-align: right;">5.420</td>
|
|
859 </tr>
|
|
860 <tr>
|
|
861 <td style="text-align: center;">GPU(kernel only)</td>
|
|
862 <td style="text-align: right;">0.163</td>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
863 </tr>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
864 </tbody>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
865 </table>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
866
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
867 <ul>
|
86
|
868 <li>1 CPU と 32 CPU で約22.12倍の速度向上</li>
|
|
869 <li>GPU は通信時間を含めると 8 CPU の役1.16倍、 kernel のみの実行では 32 CPU の役11.48倍になった</li>
|
|
870 <li>現在の Gears OS の CUDA 実装では Output Data Gear を書き出す際に一度 GPU から CPU へ kernel の結果の書き出しを行っているため、差がでてしまった</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
871 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
872
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
873
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
874 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
875 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
876 <!-- _S9SLIDE_ -->
|
82
|
877 <h2 id="openmp-">OpenMP との比較</h2>
|
86
|
878 <p>## Go との比較</p>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
879
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
880
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
881 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
882 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
883 <!-- _S9SLIDE_ -->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
884 <h2 id="section-5">まとめ</h2>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
885 <ul>
|
86
|
886 <li>Gears OS の並列処理機構の実装を行った</li>
|
|
887 <li>Interface を導入することで、見通しの良し Gears OS のプログラミングが可能となった</li>
|
|
888 <li>par goto 構文を導入することで、ノーマルレベルで並列処理の記述が可能になった</li>
|
|
889 <li>2つの例題である程度の台数効果が出ることを確認した</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
890 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
891
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
892
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
893 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
894 <div class='slide '>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
895 <!-- _S9SLIDE_ -->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
896 <h2 id="section-6">今後の課題</h2>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
897 <ul>
|
86
|
898 <li>Gears OS の並列処理の信頼性の保証、チューニングを行う</li>
|
|
899 <li>Gears OS では検証とモデル検査をメタレベルで実現することで信頼性を保証する
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
900 <ul>
|
86
|
901 <li>証明はCbC のプログラムヲ証明支援系の Agda に対応して行う。 並列処理の信頼性を保証するには SynchronizedQueue の証明を行う必要がある</li>
|
|
902 <li>モデル検査は CbC で記述された モデル検査器である akasha を使用して行う。 モデル検査の方針としては Code Gear の並列実行を擬似並列で実行し、全ての組合せを列挙する方法で行う</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
903 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
904 </li>
|
86
|
905 <li>OpenMP、 Goとの比較から、 Gears OS が 1CPU での動作が遅いということがわかった。
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
906 <ul>
|
86
|
907 <li>par goto 文を使用する度に Context を生成するため、 ある程度の時間がかかってしまう</li>
|
|
908 <li>モデル検査で par goto の Code Gear のフローを解析し、処理がかる場合は Context を生成セずに関数呼出しを行う等の最適化が必要</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
909 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
910 </li>
|
86
|
911 <li>現在の CUDA 実装では CPU、GPU 間のデータの通信コストがかかってしまうことが例題からわかった
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
912 <ul>
|
86
|
913 <li>Meta Data Gear に Data Gear が CPU、 GPU のどこで所持サれているのかを持たせ、 GPU の Data Gear が CPU で必要になったときに始めてデーの通信を行う</li>
|
77
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
914 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
915 </li>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
916 </ul>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
917 <!-- === end markdown block === -->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
918 </div>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
919
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
920
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
921 </div><!-- presentation -->
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
922 </body>
|
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
923 </html>
|