首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >夜景跳过(忽略)断点在VS10 Cuda工作良好,夜景始终跳过几个断点

夜景跳过(忽略)断点在VS10 Cuda工作良好,夜景始终跳过几个断点
EN

Stack Overflow用户
提问于 2012-05-31 13:39:10
回答 4查看 4.4K关注 0票数 5

我正在使用nsight 2.2,Toolkit 4.2,最新的nvidia驱动程序,我在我的电脑中使用了几个GPU。构建自定义4.2。我已经在CUDA的项目属性上设置了“生成GPU输出”,nsight monitor打开了(一切看起来都很棒)。

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

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

Here is a screen shot of the kernel, before debugging

Here is a screen shot during debugging

我通过下面的调用调用我的内核函数:

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

内核调用工作正常,没有错误。

是否有强制nsight在所有断点停止的选项?如何将线程的寄存器添加到我的监视列表?

更新

最初,我的debug命令行如下所示:

代码语言:javascript
复制
# 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 -->主机-->生成主机调试信息-->否-->进行了更改

现在我的命令行不包含-g和-O字母,我的命令行如下:

代码语言:javascript
复制
# 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调试的,但这有关系吗?它不会做任何改变。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-02 01:08:00

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

票数 6
EN

Stack Overflow用户

发布于 2013-03-29 11:31:02

检查Nsight下的Enable CUDA Memory Checker是否关闭。它可能允许NSight在VS C++ 2010的调试模式下停止您的CUDA内核代码的断点。至少,它对我来说是有效的。

票数 2
EN

Stack Overflow用户

发布于 2012-05-31 14:34:47

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

背景:这听起来像是在调试已经被编译器优化的代码时遇到的那种问题。在优化期间,编译器以这样一种方式更改代码,即源代码的某些行不再具有任何与其关联的机器代码指令,从而使调试器不可能在这些行上设置断点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10827995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档