12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 <!DOCTYPE HTML>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 <html lang="en-US">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 <head>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 <title>Monad に基づくメタ計算を基本とする Gears OS の設計</title>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 <meta charset="UTF-8">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 <meta name="viewport" content="width=1274, user-scalable=no">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 <meta name="generator" content="Slide Show (S9)">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 <meta name="author" content="小久保翔平">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 <link rel="stylesheet" href="themes/ribbon/styles/style.css">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 </head>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 <body class="list">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 <header class="caption">
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 <h1>Monad に基づくメタ計算を基本とする Gears OS の設計</h1>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 <p>小久保翔平</p>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 <div class="slide cover" id="Cover"><div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 <header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 <h2>Monad に基づくメタ計算を基本とする Gears OS の設計</h2>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 <h3 id="author">小久保翔平</h3>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 <h3 id="profile"></h3>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 <!-- todo: add slide.classes to div -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 <!-- todo: create slide id from header? like a slug in blogs? -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 <div class="slide" id="2"><div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 <header>
|
17
|
33 <h1 id="section">研究目的</h1>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 <!-- === begin markdown block ===
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 generated by markdown 1.1.1 on Ruby 2.0.0 (2013-02-24) [x86_64-darwin12.3.0]
|
17
|
38 on 2015-05-25 05:40:40 +0900 with Markdown engine kramdown (1.4.0)
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 using options {}
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 <!-- _S9SLIDE_ -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43
|
17
|
44 <p>Many Core CPU, GPU, SpursEngine などの異なる演算資源を有効に利用するためには、それぞれのアーキテクチャに合わせた記述が必要になる。
|
|
45 Gears OS は Many Core CPU, GPU といった並列環境に合わせた設計・開発を行う</p>
|
|
46
|
|
47 <p>Gears OS では Gear という単位を用いて記述することで柔軟性のあるプログラムを作成することを可能とする。
|
|
48 新たな Gear を接続することでデータの拡張や機能の追加を行うことができる</p>
|
|
49
|
|
50 <p>並列実行の信頼性を確保するため Gears OS では作成されたプログラムに対して Model Checking を行う。
|
|
51 並列プログラムに Model Checking を行うことでそのプログラムが取り得る状態を列挙する。
|
|
52 これにより、デッドロック等を検出することで信頼性を確保する</p>
|
|
53
|
|
54
|
|
55
|
|
56 </section>
|
|
57 </div></div>
|
|
58
|
|
59 <div class="slide" id="3"><div>
|
|
60 <section>
|
|
61 <header>
|
|
62 <h1 id="cerium--alice">Cerium と Alice</h1>
|
|
63 </header>
|
|
64 <!-- _S9SLIDE_ -->
|
|
65
|
|
66 <p>先行研究として、本研究室では並列プログラミングフレームワーク Cerium と分散ネットフレームワーク Alice の開発を行なってきた</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 <p>Cerium では Task と呼ばれる分割されたプログラムを依存関係に沿って実行することで並列処理を実現する。
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 依存関係はプログラム自身が記述する必要があり、Task の種類が増えるほど記述が繁雑になる。
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 また、Task 間の依存関係のみに注目しており、データの依存関係を正しく保証することができない</p>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 <p>Task が取り扱うデータに型情報がない
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 汎用ポインタを型変換して利用するしかなく、型検査を行うことができない</p>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79
|
17
|
80 <div class="slide" id="4"><div>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 <header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 <h1 id="cerium--alice-1">Cerium と Alice</h1>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 <!-- _S9SLIDE_ -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86
|
17
|
87 <p>Alice では処理とデータの単位としてそれぞれ Code Segment, Data Segment と呼ばれる単位を用いてプログラミングを行う。
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 Code Segment が取り扱う Input/Output Data Segment を指定することで処理とデータの関係を決定する</p>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89
|
17
|
90 <p>Alice では Computaion を Data Segment を待ち合わせて Code Segment を実行することと定義している。
|
|
91 これに対し、Meta Computation は Computation を実現する Computation と定義することができる。
|
|
92 通信中の切断や再接続の処理などは Meta Computation に相当する</p>
|
|
93
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 <p>Data Segment にアクセスする API が設計上の問題で複雑化している。
|
17
|
95 また、Meta Computation 自体が Alice で記述されていない</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 <div class="slide" id="5"><div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 <header>
|
17
|
105 <h1 id="code-gear--data-gear">Code Gear と Data Gear</h1>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
106 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 <!-- _S9SLIDE_ -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
108
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109 <p>Gears OS ではプログラム実行単位として Gear を用いる。
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110 Gear は変更実行の単位、データの分割、Gear 間の接続などになる</p>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 <p>Code Gear は実行コードそのものであり、OpenCL/CUDA の kernel に相当する。
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 接続された複数の Input Data Gear を参照し、単一または複数の Output Data Gear に書き込む。
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114 Code Gear では接続された Data Gear のみに干渉することができる</p>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115
|
17
|
116 <p>Data Gear には、Primitive Data Type が格納される。
|
|
117 直接ポインタを扱うことはなく、自分が知らない Code/Data Gear は名前で指し示す</p>
|
|
118
|
|
119 <p>Gear の特徴の一つとしてその処理が Code/Data Gear に閉じていることがある。
|
|
120 これにより、Code Gear の実行時間、メモリ使用量を予測可能なものにする</p>
|
|
121
|
|
122
|
|
123
|
|
124 </section>
|
|
125 </div></div>
|
|
126
|
|
127 <div class="slide" id="6"><div>
|
|
128 <section>
|
|
129 <header>
|
|
130 <h1 id="monad--meta-computation">Monad と Meta Computation</h1>
|
|
131 </header>
|
|
132 <!-- _S9SLIDE_ -->
|
|
133
|
|
134 <p>関数型言語では入力から出力を得る通常の計算の他にメタ計算と呼ばれるものがある。
|
|
135 メタ計算の例として、失敗する可能性がある計算、並行処理、入出力などの副作用、メモリ管理などがある。
|
|
136 メタ計算の理論的な表現として Monad を用いることが Moggi らにより提案されている</p>
|
|
137
|
|
138 <p>Moand は関数が返す通常の値を含むデータ構造であり、メタ計算を表現するのに必要な情報を格納している。
|
|
139 失敗する計算の場合は、計算が失敗したかどうかのフラグが Monad に含まれる。
|
|
140 通常の計算を Monad を返すように変更することでメタ関数が得られる。
|
|
141 逆に Monad の中にある通常の値のみに着目すると通常の関数となる</p>
|
|
142
|
|
143
|
|
144
|
|
145 </section>
|
|
146 </div></div>
|
|
147
|
|
148 <div class="slide" id="7"><div>
|
|
149 <section>
|
|
150 <header>
|
|
151 <h1 id="gears-os--meta-computation">Gears OS における Meta Computation</h1>
|
|
152 </header>
|
|
153 <!-- _S9SLIDE_ -->
|
|
154
|
|
155 <p>Gears OS では Code/Data Gear に Meta Code/Data Gear を付属することで Monad を表現する。
|
|
156 Meta Code/Data Gear は Code/Data Gear へのポインタを持っている。
|
|
157 各 Gear の関連付けは Meta Gear を用いて行われる</p>
|
|
158
|
|
159 <p>オブジェクトレベルである Gear ではポインタを扱わず、メタレベルである Meta Gear でのみポインタを扱う。
|
|
160 これにより、ポインタ関連のセキュリティフローを防止する。</p>
|
|
161
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
162
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
163
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
164 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
165 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
166
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
167 <div class="slide" id="8"><div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
168 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
169 <header>
|
17
|
170 <h1 id="section-1">実装言語</h1>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
171 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
172 <!-- _S9SLIDE_ -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
173
|
17
|
174 <p>Gears OS の実装には、本研究室で開発している Continuation based C(CbC) を用いる</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
175
|
17
|
176 <p>CbC ではプログラムを Code Segment, Data Segment という単位で記述する。
|
|
177 Code Segment 間の処理の移動には関数呼び出しではなく、goto を用いた軽量継続を用いている</p>
|
|
178
|
|
179 <p>CbC のコンパイルには LLVM をバックエンドとしたコンパイラを用いる</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
180
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
181
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
182
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
183 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
184 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
185
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
186 <div class="slide" id="9"><div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
187 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
188 <header>
|
17
|
189 <h1 id="gears-os-">Gears OS の構成</h1>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
190 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
191 <!-- _S9SLIDE_ -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
192
|
17
|
193 <p><img src="pictures/GearsOS_arch.svg" alt="arch" style="width: 50%" /></p>
|
|
194
|
|
195 <p>Gears OS では Context を生成し、Worker を起動する。
|
|
196 Worker は Synchronized Queue から Code Gear を取得し、実行する。
|
|
197 実行に必要な Data Gear は Context を通して、Persistent Data Gear から読み込みを行う。
|
|
198 処理が終わると必要な Data Gear を Persistent Data Gear に書き込みを行う</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
199
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
200
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
201
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
202 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
203 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
204
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
205 <div class="slide" id="10"><div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
206 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
207 <header>
|
17
|
208 <h1 id="code-gear-">Code Gear の継続</h1>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
209 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
210 <!-- _S9SLIDE_ -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
211
|
17
|
212 <p>Code Gear では、次に実行する Code Gear を名前で指定する。
|
|
213 Meta Code Gear が名前を解釈して、対応する Code Gear に引き渡す。
|
|
214 Gear OS では、この Meta Code Gear を Context と定義する</p>
|
|
215
|
|
216 <p>Context には Code Gear の名前とポインタの対応表、Data Gear の Allocation 用の情報、Code Gear が参照する Data Gear へのポインタ、Data Gear に格納される Data Type の情報が格納されている</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
217
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
218
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
219
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
220 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
221 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
222
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
223 <div class="slide" id="11"><div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
224 <section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
225 <header>
|
17
|
226 <h1 id="persistent-data-gear">Persistent Data Gear</h1>
|
|
227 </header>
|
|
228 <!-- _S9SLIDE_ -->
|
|
229
|
|
230 <p>Data Gear の管理には木構造を用いる。
|
|
231 この木構造は非破壊で構成される。
|
|
232 非破壊的木構造では、ロックなしに平行して読み書き・参照を行うことが可能である</p>
|
|
233
|
|
234 <p>変更前の木構造をすべて保持しているので過去のデータにアクセスすることもできる</p>
|
|
235
|
|
236
|
|
237
|
|
238 </section>
|
|
239 </div></div>
|
|
240
|
|
241 <div class="slide" id="12"><div>
|
|
242 <section>
|
|
243 <header>
|
|
244 <h1 id="list">List</h1>
|
|
245 </header>
|
|
246 <!-- _S9SLIDE_ -->
|
|
247
|
|
248 <p>通常 List は要素と次へのポインタを持つ構造体で表現される</p>
|
|
249
|
|
250 <p>Gears OS の場合、オブジェクトレベルではポインタを扱わないので、任意の要素を持つ Data Gear と次へのポインタを持つ Meta Data Gear の組によって List は表現される</p>
|
|
251
|
|
252 <p><img src="pictures/List.svg" alt="List" style="width: 70%" /></p>
|
|
253
|
|
254
|
|
255
|
|
256 </section>
|
|
257 </div></div>
|
|
258
|
|
259 <div class="slide" id="13"><div>
|
|
260 <section>
|
|
261 <header>
|
|
262 <h1 id="synchronized-queue">Synchronized Queue</h1>
|
|
263 </header>
|
|
264 <!-- _S9SLIDE_ -->
|
|
265
|
|
266 <p>Gears OS では List を表現する Code/Data Gear に CAS(Compare and Swap) を行う Meta Code/Data Gear を接続することで Synchronized Queue を実現する</p>
|
|
267
|
|
268 <p>Gears OS の機能は状態遷移図とクラスダイアグラムを組み合わせた GearBox という図で表現する。
|
|
269 M:receiver/sender が CAS を行う Meta Code Gear となる</p>
|
|
270
|
|
271 <p><img src="pictures/synchronizedQueue.svg" alt="sync" style="width: 80%" /></p>
|
|
272
|
|
273
|
|
274
|
|
275 </section>
|
|
276 </div></div>
|
|
277
|
|
278 <div class="slide" id="14"><div>
|
|
279 <section>
|
|
280 <header>
|
|
281 <h1 id="context">Context</h1>
|
|
282 </header>
|
|
283 <!-- _S9SLIDE_ -->
|
|
284
|
|
285 <pre><code>/* Context definition */
|
|
286 enum Code {
|
|
287 Code1,
|
|
288 Code2,
|
|
289 Allocator,
|
|
290 };
|
|
291
|
|
292 enum UniqueData {
|
|
293 Allocate,
|
|
294 Tree,
|
|
295 };
|
|
296
|
|
297 struct Context {
|
|
298 int codeNum;
|
|
299 __code (**code) (struct Context *);
|
|
300 void* heap_start;
|
|
301 void* heap;
|
|
302 long dataSize;
|
|
303 int dataNum;
|
|
304 union Data **data;
|
|
305 };
|
|
306 </code></pre>
|
|
307
|
|
308
|
|
309
|
|
310 </section>
|
|
311 </div></div>
|
|
312
|
|
313 <div class="slide" id="15"><div>
|
|
314 <section>
|
|
315 <header>
|
|
316 <h1 id="code-gear">Code Gear</h1>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
317 </header>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
318 <!-- _S9SLIDE_ -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
319
|
17
|
320 <pre><code>// Code Gear
|
|
321 __code code1(Allocate allocate) {
|
|
322 allocate.size = sizeof(long);
|
|
323 allocate.next = Code2;
|
|
324 goto Allocate(allocate); // goes through meta
|
|
325 }
|
|
326
|
|
327 // Meta Code Gear
|
|
328 __code meta(struct Context* context, enum Code next) {
|
|
329 // meta computation
|
|
330 goto (context->code[next])(context);
|
|
331 }
|
|
332
|
|
333 // Meta Code Gear
|
|
334 __code allocate(struct Context* context) {
|
|
335 context->data[++context->dataNum] = context->heap;
|
|
336 context->heap += context->data[Allocate]->allocate.size;
|
|
337 goto (context->code[context->data[Allocate]->allocate.next])(context);
|
|
338 }
|
|
339
|
|
340 // Code Gear
|
|
341 __code code2(Allocate allocate, Count count) {
|
|
342 // processing
|
|
343 }
|
|
344 </code></pre>
|
|
345
|
|
346 <pre><code>// Code Gear
|
|
347 __code code1(struct Context* context) {
|
|
348 context->data[Allocate]->allocate.size = sizeof(struct Node);
|
|
349 context->data[Allocate]->allocate.next = Code2;
|
|
350 goto meta(context, Allocate);
|
|
351 }
|
|
352
|
|
353 // Meta Code Gear
|
|
354 __code meta(struct Context* context, enum Code next) {
|
|
355 // meta computation
|
|
356 goto (context->code[next])(context);
|
|
357 }
|
|
358
|
|
359 // Meta Code Gear
|
|
360 __code allocate(struct Context* context) {
|
|
361 context->data[++context->dataNum] = context->heap;
|
|
362 context->heap += context->data[Allocate]->allocate.size;
|
|
363 goto (context->code[context->data[Allocate]->allocate.next])(context);
|
|
364 }
|
|
365
|
|
366 // Code Gear
|
|
367 __code code2(struct Context* context) {
|
|
368 // processing content
|
|
369 }
|
|
370 </code></pre>
|
|
371
|
|
372
|
|
373
|
|
374 </section>
|
|
375 </div></div>
|
|
376
|
|
377 <div class="slide" id="16"><div>
|
|
378 <section>
|
|
379 <header>
|
|
380 <h1 id="data-gear">Data Gear</h1>
|
|
381 </header>
|
|
382 <!-- _S9SLIDE_ -->
|
|
383
|
|
384 <pre><code>union Data {
|
|
385 struct Tree {
|
|
386 union Data* root;
|
|
387 union Data* current;
|
|
388 union Data* prev;
|
|
389 int result;
|
|
390 } tree;
|
|
391 struct Node {
|
|
392 int key;
|
|
393 int value;
|
|
394 enum Color {
|
|
395 Red,
|
|
396 Black,
|
|
397 } color;
|
|
398 union Data* left;
|
|
399 union Data* right;
|
|
400 } node;
|
|
401 struct Allocate {
|
|
402 long size;
|
|
403 enum Code next;
|
|
404 } allocate;
|
|
405 };
|
|
406 </code></pre>
|
|
407
|
|
408
|
|
409
|
|
410 </section>
|
|
411 </div></div>
|
|
412
|
|
413 <div class="slide" id="17"><div>
|
|
414 <section>
|
|
415 <header>
|
|
416 <h1 id="section-2">比較</h1>
|
|
417 </header>
|
|
418 <!-- _S9SLIDE_ -->
|
|
419
|
|
420 <p>Code Gear は Cerium の Task、Alice の Code Segment, OpenCL/CUDA の kernel に相当する</p>
|
|
421
|
|
422 <p>Data Gear は Alice の Data Segment に相当する。
|
|
423 Ceirum, OpenCL/CUDA には Data Gear に相当する物は存在しない</p>
|
|
424
|
|
425 <p>Cerium, OpenCL/CUDA では処理同士の依存関係を記述する必要があるが、Gears OS では Alice と同様に Code と Data の関係から依存関係を解決する</p>
|
|
426
|
|
427
|
|
428
|
|
429 </section>
|
|
430 </div></div>
|
|
431
|
|
432 <div class="slide" id="18"><div>
|
|
433 <section>
|
|
434 <header>
|
|
435 <h1 id="section-3">まとめ</h1>
|
|
436 </header>
|
|
437 <!-- _S9SLIDE_ -->
|
|
438
|
|
439 <p>Gears OS では処理とデータの関係から処理同士の依存関係を解決し、並列実行するように設計を行なった</p>
|
|
440
|
|
441 <p>Gear という単位を用いて記述することでプログラムを柔軟に変更することを可能とした</p>
|
|
442
|
|
443 <p>Meta Computation を Moand に基づいて実現する。
|
|
444 Gears OS では Meta Code/Data Gear を用いて Monad を表現する</p>
|
|
445
|
|
446 <p>機能として Model Checking を提供し、プログラムの信頼性を確保する</p>
|
12
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
447 <!-- === end markdown block === -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
448
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
449 </section>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
450 </div></div>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
451
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
452
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
453 <script src="scripts/script.js"></script>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
454 <!-- Copyright © 2010–2011 Vadim Makeev, http://pepelsbey.net/ -->
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
455 </body>
|
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
456 </html>
|