Sno*_*yMe 14 c c++ performance profiling
这是我的要求,我知道某些算法很好地利用了Cache,有些算法没有,有些算法在特定数据集上做了比其他算法更多的I/O等等.我想看看并分析自己发生的事情.
所以我想知道是否有一种方法我可以知道如何读取某个内存/变量,即它是来自缓存,还是存在缓存未命中.此外,如果在检索此值时出现页面错误等.
非常感谢!
如果您真的想知道缓存何时出现/丢失,现代处理器都有性能计数器,您可以将其用于此目的.我已将它们广泛用于学术研究.使用它们最简单的方法是通过perfmon2.Perfmon2既有一个可以链接到程序中的库,也有一个独立的程序可以监视现有的程序.例如,这是独立程序记录所有1级数据缓存读取请求和未命中:
pfmon -eL1D_CACHE_LD:MESI,L1D_CACHE_LD:I_STATE your_program
Run Code Online (Sandbox Code Playgroud)
作为参考,本文档的附录A (PDF)列出了英特尔有关可用硬件计数器的文档.