This award is funded under the American Recovery and Reinvestment Act of 2009 (Public Law 111-5).
Graphics Processing Units (GPUs) have emerged as a promising alternative in the transition of the computing industry to mainstream parallel computing. Enabling applications to benefit from their potential requires that GPU programming be made accessible to the average programmer. This research focuses on the challenges making GPU programming easier through new high-level programming models, and enabling efficient GPU execution through compilation frameworks for these models. Two complementary GPU programming models are proposed --- OpenMP, which is widely used for shared-memory parallel programming, and Parallel Operator Data-Flow Graphs (PO-DFGs), which naturally represent algorithms in a wide range of current and emerging application domains. Various optimization techniques are developed for programs written to these models, including partitioning the program between the host CPU and GPUs, stream optimizations that render the program's memory access characteristics to be more amenable to the GPU's memory system, minimizing data transfer between the host and GPU memory, and GPU architecture-specific optimizations. The research contributes to the evolution of GPGPU programming from manual ports of applications using low-level APIs, to the use of high-level parallel programming models.