ABSTRACT:Today's multi-core era places significant demands on an optimizing compiler, which must parallelize programs, exploit the memory hierarchy and leverage the ever-increasing SIMD capabilities of modern processors. Existing model-based heuristics for performance optimization used in compilers are severely limited in their ability to identify profitable parallelism/locality trade-offs and usually lead to sub-optimal performance.
To address this problem, we distinguish optimizations for which effective model-based heuristics and profitability estimates exist from optimizations that require empirical search to achieve good performance in a portable fashion. We have developed a complete automatic framework in which we focus the empirical search on the set of valid possibilities to perform fusion/code motion, and resort to model-based mechanisms to perform tiling, vectorization and parallelization on the transformed program. We demonstrate the effectiveness of this approach in terms of strong performance improvements on a single target as well as portability of performance to different target architectures.