The goal of my group's research is to make it easier for programmers to execute their software more efficiently on modern computer systems. In particular, we are especially interested in developing new techniques for taking advantage of parallel processing and for accessing data more efficiently in modern memory hierarchies.
To achieve these benefits while minimizing the burden on the programmer, many of our techniques involve some form of automatic code analysis (aka compiler optimization), often combined with new system support (e.g., from the hardware, the operating system, etc.) to help make this analysis more successful. This novel system support typically involves creating new "safety nets" to enable more aggressive optimization, or providing software with better visibility into dynamic system behaviors (to enable better optimization decisions).