Nsight在VS10中跳过(忽略)断点 Cuda工作正常,nsight一直跳过几个断点。

问题描述 投票:5回答:4

我用的是nsight 2.2,Toolkit 4.2,最新的nvidia驱动,我电脑里用的是几颗GPU。Build customize 4.2. 我在CUDA的项目属性中设置了 "generate GPU ouput",nsight监控器打开(一切看起来都很好)。

我在我的全局--内核函数上设置了几个断点,nsight在函数的声明处停止,但跳过了几个断点。这就像nsight决定是击中一个断点还是跳过一个断点一样。有趣的是,nsight停在for循环上,但没有停在简单的赋值操作上。

还有一个问题是,我不能设置焦点或向监视列表添加变量。在这种情况下(见附件截图),我无法解析变量:"posss "或 "testDetctoinRate1 "的值,在这种情况下,它们是寄存器。另一方面,共享内存或块内存会自动插入到本地的列表中。

下面是调试前的内核截图。

以下是调试时的截图

我用下面的调用唤起了我的内核函数。

checkCUDA<<<1, 32>>>(sumMat->rows,sumMat->cols , (UINT *)pGPUsumMat); 
cudaError = cudaGetLastError();
if(cudaError != cudaSuccess)
{
    printf("CUDA error: %s\n", cudaGetErrorString(cudaError));
    exit(-1);
}

内核调用没有错误。

有没有什么选项可以强制nsight在所有断点处停止?我如何将线程的寄存器添加到我的观察列表中?

更新

最初,我的调试命令行如下。

# Runtime API (NVCC Compilation Type is hybrid object or .c file)
set CUDAFE_FLAGS=--sdk_dir "c:\Program Files\Microsoft SDKs\Windows\v7.0A\"
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\bin\nvcc.exe" --use-local-env --cl-version 2010 -ccbin "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin" -I"..\..\..\opencv\modules\gpu\src\opencv2\gpu\device" -I"..\..\..\opencv\modules\gpu\include\opencv2\gpu" -I"..\..\..\build\include\\"   -G  --keep-dir "Debug" -maxrregcount=0  --machine 32 --compile  -g    -Xcompiler "/EHsc /nologo /Od /Zi  /MDd  " -o "Debug\%(Filename)%(Extension).obj" "%(FullPath)"

我在属性页上改了 --> cuda --> host --> 生成主机调试信息 --> No

现在我的命令行没有包含-g和-O字母,我的命令行如下。

# Runtime API (NVCC Compilation Type is hybrid object or .c file)
set CUDAFE_FLAGS=--sdk_dir "c:\Program Files\Microsoft SDKs\Windows\v7.0A\"
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\bin\nvcc.exe" --use-local-env --cl-version 2010 -ccbin "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin" -I"..\..\..\opencv\modules\gpu\src\opencv2\gpu\device" -I"..\..\..\opencv\modules\gpu\include\opencv2\gpu" -I"..\..\..\build\include\\"   -G  --keep-dir "Debug" -maxrregcount=0  --machine 32 --compile      -Xcompiler "/EHsc /nologo /Od /Zi  /MDd  " -o "Debug\%(Filename)%(Extension).obj" "%(FullPath)"

虽然,我用 -o这重要吗?它没有任何变化。

cuda gpu gpgpu gpu-programming nsight
4个回答
5
投票

在解决方案资源管理器中右键点击.cu文件,然后转到 CUDA C/C++ | Device 并设置 Generate GPU Debug InformationYes (-G0).


2
投票

检查Nsight下的 "Enable CUDA Memory Checker "是否被关闭。它可以让NSight在VS C++ 2010的Debug模式下停止CUDA内核代码的断点。 至少,它对我来说是有效的。


0
投票

在debug构建中,你是否同时向nvcc传递了-O和-g选项?如果是这样,请尝试去掉-O。

背景。这听起来就像是在调试经过编译器优化的代码时出现的问题。在优化过程中,编译器改变了代码的方式,使得源代码中的一些行不再有任何机器代码指令,使得调试器无法在这些行上设置断点。


0
投票

我也有类似的问题。Nsight并没有在任何一个断点上停止。但却完成了执行。

如果我使用-G0作为调试信息选项。它给出了一个错误。

我使用nvidia 2.2.0.1225与cuda 4.2和cuda 5工具包。用301.42图形驱动程序。

© www.soinside.com 2019 - 2024. All rights reserved.