【问题标题】:Cuda error 30 disappears when I debug in Nsight当我在 Nsight 中调试时,Cuda 错误 30 消失了
【发布时间】:2013-02-19 09:50:41
【问题描述】:

VS 2010k 和 Nsight v3

我正在对一些 cuda 模块进行修改;当我在 VS 这个主机代码中以调试模式运行时:

result = cuLaunchKernel ( cuFunction, dimGrid.x, dimGrid.y, dimGrid.z, dimBlock.x, dimBlock.y, dimBlock.z, shared, stream, argsG, 0);
cudaDeviceSynchronize();
err = cudaGetLastError();

我得到的 result 值为零,但 err 在第一次通过这部分代码和每次通过时为 30 [或未知]。

所以我启动了 NSight 以解决问题。处理了我的整个输入文件,没有任何错误。在 Nsight 中打开内存检查并重新运行。再次处理整个文件而没有投诉。

所以:在主机调试下,每次启动此代码都会导致错误 30,但在 Nsight 的控制下运行并且没有错误。

有人解释一下吗?

谢谢

【问题讨论】:

  • 在我看来,您正在混合驱动程序 API(例如 cuLaunchKernel)和运行时 API(例如 cudaDeviceSynchronize、cudaGetLastError)。如果您使用驱动程序 API 函数(cuCtxSynchronize 并直接解析返回的 CUresult 而不是使用 cudaGetLastError),您会看到任何不同的结果吗?此外,您可能希望查看其中一个驱动程序 API cuda 示例,以获取驱动程序 API 错误解析的示例。
  • 感谢您的想法。但是 a) 代码以这种方式已经工作了 5 个月; b) 没有解释为什么代码在 Nsight 中运行良好; c)无论如何都尝试过,行为没有改变。它不是同步的方式
  • 你能发布一个可复制的吗?

标签: cuda gpu nsight


【解决方案1】:

解决了程序问题:由于错误,正在计算错误的全局内存地址。为什么 Nsight 没有 捕捉到错误,而是直接通过了——即使打开了内存检查,我也不明白。

【讨论】:

    猜你喜欢
    • 2012-11-05
    • 2011-12-09
    • 1970-01-01
    • 2013-08-11
    • 2014-11-20
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多