Solving Shape-Analysis Problems in Languages with Destructive Updating

Slides:



Advertisements
Similar presentations
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
Advertisements

復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
京都大学情報学研究科 通信情報システム専攻 湯淺研究室 M2 平石 拓
ラベル付き区間グラフを列挙するBDDとその応用
Step-by-Step Guide on How to Start ALICE Analysis
データ構造と アルゴリズム 理工学部 情報システム工学科 新田直也.
5.チューリングマシンと計算.
5.チューリングマシンと計算.
An Algorithm for Enumerating Maximal Matchings of a Graph
演習3 最終発表 情報科学科4年 山崎孝裕.
Natural Semantics 実行過程の、最初と最後の状態(state)の関係を考える。
データ構造と アルゴリズム 第二回 知能情報学部 新田直也.
F11: Analysis III (このセッションは論文2本です)
条件式 (Conditional Expressions)
情報教育論 第9回 仮定文の仕組み 政策・メディア研究科 岡田 健.
データ構造と アルゴリズム 知能情報学部 新田直也.
Probabilistic Method 6-3,4
2007/1/11 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
米澤研究室 全体ミーティング 2010/12/22 M2 渡邊裕貴.
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
大域的データフロー解析 流れグラフ 開始ブロック 基本ブロックをnodeとし、 基本ブロック間の制御関係をedgeとするグラフを、
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
二分探索木によるサーチ.
プログラミング言語入門 手続き型言語としてのJava
第25章 単一始点最短路 3節 Bellman-Fordのアルゴリズム
正規分布における ベーテ近似の解析解と数値解 東京工業大学総合理工学研究科 知能システム科学専攻 渡辺研究室    西山 悠, 渡辺澄夫.
決定木とランダムフォレスト 和田 俊和.
EclipseでWekaのAPIを呼び出す
人工知能特論 9.パーセプトロン 北陸先端科学技術大学院大学 鶴岡 慶雅.
Macro Tree Transducer の 型検査アルゴリズム
Anja von Heydebreck et al. 発表:上嶋裕樹
予測に用いる数学 2004/05/07 ide.
 型推論1(単相型) 2007.
依存型で型付けされた 副作用のある関数のための 型保存コンパイラ
計算量理論輪講 chap5-3 M1 高井唯史.
論文紹介 - Solving NP Complete Problems Using P Systems with Active Membranes 2004/10/20(Wed)
連続領域におけるファジィ制約充足問題の 反復改善アルゴリズムによる解法 Solving by heuristic repair Algorithm of the Fuzzy Constraint Satisfaction Problems with Continuous Domains 北海道大学.
ASIAN 2003 報告 前田俊行.
セキュリティ解析アルゴリズムの実現と オブジェクト指向言語への適用に関する一考察
 型推論3(MLの多相型).
JAVAバイトコードにおける データ依存解析手法の提案と実装
15.cons と種々のデータ構造.
データ構造とアルゴリズム 第11回 リスト構造(1)
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
統計ソフトウエアRの基礎.
補講:アルゴリズムと漸近的評価.
アルゴリズムからプログラムへ GRAPH-SEARCH
米澤研究室 全体ミーティング 2010/07/07 M2 渡邊裕貴.
第14回 前半:ラムダ計算(演習付) 後半:小テスト
Type Systems and Programming Languages ; chapter 13 “Reference”
``Exponentiated Gradient Algorithms for Log-Linear Structured Prediction’’ A.Globerson, T.Y.Koo, X.Carreras, M.Collins を読んで 渡辺一帆(東大・新領域)
プログラミング言語論 第10回 情報工学科 篠埜 功.
アルゴリズムとデータ構造 第2章 リスト構造 5月24日分
発表者: 稲葉 一浩 複雑ネットワーク・地図グラフ セミナー 2017/1/19
18. Case Study : Imperative Objects
全体ミーティング 2010/05/19 渡邊 裕貴.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
コンパイラ 2012年10月11日
PROGRAMMING IN HASKELL
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
全体ミーティング(9/15) 村田雅之.
計算の理論 I プッシュダウンオートマトン 月曜3校時 大月 美佳 平成15年7月7日 佐賀大学知能情報システム学科.
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
Static Enforcement of Security with Types
グラフの帯域幅連続多重彩色 を求めるアルゴリズム (Bandwidth Consective Multicolorings of Graphs) 西関研究室 西川和秀.
Presentation transcript:

Solving Shape-Analysis Problems in Languages with Destructive Updating 増山 (米澤研究室) 小野 (西田研究室)

参考文献 Mooly Sagiv et al , Solving Shape-Analysis Problems in Languages with Destructive Updating ACM Transactions on Programming Languages and Systems , 1998

概要 Shape-Analysisとは? 理論 / 解析アルゴリズム 解析の利点、欠点 解析の安全性(safety) 応用 / まとめ DSG SSG 変換関数 / interpretation 解析の利点、欠点 解析の安全性(safety) 応用 / まとめ

