任何工具都可以测量 C 程序中的所有缓存级别?

Any tool allows to measure all cache levels in C program?

我想研究 L2 缓存未命中对 CPU 功耗的影响。为了衡量这一点,我必须创建一个逐渐增加工作集大小的基准,以便核心 activity(每个周期执行的微操作)和 L2 activity(每个周期的 L2 请求)保持不变,但是L2未命中与L2请求的比率增加。

为了测量缓存 hits/misses 我尝试使用 valgrind,但是这个工具在使用 cachegrind 时只假设有一个 2 级缓存,而我的笔记本电脑有三个。

有什么工具可以测量 C 程序中的所有缓存级别

现代 CPU 有一个 PMU(性能监控单元),可用于积累 L1/2/3/4 缓存 hits/misses/requests 等等。有几个很好的库可以实现 PMU 的东西。

我熟悉PAPI, perf and Intel's PMU。我更喜欢 Intel 的实现,因为它在 QPI 和其他 "uncore" 东西上实现了性能计数器。我认为大多数人使用 PAPI 是因为它经常针对新硬件进行更新,并且具有高级和低级接口。

实施这些东西并非易事,但有大量关于它的信息。通常,您只需在代码中指定分析区域,然后指定要使用的计数器。请注意,您只能使用一定数量的硬件计数器,具体取决于您芯片中的 PMU 以及您的操作系统正在使用的计数器。

此外,我不认为 valgrind 缓存分析使用 PMU 指令获取数据而是在软件中进行。