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

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

モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
Chapter11-4(前半) 加藤健.
最新ファイルの提供を保証する代理FTPサーバの開発
第3回参考文献発表 PHP言語 岩永逸平.
プログラミング基礎I(再) 山元進.
全体ミーティング (4/25) 村田雅之.
Javaのための暗黙的に型定義される構造体
研究集会 「超大規模行列の数理的諸問題とその高速解法」 2007 年 3 月 7 日 完全パイプライン化シフト QR 法による 実対称三重対角行列の 固有値並列計算 宮田 考史  山本 有作  張 紹良   名古屋大学 大学院工学研究科 計算理工学専攻.
アルゴリズムとデータ構造1 2007年6月12日
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
RTミドルウェアによるシステムの構築 現在,RTミドルウェアの利用が進んでいる ⇒機能要素のRTコンポーネント化を行うことで
報告 (2006/9/6) 高橋 慧.
情報伝播によるオブジェクト指向プログラム理解支援の提案
P,Q比が変更可能なScaLAPACKの コスト見積もり関数の開発
福盛 秀雄, 浜中 征志郎, 菅原 健一, 吉川 潤, 中山 周平 早稲田大学 村岡研究室
大きな仮想マシンの 複数ホストへのマイグレーション
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
演算/メモリ性能バランスを考慮した マルチコア向けオンチップメモリ貸与法
RMI ソフトウェア特論 第6回 /
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
Flyingware : バイトコード変換による 安全なエージェントの実行
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
型付きアセンブリ言語を用いた安全なカーネル拡張
過負荷時の分散ソフトウェアの 性能劣化を改善する スケジューリングの提案
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
MPIを用いた最適な分散処理 情報論理工学研究室 角 仁志
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
マルチスレッド処理 マルチプロセス処理について
オーバレイ構築ツールキットOverlay Weaver
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
複数ホストに分割されたメモリを用いる仮想マシンの監視機構
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
通信機構合わせた最適化をおこなう並列化ンパイラ
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
アプリケーション依存の先読みが可能なO/Rマッピングツール
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
コーディングパターンの あいまい検索の提案と実装
アルゴリズムとプログラミング (Algorithms and Programming)
マイグレーションを支援する分散集合オブジェクト
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
統合開発環境によって表現された 言語機構によるコードのモジュール化
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
「マイグレーションを支援する分散集合オブジェクト」
アスペクト指向言語のための視点に応じた編集を可能にするツール
サブゼミ第7回 実装編① オブジェクト型とキャスト.
アルゴリズムとデータ構造1 2009年6月15日
理工学部情報学科 情報論理工学研究室 延山 周平
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
プログラム分散化のための アスペクト指向言語
MPIを用いた並列処理計算 情報論理工学研究室 金久 英之
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
IPmigrate:複数ホストに分割されたVMの マイグレーション手法
アルゴリズムとデータ構造 2010年6月17日
ソフトウェア工学 知能情報学部 新田直也.
BSPモデルを用いた 最小スパニング木 情報論理工学研究室 02-1-47-134 小林洋亮.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
プログラミング演習I 2003年6月11日(第9回) 木村巌.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

「マイグレーションを支援する分散集合オブジェクト」 について、近山・田浦研究室の高橋 慧が発表します。 

グリッド環境での計算 インターネット上の計算機で並列処理 動的なプロセッサ数の変化に対u応させたい 使用可能なプロセッサが変化 (故障など) 利用可能な資源を最大限利用したい プロセッサ数増減に対応するプログラムは   記述が難しい または 遅い メッセージパッシングでは記述が難しい 分散共有メモリでは遅い (リモートメモリアクセスが多発しがち)

提案モデル : 「分散集合オブジェクト」 以下の条件を満たす、並列プログラム記述モデル 動的プロセッサ数の増減に対応 記述が容易 (オブジェクト指向) 高速 (無駄な通信が発生しない) 実装・評価を行った 処理系を実装した CG法・N体問題を記述し、性能評価を行った

