标题可能比我的实际问题更具体,尽管我相信回答这个问题会解决一个更普遍的问题,即:如何减少来自随机(但合并)全局的高延迟(~700 个周期)的影响GPU中的内存访问。
一般来说,如果一个人以合并的负载访问全局内存(例如,我读取了 128 个连续字节),但合并访问之间的距离非常大(256KB-64MB),那么一个人会获得很高的 TLB(翻译后备缓冲区)未命中率。如此高的 TLB 未命中率是由于 TLB 查找表中使用的内存页面的数量有限(~512)和大小(~4KB)。
我想高 TLB 未命中率是因为 NVIDIA 使用了虚拟内存,我在分析器中获得高(98%)全局内存重放开销和低吞吐量(45GB/s,使用 K20c)和事实上,自从费米以来,分区露营就不是问题了。
是否有可能以某种方式避免高 TLB 未命中率?如果我正在访问沿 X 维度合并并沿 Z 维度具有 X*Y“步幅”的 (X x Y x Z) 立方体,3D 纹理缓存会有所帮助吗?
对此主题的任何评论表示赞赏。
约束:1)全局数据不能重新排序/转置;2)内核是通信绑定的。