【问题标题】:clBuildProgram crash on NVidia cardsNVidia 卡上的 clBuildProgram 崩溃
【发布时间】:2014-11-23 20:39:06
【问题描述】:

我有一个使用 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;
}

通过删除“gradient = normalize(gradient);”行, clBuildProgram 不会崩溃,但让它在那里,使程序崩溃。梯度变量甚至没有在内核内部使用,因此它与它的任何其他部分无关。而且 normalize 函数本身不应该是问题的根源,因为它在代码的其他部分使用。

我认为这可能与某些驱动程序错误有关。因为安装最新的 CUDA 版本 (6.5) 会使 NVidia 分发的 OpenCL Volume Rendering sample binaries 行为异常,而使用 CUDA 6 安装会使体积渲染示例正常工作。

我的代码与体渲染技术有关,这就是为什么我认为它可能是相关的,但我的问题出现在 CUDA 6.5 和 CUDA 6 安装中。

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

谢谢。

【问题讨论】:

  • 如果您确定 normalize 在代码的其他部分中有效,我建议您尝试一些不同的渐变值来查看它是否是特定数字问题,但无论哪种方式,如果它适用于 amd 和不在 nvidia 上,这可能是一个错误,您应该向 nvidia 报告。

标签: opencl nvidia


【解决方案1】:

经过进一步分析,问题似乎是驱动程序中的错误,正如 Xapa 所说。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 2021-12-04
    • 2023-03-26
    • 1970-01-01
    • 2012-05-03
    • 2017-01-07
    • 2020-06-11
    相关资源
    最近更新 更多