annotate improvement.tex @ 4:715578f76084

fixed
author sugi
date Mon, 01 Apr 2013 21:17:42 +0900
parents 7482647c66ec
children 2a0cb8fdecfc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
484bf45ca3ee add new file
sugi
parents:
diff changeset
1 \section{改善案}
4
sugi
parents: 3
diff changeset
2
2
ddd5a624bb7a add image flies
sugi
parents: 1
diff changeset
3
1
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型を用いることで互換性をもたせようとしている。
3
7482647c66ec minor change
sugi
parents: 2
diff changeset
9 しかし、Versionの問題が起こらないLocalの場合、Data SegmentをValue型に変換し、また任意の型に戻すという操作を行う必要はなく、この操作は単なるオーバーヘッドにしかならない。
1
484bf45ca3ee add new file
sugi
parents:
diff changeset
10
3
7482647c66ec minor change
sugi
parents: 2
diff changeset
11 従って、Data Segmentの送信先がRemoteであるならばValue型に変換を行い、Localであるならば変換しないという具合に改善をすれば、LocalにおけるMessage Packのオーバーヘッドを減らすことができる。
7482647c66ec minor change
sugi
parents: 2
diff changeset
12
1
484bf45ca3ee add new file
sugi
parents:
diff changeset
13
484bf45ca3ee add new file
sugi
parents:
diff changeset
14 \subsection{SEDA Archtecture }
3
7482647c66ec minor change
sugi
parents: 2
diff changeset
15 Localにおいてはput や peek に沿ったCommand を作成するステージ(Code Segmentが実行されているスレッド)、受け取ったCommandを処理するステージ、Code SegmentにData Segmentをセットするステージの三段のパイプラインで構成されている。これを全て同一のステージにまとめ、Localの環境下においてSEDAを使用せずに処理を行うように変更する。
2
ddd5a624bb7a add image flies
sugi
parents: 1
diff changeset
16 \subsection{Data Segmentの再構成}
1
484bf45ca3ee add new file
sugi
parents:
diff changeset
17 Data Segmentの更新におけるオーバーヘッドを減らす方法としてCeriumでも良好な結果を得ているflipを提案する。
3
7482647c66ec minor change
sugi
parents: 2
diff changeset
18 CeriumにおけるflipはInput Data SegmentとOutput Data SegmentをswapさせるAPIである。(ソースコード \ref{fig:flip})
1
484bf45ca3ee add new file
sugi
parents:
diff changeset
19
2
ddd5a624bb7a add image flies
sugi
parents: 1
diff changeset
20 \begin{table}[tb]
3
7482647c66ec minor change
sugi
parents: 2
diff changeset
21 \lstinputlisting[label=fig:flip, caption=Ceriumにおけるflip]{source/Cerium_flip.cc}
2
ddd5a624bb7a add image flies
sugi
parents: 1
diff changeset
22 \end{table}
3
7482647c66ec minor change
sugi
parents: 2
diff changeset
23 {\tt readbuf}がInput Data Segment、{\tt writebuf}がOutput Data Segmentである。
7482647c66ec minor change
sugi
parents: 2
diff changeset
24 Output がinput の書き換えならばswapを行い、2つの領域を入れ替えることで無駄なmemcopyを防ぐことができる。
7482647c66ec minor change
sugi
parents: 2
diff changeset
25 AliceにおいてもCeriumと同様にflipを実装することで、無駄なデータのコピーを防ぐ。