【发布时间】:2014-12-08 20:31:48
【问题描述】:
在 CUDA 分析器中,有两个指标称为 dram_read_transactions 和 gld_transactions。 cuda profiler 用户指南说“gld_transactions”表示全局内存加载事务的数量,而“dram_read_transactions”表示设备内存读取事务。我无法分辨这些描述之间的区别,因为读取数据意味着加载数据,而全局内存是 DRAM 的。但是这两个指标的分析结果是不同的。我用一个内核进行了测试。对于同一个内核,不同线程设置,gld_transactions 总是相同的值 33554432。并且这个值是稳定的。但是对于 dram_read_transactions,两个不同的线程设置会导致不同的值,它们大致是 4486636 和 4197096。对于“大致”这个词,我的意思是这些值并不稳定,因为它们从一个执行到另一个执行略有变化。我们还可以看到 dram_transactions 比 gld_transactions 少得多。所以我的问题可以总结在这里:
- gld_transactions 和 dram_read_transactions 之间的真正区别是什么?
- 为什么 dram_read_transactions 比 gld_transactions 小很多?
- 对于不同的线程设置,为什么gld_transactions值稳定而dram_read_transactions不稳定?
我认为一旦我们知道了问题 (1) 的答案,那么问题 (2) 和 (3) 就可以很容易地解释了。那么有人可以解释一下吗?提前致谢。
【问题讨论】:
-
gld_transactions 是 128 字节 L1 事务的数量(这包括未缓存的负载)。 dram_read_transactions 是实际设备内存的 32 字节数。如果您有 CC2.0 或更高版本,则 SM 和 DRAM 之间有两级缓存层次结构。 gld_transactions 更稳定,因为它可以在整个芯片上收集。 dram_read_transactions 只能从 pass 的 1/2 接口中收集,并且由于 L1 和 L2 的内容而存在可变性。
标签: cuda