Performance 有没有工具可以测量C程序中的所有缓存级别?

Performance 有没有工具可以测量C程序中的所有缓存级别?,performance,caching,cpu,valgrind,Performance,Caching,Cpu,Valgrind,我想研究二级缓存未命中对CPU功耗的影响。为了衡量这一点,我必须创建一个逐步增加工作集大小的基准,这样核心活动(每个周期执行的微操作)和二级活动(每个周期执行的二级请求)保持不变,但二级未命中与二级请求的比率增加 为了测量缓存命中/未命中,我尝试使用valgrind,但当使用cachegrind时,该工具仅假设有两级缓存,我的笔记本电脑有三级缓存 任何工具都允许测量C程序中的所有缓存级别?现代CPU有一个PMU(性能监控单元),可用于在许多事情中累积一级/二级/三级/四级缓存命中/未命中/请求。

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

为了测量缓存命中/未命中,我尝试使用valgrind,但当使用cachegrind时,该工具仅假设有两级缓存,我的笔记本电脑有三级缓存

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

现代CPU有一个PMU(性能监控单元),可用于在许多事情中累积一级/二级/三级/四级缓存命中/未命中/请求。有几个很好的库实现了PMU的东西

我熟悉,和。我更喜欢Intel的实现,因为它在QPI和其他“uncore”东西上实现性能计数器。我认为大多数人使用PAPI是因为它经常为新硬件更新,并且有高级和低级接口

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

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