diff Paper/paper.tex @ 9:8c1e0271eb24

add TopologyManager & Coding
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Sun, 02 May 2021 00:39:38 +0900
parents 2b7f737a2ced
children 3356c86ff304
line wrap: on
line diff
--- a/Paper/paper.tex	Sat May 01 03:44:55 2021 +0900
+++ b/Paper/paper.tex	Sun May 02 00:39:38 2021 +0900
@@ -113,7 +113,7 @@
 CbCでは関数の代わりにCodeGearという単位でプログラミングを行う. CodeGearは\texttt{\_\_code}で宣言を行い, 各CodeGearはDataGearと呼ばれる変数データを入力として受け取り, その結果を別のDataGearに書き込む. 特に入力のDataGeatをInputDataGear, 出力されるDataGearを OutputDataGearと呼ぶ. CodeGearとDataGearの関係図を図\ref{fig:cgdg}に示す. 
 CodeGearは関数呼び出しのスタックを持たないため, 一度CodeGearを遷移すると元の処理に戻ってくることができない. 
 
-CbCコードの例をソースコード\ref{label=src:cbc_example}に示す.%refを使う
+CbCコードの例をソースコード\ref{src:cbc_example}に示す.%refを使う
 
 \begin{figure}[tb]
     \begin{center}
@@ -187,6 +187,7 @@
 \item \|CodeGearManager|(以下CGM)
 \item \|DataGearManager|(以下DGM)
 \end{itemize}
+
 CodeGearはクラスやスレッドに相当する. DataGearは変数データであり, CodeGear内でjavaのアノテーションを用いて記述する.
 
  DataGearはKeyと必ず対応しており, CodeGear内の全てのKeyにDataGearが揃った際に初めてCodeGearが動作するという仕組みになっている. 
@@ -215,7 +216,20 @@
 \item[PeekFrom(Remote DGM name)] Peekと似ているが,Remote DGM nameを指定することで,その接続先(Remote)のDGMからPeek操作を行える.
 \end{description}
 
-コード\ref{codes: StartHelloWorld}はChristieで記述したHello Worldのコードである. 
+
+
+コード\ref{codes: StartHelloWorld}, \ref{codes: StartHelloCG}はChristieで記述したHello Worldのプログラムである. 
+ユーザープログラムはStartCodeGearクラスを継承したクラス(コード\ref{codes: StartHelloWorld})から開始する. 
+CodeGearManagerはポート番号を指定した上でcreatCGMメソッドを呼び出すことにより生成される. 生成されたCodeGearManagerは CGM名.setup にてCGMに処理させたいスレッド, つまりCodeGearを持たせることができる.  
+
+コード \ref{codes: StartHelloCG}はHeloWorldCodeGearの記述である. 
+HelloWorldCodeGearではkey: helloWorldにputされた文字列をprint出力するという単純な処理を記述している. 
+ CGM名.getLocalDGM().put("Keyname", 変数データ)にてkeyに変数データを紐付け(putし), CodeGearに設定されている全てのkeyがデータを受け取った際に初めてCodeGearは処理される. HelloWorldCodeGearではString型のhelloWorldというkeyがTake型で設定されている.
+ 
+以下のHelloWorldプログラムを実行した際の流れを説明する.
+ まずポート10000番のCodeGearManagerを生成し, HelloWorldCodeGearをsetupさせる. 
+ この時点では必要なkey(key名: helloWorld)にデータが揃っていないのでCodeGearは実行されない. cgm.getLocalDGM().put("helloWorld","hello");にてhelloWorldkeyに文字列"hello"をputすると, HelloWorldCodeGearに必要なDataGearが揃い, print表示が行われる. 
+プログラム中ではkey:helloWorldへのputは文字列"hello"と"world"の二回が行われ, print出力結果はhello worldと表示される. 
 
 \begin{lstlisting}[frame=lrbt,label=codes: StartHelloWorld,caption={ChristieにおけるCGMとCGのsetup}]
 public class StartHelloWorld extends StartCodeGear {
@@ -227,7 +241,6 @@
     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");
     }
@@ -237,7 +250,6 @@
 
 \begin{lstlisting}[frame=lrbt,label=codes: StartHelloCG,caption={HelloWorldCodeGear}]
 public class HelloWorldCodeGear extends CodeGear {
-
     @Take
     String helloWorld;
 
@@ -245,11 +257,19 @@
     protected void run(CodeGearManager cgm) {
         System.out.print(helloWorld + " ");
         cgm.setup(new HelloWorldCodeGear());
-        cgm.getLocalDGM().put(helloWorld,helloWorld);
     }
 }
 \end{lstlisting}
 
+ChristieにはTopologyを形成するための機能TopologyManagerが備わっている.
+Topologyに参加するノードに対して名前を与え, 必要とあればノード間の配線を行う. 
+
+TopologyManagerのTopology形成方法として静的Topologyと動的Topologyがある. 
+静的Topologyはプログラマが任意の形のTopologyとノードの配線をdotファイルに記述し, TopologyManagerに参照させることで自由な形のTopologyが形成できる. 
+現時点では静的TopologyでのTopology形成はdotファイルに記述した参加ノード数に実際に参加するノードの数が達していない場合, 動作しないという制約が存在している. 
+動的Topologyは参加を表明したノードに対し, 自動的にノード同士の配線を行う. 例えばTreeを構成する場合, 参加したノードから順番にrootから近い役割を与える. 
+
+
 %4
 \section{論文の構成}
 \label{config}