实际上我尝试在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
我搜索了很多内容,但发现与subj无关。我在哪里可以找到这个OpenCL编译器以及为什么在OpenCL库加载时不提供它?
答案 0 :(得分:0)
有太多因素可能导致您显示的错误消息。所以我们无法提供非常具体的建议。但是以下步骤可能有所帮助。
检查您的平台是否首先拥有OpenCL库,在Samsung设备上,它通常位于: \ SYSTEM \厂商\ lib中\ EGL \ libGLES_mali.so
在一些最近的三星设备(如Galaxy S6)上,添加了一个软符号链接,因此以下位置也有效: \ system \ vendor \ lib \ libOpenCL.so(实际上链接到上面的文件位置)。
如果库确实存在,则意味着至少你得到了库。然后尝试编写一个简单的程序,如clinfo,使用clGetDeviceInfo()查询设备信息。在clGetDeviceInfo()中使用“CL_DEVICE_COMPILER_AVAILABLE”选项,您将知道编译器是否可用。 (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。如果您可以将程序编译/链接到另一台设备并进行测试,将会很有帮助。任何使用Qualcomm Snapdragon芯片的设备,以及过去1 - 2年内的三星Exynos芯片都应该支持OpenCL。