我正在使用nsight 2.2,Toolkit 4.2,最新的nvidia驱动程序,并且在我的计算机中使用了几个GPU。构建自定义4.2。我已经在CUDA的项目属性上设置了“generate GPU ouput”​​(生成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在所有断点处停止?如何将线程的寄存器添加到监视列表?

更新

最初,我的调试命令行如下:
# 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字母,我的命令行如下:
# 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进行调试,这有关系吗?它没有任何改变。

最佳答案

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

关于cuda - Nsight跳过(忽略)VS10 Cuda中的断点效果很好,nsight始终跳过多个断点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10827995/

10-15 09:22