为了了解该领域的分析器指标,有必要了解 GPU 中的内存模型。我发现Nsight Visual Studio 版本文档中发布的图表很有用。我已经用编号箭头标记了图表,这些箭头指的是我在下面列出的编号指标(和传输方向):
请参阅CUDA 分析器指标参考以了解每个指标的描述:
- dram_read_throughput,dram_read_transactions
- dram_write_throughput、dram_write_transactions
- sysmem_read_throughput、sysmem_read_transactions
- sysmem_write_throughput、sysmem_write_transactions
- l2_l1_read_transactions,l2_l1_read_throughput
- l2_l1_write_transactions,l2_l1_write_throughput
- l2_tex_read_transactions,l2_texture_read_throughput
- 纹理是只读的,此路径上没有可能的事务
- shared_load_throughput、shared_load_transactions
- shared_store_throughput、shared_store_transactions
- l1_cache_local_hit_rate
- l1 是直写缓存,因此该路径没有(独立)指标 - 请参阅其他本地指标
- l1_cache_global_hit_rate
- 见注释 12
- gld_efficiency、gld_throughput、gld_transactions
- gst_efficiency、gst_throughput、gst_transactions
笔记:
- 从右到左的箭头表示读取活动。从左到右的箭头表示写入活动。
- “全局”是一个逻辑空间。从程序员的角度来看,它指的是逻辑地址空间。指向“全局”空间的事务最终可能会出现在缓存之一、系统内存或设备内存(DRAM)中。另一方面,“DRAM”是一个物理实体(例如,L1 和 L2 缓存也是如此)。“逻辑空间”都显示在图表的第一列中,紧邻“内核”列的右侧。右侧的其余列是物理实体或资源。
- 我没有尝试用图表上的位置标记每个可能的内存指标。如果您需要弄清楚其他图表,希望此图表具有指导意义。
通过以上描述,您的问题可能仍然没有得到回答。然后,您有必要澄清您的要求——“您想准确测量什么?” 但是,根据您所写的问题,您可能想查看 dram_xxx 指标,如果您关心的是实际消耗的内存带宽。
此外,如果您只是想估计最大可用内存带宽,使用 CUDA 示例代码bandwidthTest
可能是获得代理测量的最简单方法。只需使用报告的设备到设备带宽数,作为代码可用的最大内存带宽的估计值。
结合上述想法,dram_utilization 指标给出了一个缩放结果,表示实际使用的总可用内存带宽的一部分(从 0 到 10)。