在Android上运行openCL

running openCL in android

本文关键字:openCL 运行 Android      更新时间:2023-10-16

嗯,有很多关于这个的教程和帖子,但我不确切了解如何处理 libOpenCL.so 文件。许多供应商没有将其包含在手机中,但我的应用目前需要支持最大可用手机,那么我是否需要为每个供应商获取兼容 libOpenCL.so 文件?

OpenCL 不受 Android 开源项目的正式支持

参见:为什么Google选择RenderScript而不是OpenCL

但是,设备制造商似乎通过添加驱动程序来包括支持。

参见:Android 是否支持 OpenCL?

请注意,OpenCL 在硬件堆栈中与图形驱动程序处于类似的层,任何特定的实现都将取决于制造商,并且特定于该设备。由于片上系统特定的自定义(内核数量、DSP、GPU 等(,您不能只从一台 ARM64 设备中获取 libOpenCL.so 并期望为另一台设备工作。

我的推荐来自:C++,OpenCV和跨平台GPU编程的"什么">

如果你想要最大的支持 - 坚持使用 C/C++ 代码。

如果您需要 OpenCL 使您的应用程序即使在使用并行化代码时也能保持性能,您的选择是检查库是否存在,并警告用户缺乏支持。理想情况下,然后回退到没有 OpenCL 的设备上的并行化代码。

在Google将OpenCL作为Android兼容性定义文档的一部分并需要一些元数据属性之前,只有通过应用程序检查设备才能知道OpenCL甚至可用。

补充@Morrison张的答案:

  • 您不能依赖所有设备中的所有 OpenCL 版本来获得所有支持。所以我会做一个动态库加载,并在运行时查询 OpenCL 方法。

  • 关于支持 OpenCL 的库,有时甚至不是这样调用的。例如libGLESmali.so具有OpenCL符号,可以直接使用。