带宽的 nvprof 选项
nvprof option for bandwidth
从命令行使用 nvprof --metrics 测量带宽的正确选项是什么?我正在使用 flop_dp_efficiency 来获取峰值 FLOPS 的百分比,但是手册中似乎有很多带宽测量选项,我不太明白我在测量什么。例如dram_read、dram_write、gld_read、gld_write 在我看来都一样。另外,我是否应该通过假设两者同时发生来将 bandwdith 报告为读+写吞吐量的总和?
编辑:
根据图表的出色回答,从设备内存到内核的带宽是多少?我正在考虑在从内核到设备内存的路径上取最小的带宽(读+写),这可能是 dram 到 L2 缓存。
我正在尝试通过测量 FLOPS 和带宽来确定内核是否受计算限制或内存限制。
为了理解这方面的分析器指标,有必要了解 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
备注:
- 从右到左的箭头表示阅读 activity。从左到右的箭头表示 write activity.
- "global" 是一个 合乎逻辑的 space。从程序员的角度来看,它指的是逻辑地址space。定向到 "global" space 的事务可能会在其中一个缓存、系统内存或设备内存 (dram) 中结束。另一方面,"dram" 是一个物理实体(例如,L1 和 L2 缓存也是如此)。 "logical spaces" 全部显示在图表的第一列中,紧邻 "kernel" 列的右侧。右边的其余列是物理实体或资源。
- 我没有尝试在图表上标记每个可能的内存指标。如果您需要了解其他图表,希望这张图表对您有所帮助。
根据以上描述,您的问题可能还是没有得到解答。那么您有必要澄清您的请求 - "what do you want to measure exactly?" 但是根据您所写的问题,如果您关心的是实际消耗的内存带宽,您可能想查看 dram_xxx 指标.
此外,如果您只是想估计最大可用内存带宽,使用 CUDA 示例代码 bandwidthTest
可能是获得该指标的代理测量值的最简单方法。只需使用报告的设备到设备带宽编号,作为代码可用的最大内存带宽的估计值。
结合上述想法,dram_utilization 指标给出了一个缩放结果,表示实际使用的总可用内存带宽的部分(从 0 到 10)。
从命令行使用 nvprof --metrics 测量带宽的正确选项是什么?我正在使用 flop_dp_efficiency 来获取峰值 FLOPS 的百分比,但是手册中似乎有很多带宽测量选项,我不太明白我在测量什么。例如dram_read、dram_write、gld_read、gld_write 在我看来都一样。另外,我是否应该通过假设两者同时发生来将 bandwdith 报告为读+写吞吐量的总和?
编辑:
根据图表的出色回答,从设备内存到内核的带宽是多少?我正在考虑在从内核到设备内存的路径上取最小的带宽(读+写),这可能是 dram 到 L2 缓存。
我正在尝试通过测量 FLOPS 和带宽来确定内核是否受计算限制或内存限制。
为了理解这方面的分析器指标,有必要了解 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
备注:
- 从右到左的箭头表示阅读 activity。从左到右的箭头表示 write activity.
- "global" 是一个 合乎逻辑的 space。从程序员的角度来看,它指的是逻辑地址space。定向到 "global" space 的事务可能会在其中一个缓存、系统内存或设备内存 (dram) 中结束。另一方面,"dram" 是一个物理实体(例如,L1 和 L2 缓存也是如此)。 "logical spaces" 全部显示在图表的第一列中,紧邻 "kernel" 列的右侧。右边的其余列是物理实体或资源。
- 我没有尝试在图表上标记每个可能的内存指标。如果您需要了解其他图表,希望这张图表对您有所帮助。
根据以上描述,您的问题可能还是没有得到解答。那么您有必要澄清您的请求 - "what do you want to measure exactly?" 但是根据您所写的问题,如果您关心的是实际消耗的内存带宽,您可能想查看 dram_xxx 指标.
此外,如果您只是想估计最大可用内存带宽,使用 CUDA 示例代码 bandwidthTest
可能是获得该指标的代理测量值的最简单方法。只需使用报告的设备到设备带宽编号,作为代码可用的最大内存带宽的估计值。
结合上述想法,dram_utilization 指标给出了一个缩放结果,表示实际使用的总可用内存带宽的部分(从 0 到 10)。