1

我想知道除了简单地通过 Visual Studio 或操作系统的命令行执行二进制文件之外,是什么设置了“使用 Nsight 进行调试”选项。

我问的原因是因为如果我通过“使用 Nsight 调试”运行我的程序可以正常工作,但是在使用 Visual Studio 的启动按钮启动它(或只是启动可执行文件)时,在驱动程序崩溃后,我会得到一些未指定的 cudaErrors 和一些 cudaMemcpys ,这使我相信 Nsight 必须具有程序正确运行所必需的某种特定启动参数。

4

2 回答 2

1

当您的应用程序由于内核执行时间过长而遇到Windows TDR 事件时,会发生驱动程序崩溃和 API 错误。您可以通过修改系统注册表或将 Quadro 或 Tesla GPU 置于TCC 模式或减少内核的运行时间来解决此问题。

当您使用 nsight 进行调试时,您的内核执行可能会由于各种原因(单步、断点和其他原因)而停止,然后重新启动,具体取决于您在调试会话中所做的事情。内核执行的停止允许在没有 TDR 事件的情况下满足 windows 看门狗。

于 2013-07-30T21:07:45.440 回答
0

CUDA nSight 调试器允许您逐行调试 CUDA 内核,而使用标准 Visual Studio 调试器则无法做到这一点。

据推测,nSight 执行了一些代码注入以使其能够检测内核的运行时间,这也可能取决于您的设置,当使用 nSight 进行调试时,您的内核可能不会在 GPU 上执行。这些可能是调试器之间来来往往的错误的原因。我知道当我使用它们时,我也有类似的不一致。

如果您通过 nSight 分析器运行程序,它应该能够为您清楚地记录 memCpy 错误。

于 2013-07-30T19:49:20.533 回答