澄清 CUDA 中的内存事务

问题描述 投票:0回答:1

我对 CUDA 编程指南 4.0 第 5.3.2.1 节中的以下陈述感到困惑 在绩效指南一章中。

全局内存驻留在设备内存中,并访问设备内存 通过 32、64 或 128 字节内存事务。

这些内存事务必须自然对齐:只有32-、64- , 与其大小对齐的 128 字节设备内存段 (即其首地址是其大小的倍数)可以读取或 由内存事务写入。

问题第 1 部分: 我对设备内存的理解是,线程对设备内存的访问是未缓存的:因此,如果线程访问内存位置

a[i]
,它将仅获取
a[i]
,而不会获取任何内容。 值约为
a[i]
。所以第一个说法似乎与此相矛盾。或者也许我误解了“内存事务”一词的用法?

问题第二部分:第二句话似乎不太清楚。有人可以解释一下吗?

cuda gpu nvidia
1个回答
7
投票
  1. 内存事务是按每个warp执行的。因此,32 字节事务是 8 位类型的扭曲大小的读取,64 字节事务是 16 位类型的扭曲大小的读取,128 字节事务是 32 位类型的扭曲大小的读取。
  2. 这只是意味着所有读取都必须与自然字大小边界对齐。 Warp 不可能读取具有 1 字节偏移量的 128 字节事务。请参阅此答案了解更多详细信息。
© www.soinside.com 2019 - 2024. All rights reserved.