マイグレーションを支援する分散集合オブジェクト

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

シーケンス図の生成のための実行履歴圧縮手法
モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
キャッシュ付PRAM上の 並列クィックソートと 並列マージソート
Chapter11-4(前半) 加藤健.
分散コンピューティング環境上の Webリンク収集システムの実装
Javaのための暗黙的に型定義される構造体
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
報告 (2006/9/6) 高橋 慧.
情報伝播によるオブジェクト指向プログラム理解支援の提案
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
情報処理Ⅱ 2005年12月9日(金).
2006/10/19 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井英二郎
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
型付きアセンブリ言語を用いた安全なカーネル拡張
過負荷時の分散ソフトウェアの 性能劣化を改善する スケジューリングの提案
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
その他の図 Chapter 7.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
関数の定義.
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
複数ホストに分割されたメモリを用いる仮想マシンの監視機構
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
オペレーティングシステムJ/K (仮想記憶管理)
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミング 4 整列アルゴリズム.
アプリケーション依存の先読みが可能なO/Rマッピングツール
進捗報告 金田憲二.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向プログラミングと開発環境
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
アルゴリズムとプログラミング (Algorithms and Programming)
「マイグレーションを支援する分散集合オブジェクト」
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
実装について 前田俊行.
「マイグレーションを支援する分散集合オブジェクト」
アルゴリズムとデータ構造1 2009年6月15日
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
プログラム分散化のための アスペクト指向言語
MPIを用いた並列処理計算 情報論理工学研究室 金久 英之
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
IPmigrate:複数ホストに分割されたVMの マイグレーション手法
アルゴリズムとデータ構造 2010年6月17日
フレンド関数とフレンド演算子.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
演算子のオーバーロード.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
プログラミング演習I 2003年6月11日(第9回) 木村巌.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
JXTA総まとめ P2P特論 最終回 /
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

