# HG changeset patch # User kazz # Date 1328478647 -32400 # Node ID 865f2c8f2fbe9ace18af7e8bf35af7b57d07a577 # Parent 7a2a26770f624ffa3a9fb021242dd8529c99650d add about design of Alice diff -r 7a2a26770f62 -r 865f2c8f2fbe paper/chapter2.tex --- 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)}