【发布时间】:2011-07-13 18:26:37
【问题描述】:
我正在尝试使用 cuda-gdb 检查全局设备内存。即使在 cudaMemcpy 之后,这些值似乎都为零。但是,在内核中,共享内存中的值是好的。任何想法? cuda-gdb 是否甚至会检查全局设备内存。似乎主机内存和设备共享内存都很好。谢谢。
【问题讨论】:
标签: cuda
我正在尝试使用 cuda-gdb 检查全局设备内存。即使在 cudaMemcpy 之后,这些值似乎都为零。但是,在内核中,共享内存中的值是好的。任何想法? cuda-gdb 是否甚至会检查全局设备内存。似乎主机内存和设备共享内存都很好。谢谢。
【问题讨论】:
标签: cuda
假设 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}
【讨论】:
目前 cuda-gdb 只有在 CUDA 内核启动后才能读取您复制到全局内存中的数据。这可能会在未来的版本中得到改善。
【讨论】:
检查全局内存中数据的一种简单方法是将数据从全局内存写回主机并查看值。但我不确定是否可以使用 cuda-gdb 进行检查。
对了,你怎么知道全局内存中的值都是零。如果您的最终结果完全为零,则表示您的代码有问题。如果 CUDA 不知道确切的值是什么,它会返回零。例如,大多数情况下 CUDA 不返回 NAN,而是返回零。
【讨论】: