静的単一代入形式に基づく最適化に関する研究

静的単一代入形式に基づく最適化
に関する研究
東京工業大学 大学院情報理工学研究科
佐々政孝
目標

静的単一代入形式(SSA形式)



データフロー解析や最適化を見通しよく行える
SSA形式に基づく変換と最適化をCOINSの低水準
中間表現LIRの上に組み込む

SSA形式への変換と逆変換

SSA形式上の種々の最適化と有用な変換
これにより,共通インフラストラクチャ を 教育,研究
用基盤として有用なものとする
設計と実装の方針
複数のアルゴリズムが知られているもの
→ 比較検討の上,採用するアルゴリズムを決定
 共通インフラストラクチャとして
→ 基本的な最適化を含める
 研究基盤として活用できることの例示
→ オリジナルなアルゴリズムによる最適化も含める
 アルゴリズムの比較評価のため
→ アルゴリズムのヴァリエーションをオプションで指定できる
教育・研究基盤として
→ 詳しい仕様書を提供,読解性・保守性のよいコーディング


SSA形式
a = x + y
a = a + 3
b = x + y
(a) 通常形式
a1 = x0 + y0
a2 = a1 + 3
b1 = x0 + y0
(b) SSA形式
SSA形式:各変数の定義が字面上一つ.
SSA形式
L1 a = 1
L3
L2 a = 2
… = a
(a) 通常形式
φ関数
L1 a1 = 1
L3
L2 a2 = 2
a3 = f(a1:L1,a2:L2)
… = a3
(b) SSA形式
SSA形式最適化の例
a = x + y
a = a + 3
b = x + y
a1 = x0 + y0
a2 = a1 + 3
b1 = x0 + y0
SSA変換
(b) SSA形式
(a) 通常形式
SSA形式最適化(共通部分式除去)
a1 = x0 + y0
a2 = a1 + 3
b1 = a1
(c) SSA形式最適化後
SSA逆変換
a1 = x0 + y0
a2 = a1 + 3
b1 = a1
(d) 最適化された通常形式
SSA形式では,データフロー解析や最適化が見通しよく行なえる.
静的単一代入(SSA)形式最適化の構成図
基盤部
ソース
プログラム
言語
解析
SSA最適化
LIR->SSA変換
(3種類のヴァリ
エーション)
高水準中間表現(HIR)
SSA形式LIR
HIR
to
LIR
低水準中間表現(LIR)
(通常形式LIR)
コード
生成
目的
コード
SSA最適化
コピー伝播
共通部分式除去
質問伝播大域値番号付
条件付定数伝播
無用命令除去
ループ不変式移動
帰納変数の最適化
SSA形式上の
有用な変換
危険辺の除去
無用φ除去
空ブロック除去
最適化された
SSA形式LIR
SSA->LIR逆変換
2種類
(1つは3種類のヴァリエーション)
+
合併(2種類)
約14,000行
SSA形式への変換
2 つ の 有 力 な アルゴリズム を プロトタイプ で 比 較 し ,
Cytron法(支配辺境を用いる)を採用.
変換時間 (milli sec)
900
800
700
600
500
Cytron
Sreedhar
400
300
200
100
0
0
1000
2000
3000
4000
通常プログラムの制御フローグラフのノード数
SSA形式から通常形式への
逆変換



主なアルゴリズム

Briggsらの方法

Sreedharらの方法
こ れ ら を 比較検討したところ,SSA逆変換の際に
挿入されるコピー文の数などからSreedharらの方
法が優位性があると認められた.
既存のコンパイラでは採用が稀であったが,
Sreedharらの方法を採用した.
その後この方針の妥当性が実
証された
Sreedhar法による目的コードの実行時間が最小
(後にBriggs法もCOINSに組み込んだ)
SSA最適化
(1)基本的な最適化
(共通インフラストラクチャとして基本的な最適化を含める)


コピー伝播,条件分岐を考慮した定数伝播,支配
関係に基づく共通部分式除去,無用命令除去,無
用φ命令除去,空ブロック除去,ループ不変計算
のループ外移動,ループの帰納変数に関わる演算
の強さの軽減と判定の置き換え.
この他,前処理として,ループ構造の変換(while型
ループを if-do-while型ループへ).
SSA最適化
(2)高度最適化

