高速缓存命中/错过C/C++程序中的值

Sno*_*yMe 14 c c++ performance profiling

这是我的要求,我知道某些算法很好地利用了Cache,有些算法没有,有些算法在特定数据集上做了比其他算法更多的I/O等等.我想看看并分析自己发生的事情.

所以我想知道是否有一种方法我可以知道如何读取某个内存/变量,即它是来自缓存,还是存在缓存未命中.此外,如果在检索此值时出现页面错误等.

非常感谢!

Klo*_*lox 7

如果您真的想知道缓存何时出现/丢失,现代处理器都有性能计数器,您可以将其用于此目的.我已将它们广泛用于学术研究.使用它们最简单的方法是通过perfmon2.Perfmon2既有一个可以链接到程序中的库,也有一个独立的程序可以监视现有的程序.例如,这是独立程序记录所有1级数据缓存读取请求和未命中:

pfmon -eL1D_CACHE_LD:MESI,L1D_CACHE_LD:I_STATE your_program
Run Code Online (Sandbox Code Playgroud)

作为参考,本文档的附录A (PDF)列出了英特尔有关可用硬件计数器的文档.