annotate Paper/chapter/1-Christie.tex @ 10:39cc44ae7917

add image
author riono <e165729@ie.u-ryukyu.ac.jp>
date Fri, 07 Jan 2022 14:44:02 +0900
parents 1e12b3e710d6
children a82543f1da47
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
10
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
28 \begin{figure}[htb]
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
29 \begin{center}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
30 \includegraphics[width=150mm]{images/GearsRelationships.pdf}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
31 \end{center}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
32 \caption{各Gearの関係性}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
33 \label{fig:GearRelationships}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
34 \end{figure}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
35
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
36 図\ref{fig:GearRelationships}はそれぞれのGearの関係性を図示したものである。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 CodeGearはクラスやスレッドに相当する。
10
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
38 DataGearは変数データに相当し、CodeGear内でJavaのannotationの機能を用いてkeyに紐づいた変数データを取得できる。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 CodeGear内に記述した全てのDataGearにデータが格納された際に、初めてそのCodeGearが実行されるという仕組みになっている。
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 CGMはノードに相当し、CodeGear、DataGear、DGMを管理している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 DGMはDataGearを管理しており、putという操作によって変数データ、つまりDataGearをDGMに格納できる。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 DGMのput操作を行う際にはLocalとRemoteのどちらかを選び、変数のkeyとデータを引数として渡す。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 LocalであればLocalのCGMが管理しているDGMに対してDataGearを格納していく。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 Remoteであれば、接続したRemote先のCGMが管理しているDGMにDataGearを格納する。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 \begin{figure}[htb]
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 \begin{center}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 \includegraphics[width=150mm]{images/ChristieClass.pdf}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 \end{center}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 \caption{同一プロセスでのChristieの複数インスタンス立ち上げ}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 \label{fig:MultiInstance}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 \end{figure}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 図\ref{fig:MultiInstance}は、Christieを同一プロセスで複数のインスタンスを生成した際のDGMやCGMの接続構造を示している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 全てのCGMはThreadPoolと他のCGMをListとして共有している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 ThreadPoolとはCPUに合わせた並列度でqueueに入ったThreadを順次実行していく実行機構である。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 ThreadPoolが増えると、CPUコア数に合わない量のThreadを管理することになり並列度が下がるため、1つのThreadPoolで全てのCGMを管理している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 またCGMのListを共有することでメタレベルで全てのCodeGear/DataGearにアクセス可能となっている。
9
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
60 CGを記述する際はCodeGear.classを継承する。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
61 CodeGearはRunnableインターフェースを持っており、runメソッド内に処理を記述することでマルチスレッドで処理が行われる。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
62 CGに記述したkeyと一致するDGが全て揃った時、runに記述された処理が実行される。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
63 runメソッドの引数にCGMを指定しており、そのCGMを経由してChristieのAPIにアクセスする。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
64 GearsOSではCG間でContextを受け渡すことによってCGはDGにアクセスを行なっているため、Christieでもそのアクセス方法が採用されている。
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 通常のRunnableクラスでは引数を受け取ることができないが、
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
67 CodeGearExecutorというRunnableのMeta Computationを挟んだことでCGMを受け渡しながらの記述を可能にしている。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
68
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 DGMに対してput操作を行うことでDGM内のqueueにDGを保管できる。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
71 DGを取り出す際には、CG内で宣言した変数データにannotationを付ける。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
72 DGのannotationには以下の4種類がある。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
73
10
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
74 \begin{description}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
75 \item[Take] 先頭のDGを読み込み、そのDGを削除する。
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
76 \item[Peek] 先頭のDGを読み込むが、DGは削除されない。そのため、特に操作をしない場合には同じDGを参照し続ける。
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
77 \item[TakeFrom(Remote DGM name)] Takeと処理動作は同じであるが、Remote DGM nameを指定することで、その接続先(Remote)のDGMからTake操作を行うことができる。
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
78 \item[PeekFrom(Remote DGM name)] Peekと処理動作は同じであるが、 Remote DGM nameを指定することで、その接続先(Remote)のDGMからPeek操作を行うことができる。
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
79 \end{description}
9
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
80
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
81 \section{}
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82
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