Research


My PhD research is focused on increasing the performance and portability of software written for modern parallel hardware.  Developing software for these platforms today typically involves multiple tool chains, multiple instruction sets, and rapidly evolving architectures.  This makes it difficult to create single programs that perform well across different architectures or even between instances of the same architecture without tuning for each platform.

To address these problems, I am investigating representations of parallelism for low level virtual machines.  Specifically, I have created mechanisms to declare fine grained tasks and communication between those tasks in a virtual machine instruction set.  In addition to dynamically generating code for the appropriate ISA extensions, a runtime JIT and scheduler can use the parallelism information to, for example, dynamically resize or combine tasks, migrate tasks between CPU cores and GPU cores, or optimize communication between tasks.

I have developed a system called SKIR based on the LLVM toolchain that supports pipeline, task, and data parallel programming models.  To facilitate porting applications to the system, I have developed C compiler intrinsics, a C++ user library interface, and language front-ends for both JavaScript and StreamIt.  I am targeting the stream processing programming model.  The system currently supports code generation for multi-core CPUs and for GPUs via OpenCL.


Some software related to this work can be found on GitHub.  I'm working on making more available...



My M.S. research was in the area of software defined radio and heterogeneous computing using FPGAs (thesis).  Visit the Wireless Research group at CU for more like this.