在CUDA分析器中,有两个度量标准叫做dram_read_transactions和gld_transactions。cuda分析器用户指南说"gld_transactions“表示全局内存负载事务的数量,而"dram_read_transactions”表示设备内存读取事务。我无法分辨这些描述之间的区别,因为读取数据意味着加载数据和全局内存是拖放的。但这两种指标的分析结果是不同的。我用一个内核进行了测试。对于具有不同线程设置的同一个内核,gld_transactions始终是相同的值33554432。这个值是稳定的。但是对于dram_read_transactions,两个不同的线程设置导致不同的值,它们大约是4486636和4197096。对于“粗略”一词,我的意思是这些值不稳定,因为它们从一次执行到另一次执行略有变化。我们还可以看到,dram_transactions比gld_transactions小得多。因此,我的问题可以总结如下:
我认为一旦我们知道了问题(1)的答案,那么问题(2)和(3)就可以很容易地解释了。有人能解释一下吗?提前谢谢。
发布于 2014-12-08 20:42:28
全局负载是指逻辑内存空间。dram是指物理资源上的事务。你的这份声明:
读取数据意味着加载数据和全局内存。
要么是不正确的,要么是对重要细节的修饰。
从根本上说,全局负载是由翘曲执行的指令发出的。这些加载的初始目标将是L1或L2缓存(通常)。如果缓存内容满足全局负载,则永远不会成为dram读取事务。另一方面,如果全局加载的目标不在缓存中,则它将成为dram事务(通常/通常)。
此外,全局内存空间并不是唯一的内存空间。还有其他内存空间,例如本地内存空间。到“本地”内存的事务最终也可以以多种方式服务,其中之一实际上是触发dram读取。这样的事务不会出现在任何“全局”度量中,而是会出现在dram事务度量中。
我在nsight VSE文档(和工具帮助)中发现,GPU上内存的逻辑和物理安排有助于理解这一点。我在这里摘录了图表,并以红色突出显示了与您标识的指标相对应的“链接”:

这个答案对上面的图表进行了更详细的解码,以获得相关的度量。
https://stackoverflow.com/questions/27366359
复制相似问题