発表の流れ はじめに 既存モデル メッセージパッシング 分散共有メモリ 分散オブジェクト 提案モデル 実装 記述例・性能評価 まとめ 発表の流れです。 ここから背景として、本フレームワークが対象とする分散集合、およびそれを記述するための並列プログラミングモデルについて説明します。 次に本研究が提案する分散集合オブジェクトについて説明します、 これを用いたアプリケーションを記述しました。これを用いて行った性能評価を示します。 最後に、まとめと今後の課題を述べます。

メッセージパッシングモデル 下層の処理に近く、無駄のない記述ができる 記述は手続き的で難しい プロセッサを指定してメッセージを送受信 ⇒計算中にプロセッサが増減すると、メッセージの送信先を変更する必要がある ⇒記述が難しい ipe = 1 ipe = 0 d = 3.14 send(1, d); recv(d); to: 1 data:3.14

Phoenixモデル メッセージパッシングモデルの一種 ある番号の集合を参加プロセッサで分割 メッセージは番号に対し送信 計算中にプロセッサが参加・脱退 ⇒番号集合を委譲することで、プログラム上ではメッセージの送信先を変更せず対応可能 to: 18 data:3.14 recv(d); [10-20) [0-10) d = 3.14 send(18, d); [15-20) recv(d);

分散共有メモリモデル 他のプロセッサのメモリに擬似的にアクセス (裏では通信メッセージが送受信されている) プログラムは記述しやすい 他のプロセッサのメモリに擬似的にアクセス  (裏では通信メッセージが送受信されている) プログラムは記述しやすい プロセッサの増減に対応できる ⇒メモリアドレスとプロセッサの対応を変更 プロセッサとメモリの対応を把握しないと リモートアクセスが多発 ⇒性能の良いプログラムを書くのは難しい A[15] = 10 write(A[15], 10)

分散オブジェクトモデル 並列プログラムにオブジェクト指向を導入 クラス定義と、それを用いるプログラムを記述 リモートのメソッドを呼び出せる(RMI) オブジェクトを他のプロセッサにマイグレート することで、プロセッサ増減に対応 (図が入ります)

分散オブジェクトモデル プロセッサ間にまたがるデータでは問題がある 断片に分割して保持するのが自然 プロセッサ増減に対応するには、たくさんの 小さな断片オブジェクトに分割する 見え方は変わらないが、性能が低下してしまう (図が入ります)

Concurrent Aggregate Chienらが提案した分散オブジェクトの一種 プログラマは断片オブジェクトを定義 メソッド中で「この操作を他の断片に中継する」という記述ができる 外部からは、あるプロセッサにあるオブジェクトのメソッドを呼び出すと、呼び出しが中継される プロセッサ増減に柔軟に対応 特に分散配列のようなデータ構造では、メソッド呼び出しコストが大きい

既存モデルのまとめ メッセージパッシング 性能は良いが記述が難しい Phoenixモデルではプロセッサ増減に対応 分散共有メモリ 記述性は良い プロセッサ増減に対応できるが、性能が低下 分散オブジェクト オブジェクト指向で容易な記述 プロセッサ増減にはマイグレーションで対応 分散配列のようなデータでは問題がある

発表の流れ はじめに 既存モデル 提案モデル 対象とする集合 クラス定義 メソッド呼び出し マイグレーション 実装 記述例・評価 まとめ 発表の流れです。 ここから背景として、本フレームワークが対象とする分散集合、およびそれを記述するための並列プログラミングモデルについて説明します。 次に本研究が提案する分散集合オブジェクトについて説明します、 これを用いたアプリケーションを記述しました。これを用いて行った性能評価を示します。 最後に、まとめと今後の課題を述べます。

