|Unique id:|| 54900 |
|Instructor:||Kathryn S. McKinley|
|Class Hours:||10:00-11:15 Monday & Wednesday, NOTE NEW LOCATION: ACES 3.408|
|Office Hours:||9:00-10:00 Wednesday ACES 3.420 and by appointment|
|Office Hours:||Wed, 1:00-2:00pm, ENS 31NQ|
|Office Hours:||The weeks that programming assignments are due: Mon, Wed, Fri, 1:00-2:00pm, ENS 31NQ|
|Administrative||Assistant: Gem Naivar|
All materials (lecture notes, assignments, policies, syllabus,
etc.) are available from the course web page:
Schedule and Notes|
|Student Grades: UTdirect's eGradebook|
This course studies the construction of optimizing compilers with a focus on uniprocessor architectures. We will cover data-flow analysis, program optimization, and code generation across basic blocks, procedures, and complete programs. We will study classical topics such as dataflow analysis, static-single assignment, interprocedural and intraprocedural analysis, intermediate representations, register allocation, and scheduling in depth and in the context of modern uniprocessors. We will sample some of the key challenges for modern compilers and runtime systems: optimizations for object-oriented languages, just-in-time compilation, garbage collection, dependence analysis, and loop transformations (the later two are the building blocks for optimizing for memory hierarchies and parallel machines).
This course is experiential. The bulk of your course grade will come from programming assignments that implement program analysis, intermediate representations, and optimizations. You will write critiques of original research papers, which will teach you how to express technical thoughts clearly in your writing and will teach you critical thinking skills.
At the highest level, the goal of this course is to help prepare you to do research. To do original research, you need to go beyond the state-of-the-art. We will therefore read read and evaluate research papers. All researchers need these skills. As a general rule in systems research, you must implement your ideas and evaluate them. We will therefore implement program analyses and optimizations and evaluate them. Even if you do not plan on doing research in systems, these skills are likely to assist your research efforts. At a technical level, you will learn about compilation techniques for obtaining high performance on modern computer architectures. Analysis and optimization techniques are presented in class lectures. Four programming assignments provide experience with implementation and evaluation of compilation techniques.
An undergraduate compiler course or permission of instructor. Programming experience in the context of a larger system is helpful.
As a scientist, you are expected to maintain the highest ethical standards, do your own work, report on it accurately, and acknowledge any assistance.
Feel free to discuss lectures, reading, and assignments with me, the TA, and other members of the class. You may discuss design, approach, debugging, and testing. You may not copy code, use code from previous semesters, use code you find on the Internet, read code written by other people, or debug code written by other people. Turning in any work that is not original will be reported to the University and at a minimum, you will fail the course.
The Student Code of Conduct documents your rights and responsibilities as a student.
We will be using source materials (rather than a synthesizing book). As appropriate, I have selected the first, best, or easiest to understand research publication on a topic. If you would like a supplementary book for lengthier explanations and examples, I recommend any of the following:
These books are available in the UT library or you may purchase them.