# HG changeset patch # User sugi # Date 1423077817 -32400 # Node ID 46a09e9020a30ec9a88069a9f0839d5fb25a22df # Parent a27c97e0bb15deccb50b77912804efaaf7979853 modify chapter1 diff -r a27c97e0bb15 -r 46a09e9020a3 paper/abstract.tex --- a/paper/abstract.tex Wed Feb 04 21:13:48 2015 +0900 +++ b/paper/abstract.tex Thu Feb 05 04:23:37 2015 +0900 @@ -4,7 +4,7 @@ 本研究ではAliceに実用的なアプリケーションを作成するために必要な、動的なトポロジーを管理する機能とAliceの制御を行えるメタ計算を追加した。そして既存のアプリケーションをAlice上で実装することで実用的なアプリケーションを記述する能力を持つことを確認した。 -また、分散と並列両方の観点から性能改善を行ない、12%の性能向上に成功した。そして、先行研究であるFederated Lindaと同等の性能を持たせることができた。 +また、Aliceの性能改善を行ない、12%の性能が向上した。そして、先行研究であるFederated Lindaと同等の性能を持たせることができた。 \end{abstract} diff -r a27c97e0bb15 -r 46a09e9020a3 paper/abstract_eng.tex --- a/paper/abstract_eng.tex Wed Feb 04 21:13:48 2015 +0900 +++ b/paper/abstract_eng.tex Thu Feb 05 04:23:37 2015 +0900 @@ -1,3 +1,8 @@ \begin{abstract_eng} +Alice is a prototype framework for distributed programming, which uses Data Segment and Code Segment as programming units. We checked Alice has an ability to write distributed program using aquarium example. +In this paper, we add functions which control dynamic topology and Alice computation. +And we show Alice has an ability to write useful application. + +Furthermore we improve Alice performance. So Alice works 12\% faster and has same performance as Federated Linda. \end{abstract_eng} diff -r a27c97e0bb15 -r 46a09e9020a3 paper/appendix.tex --- a/paper/appendix.tex Wed Feb 04 21:13:48 2015 +0900 +++ b/paper/appendix.tex Thu Feb 05 04:23:37 2015 +0900 @@ -10,7 +10,10 @@ 杉本 優, 河野 真治(琉球大学)\\ 第54回 プログラミングシンポジウム, Jan, 2013 -\item 分散フレームワークAliceによる例題の作成 ,\\ +\item 分散フレームワークAliceによる例題の作成,\\ +杉本 優, 河野 真治(琉球大学) + +\item 分散フレームワークAlice ,\\ 杉本 優, 河野 真治(琉球大学)\\ オープンソースカンファレンス2012 Okinawa July 2012 \end{itemize} diff -r a27c97e0bb15 -r 46a09e9020a3 paper/appendix1.tex --- a/paper/appendix1.tex Wed Feb 04 21:13:48 2015 +0900 +++ b/paper/appendix1.tex Thu Feb 05 04:23:37 2015 +0900 @@ -21,13 +21,13 @@ \label{fig:torque} \end{figure} -ユーザーはマスターを用いてTORQUEを利用する。ジョブを記述したシェルスクリプトを用意し、スケジューラーに投入する。投入するタイミングで、利用したいマシン台数、CPUコア数を指定することができる。(ソースコード \ref {src:torque}) - +ユーザーはマスターを用いてTORQUEを利用する。ジョブを記述したシェルスクリプトを用意し、スケジューラーに投入する。投入するタイミングで、利用したいマシン台数、CPUコア数を指定することができる。 TORQUE は、ジョブに必要なマシンが揃い次第、受け取ったジョブを実行する。 \subsubsection {TORQUE のジョブの書き方} TORQUEのジョブは、シェルスクリプトにより記述する。 TORQUEのジョブは実行される際に、環境変数が与えられる。 +これらの環境変数は、ジョブを投入する際にオプションでも変更することができる。 \begin{itemize} \item {\ttfamily PBS\_NODEFILE}\\ @@ -39,8 +39,8 @@ \item{\ttfamily PBS\_JOBNAME}\\ ジョブの名前 \end{itemize} -これらの環境変数は、ジョブを投入する際にオプションでも変更することができる。 +ソースコード \ref{src:torque1}はスレーブに、{\ttfamily PBS\_NODEFILE} に記述されているマシン名の順番にログインさせ、hostnameコマンドを実行させる例題である。 \begin{lstlisting}[label=src:torque1, caption=指定されたマシンにログインして hostname コマンドを走らせる例] function run() { while read node @@ -52,12 +52,50 @@ run < $PBS_NODEFILE \end{lstlisting} -ソースコード \ref{src:torque1}はスレーブに、{\ttfamily PBS\_NODEFILE} に記述されているマシン名の順番にログインさせ、hostnameコマンドを実行させる例題である。 +{\ttfamily PBS\_NODEFILE} の中に含まれるマシン名はコア数分重複しているので扱う際に注意が必要である。 +ジョブを投入するには、 qsub コマンドを用いる。(ソースコード \ref{src:torque2}) \begin{table}[html] -\lstinputlisting[label=src:torque, caption=10台(1台あたり4コア)で走らせる例]{source/Torque.sh} +\lstinputlisting[label=src:torque2, caption=10台(1台あたり4コア)で走らせる例]{source/Torque.sh} \end{table} +実際にAliceのリングトポロジーによる実験を行うタスクはソースコード \ref{src:torque5}である + +\begin{lstlisting}[label=src:torque5, caption=Alice でリングトポロジーの実験に使ったジョブ] +#!/bin/bash +# +# Alice Ring Topology +# +#PBS -q dque +#PBS -N AliceRingTopology +#PBS -l walltime=00:05:00 + +alicepath=/home/mass/share/student/k138563 +node_num=`expr $PBS_NUM_NODES - 1` # TopologyManager の分を1引く +port=10000 # 利用するポート番号 +count=100 # リングを回る回数 +size=4096 # リングを回すメッセージのサイズ + +function run() { + read serv + ssh $serv "ruby $alicepath/ring.rb $node_num > /tmp/ring.dot" < /dev/null + ssh $serv killall java < /dev/null + # トポロジーマネージャーの起動 + ssh $serv java -cp $alicepath/Alice.jar alice.topology.manager.TopologyManager -p $port -conf /tmp/ring.dot < /dev/null & + cnt=0 + while read node # 用意されたスレーブがなくなるまで繰り返す + do + ssh $node killall java < /dev/null + # トポロジーマネージャーに対して参加表明を行う + ssh $node java -cp $alicepath/Alice.jar alice.test.topology.ring.RingTopology -host $serv -port $port -p $port -count $count -size $size -nodeNum $node_num < /dev/null & + cnt=`expr $cnt + 1` + done + wait +} + +uniq $PBS_NODEFILE /tmp/nodes #重複しているノード名の削除 +run < /tmp/nodes +\end{lstlisting} \newpage \def\thesection{付録\Alph{section}} diff -r a27c97e0bb15 -r 46a09e9020a3 paper/chapter1.tex --- a/paper/chapter1.tex Wed Feb 04 21:13:48 2015 +0900 +++ b/paper/chapter1.tex Thu Feb 05 04:23:37 2015 +0900 @@ -28,13 +28,14 @@ \end{figure} \section{ComputationとMeta Computation} -Aliceはkeyで指し示されるDSを待ち合わせてCSを実行させるというComputationである。 -また、アプリケーションでAliceのComputationを設定するComputationを利用することができる。このComputationをMeta Computationと呼ぶ。 +AliceのComputationは、keyで指し示されるDSを待ち合わせてCSを実行させると定義できる。 +それに対して、AliceのMeta Computationは、AliceのComputationを支えているComputationのプログラミングと定義できる。 -例えば、Aliceのトポロジーと再接続の管理はMeta Computationとみなすことができる。 -CS単位ではトポロジーや切断を想定せずにアプリケーションを記述することができる。 -トポロジーのMeta Computationを利用することで、トポロジーが2分木からn分木に変わってもアプリケーションは動く。 -再接続のMeta Computationを利用すれば、アプリケーションはノードが再接続してきた場合でも、切断してないノードと同様に動かすことができる。 +例えば、トポロジーを指定するAPIはMeta Computationである。Aliceが動作するためにはトポロジーを決める必要がある。つまりトポロジーの構成はAliceのComputationを支えているComputationとみなすことができる。トポロジーが決定するとそのトポロジーを構成する計算が行われる。トポロジーを指定するAPIはその構成の計算をプログラミングして変更するものである。 +他にも再接続の動作を決めるAPIや切断時の動作を決めるAPIはMeta Computationである。 + +これらのMeta ComputationがAliceのComputationに影響することはない。プログラマーはCSを記述する際にトポロジーや切断、再接続という状況を予め想定した処理にする必要はない。プログラマーは目的の処理だけ記述する。そして、切断や再接続が起こった場合の処理を記述しMeta Computationで指定する。 +このようにプログラムすることで、通常処理と例外処理を分離することができるため、シンプルなプログラムを記述できる。 \section{Data Segment} 複数のスレッドから1つのデータに変更を行うためには、データの不整合を防ぐためのlockが必要になる。 diff -r a27c97e0bb15 -r 46a09e9020a3 paper/master_paper.pdf Binary file paper/master_paper.pdf has changed