全体ミーティング (12/15) 村田雅之.

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
Scala + Liftフレームワーク その2.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
プログラミング言語としてのR 情報知能学科 白井 英俊.
全体ミーティング (4/25) 村田雅之.
Javaのための暗黙的に型定義される構造体
アルゴリズムとデータ構造1 2007年6月12日
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
全体ミーティング (6/13) 村田雅之.
アルゴリズムとデータ構造 2011年6月13日
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
Solving Shape-Analysis Problems in Languages with Destructive Updating
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
プログラミング言語入門 手続き型言語としてのJava
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
プログラミング言語入門.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
バイトコードを単位とするJavaスライスシステムの試作
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
JAVAバイトコードにおける データ依存解析手法の提案と実装
アルゴリズムとプログラミング (Algorithms and Programming)
マイグレーションを支援する分散集合オブジェクト
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
全体ミーティング (5/23) 村田雅之.
同期処理のモジュール化を 可能にする アスペクト指向言語
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
米澤研究室 全体ミーティング 2010/07/07 M2 渡邊裕貴.
アルゴリズムとデータ構造 2012年6月11日
アルゴリズムとプログラミング (Algorithms and Programming)
コレクション・フレームワーク J2EE I (データベース論) 第6回 /
コレクション・フレームワーク データベース論 第7回.
「マイグレーションを支援する分散集合オブジェクト」
サブゼミ第7回 実装編① オブジェクト型とキャスト.
アルゴリズムとデータ構造1 2009年6月15日
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
4.プッシュダウンオートマトンと 文脈自由文法の等価性
情報処理Ⅱ 第7回 2004年11月16日(火).
18. Case Study : Imperative Objects
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2010年6月17日
ソフトウェア工学 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
情報処理Ⅱ 2005年11月25日(金).
全体ミーティング(9/15) 村田雅之.
全体ミーティング (9/12) 村田 雅之.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
情報処理Ⅱ 小テスト 2005年2月1日(火).
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
情報処理Ⅱ 第8回:2003年12月9日(火).
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

全体ミーティング (12/15) 村田雅之

今日の内容 A Type and Effect System for Deterministic Parallel Java R. L. Bocchino Jr., V. S. Adve, D. Dig, S. V. Adve, S. Heumann, R. Komuravelli, J. Overbey, P. Simmons, H. Sung and M. Vakilian OOPSLA 2009

背景 マルチコアが普及してきた 並列プログラムは実行順が非決定的 しかし多くの場合で結果は決定的になる 難解なバグを生み出す ソート、暗号化など

やりたいこと 実行結果が決定的であることを保証したい 対象はオブジェクト指向の命令型言語 Java, C++, C# など

Type and effect system 型と同じようにヒープへのアクセスを記述 ヒープ領域の一部分に名前を付けて区別 ヒープへのアクセスをプログラム中に付記 単に ”effect system” とも

方針 effect systemを使って、実行結果が決定的であることを保証しよう コンパイル時に問題がないかチェックする 並列実行する命令のヒープへのアクセスが 互いに違う領域に行われていることを保証 →実行順序が入れ替わっても結果に影響しない Javaを対象に実装 C++版も作っているらしい

region ヒープ領域の一部をここではregionと呼ぶ Regionには名前をつける 異なる名前のregionは別のヒープ領域

effectの記述 Regionを宣言する Classのパラメータとしてregionを渡せる Line 2 Classのパラメータとしてregionを渡せる Line 1, 4, 5 各フィールドにデータが存在するregionを 指定する Line 4, 5 Regionはフィールドのひとつのように扱う

effect summary メソッド内で発生するeffectのsummaryを書く Readとwrite Writesはreadsを含む Line 6, 7

並列実行 cobegin{…} foreach(int i in 0,N){…} 中の文をすべて並列実行する Line 8-13では、2つの命令を並列に実行する foreach(int i in 0,N){…} 配列のすべての要素を並列にアクセスするような ときに使える

コンパイラのチェック メソッドに書かれているsummaryが正しいか 並列実行するブロック内の命令文のeffectが 違う領域に及ぶこと ローカル変数、finalなフィールドは無視する コンストラクタは調べない 返るまでは通常そのオブジェクトにアクセスされない 並列実行するブロック内の命令文のeffectが 違う領域に及ぶこと readだけであれば問題ない

Region Path List (RPL) Regionを階層構造で表現できる :でつながれたregion名のリスト Rootから始まる(省略可) 異なるRPLはそれぞれ異なるヒープ領域と対応

partially specified RPL ワイルドカードとして * を使うことができる *が入ったRPLはregionの集合を表す Figure 5の例では任意の深さの木に対応 できるようになっている

RPLの比較 ふたつのRPLが互いに素(disjoint)とは disjointな領域へのアクセスは実行順序が 結果に影響を及ぼさない 左からn個目まで同じでn+1個目が異なる 右からn個目まで同じでn+1個目が異なる それぞれ、n+1個目までの間に*を含まない A:B:C:* と A:B:D:* はdisjoint A:B:C:* と A:B:* はdisjointではない disjointな領域へのアクセスは実行順序が 結果に影響を及ぼさない 必ず別のヒープ領域へのアクセスになる

RPLの性質 R1 ≤ R2 R1 ≤ R2 ならば R1 ⊆ R2:* R1はR2の下にある (R1 is under R2) R2がR1のprefixになっているとき R1 ≤ R2 ならば R1 ⊆ R2:* R1 ⊆ R2 ではない A:B ≤ A A:* A A:B

subtypingでの利用 regionをパラメータにとるクラスのsubtypingを 考えることができる C<R1> ≤ C<R2> R1 ⊆ R2 のとき

