changeset 15:807429fb3398

add conclusion
author kazz <kazz@cr.ie.u-ryukyu.ac.jp>
date Thu, 11 Aug 2011 23:36:09 +0900
parents 56417fb1bb7e
children f3ad837e1558
files paper/kazz-jssst.tex
diffstat 1 files changed, 30 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/paper/kazz-jssst.tex	Thu Aug 11 22:06:34 2011 +0900
+++ b/paper/kazz-jssst.tex	Thu Aug 11 23:36:09 2011 +0900
@@ -147,7 +147,7 @@
 \label{"datasegment"}
 
 FederatedLinda の経験を踏まえて、新しい分散フレームワークの設計を行う。主なターゲットとしては、ネットワークゲームを考えている。
-ネットワークゲームで通信されるデータは色々な型を持っている。今までの FederatedLinda ではその型をうまく定義することができなかった。ここでは、 MessagePack \cite{MessagePack} を型付けに利用する。通信されるデータをここでは DataSegment と呼ぶ。
+ネットワークゲームで通信されるデータは色々な型を持っている。今までの FederatedLinda ではその型をうまく定義することができなかった。ここでは、 MessagePack \cite{msgpack} を型付けに利用する。通信されるデータをここでは DataSegment と呼ぶ。
 
 DataSegment はネットワーク上でやり取りされるので、その場所を表す ID を持っている。 FederatedLinda にはなかった Persistency を導入するために Persistent Storage Class を導入する。 DataSegment の ID に Persistent Storage Class を指定することにより、 Cassandra などのような分散データベースのレコードを直接指し示す。自サーバー上にある DataSegment は Local Storage Class を指定する。他のサーバー上にある DataSegment は Remote Storage Class を指定する。
 
@@ -230,57 +230,68 @@
 SQL などの複雑な操作は、複数の CodeSegment にコンパイルすることで実現する。
 
 通常の DataSegment には Persistency はない。 CodeSegment の処理が終了すると自動的に消滅する。
+
 \subsection{CodeSegment の使い方}
 \label{"usecodesegment"}
 
-\subsubsection{InputDataSegment を指定}
+\subsubsection{InputDataSegment と OutputSegment を指定}
 \label{"inputdatasegment"}
 
-\subsubsection{OutputDataSegment を指定}
+まず、 CodeSegment を生成したら、その処理の中で必要なデータを InputDataSegment として指定する。
+また、返り値として出力するデータを OutputDataSegment として指定する。
+
+OutputDataSegment の ID を指定したときに、その ID が存在しない場合は create し、存在する場合は、 update 処理を行う。
+また、OutputDataSegment が Remote に存在する場合、一旦 Local のバッファに書き出し、転送する CodeSegment を呼び出すことで表現できる。
+Remote の格納先に DataSegment が存在しない場合は自動的に create し、存在する場合は、 update 処理を行う。
 
 \begin{figure}[htbp]
 \begin{center}
 \scalebox{0.50}{\includegraphics{./fig/remoteds.pdf}}
 \end{center}
-\caption{Remote DS への転送も CodeSegment で実現できる。}
+\caption{Remote DS への転送も CodeSegment で表現できる。}
 \label{fig:remoteds}
 \end{figure}
 
-Remote は自動的に allocate
-
 \subsubsection{InputDataSegment が揃ったら実行開始}
 
-\subsubsection{実行中の CodeSegment 内で次の CodeSegment を生成する}
+InputDataSegment に指定されたデータがすべて揃ったら、 CodeSegment が実行される。
+
+その CodeSegment 内で、次の CodeSegment を生成する。
+
+このようにして分散アプリケーションを記述することができる。
 
 \subsection{競合的な DataSegment の書き出し}
-MetaCodeSegment が取り扱う
 
-OverWrite
+DataSegment の update 方法にはいくつか種類がある。例えば次の様なものが挙げられる。
 
-Queue
+\begin{enumerate}
+\item {\bf FIFO} 単純に早いもの順で update する。
+\item {\bf Priority} 優先順位の高いものが update する。
+\item {\bf Queueing} 上書きせずに書き込みを Queue に格納して順番に取り出す。
+\end{enumerate}
 
-Priority
+このような差異を吸収して記述できるようにするために、 MetaCodeSegment をつくって、 CodeSegment とは分離して記述できるようにする。
 
 \subsection{TaskManager}
 \label{"TaskManager"}
 
-CodeSegment List を持っている
-
-実行可能な CodeSegment を各プロセッサーに割り当て
+TaskManager は CodeSegment の管理を司る。
+TaskManager は、生成されたすべての CodeSegment のリストを持っており、 DataSegment の生成や更新を監視している。イベントの発生した DataSegment に依存する CodeSegment をチェックし、すべての InputDataSegment が揃った CodeSegment 、すなわち実行可能な CodeSegment があれば Executor に投げる。
 
 \section{まとめと今後の課題}
 
-Java(Scala)
+本論文では、 FederatedLinda の開発を通して得られた教訓を生かし、 DataSegment と CodeSegment を用いた分散フレームワークを設計した。
 
-CbC
+今後の課題として、新設計したシステムの実装が挙げられるが、それ行うにあたる前に、実装に用いる言語ごとの使い勝手をまとめる。
 
-C++
+Java や Scala には、 java.util.concurrent などの並列処理用のライブラリが充実しているため、 CodeSegment の並列処理まで比較的容易に実装することができる。
+特に Scala には、アクターを使ったメッセージ交換があるため、言語レベルで並列処理を記述することができる。
 
-{\bf 謝辞}\
+本研究室では、 CbC という、引数付き goto による継続ベースのC言語を開発している。それを用いることで、 CodeSegment とDataSegment の繋がりを表現することができる。 CodeSegment 単位で細かく処理を分けて記述することができるのだが、並列処理をまだサポートをしていないので、 TaskManager などの実行カーネルを作成する必要がある。
 %
 \begin{adjustvboxheight} % needed only when Appendix follows
 \begin{thebibliography}{99}
-\bibitem{test} test
+\bibitem{msgpack} MessagePack
 \end{thebibliography}
 \end{adjustvboxheight} % needed only when Appendix follows