合并触发是否以相反的顺序访问内存?

gre*_*man 3 memory cuda coalesce

假设我有几个线程,他们访问地址A + 0,A + 4,A + 8,A + 12(每个访问=下一个线程)的内存.这种访问是合并的,对吗?

但是,如果我以相反的顺序访问相同的内存,则意味着:

thread 0 -> A+12
thread 1 -> A+8
thread 2 -> A+4
thread 3 -> A+0
Run Code Online (Sandbox Code Playgroud)

这里的合并也会触发吗?

Rob*_*lla 9

是的,对于cc 2.0和更新的GPU,只要所有请求的32位数据元素来自(请求)相同的128字节(和128字节),32位数据元素随机排列到线程就会发生合并.全局记忆中的区域).

GPU在内存控制器中具有类似"纵横开关"的功能,可根据需要分配元素.您可能对此讨论合并的GPU网络研讨会感兴趣,并将以图形方式说明此特定情况(在幻灯片12上).

NVIDIA研讨会页面具有其他有用的网络研讨会,你可能感兴趣的为好.

对于pre-cc2.0设备 ,具体情况因计算能力而异,但计算1.0和1.1的设备不具备合并"逆序"或随机顺序的读取的能力.