配列の計算 2つの方法を用意 index-parameterized array subarray 用途に応じて使い分ける

index-parameterized array 配列のすべての要素について計算する場合 foreach 構文が使える 各ループでそれぞれ異なる領域にアクセス していることを示せばよい しかし、その配列が参照している先が同じか 判定するのは難しい

アクセスできるオブジェクトを制限する 対応するインデックスのついた領域にしか アクセスできないという制限を設ける インデックスが異なればdisjointな領域への アクセスになる

配列のregion 配列のi番目の要素があるregionは[i] 実行時にはiが異なるので違う領域になる

配列の型 T[] <R>#i e番目の要素は、[i ↦e]Rの領域に置かれる 型は[i ↦e]Tとなる T : 型 R : region のパラメータ #i : indexに使う変数を指定 これをindex-parameterized arrayと呼ぶ e番目の要素は、[i ↦e]Rの領域に置かれる 型は[i ↦e]Tとなる

例:Figure 7 C<[_]> [] <[_]> は C<[i]>[]<[i]>#iの略記 bodies[i] は [i] にある bodies[i].mass は [i]:M にある パラメータとして[i]が渡される iが異なれば別々のregionに存在する

index-parameterized arrayの制限 配列内で要素の移動ができない a[i] = a[j] など いったん C<[i]>[]<[i]>#i 型の配列から C<*>[] 型の配列にコピーして順番を入れ替えたのち C<[j]>[]<[j]>#j 型にコピーすれば入れ替えは 可能 コピーによるオーバーヘッド

subarray 配列を分割する方法 分割統治型のアルゴリズムに使える Figure 9

DPJArray DPJArray型を導入 部分配列(subarray)を表すことができる 開始点Sと長さLを持つ JavaのArrayのラッパー 部分配列(subarray)を表すことができる

DPJPartition 配列をsubarrayに分割するクラス コンストラクタにDPJArrayを渡すと、分割した結果が返ってくる いくつかの分割方法を指定できる

RPLの拡張 ひとつの配列を複数の方法で分割するかも finalのついたローカル変数zをRPLに書く thisを含む 分割方法を区別できる zが指すオブジェクトがあるregionを表す 実行時に決定される 分割した配列を表すことができる disjointなregionどうし

重複する領域 複数の分割があった場合、重複領域があるかもしれない 長さ10の配列aをz1が0-5,6-9に、z2 が0-4,5-9に 分割したときz1:[0]とz2:[1]はdisjointな領域を表すはずなのに重複した領域(a[5])を持つ

重複する領域 分割した配列があるregionは、z:[i]:*とする zは実行時に決定するものなので単純には 比較しない 右は*があるのでdisjointとはいえない

簡略化のannotation m commuteswith m’ invokes m’ with e 実際に入れ替わってもよいかは保証されない 他の方法で検証する必要がある invokes m’ with e effectの一種 メソッド中でmを呼び出すことを意味する commuteswithと組み合わせれば交換可能な 組み合わせが広がる

形式的な定義 ここではシンプルな言語を考える 制御構文がない 継承がない region名はglobalとする

Syntax Figure 11を参照 プログラムはregion定義とclass定義と実行部 RPLのsyntaxが定められる *は先頭には来ない、など

static semantics (1) regionパラメータの包含関係によるsubtyping Effectの包含関係などが定義される Figure 18, (SUBTYPE-CLASS) Effectの包含関係などが定義される Figure 19

static semantics (2) Typing Rules fieldや配列へのアクセスでeffectが発生 メソッド呼び出しで、invokes のeffectが発生 メソッドの引数をチェックするときには、仮に regionパラメータを与えている 実引数のパラメータに含まれるようなregion

dynamic semantics 実行文、実行前の環境、ヒープ状態から、 返り値のオブジェクト、実行後のヒープ状態、 発生したeffectを求める (e, dΓ, H) → (o, H’, dE) dはdynamicの意味 環境は変数の値と、regionパラメータの環境

evaluation rules Figure 21. Rf は*を含まない形のRPL クラスの引数にregionを渡す時に末尾の*は 削除される DYN-NEW-CLASS, DYN-NEW-ARRAY 実行時にregionが完全に表現される

soundness Preservation Noninteference 静的な型とeffectは動的なものと一致する type checkの結果を評価時に利用してもよい Noninteference disjointなRPL, Effectを定義する disjointなeffectは実行順序が入れ替わっても 実行後のヒープ状態は変わらない →実行結果が決定的である

並列実行構文 cobegin foreach 中の文を同時に実行して、暗黙のjoinを行う それぞれの式がdisjointなeffectを持てばよい foreach 各iを代入して同時実行 disjointであることは保証されている

実装 Deterministic Parallel Java (DPJ) 並列化はForkJoinTaskを採用 javac, javaを改造 並列化はForkJoinTaskを採用 Java7で追加される work stealingを行う DPJのソースコードをfork/joinを用いたJavaのソースコードに変換する

実験 以下のプログラムを書き換えて使用 並列マージソート モンテカルロ法(株価予測) IDEA暗号化 上2つはベンチマークから。作者が書き換えた Barnes-Hut のn体問題シミュレーション k-means クラスタリング 衝突判定アルゴリズム ゲームエンジンJMonkey

実行時間 実行環境:6-core Xeon×4, 48GB 逐次実行に比べての速度

実行時間

書き換えた量 デバッグするよりは書き換えたほうが楽? 書き換えを補助するツールがある(らしい)

まとめ 結果が決定的な並列プログラムの結果が 決定的になることを保証することができた type and effect systemを利用 RPL, Arrayなどを追加して拡張 soundnessを証明 表現力もあり、性能もよい