changeset 2:236628ffc497

chapter2 and chapter3
author sugi
date Mon, 04 Feb 2013 19:55:13 +0900
parents 7f8b2a2aae4c
children c874088754a4
files paper/chapter2.tex paper/chapter3.tex
diffstat 2 files changed, 76 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/paper/chapter2.tex	Sun Feb 03 18:54:15 2013 +0900
+++ b/paper/chapter2.tex	Mon Feb 04 19:55:13 2013 +0900
@@ -40,8 +40,51 @@
 Lindaのrd()に相当する。
 \subsection{take}
 takeもデータを読み込むためのAPIである。読み込まれたデータをKVSから取り除かれる。Lindaのin() に相当する。
+
 \section{Data Segmentの実装}
+Data Segmentのデータの表現にはMessagePackを利用している。
+MessagePackに関してJavaにおけるデータ表現は以下の3段階あり、これらのデータ表現は制限を伴うが互いに変換可能である。
+
+\begin{itemize}
+\item {\ttfamily 一般的なJavaのクラスオブジェクト}
+\item {\ttfamily MessagePack for JavaのValueオブジェクト}
+\item {\ttfamily byte[]で表現されたバイナリ}
+\end{itemize}
+
+Data Segment APIでは、このMessagePack for JavaのValueオブジェクトを用いてデータが表現されている。
+MessagePackはJavaのように静的に型付けされたオブジェクトではなく、自己記述なデータ形式である。MessagePack for JavaのValueオブジェクトはMessagePackのバイナリに
+シリアライズできる型のみで構成されたJavaのオブジェクトである。そのため、Valueも自己記述式のデータ形式になっている。
+
+
+Valueオブジェクトは通信に関わるときには、シリアライズ・デシリアライズを高速に行うことができる。
+また、ユーザーはメソッドを用いてオブジェクト内部のデータを閲覧、編集することができる。
+
+
+ユーザーが一般的なクラスをIDL(Interface Definition Language)のように用いてデータを表現することができる。
+この場合、クラス宣言時に@Messageというアノテーションをつける必要がある。もちろん、MessagePackで扱うことのできるデータのみをフィールドに入れなければならない。
+
+
+
 \section{Code Segment}
 \section{Code Segmentの実行方法}
-\section{Code Segmentの起動方法}
+Aliceには、Start Code SegmentというCのmainに相当するような最初に実行されるCode Segmentがある。Start Code SegmentはどのData Segmentにも依存しない。つまりInput Data Segmentを持たない。このCode Segmentをmainメソッド内でnewし、executeメソッドを呼ぶことで実行を開始させることができる。
+
+\section{Code Segmentの記述方法}
 \section{Topology Manager}
+Aliceは複数のノードで構成され、相互に接続される。通信するノードは、URLにより直接指定するのではなく、TopologyManagerで管理する。
+
+TopologyManagerはトポロジーファイルを読み込み、参加を表明したクライアント(以下、Topology Node)に接続するべきTopology NodeのIPアドレス、ポート番号、接続名を送りトポロジーファイルに記述されたとおりにトポロジーを作成する。
+
+Code Segment内部でRemote DSMにアクセスする場合はToplogyManagerによって指定されたノード内部だけで有効なlabel(文字列)を使う。これにより特定のURLがCode Segment内部に記述されることを防いでいる。
+\subsection{Topology Manager の設定ファイルの記述方法}
+Topology Managerが読み込むトポロジーファイルはDOT Languageと呼ばれる言語で記述する。
+DOT Languageはプレーンテキストを用いてデータ構造としてのグラフ構造を表現するデータ記述する言語の一種である。
+このDOT Languageを用いてクライアント間の接続を表現する。
+
+テキストのみではユーザーが望む形のトポロジーかどうかを判断しにくい。ノードの数が少なければ、可能であるがノードの数が増加するに連れて困難になるが、dotコマンドを用いることでその問題を解決することができる。
+dotコマンドでトポロジーファイルを画像として出力することができるので、記述したトポロジーが正しいことを可視化して判断することができる。
+
+クライアント間の接続にはlabelを用いて名前が割り振られている。この接続名を指定することでユーザーは他のノードのDSMにアクセスすることができる。ReceiverにsetKeyを行う際、odsでput、updateする際のmanagerKeyがlabelである。
+
+
+AliceのNodeを起動する際にコマンドライン引数としてTopology ManagerのIPアドレスとポート番号を指定する。main関数内でTopologyNodeのnewを行い、その際に引数として渡すだけでよい。
--- a/paper/chapter3.tex	Sun Feb 03 18:54:15 2013 +0900
+++ b/paper/chapter3.tex	Mon Feb 04 19:55:13 2013 +0900
@@ -4,12 +4,41 @@
 \section{水族館ゲーム}
 Aliceは分散ネットフレームワークである。従って例題を作成するにあたってネットワークを介した例題が適切であると思われる。そこで過去にFedarated Lindaでも作成された水族館ゲームをAliceで実装した。
 
