带宽的nvprof选项

use*_*302 2 profiling cuda nvprof

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

编辑:

根据图中的优秀答案,从设备内存到内核的带宽是多少?我想在从内核到设备内存的路径上占用最小的带宽(读取+写入),这可能是L2缓存.

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

Rob*_*lla 15

为了理解该领域中的分析器指标,有必要了解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. texture是只读的,此路径上没有可能的事务
  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. "全球"是一个逻辑空间.它从程序员的角度来看是指逻辑地址空间.定向到"全局"空间的事务可能最终出现在其中一个缓存中,sysmem或设备内存(dram)中.另一方面,"dram"是一个物理实体(例如,L1和L2缓存)."逻辑空间"全部描绘在紧靠"内核"列右侧的图的第一列中.右侧的其余列是物理实体或资源.
  3. 我没有尝试用图表上的某个位置标记每个可能的内存指标.希望如果您需要找出其他图表,这个图表将是有益的.

根据上面的描述,您的问题可能仍未得到解答.然后,您有必要澄清您的请求 - "您想要准确衡量什么?" 但是,根据您编写的问题,您可能希望查看dram_xxx指标,如果您关心的是实际消耗的内存带宽.

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

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