cuda-gdb 调试CUDA程序
调试工具
cuda-gdb
对于部分bug,可以用调试工具更快速的定位。
在linux下,对于API调用出错等问题,cuda gdb可以直接定位在崩溃那一行。
win下是Nsight,我不熟悉nsight,求大神补充。
cuda-memcheck
而对于核函数内访存类bug,有时候明明越界了,但是运行的时候却没有报错,造成结果结果,而cuda-memcheck可以直接定位这类bug。
建议在写完代码后,无论有没有bug,先用cuda-memcheck跑一遍。
调试平台
1.cuda-gdb 类似gdb的调试,如上文所讲
2.visual studio(安装了cuda工具包的,包含Nsight功能)
调试前提
可以调试的前提是cuda被编译成debug版!
为了能使cuda被编译成debug:
1.如果是使用vs构建的项目,选择debug即可
2.如果是自己手撸nvcc的化,一定要加上-g或-G
如:
$ nvcc –g –G MatrixCUDA.cu –o MatrixCUDA
-g是运行调试host端的代码(cpu代码)
-G是运行调试设备端代码(cuda代码)
3.如果是使用CMake构建的程序
那一定要加:
set(CUDA_NVCC_FLAGS -G;-g)
才可以调试。
cuda-gdb为例
调试CUDA程序与调试C/C++程序基本相同,gdb也可调试CUDA程序,但不能进入核函数。cuda-gdb比gdb多了进入CUDA核并调试的能力。所以gdb的命令cuda-gdb都继承了,命令详见:gdb调试C/C++程序。
本篇谈一下cuda-gdb独有的命令:
可以通过help cuda
查看可调试的命令:
cuda thread lane warp block sm grid device kernel
分别可以查看各自的值
help info cuda
查看info cuda可以调试的命令:
info cuda devices sms warps
….
注意这些内容只有在核函数内才有效,即程序当前必须运行到核函数内。