您如何计算使用的内存 (RAM) 带宽?需要哪些性能计数器?
我遇到了一个能够做到这一点的工具,“Rightmark 多线程内存测试”。但与 Rightmark 的其他测试不同,我没有找到它的源代码,只有二进制文件
您如何计算使用的内存 (RAM) 带宽?需要哪些性能计数器?
我遇到了一个能够做到这一点的工具,“Rightmark 多线程内存测试”。但与 Rightmark 的其他测试不同,我没有找到它的源代码,只有二进制文件
如果您的代码可以在 Linux 上运行,请使用Cachegrind:
Cachegrind 是一个缓存分析器。它对 CPU 中的 I1、D1 和 L2 缓存执行详细模拟,因此可以准确地查明代码中缓存未命中的来源。它通过每个函数、每个模块和整个程序的摘要来识别每行源代码执行的缓存未命中、内存引用和指令的数量。它对用任何语言编写的程序都很有用。Cachegrind 运行程序的速度比正常速度慢 20--100 倍。
您可能想要使用KCacheGrind GUI。
“计算”内存带宽使用情况非常困难。有很多重要的缓存和 MMU 问题需要解决。唯一真正的方法是通过使用模拟或真实世界的测量。
您可以通过调试代码并计算执行的内存加载和存储操作的数量来获得一个“粗略”的想法。但是,知道它是否是缓存命中/未命中是另一个问题。
这取决于你的目的。如果要获得猜测,您可以使用经验法则,即大约 30% 的通用代码是内存加载和存储。如果您试图获得最坏的情况,您可以假设缓存一直未命中并解决问题。
您可以做的一件潜在的事情是查看虚拟化。有几个开源选项(想到 QEMU)。可以从中导出某些硬件测量值。