大域的再結合(global reassociation)

メモリ全体を一つの塊とみなす素朴な別名解析

効率的な質問伝播を用いた部分冗長性除去
(後者2つはこのSSA最適化部が研究基盤になる
ことの例示として新たに考案したものを入れた)
最適化の例 条件付定数伝播
i = 1;
j = 1;
k = 0;
while (k < 100) {
if (j < 20) {
j = i;
k = k + 1;
} else {
j = k;
k = k + 2;
}
}
printf("%d¥n",j);
k = 0;
while (k < 100) {
k = k + 1;
}
printf("%d¥n",1);
(in structured program style)
‘j’ が常に 1であることが解
析できる
whileの中の if-elseや黒字
の部分が削除される
SSA最適化部の評価 (SPEC CPU2000)
SUN Fire V440 (UltraSPARC III, 1GHz*4, メモリ8 GB).単位はsec.
gcc2
ssa1
ssa2
ssa3
ssa4
-------------------------------------------------------------------164.gzip
2.74
3.97
4.02
4.03
3.97
175.vpr
3.57
5.84
5.82
5.85
5.88
181.mcf
0.741
0.812
0.738
0.826
0.736
197.parser
5.12
6.73
6.77
6.82
6.72
254.gap
2.07
2.32
2.31
2.47
2.45
256.bzip2
9.99
26.6
26.3
26.6
26.3
300.twolf
0.489
0.623
0.622
0.645
0.623
171.swim
2.67
2.50
3.04
3.06
2.50
172.mgrid
78.2
108
123
123
107
173.applu
0.687
1.19
1.37
1.45
1.21
177.mesa
4.83
5.28
5.28
5.36
5.46
179.art
12.4
17.0
16.7
16.9
16.2
183.equake
3.00
3.13
3.32
3.17
3.34
188.ammp
18.5
24.0
22.4
22.6
23.4
-------------------------------------------------------------------gcc2:
ssa1:
ssa2:
ssa3:
ssa4:
gcc -O2 or g77 -O2
prun/divex/cse/cstp/dce/hli/osr/hli/cpyp/cstp/cse/cpyp/cstp/dce/ebe/srd3
prun/divex/cpyp/cse/cstp/dce/hli/cstp/osr/cse/cstp/cse/dce/cbb/ebe/srd3
prun/gra/divex/cpyp/cse/cstp/dce/hli/cstp/osr/cse/cstp/cse/dce/cbb/ebe/srd3
prun/divex/cse/cstp/hli/osr/hli/cstp/cse/dce/srd3
SSA最適化部の評価 (SPEC CPU2000)
SUN Fire V440 (UltraSPARC III, 1GHz*4, メモリ8 GB).単位はsec.
coins-noopt
coins-ssa
gcc2
------------------------------------------------------------------164.gzip
4.32
3.97
2.74
175.vpr
8.12
5.88
3.57
181.mcf
0.743
0.736
0.741
197.parser
6.73
6.72
5.12
254.gap
2.63
2.45
2.07
255.vortex
13.9
12.8
9.84
256.bzip2
28.2
26.3
9.99
300.twolf
0.671
0.623
0.489
171.swim
9.11
2.50
2.67
172.mgrid
851
107
78.2
173.applu
10.1
1.21
0.687
177.mesa
5.30
5.46
4.83
179.art
18.2
16.2
12.4
183.equake
4.17
3.34
3.00
188.ammp
29.6
23.4
18.5
------------------------------------------------------------------coins-ssa:
-coins:ssa-opt=prun/divex/cse/cstp/hli/osr/hli/cstp/cse/dce/srd3
gcc2:
gcc -O2 or g77 -O2
lu
SPECベンチマークの実行時間(相対比)
188
.am
ke
mp
183
.eq
ua
179
.art
177
.me
sa
173
.ap
p
300
.tw
ol f
171
.s w
im
172
.mg
rid
2
tex
256
.bz
ip
255
.vo
r
254
.g a
p
f
197
.pa
rs e
r
181
.mc
175
.vp
r
164
.g z
ip
SSA最適化部の評価 (SPEC CPU2000)
1.2
1
0.8
0.6
coins-noopt
coins-ssa
gcc-O2
0.4
0.2
0
SSA最適化の評価 考察




