从命令行使用 nvprof --metrics 测量带宽的正确选项是什么?我正在使用 flop_dp_efficiency 来获取峰值 FLOPS 的百分比,但手册中似乎有很多带宽测量选项,我不太明白我在测量什么。例如dram_read、dram_write、gld_read、gld_write 对我来说看起来都一样。另外,我是否应该假设两者同时发生,将带宽报告为读+写吞吐量的总和?
编辑:
根据图表的出色答案,从设备内存到内核的带宽是多少?我正在考虑在从内核到设备内存的路径上采用最小的带宽(读+写),这可能是 dram 到 L2 缓存。
我试图通过测量 FLOPS 和带宽来确定内核是否受计算限制或内存限制。
为了了解该领域的分析器指标,有必要了解 GPU 中的内存模型。我发现这个图表(曾经在 Nsight Visual Studio 版本文档中发布)很有用(类似的图表现在是 nsight 计算文档的一部分)。我用编号箭头标记了图表,这些箭头指的是我在下面列出的编号指标(和传输方向):
请参阅 CUDA Profiler 指标参考,了解每个指标的说明:
备注:
此外,如果您只是想估计最大可用内存带宽,使用 CUDA 示例代码
bandwidthTest
可能是获得代理测量值的最简单方法。只需使用报告的设备到设备带宽数,作为代码可用的最大内存带宽的估计。
结合上述想法,dram_utilization 指标给出了一个缩放结果,表示实际使用的总可用内存带宽的部分(从 0 到 10)。