An increasing portion of the top supercomputers
in the world, including Blue Waters, have heterogeneous CPUGPU
computational units. As we move towards exascale, we
can expect even more pervasive deployment of heterogeneous
computational units. While a handful of science teams can already
use heterogeneous computational units in their production
applications, there is still significant room for the growing use.
This paper presents the current state and projected path for transitioning
software into this new paradigm. We first summarize
the currently practical languages such as OpenCL, OpenACC,
and C++AMP, in increasing levels of productivity, highlighting
their recent advancements in supporting performance portability
and maintainability. We will then give a brief overview of some
emerging programming systems such as TANGRAM and Troilet
that are designed to further enhance developer productivity for
heterogeneous computing.