如何使 Nsight profiling 的内存统计部分有意义?

Posted

技术标签:

【中文标题】如何使 Nsight profiling 的内存统计部分有意义?【英文标题】:how to make a meaning of memory statistics section of Nsight profiling? 【发布时间】:2015-11-19 02:29:47 【问题描述】:

我正在使用 Geforce 820m 和

GPU 时钟频率:1124 MHz (1.12 GHz) 内存时钟频率:900 Mhz 内存总线宽度:64 位 L2 缓存大小:1048576 字节 我使用 Nsight 性能分析来分析我的应用程序的内存事务并获取内存统计信息,显示如下 。

我怎么知道我是否达到了我可以从这张卡获得的最大内存吞吐量?是否有像占用率这样的百分比值,但内存吞吐量?或者我怎样才能利用这些数字/意义?

【问题讨论】:

【参考方案1】:

GPU 上的峰值理论设备内存带宽由下式给出

900MHz * 2 (DDR) * 8 字节/传输(64 位宽度)= 14.4GB/s

在这种情况下观察到的(使用的)内存带宽由“L2 Cache”和“Device Memory”之间的链接上的数字给出:856.7MB/s(即小于 1GB/s)

我怎么知道我是否达到了我可以从这张卡获得的最大内存吞吐量?

如果你比较这两个数字,你就会明白。然而,上述峰值理论带宽计算通常在任何情况下都无法观察到。 cuda bandwidthTest 示例代码给出了“真实”代码可实现的最大值的更好代理,特别是指“设备到设备”带宽测量。无论如何,这个数字仍应在每秒几 GB 的范围内(对于您的设备,可能为 10),因此您仍有一些余量。

有没有像占用率这样的百分比值,但内存吞吐量?

分析器有metrics,例如dram_utilization,这可能很有趣。您还可以聚合 dram_read_throughputdram_write_throughput 以获得更精确的数字。

【讨论】:

“L1/Tex 缓存”和“共享内存”之间的链接上的数字呢?是否有任何信息可以从我的 GPU 中获得,以便在计算中使用它,比如您在全局内存中使用的那个,或者对于具有相同计算能力的所有 GPU(Fermi 2.0、Kepler 3.0、Maxwell 5.0 ..)是否保持不变跨度> 我没有看到“L1/Tex 缓存”和“共享内存”之间的任何链接 我的意思是他们每个人的数字先生,我可以像你对​​设备内存链接上的数字一样从他们身上做出意义吗? 据我所知,L1 或共享内存的峰值理论带宽尚未发布。但是,您可以根据以下事实来估计这些将是什么:每 2 个 GPU 时钟至少可以提供一个 128 字节的缓存线(性能可能比这更好 - 这可能取决于特定的 GPU)。无论如何,这些数字通常远高于设备内存带宽,跨 SM 聚合时在 TB/s 范围内(L1 缓存和共享是每个 SM 的资源)。 您可能还想参考此页面的documentation。

以上是关于如何使 Nsight profiling 的内存统计部分有意义?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 nv-nsight-cu-cli 查找 gld_throughput 和 gst_throughput

使用 Nsight 确定银行冲突和合并

NSight Profiler 信号 139

Nsight Compute 如何确定/显示共享内存指标?

NVIDIA Nsight Systems CLI 未获取内存统计信息

NSight Compute - 预期银行冲突但未检测到任何