31

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

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

4

8 回答 8

14

我所知道的唯一支持 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 的初始支持有多么错误)

于 2013-02-16T02:04:51.177 回答
13

虽然距离最初的问题已经过去了一段时间,但我认为这仍然是很多开发人员的问题。

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

其次,幸运的是,许多芯片供应商都提供了他们的库来支持 OpenCL。就目前而言,大多数旗舰和中端智能手机(使用 Qualcomm Adreno GPU、ARM Mali GPU 或 Imagination PowerVR GPU)都包含 OpenCL 库。

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

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

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

高通肾上腺素:

/system/vendor/lib/libOpenCL.so
or /system/lib/libOpenCL.so (older devices)

ARM 马里:

/system/vendor/lib/egl/libGLES_mali.so
or /system/lib/egl/libGLES_mali.so

电源VR:

/system/vendor/lib/libPVROCL.so
  1. 使用 C 或 C++ 编写 OpenCL 程序

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

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

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

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

希望这可以帮助。

于 2015-04-14T18:32:19.600 回答
5

在 Sony developer world 上查看 Android OpenCL 演示,包含源代码的完整项目,其中图像的双边过滤在 OpenCL 中完成,并与单线程 C 实现进行比较。也可以在文章中找到一些有关索尼设备等方面的支持类型的信息。

文章:

使用 OpenCL 提升 Android 应用程序的性能

文章来源:

OpenCl Android 项目的源代码

免责声明:我是索尼移动的顾问

于 2013-11-12T11:49:38.220 回答
5

2018 年,您可以使用 openCL 和 Android Studio 开发 Android 应用程序。

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

  1. 检查您的设备是否支持 openCL 以及使用 OpenCL-Z Android 的版本,然后将预建库复制到您的计算机中,如 Robert Wang 所说。
  2. 下载安卓工作室。
  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']
          }
       }
       ...
    }
    
于 2018-05-25T00:32:50.980 回答
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)才能进行适当的控制。

于 2012-07-12T12:52:25.463 回答
2

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

于 2013-09-23T17:41:25.333 回答
1

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

于 2013-07-22T22:34:29.730 回答
1

只需查看包含 OpenCL 内核的开源 arm 计算库 (ACL): https ://developer.arm.com/technologies/compute-library

它有一个文档站点: https ://arm-software.github.io/ComputeLibrary/latest/

和一个 github 站点: https ://github.com/ARM-software/ComputeLibrary

还要寻找 Qualcomm SNPE SDK(它使用 OpenCL:https ://developer.qualcomm.com/forum/qdn-forums/software/snapdragon-neural-processing-engine-sdk/34526 ):https://developer.qualcomm。 com/docs/snpe/overview.html

https://www.youtube.com/watch?v=h3T1ekJ_iXM

您还可以查看适用于移动应用的 TensorFlow Lite:https ://www.tensorflow.org/lite/

也许将来它会以 ACL 的方式支持 OpenCL(现在是 Android 8.1 NNAPI 解决方案 - https://www.slideshare.net/kstan2/open-source-nn-frameworks-on-cellphones):

https://github.com/tensorflow/tensorflow/issues/18324

Tensorflow Lite GPU 加速 - 它适用于所有操作系统版本还是仅适用于 8.1?

http://jevois.org/qa/index.php?qa=2057&qa_1=can-tensorflow-lite-use-the-gpu

用 Kotlin 编程的一个很好的例子在这里: https ://github.com/eddywm/KTFLITE

对于同时使用 NNAPI 或 OpenGL 的 caffe2,未来对 OpenCL 有一些希望: https ://github.com/laMia482/caffe2_android

于 2019-01-09T07:25:03.863 回答