Mercurial > hg > Papers > 2021 > ikki-sigos
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
--- 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{論文の構成}