Nvidia visual studio Nsight CPU和GPU调试

rmc*_*701 4 debugging cuda remote-debugging nvidia visual-studio-2012

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

rmc*_*701 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调试(Debug> Attach to Process> Qualifier应设置为目标机器名称或IP).
  4. 非远程调试步骤3和4也适用于此处.

注意:看起来VS的远程CPU调试不像其本地CPU调试那样强大.例如,当您将鼠标悬停在CPU变量上时,会出现在您进行本地调试时未出现的值.

STILL UNANSWERED:是否可以在命中CUDA断点之前开始调试主机代码?这似乎是一个很大的限制,您只能在第一个CUDA内核之后调试主机代码.如果您希望在第一个CUDA内核之前调试主机代码,该怎么办?