Traditional array dependence analysis, which detects potential memory aliasing of array references, is a key analysis technique for automatic parallelization. Recent studies of benchmark codes indicate that limitations of analysis cause many compilers to overlook large amounts of potential parallelism, and that exploiting this parallelism requires algorithms to answer new questions about array references, not just get better answers to the old question of aliasing. We need to ask about the flow of values in arrays, to check the legality of array privatization, and about the conditions under which a dependence exists, to obtain information about conditional parallelism. In some cases, we must answer these questions about code containing nonlinear terms in loop bounds or subscripts. This article describes techniques for phrasing these questions in terms of systems of constraints. Conditional dependence analysis can be performed with a constraint operation we call the "gist " operation. When subscripts and loop bounds are affine, questions about the flow of values in array variables can be phrased in terms of a subset of Presburger Arithmetic. When the constraints describing a dependence are not affine, we introduce uninterpreted function symbols to represent the nonaffine terms. Our constraint language also provides a rich language for communication with the dependence analyzer, by either the programmer or other phases of the compiler. This article also documents our investigations of the practicality of our approach. The worst-case complexity of Presburger Arithmetic indicates that it might be unsuitable for any practical application. However, we have found that analysis of benchmark programs does not cause the exponential growth in the number of constraints that could occur in the worst case. We have studied the constraints produced during our analysis, and identified characteristics that keep our algorithms free of exponential behavior in practice.
|
7709
|
Computers and Intractability: A Guide to the Theory of NP-Completeness
– Garey, Johnson
- 1979
|
|
639
|
Efficiently Computing Static Single Assignment Form and the Control Dependence Graph
– Cytron, Ferrante, et al.
- 1991
|
|
441
|
Optimizing Supercompilers for Supercomputers
– Wolfe
- 1989
|
|
352
|
The omega test: a fast and practical integer programming algorithm for dependence analysis
– Pugh
- 1991
|
|
213
|
The Perfect Club Benchmarks: Effective Performance Evaluation of Supercomputers
– Berry, Chen, et al.
- 1989
|
|
157
|
The LRPD Test: Speculative Run-Time Parallelization of Loops with Privatization and Reduction Parallelization
– Rauchwerger, Padua
- 1995
|
|
156
|
Global value numbers and redundant computations
– Rosen, Wegman, et al.
- 1988
|
|
138
|
Parametric integer programming
– Feautrier
- 1988
|
|
114
|
Analysis of interprocedural side effects in a parallel programming environment
– Callahan, Cocke, et al.
- 1988
|
|
101
|
Loop Transformations for Restructuring Compilers: The Foundations
– Banerjee
- 1993
|
|
92
|
Array DataFlow Analysis and its Use in Array Privatization
– Maydan, Amarasinghe, et al.
- 1993
|
|
79
|
ªAn Evaluation of Exact Methods for Analysis of Value-Based Array Data Dependences,º
– Pugh, Wonnacott
- 1993
|
|
78
|
Dataflow Analysis of Scalar and Array References, Intl
– Feautrier
- 1991
|
|
74
|
Eliminating false data dependence using the omega test
– Pugh, Wonnacott
- 1992
|
|
72
|
Array Privatization for Parallel Execution of Loops
– Li
- 1992
|
|
71
|
The Omega Library Interface Guide
– Kelly, Maslov, et al.
- 1996
|
|
66
|
A practical decision procedure for arithmetic with function symbols
– Shostak
- 1979
|
|
62
|
Theorem proving in arithmetic without multiplication
– Cooper
- 1972
|
|
62
|
Interactive parallel programming using the ParaScope Editor
– Kennedy, McKinley, et al.
- 1991
|
|
59
|
Sh-uctured dataflow analysis for arrays and its use in an optimizing compiler
– Gross, Steenkiste
|
|
53
|
Fuzzy array dataflow analysis
– Collard, Barthou, et al.
- 1995
|
|
49
|
Symbolic dependence analysis for high-performance parallelizing compilers
– Haghighat, Polychronopoulos
- 1991
|
|
48
|
The privatizing doall test: A run-time technique for doall loop identification and array privatization
– Rauchwerger, Padua
- 1994
|
|
48
|
ªAutomatic Array Privatization and Demand-Driven Symbolic Analysis,º
– Tu
- 1995
|
|
47
|
Polaris: A New-Generation Parallelizing Compiler for MPPs
– Padua, Eigenmann, et al.
- 1993
|
|
41
|
A 2 2 pn upper bound on the complexity of presburger arithmetic
– Oppen
- 1978
|
|
39
|
Array privatization for shared and distributed memory machines
– Tu, Padua
- 1992
|
|
38
|
Uniform techniques for loop optimization
– Pugh
- 1991
|
|
35
|
On the automatic parallelization of the perfect benchmarks
– Hoeflinger, Padua
- 1998
|
|
33
|
Accurate Analysis of Array References
– Maydan
- 1992
|
|
30
|
Incremental Dependence Analysis
– Rosene
- 1990
|
|
28
|
Lazy array data-flow dependence analysis
– Maslov
- 1994
|
|
26
|
Going beyond integer programming with the omega test to eliminate false data dependences
– Pugh, Wonnacott
- 1995
|
|
25
|
The importance of direct dependence for automatic parallelism
– Brandes
- 1988
|
|
23
|
De-linearization: an efficient way to break multi-loop dependence equations
– Maslov
- 1992
|
|
23
|
Static and Dynamic Evaluation of Data Dependence Analysis
– Petersen, Padua
- 1993
|
|
21
|
Symbolic Analysis Techniques for Effective Automatic Parallelization
– Blume
- 1995
|
|
20
|
Optimization within a Unified Transformation Framework
– Kelly
- 1996
|
|
18
|
Detecting equality of values in programs
– Alpern, Wegman, et al.
- 1988
|
|
18
|
Experiences using the ParaScope Editor: an interactive parallel programming tool
– Hall, Harvey, et al.
- 1993
|
|
15
|
Simplifying polynomial constraints over integers to make dependence analysis more precise
– Maslov, Pugh
- 1994
|
|
14
|
Experience with constraint-based array dependence analysis
– Pugh, Wonnacott
- 1994
|
|
13
|
Dependence Analysis of Arrays Subscripted by Index Arrays
– McKinley
- 1990
|
|
13
|
Obtaining dependence vectors for nested-loop computations
– Ribas
- 1990
|
|
7
|
Fourier's elimination: Which to choose
– Imbert
- 1993
|
|
7
|
Dynamic Dependence Analysis: A Novel Method for Data Dependence Evaluation
– Petersen, Padua
- 1992
|
|
6
|
Experience in the automatic parallelization of 4 Perfect benchmark programs
– Eigenmann, Hoeflinger, et al.
- 1991
|
|
5
|
Theory and practice of parallelism detection in sequential programs
– Voevodin
- 1992
|
|
4
|
Undeciability of presburger arithmetic with a single monadic predicate letter
– Downey
- 1972
|
|
3
|
Practical issues on the projection of polyhedral sets. Annals of mathematics and artificial intelligence
– Huynh, Lassez, et al.
- 1992
|