我有一个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 Volume Rendering sample binaries行为不当,而使用CUDA 6安装会使Volume Rendering示例正常工作。
我的代码与卷渲染技术有关,这就是为什么我认为它可能是相关的,但我的问题出现在CUDA 6.5和CUDA 6安装中。
您是否经历过类似的事情?可能是问题的原因,我该如何处理?
谢谢。
答案 0 :(得分:0)
经过进一步分析,问题似乎是驱动程序中的一个错误,正如Xapa所说。