试图唤醒 gpu 中的断点
Posted
技术标签:
【中文标题】试图唤醒 gpu 中的断点【英文标题】:Trying to wake up breaking points in gpu 【发布时间】:2014-03-15 20:09:05 【问题描述】:我想使用 Nsight 进行调试,但编译器不会在断点处停止。我已启用生成调试信息的选项。
这里是命令行:
驱动 API(NVCC 编译类型为 .cubin、.gpu 或 .ptx)
设置 CUDAFE_FLAGS=--sdk_dir "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\" "C:\Program Files\NVIDIA GPU 计算工具包\CUDA\v5.5\bin\nvcc.exe" --use-local-env --cl-version 2010 -ccbin "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64" -G --keep-dir x64\Debug -maxrregcount=0 --machine 32 --compile -cudart static -o MP7.dir\Debug\%(文件名)%(扩展名) .obj "%(FullPath)"
运行时 API(NVCC 编译类型为混合对象或 .c 文件)
设置 CUDAFE_FLAGS=--sdk_dir "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\" "C:\Program Files\NVIDIA GPU 计算工具包\CUDA\v5.5\bin\nvcc.exe" --use-local-env --cl-version 2010 -ccbin "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64" -G --keep-dir x64\Debug -maxrregcount=0 --machine 32 --compile -cudart static -g -Xcompiler "/EHsc /nologo /Zi " -o MP7. dir\Debug\%(文件名)%(扩展名).obj "%(FullPath)"
当 Nsight 调试器启动断点更改时,会出现一个感叹号,其中包含以下框信息:
The break point will not be currently be hit No CUDA device code for source file c:\users\..\file.cu. Did you enable device information in your project?
.ilk
和 .pdb
文件与 .exe
位于同一文件夹中。此外,在作为Working directory
的 Nsight 调试器中,设置了包含上述文件的文件夹。
此外,在内核函数内部设置了断点。
如何找出问题所在?我陷入了僵局。
谢谢!
PS: Win 7 64x,VS2010 64x 解决方案,Nsight 3.2 64x,Cuda sdk 5.5 64x,Nsight 在 sdk 样本中运行良好,GeForce 9600 GT(计算能力 1.1)
【问题讨论】:
也许你对Cuda-gdb not stopping at breakpoints inside kernel这个讨论感兴趣。 谢谢!还将compute_20,sm_20
与cc 一起使用。 1.1 损坏了我的结果。我该怎么处理那个帖子?它是否被视为重复?我应该删除它吗?
【参考方案1】:
您的设备是计算能力 1.1
但您正在为计算能力 2.0 进行编译:“代码生成 compute_20,sm_20”
因此没有与您的计算能力 1.1 设备对应的设备代码,因此您无法正确设置或命中断点。
将代码生成更改为compute_11,sm_11
以匹配您的设备。
【讨论】:
我想在共享内存中使用 atomicAdd。使用配置,compute_11,sm_11
返回error : Ptx assembly aborted due to errors
。共享内存atomicAdds
不适用于cc. 1.1
?我必须在全局内存中工作?
也许您应该阅读atomics 上的编程指南部分。共享内存中的原子添加需要 cc 1.2以上是关于试图唤醒 gpu 中的断点的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 TensorFlow 中的“gpu 内存不足”问题
为啥 xcode 编辑方案中的 GPU 帧捕获中没有 GLES 选项