Teaching

Fall 2008

CS 4240 (Compilers, Interpreters and Program Analyzers)
This course will (probably) cover lexing, parsing, and some elementary code generation techniques. There will likely be more of a focus on applications of the course material to the internet than previous semesters, which focused strictly on generating assembly code. Additionally, programming assignment will be done using an imperative programming language (e.g., C++ or Java) instead of the functional language (ML) that was previously used. Assumed prerequisites are good programming/debugging skills and knowledge of basic data structures (queues, hash tables, etc.).

CS 8803 (Dynamic Compilation and Managed Runtimes)
We will look at the design, challenges, and opportunities of dynamic compilation and virtual machines, primarily from the perspective of program optimization. Topics include interpretation and translation techniques, case studies of actual dynamic compilers in use (e.g., Java VMs, Microsoft's Common Language Interface, and Adobe's Flash Player), and architectural support to enhance dynamic translation. We will also cover several recent research papers on these topics and students will be expected to complete a significant course project. Prerequisites: knowledge of computer architecture (caching, branch prediction, virtual memory), and some experience with assembly code (any architecture). Compiler experience (i.e., 6241) will definitely help, but I will not assume this prior knowledge.

Spring 2008

CS 6241 (Compiler Design)
This course covers modern backend compilation topics such as control and dataflow analysis, region formation, predication, scheduling (cyclic and acyclic), and a survey of modern research challenges in compilation (e.g., parallelization, memory system optimization, handling unusual architectures).

CS 8001 (Computer Architecture Seminar)

plants