Follow the individual project links for more details about each project and relevant publications:
ALLVM: Exploring the benefits for software performance, security and reliability if all software on a system (either all userspace software or or userspace+OS software) is available in a rich virtual instruction set that can be analyzed and transformed by sophisticated compiler techniques (think Java bytecode, but for all software).
Heterogeneous Parallel Virtual Machine: A compiler infrastructure and parallel program representation for heterogeneous parallel systems, with the goal of making it much easier to write performance-portable parallel programs. A single program in the HPVM representation can be compiled to GPUs and to multicore CPUs (with and without) vector extensions, while achieving performance close to separately hand-tuned code for each of those systems. The project is also exploring code generation for FPGAs, for specialized deep-in-memory compute hardware, and developing optimizing compilers for parallel languages like OpenMP and Domain Specific Languages.
Automated Debugging for Software Failures: We are developing automated static and dynamic analysis techniques to understand the causes of failures in software systems, in order to help programmers diagnose and fix software bugs with as little effort as possible. The project is investigating automated fault localization and diagnosis techniques for both standalone and distributed programs.
The LLVM Compiler Infrastructure: A novel virtual instruction set and compiler infrastructure that enables lifelong analysis and transformation of programs in arbitrary programming languages. LLVM is a key foundation for some of our other ongoing projects, including ALLVM and HPVM.
Deterministic-by-default Parallel Programming: Language and compiler techniques to make parallel programming far easier than it is today, by enabling programmers to write provably deterministic parallel programs, and by enforcing that any non-deterministic behavior is made explicit and isolated.
SVA: Secure Virtual Architecture: A compiler-based virtual machine for commodity operating systems that can greatly enhance the security and reliability of today’s systems.
SAFECode: Compiler techniques to enforce memory safety and other safety properties efficiently for unmodified C programs.
CS 526: Advanced Compiler Construction
Other Classes I have Taught
CS 421: Programming Languages and Compilers
CS 591ACT: Compiler Seminar (with David Padua and Maria Garzaran)
CS 598: Wide-Area Parallel Programming
Information for Prospective Students
If you are interested in joining our research group, please read the following.
I am always looking for outstanding graduate or undergraduate students for the projects listed above. More than anything else, I am looking for students who are (a) creative and intellectually strong, and (b) ambitious and hard-working.
I take on undergraduates, Masters (MS) students and Ph.D. students. I can generally give Research Assistantships only to Ph.D. students because our research funding is nearly always intended for long term research projects that require a sustained effort over several years. Note that if you join our group as a Ph.D. student, you should not expect to stop after 1.5 or 2 years with an MS degree: the research projects will generally not be appropriate for an MS thesis, which is relatively narrow research.
I am willing to take on students interested in an MS for shorter term projects. An MS thesis nearly always must be publishable research, though in exceptional circumstances, I think an MS might be justified for development or experimental work that contributes significantly to one or more of our projects.
I am always looking for outstanding undergraduate students interested in research and/or programming experience. I have taken on students ranging from seniors to freshmen: what I look for is someone with an interest in experimental software research, and the drive to work hard and succeed.
If you fit these criteria, send me email with a subject line that has the prefix:
“[Prospective Student] ”
Or, use this link to send me email — just so I know you have read this (I am not filtering such email!). Include an up-to-date CV or resumé, and say what degree you seek and what project(s) in our group interest you. I will contact you if I want to follow up. I get a lot of such email, so do not take it personally if I do not reply.
Thanks for your interest!