全部 从“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
答案 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编译器)。从那时起,有很多改进(特别是:错误修复)。