在编译时添加“-arch sm_20”标志之前,Cuda-gdb 遵守了我设置的所有断点。我必须添加它以避免抛出错误:'atomicAdd is undefined'(如此处所指出的)。这是我当前编译代码的语句:
nvcc -g -G --maxrregcount=32 Main.cu -o SW_exe (..including header files...) -arch sm_20
当我在内核中设置断点时,cuda-gdb 在内核的最后一行停止一次,然后程序继续。
(cuda-gdb) b SW_kernel_1.cu:49
Breakpoint 1 at 0x4114a0: file ./SW_kernel_1.cu, line 49.
...
[Launch of CUDA Kernel 5 (diagonalComputation<<<(1024,1,1),(128,1,1)>>>) on Device 0]
Breakpoint 1, diagonalComputation (__cuda_0=15386, __cuda_1=128, __cuda_2=0xf00400000, __cuda_3=0xf00200000,
__cuda_4=100, __cuda_5=0xf03fa0000, __cuda_6=0xf04004000, __cuda_7=0xf040a0000, __cuda_8=0xf00200200,
__cuda_9=15258, __cuda_10=5, __cuda_11=-3, __cuda_12=8, __cuda_13=1) at ./SW_kernel_1.cu:183
183 }
(cuda-gdb) c
Continuing.
但正如我所说,如果我删除“atomicAdd()”调用和标志“-arch sm_20”,这虽然会使我的代码不正确,但现在 cuda-gdb 会在我指定的断点处停止。请告诉我这种行为的原因。
我在 Tesla M2070(计算能力 = 2.0)上使用 CUDA 5.5。
谢谢!