我正在尝试使用cuda-gdb来检查全局设备内存。即使在cudaMemcpy之后,似乎值都为零。但是,在内核中,共享内存中的值很好。任何的想法? cuda-gdb甚至可以检查全局设备内存。似乎主机内存和设备共享内存都很好。谢谢。
答案 0 :(得分:13)
假设d_array是指向设备内存的指针,
(cuda-gdb) print d_array
$1 = (double *) 0x13082c3000
要访问其值,首先将其转换为全局内存指针:
(cuda-gdb) print ((@global double *)d_array)[0]
$2 = 0.5
访问数组:
(cuda-gdb) print ((@global double *)d_array)[0]@3
$3 = {0.5, 0.4, 0.3}
答案 1 :(得分:1)
目前,只有在CUDA内核启动后,cuda-gdb才能读取您复制到全局内存中的数据。这可能会在将来的版本中得到改善。
答案 2 :(得分:0)
检查全局内存中数据的一种简单方法是将数据从全局内存写回主机并查看值。但我不确定是否可以用cuda-gdb检查这个。
顺便说一下,你怎么知道全局内存中的值都是零。如果您的最终结果完全为零,则表示您的代码中存在错误。如果CUDA不知道该值究竟是什么,则返回零。例如,大多数CUDA不返回NAN,而是返回零。