4

NVIDIA Nsight Visual Studio 版似乎无法同时调试 CPU(主机代码)和 GPU(cuda 代码)。使用 Nsight Eclipse Edition(或 cuda-gdb),这非常简单,例如,您可以从主机执行“介入”到 CUDA 内核。如何用 Visual Studio 做同样的事情?

4

1 回答 1

8

来自Nsight 手册

它说

使用单独的 Visual Studio 实例来调试目标应用程序的宿主部分。如果您希望在附加 CUDA 调试器时调试 CUDA 应用程序的主机部分,则必须使用不同的 Visual Studio 实例进行附加。附加相同的 Visual Studio 实例来调试目标应用程序的主机部分和设备部分将导致调试器发生冲突。结果是目标应用程序和 CUDA 调试器在被本机调试器的操作阻止时挂起。

因此,调试 CUDA 应用程序的步骤如下:

  1. 打开 Visual Studio(VS 实例 #1)并在 CUDA 内核中设置断点,然后单击“开始 CUDA 调试”。这将启动应用程序实例并在您设置断点的位置停止。
  2. 打开另一个 Visual Studio 实例(VS 实例 #2)(出于某种原因需要以管理员身份运行)并附加到您在步骤 1 中启动的进程。
  3. 在 VS 实例 #2 中,浏览到您希望进行 CPU 调试的文件并设置断点。
  4. 在 VS 实例 #1 中继续执行(应该脱离当前的 CUDA 内核)。此时,您在 VS 实例 #2 中设置的 CPU 断点应该被命中。

额外功劳: 远程调试 CUDA 应用程序。脚步:

  1. 在目标机器上以管理员身份运行 msvsmon.exe(远程调试器)。这可以在 C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Remote Debugger\x64 中找到。
  2. 在主机(您要控制调试的主机)上,打开 VS 并确保 Nsight 调试器指向远程机器(Nsight 用户属性 > 启动 > 连接名称)。注意: Nvidia Nsight 监视器必须在目标机器上运行才能正常工作。
  3. 执行前面(非远程调试)部分的步骤 1 和 2。在第 2 步中,您需要指向远程计算机进行 CPU 调试(调试>附加到进程>限定符应设置为目标计算机名称或 IP)。
  4. 非远程调试步骤 3 和 4 也适用于此。

注意:看起来 VS 的远程 CPU 调试功能不如其本地 CPU 调试功能。例如,当您将鼠标悬停在 CPU 变量上时,当您进行本地调试时,这些值不会像您预期的那样出现。

仍然没有答案:是否可以在遇到 CUDA 断点之前开始调试主机代码?您只能在第一个 CUDA 内核之后调试主机代码,这似乎是一个很大的限制。如果您想在第一个 CUDA 内核之前调试主机代码怎么办?

于 2013-08-29T16:08:36.790 回答