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