Course Description
This course will focus on advanced techniques for program optimization and verification, with a focus on multicore processors and concurrency.  We will begin with classical topics such as interprocedural and intraprocedural dataflow analysis, abstract interpretation, and optimization techniques for modern uniprocessors. Then we will discuss multicore processors, and study techniques such as dependence analysis, loop transformations, points-to analysis, and shape analysis for optimizing the execution of regular and irregular programs on multicore processors. The last part of the course focuses on automatic program verification techniques.

Prerequisites: An undergraduate compiler course or permission of instructor. Programming experience in the context of a larger system is helpful.

Coursework: There will be written assignments as well as programming assignments. Written assignments will test understanding of concepts while programming projects will provide experience with implementation issues. There will also be paper presentations and a final project.

Lecture slides