对于平台独立性(桌面,云端,移动设备......),当速度很重要时,使用OpenCL进行GPGPU开发会很棒。我知道谷歌推动RenderScript作为替代方案,但它似乎只适用于Android,并且不太可能包含在iOS中。
因此,我寻求在Android应用中执行OpenCL代码的解决方案。
答案 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,有几个步骤:
主要芯片供应商的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
使用C或C ++编写OpenCL程序
创建NDK项目以编译您的C / C ++代码,并在设备上将其作为可执行文件进行测试。
为NDK程序功能创建JNI接口。
创建Android项目,使用JAVA代码中的JNI函数调用涉及OpenCL的本机函数。
索尼教程是一个很好的推荐来源。该教程中介绍的技术可应用于任何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,您需要做几件事。
/<your_project>/app/src/main/jniLibs/<architecture>/
(您必须自己创建文件夹)。配置您的模块(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)
只需看一下包含OpenCL内核的开源手臂计算库(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 acceleration - does it work for all OS versions or only for 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