CUDA:计算能力1.2或更高版本的内存事务大小

时间:2011-03-17 20:06:09

标签: memory cuda bandwidth coalescing

全部 从“NVIDIA CUDA编程指南2.0”第5.1.2.1节: “在具有计算能力1.2及更高版本的设备上合并”

“查找包含编号最小的活动线程请求的地址的内存段。对于8位数据,段大小为32字节,对于16位数据,段大小为32字节,对于32-,64-和128-为128字节位数据。“

我在这里有一个疑问:因为每个半warp有16个线程,如果所有线程都访问8位数据,那么每个half-warp的总大小应该是16 * 8-bit = 128 bits = 16 bytes。而“指南”表示“8位数据的32字节”。似乎浪费了一半的带宽。我理解正确吗?

由于 Deryk

1 个答案:

答案 0 :(得分:2)

是。内存访问始终是32,64或128字节的块,无论您从该内存行实际需要多少。


<强>更新

问题: 如何解释16位数据的64个字节?

值:1byte-words为32bytes,2byte-words为64bytes,高字节字为128bytes为访问段的最大大小。例如,如果每个线程获取2字节字并且您的访问完全对齐,则内存访问将减少以仅使用32字节线路获取。

查看“CUDA编程指南(v3.2)”的G.3.2.2“计算能力1.2和1.3的设备”部分。

我看到你使用了CUDA PG v.2.0(可能还有CUDA 2.0编译器)。从那时起,有很多改进(特别是:错误修复)。