Nsight跳过(忽略)VS10 Cuda中的断点工作正常,Nsight始终跳过多个断点

Nsight跳过(忽略)VS10 Cuda中的断点工作正常,Nsight始终跳过多个断点,cuda,gpgpu,gpu,nsight,Cuda,Gpgpu,Gpu,Nsight,我正在使用nsight 2.2,Toolkit 4.2,最新的nvidia驱动程序,我在我的计算机上使用了两个GPU。构建自定义4.2。我已经在CUDA的项目属性上设置了“生成GPU输出”,nsight monitor处于打开状态(一切看起来都很好) 我在全局核函数上设置了几个断点。nsight在函数声明时停止,但跳过几个断点。这就像nsight决定是到达断点还是跳过断点一样。有趣的是,nsight在for循环中停止,但在简单的赋值操作中不停止 还有一个问题是,我无法设置焦点或将变量添加到观察列

我正在使用nsight 2.2,Toolkit 4.2,最新的nvidia驱动程序,我在我的计算机上使用了两个GPU。构建自定义4.2。我已经在CUDA的项目属性上设置了“生成GPU输出”,nsight monitor处于打开状态(一切看起来都很好)

我在全局核函数上设置了几个断点。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);
}
我在属性页-->cuda-->主机-->生成主机调试信息-->否上更改

现在,我的命令行不包含-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
进行调试,但这有关系吗?它不做任何更改。

在调试版本中,是否将-O和-g选项都传递给nvcc?如果是,请尝试删除-O


背景:这听起来像是调试编译器优化过的代码时遇到的问题。在优化过程中,编译器更改代码的方式使某些源代码行不再具有任何与其关联的机器代码指令,从而使调试器无法在这些行上设置断点。

右键单击解决方案资源管理器中的.cu文件,然后转到
CUDA C/C++|设备
,并将
生成GPU调试信息
设置为
是(-G0)
,我有类似问题。Nsight不会在任何断点处停止。但是完成了执行

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


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

检查Nsight下的“启用CUDA内存检查器”是否已关闭。它可以允许NSight停止VS C++ 2010调试模式下的CUDA内核代码的断点。至少,它对我有效。

我在属性页-->cuda-->主机-->生成主机调试信息-->否上更改了。它没有做任何更改。实际上,以“-”开头的选项用于nvcc,以“/”开头的选项传递给cl。
主机
部分中的更改只影响“/”cl选项。因此“-O”标志可能来自
设备
部分的某些设置,但我在命令行选项中没有看到它。我正在将您的命令行与Visual Studio 2010 CUDA项目的命令行进行比较,您的命令行具有
-G
,而我的命令行具有
-G0
。但是,如果我将
生成GPU调试信息
设置为
,则不会得到
-G
。在互联网上,
-G
完全消失。所以这个答案可能没有帮助。请随时提供您的整个项目。我将下载它,看看调试是否对我有效。谢谢帮助,我生成的GPU调试信息已设置为“是”。嘿,罗杰,谢谢帮助,终于成功了,我可以在nsight中查看寄存器值。我建议使用nsight的最新版本。另外,如果您可以使用特定于方面的值,则可以将其声明为共享。我正在尝试调试此项目中的cuda代码:。默认情况下,我的设置已经是
-G
,但它仍然会跳过断点,为什么?那么您是打开还是关闭了它?此外,每当我打开它,我的屏幕就会变黑,似乎操作系统坏了,我所要做的就是按下电源按钮重启电脑;(
# 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)"