OpenCL is a framework for writing programs that execute across heterogeneous platforms consisting of CPUs, GPUs, and other processors. It includes a language, OpenCL C (based on C99), for writing kernels, plus APIs that are used to define and then control the heterogeneous platform. OpenCL is a key step in the right direction but in order for developers to be successful with OpenCL they need to be willing to work with all the detailed complex commands for managing the heterogeneous resources.
In this talk the design of OpenCL with respect to programmability and portability is investigated. It is considered as providing a common base line for a higher level language that targets OpenCL as a portable intermediate language to run on a very wide range of systems. We discuss some of OpenCL C's properties and its imposed restrictions to form a common subset with C99 and how these restrictions allow for some specific optimizations, but also how different cases of undefined behaviour limit the use of OpenCL C for advanced computional abstractions. To complement this aspect, we discuss an approach for the additional integration of OpenCL's API as target of a high-level language. This may allow to even support high-level abstractions and exploit the full potential of the OpenCL framework.