comparison improvement.tex @ 3:7482647c66ec

minor change
author sugi
date Mon, 01 Apr 2013 18:44:41 +0900
parents ddd5a624bb7a
children 715578f76084
comparison
equal deleted inserted replaced
2:ddd5a624bb7a 3:7482647c66ec
6 \subsection{Message Pack} 6 \subsection{Message Pack}
7 AliceではData SegmentをValue型という、Message Packが提供している型で保存している。 7 AliceではData SegmentをValue型という、Message Packが提供している型で保存している。
8 Value というクラスは動的に型付けされたオブジェクトを表現することができるため、RubyやPythonのような動的型付けの言語のオブジェクトと同様の扱いをすることができる。 8 Value というクラスは動的に型付けされたオブジェクトを表現することができるため、RubyやPythonのような動的型付けの言語のオブジェクトと同様の扱いをすることができる。
9 分散プログラムのアプリケーションはサーバとクライアントのVersionが同じとは限らない。サーバ側が更新され、扱うData Segmentが変更された場合であっても、旧Versionとの互換性が要求される。 9 分散プログラムのアプリケーションはサーバとクライアントのVersionが同じとは限らない。サーバ側が更新され、扱うData Segmentが変更された場合であっても、旧Versionとの互換性が要求される。
10 Aliceは、この問題をMessage PackのValue型を用いることで互換性をもたせようとしている。 10 Aliceは、この問題をMessage PackのValue型を用いることで互換性をもたせようとしている。
11 しかし、Versionの問題が起こらないLocalの場合、Data SegmentをValue型に変換し、また任意の型に戻すという操作を行う必要はなく、この操作はは単なるオーバーヘッドにしかならない。 11 しかし、Versionの問題が起こらないLocalの場合、Data SegmentをValue型に変換し、また任意の型に戻すという操作を行う必要はなく、この操作は単なるオーバーヘッドにしかならない。
12 12
13 以上のことからData Segmentの送信先がRemoteの場合に限りValue型に変換を行われるように設計をすれば良い。内部ではObject型として保存する。この場合、Code Segment内でData Segmentを処理をする際にキャストを行う必要があるが、asClassメソッドでキャストを行うようにすることで、RemoteとLocalの記述を同じにすることができる。 13 従って、Data Segmentの送信先がRemoteであるならばValue型に変換を行い、Localであるならば変換しないという具合に改善をすれば、LocalにおけるMessage Packのオーバーヘッドを減らすことができる。
14 そのため、プログラマーはData Segmentとして送られてくるオブジェクトの型を気にすることなくプログラムを記述できる。 14
15 15
16 \subsection{SEDA Archtecture } 16 \subsection{SEDA Archtecture }
17 Localにおいてはput や peek に沿ったCommand を作成するステージ(Code Segmentが実行されているスレッド)、受け取ったCommandを処理するステージ、Code SegmentにData Segmentをセットするステージの三段のパイプラインで構成されている。最後のCode SegmentにData Segmentをセットするステージはpeekとtakeの時のみ実行される。 17 Localにおいてはput や peek に沿ったCommand を作成するステージ(Code Segmentが実行されているスレッド)、受け取ったCommandを処理するステージ、Code SegmentにData Segmentをセットするステージの三段のパイプラインで構成されている。これを全て同一のステージにまとめ、Localの環境下においてSEDAを使用せずに処理を行うように変更する。
18 今回、二段目と三段目を一つにまとめることによってステージを減らすことによりオーバーヘッドを減らす。
19
20 \subsection{Data Segmentの再構成} 18 \subsection{Data Segmentの再構成}
21 Data Segmentの更新におけるオーバーヘッドを減らす方法としてCeriumでも良好な結果を得ているflipを提案する。 19 Data Segmentの更新におけるオーバーヘッドを減らす方法としてCeriumでも良好な結果を得ているflipを提案する。
22 CeriumにおけるflipはInput Data SegmentとOutput Data SegmentをswapさせるAPIである。 20 CeriumにおけるflipはInput Data SegmentとOutput Data SegmentをswapさせるAPIである。(ソースコード \ref{fig:flip})
23 21
24 \begin{table}[tb] 22 \begin{table}[tb]
25 \lstinputlisting[label=fig:CodeSegment, caption=Ceriumにおけるflipの例]{source/Cerium_flip.cc} 23 \lstinputlisting[label=fig:flip, caption=Ceriumにおけるflip]{source/Cerium_flip.cc}
26 \end{table} 24 \end{table}
27 25 {\tt readbuf}がInput Data Segment、{\tt writebuf}がOutput Data Segmentである。
28 AliceにおいてもCeriumと同様にflipを実装する。 26 Output がinput の書き換えならばswapを行い、2つの領域を入れ替えることで無駄なmemcopyを防ぐことができる。
29 AliceにおけるflipはInput Data SegmentコピーしてOutput Data Segmentを作成するのではなく、Input Data SegmentそのものをOutput DSMに渡すことでData Segmentの無駄なコピーを防ぐ。 27 AliceにおいてもCeriumと同様にflipを実装することで、無駄なデータのコピーを防ぐ。
30