Nvidia GPU 同时访问全局内存中的单个位置

Nvidia GPU simultaneous access to a single location in global memory

我想知道当单个 warp 中的多个线程尝试访问全局内存中的相同位置(例如,相同的 4 字节字)时会发生什么,尤其是在计算能力为 7.5 的图灵 GPU 中。我相信在会导致存储体冲突的共享内存中,除非所有线程都访问同一位置,否则数据将被广播。

举一个人为的例子:

1) 考虑一个 warp 的前 16 个线程访问单个 4 字节字,而其余 16 个线程访问下一个单个 4 字节字。在这种情况下如何处理访问?是否为 half warp 的每个线程序列化?

2) 如果整个 warp 试图访问全局内存中的单个 4 字节字怎么办?

  1. 没有连载。所有 CUDA GPU Kepler 和更新版本都将在该场景中广播。没有性能下降。

  2. 没有区别。任何重叠读取访问模式都在单个请求中处理,每个请求的事务数量经过优化。每个请求的事务不会高于普通合并的每个相邻位置一个线程类型的读取,并且可能会更低。例如,在现代 GPU 上,您可能会观察到每个合并的全局读取请求有 4 个(32 字节)事务。在所有线程(在 warp 中)访问单个位置的情况下,每个请求只有一个事务。