Shape-Analysisとは?

Shape-Analysisとは? データの形を静的に解析 入力が リストならば出力もリストを保証 木ならば出力も木を保証 Pointer-Analysis , Alias-Analysis , Type Checking の問題を解くことができる

用途 デバッグツールとして使用 並列化に使用 共有されないデータを見つける

簡単な例: リストのreverse

簡単な例: リストのreverse

簡単な例: リストのreverse

理論 / 解析アルゴリズム

対象言語 破壊的代入を伴うimperativeな言語 Cons-cell を扱う x : = nil x.sel := nil (sel ∈ { car, cdr }) x := new x := y x.sel := y x := y.sel kill generate

プログラムの形式化 プログラムはControl-flow Graph (V,A)で表現 (V.. vertex, A .. arc) 制御の流れを示す

Shape Graph <Ev,Es> ノード 変数 PVar メモリのセルを表す shape_node car,cdrというセレクタを持つ 枝 変数から出る枝 variable-edge (Ev) shape_nodeから出る枝 selector_edge (Es)

DSG: deterministic shape-graph 定義 |Ev(x)| ≦ 1 (x ∈ PVar) |Es(n,sel)| ≦ 1 (n ∈ shape_nodes) DSGのクラスをDSGと書く 実行時のメモリ状態を表現する

Concrete Semantics [] : DSG → DSG

DSGとControl-Flow Graphの 関係

Collecting Semantics 定義 cs: V → 2DSG あるプログラムポイントでの実現しうるメモリ状態全ての集合

SSG: Static Shape-Graph 定義 Shape-Graph(SG#)と、shape_nodeの共有状態を表す真偽値関数(is#)とのペア(<SG#, is#>) shape_nodeは変数の集合で名前付けされている (例 n{x,y,z}) SSGのクラスをSSGと書く あるプログラムポイントでのメモリ状態を抽象化している

DSGとSSGとControl-Flow Graphの関係

DSGからSSGへの変換 定義 β: DSG → SSG β(l) : shape_node間の変換 DSG上でlを指す変数集合で名前付け is#(n) : SSGのshape_node→{true,false} iis[Es](l) = |{<*,*,l>∈Es}| ≧ 2 is#(n) =

変換の例 x y z w n{w,y} n{z} nφ n{x}

複数のDSGのマージ α: 2DSG→SSG

DSGのマージの例

Concrete and Abstract Properties

Safe Approximation 定義 DSGでpが成り立つならば、SSG上でもp#が成り立つ compatible , = などはSafe Approximationである その対偶である!p# ⇒ !pが重要

Abstract Interpretation DSG SSG Abstract Interpretation DSG SSG Abstract Interpretation SSG

Abstract Semantics 定義 []#: SSG → SSG x := nil x.sel := nil x := new x := y x.sel := y x := y.sel それぞれの文について定義する

x := nil {v7 : t1 := nil}

x.sel := nil {v11 : y.cdr := nil}

x := new 新しく共有されていないshape_nodeを作成 Evに新たな枝 [x,n{x}]を加える

x := y {v6 : y := x}

x.sel := y {v12 : y.cdr := t}

x := y.sel {v8 : t1 := x.cdr}

Shape-Analysis Algorithm  Control-Flow Graphの各頂点に対して上の式から計算 できるleast fixed pointを求める  反復法  SSGのshape_nodeは2|Pvar|で抑えられ、反復によって、 枝数は単調に増加する ⇒ 解析は停止する

データタイプを表すSSG

Concretization Function 定義 γ: SSG → 2DSG SSGから実現されうるDSGの集合

この解析の利点、欠点

Strong nullification

e.cdr := t iis#(n{t}) = true n{y,z},n{x,y}からn{t}へ の枝が消せる ⇒ iis#(n{t}) = false ⇒ is#(n{t}) = false

この解析の問題点 nφが多くのノードを抽象化 ノード数がプログラムの変数の数の指数オーダー 精度を落とす原因 nφをより詳しく分類する 分岐が多いプログラムでは特に問題 精度は落ちるがノード数を減らした解析は可能

解析の安全性 (safety)

安全性 Local Safety ∀SG∈DSG,st Grobal Safety ∀v ∈ V (vはControl-Flow Graphのvertex) の定義 SGi# = <<Evi#,Esi#>,isi#>

安全性の証明の流れ

応用 / まとめ

応用 Aliasesの発見 共有されうるデータの発見 あるプログラムポイントvで、2つのアクセスパスe1,e2が 同じcons-cellを指すような実行があるか? (may) 必ず同じcons-cellを指すか? (must) 共有されうるデータの発見

まとめ Shape-Analysis ヒープの状態を静的に解析 変数のaliasingを正確に追うことである程度正確な解析が可能 状態数の抑制と精度のトレードオフあり