水族館の例題によって、Aliceを用いて分散プログラムを記述可能であることを確認した。次に実用的なアプリケーションであるTreeVNCをAlice上で実装することで、Aliceに必要な機能を洗い出した。Fileを読み込むことでTopologyを構成する。参加するノードの台数が決まっている必要がある。Topologyに全ノードが参加するまでアプリケーションが起動しない。Managerを追加した。Nodeの情報がputされ接続処理が順次行われる。DSMに対してputやpeekを行うことでのみ発生する。アプリケーション次第では長時間通信が行われない可能性がある。DSMとの接続が切れた場合、次の通信が行われるまで切断を発見することができない。接続状態ではあるが問題が発生し、応答に時間がかかる場合も考えられる。beatを送り生存確認を行う機能を持つことが望ましい。Aliveの機能を実装した。Segmentを追加記述する事ができる。Segmentは実行されない。ノードは永続的にアプリケーションに参加し続ける訳ではない。目的を果たすとアプリケーションから離脱する。Topology次第では、アプリケーションに支障をきたす。AliceVNCは木構造であるため、子ノードを持つノードがアプリケーションから離脱した場合、その子ノードに対してデータを送信することができなくなる。DSMが利用可能になる。MMORPGでは、試合の最中に障害などによりサーバーから離脱したユーザーが、試合が終わるまでに再びサーバーに接続してきた場合に、再びその試合に参加できるような再接続の処理が用意されている。分散にアプリケーションでは、MMORPGの例のように再接続してきたノードに対して通常の処理とは別の処理を行わせたい場合がある。Segmentを実行できる機能を追加した。Segmentを指定することができる。Nodeの情報の一覧にして表示する接続先自動検索システムという機能がある。この機能によりTreeVNCの起動の際にIPアドレスを入力する手間を省くことができる。Lindaとの性能比較を行い、評価を行う。TreeVNCとAliceVNCの比較をコードの観点からも評価を行う。--\section{機能の確認}-水族館の例題でノードを意図的に切断した結果トポロジーの再構成が行わることを確認した。-そして、切断したノードが再接続を行えることを確認した。-また、再接続の挙動を変更するAPIによりMMORPGにあるような、前回の魚の位置から再開させることに成功した。sortによる実験によって測定を行なう。Segmentが少ないことから、メニコア環境で実験を行った。\hline-\end{tabular}-\end{center}-\end{table}-\subsubsection{実験結果}-100万の要素をもつ配列のSortにかかる時間を計測する。Segmentが物理コア数と同じになるように、分割数は4個で行った。分散環境における改善効果をリングトポロジーによる実験によって測定を行なう。Lindaとの比較も行う。周する時間を計り、1周あたりの平均時間を求める実験である。\label{fig:topologyring}-\end{figure}--実験では、トポロジーの構築時間は実験に含めてはいない。--\subsubsection{実験環境}-学科にある共用のブレードサーバ上の仮想マシンによる仮想クラスタ環境を用いて実験を行った。他の利用者とリソースが競合しないためにTORQUEジョブスケジューラを利用している。\ref{tb:virtual}である。Lindaとの比較}-データのサイズは10Bと100KBで実験を行った。10Bの結果は図\ref{fig:compare_10B}、100KBの結果は図\ref{fig:compare_100KB}である。\label{fig:compare_100KB}-\end{figure}--10Bと100KBの両方の結果でAliceに行った改善の効果を確認することができる。-45台を使用した実験では10Bの小さいパットの場合では17%、100KBの大きいパケットの場合では12%程度高速化することができた。Lindaと改善後の比較では、10Bの場合でAliceのほうが20%程遅い。100KBの場合ほとんど差がないことがわかる。--\subsubsection{TCP\_NODELAY有無の比較}-TCPはデフォルトで、Nagleアルゴリズムを使用している。Nagleアルゴリズムは、小さいパケットを集めてまとめて送信することで、送信するパケット数を減らし効率性をあげるアルゴリズムである。このアルゴリズムの有無により実験結果に影響はないことを確認した。Lindaと同等の性能を持つことが確認できた。-また、並列性能の改善と分散性能の改善の両方に効果があることを確認できた。-両方に共通して行った改善として、複数のSEDAのステージをまとめて1つのステージにしたことがあげられる。-SEDAが実行結果に大きく影響を与えていることが分かる。Lindaに及ばない理由としてもSEDAが原因と考えられる。-リングの実験は並列処理を行なう部分がないシーケンシャルな実験であるため、全ての処理は直列的に実行される。SEDAによるThreadの切り替えが発生する分Aliceの実行速度は遅くなる。Lindaと同じグラフとなる。Lindaに対して優位な点は、マルチコアによる並列実行である。Lindaに勝つことができると予想される。ここでは授業向け画面共有システムであるTreeVNCとそれをAlice上で実装したAliceVNCをソースコードの面から比較した。TreeVNCとAliceVNCのソースコードに対してwcを行い、TightVNCからどの程度コードが増加しているかを調べた。CSは実行に必要なDSが揃うと実行されるという性質を持ち、入力されたDSに応じた結果が出力される。データの依存関係にないCSは並列実行が可能であるため、並列度を上げるためにはCSの処理内容を細かく分割して依存するデータを少なくするのが望ましい。Computation}-AliceのComputationは、keyで指し示されるDSを待ち合わせてCSを実行させると定義できる。Computationは、AliceのComputationを支えているComputationのプログラミングと定義できる。Computationである。Aliceが動作するためにはトポロジーを決める必要がある。トポロジーの構成はAliceのComputationを支えているComputationとみなすことができる。トポロジーが決定するとそのトポロジーを構成する計算が行われる。トポロジーを指定するAPIはその構成の計算をプログラミングして変更するものである。Computationである。ComputationがAliceのComputationに影響することはない。プログラマーはCSを記述する際にトポロジーや切断、再接続という状況を予め想定した処理にする必要はない。プログラマーは目的の処理だけ記述する。Computationで指定する。-このようにプログラムすることで、通常処理と例外処理を分離することができるため、シンプルなプログラムを記述できる。複数のスレッドから1つのデータに変更を行うためには、データの不整合を防ぐためのlockが必要になる。複数の関係のない要素を1つのデータオブジェクトで表現した場合、全ての操作でlockが必要になる。このlockがスケラビリティーを低下させる。データのサイズも並列計算には重要である。putとupdateはDSを追加する際に、peekとtakeはDSを取得する際に使用する。\end{itemize}-DSをqueueに追加するためのAPIである。引数に対応するqueueに対してDSを追加している。+DSをqueueに追加するためのAPIである。引数で指定したDSMの中の、第二引数に対応するqueueに対してDSを追加している。updateもqueueに追加するためのAPIである。putとの違いは、先頭のDSを削除してからDSを追加することである。そのためAPI実行前後でqueueの中にあるDSの個数は変わらない。takeはDSを読み込むためのAPIである。読み込まれたDSは削除される。(Blocking)が起こる。putやupdateによりDSに更新があった場合、takeが直ちに実行される。peekもDSを読み込むAPIである。takeとの違いは読み込まれたDSが削除されないことである。\ref{src:CodeSegment})を作成している。DSMに対してDSをputしている。ods}というフィールドを用いてアクセスする。update}を実行することができる。TestCodeSegmentはこの"cnt"というkeyに対して依存関係があり、8行目でupdateが行われるとTestCodeSegmentは実行される。ソースコード\ref{src:CodeSegment}は、0から10までインクリメントする例題である。DSMに値を追加する。13行目が終了条件であり、countの値が10になれば終了する。Computation}+AliceのComputationは、keyで指し示されるDSを待ち合わせてCSを実行させると定義できる。Computationは、AliceのComputationを支えているComputationのプログラミングと定義できる。Computationである。Aliceが動作するためにはトポロジーを決める必要がある。トポロジーの構成はAliceのComputationを支えているComputationとみなすことができる。トポロジーが決定するとそのトポロジーを構成する計算が行われる。トポロジーを指定するAPIはその構成の計算をプログラミングして変更するものである。Computationである。ComputationがAliceのComputationに影響することはない。プログラマーはCSを記述する際にトポロジーや切断、再接続という状況を予め想定した処理にする必要はない。プログラマーは目的の処理だけ記述する。Computationで指定する。+このようにプログラムすることで、通常処理と例外処理を分離することができるため、シンプルなプログラムを記述できる。DSは、アプリケーションに管理されているデータのことである。アプリケーションを構成するCSによってその値は変更される。DSは、分散フレームワークAliceが管理しているデータである。Aliceを構成するCSによってのみ、その値は変更される。DSはアプリケーションに利用することができる。CSはAliceを構成するタスクである。CSの群はAliceのComputationと言い換えることができる。一部のみユーザーが定義をすることができ、Aliceの挙動を変更することができる。-\input{chapter2}+++\section{AliceVNC}+AliceVNCは、当研究室で開発を行っているTreeVNCをAliceを用いて実装された、授業向け画面共有システムである。+Aliceが実用的なアプリケーションを記述する能力をもつことを確認するために作成した。++授業でVNCを使う場合、1つのコンピュータに多人数が同時につながるため、性能が大幅に落ちてしまう(図\ref{fig:vnc})。この問題をノード同士を接続させ、木構造を構成することで負荷分散を行い解決したものがTreeVNCである(図\ref{fig:treestructure})。TreeVNCは、TightVNCのソースコードを利用して開発されている。\input{conclusion}。