内存带宽使用

Posted

技术标签:

【中文标题】内存带宽使用【英文标题】:Memory Bandwidth Usage 【发布时间】:2009-05-28 13:54:00 【问题描述】:

您如何计算使用的内存 (RAM) 带宽?需要哪些性能计数器?

我遇到了一个能够做到这一点的工具,“Rightmark 多线程内存测试”。但与 Rightmark 的其他测试不同,我没有找到它的源代码,只有二进制文件

【问题讨论】:

为什么这被标记为c#、c++和c? 【参考方案1】:

“计算”内存带宽使用情况非常困难。有很多重要的缓存和 MMU 问题需要解决。唯一真正做到这一点的方法是使用模拟或实际测量。

您可以通过调试代码并计算执行的内存加载和存储操作的数量来获得一个“粗略”的想法。但是,知道它是否是缓存命中/未命中是另一个问题。

这取决于你的目的。如果要获得猜测,您可以使用经验法则,即大约 30% 的通用代码是内存加载和存储。如果您试图获得最坏的情况,您可以假设缓存一直未命中并解决问题。

您可以做的一件潜在的事情是研究虚拟化。有几个开源选项(想到 QEMU)。可以从中导出某些硬件测量值。

【讨论】:

【参考方案2】:

如果您的代码可以在 Linux 上运行,请使用Cachegrind:

Cachegrind 是一个缓存分析器。它 执行详细的模拟 CPU 中的 I1、D1 和 L2 高速缓存以及 因此可以准确地查明来源 代码中的缓存未命中数。它 标识缓存未命中的数量, 内存引用和指令 为每一行源代码执行, 每个功能,每个模块和 整个计划摘要。它是有益的 用任何语言编写的程序。 Cachegrind 运行关于 比正常速度慢 20--100 倍。

您可能想使用KCacheGrind GUI。

【讨论】:

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

达到理论 GPU 全局内存带宽

Linux服务器如何查看CPU占用率、内存占用、带宽占用

OpenCL 内存带宽/合并

您如何测量 OpenGL 中的峰值内存带宽?

如何评估服务器基础性能 - CPU负载使用率内存&磁盘使用率网络带宽......

如何评估服务器基础性能 - CPU负载使用率内存&磁盘使用率网络带宽......