OpenCL clBuildProgram 在 OS X 上的 AMD GPU 上失败,并带有非描述性构建日志

Posted

技术标签:

【中文标题】OpenCL clBuildProgram 在 OS X 上的 AMD GPU 上失败,并带有非描述性构建日志【英文标题】:OpenCL clBuildProgram fails on AMD GPU on OS X with non-descriptive build log 【发布时间】:2015-12-11 11:30:01 【问题描述】:

我正在尝试在 OS X El Capitan 10.11.2 上的 C++ 项目中编译一组 OpenCL 内核。

使用的机器是 iMac(Retina 5K,27 英寸,2015 年末),其中包含被选为 OpenCL 设备的 AMD Radeon R9 M395X 4096 MB。我正在使用操作系统附带的 OpenCL 框架。

在特定内核上,OpenCL 程序构建失败并显示此 CL_PROGRAM_BUILD_LOG:

SC 失败。没有给出任何理由。

在选择与 OpenCL 设备或具有 Nvidia GPU 的类似机器相同的机器的 CPU 时,相同的内核编译良好。

【问题讨论】:

【参考方案1】:

有问题的内核源代码可以归结为以下几点:

kernel void sampleKernel (bool param) 

OpenCL C 规范不支持使用bool 作为 OpenCL 内核的参数,请参阅例如https://***.com/a/4441865/463796

将参数的类型替换为char 即可解决问题。

【讨论】:

并不是 OpenCL 规范(特别是)不支持 bool。是不是 OpenCL 内核是 C99,而 C99(纯 C)不支持布尔值,如果其他编译器支持它,它们不符合规范。还要小心,因为布尔值不需要是字符,尽管它们在大多数情况下都是。 虽然 OpenCL C 是基于 C99 的,但数据类型是它们不同的地方。 OpenCL C 确实支持内核代码中的 bool 类型,但确实明确禁止将 bool 作为内核参数传递。仍然有一些编译器(错误地)支持它。

以上是关于OpenCL clBuildProgram 在 OS X 上的 AMD GPU 上失败,并带有非描述性构建日志的主要内容,如果未能解决你的问题,请参考以下文章

相邻工作项上的 OpenCL 矢量化

OpenCL(英特尔平台)显示构建错误(-11),状态为 0

clBuildProgram() 在 Mac (Catalina) 上使用 clang 总是返回 -11; clGetProgramBuildInfo() 返回空字符串

尽管程序给出了正确的输出,但 clGetProgramBuildInfo 返回 CL_BUILD_NONE

openCV 3.0、openCL 和 meanShiftFiltering

Makefile for OpenCL