合并访存Memory coalescing

组织同组线程的访问地址,让硬件用较少的内存事务满足请求。

核心约束
改变线程与元素的对应布局时,必须保持每个元素的读写语义及有效访问范围。
适用问题
GPU 张量访存、线程布局选择与带宽利用优化。
边界与取舍
事务减少不等于重复数据读取被消除,布局转换也可能有成本。

常见操作#

考察一组共同执行访存指令的线程:需要知道有效地址、元素宽度、对齐和目标硬件的内存事务粒度。

操作时间成本条件与说明
计算访问覆盖的内存段由地址分布与事务粒度决定连续且对齐的访问通常覆盖较少的段;跨段、稀疏地址和有效线程掩码会改变结果。
调整线程与元素布局编译分析与运行时布局转换分别核算布局选择可以在编译时完成;需要的数据交换、转换指令及寄存器占用仍可能在运行时付出成本。
评估实际收益结合访存事务、有效带宽与端到端耗时事务数不能直接等同于显存物理读取量或执行时间,缓存命中、并发和其他指令也会影响结果。

时间与空间#

时间成本
不套用统一大 O;按实际地址与硬件内存事务分析
空间成本
由布局、寄存器及可能使用的交换缓冲区决定

合并访存不改变算法所需的逻辑元素;它与跨迭代的数据复用、共享内存分块分别分析。

概念与变体#

合并访存
关注同组线程访问的地址覆盖多少内存段,减少满足这批请求所需的事务。
分块计算
关注把数据留在较快存储层中复用。两者可以配合,但不能仅凭分块布局名称认定已经减少重复读取。

工程中的应用#

1 个案例 · 附源码
基础原理参考资料

NVIDIA CUDA · Coalesced access to global memory按设备能力、地址对齐和访问模式分析内存事务;不把某一硬件粒度推广到所有架构。

4 个概念