【问题标题】:Memory inspection using cuda Nsight debugger使用 cuda Nsight 调试器进行内存检查
【发布时间】:2014-09-25 13:45:42
【问题描述】:

above screenshot of NSIGHT debugger,谁能给我解释一下:

1- 0.2010854 到底是什么? (见本地窗口)

2-地址的值是多少:0x00110000

3- 为什么这个地址只有 16 位?在 32 位操作系统上,它不应该是 32 位吗? 对不起,这是我的错误,它是 32 位的,如下面的评论中指出的那样。

【问题讨论】:

  • 我认为 0.2010854 是该行 (A) 上引用的 __device__ float* 指针所指向的第一个 float 值。是什么让您认为 0x00110000 是 16 位地址?每个十六进制数字需要 4 位存储空间。显示了 8 个十六进制数字。 4x8=32 位。
  • @RobertCrovella,哦,是的,它是 32 位的。顺便说一句,内存窗口给出了什么信息?那个窗口里有 0.2010854 吗?
  • 内存窗口还向您显示从内存地址0x00110000 开始的内存中存储的内容(在这种情况下),但它会逐字节显示数据。例如,如果您获取前 4 个字节并将它们重新排列为 32 位数量(因此,0x3e4de99c),您将拥有 0.2010854 的float 表示。

标签: cuda nsight


【解决方案1】:

1- 0.2010854 到底是什么? (见本地窗口)

它是包含在地址 0x00110000 中的 float 数量我们期望一个 float 表示,因为变量 A,一个 __device__ float 指针,应该指向一个 float 数量:

A = 0x00110000

*A = 0.2010854

2-地址的值是多少:0x00110000

该地址的值是 0.2010854,表示为 float 数量,或 0x3e4de99c 表示为 32 位十六进制数量(例如十六进制无符号整数)。

3- 为什么这个地址只有 16 位?在 32 位操作系统上,它不应该是 32 位吗?对不起,这是我的错误,它是 32 位的,如下面的评论中指出的那样。

地址实际上是32位。每个十六进制数字构成4位,共有8位。

内存窗口提供什么信息?那个窗口里有 0.2010854 吗?

内存窗口还向您显示从内存地址 0x00110000(在本例中)开始的内存中存储的内容,但它会逐字节显示数据。例如,如果您获取前 4 个字节并将它们重新排列为 32 位数量(即 0x3e4de99c),您将获得 0.2010854 的浮点表示。

【讨论】:

    猜你喜欢
    • 2013-12-13
    • 2012-09-23
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 2014-12-04
    • 2014-11-20
    相关资源
    最近更新 更多