带宽的 nvprof 选项

Posted

技术标签:

【中文标题】带宽的 nvprof 选项【英文标题】:nvprof option for bandwidth 【发布时间】:2016-06-09 17:36:08 【问题描述】:

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

编辑:

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

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

【问题讨论】:

docs.nvidia.com/cuda/profiler-users-guide/… 为什么全局内存(gld)和dram(设备内存)的带宽是分开报告的? 您可以将这些名称与 GUI 版本名称进行比较。似乎设备内存吞吐量是硬件视图。它不包括缓存命中,但包括 ECC 位。全局内存吞吐量是软件视图。这与计算代码中的吞吐量相同。 【参考方案1】:

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

请参阅CUDA profiler metrics reference 了解每个指标的说明:

    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

注意事项:

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

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

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

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

【讨论】:

非常感谢您提供图表!我已经编辑了我的问题。 将 dram_read_transactions 添加到 dram_write_transactions,按 32 字节缩放,除以内核执行时间 如果您只想确定计算与内存的界限,只需将 dram_utilization 与 alu_fu_utilization 进行比较。 @RobertCrovella:alu_fu_utilization 在 CC>=5.0 后不可用。整数利用率没有任何相关指标。我只看到issue_slot_utilization。有什么解决方法吗?其他指标的一种组合?我无法关联指标。 一种可能的方法是对每个计算 fu_utilization 指标进行一组比较,包括 double_precision_fu_utilizationsingle_precision_fu_utilizationhalf_precision_fu_utilization。将其中的每一项单独与dram_utilization 进行比较。请注意,整数会根据架构与另一种类型(例如 single_precision)混为一谈。仔细研究上述每个指标的描述。在此答案的 cmets 空间中,我可能无法对此提供进一步的回应。

以上是关于带宽的 nvprof 选项的主要内容,如果未能解决你的问题,请参考以下文章

ROS取数线程分析: 不带组装: socket选项SO_SNDBUF,SO_RCVBUF对带宽和CPU的影响

ROS取数线程分析: 不带组装: socket选项SO_SNDBUF,SO_RCVBUF对带宽和CPU的影响

VISIO中带宽的调整。。。我点了取消组合后,显示“由于形状保护和或图层设置的问题,无法完全执行此命令

Ceph:网络性能基线测试

rsync选项详解

为啥 nvprof 没有浮点除法运算的指标?