4

从命令行使用 nvprof --metrics 测量带宽的正确选项是什么?我正在使用 flop_dp_efficiency 来获取峰值 FLOPS 的百分比,但是手册中似乎有很多带宽测量选项,我并不真正了解我在测量什么。例如 dram_read、dram_write、gld_read、gld_write 在我看来都一样。另外,我是否应该通过假设两者同时发生来将带宽报告为读+写吞吐量的总和?

编辑:

根据图表的出色答案,从设备内存到内核的带宽是多少?我正在考虑在从内核到设备内存的路径上采用最小的带宽(读+写),这可能是 dram 到 L2 缓存。

我试图通过测量 FLOPS 和带宽来确定内核是否受计算或内存限制。

4

1 回答 1

22

为了了解该领域的分析器指标,有必要了解 GPU 中的内存模型。我发现Nsight Visual Studio 版本文档中发布的图表很有用。我已经用编号箭头标记了图表,这些箭头指的是我在下面列出的编号指标(和传输方向):

在此处输入图像描述

请参阅CUDA 分析器指标参考以了解每个指标的描述:

  1. dram_read_throughput,dram_read_transactions
  2. dram_write_throughput、dram_write_transactions
  3. sysmem_read_throughput、sysmem_read_transactions
  4. sysmem_write_throughput、sysmem_write_transactions
  5. l2_l1_read_transactions,l2_l1_read_throughput
  6. l2_l1_write_transactions,l2_l1_write_throughput
  7. l2_tex_read_transactions,l2_texture_read_throughput
  8. 纹理是只读的,此路径上没有可能的事务
  9. shared_load_throughput、shared_load_transactions
  10. shared_store_throughput、shared_store_transactions
  11. l1_cache_local_hit_rate
  12. l1 是直写缓存,因此该路径没有(独立)指标 - 请参阅其他本地指标
  13. l1_cache_global_hit_rate
  14. 见注释 12
  15. gld_efficiency、gld_throughput、gld_transactions
  16. gst_efficiency、gst_throughput、gst_transactions

笔记:

  1. 从右到左的箭头表示读取活动。从左到右的箭头表示写入活动。
  2. “全局”是一个逻辑空间。从程序员的角度来看,它指的是逻辑地址空间。指向“全局”空间的事务最终可能会出现在缓存之一、系统内存或设备内存(DRAM)中。另一方面,“DRAM”是一个物理实体(例如,L1 和 L2 缓存也是如此)。“逻辑空间”都显示在图表的第一列中,紧邻“内核”列的右侧。右侧的其余列是物理实体或资源。
  3. 我没有尝试用图表上的位置标记每个可能的内存指标。如果您需要弄清楚其他图表,希望此图表具有指导意义。

通过以上描述,您的问题可能仍然没有得到回答。然后,您有必要澄清您的要求——“您想准确测量什么?” 但是,根据您所写的问题,您可能想查看 dram_xxx 指标,如果您关心的是实际消耗的内存带宽。

此外,如果您只是想估计最大可用内存带宽,使用 CUDA 示例代码bandwidthTest可能是获得代理测量的最简单方法。只需使用报告的设备到设备带宽数,作为代码可用的最大内存带宽的估计值。

结合上述想法,dram_utilization 指标给出了一个缩放结果,表示实际使用的总可用内存带宽的一部分(从 0 到 10)。

于 2016-06-10T04:49:47.623 回答