I have pleasure in enclosing a copy of my recent report - DOC
Document Sample


1
論文紹介
2003.8.25 佐々政孝
Briggs, P., Cooper, K. D. and Simpson, L. T.:
Value Numbering,
Softw. Pract. Exper., Vol. 27, No. 6, pp. 701-724, 1997.
同名のテクニカルレポートCRPC-TR94517S, Rice University, Nov. 1994の方が詳し
い部分もある.
あらまし
value numbering ( 値 番 号 付 け ) の hash-based approach と , Alpern, Wegman,
Zadeckのpartitioning approach(分割アプローチ)の比較を行う.
hash-based approachは伝統的に単一基本ブロックや拡張基本ブロックに適用され
ていたが,我々は支配木に適用する改善法を示す.
partioning approachは値を合同クラス(congruence class)に分割し,ひとつの合
同な値の計算がそれと同じ値をもつ他の合同な値の計算を制御フローグラフ上で支
配するならその計算を除去するものである.我々はそれをavailable expressionや
Morel and RenvoiseのPRE(部分冗長除去, partial redundancy elimination)へ適用
する方法を示す.
本論文では,hash-basedとpartitioningのそれぞれの系譜について,各種の精密
化を示し,同一系譜内のいくつかについては,その間の優劣関係を示すことができ
る.しかし,hash-basedの系譜とpartitioningの系譜の間には優劣関係を示せない
.
これら多数のヴァリエーションについての実験結果を示す.
1.序論
value numberingのある種のものでは,代数的等価「i=i+0」を扱ったり,定数畳
み込みや定数伝播を行える.
value numberingでは,演算子とオペランドのvalue numberを使ったhashを用いる
ことが多い.以下それをhash-based法と呼ぶ.hash-based法はオンライン(その場
でプログラムを変換する)である.
partitioning法は,値の同値類である合同クラスを作る.二つの値は,同じ演算
子をもち,かつそのオペランドが合同であれば合同である.partitioningはオフラ
イン(全体を解析してからまとめてプログラムを変換する)である.partitioning
では,定数伝播や代数的同一性は扱えない.
2.value numbering
アルゴリズムは図1(略).
例は図2.
2
(ここは佐々の注)図2の左の例でのVNの動き(あらまし.実際は値が入る)
x VN[x] name
101 X+Y
A 101
B 101
102 1
A 102
C 101
103 2
B 103
104 3
C 104
D 101
左の例の変換結果(以下,←を=で代用)
A = X+Y
B = A
A = 1
C = B
B = 2
C = 3
D = X+Y
(注の終り)
SSA形式の方が再計算を避けられる.
3
支配木を用いたvalue numbering
支配,厳密な支配,直接支配,支配木の定義(略).
アルゴリズムは図4(略).支配木を親から子へ再帰的にたどる.このアルゴリ
ズムは,あらまし,支配木の親で同じ値をすでに計算してあるものは冗長なので消
去する,というものである.
φ関数のパラメタへの入力が支配木上でバックエッジになるような場合は,その
φ関数を扱おうとしても,そのφ関数のパラメタのvalue numberがまだ決まってい
ないので,扱えない.
支配木をたどるときは,制御フローグラフのreverse postorderでたどるとよい.
図5.(佐々注.図5のreverse postorderはたとえばB1, B2, B3, B4である)
この図5の支配木は次のとおり.
B1
B2 B3 B4
この図5で,B1, B2, B3, B4の順にたどる.B2では,c0+d0は,B2を支配するB1で
すでに計算されている.そこで,x0のvalue numberはv0(これを<v0>と書く),y0
のvalue numberも<v0>と覚えて,x0=c0+d0やy0=c0+d0は消去する.そして,後続節
B4のφのパラメタのu0を<u0>に,同じくx0とy0を<v0>に書き換える.
B4では,meaninglessなφ関数(パラメタの値番号が同じもの)やredundantなφ
関数(同一ブロックの他のφ関数と同じ値を計算するもの)は消去する.
オンラインで消去していることに注意.
単一の基本ブロックを対象にしたり,拡張基本ブロックを対象にしただけでは,
4
支配木を用いたこの方法のように冗長性を消すことはできない.
unified hash table
ルーチン全体に対して単一のハッシュ表を使うとさらに改善される.図7(略)
.ただし,オンラインではできなくなる.
3.value partitioning
Alpern, Wegman, Zadeck のpartitioningは,値の同値類である合同クラスを作る
.二つの値は,同じ演算子により計算され,かつそのオペランドが合同であれば合
同である.対象はSSA形式である.ふつうは最大不動点を取る.
partitioning法はオフライン(全体を解析してからまとめてプログラムを変換す
る)である.partioningでは,定数伝播や代数的同一性は扱えない.
partitioning algorithmは図8(略).最初は,演算子が同じものは同じ合同ク
ラスにおく.次に,ある合同クラス内のすべての要素の使用を調べ,オペランドが
異なる合同クラスに入っていたら,新しいクラスを作って分割する,という精密化
を繰り返す.
Rosen, Wegman, Zadeckのとは別だが,これをglobal value numberingと見ること
もできる.(?)
partitioningだけでは何も起こらないので,冗長性除去のためには,dominator-
based removalや,AVAIL-based removalや,PREが考えられる.
(佐々注.以下,SSA形式になっていない例も多いが,SSA形式だと思って読むの
がよいと思われる.)
dominator-based removal
図9で,B4のzの計算はB1のzの計算と同じで,かつB4はB1に支配されているので
,B4のzの計算は消せる.
AVAIL-based removal
図 1 0 左 で , x+y は す べ て 同 じ 合 同 ク ラ ス に 入 る . B4 で x+y が available
5
expressionなので,B4の代入文は除去できる.
dominator-basedで除去できるものは,AVAIL-basedでも除去できる.逆にAVAIL-
basedはdominator-basedより強力で,この図10の例ではB2もB3もB4を支配してい
ないので,dominator-basedではB4の代入文を除去できない.
我々の方法では,AVAILのデータフロー方程式で,lexical nameの代りにvalueを
扱う.また,SSA形式なのでkillが不要となり,方程式はずっと簡単になる(図11
,略).
partial redundancy elimination
部分冗長除去はMorel and Renvoiseに由来する.
例 は 図 12. B4での zの計算のコピーを B2に挿入すると, x+y の計算がfully
redundantになり,B4でのzの計算を除去できる.
図12左のB4でのzの計算は,そこにB2から来るときx+yがavailでないので,
AVAIL-based removalでは除去できない.
6
(まとめの図.この図だけは,テクニカルレポートからコピーした)
4.方法の比較
unified hash tableを用いたhash-based numberingとvalue partitioningは,効
果は似ているが,異なる種類の同値を発見し,(理論的には)どちらが優位とも言
えない.
図13の左でXとYの値が同じだったとする.partitioning法ではAとBが合同,Cと
Dが合同だとわかる.実際はA, B, C, Dはすべて0なのだが,partitioning法では(
値を計算しないので)そのことはわからない.一方,hash-based法では,XとYの値
が同じ値なら,A, B, C, Dがすべて0だとわかる.
この違いは,2つの手法で同値の概念が違うからである.hash-based法では値に
より同値を考え,同時に定数伝播もできる.Clickは,どのように最適化を組み合わ
せると,それぞれの最適化を個別に行うよりも強力になるかを論じた.
partitioning法では合同(演算子が同じでオペランドも同じ合同クラスに入る)
によって考え,代数的同一性は発見しない(1+1と2*1の同一性は発見できない).
一方,図13の右の例では,hash-based法でやるとX2がY2と等しいことを発見で
きない.なぜなら,X2やY2にvalue numberを付けるときには,X3やY3をまだ訪問し
7
ていないので,X2とY2に別のvalue numberを付けざるをえないからである.
partitioning法では,X2とY2が合同だと言え,したがってX3とY3も合同だと言え
る.これがうまく行くキーポイントは,初期化時に,同じ演算子で定義されるもの
は合同だと「楽観的」に仮定するからである.
逆に,hash-basedでは,どの値も等値でないという「悲観的」仮定から出発する
.
コード除去と移動
値による除去とlexical nameによる除去のどちらも優位とは言えない.SSA形式で
のφが邪魔をしたりすることがある.例は図14(略).
他の最適化との相互作用
冗長性を除去することにより必ずしも実行時間が減るわけではない.レジスタ割
当て,定数伝播やのぞき穴最適化など他の最適化などとの相互作用がある.図15
(略)は冗長性を多く除去したためにかえって遅くなる例である.
5.実験結果
図16に,hash-based value numbering法(AVAILとPREはunified table)による
冗長除去のランタイムの実行時間を示す.
詳しく言うと,これは我々のFortranコンパイラによる.中間言語はILOC(任意個
のレジスタを持ったRISCマシンのアセンブリ言語)である.すべての最適化はILOC
をもらってILOCに変換するUNIXフィルタになっている.実行されたILOC命令数を計
測した.図16の高さは,ILOC命令の動的カウントで,一番左が1になるように正
規化した.
この実験で示すのは,冗長除去部分だけを変えて計測したものだが,その他の最
適化として,global reassociation,大域定数伝播,大域のぞき穴最適化,無用命令
除去,演算の強さ軽減,copy coalescing,空の基本ブロック除去,を,ものによっ
ては2回以上,つねに行っている.value numberingはSSA形式で行っている.
図の説明:Singleは単一基本ブロックを対象としたもの,Extendedは拡張基本ブ
ロックを対象としたもの,Dominatorは支配木ベースの冗長除去,AVAILはavailable
expression情報をもとにした冗長除去,PREは部分冗長除去.
これからわかるように,SingleよりExtendedは有意に良い.DominatorとAVAILは
ほとんど差がない.PREはこれらより有意に良い.これには,PREが不変コードをル
ープ外に追い出すことが大きく効いている.
図18は,value partitioning法での実行時間を示す.DominatorとAVAILはあま
り差がなく,PREは有意に良い.
図20に,unified hash table法(hash-based法)とpartitioning法の比較を示
す.hash-based法は,ほとんどつねにpartitioning法より良い.その理由は,hash-
based法では定数畳み込みと代数的同一性を用いた簡単化を扱えるからである.これ
らはpartitioning法で見つかる大域的冗長性よりも実際にはもっと頻繁に起こるの
である.
表1(略)に,hash based法とpartition法のコンパイル時間の比較を示す.どの
例でもhash based value numbering法の方が速い.
8
6.まとめ
略
参考文献
[Alpern et al. 88] Alpern, B., Wegman, M. N. and Zadeck, F. K.: Detecting
equality of values in programs, ACM 15th Symposium on Principles of
Programming Languages, pp. 1-11, 1988.
[Briggs and Cooper 94] Briggs, P. and Cooper, K. : Effective partial
redundancy elimination, Proc. ACM SIGPLAN '94 Conf. on Programming Language
Design and Implementation, pp. 159-170, 1994.
[Click thesis 95] Click, C.: Combining analyses, combining optimizations,
PhD Thesis, Rice University, 1995.
[Cooper et al. 01] Cooper, K., Simpson, T. and Vick, C.: Operator Strength
Reduction, Trans. Prog. Lang. Syst., Vol. 23, No. 5, pp. 603-625, 2001.
[Morel and Renvoise 79] Morel, E. and Renvoise, C.: Global optimization by
suppression of partial redundancies, Comm. ACM, Vol. 22, No. 2, pp.96-103,
1979.
[Rosen et al. 88] Rosen, B.K., Wegman, M.N. and Zadeck, F.K.: Global Value
Numbers and Redundant Computations, ACM 15th ACM Symposium on Principles of
Programming Languages, 12-27, 1988.
[Wegman and Zadeck 91] Wegman, M.N., and Zadeck, F.K.: Constant propagation
with conditional branches, ACM Trans. Prog. Lang. Syst., 13, 2, 181-210,
1991.
9
10
11
12
(ポンチ絵)
(一般に,上は従来法,下へ行くほど精密で良い,<は右の方が良い)
[value numberingの系譜]
伝統的なvalue numbering(図2),値で比較
hash-based法,悲観的,オンライン
SSA上のvalue numbering(図2)
基本ブロック単位[Single]
拡張基本ブロック単位[Extended]
dominator-based AVAIL-based PRE-based
[Dominator](図5,16,17) [AVAIL](図20,21) [PRE](図20,21)
unified hash unified hash
dominator-based table table
unified hash table (オンライン不可?) 実験では最良
[Dominator](図7,20,21) の一つ
(オンライン不可)
[value partitioningの系譜](hash-basedと理論的優劣決められず.図13)
value partitioning, 合同(演算子が同じでオペランドが合同),
[Alpern, Wegman, Zadeck],SSA
楽観的, オフライン
dominator-based AVAIL-based PRE-based
removal ≒< removal < removal
[Dominator](図9) [AVAIL](図10) [PRE](図12)
(他に関連するもの)
伝統的AVAIL-based removal, lexical equality(図14:hash-basedと優劣決まらず)
Combining Optimization [Click 95]
[Gargi 02]
(実験結果)(<は右の方が良い)
[Single](hash-based) < [Extended](hash-based) <
[Dominator hash-based]≒[AVAIL hash-based]<[PRE hash-based]
これらのunified hash table法は下記より良い
[Dominator partitioning]≒[AVAIL partitioning]<[PRE partitioning]
Related docs
Get documents about "