comparison presen/sigOS/sample.html @ 14:99e5104997b7

add compress part
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Sun, 24 May 2015 17:56:24 +0900
parents c0fe42a8808d
children 696a908208c8
comparison
equal deleted inserted replaced
13:c0fe42a8808d 14:99e5104997b7
33 <h1 id="section">研究背景(1/2)</h1> 33 <h1 id="section">研究背景(1/2)</h1>
34 </header> 34 </header>
35 <!-- === begin markdown block === 35 <!-- === begin markdown block ===
36 36
37 generated by markdown/1.2.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0] 37 generated by markdown/1.2.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0]
38 on 2015-05-23 16:10:37 +0900 with Markdown engine kramdown (1.5.0) 38 on 2015-05-24 17:55:49 +0900 with Markdown engine kramdown (1.5.0)
39 using options {} 39 using options {}
40 --> 40 -->
41 41
42 <!-- _S9SLIDE_ --> 42 <!-- _S9SLIDE_ -->
43 43
172 </div></div> 172 </div></div>
173 173
174 <div class="slide" id="9"><div> 174 <div class="slide" id="9"><div>
175 <section> 175 <section>
176 <header> 176 <header>
177 <h1 id="alice4---code-segment">Aliceの概要(4) - Code Segment</h1> 177 <h1 id="alice4---data-segment-">Aliceの概要(4) - Data Segment の表現</h1>
178 </header>
179 <!-- _S9SLIDE_ -->
180
181 <ul>
182 <li>一般的な Java のクラスオブジェクト
183 <ul>
184 <li>LocalDSM に put された場合は一般的な Java のクラスオブジェクトとして enQueue される。</li>
185 </ul>
186 </li>
187 <li>MessagePack を用いて変換した byte[]で表現されたバイナリオブジェクト
188 <ul>
189 <li>RemoteDSM に put された場合は通信時に byteArray に変換されたバイナリオブジェクトが enQueue される。</li>
190 </ul>
191 </li>
192 </ul>
193
194
195
196 </section>
197 </div></div>
198
199 <div class="slide" id="10"><div>
200 <section>
201 <header>
202 <h1 id="alice5---code-segment">Aliceの概要(5) - Code Segment</h1>
178 </header> 203 </header>
179 <!-- _S9SLIDE_ --> 204 <!-- _S9SLIDE_ -->
180 205
181 <ul> 206 <ul>
182 <li>Alice上で実行されるタスクの単位を Code Segment(CS) と呼ぶ。</li> 207 <li>Alice上で実行されるタスクの単位を Code Segment(CS) と呼ぶ。</li>
183 <li>複数のDSが入力され、その結果をDSとして出力するfunctionと捉えられる。</li> 208 <li>複数のDSが入力され、その結果をDSとして出力するfunctionと捉えられる。</li>
209 <li>CS をユーザーが記述する際には CS を継承して記述することにより CS で使用する API を利用する事ができる。</li>
210 </ul>
211
212
213
214 </section>
215 </div></div>
216
217 <div class="slide" id="11"><div>
218 <section>
219 <header>
220 <h1 id="alice5---code-segment-1">Aliceの概要(5) - Code Segment</h1>
221 </header>
222 <!-- _S9SLIDE_ -->
223
224 <ul>
184 <li>入力されるDSをInput DS、出力されるDSをOutput DSと呼ぶ。</li> 225 <li>入力されるDSをInput DS、出力されるDSをOutput DSと呼ぶ。</li>
185 <li>keyで指定されたDSが揃うと実行されるという性質を持つ。 226 <li>keyで指定されたDSが揃うと実行されるという性質を持つ。
186 <img src="./images/dsandcs.svg" alt="opt" /></li> 227 <img src="./images/dsandcs.svg" alt="opt" /></li>
187 </ul> 228 </ul>
188 229
189 230
190 231
191 </section> 232 </section>
192 </div></div> 233 </div></div>
193 234
194 <div class="slide" id="10"><div> 235 <div class="slide" id="12"><div>
195 <section> 236 <section>
196 <header> 237 <header>
197 <h1 id="alice5---codesegment">Aliceの概要(5) - CodeSegmentの依存関係</h1> 238 <h1 id="alice6---codesegment">Aliceの概要(6) - CodeSegmentの依存関係</h1>
198 </header> 239 </header>
199 <!-- _S9SLIDE_ --> 240 <!-- _S9SLIDE_ -->
200 241
201 <ul> 242 <ul>
202 <li>データの依存関係にないCSは並列実行される</li> 243 <li>データの依存関係にないCSは並列実行される</li>
208 249
209 250
210 </section> 251 </section>
211 </div></div> 252 </div></div>
212 253
213 <div class="slide" id="11"><div> 254 <div class="slide" id="13"><div>
214 <section> 255 <section>
215 <header> 256 <header>
216 <h1 id="alicemeta-computation">AliceのMeta Computation</h1> 257 <h1 id="alicemeta-computation12">AliceのMeta Computation(1/2)</h1>
217 </header> 258 </header>
218 <!-- _S9SLIDE_ --> 259 <!-- _S9SLIDE_ -->
219 260
220 <ul> 261 <ul>
221 <li>並列指向プログラミング言語 Erlang では、分散環境の構築等の処理は全てプログラマが記述しなければいけない。</li> 262 <li>並列指向プログラミング言語 Erlang では、分散環境の構築等の処理は全てプログラマが記述しなければいけない。</li>
222 <li>Aliceではプログラマが記述する部分を <em>Computation</em>、Aliceが提供するComputationを支える部分を <em>Meta Computation</em> として分けて捉えている。</li> 263 <li>Aliceではプログラマが記述する部分を <em>Computation</em>、Aliceが提供するComputationを支える部分を <em>Meta Computation</em> として分けて捉えている。</li>
223 </ul> 264 <li>分散環境の構築等の処理等は全てMeta Computationが行うためプログラマがシンプルに分散プログラムを記述できる環境を提供している。</li>
224 265 </ul>
225 266
226 267
227 </section> 268
228 </div></div> 269 </section>
229 270 </div></div>
230 <div class="slide" id="12"><div> 271
231 <section> 272 <div class="slide" id="14"><div>
232 <header> 273 <section>
233 <h1 id="alicemeta-computation-1">AliceのMeta Computation</h1> 274 <header>
275 <h1 id="alicemeta-computation22">AliceのMeta Computation(2/2)</h1>
234 </header> 276 </header>
235 <!-- _S9SLIDE_ --> 277 <!-- _S9SLIDE_ -->
236 278
237 <ul> 279 <ul>
238 <li>AliceのComputation 280 <li>AliceのComputation
243 <li>AliceのMeta Computation 285 <li>AliceのMeta Computation
244 <ul> 286 <ul>
245 <li>Javaで記述したAliceの実装システム</li> 287 <li>Javaで記述したAliceの実装システム</li>
246 </ul> 288 </ul>
247 </li> 289 </li>
248 <li>Aliceの機能を追加するということはMeta Computationを追加すると言い換えられる</li> 290 <li>Aliceの機能を追加するということは Meta Computation を追加すると言い換えられる</li>
249 <li>Meta ComputationもCSとDSにより表現されており、それぞれMeta CSとMeta DSと呼ぶ。</li> 291 <li>Meta Computation も CS と DS により表現されており、それぞれMeta CSとMeta DSと呼ぶ。</li>
250 </ul> 292 </ul>
251 293
252 294
253 295
254 </section> 296 </section>
255 </div></div> 297 </div></div>
256 298
257 <div class="slide" id="13"><div> 299 <div class="slide" id="15"><div>
300 <section>
301 <header>
302 <h1 id="alicevnc">AliceVNC</h1>
303 </header>
304 <!-- _S9SLIDE_ -->
305
306 <ul>
307 <li>研究室では授業向け画面共有システム TreeVNC の開発を行っている。</li>
308 <li>授業で VNC を使う場合、1つ のコンピュータに多人数が同時につながるため、性能が大幅に落ちる</li>
309 <li>TreeVNCではノード同士を接続させ、木構造を構成することで負荷分散を行う
310 <img src="./images/treeVNC.svg" alt="opt" /></li>
311 </ul>
312
313
314
315 </section>
316 </div></div>
317
318 <div class="slide" id="16"><div>
258 <section> 319 <section>
259 <header> 320 <header>
260 <h1 id="alice-">Alice の新機能</h1> 321 <h1 id="alice-">Alice の新機能</h1>
261 </header> 322 </header>
262 <!-- _S9SLIDE_ --> 323 <!-- _S9SLIDE_ -->
263 324
264 <p>実用的なアプリケーションであるTreeVNCの実装で必要となった以下の機能をMeta Computation として実装した。<br /> 325 <ul>
265 * flip機能 … Input DS を Output DSとして転送する 326 <li>Alice が実用的なアプリケーションを記述する能力をもつことを確認するために、TreeVNC を Alice を用いて実装した AliceVNC の作成を行った。</li>
266 * 圧縮機能 … DS Managerの指定によってDSの表現を切り替える</p> 327 <li>AliceVNCの実装で必要となった以下の機能をMeta Computation として実装した。<br />
267 328 <ul>
268 329 <li>flip機能 … Input DS を Output DS として転送する</li>
269 330 <li>圧縮機能 … DS Manager の指定によってDSの表現を切り替える</li>
270 </section> 331 </ul>
271 </div></div> 332 </li>
272 333 </ul>
273 <div class="slide" id="14"><div> 334
335
336
337 </section>
338 </div></div>
339
340 <div class="slide" id="17"><div>
274 <section> 341 <section>
275 <header> 342 <header>
276 <h1 id="flip">flip機能</h1> 343 <h1 id="flip">flip機能</h1>
277 </header> 344 </header>
278 <!-- _S9SLIDE_ --> 345 <!-- _S9SLIDE_ -->
281 348
282 349
283 </section> 350 </section>
284 </div></div> 351 </div></div>
285 352
286 <div class="slide" id="15"><div> 353 <div class="slide" id="18"><div>
287 <section> 354 <section>
288 <header> 355 <header>
289 <h1 id="section-3">圧縮機能</h1> 356 <h1 id="section-3">圧縮機能</h1>
290 </header> 357 </header>
291 <!-- _S9SLIDE_ --> 358 <!-- _S9SLIDE_ -->
292 359
293 360 <ul>
294 361 <li>AliceVNCは、ノードは受け取った画面データを描画すると同時に、子ノードの Remote DSM に送信する。</li>
295 362 <li>ノードは DS を受信するとそれを一度解凍して画面を表示し、再圧縮して子ノードに送信する。</li>
296 </section> 363 <li>圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮するオーバーヘッドを無くすことができる。</li>
297 </div></div> 364 </ul>
298 365
299 <div class="slide" id="16"><div> 366
300 <section> 367
301 <header> 368 </section>
302 <h1 id="api">API設計</h1> 369 </div></div>
303 </header> 370
304 <!-- _S9SLIDE_ --> 371 <div class="slide" id="19"><div>
305 372 <section>
306 <ul> 373 <header>
307 <li>put(String “compressed” + managerKey, String key, Object val) </li> 374 <h1 id="data-segment">圧縮機能 - Data Segmentの表現の変更</h1>
308 <li>take(String “compressed” + managerKey, String key)</li> 375 </header>
376 <!-- _S9SLIDE_ -->
377
378 <p>1つの Data Segment に対し以下の3種類の表現を同時に持たせ、必要に応じた形式で DS を扱う。
379 1. 一般的な Java のクラスオブジェクト
380 2. MessagePack for Java でシリアライズ化され たバイナリオブジェクト
381 3. 2 を圧縮したバイナリオブジェクト</p>
382
383
384
385 </section>
386 </div></div>
387
388 <div class="slide" id="20"><div>
389 <section>
390 <header>
391 <h1 lang="java" id="data-segment-1">圧縮機能 - Data Segmentの表現の変更</h1>
392 </header>
393 <!-- _S9SLIDE_ -->
394
395 <pre><code> public class ReceiveData {
396 private Object val = null;
397 private byte[] messagePack = null;
398 private byte[] zMessagePack = null;
399 }
400 </code></pre>
401
402
403
404 </section>
405 </div></div>
406
407 <div class="slide" id="21"><div>
408 <section>
409 <header>
410 <h1 id="dsm">圧縮機能 - DSMの追加</h1>
411 </header>
412 <!-- _S9SLIDE_ -->
413
414 <ul>
415 <li>Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加した。</li>
416 <li>Compressed DSM にputする場合
417 <ul>
418 <li>DS が圧縮表現を持っていればそれをputする</li>
419 <li>持っていなければその時点で圧縮表現を作ってputする</li>
420 </ul>
421 </li>
422 </ul>
423
424
425
426 </section>
427 </div></div>
428
429 <div class="slide" id="22"><div>
430 <section>
431 <header>
432 <h1 id="ds">圧縮機能 - 任意の表現でDSを取得</h1>
433 </header>
434 <!-- _S9SLIDE_ -->
435
436 <ul lang="java">
437 <li>ReceiveData内にあるDSのcastメソッドであるasClass()を用いる</li>
438 </ul>
439 <pre><code> public &lt;T&gt; T asClass(Class&lt;T&gt; clazz) {
440 if (val != null) { return (T) val; }
441
442 if (zMessagePack != null &amp;&amp; messagePack == null) {
443 messagePack = unzip(zMessagePack, dataSize);
444 }
445
446 return packer.read(messagePack, clazz);
447 }
448 </code></pre>
449
450
451
452 </section>
453 </div></div>
454
455 <div class="slide" id="23"><div>
456 <section>
457 <header>
458 <h1 id="api">圧縮機能 - API設計</h1>
459 </header>
460 <!-- _S9SLIDE_ -->
461
462 <p>通常のデータを扱う場合<br />
463 * put(String managerKey, String key, Object val)<br />
464 * take(String managerKey, String key)</p>
465
466 <p>圧縮表現のデータを扱う場合<br />
467 * put(String <strong>“compressed”</strong> + managerKey, String key, Object val)<br />
468 * take(String <strong>“compressed”</strong> + managerKey, String key)</p>
469
470
471
472 </section>
473 </div></div>
474
475 <div class="slide" id="24"><div>
476 <section>
477 <header>
478 <h1 id="section-4">圧縮機能 - 通信プロトコルの変更</h1>
479 </header>
480 <!-- _S9SLIDE_ -->
481
482 <p>Remote から put されたデータは必ずシリアライズ化されており byteArray で表現される。
483 データの 表現に圧縮した byteArray を追加したため、Remote から put された byteArray が圧縮されているのかそ うでないのかを判断する必要がある。</p>
484
485
486
487 </section>
488 </div></div>
489
490 <div class="slide" id="25"><div>
491 <section>
492 <header>
493 <h1 id="section-5">圧縮機能の評価</h1>
494 </header>
495 <!-- _S9SLIDE_ -->
496
497 <p>RingRelayTest</p>
498
499
500
501 </section>
502 </div></div>
503
504 <div class="slide" id="26"><div>
505 <section>
506 <header>
507 <h1 id="section-6">まとめ</h1>
508 </header>
509 <!-- _S9SLIDE_ -->
510
511 <ul>
512 <li>Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせ、指定するDSMによってデータ表 現を変える機能を実装した。</li>
513 <li>これによりユーザが記述する Computation 部分を大きく変えずに自由度の高い通信を行うことが可能になった。</li>
514 <li>同様の手法により、暗号形式・JSON 形式など複数のデータ表現を扱えるように拡張できる。</li>
515 <li>今後の課題としては、圧縮機能を AliceVNC で用 いることで有効性を測る必要がある。</li>
309 </ul> 516 </ul>
310 <!-- === end markdown block === --> 517 <!-- === end markdown block === -->
311 518
312 </section> 519 </section>
313 </div></div> 520 </div></div>