gpt4 book ai didi

caching - 如何避免 CUDA GPU 中的 TLB 未命中(以及高全局内存重放开销)?

转载 作者:行者123 更新时间:2023-12-04 02:54:02 24 4
gpt4 key购买 nike

标题可能比我的实际问题更具体,尽管我相信回答这个问题会解决一个更普遍的问题,即:如何减少 high latency (~700 cycle) 的影响来自 GPU 中随机(但合并)的全局内存访问。

一般来说,如果访问具有合并负载的全局内存(例如,我读取了 128 个连续字节),但合并访问之间的距离非常大 (256KB-64MB),则 TLB(转换后备缓冲区)未命中率很高.如此高的 TLB 未命中率是由于 TLB 查找表中使用的内存页数量有限 (~512) 和大小 (~4KB)。

我认为高 TLB 未命中率是因为 NVIDIA 使用了虚拟内存,我在profiler 以及自费米以来分区露营不是问题的事实。

是否有可能以某种方式避免高 TLB 未命中率?如果我正在访问沿 X 维度合并且沿 Z 维度具有 X*Y“跨度”的 (X x Y x Z) 立方体,3D 纹理缓存是否有帮助?

欢迎就此主题发表任何评论。

约束:1)全局数据不能重新排序/转置; 2) 内核是通信绑定(bind)的。

最佳答案

您只能通过更改内存访问模式来避免 TLB 未命中。内存中不同的数据布局可以帮助解决这个问题。
3D 纹理不会改善您的情况,因为它以两个额外维度中改进的空间局部性与第三个维度中减少的空间局部性进行交易。因此,您将不必要地读取沿 Y 轴的邻居数据。

然而,您可以做的是减轻由此产生的延迟对吞吐量的影响。为了在 b = 250GB/s 的全局内存带宽下隐藏 t = 700 个延迟周期,您需要有 b/t = 175 KB 的数据随时在传输中(或 14 个 SMX 中的每一个 12.5 KB)。在满载内存接口(interface)和高 TLB 未命中率的情况下,您会发现延迟接近 2000 个周期,每 sm 需要大约 32 KB 的传输事务。

由于正在运行的内存读取事务的每个字都需要一个寄存器,一旦值到达就会将其存储在该寄存器中,因此隐藏内存延迟必须与寄存器压力保持平衡。保持 32 KB 的数据传输需要 8192 个寄存器,占 SMX 上可用寄存器总数的 12.5%。

(请注意,对于以上粗略估计,我忽略了 KiBKB 之间的差异)。

关于caching - 如何避免 CUDA GPU 中的 TLB 未命中(以及高全局内存重放开销)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17004557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com