【发布时间】:2017-03-24 07:45:44
【问题描述】:
我有最新的 mac pro(OS:10.12.2),带有运行 OpenCL 代码的英特尔集成 GPU HD 530(Gen9)。在我的 OpenCL 代码中,我使用 vloadx 和 atomic_add 指令。将我的 OpenCL 内核代码更改为位代码,例如 https://developer.apple.com/library/content/samplecode/OpenCLOfflineCompilation/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011196-Intro-DontLinkElementID_2
.并使用 clCreateProgramWithBinary 创建程序。但是当 clBuildProgram 时,它返回 -11 错误。并且构建日志是“
错误:未定义对_Z6vload2mPKU3AS1h()'
undefined reference to_Z8atom_addPVU3AS3ii()'的引用
"
但是在我的带有 HD 5500(Gen8) 的 mac air 中,代码是可以的。
谁能告诉我该怎么办?
【问题讨论】:
-
您只能在保存它的同一硬件上可靠地使用保存的二进制文件,并且使用保存驱动程序版本。如果在不同的硬件上或使用不同的驱动程序版本,您应该从源代码重新构建。在 OpenCL 2.0 中,SPIR-V 使得发布与硬件和驱动程序无关的字节码成为可能,但在 OpenCL 1.x 中并非真正可行。
-
我想保护我的 IP,所以我不能从源代码构建。从苹果的例子中,我们可以使用离线编译器生成的位码。但是这种方法不适用于intel Gen9,但适合Gen7.5和Gen8。