nvprof 带宽选项

问题描述 投票:0回答:1

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

编辑:

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

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

cuda profiling nvprof
1个回答
24
投票

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

请参阅 CUDA Profiler 指标参考,了解每个指标的说明:

  1. dram_read_throughput、dram_read_transactions
  2. dram_write_吞吐量、dram_write_交易
  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_效率、gld_吞吐量、gld_交易
  16. gst_效率、gst_吞吐量、gst_交易

备注:

  1. 从右向左的箭头表示“读取”活动。从左到右的箭头表示 write 活动。 “全局”是一个
  2. 逻辑
  3. 空间。从程序员的角度来看,它指的是逻辑地址空间。定向到“全局”空间的事务可能最终位于缓存之一、sysmem 或设备内存 (dram) 中。另一方面,“dram”是一个物理实体(例如,L1 和 L2 缓存也是如此)。 “逻辑空间”全部描述在紧邻“内核”列右侧的图表第一列中。右侧剩余的列是物理实体或资源。 我没有尝试在图表上标记每个可能的内存指标。如果您需要弄清楚其他图表,希望此图表对您有所帮助。
  4. 通过以上描述,您的问题可能仍然无法得到解答。然后,您有必要澄清您的请求——“您想要准确测量什么?”然而,根据您所写的问题,如果您关心的是实际消耗的内存带宽,您可能想查看 dram_xxx 指标。

此外,如果您只是想估计最大可用内存带宽,使用 CUDA 示例代码

bandwidthTest

可能是获得代理测量值的最简单方法。只需使用报告的设备到设备带宽数,作为代码可用的最大内存带宽的估计。

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

© www.soinside.com 2019 - 2024. All rights reserved.