Extending Index-Array Properties for Data Dependence Analysis

Automatic parallelization is an approach where a compiler analyzes serial code and identifies computations that can be rewritten to leverage parallelism. Many data dependence analysis techniques have been developed to determine which loops in a code can be parallelized. With code that includes indirect array accesses through what are commonly called index arrays, such data dependence analysis is restricted in the conclusions that can be drawn at compile time. Various approaches that use index array properties such as monotonicity have been shown to more effectively find parallel loops. In this paper, we extend the kinds of properties about index arrays that can be expressed, show how to convert loop-carried data dependence relations and relevant index-array properties to constraints that can be provided to the Z3 SMT solver, and evaluate the impact of using such index-array properties on identifying parallel loops in a set of numerical benchmarks.

[1]  Katherine Yelick,et al.  Automatic Performance Tuning and Analysis of Sparse Triangular Solve , 2002 .

[2]  Hongbo Rong,et al.  Automating Wavefront Parallelization for Sparse Matrix Computations , 2016, SC16: International Conference for High Performance Computing, Networking, Storage and Analysis.

[3]  Tomofumi Yuki,et al.  Sparse Matrix Code Dependence Analysis Simplification at Compile Time , 2018, ArXiv.

[4]  Leonardo Mendonça de Moura,et al.  Complete Instantiation for Quantified Formulas in Satisfiabiliby Modulo Theories , 2009, CAV.

[5]  Henny B. Sipma,et al.  What's Decidable About Arrays? , 2006, VMCAI.

[6]  Silvius Vasile Rus Hybrid analysis of memory references and its application to automatic parallelization , 2006 .

[7]  Robert E. Shostak,et al.  A Practical Decision Procedure for Arithmetic with Function Symbols , 1979, JACM.

[8]  Paul Feautrier,et al.  Fuzzy Array Dataflow Analysis , 1997, J. Parallel Distributed Comput..

[9]  Yunheung Paek,et al.  Simplification of array access patterns for compiler optimizations , 1998, PLDI.

[10]  Shoaib Kamil,et al.  Sympiler: Transforming Sparse Matrix Codes by Decoupling Symbolic Analysis , 2017, SC17: International Conference for High Performance Computing, Networking, Storage and Analysis.

[11]  William Pugh,et al.  Constraint-based array dependence analysis , 1998, TOPL.

[12]  Lawrence Rauchwerger,et al.  Hybrid Analysis: Static & Dynamic Memory Reference Analysis , 2004, International Journal of Parallel Programming.

[13]  David R. O'Hallaron,et al.  Languages, Compilers and Run-Time Systems for Scalable Computers , 1998, Springer US.

[14]  David A. Padua,et al.  Compiler analysis of irregular memory accesses , 2000, PLDI '00.

[15]  William Pugh,et al.  Nonlinear array dependence analysis , 1994 .

[16]  Tomás Vojnar,et al.  What Else Is Decidable about Integer Arrays? , 2008, FoSSaCS.

[17]  Timothy A. Davis,et al.  The university of Florida sparse matrix collection , 2011, TOMS.

[18]  Endong Wang,et al.  Intel Math Kernel Library , 2014 .

[19]  Larry Carter,et al.  An approach for code generation in the Sparse Polyhedral Framework , 2016, Parallel Comput..

[20]  Lawrence Rauchwerger,et al.  A Hybrid Approach to Proving Memory Reference Monotonicity , 2011, LCPC.

[21]  Lawrence Rauchwerger,et al.  Logical inference techniques for loop parallelization , 2012, PLDI.