如何在Android上使用OpenCL?

Rod*_*dja 29 android gpgpu opengl-es opencl renderscript

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

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

pru*_*nge 13

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

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

OpenCL博客的作者正在尝试使用它,因此可能值得关注他的系列文章.

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

  • Adreno 320及更高版本拥有OpenCL,例如Nexus 4支持它 (2认同)
  • 因为我认为4.3将会暴露它,所以没有谷歌设备. (2认同)

Rob*_*ang 12

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

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

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

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

  1. 检查设备上是否有OpenCL库.这可以通过使用OpenCL-Z Android来完成.这是检查Android设备上OpenCL可用性的绝佳工具,它还提供原始计算性能指标,这可能非常有用.

可以在设备中找到主要芯片供应商的OpenCL库:以下是OpenCL库的位置:

高通Adreno:

/system/vendor/lib/libOpenCL.so
or /system/lib/libOpenCL.so (older devices)
Run Code Online (Sandbox Code Playgroud)

ARM马里:

/system/vendor/lib/egl/libGLES_mali.so
or /system/lib/egl/libGLES_mali.so
Run Code Online (Sandbox Code Playgroud)

的PowerVR:

/system/vendor/lib/libPVROCL.so
Run Code Online (Sandbox Code Playgroud)
  1. 使用C或C++编写OpenCL程序

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

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

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

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

希望这可以帮助.


Mag*_*nus 5

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

文章:

使用OpenCL提升Android应用的性能

文章来源:

源自OpenCl Android项目

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


小智 5

在2018年,您可以使用openCL与Android Studio一起开发Android应用程序。

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

  1. 使用OpenCL-Z Android检查您的设备是否支持openCL以及哪个版本,然后像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. 配置您的模块(应用程序)build.gradle文件。

    android{
       ...
       default_config{
           externalNativeBuild{
              cmake {
                 // Filter based on your device architecture
                 abiFilters 'armeabi-v7a'
              }
            }
            ...
       }
       sourceSets {
          main {
             jniLibs.srcDirs = ['src/main/jniLibs']
          }
       }
       ...
    }
    
    Run Code Online (Sandbox Code Playgroud)