如何在Android上使用OpenCL?

时间:2012-01-25 15:33:31

标签: android opengl-es opencl gpgpu renderscript

对于平台独立性(桌面,云端,移动设备......),当速度很重要时,使用OpenCL进行GPGPU开发会很棒。我知道谷歌推动RenderScript作为替代方案,但它似乎只适用于Android,并且不太可能包含在iOS中。

因此,我寻求在Android应用中执行OpenCL代码的解决方案。

8 个答案:

答案 0 :(得分:13)

我所知道的唯一支持OpenCL的Android设备是基于Mali T600系列芯片的产品(文章here)。他们有一个OpenCL SDK。显然它也是OpenCL 1.1的完整档案。

Nexus 10是使用这种芯片的设备。三星Exynos 5双SoC使用Mali T604,所以任何使用它的东西都可以和Mali T600 OpenCL SDK一起使用(我自己也没有尝试过)。

OpenCL博客的作者正在尝试have a go with this,因此可能值得关注他的一系列文章。

但是,Android上的OpenCL支持是全新的(截至2013年2月16日),因此,虽然很有实验性,但在获得更多支持之前可能值得谨慎(谁知道OpenCL 1.1的初始支持有多么错误)是)

答案 1 :(得分:12)

虽然问题问题已经过去了,但我认为这仍然是很多开发人员的问题。

答案有两个方面。 首先,遗憾的是,Google并未正式支持OpenCL。

第二,幸运的是,许多芯片供应商提供他们的库来支持OpenCL。截至目前,大多数旗舰级和中级智能手机(包括Qualcomm Adreno GPU,ARM Mali GPU或Imagination PowerVR GPU)都包含OpenCL库。

要在Android上使用OpenCL,有几个步骤:

  1. 检查设备上是否有OpenCL库。这可以通过使用OpenCL-Z Android来完成。这是检查Android设备上OpenCL可用性的绝佳工具,它还提供了原始计算性能指标,这可能非常有用。
  2. 主要芯片供应商的OpenCL库可以在设备中找到: 以下是OpenCL库的位置:

    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. 使用C或C ++编写OpenCL程序

    2. 创建NDK项目以编译您的C / C ++代码,并在设备上将其作为可执行文件进行测试。

    3. 为NDK程序功能创建JNI接口。

    4. 创建Android项目,使用JAVA代码中的JNI函数调用涉及OpenCL的本机函数。

    5. 索尼教程是一个很好的推荐来源。该教程中介绍的技术可应用于任何Qualcomm Adreno GPU。通过极少的修改,该代码和makefile也可以在其他支持OpenCL的设备(例如Mali和PowerVR)上运行。

      希望这有帮助。

答案 2 :(得分:5)

在Sony开发人员世界中查看Android OpenCL演示,使用源完成项目,其中在OpenCL中完成对图像的双边过滤,并与单线程C实现进行比较。有关Sony设备等预期支持的一些信息也可以在文章中找到。

文章:

Boost the performance of your Android app with OpenCL

文章来源:

Source to OpenCl Android project

免责声明:我是Sony Mobile的顾问

答案 3 :(得分:4)

您应该使用RenderScript Compute: http://developer.android.com/guide/topics/renderscript/compute.html

使用OpenCL不是很安全,因为目标设备上的库(或功能)可能不可用。说实话,我甚至不知道那里的任何Android设备是否真的支持它。如果设备上的GPU无法执行您想要运行的任何程序,RenderScript将回退到CPU计算。

但是,如果您仍想使用OpenCL,那么可能会对您有所帮助 http://www.pgroup.com/lit/articles/insider/v4n2a3.htm

您可能需要/需要特定于设备的SDK(如nVidia Tegra SDK)以便进行适当的控制。

答案 4 :(得分:4)

2018年,您可以使用openCL开发Android应用Android应用。

为了在Android Studio中使用openCL,您需要做几件事。

  1. 检查您的设备是否支持openCL以及使用OpenCL-Z Android的版本,并将预建的库复制到您的计算机中,如Robert Wang所说。
  2. 下载Android Studio。
  3. 创建项目C / C ++支持。
  4. 将您的libOpenCL.so复制到文件夹/<your_project>/app/src/main/jniLibs/<architecture>/(您必须自己创建文件夹)。
  5. 创建您的本机C / C ++文件(如果尚未创建)并将其与Cmake中的预构建库链接。此外,将您的本机C / C ++文件添加为android项目的库。 https://developer.android.com/studio/projects/configure-cmake
  6. 配置您的模块(app)build.gradle文件。

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

答案 5 :(得分:2)

所有Qualcomm Adreno 300系列都支持OpenCL 1.1嵌入式配置文件。要使用OpenCL,您需要开发NDK代码,因为Java层不支持OpenCL。如果您知道如何开发NDK代码,那么编写OpenCL代码非常简单。您需要提供libOpenCL.so,它可以从支持OpenCL的设备中获取,例如HTC one,Moto X和使用Snapdragon的Samsung Note / Galaxy版本。

答案 6 :(得分:1)

Khronos发布OpenCL 2.0,包括对Android的官方支持: https://www.khronos.org/news/press/khronos-releases-opencl-2.0

答案 7 :(得分:0)