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

标签 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

这里是否也触发了合并?

最佳答案

是的,对于 cc 2.0 和更新的 GPU,只要所有请求的 32 位数据元素都来自(请求自)相同的 128 字节(和 128 字节),任何随机排列的 32 位数据元素都会发生合并对齐)全局内存中的区域。

GPU 在内存 Controller 中有一个类似于“纵横开关”的东西,可以根据需要分配元素。您可能感兴趣 this GPU webinar它讨论了合并,并将以图形方式说明这个特殊情况(幻灯片 12)。

NVIDIA webinar page还有您可能感兴趣的其他有用的网络研讨会。

对于 cc2.0 之前的设备 the specifics vary by compute capability ,但支持计算 1.0 和 1.1 的设备没有这种能力来合并“反向顺序”或随机顺序的读取。

关于memory - 合并是否触发以相反的顺序访问内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15029765/

相关文章:

c++ - 哪个 Nsight 版本可以在 Visual Studio 2010 中使用 CUDA 5.5?

cuda - 如何确保编译器并行化全局内存中的加载?

MySQL查询: How to properly identify and retranslate comma-separated result values to the original notions using CONCAT_WS and COALESCE

xml - 在无法接受集合的上下文中调用的 Postgresql 合并和集值函数

python - 标准差的 NumPy 函数的内存消耗

arrays - lisp 减少堆(数组与列表)

c++ - CUDA/推力 : How to sum the columns of an interleaved array?

MySql 具有 NULL 和 0 行的乘法列

c - 查找堆栈的返回地址

c++ - 为什么变量的打印地址会在每次执行时打印随机值,即使它是 C 中的逻辑地址?