# HG changeset patch # User sugi # Date 1422518668 -32400 # Node ID 6ee0c7a04e2f1fe61b1f9cf7f97818569d795e8b # Parent 6b470aab9a41eafd8fe39cb00350ba9c773d4d3b modify computation diff -r 6b470aab9a41 -r 6ee0c7a04e2f paper/chapter1.tex --- a/paper/chapter1.tex Thu Jan 29 14:56:54 2015 +0900 +++ b/paper/chapter1.tex Thu Jan 29 17:04:28 2015 +0900 @@ -1,7 +1,6 @@ \chapter{分散フレームワーク Alice の概要} \label{chapter:chapter1} -\section{Aliceの計算モデル} -\subsection{Data SegmentとCode Segment}\label{subsection:computation} +\section{Data SegmentとCode Segment}\label{subsection:computation} AliceはデータをData Segment、タスクをCode Segmentという単位に分割してプログラミングを行なう。 Code SegmentはInput Data SegmentとOutput Data Segmentを持つ(図 \ref{fig:dsandcs})。Input Data SegmentはそのCode Segmentを実行するために必要なデータ群であり、Output Data SegmentはCode Segmentが計算を行った結果を格納するデータ群である。 @@ -32,18 +31,20 @@ \label{fig:dsandcs2} \end{figure} -\subsection{ComputationとMeta Computation} -Aliceのcomputationは\ref{subsection:computation}で示したように、keyで指し示されるData Segmentを待ち合わせてCode Segmentを実行させるというものである。アプリケーションを作成するためにはアルゴリズムをAliceのComputationで表現する必要がある。 +\section{ComputationとMeta Computation} +AliceのComputationは\ref{subsection:computation}で示したように、keyで指し示されるData Segmentを待ち合わせてCode Segmentを実行させるというものである。アプリケーションを作成するためにはアルゴリズムをAliceのComputationで表現する必要がある。 また、アプリケーションでAliceのComputationを設定するComputationを利用することができる。このComputationをMeta Computationと呼ぶ。 -例えば、Topology ManagerのMeta Computationを利用することで、2分木を3分木にするというトポロジーの変更を行うことができる。他にも再接続のMeta Computationを利用することで、切断されたノードが再びアプリケーションに参加してきた時のみ、以前の計算から再開させることができる。 - -こういったMeta Computationを用いることで元のプログラムを変更することなしに動作を変更する事ができる。 +例えば、Aliceのトポロジーと再接続の管理はMeta Computationとみなすことができる。 +Code Segment単位ではトポロジーや切断を想定せずにアプリケーションを記述することができる。 +トポロジーのMeta Computationを利用することで、トポロジーが2分木からn分木に変わってもアプリケーションは動く。 +再接続のMeta Computationを利用すれば、アプリケーションはノードが再接続してきた場合でも、切断してないノードと同様に動かすことができる。 \section{Aliceの実装} -\subsection{Data Segment} +ここではAliceがどのように実装されているかを説明する。 +\section{Data Segment} Data Segmentは数値や文字列などのデータを構造的に保持する。AliceはData Segmentをデータベースとして扱っている。Data Segmentには必ず対になるKeyが存在する。つまりKey Value Storeとして考える事ができる。 Aliceのデータベースは通常のKVSとは異なっている点がある。通常のKVSはプログラミング言語の連想配列やMapと同様に 「Key(キー)」と「Value(値)」がペアとなっている。そのため1つのKeyに対して値は1つである。しかし、Aliceの場合は「Key」と「Queue」がペアとなっているため、Keyに対して複数回putできる。従って取得できるValueも複数存在する。 @@ -75,8 +76,8 @@ Remoteに対してputできるデータは、@MessageをもつクラスオブジェクトかMessage Packで扱える型に限られる。 -\subsection{Data Segment API} -\subsection{Code Segment} +\subsubsection{Data Segment API} +\section{Code Segment} Code SegmentとはAlice上で実行されるタスクの単位である。ユーザーはCode Segmentを組み合わせることでプログラミングを行う。Code Segmentをユーザーが記述する際に、内部で使用するData Segmentの作成を記述する。 Input Data Segment と Output Data SegmentはCode Segmentに用意されているAPIを用いて作成する。 @@ -87,7 +88,7 @@ しかし、どの時点でノードとkeyの指定を行えばよいか、どのようなAPIを用意するべきかは、議論の余地がある。 -\subsubsection{Code Segmentの実行方法} +\subsection{Code Segmentの実行方法} Alice には、Start Code Segment (ソースコード \ref{src:StartCodeSegment})というC の main に相当するような最初に実行される Code Segment がある。 \begin{table}[html] \lstinputlisting[label=src:StartCodeSegment, caption=StartCodeSegmentの例]{source/StartCodeSegment.java} @@ -97,7 +98,7 @@ このCode Segmentをmainメソッド内でnewし、executeメソッドを呼ぶことで実行を開始させることができる。 -\subsubsection{Code Segmentの記述方法} +\subsection{Code Segmentの記述方法} Code Segmentをユーザーが記述する際にはCode Segmentを継承して記述する(ソースコード \ref{src:CodeSegment})。 Code SegmentはInput/Output Data Segment Managerを利用することができる。