2

实际上我尝试在 Nexus 10 上运行 OpenCL 示例,但还没有成功。我使用了 Mali OpenCL SDK http://malideveloper.arm.com/resources/sdks/mali-opencl-sdk/ 和 android NDK。同样在链接样本时,我使用了来自目标的 libGLES_mali.so。经过一番挣扎后,我编译了示例程序并将其推送到板上。它似乎运行正常,但在编译 GPU 代码时出现错误:

root@manta:/hello_world # ./hello_world_opencl                                                                                                                                          
OpenCL error: CL_COMPILER_NOT_AVAILABLE
Build log:
 error: Compiler not supported on this platform

Failed to build OpenCL program. common.cpp:351
OpenCL error: CL_INVALID_PROGRAM
Releasing the OpenCL program failed. common.cpp:204
Failed to create OpenCL program.hello_world_opencl.cpp:53

我用谷歌搜索了很多,但没有发现任何与主题相关的内容。我在哪里可以找到这个 OpenCL 编译器,为什么当 OpenCL 库在机上时没有提供它?

4

1 回答 1

0

有太多因素可能导致您显示的错误消息。所以我们不能真正提供非常具体的建议。但以下步骤可能会有所帮助。

首先检查您的平台是否有 OpenCL 库,在三星设备上,它通常位于:\system\vendor\lib\egl\libGLES_mali.so

在最近的一些三星设备(例如 Galaxy S6)上,添加了软符号链接,因此以下位置也有效:\system\vendor\lib\libOpenCL.so(实际上链接到上述文件位置)。

如果图书馆确实存在,这意味着至少你得到了图书馆。然后尝试编写一个简单的程序,如 clinfo,使用 clGetDeviceInfo() 来查询设备信息。将“CL_DEVICE_COMPILER_AVAILABLE”选项与 clGetDeviceInfo() 一起使用,您将知道编译器是否可用。(https://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clGetDeviceInfo.html

如果 clinfo 有效,则 CL 程序很可能可以在您的设备上正常运行。如果仍然无法运行,请检查您的编译/链接过程,看看您是否已成功链接到正确的 CL 库。

我还建议您下载一个 Android 应用程序:OpenCL-Z 以检查您的设备是否具有 OpenCL 功能。该工具可以从 Android Play 商店中找到。


你能找到另一个支持 OpenCL 的设备吗?如今,许多 Android 设备都支持 OpenCL。如果您可以将程序编译/链接到另一台设备并对其进行测试,这将很有帮助。过去 1-2 年任何搭载高通骁龙芯片和三星 Exynos 芯片的设备都应该支持 OpenCL。

于 2015-10-04T10:16:04.843 回答