Course pages 2014–15
Modern Compiler Design
The module aims to give students practical experience with a state-of-the art compiler architecture used in research and academia. The main focus is on code generation for two categories of language: late-bound dynamic languages and parallel languages.
- Static Single Assignment form and its uses [1 lecture]
- The LLVM intermediate representation and transform pipeline [2 lectures and 2 practicals]
- Strategies for implementing dynamic dispatch and duck typing [2 lectures and 2 practicals]
- Autovectorisation algorithms [1 lecture and 2 practicals]
- Optimisation constraints for GPU and heterogeneous architectures [1 lecture]
- Parallel execution strategies [1 lecture and 2 practicals]
On completion of this module, students should:
- Understand the performance characteristics of modern processors
- Have experience with algorithms for automatically taking advantage of SIMD, SIMT, and MIMD parallelism
Write a 4,000-word project report in IEEE journal format, including results from an analysis of modern compiler optimisation techniques.
Several short exercises implementing and benchmarking simple optimisations.
Design and implement a small set of optimisations for one of the example languages in the course or an existing language such as OpenCL C to generate experimental results. Several project ideas, including some proposed by members of ARM's compiler team, will be available to choose from or students may propose their own for this component.
- The 4,000-word project report will be graded (80%).
- The ticked practical work will be reviewed with the student (a short oral) (20%)
Alfred V. Aho, Monica S. Lam, Ravi Sethi and Jeffrey D. Ullman (Sep 10, 2006). Compilers: Principles, Techniques, & Tools.
Addison Wesley (2nd ed.).
Steven Muchnick, (1997). Advanced Compiler Design and Implementation. Morgan Kaufmann.