【发布时间】:2017-12-07 09:54:50
【问题描述】:
嗯,有很多关于这个的教程和帖子,但我不知道如何处理 libOpenCL.so 文件。许多供应商没有将它包含在手机中,但我的应用程序需要支持当今最大可用手机,所以我需要为每个手机获取兼容的 libOpenCL.so 文件吗?
【问题讨论】:
嗯,有很多关于这个的教程和帖子,但我不知道如何处理 libOpenCL.so 文件。许多供应商没有将它包含在手机中,但我的应用程序需要支持当今最大可用手机,所以我需要为每个手机获取兼容的 libOpenCL.so 文件吗?
【问题讨论】:
Android 开源项目不正式支持 OpenCL
见:Why did Google choose RenderScript instead of OpenCL
但是,设备制造商似乎通过添加驱动程序来提供支持。
见:Does Android support OpenCL?
意识到 OpenCL 在硬件堆栈中与图形驱动程序处于相似的层,任何特定的实现都将取决于制造商并且特定于该设备。由于片上系统的特定定制(内核数量、DSP、GPU 等),您不能只从一个 ARM64 设备获取 libOpenCL.so 并期望为另一个设备工作。
我的推荐来自:C++, OpenCV and "what" for cross-platform GPU programing
如果您想要最大程度的支持 - 坚持使用 C/C++ 代码。
如果您需要 OpenCL 以使您的应用即使使用并行代码也能保持高性能,您的选择是检查该库是否存在并警告用户缺少支持。理想情况下,然后回退到那些没有 OpenCL 的设备上的并行代码。
直到 Google 将 OpenCL 作为 Android 兼容性定义文档的一部分并需要一些元数据属性,只有通过应用程序在设备上检查才能知道 OpenCL 甚至可用。
【讨论】:
补充@Morrison Chang 的答案:
您不能依赖所有设备中的所有版本的 OpenCL 来支持所有内容。所以我会做一个动态库加载,并在运行时查询 OpenCL 方法是否可用。
关于支持 OpenCL 的库,有时甚至不会这样调用。比如libGLESmali.so有OpenCL符号,可以直接使用。
【讨论】: