Compiler Transformations for High-Performance Computing

Compiler Transformations for High-Performance Computing

December 1994 | DAVID F. BACON, SUSAN L. GRAHAM, AND OLIVER J. SHARP
This survey provides a comprehensive overview of high-level program restructuring techniques for imperative languages like C and Fortran, focusing on compiler transformations for high-performance computing. It covers both sequential and parallel architectures, explaining the purpose, legality, and application of various transformations. The survey is intended for programmers, students, and compiler writers, offering insights into optimization strategies and techniques. Optimizing compilers are essential for modern high-performance systems, translating programs into machine language and applying transformations to reduce execution time or size. As compilers become more effective, programmers can focus on higher-level constructs, while hardware designers can create more efficient architectures. The survey discusses various transformations, including data-flow-based loop transformations, loop reordering, restructuring, replacement, memory access, partial evaluation, and redundancy elimination. It also covers transformations for parallel machines, such as data layout, exposing parallelism, computation partitioning, communication optimization, SIMD, and VLIW transformations. Transformation frameworks and compiler evaluation methods are also discussed. The survey emphasizes dependence analysis, which is crucial for determining the legality and applicability of transformations. It introduces different types of dependences, including control and data dependences, and explains how they affect program execution. The analysis of loop-carried dependences is detailed, along with techniques for identifying and handling them. The survey also covers the use of subscript analysis to determine array references and their potential for dependence. It discusses various tests and algorithms for analyzing dependences, including exact and approximate methods. The transformations section highlights the importance of loop optimizations, as loops often account for a significant portion of execution time. Strength reduction, induction variable elimination, and loop-invariant code motion are discussed as key techniques for improving performance. The survey concludes with a discussion of machine models, including superscalar, vector, and multiprocessor architectures, and provides a framework for understanding and applying compiler transformations in high-performance computing.This survey provides a comprehensive overview of high-level program restructuring techniques for imperative languages like C and Fortran, focusing on compiler transformations for high-performance computing. It covers both sequential and parallel architectures, explaining the purpose, legality, and application of various transformations. The survey is intended for programmers, students, and compiler writers, offering insights into optimization strategies and techniques. Optimizing compilers are essential for modern high-performance systems, translating programs into machine language and applying transformations to reduce execution time or size. As compilers become more effective, programmers can focus on higher-level constructs, while hardware designers can create more efficient architectures. The survey discusses various transformations, including data-flow-based loop transformations, loop reordering, restructuring, replacement, memory access, partial evaluation, and redundancy elimination. It also covers transformations for parallel machines, such as data layout, exposing parallelism, computation partitioning, communication optimization, SIMD, and VLIW transformations. Transformation frameworks and compiler evaluation methods are also discussed. The survey emphasizes dependence analysis, which is crucial for determining the legality and applicability of transformations. It introduces different types of dependences, including control and data dependences, and explains how they affect program execution. The analysis of loop-carried dependences is detailed, along with techniques for identifying and handling them. The survey also covers the use of subscript analysis to determine array references and their potential for dependence. It discusses various tests and algorithms for analyzing dependences, including exact and approximate methods. The transformations section highlights the importance of loop optimizations, as loops often account for a significant portion of execution time. Strength reduction, induction variable elimination, and loop-invariant code motion are discussed as key techniques for improving performance. The survey concludes with a discussion of machine models, including superscalar, vector, and multiprocessor architectures, and provides a framework for understanding and applying compiler transformations in high-performance computing.
Reach us at info@study.space
Understanding Compiler transformations for high-performance computing