Opencl NVidia卡上的clBuildProgram崩溃

Opencl NVidia卡上的clBuildProgram崩溃,opencl,nvidia,Opencl,Nvidia,我有一个OpenCL应用程序,在使用AMD GPU时运行良好 使用NVidia卡时,clBuildProgram调用会使应用程序崩溃(甚至不会返回故障值,只是崩溃)。调试时,崩溃会产生: nvopencl.dll模块中存在读取访问冲突。代码0xc0000005。调试器将clGetExportTable函数(位于nvopencl.dll内)指示为冲突源 通过评论内核的随机部分,我已经达到了这一点: 在代码片段中: if (something){ //some stuff flo

我有一个OpenCL应用程序,在使用AMD GPU时运行良好

使用NVidia卡时,clBuildProgram调用会使应用程序崩溃(甚至不会返回故障值,只是崩溃)。调试时,崩溃会产生:

nvopencl.dll模块中存在读取访问冲突。代码0xc0000005。调试器将clGetExportTable函数(位于nvopencl.dll内)指示为冲突源

通过评论内核的随机部分,我已经达到了这一点:

在代码片段中:

if (something){
     //some stuff
     float3 gradient = (float3)(0,1,0);
     gradient = normalize(gradient);
     return;
}
通过删除“gradient=normalize(gradient);”行,clBuildProgram不会崩溃,但让它在那里崩溃了程序。梯度变量甚至没有在内核中使用,因此它与内核的任何其他部分都没有关系。规范化函数本身不应该是问题的根源,因为它在代码的其他部分中使用

我认为这可能与一些驱动程序错误有关。因为安装最新的CUDA版本(6.5)会使NVidia发布的OpenCL行为不端,而使用CUDA 6安装会使体绘制示例正常工作

我的代码与体绘制技术相关,这就是为什么我认为它可能相关,但我的问题出现在CUDA6.5和CUDA6安装上

你有过类似的经历吗?问题的原因是什么?我该如何处理


谢谢。

在进一步分析之后,问题似乎是驱动程序中的一个bug,正如Xapa所提到的。

如果您确定规范化在代码的其他部分有效,我建议您尝试一些不同的渐变值,看看它是否是一个特定的数字问题,但无论哪种方式,如果它在amd上工作,而不是在nvidia上,它可能是一个错误,你应该向nvidia报告它。