This course covers advanced compiler analysis and optimization techniques to improve the efficiency of programs on modern shared-memory multicore platforms.
These optimizations are applied at the program source level (e.g., to C++/C
code directly) to higher-level language constructs, e.g., loops, arrays, and
synchronization mechanisms. We will study program analysis techniques to detect opportunities of advanced optimizations and how to coordinate the relevant optimizations to support high performance computing in scientific domains.
Lecture 1: (July 7th) （循环的依赖关系与优化）
Introduction to loop dependence and Optimizations.
Optimizing for multi-core architectures; categorization of compiler optimizations; types of dependences; testing for dependence; dependence-based analysis and optimization.
Chapter 2-3. Optimizing Compilers for Modern Architectures: A Dependence-based Approach,
Ken Kennedy and Randy Allen, Morgan-Kauffman Publishers Inc.
Lecture 2: (July 8th) （循环与数组的内存性能）
The Memory Performance of Loops And Arrays.
Optimizing and tuning scientific codes; Categorization of reordering optimizations; modeling of cache efficiency; Loop Interchange, blocking, unroll&jam, unrolling, array copying, and scalar replacement.
Lecture 3: (July 9th) （在不同的层次寻找并行）
Exploring Parallelism at Different Levels.
Granularity of parallelism; Loop parallelization; Loop strip-mining and selection; recognition of reductions and private variables; Pipelining; loop distribution and fusion.
Lecture 4: (July 10th) （并行编程的模式）
Parallel Programming Patterns
Specialization of compiler optimizations for different types of computations; effective coordination of compiler optimizations.
Lecture 5: (July 11th) （新的优化创作以及性能调优）
Programmable Optimization And Empirical Tuning
How to develop your own compiler optimizations using POET, a scripting program transformation language developed to support programmable control of compiler optimizations and their empirical tuning.