是发生聚合引发了相反的顺序访问内存?(Is coalescing triggered for acc

2019-08-17 03:29发布

比方说,我有几个线程,它们在地址A + 0,A + 4,A + 8,A + 12(每个接入=下一个线程)访问内存。 这样的访问被合并,对不对?

但是,如果我有机会获得同样的内存,但以相反的顺序,这意味着:

thread 0 -> A+12
thread 1 -> A+8
thread 2 -> A+4
thread 3 -> A+0

被合并在这里也引发?

Answer 1:

是的,对于CC 2.0和更新的GPU,将所有所请求的32位数据元素是从(从请求的)相同的128字节(128字节来发生聚结针对32位的数据元素到线程的任何随机布置,只要在全局内存对齐)区域。

GPU具有类似在存储器控制器根据需要,将分配元件“纵横开关”。 你可能有兴趣在此GPU网络研讨会其论述了聚结,并且将图示地说明此特定情况下(在滑动件12)。

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

对于CC2.0预设备的具体计算能力而变化 ,但计算1.0和1.1能力的设备不具有这种能力聚结读取处于“逆序”或随机顺序。



Answer 2:

另外值得一提的是,L2缓存的Nvidia的GPU主要目的是瓦解读取和写入合并。 所以,如果一个经被访问

thread 0 -> A+0
thread 1 -> A+8
thread 2 -> A+16
thread 3 -> A+24
...

和另一个经纱是访问

thread 0 -> A+4
thread 1 -> A+12
thread 2 -> A+20
thread 3 -> A+28
...

这两个访问不会聚结SM里面,但一般会在L2缓存合并,使GPU内存仅会被感动。



文章来源: Is coalescing triggered for accessing memory in reverse order?