These projects are either completed (I am not planning to work further on them), or dormant (pending new students or funding). Current projects can be found here.

Elastic applications for distributed and cloud computing

This project aims to develop programming models that will allow programmers to deploy elastic applications to cloud and distributed systems. Elastic applications can adjust their execution to adapt to changing resources (e.g., automatically launching additional processing tasks to take advantage of available computing resources), making them ideally suited to cloud execution environments where the availability and characteristics of resources are dynamic and unpredictable. This work builds on the Mace project.


  • Wei-Chiu Chuang (advised by Charles Killian)

Current collaborators


The Galois project

Much of my early research focused on parallelizing irregular programs. These applications, which make heavy use of pointer-based data structures, have long resisted typical parallelization techniques. This project has looked at various abstractions and run-time systems that can allow programmers to expose and exploit amorphous data parallelism, a generalized form of data parallelism, that arises in irregular programs. Products of this project include the Galois system and the Lonestar benchmark suite.

Optimizing computational science applications by exploiting semantics

This project develops techniques to optimize computational science applications such as computational mechanics solvers by exploiting domain semantics. Rather than building ad hoc domain-specific languages (DSLs) for each domain, the key insight of this project is to leverage the existing semantics captured by the domain libraries scientists use to write their applications. We envision a generic compiler and run-time infrastructure that leverages domain libraries to essentially provide domain-specific optimizations. The main website for this project is here.

Effective computation offloading

A promising strategy for writing applications intended to run on resource-limited devices such as mobile phones is to offload computation from those devices to cloud-computing services. This project looks at approaches that will allow programmers to write their programs in a unified style (without considering offloading) and rely on compiler and run-time support to automatically make appropriate decisions regarding how to partition the application between the mobile device and the cloud. In particular, we are looking at ways to enable more sophisticated offloading by considering multiple offloading sites and multiple offloading granularities.