Abstract-GPUs traditionally offer high computational capabilities, frequently higher than their CPU counterparts. While high-end mobile GPUs vendors introduced recently general purpose APIs, such as OpenCL, to leverage their computational power, the vast majority of the mobile devices lack such support. Despite that their graphics APIs have similarities with desktop graphics APIs, they have significant differences, which prevent the use of well-known techniques that offer generalpurpose computations over such interfaces. In this paper we show how these obstacles can be overcome, in order to achieve general purpose programmability of these devices. As a proof of concept we implemented our proposal on a real embedded platform (Raspberry Pi) based on Broadcom's VideoCore IV GPU, obtaining a speedup of 7.2× over the CPU. High-end mobile GPUs, i.e. OpenGL ES 3 compliant, are capable of general purpose programming using OpenCL, however the vast majority of the market, still relies on mobile GPUs in the low-end of the spectrum. In particular, as of September 2015 more than 50% of the end users of games designed with the popular multi-platform game engine Unity, use low-end mobile phones [4] , which support only the previous version of the graphics API, OpenGL ES 2. This reduces significantly the potential of leveraging the computational power of GPUs on demanding and innovative mobile applications. Furthermore, most single board computers (ODROID, BeagleBoard, PandaBoard and others) feature an OpenGL ES 2 compliant GPU. Among them, Raspberry Pi, an affordable ($25) educational system for developing countries, relies on the VideoCore IV GPU, capable of 24 GFlops. A general purpose GPU programming model would increase significantly its educational value, educating a new generation of parallel programmers. In addition, due to its price it has been used by millions of hobbyists for a great variety of applications. While this GPU is capable of general purpose computations, this is currently possible only with low level assembly programming, resulting in a handful of people able to do so. For this reason there are only few applications using its GPU [6] [1] [17] . However, many more powerful applications would be developed, if general purpose programmability in a high level language eased the 24 GFlops of its GPU to be used for computations, instead of staying idle most of the time. The mobile API supported by these low-end devices, OpenGL ES 2, is a restricted subset of the OpenGL implementation for desktop computers, with similar functionality. However, the programming interface lacks fundamental operations which are required to perform general purpose computations. In this work, we present a set of solutions to overcome the obstacles created by the OpenGL ES 2 specification [7] , to enable general purpose computations on low-end mobile
The second category, based on graphics APIs to perform general purpose computations has only recently appeared REF .
Towards general purpose computations on low-end mobile GPUs
2016 Design, Automation & Test in Europe Conference & Exhibition (DATE)
2016 Design, Automation & Test in Europe Conference & Exhibition (DATE)
Computer Science