An Effectiveness Study of Parallelizing Compiler Techniques

Existing parallelizing compilers have been shown to detect and exploit only small portions of parallelism in real application programs. A core problem is the difficulty to collect sufficient information from the program to utilize the underlying multiprocessor architecture. Symbolic analysis is the key component to support compilers in parameterizing codes by the number of processors as well as array sizes and to enable performance analyzers examining programs with program unknowns. We present a variety of novel symbolic analysis techniques that are crucial for a new generation of parallelizing compilers and performance analysis tools to handle non-linear array index functions, complex loop bounds, and deal with unknown problem, array and machine sizes which is critical for programming languages such as High Performance Fortran. This includes counting solutions to a system of constraints, computing lower and upper bounds of symbolic expressions, and comparing symbolic expressions. We have implemented all of these techniques as part of a state-of-the-art parallelizing compiler and a performance estimator. Examples will be shown that demonstrate the effectiveness of our symbolic analysis.