Opencl 英特尔MPSS-clGetProgramBuildInfo返回CL_BUILD_NONE

Opencl 英特尔MPSS-clGetProgramBuildInfo返回CL_BUILD_NONE,opencl,intel-mic,Opencl,Intel Mic,我们有一个OpenCL程序,在我的OSX机器上运行良好。我们刚刚安装了一台带有Xeon Phi和Intel MPS的机器。然而,即使不使用Phi而使用Xeon CPU,我们得到的CL\u程序构建状态也是CL\u构建状态NONE 不幸的是,我们找不到任何关于可能导致CL\u BUILD\u NONE的文档。你对如何调试这个有什么建议吗 提前谢谢你 版本: [@memphis:~] $ cat /etc/SuSE-release SUSE Linux Enterprise Server 11 (x

我们有一个OpenCL程序,在我的OSX机器上运行良好。我们刚刚安装了一台带有Xeon Phi和Intel MPS的机器。然而,即使不使用Phi而使用Xeon CPU,我们得到的
CL\u程序构建状态
也是
CL\u构建状态
NONE

不幸的是,我们找不到任何关于可能导致
CL\u BUILD\u NONE
的文档。你对如何调试这个有什么建议吗

提前谢谢你

版本:

[@memphis:~] $ cat /etc/SuSE-release 
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 2

[@memphis:~] $ uname -a
Linux memphis 3.0.13-0.27-default #1 SMP Wed Feb 15 13:33:49 UTC 2012 (d73692b) x86_64 x86_64 x86_64 GNU/Linux

[@memphis:~] 1 $ rpm -qa |grep intel
intel-mic-2.1.6720-15.suse
intel-mic-mpm-2.1.6720-15.suse
opencl-1.2-intel-mic-3.0.67279-1
intel-mic-sysmgmt-2.1.6720-15.suse
intel-mic-kmod-2.1.6720-15.3.0.13.0.suse
intel-mic-gdb-2.1.6720-15.suse
intel-mic-flash-2.1.386-3.suse
intel-mic-cdt-2.1.6720-15.suse
opencl-1.2-intel-devel-3.0.67279-1
intel-mic-micmgmt-2.1.6720-15.3.0.13.0.suse
opencl-1.2-intel-cpu-3.0.67279-1
intel-mic-gpl-2.1.6720-15.suse
intel-mic-crashmgr-2.1.6720-15.suse
看起来很简单:

CL\u BUILD\u NONE
。如果未对设备的指定程序对象执行clBuildProgram、clCompileProgram或clLinkProgram,则返回生成状态


您提到您的程序在其他平台上工作,但可能最终导致平台之间的流程略有不同,从而导致在新流程中无法正确调用这些方法?我建议仔细验证先前调用的函数的返回值,以查看您是否得到了预期的结果。

找到了它。我不确定为什么将
&ret
cl\u int
返回值)作为最后一个参数,而不是将其作为
clBuildProgram
的返回值。将其移动并将最后一个参数设置为NULL可解决此问题:

wrong:
clBuildProgram(*program, 1, &device_id, opts.str().c_str(), NULL, &ret);
correct:
ret = clBuildProgram(*program, 1, &device_id, opts.str().c_str(), NULL, NULL);
我确实理解为什么会出现这个问题——显然,编译器/OpenCL库理解我想要使用
pfn\u notify
并异步构建我的内核。但是,我不确定这种行为是否完全符合OpenCL文档:

If pfn_notify is NULL, clBuildProgram does not return until the build has completed.
在我的代码中,
pfn\u notify
参数实际上是
NULL
,但是用户数据(错误地)不是。虽然我的代码没有任何意义,但我认为当
pfn\u notify
NULL
时,应该忽略用户数据


我在英特尔论坛上发布了这篇文章,看看他们是否同意我对文档的解释。

谢谢-这是一个很好的建议。事实证明,这是我的编程错误,是苹果和英特尔对clBuildProgram的不同解释(见我的另一个答案)。