【发布时间】:2016-06-07 04:26:36
【问题描述】:
我实际上从未遇到过需要缓存写入全局内存的值的情况。但我无法像在 CPU 上使用非临时写入那样阻止 GPU 污染缓存。
这是一个严重的问题,会导致性能下降 20% 或更多。
【问题讨论】:
-
如果你想重用你刚刚放入全局内存的任何值,那么使用你已经保存在私有内存中的值。再次调用全局值会进行另一次读取,因为没有任何方法可以确保工作项的值在写入后没有更改。实际上不涉及缓存。
-
@DarkZeros 那么为什么输出一个工作组的结果总和会比输出每个工作项的结果缓存命中率高呢?
-
在简单的 nbody 内核中为 xyz 坐标使用纯全局内存提供了与本地内存优化的性能相当的性能。性能比率类似于本地/缓存带宽比率。这可能是缓存的工作,但我没有检查 LLVM 输出,所以我不确定。 xyz 数据为 768kB,因此可以放入 L2 缓存中。