Upload
ciaran-guy
View
16
Download
1
Embed Size (px)
DESCRIPTION
Modular Interprocedural Pointer Analysis Using Access Paths: Design, Implementation, and Evaluation. Ben-Chung Cheng and Wen-mei W. Hwu in proceedings of PLDI2000 発表者: gotoh. Pointer analysis とは?. プログラム中の各ポインタ変数がどのメモリ領域へのポインタを保持する可能性があるか. Pointer analysis の応用. 各種メモリまわりの最適化 - PowerPoint PPT Presentation
Citation preview
2001/5/23 AMO 発表資料 1
Modular Interprocedural Pointer Analysis Using Access Paths: Design, Implementation, and
EvaluationBen-Chung Cheng and Wen-mei W.
Hwuin proceedings of PLDI2000
発表者: gotoh
2001/5/23 AMO 発表資料 2
Pointer analysis とは?• プログラム中の各ポインタ変数がどの
メモリ領域へのポインタを保持する可能性があるか
2001/5/23 AMO 発表資料 3
Pointer analysis の応用• 各種メモリまわりの最適化
– redundant load/store elimination– loop-invariant location promotion– load/store schedulingetc.
上記に限らず何らかの最適化を行なう際に同様の手法を用いることになる(ことが多い ) ので、勉強することは非
常に重要
2001/5/23 AMO 発表資料 4
紹介論文の売り• Cの全ての feature を扱いつつ、大き
なプログラム (200,000 行 ) に対しても適用可能なアルゴリズム※ flow-insensitive だが context-
sensitive
2001/5/23 AMO 発表資料 5
今後の流れ• 解析方針• 解析方法
– Intraprocedural analysis– Interprocedural analysis
• 実験結果
2001/5/23 AMO 発表資料 6
解析の方針• Flow sensitive or flow insensitive• Context sensitive or context
insensitive• Whole-program or modular analysis• Storage- or path-based representation• Partial or complete language features
2001/5/23 AMO 発表資料 7
Flow sensitivity
• ポインタ代入の文の順番を考慮するか– flow sensitive … する
• より細かい解析が可能だが、重い– flow insensitive … しない
• おおざっぱな解析だが、軽い※ flow sensitive でもあまり効果ないとい
う指摘 [M.Hind and A.Pioli 1998]
flow insensitive を採用
2001/5/23 AMO 発表資料 8
Context sensitivity
• 呼び出し先が一緒でも呼び出し元が異なる場合を区別するか– context sensitive … する– context insensitive … しない※ 区別したところでいくつかのベンチマー
クでは効果は出ていない [E.Ruf 1995]
context sensitive だが、コストが低いように実装
2001/5/23 AMO 発表資料 9
Whole-program / modular analysis
• プログラム全体が与えられたとして全部を一度に解析するか、関数単位など部分毎に解析するか– whole-program
• リソースおよび時間のコストが大きい– modular
• コストは低いが無駄な解析をさけるための処理必要
2001/5/23 AMO 発表資料 10
Storage- / path-based representation
• メモリロケーションの表現方法– storage-based … 物理メモリアドレス
に対応した変数名で表現※ 曖昧さをさけるために同じ場所に複数の名前
をつけないようにする必要があることも…(大変)
– path-based … 最初にどの変数に指されていたかで表現
※ 同じ場所に対する2つ以上の表現あり
2001/5/23 AMO 発表資料 11
解析の流れPhase I'
Analyze local statements(flow-insensitive)
Phase OBuild accurate
call graph(context-insensitive)
Phase I''Propagete summary
transfer functions(context-insensitive)
Phase II'Propagete concrete
function names
Phase II''Propagate concrete values
Phase IIIDetermine parameter aliases
intraprocedural
interprocedural
2001/5/23 AMO 発表資料 12
Intraprocedural Analysis ( 図 )
typedef struct S { int *key; struct S *next;} S;
fn3(S *r, S *s){ r->next = s;}
r*.4_7
r
s
r*
s*
access path
summary transfer function(point-to relation グラフ )
ソースプログラム
2001/5/23 AMO 発表資料 13
Intraprocedural Analysis ( 文 )
• 入力:関数のソース– グローバル変数、引数、関数呼び出しの返
値は全て未初期化と仮定– flow-insensitive → 命令の順番は関係な
い• 出力:どの変数(ポインタ)がどの変
数(領域)を指す(可能性がある)かを表すグラフ、ほか
2001/5/23 AMO 発表資料 14
Access Path
• v( fd | d )*( f |ε)– v: 変数名– f: フィールド名
.< 開始オフセット >_< 終了オフセット > の形– d: dereference ( Cの `*` オペレータ)
(ex)
r ->nextr ->next->key
r*.4_7r*.4_7*.0_3
※ 計算方法は別紙の図1
プログラム中の表現 access path
フィールド名のかわりに開始・終了オフセットを
用いることで、 union にも対応
配列は要素の区別なし
2001/5/23 AMO 発表資料 15
Interprocedural Analysis
1. 関数のコールグラフの作成 … 以下の2ステップの反復
• main() からトップダウンに作成• summary transfer function をボトム
アップに伝播、コールグラフの更新グローバル変数、戻り値、実・仮引数の対応
2. (potential) aliasing の解析※ 本論文では詳細説明はない
2001/5/23 AMO 発表資料 16
Strongly Connected
Components-Directed Acyclic
Graph強連結成分有向非
環状グラフ?
コールグラフの作成• main() から深さ優先でコールグラフ作
成•生成したグラフを SCC-DAG に変換• SCC-DAG において summary transfer
function を topological 順序で伝播• 関数名を今度は top-down で伝播以上の手順をグラフが収束するまで反復
– 関数の間接呼び出しがない場合は1回で収束
2001/5/23 AMO 発表資料 17
summary transfer function 伝播
1. 各 SCC 内に複数の関数が含まれている場合、 SCC の中だけで収束するまで伝播
2. SCC 間で伝播
SCC
2. SCC 間での伝播1. SCC内での伝播
2001/5/23 AMO 発表資料 18
動的に確保された領域の扱い
※ malloc() のみ扱う• 領域名…一時変数名のかわりに
malloc_1(), malloc_2() ... のような名前– 数字は関数内で unique
•動的領域が caller に返されたら?– 他の動的領域と名前が重ならないの?
2001/5/23 AMO 発表資料 19
Extended Access Path
• An EAP can be considered as a reverse-engineered access path obtrained from DFS and indicates a potential way for the object to be accessed from a parameter or a global variable.
2001/5/23 AMO 発表資料 20
EAP の例(EAP を求めるアルゴリズムは別紙)
fn5(){ int *p1, *p2, *p3; my(&p1,&p2,&p3); *p1=1; *p2=2; *p3=3;}my(int**q1,int**q2,int**q3){ *q1=malloc(4); *q2=malloc(4); *q3=*q2;}
&p1 p1 p1*
&p2 p2 p2*
&p3 p3 p3*
q1 q1* malloc_1()*
q3 q3*
q2 q2* malloc_2()*
malloc_1()
malloc_2()
EAP=q1**
EAP=q2**
2001/5/23 AMO 発表資料 21
transfer function 伝播例&p1 p1 p1*
&p2 p2 p2*
&p3 p3 p3*
q1 q1* q1**
q3 q3*
q2 q2* q2**
malloc_1()
malloc_2()
&p1 p1 p1*
&p2 p2 p2*
&p3 p3
caller
callee
q1 → &p1q2 → &p2
2001/5/23 AMO 発表資料 22
実験• PentiumII-450MHz, 256MB メモリ ,
Linux(RedHat6.0)• 実験内容
– Analysis cost– Accuracy Measurement– Performance Improvements
2001/5/23 AMO 発表資料 23
Analysis CostsBenchmark
008.espresso023.eqntott026.compress072.sc085.ccl099.go124.m88ksim126.gcc129.compress130.li132.ijpeg134.perl147.vortex
Intra. Time(sec)
5.660.750.122.42
33.612.822.36
76.680.092.337.34
14.4315.08
Time(sec)20.200.990.483.15
277.670.213.54
520.850.10
149.5999.16
468.33166.90
Inter.Mem(MB)
14.262.811.936.34
79.228.138.09
238.001.26
30.5829.9751.1474.80
Total Time(sec)25.861.540.605.57
311.283.035.90
597.530.19
151.92106.50482.76181.98
•プログラムサイズ•複雑な構造体•キャスト
2001/5/23 AMO 発表資料 24
Accuracy (1/3)
• 2つの基準– 各ポインタの指すターゲットがいくつか?
• 1に近いほど良い– 各ターゲットはいくつのポインタから参照?
• 1に近いほど良い
※ 片方だけだと正しい判定とはいえない– 全てのポインタが一つのターゲットを参照
2001/5/23 AMO 発表資料 25
Accuracy (2/3)Benchmark008.espresso023.eqntott026.compress072.sc085.ccl099.go124.m88ksim126.gcc129.compress130.li132.ijpeg134.perl147.vortex
13071310
34662
9231312622
1614737
1576389728736768
2436115
146
16590
493679
2243766691121
34001
13384
03
7050
50135340
41
≧424706
1890
15451
04
23435
5
avg.1.161.311.081.121.261.001.151.311.051.191.231.621.03
11341165
21291
2527159562
448136
588316612054848
2329
306
88617
2488
10929
239829477671
3253
312
36607
535
7950
58201206214
≧4282
372
40980
2116
18520
126144543347
avg.1.761.771.521.622.011.461.292.001.201.731.382.041.35
target/pointer pointer/target
2001/5/23 AMO 発表資料 26
Accuracy (3/3)
flow-sensitive にすると解析精度が増す部分→ named_acyclic
たかだか 10%程度
2001/5/23 AMO 発表資料 27
Performance (1/2)
• base ... 全てのメモリアクセス、関数の副作用は曖昧
• std ... 関数内解析のみ• adv ... 関数間解析も利用
2001/5/23 AMO 発表資料 28
Performance (2/2)
2001/5/23 AMO 発表資料 29
関連研究 (1/3)
• [Landi et al.]– flow/context sensitive– 対象言語は C のサブセット
• [Emami et al.]– flow sensitive– ヒープオブジェクトの扱いがクリアでない– C のサブセット、関数ポインタも含む
2001/5/23 AMO 発表資料 30
関連研究 (2/3)
• [Choi et al.]– 実装・実験が明らかでない
• [Andersen]– 最悪で O(n3) なアルゴリズム– [Fahndrich et al.] によって、大きいプログラ
ムでも十分実用的になりうることが示された?• [Shapiro et al. ]
– [Andersen] と [Steensgaard] の混在した方法
2001/5/23 AMO 発表資料 31
関連研究 (3/3)
• [Hasti et al.]– SSA-form により、解析精度を反復進化?– 実験結果なし
• [Zhang et al.] [Stocks et al.]– さまざまなアルゴリズムを切り替えて使用
紹介論文… C の全性質に対応し 200000行以上のコードを解析できる最初の研究
2001/5/23 AMO 発表資料 32
まとめ• 効率的な C言語用の modular inter-
procedural pointer analysis algorithm を提案、実装した– context-sensitive なため、間接的な関数
呼び出しを多く含むプログラムに特に威力を発揮
– 実用的な効率