我有一个使用AMD GPU时运行良好的OpenCL应用程序。
使用NVidia卡时,clBuildProgram调用会使应用程序崩溃(甚至不返回失败值,而只是崩溃)。调试时,崩溃产生:
nvopencl.dll模块中的读取访问冲突。代码0xc0000005。调试器将clGetExportTable函数(在nvopencl.dll内部)指示为违规的来源。
通过注释内核的随机部分,我达到了这一点:
在代码片段中:
if (something){
//some stuff
float3 gradient = (float3)(0,1,0);
gradient = normalize(gradient);
return;
}
通过删除“梯度= normalize(梯度);” 在一行中,clBuildProgram不会崩溃,但是将其放在那里会使程序崩溃。梯度变量甚至没有在内核中使用,因此它与它的任何其他部分都不相关。并且归一化函数本身不应成为问题的根源,因为它已在代码的其他部分中使用。
我认为这可能与某些驱动程序错误有关。因为安装最新的CUDA版本(6.5)会使NVidia分发的OpenCL Volume Rendering示例二进制文件出现异常,所以在使用CUDA 6的安装过程中,Volume Rendering示例可以正常工作。
我的代码与体绘制技术有关,这就是为什么我认为它可能与之相关的原因,但是我的问题出现在CUDA 6.5和CUDA 6安装上。
您是否经历过类似的经历?可能是问题的原因,我该如何处理?
谢谢你。
经过进一步分析,如Xapa所述,该问题似乎是驱动程序中的错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句