annotate improvement.tex @ 1:484bf45ca3ee

add new file
author sugi
date Sun, 31 Mar 2013 16:35:18 +0900
parents
children ddd5a624bb7a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
484bf45ca3ee add new file
sugi
parents:
diff changeset
1 \section{改善案}
484bf45ca3ee add new file
sugi
parents:
diff changeset
2 \subsection{HashMap}
484bf45ca3ee add new file
sugi
parents:
diff changeset
3 HashMapによる探索を排除することはRemoteに対してData Segmentを送受信する際には、マネージャーキーによる探索の操作は削ることは出来ないが、Localにおいては固有のマネージャーキーによる探索は必要ない。改善案としてマネージャーキーを指定しない場合の
484bf45ca3ee add new file
sugi
parents:
diff changeset
4 \subsection{Message Pack}
484bf45ca3ee add new file
sugi
parents:
diff changeset
5 AliceではData SegmentをValue型という、Message Packが提供している型で保存している。
484bf45ca3ee add new file
sugi
parents:
diff changeset
6 Value というクラスは動的に型付けされたオブジェクトを表現することができるため、RubyやPythonのような動的型付けの言語のオブジェクトと同様の扱いをすることができる。
484bf45ca3ee add new file
sugi
parents:
diff changeset
7 分散プログラムのアプリケーションはサーバとクライアントのVersionが同じとは限らない。サーバ側が更新され、扱うData Segmentが変更された場合であっても、旧Versionとの互換性が要求される。
484bf45ca3ee add new file
sugi
parents:
diff changeset
8 Aliceは、この問題をMessage PackのValue型を用いることで互換性をもたせようとしている。
484bf45ca3ee add new file
sugi
parents:
diff changeset
9
484bf45ca3ee add new file
sugi
parents:
diff changeset
10 改善前のAliceではData Segmentをput、updateする段階で、Value型に変換され保存されている。そして、Code Segmentが実行される段階でasClassメソッドに変換したいClassを引数として渡すことで目的の型に戻す。
484bf45ca3ee add new file
sugi
parents:
diff changeset
11 しかし、Versionの問題が起こらないLocalの場合、Data SegmentをValue型に変換し、また任意の型に戻すという操作を行う必要はなく、この操作はは単なるオーバーヘッドにしかならない。
484bf45ca3ee add new file
sugi
parents:
diff changeset
12 Data Segmentの送信先がRemoteの場合に限りValue型に変換するように変更した。内部ではObject型として保存されているのでCode Segment内で処理をする際にキャストを行う必要があるが、この場合もasClassメソッドにClassを引数として渡すだけでよい。
484bf45ca3ee add new file
sugi
parents:
diff changeset
13 そのため、プログラマーはData Segmentとして送られてくるオブジェクトの型を気にすることなくプログラムを記述できる。
484bf45ca3ee add new file
sugi
parents:
diff changeset
14
484bf45ca3ee add new file
sugi
parents:
diff changeset
15 \subsection{SEDA Archtecture }
484bf45ca3ee add new file
sugi
parents:
diff changeset
16 マルチコアが主流になっている背景からAliceにはSEDA Archtectureを採用しているが、SEDAはスループット重視であり、多段のパイプラインのせいでレスポンスが遅れてしまう。Aliceは現在3段のパイプラインで構成されている。今回SEDAのStageを減らす事により、レスポンスの改善を行った。
484bf45ca3ee add new file
sugi
parents:
diff changeset
17
484bf45ca3ee add new file
sugi
parents:
diff changeset
18 \subsection{flip}
484bf45ca3ee add new file
sugi
parents:
diff changeset
19
484bf45ca3ee add new file
sugi
parents:
diff changeset
20 Data Segmentの更新におけるオーバーヘッドを減らす方法としてCeriumでも良好な結果を得ているflipを提案する。
484bf45ca3ee add new file
sugi
parents:
diff changeset
21 CeriumにおけるflipはInput Data SegmentとOutput Data SegmentをswapさせるAPIである。
484bf45ca3ee add new file
sugi
parents:
diff changeset
22 AliceにおいてもCeriumと同様に
484bf45ca3ee add new file
sugi
parents:
diff changeset
23
484bf45ca3ee add new file
sugi
parents:
diff changeset
24 Code Segmentはpeek , takeを使いData Segmentを取得する。
484bf45ca3ee add new file
sugi
parents:
diff changeset
25 取得したData SegmentはInput Data Segmentと呼ばれCode Segmentの Receiverというフィールドに保存されている。
484bf45ca3ee add new file
sugi
parents:
diff changeset
26 そして、Code Segment内でInput Data Segmentに対して処理が行われ、Output Data Segmentとして出力される。
484bf45ca3ee add new file
sugi
parents:
diff changeset
27 実際はputまたはupdateメソッドにData Segmentなどを引数として渡すことで行うことができるが、この際に、Data Segmentのコピーが行われる。
484bf45ca3ee add new file
sugi
parents:
diff changeset
28
484bf45ca3ee add new file
sugi
parents:
diff changeset
29 flipではInput Data SegmentコピーしてOutput Data Segmentを作成するのではなく、Input Data SegmentそのものをOutput DSMに渡すことでData Segmentの無駄なコピーを防ぐ。