This course exposes the role, challenges, and opportunities for compiler designers in the multicore era, and presents background and material necessary to address them. Compiler optimization is a traditional subject studied well for several decades. However, programmers' expectations and requirements have been continuously changing, and architectures have been evolving as well with parallelism and acceleration in various forms. Programmers would typically like to write less and obtain more performance. There is tremendous opportunity in high-performance compilation, a topic typically considered traditional and well-studied, in employing it to build the future languages, programming models, and compilers for high parallel performance.
This course will start with a classification of several existing approaches, their relative strengths and weaknesses. It will then discuss the fundamental principles and objectives involved in building any optimization or transformation framework (either for a compiler, a high-level code generator or a domain-specific language) to optimize for parallelism, locality and other criteria. The polyhedral framework will be used as an example to present this content in a unified way. A few domains and patterns of computations will be used to motivate the presented techniques throughout.
A tentative list of topics that will be covered:
(*) Evolution of micro-architectures and programming languages/models for high performance
(*) A classification of approaches used for parallel programming, and their relative merits and limitations
(*) Optimizing for multicore processors and accelerators
(*) Optimizations for parallelism, locality and storage; automatic parallelization, loop transformations
(*) State-of-the-art loop tiling techniques
(*) An example optimization framework: polyhedral framework
(*) High-Performance domain-specific languages (DSLs); design of DSL compilers
(*) A running case study for a few domains: image processing pipelines, deep neural networks, dense linear algebra and stencil computations
Uday Bondhugula is an Assistant Professor in the Department of Computer Science and Automation at the Indian Institute of Science in Bangalore, India. His research interests are in the development of programming and compiler/runtime technologies for multicore architectures with an emphasis on high performance and automatic parallelization, the design of domain-specific compilers, and the polyhedral compiler framework.
Before joining IISc, he was with the Advanced Compiler Technologies group at the IBM T.J. Watson Research Center, Yorktown Heights, New York. He received his PhD in Computer Science and Engineering from the Ohio State University, and his B-Tech in Computer Science and Engineering from the Indian Institute of Technology, Madras.