  In this work, we examine the performance, energy efficiency and usability
when using Python for developing HPC codes running on the GPU. We investigate
the portability of performance and energy efficiency between CUDA and OpenCL;
between GPU generations; and between low-end, mid-range and high-end GPUs. Our
findings show that the impact of using Python is negligible for our
applications, and furthermore, CUDA and OpenCL applications tuned to an
equivalent level can in many cases obtain the same computational performance.
Our experiments show that performance in general varies more between different
GPUs than between using CUDA and OpenCL. We also show that tuning for
performance is a good way of tuning for energy efficiency, but that specific
tuning is needed to obtain optimal energy efficiency.
