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

时间:2016-06-14 17:24:46

标签: performance caching cpu valgrind

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

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

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

1 个答案:

答案 0 :(得分:2)

现代CPU有一个PMU(性能监控单元),可用于在很多事情中累积L1 / 2/3/4缓存命中/未命中/请求。有几个很好的库可以实现PMU的功能。

我熟悉PAPIperfIntel's PMU。我更喜欢英特尔的实现,因为它在QPI和其他“非核心”的东西上实现了性能计数器。我认为大多数人都使用PAPI,因为它经常针对新硬件进行更新,并且具有高级别和低级别的接口。

实现这些东西并不是太微不足道,但有很多关于它的信息。通常,您只需在代码中指定性能分析区域,然后指定要使用的计数器。请注意,根据芯片中的PMU以及操作系统使用的内容,您只能在硬件中使用一定数量的计数器。

另外,我不相信valgrind缓存分析使用PMU指令来获取数据,而是用软件代替。