ppt - funini.com

マイグレーションを支援する
分散集合オブジェクト
30388 高橋 慧
近山・田浦研究室
powered by Phoenix Library
グリッド環境での計算
▌ 特徴
►インターネット上の計算機で並列処理
►専用並列計算機に匹敵する潜在性能
▌ 要請(1):プロセッサ数を増減させたい
►少しの時間でも使える資源を総動員したい
►故障への対応・家庭のPCも計算に参加
▌ 要請(2):記述を楽に (オブジェクト指向など)
►通信を明示的に書きたくない
►データと仕事の関連が明確にしたい
背景・目的
[2]
グリッド環境での計算
▌ 現状
►既存の分散オブジェクトでは無駄が多すぎる
►通信 + 手続きを記述するモデルが主流
▌ 求められる記述モデル
►動的プロセッサ数の増減に対応
►記述が容易(例えばオブジェクト指向)
►無駄な通信が発生しない
これらを備えた記述モデル
「分散集合オブジェクト」を提案
背景・目的
[3]
本報告の構成
▌ 背景・目的 (ここまで)
▌ 既存のモデル
►メッセージパッシング
►分散オブジェクト
▌ 分散集合オブジェクトの提案
▌ 進捗・今後の計画
ここに現在位置が出ます
本報告の構成
[4]
メッセージパッシング
►相手プロセッサを番号で指定して通信
[+]無駄の無いプログラムが書ける
[-]手続き的・記述が難しい
[-]プロセッサ数の増減に対応が難しい
ipe =
12
/* ipe = 12 */
double d = 3.14;
send(20, &d);
既存モデル
ipe =
20
to: 20
data: 3.14
/* ipe = 20 */
double d;
recv(&d);
[5]
Phoenixでのメッセージパッシング
►Phoenixモデルによる改良
◘ 各プロセッサは番号の集合(例えば0-10)を持つ
◘ 実行中に番号の配分を変更可能
[+]プロセッサの増減に対応 (他の得失は同様)
17はこの範囲内
[0-10)
to: 17
data: ***
[10-20)
[10-15)
recv(&d);
17はこの範囲内
send(17, &d);
…
send(17, &d);
既存モデル
[15-20)
recv(&d);
to: 17
data: ***
[6]
分散オブジェクト
▌ オブジェクト指向を並列プログラムに導入
►クラス定義と、それを用いるプログラムを記述
►リモートのメソッドを呼び出せる(RMI)
►オブジェクトを他プロセッサに移送 (マイグレート)
参照
remote_x
remote_x->m();
既存モデル
参照も移動
Object x
x->m()を実行
マイグレート
Object x
[7]
分散オブジェクトでの記述
▌ 「プロセッサ間に分散する配列」を書いてみる
►「プロセッサは増減しても見え方が一定」が必要
►全体オブジェクトが断片の配分を管理
►メソッド呼び出しは全体オブジェクトを通じて行う
プログラマが要素配分
を把握する必要が無い
全体オブジェクトに
get(2)
メッセージが集中
性能上ボトルネック
0 1 2 …
既存モデル
whole->get(2);
whole->get(200);
whole
get()
全体オブジェクト
100 …
get(200)
200 …
[8]
既存モデルのまとめ
▌ メッセージパッシング
►性能が良い
►プロセッサ増減に対応 (Phoenixモデル)
►記述は手続き的で難しい
▌ 分散オブジェクト
►プロセッサ増減に対応する場合、
性能と記述性のトレードオフ
◘ 記述性を重視すると、性能が悪い (先スライド)
◘ 性能を重視すると、記述が難しい (例省略)
⇒記述性と性能を併せ持つモデルを提案
既存モデル
[9]
分散集合オブジェクトの提案
▌ 集合の分割保持に特化
►プログラマは「断片クラス」を定義
►自動的に仮想的「全体オブジェクト」が出来る
►メソッドは全体オブジェクトから呼び出し
►断片は分割・併合・マイグレートできる
Fraction
0 1 2 …
Whole Array
100…
200…
プロセッサ増減に対応
本研究の提案
[10]
ユーザから見た動作
▌ メソッド呼び出し
►外側からは、「全体オブジェクト」だけが見える
►インデックス集合を指定してメソッドを呼び出し
プログラマが要素配分を把握する必要がない
whole_array.calc([50,150));
whole_array
calc([50-150))
Whole Array
calc([50-100))
[0-100)
本研究の提案
calc([100-150))
[100-200)
[200-…
[11]
実際の動作
►要素とプロセッサの対応はシステムが管理
►呼び出し範囲の先頭要素にメッセージを送信
►各断片がメッセージを中継 (将来はツリー利用)
メッセージが特定のプロセッサに集中しない
whole_array->calc(10-20);
whole_array->calc(110-400);
10を持つ断片に
送信
calc([10-20))
[0-100)
本研究の提案
110を持つ断片に送信
calc([110-200))
[100-200)
残りの範囲
[200-400)
に転送
[200-…)
[12]
分散集合オブジェクトの特徴
▌ プロセッサ数の増減に対応
►断片のマイグレーション
▌ 記述しやすい
►オブジェクト指向
►「全体オブジェクト」というビューを提供。
要素の配分を意識する必要がない
▌ メッセージパッシングに劣らない速度
►メソッド呼び出しのボトルネックがない
本研究の提案
[13]
進捗と今後の計画
▌ 分散配列クラスの作成中
►Phoenixライブラリを使用
►マイグレートに対応
►FFTやSOR(偏微分方程式の解法)に使用
▌ ライブラリの実装
►メッセージの自動生成
▌ これを用いたアプリケーションの記述
進捗と今後
[14]