対象とする集合 : 「分散集合」 インデックスで位置を識別できるデータ 断片が複数のプロセッサに存在 分散配列・分散ハッシュ表など プロセッサ数が固定だと、インデックスから プロセッサ番号を簡単に計算可能 Proc. 0 Proc. 1 Proc. 2 1 2 10 11 12 20 21 22 … … ここで、本研究が対象とする分散集合について説明します。 大規模なプログラムにおいて、大きな配列やハッシュ表など、インデックスで要素を識別できる集合がよく用いられます。 こうした集合は、インデックスから位置が簡単に計算できるので、高速にアクセスができます。 例えば…要素が各プロセッサ10個ずつの場合、12番のデータを持つのは 12 / 10 = 1 より1番のプロセッサと簡単にわかる

分散集合の記述 0, 1,.. 9 > proc.0 10,11,..19 > proc.1 プロセッサ数が変化すると… どの要素がどのプロセッサにあるか不明 要素とプロセッサの対応表が必要 対応表を一プロセッサが集中管理 記述は簡単 対応表を持つプロセッサにメッセージが集中 対応表を全プロセッサが分散保持 性能は良い 記述が大変 0, 1,.. 9 > proc.0 10,11,..19 > proc.1 20,21,..29 > proc.2

分散集合オブジェクトモデル 1 2 3 4 5 6 7 8 9 10 分散集合をオブジェクト指向で記述 メソッド呼び出し: 集合全体に対しインデックス範囲を指定 マイグレーションによりプロセッサ増減に対応 (実装)要素とプロセッサの対応を分散保持 ⇒メッセージが一つのプロセッサに集中しない Proc. 1 Proc. 2 Proc. 0 本研究の提案である、分散集合オブジェクトについて説明します。 分散集合オブジェクトは、分散オブジェクトを基本に、大きな配列のような集合を扱うのに特化したものです。プログラマは断片クラスを定義します。これにより、自動的に「全体オブジェクト」が出来ます。オブジェクトへのアクセスは全体オブジェクトを通じて行います。プロセッサの増減に対しては、断片をマイグレートすることで行います。 ■例えばこの図では、配列は断片オブジェクトに分割されています。■参加したプロセッサには、オブジェクトの断片がマイグレートにより割り当てられます。 1 2 3 4 5 6 7 8 9 10 0-3 > proc.0 4-7 > proc.1 8-10> proc.2 0-3 > proc.0 4-7 > proc.1 8-10> proc.2 0-3 > proc.0 4-7 > proc.1 8-10> proc.2 increment([2-3]) increment([4-5]) Array->increment([2-5])

クラス定義 プログラマは断片クラスを定義 提供されるFractionクラスを継承 全体の一部のインデックス集合([0-10)など) のデータを持つものとして、対応するデータを用意 メソッドを記述 インデックス集合を引数に取る その断片内のデータには直接アクセスできる 外部のデータにはRMIによりアクセス class da::Fraction { whole_is : 全体のインデックス集合 own_is : その断片が保持するインデックス集合 … }

メソッド呼び出し 1 2 3 4 5 6 7 8 9 10 Proc. 0 [0-3] Proc. 1 [4-7] 集合全体に対しインデックス範囲を指定 保持するインデックス集合と重なりを取って 各断片でメソッドが呼び出される 返り値は当面サポートしない (マイグレーションを容易にするため・後述) Proc. 0 [0-3] Proc. 1 [4-7] Proc. 2 [8-10] 1 2 3 4 5 6 7 8 9 10 increment([2-3]) increment([4-5]) Array->increment([2-5])

