带宽的nvprof选项

时间:2016-06-09 17:36:08

标签: cuda profiling nvprof

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

修改

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

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

1 个答案:

答案 0 :(得分:15)

为了理解此区域中的分析器指标,了解GPU中的内存模型是必要的。我觉得rails_12factor很有用。我已经用带有编号的箭头标记了图表,这些箭头指的是我在下面列出的编号指标(和转移方向):

the diagram published in the Nsight Visual Studio edition documentation

有关每个指标的说明,请参阅enter image description here

  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
  17. 注意:

    1. 从右到左的箭头表示读取活动。从左到右的箭头表示活动。
    2. "全球"是逻辑空间。它从程序员的角度来看是指逻辑地址空间。针对"全球"的交易空间可能会在其中一个缓存,sysmem或设备内存(dram)中结束。另一方面," dram"是物理实体(例如,L1和L2缓存)。 "逻辑空间"所有内容都显示在图表的第一列中,位于"内核的右侧。柱。右侧的其余列是物理实体或资源。
    3. 我没有尝试使用图表上的某个位置标记每个可能的内存指标。希望如果您需要找出其他图表,这个图表将是有益的。
    4. 根据上述说明,您的问题可能仍未得到解答。然后,您需要澄清您的请求 - "您想要准确衡量什么?"但是,根据您编写的问题,您可能希望查看dram_xxx指标,如果您关心的是实际消耗的内存带宽。

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

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