Symbolic Program Analysis and Optimization for Parallelizing Compilers

A program flow analysis framework is proposed for parallelizing compilers. Within this framework, symbolic analysis is used as an abstract interpretation technique to solve many of the flow analysis problems in a unified way. Some of these problems are constant propagation, global forward substitution, detection of loop invariant computations, and induction variable substitution. The solution space of the above problems is much larger than that handled by existing compiler technology. It covers many of the cases in benchmark codes that other parallelizing compilers can not handle. Employing finite difference methods, the symbolic analyzer derives a functional representation of programs, which is used in dependence analysis. A systematic method for generalized strength reduction based on this representation is also presented. This results in an effective scheme for exploitation of parallelism and optimization of the code. Symbolic analysis also serves as a basis for other code generation optimizations such as elimination of redundant computations and restructuring of arithmetic expressions.

[1]  John Cocke,et al.  Programming languages and their compilers , 1969 .

[2]  Gary A. Kildall,et al.  A unified approach to global program optimization , 1973, POPL.

[3]  Philip M. Lewis B74-17 The Theory of Parsing, Translation, and Compiling - Volume II: Compiling , 1974, IEEE Trans. Computers.

[4]  Jeffrey D. Ullman,et al.  Application of lattice algebra to loop optimization , 1975, POPL '75.

[5]  Ben Wegbreit,et al.  Property extraction in well-founded property sets , 1975, IEEE Transactions on Software Engineering.

[6]  Jeffrey D. Ullman,et al.  Global Data Flow Analysis and Iterative Algorithms , 1976, J. ACM.

[7]  Jeffrey D. Ullman,et al.  Induction variables in very high level languages , 1976, POPL.

[8]  Matthew S. Hecht,et al.  Flow Analysis of Computer Programs , 1977 .

[9]  Ken Kennedy,et al.  An algorithm for reduction of operator strength , 1977, Commun. ACM.

[10]  Patrick Cousot,et al.  Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints , 1977, POPL.

[11]  John H. Reif,et al.  Symbolic evaluation and the global value graph , 1977, POPL.

[12]  John H. Reif Symbolic program analysis in almost linear time , 1978, POPL '78.

[13]  Nicolas Halbwachs,et al.  Automatic discovery of linear restraints among variables of a program , 1978, POPL.

[14]  Thomas E. Cheatham,et al.  Symbolic Evaluation and the Analysis of Programs , 1979, IEEE Transactions on Software Engineering.

[15]  John Randal Allen,et al.  Dependence analysis for subscripted variables and its application to program transformations , 1983 .

[16]  Lori A. Clarke,et al.  Applications of symbolic evaluation , 1985, J. Syst. Softw..

[17]  John R. Ellis,et al.  Bulldog: a compiler for vliw architectures (parallel computing, reduced-instruction-set, trace scheduling, scientific) , 1985 .

[18]  Mark N. Wegman,et al.  Constant propagation with conditional branches , 1985, POPL.

[19]  David A. Padua,et al.  Advanced compiler optimizations for supercomputers , 1986, CACM.

[20]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

[21]  John R. Ellis,et al.  Bulldog: A Compiler for VLIW Architectures , 1986 .

[22]  Ken Kennedy,et al.  Automatic translation of FORTRAN programs to vector form , 1987, TOPL.

[23]  Utpal Banerjee,et al.  Dependence analysis for supercomputing , 1988, The Kluwer international series in engineering and computer science.

[24]  Bowen Alpern,et al.  Detecting equality of variables in programs , 1988, POPL '88.

[25]  Steve Johnson,et al.  Compiling C for vectorization, parallelization, and inline expansion , 1988, PLDI '88.

[26]  M. Wegman,et al.  Global value numbers and redundant computations , 1988, POPL '88.

[27]  Milind Girkar,et al.  Parafrase-2: an Environment for Parallelizing, Partitioning, Synchronizing, and Scheduling Programs on Multiprocessors , 1989, Int. J. High Speed Comput..

[28]  Pierre Jouvelot,et al.  A unified semantic approach for the vectorization and parallelization of generalized reductions , 1989, ICS '89.

[29]  Barbara M. Chapman,et al.  Supercompilers for parallel and vector computers , 1990, ACM Press frontier series.

[30]  Williams Ludwell Harrison,et al.  Automatic recognition of induction variables and recurrence relations by abstract interpretation , 1990, PLDI '90.

[31]  Jong-Deok Choi,et al.  Automatic construction of sparse data flow evaluation graphs , 1991, POPL '91.

[32]  Alexandru Nicolau,et al.  Advances in languages and compilers for parallel processing , 1991 .

[33]  David A. Padua,et al.  Experience in the Automatic Parallelization of Four Perfect-Benchmark Programs , 1991, LCPC.

[34]  David A. Padua,et al.  Restructuring Fortran programs for Cedar , 1993, Concurr. Pract. Exp..

[35]  Mark N. Wegman,et al.  Efficiently computing static single assignment form and the control dependence graph , 1991, TOPL.

[36]  Milind Girkar Functional parallelism: theoretical foundations and implementation , 1992 .