-水族館ゲームとは複数のclientのディスプレイを並べて使用する。アプリケーションを実行するとウインドウが表示され、複数の魚がウインドウの中を泳ぎ始める。魚は画面の端まで移動すると自分の画面上からは消え、隣のプレイヤーの画面の端から出てくる。魚のうち1匹はプレイヤーが操作することができる。
+水族館ゲームとは複数のclientのディスプレイを並べて使用する。アプリケーションを実行するとウインドウが表示され、複数の魚がウインドウの中を泳ぎ始める。魚は画面の端まで移動すると自分の画面上からは消え、隣のプレイヤーの画面の端から出てくる。魚のうち1匹はプレイヤーが操作することができる。トポロジーはAliceのTopologyManagerによってツリー状に構成されている。
 
 \subsection{処理の流れ}
+\begin{enumerate}
+\item ユーザーが魚を操作する。または、PositionController(Code Segment)により魚の座標のData SegmentであるfishPositionが更新される。
+\item fishPositionが魚のオブジェクトに座標をセットするためのCode Segment であるSetLocationにreplyされる。SetLocationが実行され画面に反映される。
+\item 他のノードに更新されたfishPositionを送信するためのCode SegmenであるUpdateにfishPositionがreplyされる。
+\item Updateに自分と接続されているノード一覧のData Segmentであるlistがreplyされる。
+
+\item Updateはlistを参照して、fishPositionを送信する。また、fishPositionには送信元の情報が付加されているので、送信元に対してfishPositionを送り返すことはない。
+
+\item 各clientで2 - 4 が実行され、fishPositionが全体で共有される。 
+
+\end{enumerate}
 
 
-\section{Sort}
-Aliceはマルチコアが現在に主流になっているという背景を踏まえて設計されている。従って並列処理に対するテストを行う必要がある。そこで並列処理に対する例題としてバイトニックソートを実装した。
+\section{バイトニックソート}
+Aliceはマルチコアが現在に主流になっているという背景を踏まえて設計されている。従って並列処理に対するテストを行った。並列処理に対する例題としてバイトニックソートを実装した。
 
+\subsection{処理の流れ}
+指定された数の乱数を生成し、Sortを行う例題である。
+\begin{enumerate}
+\item SetTask (Code Segment)が乱数列を分割してarray1にputする。
+\item replyされたDataSegmentをSort (Code Segment)で昇順に整列させる。
+\item Sortで整列された数列を更に分割する。上半分をarray1-Fにputする。
+\item 下半分をarray1-Bにputする。
+\item SetTaskが分割した各数列(array2)に対して2 - 4を行う。
+\item replyされた2つのData Segment(array1-B、array2-F)を合体させ、整列させる。
+\item 整列の結果を結果の上半分をarray1-B、下半分をarray2-Fにputする。
+\item replyされた2つのData Segment(array1-F、array1-B)を合体させ、整列させる。
+\item 整列の結果を結果の上半分をarray1-F、下半分をarray1-Bにputする。
+\item array2に対しても操作 8 - 9 を行う。
+\item 6 - 10 を繰り返し行うことで全体がSortされる。
+\end{enumerate}
 
+\section{例題を通しての知見}
+\subsection{Aliceのバグ}
+\subsection{注意すべき記述}