Mercurial > hg > Papers > 2012 > sugi-prosym
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> |