Upload
diamond
View
39
Download
2
Embed Size (px)
DESCRIPTION
Global Optimization by Suppression of Partial Redundancies について. 野崎 晋也. 部分冗長性除去 (PRE) とは. PRE:Partial Redundancy Elimination プログラム内において不要な部分を取り除く 最初に提案したのは E. Morel and C. Renviose - PowerPoint PPT Presentation
Citation preview
Global Optimizationby Suppression of
Partial Redundanciesについて
野崎 晋也
部分冗長性除去 (PRE) とは
• PRE:Partial Redundancy Elimination
• プログラム内において不要な部分を取り除く
• 最初に提案したのは E. Morel and C. Renviose– Global Optimization by Suppression of Partial Re
dundanciesCommunications of the ACM, 22(2):96--103, February 1979
概要
• 冗長な計算の除去と、不変な計算のループ外への移動は別に行われる事が多い
• 2 回実行される部分の削除によって、上記 2 つを一度にやり、最外ループへ移動
• プログラムの形に関係なくコストはほぼ線形
Local Properties(1)
• ブロック i 内のある expression( 式 ) に対して– Transparency:TRANSP
• ブロック i 内のコマンドの実行によって、その式のオペランドに修正がなければその式は“ transparent” ・・・
y=c+dx=a+b
z=e・・・
青の式のオペランドに対する
変更文がない
Local Properties(2)
• ブロック i 内のある expression( 式 ) に対して– Local Availability:COMP
• ブロック i 内に最低 1 つ式の計算があり、その式の最後の計算より後に出てくるコマンドがオペランドを修正しなければ“ locally available”・・・
a=cx=a+b
z=e・・・
・・・a=cz=e・・・
x=a+b
Local Properties(3)
• ブロック i 内の expression( 式 ) に対して– Local Anticipability:ANTLOC
• ブロック i 内に最低 1 つ式の計算があり、その式の最初の計算より前に出てくるコマンドがオペランドを修正しなければ“ locally anticipated”
・・・z=e
x=a+ba=c・・・
x=a+b・・・
z=ea=c・・・
Global Properties(1)
• I の入口挿入点で上安全であるのは、 I のすべての先行ブロックが、出口計算を持つか出口挿入点で上安全である場合
• ※ 開始ノードでは上安全ではない
• I の出口挿入点で上安全であるのは、 I に変更文がなく、かつ、 I に入り口計算があるかI の入口挿入点で上安全である場合
Availability= 上安全 (up-safe)
上安全の例
I
x=a+b x=a+b
• プログラムの入口から I に達するどの道にも同じ値を与える計算がある場合
Global Properties(2)Anticipability= 下安全 (downsafe)
• I の入口挿入点で下安全であるのは、 I に入口計算があるか、 I の出口挿入点で下安全かつ I に変更文がない場合
• I の出口挿入点で下安全であるのは、 I に出口計算があるか、 I のすべての後続ブロックの入口挿入点で下安全である場合
• ※ 後続ブロックがない場合は、後続ブロックは下安全ではないと考える
• I からプログラムの出口へのどの道へも同じ値を与える計算がある ( 変更文を通らずにその計算に達する )
下安全の例
x=a+b x=a+b
I
Global Properties(3)
Global Utilization of Partial Redundancy Elimination
• The steps of the algorithm are as follows:– (a)Resolution of the Boolean systems for availability ,
anticipability , and partial availability.
– 上安全、下安全、そして部分的に上安全である場所の決定
Global Utilization of Partial Redundancy Elimination
• The steps of the algorithm are as follows:– (b)Determination of predecessors of the blocks containi
ng the partial redundancies and where a new computation may be introduced. This involves the computation of the Boolean properties PPIN and PPOUT (Placement Possible on Entry and Placement Possible on Exit).
– 部分冗長を含み、新しい計算を挿入できる先行ノードの決定
Determination of PPIN and PPOUT
• PPIN の決定の為の各 block i の CONSTi
– CONSTi :
• 各 block の PPIN/PPOUT
Global Utilization of Partial Redundancy Elimination
• The steps of the algorithm are as follows:– (c)Determination of a subset of these blocks on exit of
which a computation must be inserted. These blocks satisfy the Boolean property INSERT.
– プログラム中の各 block i の INSERTi
Global Utilization of Partial Redundancy Elimination
• The steps of the algorithm are as follows:– (d)Insertion of new computations at the exit of the bloc
ks satisfying INSERT = TRUE and suppression of the partially redundant computations which are now redundant.
– その後、 INSERT=TRUE を満たす部分に新たな計算を挿入
– を満たすものは部分冗長から冗長に→除去可能
a+b
a+b
a+b
a+b
a+b aa+b
a
Local Boolean Properties.ANTLOC is TRUE for nodes 6,7,8,9; FALSE elsewhere.COMP is TRUE for nodes 6,7,8,9; FALSE elsewhere.TRANSP is FALSE for node 4; TRUE elsewhere.
Global Boolean Properties(obtained by resolution of Boolean Systems).ANTIN is FALSE for nodes 1,2,4; TRUE elsewhere.AVOUT is TRUE for nodes 6,7,8,9; FALSE elsewhere.PAVIN is FALSE for node 1; TRUE elsewhere.
Value of PPIN and PPOUT (obtained by resolution of Boolean Systems).
PPIN is FALSE for nodes 1,2,3,4; TRUE elsewhere.
PPOUT is FALSE for nodes 1,2,8,9; TRUE elsewhere.
Computation of INSERT.
INSERT is TRUE for nodes 3,4; FALSE elsewhere.
Insertion and Suppression of Computations.ANLOC . PPIN is TRUE for nodes 6,7,8,9;FALSE elsewhere.
Lazy Code Motion
M2 小川健一
従来の PRE 技術• PRE のアルゴリズムはデータフロー方程式を
分析する• データは前向きの流れと、後向きの流れ、両
方向分析が主流 →しかし最もよい手法でも O(n^2)• 1979 年ビットベクトルアルゴリズムが生み出
される( Morel 等) →単方向分析に変化 →計算量が O(n log n) に
予備変数を利用し、出来るだけ前で計算(Busy な手法 )
PRE のアルゴリズムのひとつ• Code Motion→ 不必要な再計算を避け効率のよい改良を行う技術
問題点・過剰なレジスタプレッシャーを引き起こす →予備変数を長時間保持してしまう解決策
・ lazy な方法を用いる ( 安全かつ適当なところで計算 )
Busy Code Motion の特徴• 単方向分析 →計算量は O(n log n)• コードの安全性の保ちながら改良 → 2 つの集合 (D-safe,Earliest) を求めてコード移
動を• 出来るだけ前で計算を行う ○→冗長な計算の多くを削除できる ×→ レジスタを長く占有する可能性がある →不必要なコード移動の存在
Code Motion (Busy) の具体例
a=x+y
a=x+y
a=x+y
1
23
4 5
6
7
h=x+y
a=h
a=h
a=h
1
23
4 5
6
7
ブロック1から7まで変数 h,x,y がレジスタを占有
Lazy Code Motion の特徴• 単方向分析 →計算量は O(n log n)• コードの安全性の保ちながら改良 →4つの集合 (D-safe,Earliest,Latest,Isolated) を求めてコード移動を• 可能な限り遅く計算を行う ○→レジスタプレッシャーの軽減 →不必要なコードを除去できる ×→ 正確な除去が出来ない
Code Motion (Lazy) の具体例
a=x+y
a=x+y
a=x+y
1
3
4 5
6
7
a=x+y
h=x+ya=h h=x+y
a=h
1
3
4 5
6
7
レジスタ占有時間を減らすことに成功
2 2
Code Motion Algorithm0. 危険辺の除去1.v を変数、 t を計算式、 G(N,E,s,e) をフローグラフ
とする2.Used 、 Transp を求める3.D-Safe 、 Earliest を求める( busy なら 4 、 Lazy
なら 5 へ)4. コードの変形を行う → Busy5.Delay を求める6.Isolated 、 Latest を求める7.OCP 、 RO を求めコードの変形を行う → Lazy
安全なポイントをさがすために
• 危険辺 (Critical Edge) の除去
a=x+y
b=x+y
h=x+ya=h
b=h
h=x+y
1 2
3
1 2
3
4
Used Transp の計算• 両値ともに T か F で表現されるため、ノード1つに
必要な情報量は 1 ビット• Used :対象式 t がノード N に含まれていれば True• Transp :透過性の意、対象式が x+y の時にノード N
に x や y への代入文が含まれていないと True
Used(n,t´) = t´ ∈ SubTerms(t)Transp(n,t´) = v ∈ Var(t´)
集合計算1
The Busy Code Motion Transformation
• 対象計算式 t のために新たな変数 h を作成
• D-Safe と Earliest を満たすノード全ての入口部分に h = t を挿入
• 全ての対象計算式 t を h で置換する
集合計算2
The Lazy Code Motion Transformation
• 対象計算式 t のために新たな変数 h を作成
• OCP を満たすノード全ての入り口部分に h = t を挿入
• RO を満たすノード全てに計算式 t を h で置換OCP = { n|Latest(n)∧ ¬ Isolated(n) }
RO = { n|Used(n)∧ ¬ (Latest(n)∧Isolated(n)) }
OCP ( optional computation point ) RO ( redundant occurrence )