For plattform independence (desktop, cloud, mobile, ...) it would be great to use OpenCL for GPGPU development when speed does matter. I know Google pushes RenderScript as an alternative, but it seems to be only be available for Android and is unlikely to be ever included in iOS.
Therefore I seek for a solution to execute OpenCL code within Android Apps.
Strictly speaking, Android does not support OpenCL. That is Google's (bad) choice. However, you can run OpenCL applications on your Android device if you can get hold of an OpenCL library for it.
OpenCL™ (Open Computing Language) is a low-level API for heterogeneous computing that runs on CUDA-powered GPUs. Using the OpenCL API, developers can launch compute kernels written using a limited subset of the C programming language on a GPU.
The only Android devices I know that support OpenCL are the ones based on the Mali T600 family of chips (article here). They have an OpenCL SDK. Apparently it is OpenCL 1.1 full profile as well.
The Nexus 10 is a device that uses such a chip. The Samsung Exynos 5 dual SoC uses a Mali T604, so anything using this supposedly could be used with the Mali T600 OpenCL SDK (havne't tried any of this myself).
The author of the OpenCL blog is trying to have a go with this, so it might be worth following his series of articles.
But, OpenCL support on Android is brand new (as of 16/2/2013) so, while great for experimentation, it might be worth being cautious until there is more support (who says how buggy the intitial support of OpenCL 1.1 is)
Although time has passed since the original question was asked, I think this is still a question for a lot of developers.
There are two aspects in the answer. First, unfortunately, Google doesn't support OpenCL officially.
Second, fortunately, many chip vendors provide their libraries to support OpenCL. As the time for now, most of the flagship and middle-tier smartphones (with Qualcomm Adreno GPU, ARM Mali GPU, or Imagination PowerVR GPU) include the OpenCL libraries.
To use OpenCL on Android, there are several steps:
The OpenCL libraries for the major chip vendors can be found in the devices: The followings are the location of the OpenCL library:
Qualcomm Adreno:
/system/vendor/lib/libOpenCL.so or /system/lib/libOpenCL.so (older devices)
ARM Mali:
/system/vendor/lib/egl/libGLES_mali.so or /system/lib/egl/libGLES_mali.so
PowerVR:
/system/vendor/lib/libPVROCL.so
Write your OpenCL program using C or C++
Create NDK project to compile your C/C++ code, and test them on the device as executable.
Create JNI interface for your NDK program functions.
Create Android project, using JNI functions in the JAVA code to call native functions involving with OpenCL.
The sony tutorial is a good source to refer. The techniques presented in that tutorial can be applied to any Qualcomm Adreno GPU. With very minimal modification, that code and makefiles can also run on other OpenCL-capable devices (such as Mali and PowerVR).
Hope this helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With