一、什么是 Memory Coalescing?
Memory Coalescing(内存合并访问) 是指:GPU 中的多个线程(通常是一个 warp 中的 32 个线程)在访问 global memory 时,如果它们访问的地址是连续的(或满足特定模式),则这些访问可以被“合并”为一次内存事务,从而提高内存带宽利用率和程序性能。
二、为什么需要 Coalescing?
由于 GPU 全局内存访问代价较高,而且一次 memory transaction 会消耗较多时钟周期,若不能合并访问,就会造成:
-
每个线程单独访问 → 每个线程一条内存指令
-
内存带宽浪费(访问效率低)
-
Warp 内存访问严重瓶颈
合并访问的目标是:尽量让一次访问传输尽可能多线程需要的数据。
三、合并访问规则(不同架构)
1. 老架构(Compute Capability ≤ 1.3)
-
要求所有线程访问 严格连续地址
-
例如线程
i访问地址A + i * sizeof(type)
2. Fermi 及以后(CC ≥ 2.0)
-
支持更灵活的访问方式,但仍有最佳
订阅专栏 解锁全文
74

被折叠的 条评论
为什么被折叠?



