Layman's Description

I want to make computers more efficient, which is to say do as much computation with as little energy as possible. Whenever computers become more efficient, many new and exciting applications become possible. For example, streaming video on cell phones and real-time brain scanning were impossible with less efficient computers in the not too distant past. When computers become more efficient, it also means they are cheaper to own, enabling more people access to the benefits they can provide. For example, there are very compelling arguments that access to computers can help alleviate poverty.

In order for computers to become more efficient the hardware and software have to work well together. Over the years, computer hardware has gotten more and more efficient, and the software never needed to change to take advantage of that. However, around 2004, hardware designers ran out of ways to improve efficiency that don't require software change.

Now, for computers to become more efficient, the software must be rewritten to take advantage of new hardware features every time the hardware changes! This is very difficult and very expensive, which in turn makes exciting new applications cost more and take more time to create; basically, it slows down innovation.

My research tries to make writing efficient software as easy as possible. Part of this is developing automatic techniques to retarget applications to these new hardware features. Sometimes automation is not possible, so we also develop tools to help programmers use modern hardware features.

Making efficient software easier to develop maintains the pace of innovation in the computer industry and helps provide society exciting new applications.

Slightly Jargon-Laced Description

As mentioned above, we're trying to make programming heterogeneous manycore architectures as easy as possible. This process is currently expensive and painful because, unlike single-threaded software development, we don't know how to automate many of the significant portions of the development process.

In order to make this process easier my research group takes an application-based approach: 1) finding important applications to run more efficiently, 2) understanding what program transformations are necessary to effectively parallelize them or make them use accelerators, 3) trying to automate those transformations, and 4) if automation fails, developing ways to help the programmer easily and effectively apply the transformations.

Here are some of the projects I am currently (or was) working on.

Commutativity Analysis

Functions that can be reordered in a program are said to commute. For example, addition is commutative because you can reorder the arguments and get the same result (e.g., 2+3 = 3+2). Automatically detecting commutative functions in applications can provide significant speedup in manycore architectures, because you can run them in parallel and the order they complete does not matter. We've developed several novel techniques for automatically detecting commutativity by utilizing a randomized algorithm.

Dynamic Parallelization

While most people agree static compiler parallelization has significant limitations, dynamically parallelizing applications (with hardware support) can often overcome those limits. This research project is interested in stretching the limits of automatic parallelization using advanced program analysis, speculation, and hardware support. Beyond performing dynamic parallelization in the Fluid Software IR, we are also investigating how effective dynamic parallelization can be on legacy binaries.

Data Structure Detection

Data structures are one of the most critical aspects in an application. The wrong data structure can severely restrict the parallelism attainable, and can starve the processor of data. We are developing tools that can automatically detect the data structures used in a program and suggest more effective alternatives to the programmer.

Students I work with

Current Ph.D. Students

Current M.S. Students Current Undergrads Prospective students, please read the FAQ.

plants