【发布时间】: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)无论如何都尝试过,行为没有改变。它不是同步的方式
-
你能发布一个可复制的吗?