annotate Paper/chapter/1-Christie.tex @ 9:1e12b3e710d6

update chapter1
author riono <e165729@ie.u-ryukyu.ac.jp>
date Fri, 07 Jan 2022 01:19:06 +0900
parents 91276da3d77e
children 39cc44ae7917
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \chapter{Christie}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 ChristieとはJavaで記述された並列分散通信フレームワークである。Aliceという前身のプロジェクトが開発されていたが、以下のような問題があった。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 データを送受信するAPIはインスタンスを生成して関数を呼び出す様に設計されているが、外部Classからも関数が実行できてしまうため、
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 受信する際どのkeyに紐づいたデータを受け取るのか、直感的にわからない。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 データを管理しているlocalDataSegmentがシングルトンで設計されており、Localで接続を行う際に複数のアプリケーションで立ち上げる必要がある。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 データを受け取る際にObject型で受け取っているため、送信元を辿らない限り何の型が送信されているか不明瞭である。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 それらの問題点を解消するためにAliceを再設計され、作成されたものがChristieである。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 ChristieではAliceの機能や概念を維持しつつ、Aliceで発生していた問題点やプログラムを煩雑さなどを解消している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 \section{Christieの基礎概念}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 Chrisiteはタスクとデータを細かい単位に分割してそれぞれの依存関係を記述し、
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 タスク実行に必要な入力が揃った順から並列実行するというプログラミング手法を用いている。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 将来的に当研究室で開発しているGearsOSのファイルシステムに組み込まれる予定があるため、GearsOSを構成する言語 Continuation based Cと
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 似た概念を持っている。Christieに存在する概念として以下の様なものがある。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 \begin{itemize}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 \item CodeGear
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 \item DataGear
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 \item CodeGearManager (以下CGM)
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 \item DataGearManager (以下DGM)
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 \end{itemize}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 CodeGearはクラスやスレッドに相当する。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 DataGearは変数データに相当し、CodeGear内でJavaのannotationの機能を用いて変数データを取得できる。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 CodeGear内に記述した全てのDataGearにデータが格納された際に、初めてそのCodeGearが実行されるという仕組みになっている。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 CGMはノードに相当し、CodeGear、DataGear、DGMを管理している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 DGMはDataGearを管理しており、putという操作によって変数データ、つまりDataGearをDGMに格納できる。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 DGMのput操作を行う際にはLocalとRemoteのどちらかを選び、変数のkeyとデータを引数として渡す。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 LocalであればLocalのCGMが管理しているDGMに対してDataGearを格納していく。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 Remoteであれば、接続したRemote先のCGMが管理しているDGMにDataGearを格納する。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 %図欲しい DG CG CGM DGMの関係性を説明した図
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 \begin{figure}[htb]
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 \begin{center}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 \includegraphics[width=150mm]{images/ChristieClass.pdf}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 \end{center}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 \caption{同一プロセスでのChristieの複数インスタンス立ち上げ}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 \label{fig:MultiInstance}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 \end{figure}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 図\ref{fig:MultiInstance}は、Christieを同一プロセスで複数のインスタンスを生成した際のDGMやCGMの接続構造を示している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 全てのCGMはThreadPoolと他のCGMをListとして共有している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 ThreadPoolとはCPUに合わせた並列度でqueueに入ったThreadを順次実行していく実行機構である。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 ThreadPoolが増えると、CPUコア数に合わない量のThreadを管理することになり並列度が下がるため、1つのThreadPoolで全てのCGMを管理している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 またCGMのListを共有することでメタレベルで全てのCodeGear/DataGearにアクセス可能となっている。
9
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
56 CGを記述する際はCodeGear.classを継承する。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
57 CodeGearはRunnableインターフェースを持っており、runメソッド内に処理を記述することでマルチスレッドで処理が行われる。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
58 CGに記述したkeyと一致するDGが全て揃った時、runに記述された処理が実行される。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
59 runメソッドの引数にCGMを指定しており、そのCGMを経由してChristieのAPIにアクセスする。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
60 GearsOSではCG間でContextを受け渡すことによってCGはDGにアクセスを行なっているため、Christieでもそのアクセス方法が採用されている。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
61
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
62 通常のRunnableクラスでは引数を受け取ることができないが、
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
63 CodeGearExecutorというRunnableのMeta Computationを挟んだことでCGMを受け渡しながらの記述を可能にしている。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
64
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
65
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
66 DGMに対してput操作を行うことでDGM内のqueueにDGを保管できる。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
67 DGを取り出す際には、CG内で宣言した変数データにannotationを付ける。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
68 DGのannotationには以下の4種類がある。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
69
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
70 \begin{flushleft}
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
71 \begin{itemize}
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
72 \setlength{\leftmargin}{0pt}
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
73 \item[Take] 先頭のDGを読み込み、そのDGを削除する。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
74 \item[Peek] 先頭のDGを読み込むが、DGは削除されない。そのため、特に操作をしない場合には同じDGを参照し続ける。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
75 \item[TakeFrom]\mbox{}\\
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
76 Takeと処理動作は同じであるが、Remote DGM nameを指定することで、その接続先(Remote)のDGMからTake操作を行うことができる。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
77 \item[PeekFrom]\mbox{}\\
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
78 Peekと処理動作は同じであるが、 Remote DGM nameを指定することで、その接続先(Remote)のDGMからPeek操作を行うことができる。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
79 \end{itemize}
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
80 \end{flushleft}
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
81
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
82 \section{}
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91