comparison presen/index.html @ 26:8370b9afbf33

add presen
author e095732 <e095732@ie.u-ryukyu.ac.jp>
date Thu, 20 Dec 2012 16:29:59 +0900
parents
children 83a9162efd5e
comparison
equal deleted inserted replaced
25:dc453f4c4acf 26:8370b9afbf33
1 <!DOCTYPE html>
2
3 <!--
4 Google HTML5 slide template
5
6 Authors: Luke Mahé (code)
7 Marcin Wichary (code and design)
8
9 Dominic Mazzoni (browser compatibility)
10 Charles Chen (ChromeVox support)
11
12 URL: http://code.google.com/p/html5slides/
13 -->
14
15 <html>
16 <head>
17 <title>Presentation</title>
18
19 <meta charset='utf-8'>
20 <script
21 src='./slides.js'></script>
22 </head>
23
24 <style>
25 /* Your individual styles here, or just use inline styles if that’s
26 what you want. */
27
28
29 </style>
30
31 <body style='display: none'>
32
33 <section class='slides layout-regular template-default'>
34
35 <!-- Your slides (<article>s) go here. Delete or comment out the
36 slides below. -->
37
38 <article>
39 <h1>
40 <font size="6">CodeSegmentとDataSegmentによるプログラミング手法</font>
41
42 </h1>
43 <p>
44 河野 真治<br>
45 杉本 優
46 </p>
47 琉球大学 並列信頼研究室
48 </article>
49
50 <article>
51 <h3>研究背景</h3>
52 <ul>
53 </ul>
54 </article>
55
56 <article>
57 <h3>Alice</h3>
58 <p>Alice は本研究室で開発を行なっている分散タスク管理フレームワークである。</p>
59 <p>Cell用のOpen CL に似たTask管理用フレームワークCeriumと
60 Lindaを相互接続した分散フレームワークであるFederated Lindaの開発を通して得られた知見を生かされている。</p>
61 </article>
62
63
64 <article>
65 <h3>Cerium</h3>
66 <p>CeriumではTaskを小さく分割して並列実行し、データ転送はパイプライン実行により隠される。</p>
67 <p>Taskには依存関係がありデータの依存関係がそのままTaskの依存関係になることが多い。</p>
68 <p>繰り返し使われるデータの管理が重要であり、実行時にわかるデータ構造感間の依存関係がTaskを複雑にしている。</p>
69 </article>
70 <article>
71 <h3>Data Segment API - put</h3>
72 <ul><li>データを追加する</li></ul>
73 <div align="center">
74 <img src="images/put.png" width="70%">
75 </div>
76 <ul>
77 <p>putを行うとデータがenqueueされる。</p>
78 <p>putするたびにKeyが持つindexがincrementされる。</p>
79 </ul>
80 </article>
81
82 <article>
83 <h3>Data Segment API - update</h3>
84 <ul><li>データを置き換える</li></ul>
85 <div align="center">
86 <img src="images/update.png" width="70%">
87 </div>
88 <ul>
89 putと異な点は先頭データを削除し、データを追加する。
90 </ul>
91 </article>
92
93 <article>
94 <h3>Data Segment API - peek</h3>
95 <ul><li>データを取得する</li></ul>
96 <div align="center">
97 <img src="images/peek.png" width="50%"><br>
98 </div>
99 <ul>
100 peekはデータを取得しreceiverに渡す。
101 </ul>
102 </article>
103
104 <article>
105 <h3>Data Segment API - peek</h3>
106 <div align="center">
107 <img src="images/peek1.png" width="60%"><br>
108 </div>
109 <ul>
110 <p>要求したデータがない場合にはwaitListに登録する。</p>
111 データがpeek、updateされた際に要求したデータがあるかどうかを再びチェックする。
112
113 </ul>
114 </article>
115
116 <article>
117 <h3>Data Segment API - take</h3>
118 <ul><li>データを取得して取得されたデータはdequeueされる</li></ul>
119 <div align="center">
120 <img src="images/take.png" width="50%"><br>
121 </div>
122 <ul>
123 <p>基本的な動作はpeekと同じである。</p>
124 <p>peekと異なる点は取得されたデータがdequeueされる。</p>
125 </ul>
126 </article>
127
128 <article>
129 <h3>Data Segmentの実装</h3>
130 <ul>
131 Data Segmentのデータ表現はMessagePackを使用。
132 </ul>
133 <ul><p>JavaにおけるMessagePackのデータ表現</p>
134 <li>一般的なJavaのクラスオブジェクト</li>
135 <li>MessagePack for JavaのValueオブジェクト</li>
136 <li>byte[]で表現されたバイナリ</li>
137 </ul>
138 <ul>
139 <p>Data Segment APIでは</p>
140 MessagePack for javaのValueオブジェクトを使用</p>
141 MessagePackのバイナリにシリアライズできる型のみで
142 構成されているため自己記述式のデータ形式
143 </ul>
144 </article>
145
146 <article>
147 <h3>Data Segmentの実装</h3>
148 <ul><p>Valueオブジェクトは通信に関わる際には、シリアライズ、デシリアライズを行うことができる</p>
149 <img src="images/FishPoint.png" width=700><br>
150 ユーザーが一般的なクラスをIDL(Interface Definition Language)のように用いてデータを記述することが可能
151 </ul>
152 </article>
153
154 <article>
155 <h3>CodeSegment</h3>
156 <ul>
157 <li>Code Segmentはタスクのこと</li>
158 <li>ユーザーが記述する際にCode Segment内で使用する<br>Data Segmentの作成を記述</li>
159 <li>Input Data SegmentとOutput Data Segmentを作るAPI</li>
160 <li>必要なInput Data Segmentが揃った時に実行される</li>
161 </ul>
162 </article>
163
164 <article>
165 <h3>Input Data SegmentとOutput Data Segment</h3>
166 <ul>
167 <li>localかremoteを指定</li>
168 <li>Data Segmentに関連付けされているKEYを指定</li>
169 </ul>
170 </article>
171
172 <article>
173 <ul>
174 <h3>Data Segmentの例</h3>
175 <img src="images/SendWidth.png" width=600>
176 </ul>
177 </article>
178
179 <article>
180 <h3>Input Data Segmentの例</h3>
181 <ul>
182 <img src="images/ids.png" width=400><br>
183 Receiverの作成<br>
184 PEEK,TAKEのどちらかを選択
185 </ul>
186 <ul>
187 <img src="images/idsSetkey.png" width=600><br>
188 第1引数 マシン名<br>
189 第2引数 Data Segmentに関連付けられているKEY<br>
190 第3引数 index(指定しない場合は先頭データが取得される)<br>
191 </ul>
192 </article>
193
194 <article>
195 <h3>Output Data Segmentの例</h3>
196 <ul>
197 <img src="images/ods.png" width=400><br>
198 putかupdateのどちらかを選択
199 </ul>
200 <ul>
201 第1引数 マシン名<br>
202 第2引数 Data Segmentに関連付けるKEY<br>
203 第3引数 Data Segment<br>
204 </ul>
205 </article>
206
207 <article>
208 <h3>Code Segmentの実行方法</h3>
209 <ul>
210 <img src="images/StartCS.png" width=600><br>
211 </ul>
212 <ul>
213 AliceにはCのmainに相当するStart Code SegmentというCode Segmentが存在する。<br>
214 Start Code SegmentはInput Data Segmentが存在しない。
215 </ul>
216 </article>
217
218 <article>
219 <h3>Code Segmentの実行方法</h3>
220 <ul>
221 <img src="images/execute.png" width=600><br>
222 </ul>
223 <ul>
224 このStart Code Segmentをnewし、executeメソッドを呼ぶことでCode Segmentを実行することができる。
225 </ul>
226 </article>
227
228 <article>
229 <h3>Code Segmentの記述方法</h3>
230 <ul>
231 <img src="images/TestCodeSegment.png" width=600><br>
232 </ul>
233 ユーザがCode Segmentを記述する際にはCode Segmentを継承する。<br>
234 runの中に実際にさせたい処理を記述する。
235 </article>
236
237 <article>
238 <h3>Topology Manager</h3>
239 <ul>
240 Alice同士の接続トポロジーを管理する。<br>
241 トポロジーファイルを読み込み、参加を表明したクライアントに接続すべきクライアントのIPアドレスやポート番号、接続名を送る。
242 <div align="center">
243 <img src="images/topology.png" width=350>
244 </div>
245 </ul>
246 </article>
247
248 <article>
249 <h3>Topology Manager</h3>
250 <ul>
251 Topology Manager関連の通信は全て、Code Segmentで実装されている。
252 </ul>
253 </article>
254
255 <article>
256 <h3>トポロジーファイル</h3>
257 <ul>
258 <p>トポロジーファイルはDOT Languageと言う言語で記述される。</p>
259 DOT Languageはプレーンテキストを用いてデータ構造としてのグラフを表現するデータ記述言語の一つ。<br>
260 DOT Languageのグラフ構造を用いてTopology Node間の接続を表現する。<br>
261 </ul>
262 </article>
263
264 <article>
265 <h3>トポロジーファイルの記述方法</h3>
266 <ul>
267 <img src="images/topologyfile.png">
268 <p>dotコマンドを用いて、グラフの画像ファイルを生成することができるのでトポロジーが正しいか確認することができる。</p>
269
270 </ul>
271 </article>
272
273 <article>
274 <h3>トポロジーファイルの確認方法</h3>
275 <ul>
276 <p><strong>dot -T png ring.dot -o ring.png</strong></p>
277 <div align="center">
278 <img src="images/dot.png">
279 </div>
280 </ul>
281 </article>
282
283 <article>
284 <h3>水族館の例題</h3>
285 <ul>
286 </ul>
287 </article>
288
289 <article>
290 <h3>性能比較 - 実験概要</h3>
291 <ul>
292 AliceとFederated Linda で性能比較を行った。<br>
293 Ring型のトポロジーを構成、メッセージが100周する時間を計測。
294 1周あたりの平均時間を求めた。
295 <div align="center">
296 <img src="images/ringTest.png">
297 </div>
298 パケットのサイズは10byte,10Kbyte,100kbtyeで実験
299 </ul>
300 </article>
301
302 <article>
303 <h3>実験環境</h3>
304 <ul>
305 ブレードサーバー上の仮想マシンによる仮想クラスタ環境を用いて実験した。<br>
306 <p><strong>ブレードサーバー詳細</strong></p>
307 <table style="font:Osaka;text-align:right;" border="2" >
308 <tr>
309 <td>マシン台数</td>
310 <td>8台</td>
311 </tr>
312 <tr>
313 <td>CPU</td>
314 <td>Intel(R) Xeon(R) X5650 @ 2.67GHz</td>
315 </tr>
316 <tr>
317 <td>物理コア数</td>
318 <td>12</td>
319 </tr>
320 <tr>
321 <td>論理コア数</td>
322 <td>24</td>
323 </tr><tr>
324 <td>CPU キャッシュ</td>
325 <td>12MB</td>
326 </tr>
327 <tr>
328 <td>Memory</td>
329 <td>132GB</td>
330 </tr>
331 </table>
332
333 </ul>
334 </article>
335 <article>
336 <h3>実験環境</h3>
337 <ul>
338 <p><strong>仮想クラスタ詳細</strong></p>
339 <table style="font:Osaka;text-align:right;" border="2" >
340 <tr>
341 <td>マシン台数</td>
342 <td>48台</td>
343 </tr>
344 <tr>
345 <td>CPU</td>
346 <td>Intel(R) Xeon(R) X5650 @ 2.67GHz</td>
347 </tr>
348 <tr>
349 <td>物理コア数</td>
350 <td>2</td>
351 </tr>
352 <tr>
353 <td>論理コア数</td>
354 <td>4</td>
355 </tr><tr>
356 <td>CPU キャッシュ</td>
357 <td>12MB</td>
358 </tr>
359 <tr>
360 <td>Memory</td>
361 <td>8GB</td>
362 </tr>
363 </table>
364 </ul>
365 </article>
366
367 <article>
368 <h3>実験結果</h3>
369 <ul>
370 <strong>10byte</strong><br>
371 <img src="images/ring10B.png" width=650>
372 </ul>
373 </article>
374
375 <article>
376 <h3>実験結果</h3>
377 <ul>
378 <strong>10kbyte</strong><br>
379 <img src="images/ring10KB.png" width=650>
380 </ul>
381 </article>
382
383 <article>
384 <ul>
385 <h3>実験結果</h3>
386 <strong>100kbyte</strong>
387 <img src="images/ring100KB.png" width=650><br>
388 データ量が増えると差が縮まっている。これはここの通信の手間の影響が大きことを示している。
389 </ul>
390 </article>
391
392 <article>
393 <h3>評価と考察</h3>
394 <ul>
395 今回の実装はJavaによりCode SegmentとData Segmentに必要なAPIを洗い出すものだった。この実装でも問題をいくつか発見した。<br>
396 <p><strong>API</strong></p>
397 <li>Class継承したりData Segmentの作成にFactory objectを使うのはJavaを使う際の技術的な問題</li>
398 <li>JavaのObject指向な記述が全体を煩雑にしている部分がある</li>
399 <li>updateはData Segmentの競合的な更新に使われるべきだと思われる</li>
400 </ul>
401 </article>
402
403 <article>
404 <h3>評価と考察</h3>
405 <ul>
406 <p><strong>SEDA</strong></p>
407 <li>Federated Lindaに比べ遅い原因の一つはSEDA architectureのせいと思われる</li>
408 <li>SEDAはスループット重視の実装であり、多段パイプラインのせいでレスポンスが遅れてしまう</li>
409
410 </ul>
411 </article>
412
413 <article>
414 <h3>評価と考察</h3>
415 <ul>
416 <li>スレッドプールを使わないほうが、Ringの結果は良い</li>
417 <img src="images/notp.png" width=650><br>
418 <li>スレッドプールを使わないほうが、Ringの結果は良い</li>
419 </ul>
420 </article>
421
422 <article>
423 <h3>評価と考察</h3>
424 <ul>
425 <p><strong>MessagePack</strong></p>
426 <li>今回の実装では単純なMessageの転送時にもMessagePackのdecode/encodeをしているが、overheadになってしまうため、decode/encode抜きに直接操作できるほうが望ましい</li>
427 <li>Data Segmentの一部の修正をするたびにData Segmentが再構成されているがこれは望ましくない</li>
428 <li>AliceもCeriumのようにInput Data SegmentとOutput Data SegmentをswapするAPIがあるとよいと思われる</li>
429 </ul>
430 </article>
431
432
433 </Section>
434 </body>
435 </html>