メソッド呼び出し (例) DistributedArray : public da::Fraction{ data : 断片が保持するデータ 分散配列の要素をインクリメント 配分によらず要素[100-200)をインクリメント DistributedArray : public da::Fraction{   data : 断片が保持するデータ void increment(IndexSet *is){   foreach (index <- is){    data[index]++; } }; int main(){ … WholeArray->increment ([100-200));

マイグレーション (参加) プログラマはクラス定義時にsplit()・merge() ・serialize()・deserialize()を定義する 計算への参加 参加するプロセッサはjoin()を呼ぶ 断片の一つに要求が送られ、split()が呼ばれる 分割された断片を参加したプロセッサが受信 して、参加が完了する。 プロセッサA プロセッサB 空 join() split deserialize

マイグレーション (脱退) 計算からの脱退 脱退するプロセッサはleave()を呼ぶ そのプロセッサの断片はシリアライズされ、 他の断片を持つプロセッサに送信される 受信したプロセッサは断片を合併する プロセッサA プロセッサB 空 merge leave() serialize

返り値とマイグレーション 今回の実装では、RMIは返り値を取れない ⇒マイグレーション可能な機会を増やすため もしも返り値をサポートすると… 返り値を待ってブロックするスレッドが多発 通常の処理系では、ブロックしたスレッドがあるオブジェクトを移送できない マイグレーションが不可能になってしまう また、返り値を待つオブジェクトがsplitされたら… 双方に返り値が届けられるべき? 文脈があいまい

返り値とマイグレーション 返り値を用いない記述方法 メソッド呼び出し部で呼び出し元を分割 返り値は呼び出し元のオブジェクトのメソッドを呼び出す形で記述する class A{ void a_0(){ … B->b(this, a_1, own_is); } void a_1(int ret){ }; class B{ int b(Obj o, Method m, IndexSet is){ o->m(is, 100); class A{ void a(){ … ret = B->b(); } }; class B{ int b(){ return 100;

発表の流れ はじめに 既存モデル 提案モデル 実装 記述例・評価 まとめ 発表の流れです。 ここから背景として、本フレームワークが対象とする分散集合、およびそれを記述するための並列プログラミングモデルについて説明します。 次に本研究が提案する分散集合オブジェクトについて説明します、 これを用いたアプリケーションを記述しました。これを用いて行った性能評価を示します。 最後に、まとめと今後の課題を述べます。

処理系の実装 インデックスとプロセッサの対応表 Phoenixライブラリを利用 Phoenixの番号一つをインデックスに対応付け メソッド呼び出し インデックス集合を指定して呼び出し オブジェクトの種類から 中継

発表の流れ はじめに 既存モデル 提案モデル 実装 記述例・評価 CG法 N体問題 まとめ 発表の流れです。 ここから背景として、本フレームワークが対象とする分散集合、およびそれを記述するための並列プログラミングモデルについて説明します。 次に本研究が提案する分散集合オブジェクトについて説明します、 これを用いたアプリケーションを記述しました。これを用いて行った性能評価を示します。 最後に、まとめと今後の課題を述べます。

CG法 (偏微分方程式の数値解法) 二次元配列を分散保持 各断片は長方形領域に限定 以下をループ 端のデータを送信 (send_border()) 更新できる部分を更新 (update_inside()) 端を受け取って更新 (update_border()) 残差を集計 (ツリー使用) send_border(); update_inside(); update_border();

CG法の記述

◆ = ta[i+1] - ta[i], ■ = tb[i] - ta[i] 実行結果 (Mflops) 20000x20000の配列をn^2の   プロセッサで更新 ループ一回の時間から、計算と   処理系のオーバーヘッドを計測 逐次版では600MFlops・ 100台では400MFlops/台 for(i = 0; i < n; i++){ send_border(); update_inside(); update_border(); } ta[i] tb[i] ◆ = ta[i+1] - ta[i],  ■ = tb[i] - ta[i]

まとめ 分散集合オブジェクトの提案・実装を行った Index範囲を指定したメソッド呼び出し 断片のマイグレーションに対応 メソッド呼び出し時にメッセージが集中しない 容易な記述でプロセッサ増減に対応 偏微分方程式の解法 今後の課題 記述性の改善 (返り値のサポートなど)