How to use OpenCL on Android?

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)


In 2018, you can use openCL to develop Android app with Android Studio.

In order to use openCL with Android Studio, you will need to do several things.

  1. Check to see if your device supports openCL and what version using the OpenCL-Z Android and copy the prebuilt library into your computer like Robert Wang said.
  2. Download Android Studio.
  3. Create a project C/C++ support.
  4. Copy your libOpenCL.so to the folder /<your_project>/app/src/main/jniLibs/<architecture>/(You will have to create the folder yourself).
  5. Create your native C/C++ file if it is not created yet and link it with the prebuilt library in Cmake. Also, add your native C/C++ file as a library for the android project. https://developer.android.com/studio/projects/configure-cmake.
  6. Config your module(app) build.gradle file.

    android{
       ...
       default_config{
           externalNativeBuild{
              cmake {
                 // Filter based on your device architecture
                 abiFilters 'armeabi-v7a'
              }
            }
            ...
       }
       sourceSets {
          main {
             jniLibs.srcDirs = ['src/main/jniLibs']
          }
       }
       ...
    }
    

Checkout an Android OpenCL demo over at Sony developer world, complete project with source, where a bilateral filtering of an image is done in OpenCL and compared to a single threaded C implementation. Some information on what kind of support is expected in Sony devices etc can be found in the article as well.

Article:

Boost the performance of your Android app with OpenCL

Source for article:

Source to OpenCl Android project

Disclaimer: I'm a consultant at Sony Mobile


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:

  1. check if there is OpenCL library on the device. This can be done by using OpenCL-Z Android. This is a great tool to check the OpenCL availability on Android devices, and it also provides raw compute performance metrics, which could be very helpful.

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
  1. Write your OpenCL program using C or C++

  2. Create NDK project to compile your C/C++ code, and test them on the device as executable.

  3. Create JNI interface for your NDK program functions.

  4. 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.