Nsight在VS10的断点上跳过(忽略)Cuda工作得很好,后者一直跳过几个断点

时间:2012-05-31 05:39:10

标签: cuda gpu gpgpu gpu-programming nsight

我正在使用nsight 2.2,Toolkit 4.2,最新的nvidia驱动程序,我在我的计算机中使用了几个gpu。构建自定义4.2。 我在CUDA的项目属性上设置了“生成GPU输出”,nsight监视器开启(一切看起来都很棒)。

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

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

Here is a screen shot of the kernel , before debugging

Here is a screen shot during debugging

我通过以下调用唤起了我的内核函数:

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

内核调用没有错误。

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

任何帮助将不胜感激 我可以按需发布我的代码

干杯


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

运行时API(NVCC编译类型是混合对象或.c文件)

设置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)“


我在属性页面上更改了 - &gt; cuda - &gt;主持人 - &gt;生成托管调试信息 - &gt;没有

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

运行时API(NVCC编译类型是混合对象或.c文件)

设置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调试,这有关系吗? 它没有做任何改变

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

检查&#34;启用CUDA内存检查器&#34;在Nsight下是否关闭。它可能允许NSight在VS C ++ 2010的调试模式下停止CUDA内核代码的断点。至少,它适用于我。

答案 2 :(得分:0)

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

背景:这听起来像是在尝试调试已由编译器优化的代码时遇到的问题。在优化期间,编译器会更改代码,使得某些源代码行不再具有与之关联的任何机器代码指令,从而使调试器无法在这些行上设置断点。

答案 3 :(得分:0)

我有类似的问题。 Nsight并没有停在任何一个破发点。但是完成执行。

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

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