Mercurial > hg > Papers > 2015 > sugi-master
comparison paper/chapter1.tex @ 20:6ee0c7a04e2f
modify computation
author | sugi |
---|---|
date | Thu, 29 Jan 2015 17:04:28 +0900 |
parents | 6b470aab9a41 |
children | fd43827452ad |
comparison
equal
deleted
inserted
replaced
19:6b470aab9a41 | 20:6ee0c7a04e2f |
---|---|
1 \chapter{分散フレームワーク Alice の概要} \label{chapter:chapter1} | 1 \chapter{分散フレームワーク Alice の概要} \label{chapter:chapter1} |
2 | 2 |
3 \section{Aliceの計算モデル} | 3 \section{Data SegmentとCode Segment}\label{subsection:computation} |
4 \subsection{Data SegmentとCode Segment}\label{subsection:computation} | |
5 AliceはデータをData Segment、タスクをCode Segmentという単位に分割してプログラミングを行なう。 | 4 AliceはデータをData Segment、タスクをCode Segmentという単位に分割してプログラミングを行なう。 |
6 Code SegmentはInput Data SegmentとOutput Data Segmentを持つ(図 \ref{fig:dsandcs})。Input Data SegmentはそのCode Segmentを実行するために必要なデータ群であり、Output Data SegmentはCode Segmentが計算を行った結果を格納するデータ群である。 | 5 Code SegmentはInput Data SegmentとOutput Data Segmentを持つ(図 \ref{fig:dsandcs})。Input Data SegmentはそのCode Segmentを実行するために必要なデータ群であり、Output Data SegmentはCode Segmentが計算を行った結果を格納するデータ群である。 |
7 | 6 |
8 | 7 |
9 Data SegmentはAliceが内部にもつデータベースによって管理されている。 | 8 Data SegmentはAliceが内部にもつデータベースによって管理されている。 |
30 \end{center} | 29 \end{center} |
31 \caption{Input Data Segment とOut put Data SegmentがCode Segment間の依存関係を自動的に記述する} | 30 \caption{Input Data Segment とOut put Data SegmentがCode Segment間の依存関係を自動的に記述する} |
32 \label{fig:dsandcs2} | 31 \label{fig:dsandcs2} |
33 \end{figure} | 32 \end{figure} |
34 | 33 |
35 \subsection{ComputationとMeta Computation} | 34 \section{ComputationとMeta Computation} |
36 Aliceのcomputationは\ref{subsection:computation}で示したように、keyで指し示されるData Segmentを待ち合わせてCode Segmentを実行させるというものである。アプリケーションを作成するためにはアルゴリズムをAliceのComputationで表現する必要がある。 | 35 AliceのComputationは\ref{subsection:computation}で示したように、keyで指し示されるData Segmentを待ち合わせてCode Segmentを実行させるというものである。アプリケーションを作成するためにはアルゴリズムをAliceのComputationで表現する必要がある。 |
37 | 36 |
38 また、アプリケーションでAliceのComputationを設定するComputationを利用することができる。このComputationをMeta Computationと呼ぶ。 | 37 また、アプリケーションでAliceのComputationを設定するComputationを利用することができる。このComputationをMeta Computationと呼ぶ。 |
39 | 38 |
40 例えば、Topology ManagerのMeta Computationを利用することで、2分木を3分木にするというトポロジーの変更を行うことができる。他にも再接続のMeta Computationを利用することで、切断されたノードが再びアプリケーションに参加してきた時のみ、以前の計算から再開させることができる。 | 39 例えば、Aliceのトポロジーと再接続の管理はMeta Computationとみなすことができる。 |
41 | 40 Code Segment単位ではトポロジーや切断を想定せずにアプリケーションを記述することができる。 |
42 こういったMeta Computationを用いることで元のプログラムを変更することなしに動作を変更する事ができる。 | 41 トポロジーのMeta Computationを利用することで、トポロジーが2分木からn分木に変わってもアプリケーションは動く。 |
42 再接続のMeta Computationを利用すれば、アプリケーションはノードが再接続してきた場合でも、切断してないノードと同様に動かすことができる。 | |
43 | 43 |
44 | 44 |
45 \section{Aliceの実装} | 45 \section{Aliceの実装} |
46 \subsection{Data Segment} | 46 ここではAliceがどのように実装されているかを説明する。 |
47 \section{Data Segment} | |
47 Data Segmentは数値や文字列などのデータを構造的に保持する。AliceはData Segmentをデータベースとして扱っている。Data Segmentには必ず対になるKeyが存在する。つまりKey Value Storeとして考える事ができる。 | 48 Data Segmentは数値や文字列などのデータを構造的に保持する。AliceはData Segmentをデータベースとして扱っている。Data Segmentには必ず対になるKeyが存在する。つまりKey Value Storeとして考える事ができる。 |
48 | 49 |
49 Aliceのデータベースは通常のKVSとは異なっている点がある。通常のKVSはプログラミング言語の連想配列やMapと同様に 「Key(キー)」と「Value(値)」がペアとなっている。そのため1つのKeyに対して値は1つである。しかし、Aliceの場合は「Key」と「Queue」がペアとなっているため、Keyに対して複数回putできる。従って取得できるValueも複数存在する。 | 50 Aliceのデータベースは通常のKVSとは異なっている点がある。通常のKVSはプログラミング言語の連想配列やMapと同様に 「Key(キー)」と「Value(値)」がペアとなっている。そのため1つのKeyに対して値は1つである。しかし、Aliceの場合は「Key」と「Queue」がペアとなっているため、Keyに対して複数回putできる。従って取得できるValueも複数存在する。 |
50 | 51 |
51 Data SegmentはData Segment Manager(以下DSM)によって管理されている。ノード毎にLocal DSMとRemote DSMが存在する。Local DSMは各ノード固有のKVSとなっている。従ってRemote DSMを指定するKeyはノード内部でuniqueなものである。Remote DSMは他のノードのLocal DSMのproxyと考えられる。つまりRemote DSMは複数存在し、それぞれに対応するノードは異なる。 | 52 Data SegmentはData Segment Manager(以下DSM)によって管理されている。ノード毎にLocal DSMとRemote DSMが存在する。Local DSMは各ノード固有のKVSとなっている。従ってRemote DSMを指定するKeyはノード内部でuniqueなものである。Remote DSMは他のノードのLocal DSMのproxyと考えられる。つまりRemote DSMは複数存在し、それぞれに対応するノードは異なる。 |
73 ユーザーが一般的なクラスをIDL(Interface Definition Language)のように用いてデータを表現することができる。 | 74 ユーザーが一般的なクラスをIDL(Interface Definition Language)のように用いてデータを表現することができる。 |
74 この場合、クラス宣言時に@Messageというアノテーションをつける必要がある。もちろん、MessagePackで扱うことのできるデータのみをフィールドに入れなければならない。 | 75 この場合、クラス宣言時に@Messageというアノテーションをつける必要がある。もちろん、MessagePackで扱うことのできるデータのみをフィールドに入れなければならない。 |
75 | 76 |
76 Remoteに対してputできるデータは、@MessageをもつクラスオブジェクトかMessage Packで扱える型に限られる。 | 77 Remoteに対してputできるデータは、@MessageをもつクラスオブジェクトかMessage Packで扱える型に限られる。 |
77 | 78 |
78 \subsection{Data Segment API} | 79 \subsubsection{Data Segment API} |
79 \subsection{Code Segment} | 80 \section{Code Segment} |
80 Code SegmentとはAlice上で実行されるタスクの単位である。ユーザーはCode Segmentを組み合わせることでプログラミングを行う。Code Segmentをユーザーが記述する際に、内部で使用するData Segmentの作成を記述する。 | 81 Code SegmentとはAlice上で実行されるタスクの単位である。ユーザーはCode Segmentを組み合わせることでプログラミングを行う。Code Segmentをユーザーが記述する際に、内部で使用するData Segmentの作成を記述する。 |
81 | 82 |
82 Input Data Segment と Output Data SegmentはCode Segmentに用意されているAPIを用いて作成する。 | 83 Input Data Segment と Output Data SegmentはCode Segmentに用意されているAPIを用いて作成する。 |
83 Input Data Segmentは、LocalかRemoteか、またkeyを指定する必要がある。Code Segmentは、記述したInput Data Segmentが全て揃うとThread poolに送られ、実行される。 | 84 Input Data Segmentは、LocalかRemoteか、またkeyを指定する必要がある。Code Segmentは、記述したInput Data Segmentが全て揃うとThread poolに送られ、実行される。 |
84 | 85 |
85 Output Data SegmentもLocalかRemoteか、またkeyを指定する必要がある。 | 86 Output Data SegmentもLocalかRemoteか、またkeyを指定する必要がある。 |
86 Inputの場合はsetKeyを呼ぶ際、Outputの場合はput(またはupdate)の際にノードとkeyの指定を行っている。 | 87 Inputの場合はsetKeyを呼ぶ際、Outputの場合はput(またはupdate)の際にノードとkeyの指定を行っている。 |
87 しかし、どの時点でノードとkeyの指定を行えばよいか、どのようなAPIを用意するべきかは、議論の余地がある。 | 88 しかし、どの時点でノードとkeyの指定を行えばよいか、どのようなAPIを用意するべきかは、議論の余地がある。 |
88 | 89 |
89 | 90 |
90 \subsubsection{Code Segmentの実行方法} | 91 \subsection{Code Segmentの実行方法} |
91 Alice には、Start Code Segment (ソースコード \ref{src:StartCodeSegment})というC の main に相当するような最初に実行される Code Segment がある。 | 92 Alice には、Start Code Segment (ソースコード \ref{src:StartCodeSegment})というC の main に相当するような最初に実行される Code Segment がある。 |
92 \begin{table}[html] | 93 \begin{table}[html] |
93 \lstinputlisting[label=src:StartCodeSegment, caption=StartCodeSegmentの例]{source/StartCodeSegment.java} | 94 \lstinputlisting[label=src:StartCodeSegment, caption=StartCodeSegmentの例]{source/StartCodeSegment.java} |
94 \end{table} | 95 \end{table} |
95 | 96 |
96 Start Code SegmentはどのData Segmentにも依存しない。つまりInput Data Segmentを持たない。 | 97 Start Code SegmentはどのData Segmentにも依存しない。つまりInput Data Segmentを持たない。 |
97 このCode Segmentをmainメソッド内でnewし、executeメソッドを呼ぶことで実行を開始させることができる。 | 98 このCode Segmentをmainメソッド内でnewし、executeメソッドを呼ぶことで実行を開始させることができる。 |
98 | 99 |
99 | 100 |
100 \subsubsection{Code Segmentの記述方法} | 101 \subsection{Code Segmentの記述方法} |
101 Code Segmentをユーザーが記述する際にはCode Segmentを継承して記述する(ソースコード \ref{src:CodeSegment})。 | 102 Code Segmentをユーザーが記述する際にはCode Segmentを継承して記述する(ソースコード \ref{src:CodeSegment})。 |
102 Code SegmentはInput/Output Data Segment Managerを利用することができる。 | 103 Code SegmentはInput/Output Data Segment Managerを利用することができる。 |
103 | 104 |
104 Input DSM はCode Segmentの{\tt ids}というフィールドを用いてアクセスする。 | 105 Input DSM はCode Segmentの{\tt ids}というフィールドを用いてアクセスする。 |
105 | 106 |