マイグレーションを支援する分散集合オブジェクト 高橋 慧 田浦健次朗 近山 隆 (東京大学) 背景・目的 マイグレーション対応SOR グリッドプログラミングにおける要請 動的なプロセッサ数の変化に対応させたい 使用可能なプロセッサが動的に変化 利用可能な資源を最大限活用 記述を簡単にしたい オブジェクト指向 無駄な通信が発生しない 基本的なアルゴリズム 隣接する境界のデータを交換 データを更新 残差を一カ所に集計 分散集合オブジェクトを用いた記述 各断片がメソッドを呼び合う形で処理が進行 境界データの交換 端のデータを引数に、隣のインデックスに対しRMI データを必要とする要素のインデックスに向けて送信 断片が移動しても、正しい断片にメッセージが届く 右のコードにおいて、アルゴリズムの正しさを証明した メソッド呼び出しの記述 マイグレーションの記述 断片の定義 集合全体の一部を持つものとして定義 インデックス集合とデータを保持 メソッドは引数に「インデックス集合」を取る メソッド呼び出し(RMI) インデックス集合とメソッドを指定 各断片が持つインデックス集合と重なりを取って、メソッドが呼び出される 例:分散配列の要素をインクリメント 配分によらず要素[2-8)をインクリメント 断片の定義 断片の定義で、split()・merge()を記述 分割・併合に必要な処理を記述 計算に参加 / 脱退 プログラマは外部からjoin() / leave()を呼び出し class DistributedArray{ split(void){ (データとインデックス集合を分割) return (分割したデータ);} merge(データ){(データを併合)} }; int main(){   join(object_id); 対象とする集合 インデックスで要素を識別できる集合 配列・ハッシュ表… 分散環境では断片に分割して保持 プロセッサ数が固定 →要素の位置を簡単に計算できる プロセッサ数が動的に変化 →どの要素がどのプロセッサにあるか不明 →要素とプロセッサの対応表が必要 左の断片は、■色のインデックス範囲に、■色の部分のデータを送信 断片の分割時は、端のデータに重なりを持たせて分割する (下図) class DistributedArray { increment(IndexSet *is){   foreach (index <- is){    data[index]++; } }; int main(){ WholeArray->increment ([2-8]); … 1 9 Proc. 0 Proc. 1 2 3 4 5 7 8 6 Proc. 2 join() proc2がjoin()を呼び出し + Proc. 0 Proc. 1 Proc. 2 proc2から要求メッセージ proc1でsplit()が呼ばれる proc2にmerge()される データ要求 2 3 4 5 6 1 実行結果 プロセッサ81台の環境で正しく動作 64台で連続joinに成功 Mflops値 一回のループ時間から計算 一辺10000, 20000, 30000で実行 台数増加により頭打ち 現状の実装では処理系のオーバーヘッドが 大きいためと推定 [7-9]を譲渡 7 8 9 0,1.2.3 -> proc.0 4,5,6 -> proc.1 7,8,9,10-> proc.2 Proc. 0 Proc. 1 Proc. 2 1 9 Array->increment([2-8]) increment([4-8]) Proc. 0 Proc. 1 2 3 4 5 7 8 6 increment([2-3]) 1 2 3 4 5 7 8 6 9 10 Proc. 0 Proc. 1 Proc. 2 proc2の参加が完了 … 1 2 3 4 5 7 8 6 9 既存モデルでの問題点 プログラマはクラス定義でsplit(), merge() を記述 すれば、関数1つでマイグレーションが実現される データアクセスにプロセッサ番号を用いないため、 プログラマは配分を意識せず記述できる メソッドはデータのあるプロセッサで実行されるため、データに応じてタスクも自動的に配分される メッセージパッシング 送信先の指定にプロセッサ番号を用いるため、プロセッサ増減に対応が難しい 対応表を一から実装する必要がある 手続き的で記述が難しい 分散共有メモリ プロセッサ増減自体には容易に対応 データと仕事の対応を意識しないと、不必要な リモートメモリアクセスが多発し、低速 分散オブジェクト オブジェクト単位ではマイグレーション可能 プロセッサ間にまたがるデータは簡単には扱えない マイグレーションとスレッド まとめ 処理系の実装 通常の処理系では、実行中のスレッドは移送できない 本モデルではメソッド実行中の停止を禁止することで、任意のメソッド実行の間でマイグレーションを可能にする あるメソッドの返り値を必要とする処理は、そのメソッドの呼び出し前と呼出し後に分割して記述する 一断片内での実行スレッドは一つに制限でき、このスレッドが待機状態であればマイグレーションが可能である 将来的には、プリプロセッサにより、擬似的に返り値を取れるような処理系を構築したい (スタックの情報はRMIの引数の形で授受する) 分散集合オブジェクトモデルを提案・実装した インデックス集合を指定したRMIにより、 プロセッサ数増減に対応 オブジェクト指向による記述 対応表を分散保持しメッセージが集中しない これを用いてSOR法のプログラムを記述した 正しく動作することを確認した アルゴリズムの正しさを示した 要素とプロセッサの対応を集中管理すると… 実装は楽 対応表を持つプロセッサにメッセージが集中 Phoenixライブラリを利用 (http://www.logos.ic.i.u-tokyo.ac.jp/phoenix/) メッセージパッシングライブラリの一種。各プロセッサは番号の集合([0-100)など)を持ち、メッセージは一つの番号に向けて送信される。番号とプロセッサの対応はプログラマが自由に変更でき、この対応は各プロセッサが分散保持している。 インデックス一つをPhoenixの番号一つに対応付け 要素とプロセッサの対応が分散保持される メッセージが対応表を持つプロセッサに集中しない メソッド呼び出しメッセージの中継方法 呼出先の先頭のインデックスにメッセージを送信 その断片のインデックス集合と重なりを取って、残りを次の先頭インデックスに送信 ツリー状の中継も実装 提案 (m0a) (m0b) (メソッドm0) 「分散集合オブジェクトモデル」 プロセッサ間にまたがる集合を一オブジェクトに プログラマは断片オブジェクトを定義 メソッドは引数にインデックスの範囲を取る オブジェクトの外側からは、集合全体に対し メソッドを呼び出す 断片は分割・併合・マイグレートできる 断片A (停止中) 断片A RMI RMI 返り値 RMI 返り値を引数として渡す 今後の課題 断片B 断片B (メソッドm1) (m1) m0(){ ... hoge = RMI::m1(arg); } m1(){ return fuga; m0a(){ ... RMI::m1(arg); } m0b(hoge){ m1(){ RMI::mob(fuga); この間に断片Aは マイグレート可能 実装の改良による処理系の高速化 他のアプリケーションの記述 記述性の改善 返り値についての検討 … 1 9 Proc. 0 Proc. 1 Proc. 2 2 3 4 5 7 8 6 increment([2-8]) increment([4-8]) increment([2-3]) increment([4-6]) m1の呼び出し部分で m0をm0aとm0bに分割 powered by Phoenix Library