前図は他の最適化を適用せずにSSA最適化のみを適用した結果.
現時点では,SSA最適化の結果はgccの-O2オプションの結果に全
体としては及ばない.
その原因として,gccの目的コードではレジスタプロモーションや命
令スケジューリングがなされているが,これはSSA最適化だけでは
処理できないこと,SSA最適化は集合体を対象としていないこと,ま
た全体としてSSA最適化の結果には詰めが不十分な所が残ってい
ること,が挙げられる.
今後さらに検討する予定.
教育・研究への適用
■
教育への適用
■
■
■
■
COINSを用いたコンパイラの集中講義(2004年7月)内1日がSSA最適化
このときに用いた豊富な例題と使用法はウェブページで公開
COINSインフラストラクチャを用いた学士論文研究
研究への適用
■
■
効率的な質問伝播を用いた部分冗長性除去 [滝本ほか2005](前述).
もともとはCOINSの外のユーザ.のちに本システムに組み込んだ.
その他,本研究室の大学院生による研究も多い[伊藤ほか2005]
[須藤ほか2005] [溝渕ほか2005]
発表論文
査読付き論文・国際会議
 Sassa, M., Nakaya, T., Kohama, M., Fukuoka, T. and Takahashi, M.: Static Single
Assignment Form in the COINS Compiler Infrastructure, SSGRR 2003w, L'Aquila,
Italy, No. 54, (Jan. 2003).
 滝本宗宏, 武田正之: 一般支配関係の効率的な検査法, 情報処理学会論文誌:プログ
ラミング, Vol. 44, No.SIG16 (PRO20), pp. 28-40 (Dec. 2003).
 Sassa, M., Kohama, M. and Ito, Y.: Comparison and Evaluation of Back Translation
Algorithms for Static Single Assignment Form, in Proc. IPSI-2004 Prague, Czech,
ISBN: 86-7466-117-3 (Dec. 2004). (keynote at IPSI-2004 Prague)
 滝本宗宏,福岡岳穂,佐々政孝,原田賢一: 疎な要求駆動型データフロー解析,情報
処理学会論文誌:プログラミング, submitted for publication (2005).
 須藤大二朗,佐々政孝:比較照合法によるコンパイラ最適化器の正しさの検証,日本
ソフトウェア科学会第7回プログラミングおよびプログラミング言語ワークショップ
(PPL2005) 論文集,(2005年3月).
 溝渕裕司,立川英,佐々政孝:変更文の移動を可能にした静的単一代入形式上での
部分冗長性除去,日本ソフトウェア科学会第7回プログラミングおよびプログラミング
言語ワークショップ (PPL2005) 論文集,(2005年3月).
まとめ
■
■
■
■
■
■
当初の目標である,共通インフラストラクチャにおけるSSA形
式最適化の実現,は十分達成.
SSA形式への変換と逆変換については,いくつかの方法を比
較評価して,良いものを採用.
基本的なSSA形式最適化をほとんど実装.
ユーザがSSA形式の変換や最適化の種々のヴァリエーション
を用いたり,新しいモジュールを追加して,実験・評価を行え
るよう,十分な配慮を行った.
関連研究として,SSA形式最適化を組み込んだコンパイラは
いくつかあるが,インフラストラクチャとして使えるものは少な
い [Sassaほか2003のサーベイ].
これを教育,研究用基盤として用いて,SSA形式の研究の進
展が期待できる.
今後の課題
■
■
SSA最適化の効果がgcc等にまだ及ばない点を検討し,さらな
る改良を施す.
仕様書の英文化もほぼなされているので,海外への情報発
信に努める.
アクセス方法
COINSプロジェクトURL
http://www.coins-project.org/
からSSA最適化のページへ
概要
SSA最適化の例
SSA形式とは
SSA最適化の詳しいスライド
集中講義資料(デモ)
仕様書
論文発表資料