Fractal symbolic analysis

Modern compilers restructure programs to improve their efficiency. Dependence analysis is the most widely used technique for proving the correctness of such transformations, but it suffers from the limitation that it considers only the memory locations read and written by a statement without considering what is being computed by that statement. Exploiting the semantics of program statements permits more transformations to be proved correct, and is critical for automatic restructuring of codes such as LU with partial pivoting.One approach to exploiting the semantics of program statements is symbolic analysis and comparison of programs.In principle, this technique is very powerful, but in practice, it is intractable for all but the simplest programs.In this paper, we propose a new form of symbolic analysis and comparison of programs which is appropriate for use in restructuring compilers. Fractal symbolic analysis is an approximate symbolic analysis that compares a program and its transformed version by repeatedly simplifying these programs until symbolic analysis becomes tractable while ensuring that equality of the simplified programs is sufficient to guarantee equality of the original programs.Fractal symbolic analysis combines some of the power of symbolic analysis with the tractability of dependence analysis. We discuss a prototype implementation of fractal symbolic analysis, and show how it can be used to solve the long-open problem of verifying the correctness of transformations required to improve the cache performance of LU factorization with partial pivoting.

[1]  David W. Binkley,et al.  Program slicing , 2008, 2008 Frontiers of Software Maintenance.

[2]  Bruce W. Char,et al.  The maple symbolic computation system , 1983, SIGS.

[3]  Gene H. Golub,et al.  Matrix computations , 1983 .

[4]  Vadim Maslov Enhancing array dataflow dependence analysis with on-demand global value propagation , 1995, ICS '95.

[5]  Martin C. Rinard,et al.  Commutativity analysis: a new analysis technique for parallelizing compilers , 1997, TOPL.

[6]  Monica S. Lam,et al.  A data locality optimizing algorithm , 1991, PLDI '91.

[7]  Steve Carr,et al.  Compiler blockability of dense matrix factorizations , 1997, TOMS.

[8]  Zhaofang Wen,et al.  Automatic Algorithm Recognition and Replacement: A New Approach to Program Optimization , 2000 .

[9]  Robert D. Tennent,et al.  Semantics of programming languages , 1991, Prentice Hall International Series in Computer Science.

[10]  Keshav Pingali,et al.  Left-Looking to Right-Looking and Vice Versa: An Application of Fractal Symbolic Analysis to Linear Algebra Code Restructuring , 2000, Euro-Par.

[11]  Jan Willem Klop,et al.  Combinatory reduction systems , 1980 .

[12]  Ed Anderson,et al.  LAPACK Users' Guide , 1995 .

[13]  Ken Kennedy,et al.  The impact of interprocedural analysis and optimization in the Rn programming environment , 1986, TOPL.

[14]  Arthur J. Bernstein,et al.  Analysis of Programs for Parallel Processing , 1966, IEEE Trans. Electron. Comput..

[15]  William Pugh,et al.  An Exact Method for Analysis of Value-based Array Data Dependences , 1993, LCPC.

[16]  Paul Feautrier,et al.  Dataflow analysis of array and scalar references , 1991, International Journal of Parallel Programming.

[17]  KennedyKen,et al.  The impact of interprocedural analysis and optimization in the Rn programming environment , 1986 .

[18]  Paul Feautrier,et al.  Some efficient solutions to the affine scheduling problem. Part II. Multidimensional time , 1992, International Journal of Parallel Programming.

[19]  Randal E. Bryant,et al.  Graph-Based Algorithms for Boolean Function Manipulation , 1986, IEEE Transactions on Computers.

[20]  Constantine D. Polychronopoulos,et al.  Symbolic analysis for parallelizing compilers , 1996, TOPL.

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

[22]  Keshav Pingali,et al.  Data-centric multi-level blocking , 1997, PLDI '97.

[23]  William Pugh,et al.  A practical algorithm for exact array dependence analysis , 1992, CACM.

[24]  Monica S. Lam,et al.  The cache performance and optimizations of blocked algorithms , 1991, ASPLOS IV.

[25]  Michael E. Wolf,et al.  Combining Loop Transformations Considering Caches and Scheduling , 2004, International Journal of Parallel Programming.

[26]  Utpal Banerjee,et al.  A theory of loop permutations , 1990 .

[27]  Paul Feautrier,et al.  Some efficient solutions to the affine scheduling problem. I. One-dimensional time , 1992, International Journal of Parallel Programming.

[28]  Lawrence Rauchwerger,et al.  The LRPD test: speculative run-time parallelization of loops with privatization and reduction parallelization , 1995, PLDI '95.

[29]  Michael Wolfe,et al.  High performance compilers for parallel computing , 1995 .

[30]  Ronald L. Rivest,et al.  Introduction to Algorithms , 1990 .

[31]  Martin Griebl,et al.  A Precise Fixpoint Reaching Definition Analysis for Arrays , 1999, LCPC.

[32]  Luiz A. DeRose,et al.  Compiler techniques for MATLAB programs , 1996 .

[33]  Monica S. Lam,et al.  Data Dependence and Data-Flow Analysis of Arrays , 1992, LCPC.

[34]  William Pugh,et al.  The Omega test: A fast and practical integer programming algorithm for dependence analysis , 1991, Proceedings of the 1991 ACM/IEEE Conference on Supercomputing (Supercomputing '91).

[35]  D. Kozen,et al.  Equational Verification of Cache Blocking in LU Decomposition using Kleene Algebra with Tests , 2002 .

[36]  Carl A. Gunter Semantics of programming languages: structures and techniques , 1993, Choice Reviews Online.

[37]  Selmer M. Johnson Generation of permutations by adjacent transposition , 1963 .

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