我有一个 10 行 96 列的 2D 主机阵列。我将此数组线性加载到我的 cuda 设备全局内存中,即 row1、row2、row3 ... row10。
该数组是浮点类型。在我的内核中,每个线程都从设备全局内存中访问一个浮点值。
The BLOCK_SIZE I use is = 96
The GRID_DIM I use is = 10
现在我从合并访问的“Cuda C 编程指南”中了解到,我使用的模式是正确的,通过 warp 连续访问内存位置。但是有一个关于内存 128 字节内存对齐的条款。我无法理解。
Q1) 128字节内存对齐;这是否意味着warp中的每个线程都应该访问从地址0x00(例如)到0x80的4个字节?
Q2) 那么在这种情况下,我是否会进行未合并的访问?
我的理解是:一个线程应该进行一次内存访问,应该是 4 个字节,从地址范围,例如从 0x00 到 0x80。如果来自 warp 的线程访问其外部的位置,则它是未合并的访问。