Mercurial > hg > Papers > 2012 > sugi-prosym
annotate Paper/sugi-prosym.tex @ 9:25a3002cb1e6
add image and source files
author | e095732 <e095732@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 20 Nov 2012 18:32:20 +0900 |
parents | 5a5db338e71c |
children | 5818128d5630 |
rev | line source |
---|---|
6 | 1 \documentclass[private]{ipsjpapers} |
2 \usepackage{listings} | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
3 \usepackage{graphicx} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
4 |
6 | 5 % 巻数,号数などの設定 |
6 %\setcounter{巻数}{41} | |
7 %\setcounter{号数}{6} | |
8 %\setcounter{volpageoffset}{1234} | |
9 %\受付{12}{2}{4} | |
10 %\採録{12}{5}{11} | |
11 | |
12 % ユーザが定義したマクロなど. | |
13 \makeatletter | |
14 \let\@ARRAY\@array \def\@array{\def\<{\inhibitglue}\@ARRAY} | |
15 \def\<{\(\langle\)} | |
16 \def\>{\(\rangle\)} | |
17 %\def\|{\verb|} | |
18 \def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline} | |
19 \def\endUnderline{\vphantom{y}\egroup\smash{\underline{\box0}}\\} | |
20 \def\LATEX{\iLATEX\Large} | |
21 \def\LATEx{\iLATEX\normalsize} | |
22 \def\LATex{\iLATEX\small} | |
23 \def\iLATEX#1{L\kern-.36em\raise.3ex\hbox{#1\bf A}\kern-.15em | |
24 T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX} | |
25 \def\LATEXe{\ifx\LaTeXe\undefined \LaTeX 2e\else\LaTeXe\fi} | |
26 \def\LATExe{\ifx\LaTeXe\undefined \iLATEX\scriptsize 2e\else\LaTeXe\fi} | |
27 \def\Quote{\list{}{}\item[]} | |
28 \let\endQuote\endlist | |
29 \def\TT{\if@LaTeX@e\tt\fi} | |
30 \def\CS#1{\if@LaTeX@e\tt\expandafter\string\csname#1\endcsname\else | |
31 $\backslash$#1\fi} | |
32 | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
33 %style |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
34 \lstset{ |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
35 language={java}, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
36 basicstyle={\small}, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
37 identifierstyle={\small}, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
38 commentstyle={\small\itshape}, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
39 keywordstyle={\small\bfseries}, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
40 ndkeywordstyle={\small}, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
41 stringstyle={\small\ttfamily}, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
42 frame={tb}, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
43 breaklines=true, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
44 columns=[l]{fullflexible}, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
45 numbers=left, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
46 xrightmargin=0zw, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
47 xleftmargin=3zw, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
48 numberstyle={\scriptsize}, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
49 stepnumber=1, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
50 numbersep=1zw, |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
51 lineskip=-0.5ex |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
52 } |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
53 |
6 | 54 %\checklines % 行送りを確認する時に使用 |
55 \begin{document}%{ | |
56 % 和文表題 | |
57 \title[Code Segment と Data Segment によるプログラミング手法]% | |
58 {Code Segment と Data Segment によるプログラミング手法 } | |
59 % 英文表題 | |
60 \etitle{How to Programming with Code Segment and Data Segment} | |
61 % 所属ラベルの定義 | |
62 \affilabel{URYUKYU}{琉球大学\\University of the Ryukyu} | |
63 % 和文著者名 | |
64 \author{河野 真治\affiref{URYUKYU}\member{19841765}\and | |
65 杉本 優\affiref{URYUKYU}\nomember} | |
66 | |
67 | |
68 % 英文著者名 | |
69 \eauthor{Shinji Kono\affiref{URYUKYU}\and | |
70 Yu Sugimoto\affiref{URYUKYU}} | |
71 | |
72 | |
73 % 連絡先(投稿時に必要.製版用では無視される.) | |
74 \contact{杉本 優\\ | |
75 〒903-0213 沖縄県中頭郡西原町字千原1番地\\ | |
76 琉球大学 情報工学科\\ | |
77 TEL: (098)895-8723\qquad FAX: (098)895-8727\\ | |
78 email: sugi@cr.ie.u-ryukyu.ac.jp} | |
79 | |
80 % 和文概要 | |
81 \begin{abstract} | |
82 本研究室では分散プログラミングにおいて、データをData Segment、タスクをCode Segmentという単位に分割して記述する方法を提唱している。 | |
83 しかし、前述した方法をプログラマーが一から記述することは大変である。そこで、本研究室で分散ネットフレームワーク Alice を作成した。本論文では実際にAliceを用いてCode Segment と Data Segment によるプログラミング手法の例を示す。 | |
84 \end{abstract} | |
85 % 英文概要 | |
86 \begin{eabstract} | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
87 We suggest that programmers develop a distributed program with splitting data as Data Segment and processing as Code Segment. |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
88 But it is difficult for programmers to develop on that way from scratch. So We developed distributed network framework 'Alice'. |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
89 We show example how to programming with Code Segment and Data Segment on this paper. |
6 | 90 \end{eabstract} |
91 | |
92 % 表題などの出力 | |
93 \maketitle | |
94 | |
95 % 本文はここから始まる | |
96 \section{歴史的経緯} | |
97 本研究室では、並列タスク管理フレームワークCeriumの管理を行なっているが、その設計と実装を行うにあたり、並列プログラミングと分散プログラミング | |
98 は本質的には同じことを行なっていることが分かった。特にヘテロジーニアスマルチコアであり、ローカルストアをそれぞれのコアが持っているというCell の特異な環境は、分散プログラミング環境と告示している。それらを踏まえて、Ceriumのタスク管理手法を分散に応用できないかと考えた。 | |
99 | |
100 | |
101 Ceriumに置いても、タスクとそれの入出力データの取り扱いは難しい課題である。データを操作するAPIを考えて、タスクを自然に記述し、効率良く実行する方法を考えてきた。そこで考えられた手法が、データをDataSegment、タスクをCodeSegmentという単位に分割して記述する方法である。 | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
102 |
6 | 103 |
104 \section{分散ネットフレームワークAlice}\label{sec:ITEM} | |
105 \subsection{Aliceとは} | |
106 Aliceは本研究室の卒業生である赤嶺一樹氏が、本研究室で開発を行なっている並列タスク管理フレームワーク Cerium と先行研究である Federated Linda の開発を通して得られた知見を生かされている。 | |
107 Federated Linda の設計はシングルスレッドで行われている。しかし、近年ではマルチコアのマシンが主流となっている。将来的にはメニーコアのマシンが主流になってくると考えられるそのような背景を踏まえてAliceはマルチスレッド向けに設計されている。 | |
108 | |
109 AliceはData SegmentとCode Segmentという単位でデータと処理を細かく分割し、それぞれの依存関係を記述して分散プログラムを作成する。また、他のマシンとの接続トポロジーの構成の機能も有しているのでユーザーはトポロジー構成後の処理を記述するだけでよい。 | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
110 また、AliceはJavaで実装されている。 |
6 | 111 \subsection{Data Segment} |
112 AliceではData Semgnetをデータベースとして利用している。KeyValueStoreで実装されており、キーごとにリストを持っている。Data Segment APIを用いることで、リストにデータを追加、削除を適宜行うことができる。 | |
113 | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
114 |
6 | 115 \subsubsection{Data Segment Manager} |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
116 大量のData Segmentを管理するのがData Segment Managerである。 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
117 Data Segment Managerは文字列のキーでData Segmentを整理する。また、各キーごとにキュー構造を持っている。それらをData Segment APIを用いて操作する。 |
6 | 118 データの読み出し("peek" または "take")時に、希望のデータがなかった場合、ブロッキングを行う機能を持つ。 |
119 しかし、ブロッキングといってもそこで同期するわけではない。 | |
120 非同期でデータを通信する。 | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
121 そのため、データの読み出し時には他の API とは違い、レスポンスが発生する。 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
122 |
6 | 123 \subsubsection{Data Segment API} |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
124 以下が用意されているData Segment APIである。これらを用いてデータの送受信を行う。 |
6 | 125 \begin{itemize} |
126 \item {\ttfamily void put(String key, Value val)} | |
127 \item {\ttfamily void update(String key, Value val)} | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
128 \item {\ttfamily void peek(Receiver receiver, String key,\\ int id)} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
129 \item {\ttfamily void take(Receiver receiver, String key,\\ int id)} |
6 | 130 \end{itemize} |
131 | |
132 \subsubsection*{"put"} | |
133 "put" はデータを追加するための API である。 | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
134 "put" は受け取ったデータ val を Data Segment 内のキューに対してエンキューする。 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
135 この時、キーごとに重複しない連番の ID を受け取った順に振る。(図 \ref{fig:put}) |
6 | 136 |
137 | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
138 \begin{figure}[tb] |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
139 %\begin{center} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
140 \scalebox{0.6}{\includegraphics{images/put.eps}} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
141 %\end{center} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
142 \caption{"put"は重複しないIDを振りながらデータを追加する} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
143 \label{fig:put} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
144 \end{figure} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
145 |
6 | 146 \subsubsection*{"update"} |
147 "update" はデータを置き換えるための API である。 | |
148 | |
149 "update" はキューの先頭にあるデータをひとつだけ削除する。 | |
150 その後は "put" と同じく、 受け取ったデータ val を Data Segment 内のキューに対してエンキューする。 | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
151 この時、キーごとに重複しない連番の ID を受け取った順に振る。(図 \ref{fig:update}) |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
152 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
153 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
154 \begin{figure}[tb] |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
155 \begin{center} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
156 \scalebox{0.6}{\includegraphics{images/update.eps}} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
157 \end{center} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
158 \caption{"update"は先頭データを取り除き、重複しないIDを振りながらデータを追加する} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
159 \label{fig:update} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
160 \end{figure} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
161 |
6 | 162 \subsubsection*{"peek"} |
163 "peek" はデータを読み込むための API である。 | |
164 | |
165 "peek" は前回読み込んだデータの id を引数で指定する。省略した場合は、 0 が id として渡される。 | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
166 id よりも値の大きい id のデータがキューに含まれていれば、そのデータを receiver に返す。(図 \ref{fig:peek}) |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
167 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
168 \begin{figure}[tb] |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
169 \begin{center} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
170 \scalebox{0.6}{\includegraphics{images/peek.eps}} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
171 \end{center} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
172 \caption{"peek"はデータをreceiverに読み込む} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
173 \label{fig:peek} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
174 \end{figure} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
175 |
6 | 176 もし id 以下のデータしか無いならば、データの更新が前回の "peek" 発行時から更新が無いものと考え、リストに格納されて保留される。 |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
177 (図 \ref{fig:no_peek}) |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
178 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
179 \begin{figure}[tb] |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
180 \begin{center} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
181 \scalebox{0.6}{\includegraphics{images/peek1.eps}} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
182 \end{center} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
183 \caption{希望のデータが無いときは保留する} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
184 \label{fig:no_peek} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
185 \end{figure} |
6 | 186 |
187 "take" や "update" によりデータの更新があれば、 "peek" が直ちに実行される。 | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
188 |
6 | 189 \subsubsection*{"take"} |
190 "take" もデータを読み込むための API である。 | |
191 基本的な id に関する部分は "peek" と同じである。 | |
192 | |
193 "peek" との決定的な違いは、読み込まれたデータは Data Segment 内のキューから取り除かれるということである。 | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
194 (図 \ref{fig:take}) |
6 | 195 |
196 | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
197 \begin{figure}[tp] |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
198 \begin{center} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
199 \scalebox{0.6}{\includegraphics{images/take.eps}} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
200 \end{center} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
201 \caption{"peek"はデータをreceiverに読み込む。希望のデータが無いときは保留する。} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
202 \label{fig:take} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
203 \end{figure} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
204 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
205 \subsubsection{Data Segmentの表現} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
206 Data Segmentのデータの表現にはMessagePackを利用している。 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
207 MessagePackに関してJavaにおけるデータ表現は以下の3段階あり、これらのデータ表現は制限を伴うが互いに変換かのである。 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
208 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
209 \begin{itemize} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
210 \item {\ttfamily 一般的なJavaのクラスオブジェクト} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
211 \item {\ttfamily MessagePack for JavaのValueオブジェクト)} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
212 \item {\ttfamily byte[]で表現されたバイナリ} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
213 \end{itemize} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
214 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
215 DataSegment APIでは、このMessagePack for JavaのValueオブジェクトを用いてデータが表現されている。 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
216 MessagePackはJavaのように静的に型付けされたオブジェクトではなく、自己記述なデータ形式である。MessagePack for JavaのValueオブジェクトはMessagePackのバイナリにシリアライズできる型のみで構成されたJavaのオブジェクトである。そのため、Valueも自己記述式のデータ形式になっている。 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
217 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
218 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
219 Valueオブジェクトは通信に関わるときには、シリアライズ・デシリアライズを高速に行うことができる。 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
220 また、ユーザーはメソッドを用いてオブジェクト内部のデータを閲覧、編集することができる。 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
221 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
222 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
223 ユーザーが一般的なクラスをIDL(Interface Definition Language)のように用いてデータを表現することができる。 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
224 この場合、クラス宣言時に@Messageというアノテーションをつける必要がある。(ソースコード \ref{fig:MessagePackTest})もちろん、MessagePackで扱うことのできるデータのみをフィールドに入れなければならない。 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
225 \begin{table}[htbp] |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
226 \lstinputlisting[label=MessagePackTest, caption=一般的なクラスをIDLのように使用]{source/MessagePackTest.java} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
227 \end{table} |
6 | 228 |
229 \subsection{Code Segment} | |
230 Code Segmentはタスクのことである。Code Segmentをユーザーが記述するときに、Code Segment 内で使用するData Segment を記述し、依存関係を作る。依存関係により、実行される順番が一意に決まる。実際に使用するData Segment はCode Segmentの入出力に相当する。それぞれ、Input Data Segment、Output Data Segmentとする。 | |
231 \subsubsection{Code Segmentの実行方法} | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
232 Code Semgnetを実行するためにはStart Code Segment (ソースコード \ref{fig:StartCodeSegment})というCode Segmentを実行させる必要がある。 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
233 Start Code SegmentはどのData Segmentにも依存しない。つまりInput Data Segmentを持たない。このCode Segmentをmainメソッド内でnewし、executeメソッドを呼ぶことで実行を開始させることができる。(ソースコード \ref{fig:TestLocalAlice}) |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
234 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
235 |
6 | 236 \begin{table}[tb] |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
237 \lstinputlisting[label=TestLocalAlice, caption=Start Code Segmentを実行させる方法]{source/TestLocalAlice.java} |
6 | 238 \end{table} |
239 | |
240 \subsubsection{Code Segmentの記述方法} | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
241 Code Segmentをユーザーが記述する際にはCodeSegmentを継承して記述する。(ソースコード \ref{fig:CodeSegment})そのCodeSegmentはInputDataSegmentManagerとOutputDataSegmentManagerを利用することができる。 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
242 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
243 \begin{table}[tb] |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
244 \lstinputlisting[label=StartCodeSegment, caption=StartCodeSegmentの例]{source/StartCodeSegment.java} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
245 \end{table} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
246 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
247 \begin{table}[tb] |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
248 \lstinputlisting[label=CodeSegment, caption=CodeSegmentの例]{source/TestCodeSegment.java} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
249 \end{table} |
6 | 250 \subsubsection*{InputDataSegmentManager} |
251 InputDataSegmentManagerはCode Segmentのidsというフィールドを用いてアクセスする。 | |
252 \begin{itemize} | |
253 \item {\ttfamily Receiver create(CommandType type)} | |
254 \end{itemize} | |
255 createでコマンドが実行された際に取得されるData Segmentが格納される受け皿を作る。引数にはCommandTypeが取られ、指定できるCommandTypeはPEEKまたはTAKEである。 | |
256 \begin{itemize} | |
257 \item {\ttfamily void setKey(String managerKey, String key, int id)} | |
258 \end{itemize} | |
259 setKeyメソッドにより、どこのData Segmentのあるkeyに対してpeekまたはtakeコマンドを実行させるかを指定することができる。 | |
260 コマンドの結果がレスポンスとして届き次第Code Segmentは実行される。 | |
261 \subsubsection*{OutputDataSegmentManager} | |
262 OutputDataSegmentManagerはCode Segmentのodsというフィールドを用いてアクセスする。 | |
263 OutPutDataSegmentManagerは"put"または"update"を実行することができる。 | |
264 \begin{itemize} | |
265 \item {\ttfamily void put(String managerKey, String key, \\ Value val)} | |
266 \item {\ttfamily void update(String managerKey, String key, Value val)} | |
267 \end{itemize} | |
268 | |
269 \subsection{Topology Manager} | |
270 TopologyManagerはAlice同士の接続トポロジーを管理する。TopologyManager関連の通信処理はCode Segmentで実装してある。 | |
271 TopologyManagerはトポロジーファイルを読み込み、参加を表明したクライアント(以下、Topology Node)に接続するべきクライアントのIPアドレスやポート番号、接続名を送り、トポロジーファイルに記述された通りにトポロジーを作成する。 | |
272 | |
273 \subsection{Topology Managerの設定ファイル} | |
274 Topology Managerはトポロジーファイルを読み込むが、トポロジーファイル自体はDOT Languageという言語で記述される。 | |
275 DOT Languageとはプレーンテキストを用いて、データ構造としてのグラフを表現するための、データ記述言語の一種である。このDOT Languageのグラフを利用して、クライアント間の接続を表現する。DOT Languageファイルはdotコマンドを用いて、グラフの画像ファイルを出力することができるので、記述したトポロジーが正しいことを可視化して確認することができる。 | |
276 | |
277 クライアント間の接続にはlabelを用いて名前が割り振られており、この接続名を用いてユーザーはData Segment Managerにアクセスすることができる。 | |
278 前述したReceiver にsetKeyを行う際、odsでputまたはupdateする際の引数のmanagerKeyがこれにあたる。 | |
279 | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
280 \begin{table}[tb] |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
281 \lstinputlisting[label=ring, caption=3台でリングを組んだ時の例]{source/ring.dot} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
282 \end{table} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
283 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
284 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
285 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
286 \begin{figure}[tb] |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
287 \begin{itemize} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
288 \item {\ttfamily dot -T png ring.dot -o ring.png} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
289 \end{itemize} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
290 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
291 \begin{center} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
292 \scalebox{0.6}{\includegraphics{images/ring.eps}} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
293 \end{center} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
294 \caption{dotコマンドで作成された3台で構成されたリングのグラフ} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
295 \label{fig:take} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
296 \end{figure} |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
297 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
298 |
6 | 299 \subsection{Topology Managerの使用方法} |
300 Topology Nodeを起動する際にコマンドライン引数としてTopology ManagerのIPアドレスとポート番号を指定をする。 | |
301 そしてmain関数内でTopologyNodeをnewを行えば良い。 | |
302 TopologyNodeの第一引数は Alice デーモンの設定オブジェクト、第二引数はStart Code Segmentである。 | |
303 ここで指定した、Start Code Segmentがトポロジーが完成した後実行される。 | |
304 | |
9
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
305 |
25a3002cb1e6
add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
306 \section{ゲームの例題} |
6 | 307 \subsection{水族館} |
308 今回作成した例題は水族館である。複数のクライアントのディスプレイを複数の魚が移動していくものである。魚は画面の端まで移動すると自分の画面上からは消え、別のクライアントの画面の端から魚が出てくる。また、魚のうち一匹はクライアントが直接操作することができる。トポロジーはTopologyManagerによりツリー状に構成してある。 | |
309 \subsection{データの伝搬} | |
310 | |
311 \begin{enumerate} | |
312 \item ユーザーが魚を操作するまたはCode Segmentにより魚の座標が更新される。 | |
313 \item 画面に表示させるためのSetLocation (Code Segment)が実行され実際に魚のオブジェクトにセットされ画面に反映される。 | |
314 \item Update(Code Segment)にFishPosition(魚の座標データ)が渡される。 | |
315 \item Updateにlist(送信者リスト)が渡される。 | |
316 \item Updateが実行され、listを元にデータが送信される。ただし、この時にFishPositionには送信元情報が付加されているので、送信元には送信されない。 | |
317 \item 各clientで2 - 4が実行される。 | |
318 \end{enumerate} | |
319 | |
320 \section{評価} | |
321 | |
322 | |
323 \section{まとめと今後の課題} | |
324 | |
325 | |
326 \end{document} |