changeset 10:865f2c8f2fbe

add about design of Alice
author kazz <kazz@cr.ie.u-ryukyu.ac.jp>
date Mon, 06 Feb 2012 06:50:47 +0900
parents 7a2a26770f62
children 9c0b3bb52d67
files paper/chapter2.tex
diffstat 1 files changed, 59 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/paper/chapter2.tex	Mon Feb 06 04:56:25 2012 +0900
+++ b/paper/chapter2.tex	Mon Feb 06 06:50:47 2012 +0900
@@ -30,20 +30,76 @@
 
 \begin{figure}[htbp]
   \begin{center}
-    \includegraphics[width=80mm]{./images/dsandcs.pdf}
+    \includegraphics[width=100mm]{./images/dsandcs.pdf}
   \end{center}
   \caption{Code Segment と入出力 Data Segment}
   \label{fig:dsAndCs}
 \end{figure}
 
-Code Segment と依存するデータ群を記述することにより、明示的にそれらが実行される順番が決定される。
+Code Segment と依存するデータ群を記述することにより、明示的にそれらが実行される順番が決定される。(図\ref{fig:dsAndCs2})
 
-
+\begin{figure}[htbp]
+  \begin{center}
+    \includegraphics[width=120mm]{./images/dsandcs2.pdf}
+  \end{center}
+  \caption{Data Segment と Code Segment の依存関係で決まる実行順序}
+  \label{fig:dsAndCs2}
+\end{figure}
 
 \subsection{Data Segment (Database)}
+Alice では、Data Segment をデータベースとして利用する。
 
+\subsubsection{Data Segment API}
+まず、分散プログラム向けに Data Segment を操作する Data Segment API を定義した。(表\ref{tb:dataSegmentApi}) この Data Segment API を用いてデータの送受信を行う。
+\begin{table}[htbp]
+\caption{Data Segment API}
+\label{tb:dataSegmentApi}
+\begin{center}
+\begin{tabular} {|l|l|}
+  \hline
+  {\bf API}&{\bf 概要}\\
+  \hline
+  take(key,index)&key に対応するデータセグメントリストからデータを取り出す。\\&データセグメントリストにデータは残らない。\\
+  \hline
+  peek(key,index)&key に対応するデータセグメントリストからデータを読みだす。\\&データセグメントリストにデータセグメントは残る。\\
+  \hline
+  put(key,data)&key に対応するデータセグメントリストに data を追加する。\\
+  \hline
+  update(key,data)&key に対応するデータセグメントリストから一つデータを取り除く。\\& data を追加する。\\
+  \hline
+\end{tabular}
+\end{center}
+\end{table}
 
+Data Segment はキーごとにリストを持っている。 Data Segment API を用いれば、これらのリストにデータを追加、削除を適宜行うことができる。
+
+なお、 "take" と "peek" には index という引数が存在する。これは、一つの Data Segment に対し、データが出力される度にインクリメントされる値で、前回の "peek" や "take" で読み込んだ値からデータの更新があれば読み込むといったデータの入力待ちを行うことができる。なお、 index は省略できる。 index を指定しない場合は、 0 が指定されたものとして扱う。
+
+\subsubsection{MessagePack を利用したデータ表現}
+また、データの表現には MessagePack を利用する。
+
+MessagePack とは、バイナリをベースにした効率重視のシリアライズライブラリーである。 MessagePack は、シリアライズされたデータにオブジェクトの型情報も埋め込むため、自己記述的なデータ形式となっている。そのため、 IDL (Interface Definition Language) によるデータ構造の定義は必要なくなる。データの表現方法は JSON と似ており ProtocolBuffers や Thrift 等の他のシリアライズライブラリーと比較しても高速で利便性がある。
+
+MessagePack で取り扱える型は大きく次の通りである。
+
+\begin{itemize}
+\item Boolean
+\item Integer
+\item Long
+\item Float
+\item Double
+\item Raw (String)
+\item Array
+\item Map
+\end{itemize}
+
+Array や Map を用いることで、基本的なデータ型を組み合わせて複雑なデータ構造を作ることが可能である。これにより、データの末尾に付加情報を付けたい場合などにも対応できる。
+
+また、 IDL のように、自作したクラスを構造体と見立てて、シリアライズ、デシリアライズすることも可能である。
 
 \subsection{Code Segment (Protocol Engine)}
+Alice では、 Protocol Engine の代わりとして、 Code Segment と呼ばれる単位でタスクを作成する。
+
+Code Segment は Input Data Segment と Output Code Segment それぞれのデータリストを持っている。これにより、データの依存関係が自明になり、他の Code Segment と依存関係の全くない Code Segment を並列実行することが可能となる。並列度を上げるためには、 Code Segment の処理内容は細かく分割して記述することが望ましい。
 
 \subsection{Topology Manager (Link Configuration)}