运行 android 中的 openCL

running openCL in android

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

Android 开源项目

未正式支持 OpenCL

参见:Why did Google choose RenderScript instead of OpenCL

不过,设备制造商似乎通过添加驱动程序来提供支持。

参见:Does Android support OpenCL?

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

我的推荐来自:

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

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

直到 Google 使 OpenCL 成为 Android 兼容性定义文档的一部分并需要一些元数据 属性,只有通过设备上的应用程序检查才能知道 OpenCL 是均匀的可用。

添加@Morrison Chang 的回答:

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

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