-title: CodeSegmentとDataSegmentによるプログラミング手法 --author: 河野 真治, 杉本 優 --並列分散フレームワーク 本研究室では分散プログラミングと並列プログラミングのツールを開発してきた。 分散プログラミング用のFederated Lidna 並列プログラミング用のCerium これらの経験から並列分散を統一的に扱えるプログラミングフレームワークを考えたい。 --並列分散フレームワークには何が求められるのか 並列実行単位の記述 プロトコルの記述 実用的な実装 実験環境の用意 多言語対応 検証や証明への対応 --Federated Linda データの塊である Tuple を使って通信するフレームワーク in Tuple を取り出す out Tuple 書きだす --Federated Linda の Pros and Cons --Cerium Task 単位で並列実行するツール --Cerium の Pros and Cons --Data segment と Code Segment --Java Implmentation : Alice --CS/DS API --Alice Architecture --Sample Application --Experiment --Ring に置いて、タスクをCode Segment、データをData Segmentという単位に分割して記述する方法を提唱している。
しかし、前述したプログラムをプログラマーが一から記述していくことは大変である。
そこで、本研究室の卒業生である赤嶺一樹氏が分散ネットフレームワークAliceのプロトタイプを作成した。
本研究では実際にAliceを利用して、水族館の例題を作成した。また、Federated Lindaとの性能比較を行った。そして、Aliceの問題点の洗い出し、APIの見直しを行った。
--発表内容Alice は本研究室で開発を行なっている分散タスク管理フレームワークである。
Cell用のOpen CL に似たTask管理用フレームワークCeriumと Lindaを相互接続した分散フレームワークであるFederated Lindaの開発を通して得られた知見を生かされている。
Ceriumは当研究室で開発を行なっている並列プログラミングフレームワークである。
CeriumではTaskを小さく分割して並列実行し、データ転送はパイプライン実行により隠される。
Taskには依存関係がありデータの依存関係がそのままTaskの依存関係になることが多い。
繰り返し使われるデータの管理が重要であり、実行時にわかるデータ構造間の依存関係がTaskを複雑にしている。
Data Segmentは数値や文字などのデータを構造体的に保持するが、分散プログラムにおいてData Segmentの相互参照が問題になってくる。
AliceではData SegmentにユニークなKeyを持たせ、Key Value Storeとして扱っている。Key毎のキューがあり、Key毎に順に実行される。
Data Segmentを管理するのが、Data Segment Manager 各ノード毎に、Local DS ManagerとRemote DS Managerが存在する。
Local DS Managerはノード固有のKey Value Storeであり、Remote DS Managerは他のノードのLocal DS Managerのproxyである。 AliceのTopology Managerが自動的に構成する。
これらを用いてデータの送受信を行う。
putを行うとデータがenqueueされる。
putするたびにKeyが持つindexがincrementされる。
要求したデータがない場合にはwaitListに登録する。
データがput、updateされる際に要求したデータがあるかどうかを再びチェックする。基本的な動作はpeekと同じである。
peekと異なる点は取得されたデータがdequeueされる。
JavaにおけるMessagePackのデータ表現
Data Segment APIでは
MessagePack for javaのValueオブジェクトを使用 MessagePackのバイナリにシリアライズできる型のみで 構成されているため自己記述式のデータ形式Valueオブジェクトは通信に関わる際には、シリアライズ、デシリアライズを高速に行うことができる
トポロジーファイルはDOT Languageと言う言語で記述される。
DOT Languageはプレーンテキストを用いてデータ構造としてのグラフを表現するデータ記述言語の一つ。dotコマンドを用いて、グラフの画像ファイルを生成することができるのでトポロジーが正しいか確認することができる。
dot -T png ring.dot -o ring.png
複数の魚が複数のディスプレイ上を移動する。
魚のうち一匹はクライアントが操作することができる。
トポロジーはツリー状に構成してある。
ブレードサーバー詳細
マシン台数 | 8台 |
CPU | Intel(R) Xeon(R) X5650 @ 2.67GHz |
物理コア数 | 12 |
論理コア数 | 24 |
CPU キャッシュ | 12MB |
Memory | 132GB |
仮想クラスタ詳細
マシン台数 | 48台 |
CPU | Intel(R) Xeon(R) X5650 @ 2.67GHz |
物理コア数 | 2 |
論理コア数 | 4 |
CPU キャッシュ | 12MB |
Memory | 8GB |
API
SEDA
MessagePack
Key
Java
拡張性
今回Code SegmentとData Segmentによる並列分散フレームワークのJavaによる実装を示した。実装でしかえられない知見を得ることができた。
今回Javaによる実装を行ったがJavaがAliceの実装に不向きであるということもわかった。
今回はノード内の並列実行やGPGPUによる並列実行などは考慮していない。将来的にそれを含め実装をしていきたい。