在一个CUDA C项目中,我有一个指针浮动在一个名为“p”的结构中。 它是指向设备内存的指针,称为“p-> deviceOutput”。我在执行期间使用CUDA-GDB检查此指针的内容:当我尝试打印时,会发生以下情况:
(gdb) p *p->deviceOutput
$1 = 0
正如您所看到的,打印返回的内容看起来像一个int,绝对不是浮点数。 我确定指针是浮点指针,所以我对此行为感到困惑。 指定浮动格式没有帮助:
(gdb) p/f *p->deviceOutput
$2 = 0
实际上我也使用GDB获得相同的行为。 我正在使用Ubuntu 14.10,我的代码是使用-O0和-g选项使用nvcc编译的。
有人可以解释一下发生了什么,我该怎么做才能正确检查这个内存位置?感谢
答案 0 :(得分:1)
gdb在打印浮点值时使用g
格式说明符printf(内部)。以下是来自man page for printf的g
描述的有趣部分:
从结果的小数部分删除尾随零;一个 小数点只有在后跟至少一位数时才会出现。
因为浮点值为0,所以你得到0,而g
格式说明符(由gdb使用)打印出一个没有小数点的精确0或任何尾随0的。
您可以使用ptype
命令检查您的变量是否为float类型,如下所示:
(gdb) ptype p->deviceOutput