420 likes | 651 Views
Interprocedural Analysis and Optimization. Chapter 11, through Section 11.2.4. Introduction. Interprocedural Analysis Gathering information about the whole program instead of a single procedure Interprocedural Optimization
E N D
Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4
Introduction • Interprocedural Analysis • Gathering information about the whole program instead of a single procedure • Interprocedural Optimization • Program transformation modifying more than one procedure using interprocedural analysis
Overview: Interprocedural Analysis • Examples of Interprocedural problems • Classification of Interprocedural problems • Solve two Interprocedural problems • Side-effect Analysis • Alias Analysis
Some Interprocedural Problems • Modification and Reference Side-effect COMMON X,Y ... DO I = 1, N S0: CALL P S1: X(I) = X(I) + Y(I) ENDDO • Can vectorize if P • neither modifies nor uses X • does not modify Y
Modification and Reference Side Effect • MOD(s): set of variables that may be modified as a side effect of call at s • REF(s): set of variables that may be referenced as a side effect of call at s DO I = 1, N S0: CALL P S1: X(I) = X(I) + Y(I) ENDDO • Can vectorize S1 if
Alias Analysis SUBROUTINE S(A,X,N) COMMON Y DO I = 1, N S0: X = X + Y*A(I) ENDDO END • Could have kept X and Y in different registers and stored in X outside the loop • What happens when there is a call, CALL S(A,Y,N)? • Then Y is aliased to X on entry to S • Can’t delay update to X in the loop any more • ALIAS(p,x): set of variables that may refer to the same location as formal parameter x on entry to p
Call Graph Construction • Call Graph G=(N,E) • N: one vertex for each procedure • E: one edge for each possible call • Edge (p,q) is in E if procedure p calls procedure q • Looks easy • Construction difficult in presence of procedure parameters
Call Graph Construction SUBROUTINE S(X,P) S0: CALL P(X) RETURN END • P is a procedure parameter to S • What values can P have on entry to S? • CALL(s): set of all procedures that may be invoked at s • Resembles closely to the alias analysis problem
DO I = 1, N T = X(I)*C A(I) = T + B(I) C(I) = T + D(I) ENDDO This loop can be parallelized by making T a local variable in the loop PARALLEL DO I = 1, N LOCAL t t = X(I)*C A(I) = t + B(I) C(I) = t + D(I) IF(I.EQ.N) T = t ENDDO Copy of local version of T to the global version of T is required to ensure correctness What if T was not live outside the loop? Live and Use Analysis
Live and Use Analysis • Solve Live analysis using Use Analysis • USE(s): set of variables having an upward exposed use in procedure p called at s • If a call site, s is in a single basic block(b), x is live if either • x in USE(s) or • P doesn’t assign a new value to x and x is live in some control flow successor of b
Kill Analysis DO I = 1, N S0: CALL INIT(T,I) T = T + B(I) A(I) = A(I) + T ENDDO • To parallelize the loop: • INIT must not create a recurrence with respect to the loop • T must not be upward exposed (otherwise it cannot be privatized)
DO I = 1, N S0: CALL INIT(T,I) T = T + B(I) A(I) = A(I) + T ENDDO T has to be assigned before being used on every path through INIT SUBROUTINE INIT(T,I) REAL T INTEGER I COMMON X(100) T = X(I) END If INIT is of this form we can see that T can be privatized Kill Analysis
Kill Analysis • KILL(s): set of variables assigned on every path through procedure p called at s and through procedures invoked in p • T in the previous example can be privatized under the following condition • Also we can express LIVE(s) as following
Constant Propagation SUBROUTINE S(A,B,N,IS,I1) REAL A(*), B(*) DO I = 0, N-1 S0: A(IS*I+I1) = A(IS*I+I1) + B(I+1) ENDDO END • If IS=0 the loop around S0 is a reduction • If IS!=0 the loop can be vectorized • CONST(p): set of variables with known constant values on every invocation of p • Knowledge of CONST(p) useful for interprocedural constant propagation
Overview: Interprocedural Analysis • Examples of Interprocedural problems • Classification of Interprocedural problems • Solve two Interprocedural problems • Side-effect Analysis • Alias Analysis
Interprocedural Problem Classification • May and Must problems • MOD, REF and USE are ‘May’ problems • KILL is a ‘Must’ problem • Flow sensitive and flow insensitive problems • Flow sensitive: control flow info important • Flow insensitive: control flow info unimportant
Flow Sensitive vs Flow Insensitive A A B B R1 R2
Classification (continued) • A problem is flow insensitive iff solution of both sequential and alternately composed regions is determined by taking union of subregions • Side-effect vs Propagation problems • MOD, REF, KILL and USE are side-effect • ALIAS, CALL and CONST are propagation
Overview: Interprocedural Analysis • Examples of Interprocedural problems • Classification of Interprocedural problems • Solve two Interprocedural problems • Side-effect Analysis • Alias Analysis
Flow Insensitive Side-effect Analysis • Assumptions • No procedure nesting • All parameters passed by reference • Size of the parameter list bounded by a constant, • We will formulate and solve MOD(s) problem
Solving MOD • DMOD(s): set of variables which are directly modified as side-effect of call at s • GMOD(p): set of global variables and formal parameters of p that are modified, either directly or indirectly as a result of invocation of p
Example: DMOD and GMOD S0: CALL P(A,B,C) … SUBROUTINE P(X,Y,Z) INTEGER X,Y,Z X = X*Z Y = Y*Z END • GMOD(P)={X,Y} • DMOD(S0)={A,B}
Solving GMOD • GMOD(p) contains two types of variables • Variables explicitly modified in body of P: This constitutes the set IMOD(p) • Variables modified as a side-effect of some procedure invoked in p • Global variables are viewed as parameters to a called procedure
Solving GMOD • The previous iterative method may take a long time to converge • Problem with recursive calls SUBROUTINE P(F0,F1,F2,…,Fn) INTEGER X,F0,F1,F2,..,Fn … S0: F0 = <some expr> … S1: CALL P(F1,F2,…,Fn,X) … END
Solving GMOD • Decompose GMOD(p) differently to get an efficient solution • Key: Treat side-effects to global variables and reference formal parameters separately
Solving for IMOD+ • if • or • and x is a formal parameter of p • Formally defined • RMOD(p): set of formal parameters in p that may be modified in p, either directly or by assignment to a reference formal parameter of q as a side effect of a call of q in p
Solving for RMOD • RMOD(p) construction needs binding graph GB=(NB,EB) • One vertex for each formal parameter of each procedure • Directed edge from formal parameter, f1 of p to formal parameter, f2 of q if there exists a call site s=(p,q) in p such that f1 is bound to f2 • Use a marking algorithm to solve RMOD
X Y Z P Q IMOD(A)={X,Y} IMOD(B)={I} SUBROUTINE A(X,Y,Z) INTEGER X,Y,Z X = Y + Z Y = Z + 1 END SUBROUTINE B(P,Q) INTEGER P,Q,I I = 2 CALL A(P,Q,I) CALL A(Q,P,I) END Solving for RMOD (0) (0) (0) (0) (0)
X Y Z P Q IMOD(A)={X,Y} IMOD(B)={I} Worklist={X,Y} SUBROUTINE A(X,Y,Z) INTEGER X,Y,Z X = Y + Z Y = Z + 1 END SUBROUTINE B(P,Q) INTEGER P,Q,I I = 2 CALL A(P,Q,I) CALL A(Q,P,I) END Solving for RMOD (0) (1) (1) (0) (0)
X Y Z P Q RMOD(A)={X,Y} RMOD(B)={P,Q} Complexity: SUBROUTINE A(X,Y,Z) INTEGER X,Y,Z X = Y + Z Y = Z + 1 END SUBROUTINE B(P,Q) INTEGER P,Q,I I = 2 CALL A(P,Q,I) CALL A(Q,P,I) END Solving for RMOD (0) (1) (1) (1) (1)
Solving for IMOD+ • After gathering RMOD(p) for all procedures, update RMOD(p) to IMOD+(p) using this equation • This can be done in O(NV+E) time
Solving for GMOD • After gathering IMOD+(p) for all procedures, calculate GMOD(p) according to the following equation • This can be solved using a DFS algorithm based on Tarjan’s SCR algorithm on the Call Graph
Solving for GMOD p p 4 q 2 r q r 3 s 1 s Initialize GMOD(p) to IMOD+(p) on discovery Update GMOD(p) computation while backing up
Solving for GMOD p p 4 q 3 r q r 2 s 1 s Initialize GMOD(p) to IMOD+(p) on discovery Update GMOD(p) computation while backing up For each node u in a SCR update GMOD(u) in a cycle O((N+E)V) Algorithm
Overview: Interprocedural Analysis • Examples of Interprocedural problems • Classification of Interprocedural problems • Solve two Interprocedural problems • Side-effect Analysis • Alias Analysis
Alias Analysis • Recall definition of MOD(s) • Task is to • Compute ALIAS(p,x) • Update DMOD to MOD using ALIAS(p,x)
Update DMOD to MOD SUBROUTINE P INTEGER A S0: CALL S(A,A) END SUBROUTINE S(X,Y) INTEGER X,Y S1: CALL Q(X) END SUBROUTINE Q(Z) INTEGER Z Z = 0 END GMOD(Q)={Z} DMOD(S1)={X} MOD(S1)={X,Y}
Naïve Update of DMOD to MOD procedure findMod(N,E,n,IMOD+,LOCAL) for each call site s do begin MOD[s]:=DMOD[s]; for each x in DMOD[s] do for each v in ALIAS[p,x] do MOD[s]:=MOD[s] {v}; end end findMod • O(EV2) algorithm; need to do better
Update of DMOD to MOD • Key Observations • Two global variables can never be aliases of each other. Global variables can only be aliased to a formal parameter • ALIAS(p,x) contains less than entries if x is global • ALIAS(p,f) for formal parameter f can contain any global variable or other formal parameters (O(V))
Update of DMOD to MOD • Break down update into two parts • If x is global we need to add less than elements but need to do it O(V) times • If x is a formal parameter we need to add O(V) elements but need to do it only O( ) times • This gives O( V)=O(V) update time per call, implying O(VE) for all calls
Computing Aliases • Compute A(f): the set of global variables a formal parameter f can be aliased to • Use binding graph[with cycles reduced to single nodes] • Compute Alias(p,g) for all global variables • Expand A(f) to Alias(p,f) for formal parameters • Find alias introduction sites (eg. CALL P(X,X)) • Propagate aliases
Summary • Some Interprocedural problems and their application in parallelization and vectorization • Classified Interprocedural problems • Solved the modification side-effect problem and the alias side-effect problem