Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging Nvidia visual studio Nsight CPU和GPU调试_Debugging_Visual Studio 2012_Cuda_Nvidia_Remote Debugging - Fatal编程技术网

Debugging Nvidia visual studio Nsight CPU和GPU调试

Debugging Nvidia visual studio Nsight CPU和GPU调试,debugging,visual-studio-2012,cuda,nvidia,remote-debugging,Debugging,Visual Studio 2012,Cuda,Nvidia,Remote Debugging,NVIDIA Nsight Visual Studio版似乎无法同时调试CPU(主机代码)和GPU(cuda代码)。对于Nsight Eclipse版本(或cuda gdb),这非常简单,例如,您可以从主机执行“介入”到cuda内核。如何使用Visual Studio执行同样的操作?来自 上面说 使用单独的Visual Studio实例调试 目标应用程序。如果您希望调试CUDA的主机部分 应用程序连接CUDA调试器时,必须使用 另一个Visual Studio实例。附加的相同实例 Visual

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

来自

上面说

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

因此,要调试CUDA应用程序,请执行以下步骤:

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

  • 额外积分:远程调试CUDA应用程序。 步骤:

  • 在目标计算机上,以管理员身份运行msvsmon.exe(远程调试器)。这可在以下网址找到: C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\Common7\IDE\Remote Debugger\x64
  • 在主机(您要从中控制调试的主机)上,打开VS并确保Nsight调试器指向远程计算机(Nsight用户属性>启动>连接名称)。注意:英伟达NVIST监视器必须在目标机器上运行,以便工作。
  • 执行上一节(非远程调试)中的步骤1和2。在步骤2中,您需要指向远程计算机进行CPU调试(调试>附加到进程>限定符应设置为目标计算机名称或IP)
  • 非远程调试步骤3和4也适用于此处
  • 注意:看起来VS的远程CPU调试不如其本地CPU调试。例如,当您将鼠标悬停在CPU变量上时,这些值不会像您在进行本地调试时所期望的那样出现

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

    作为“仍然未响应”的解决方法,您可以调用可调试的虚拟内核作为main中的第一条语句,在内核中放置断点,然后将#2附加到正在运行的进程。然后,您可以释放#1中的断点,以便在#2中CPU代码的任何一行命中断点。使用某个调试标志上的ifdef,您可以根据上下文轻松地过滤掉发布版本或任何您喜欢的伪内核调用。