changeset 8:2b7f737a2ced

add about Christie
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Sat, 01 May 2021 03:44:55 +0900
parents 9cf99ee758a5
children 8c1e0271eb24
files Paper/images/Remote_DataGearManager.graffle Paper/images/Remote_DataGearManager.pdf Paper/paper.pdf Paper/paper.tex
diffstat 4 files changed, 57 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
Binary file Paper/images/Remote_DataGearManager.graffle has changed
Binary file Paper/images/Remote_DataGearManager.pdf has changed
Binary file Paper/paper.pdf has changed
--- a/Paper/paper.tex	Fri Apr 30 17:06:53 2021 +0900
+++ b/Paper/paper.tex	Sat May 01 03:44:55 2021 +0900
@@ -188,12 +188,67 @@
 \item \|DataGearManager|(以下DGM)
 \end{itemize}
 CodeGearはクラスやスレッドに相当する. DataGearは変数データであり, CodeGear内でjavaのアノテーションを用いて記述する.
+
  DataGearはKeyと必ず対応しており, CodeGear内の全てのKeyにDataGearが揃った際に初めてCodeGearが動作するという仕組みになっている. 
+
 CodeGearManagerはいわゆるノードに相当し, CodeGear, DataGear, DataGearManagerを管理する.  
 複数のCodeGearManager同士が配線され,  DataGearを送信し合うことで分散処理を実現している. 
+
 DataGearManagerはDGを管理しているもので変数プールに相当し, CodeGearManagerの持っているDataGearのkeyとputされたデータの全てを所持している. 
-DataGearManagerはLocalとRemoteに区分することができ, LocalはCodeGearManager自身のDataGearManagerが持つDataGearの一覧である.
-対するRemoteDataGearManagerはDataGearManagerが持つ
+DataGearManagerはLocalとRemoteに区分することができ, LocalDataGearManagerはCodeGearManager自身が所持するDataGear(key)のプールであり, Localにputすることにより自身の持つkeyにDataGearを送ることができる.
+対するRemoteDataGearManagerはCodeGearManagerが配線されている別のCodeGearManagerが持つDataGearのプールである. つまり, 任意の接続されたRemoteDataGearにDataGearをputすると対応したノードが持つkeyにDataGearが送信される. RemoteDataGearにDataGearをputする処理が分散処理の肝となっている. RemoteDataGearの仕組みを図\ref{fig:RDGM}に示す.
+
+\begin{figure}[tb]
+    \begin{center}
+        \includegraphics[width=80mm]{images/Remote_DataGearManager.pdf}
+    \end{center}
+    \caption{RemoteDataGearと接続ノードの関係図}
+    \label{fig:RDGM}
+\end{figure}
+
+
+Christieの要となるDataGearのkeyはjavaのアノテーション機能が使われている. アノテーションには以下の4つが存在する. 
+\begin{description}
+\item[Take] 先頭のDGを読み込み,そのDGを削除する.DGが複数ある場合,この動作を用いる.
+\item[Peek] 先頭のDGを読み込むが,DGが削除されない.そのため,特に操作をしない場合は同じデータを参照し続ける.
+\item[TakeFrom(Remote DGM name)] Takeと似ているが,Remote DGM nameを指定することで,その接続先(Remote)のDGMからTake操作を行える.
+\item[PeekFrom(Remote DGM name)] Peekと似ているが,Remote DGM nameを指定することで,その接続先(Remote)のDGMからPeek操作を行える.
+\end{description}
+
+コード\ref{codes: StartHelloWorld}はChristieで記述したHello Worldのコードである. 
+
+\begin{lstlisting}[frame=lrbt,label=codes: StartHelloWorld,caption={ChristieにおけるCGMとCGのsetup}]
+public class StartHelloWorld extends StartCodeGear {
+
+    public StartHelloWorld(CodeGearManager cgm) {
+        super(cgm);
+    }
+
+    public static void main(String[] args){
+        CodeGearManager cgm = createCGM(10000);
+        cgm.setup(new HelloWorldCodeGear());
+        cgm.setup(new FinishHelloWorld());
+        cgm.getLocalDGM().put("helloWorld","hello");
+        cgm.getLocalDGM().put("helloWorld","world");
+    }
+}
+\end{lstlisting}
+
+
+\begin{lstlisting}[frame=lrbt,label=codes: StartHelloCG,caption={HelloWorldCodeGear}]
+public class HelloWorldCodeGear extends CodeGear {
+
+    @Take
+    String helloWorld;
+
+    @Override
+    protected void run(CodeGearManager cgm) {
+        System.out.print(helloWorld + " ");
+        cgm.setup(new HelloWorldCodeGear());
+        cgm.getLocalDGM().put(helloWorld,helloWorld);
+    }
+}
+\end{lstlisting}
 
 %4
 \section{論文の構成}