c++ - 缓存 C/C++ 程序中的值的命中/未命中

标签 c++ c performance profiling

这是我的要求,我知道某些算法很好地利用了缓存,有些则没有,有些在特定数据集上比其他算法做更多的 I/O,等等。我希望自己看到和分析这种情况。

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

非常感谢!

最佳答案

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

pfmon -eL1D_CACHE_LD:MESI,L1D_CACHE_LD:I_STATE your_program

供引用,this document 的附录 A (PDF) 列出了英特尔关于可用硬件计数器的文档。

关于c++ - 缓存 C/C++ 程序中的值的命中/未命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6886918/

相关文章:

c++ - 整数和 const char[N] 上的模板未编译(无法推断模板参数 'N' )

c++ - 从 'char' 到 'const char *' 的无效转换

c - objdump 产生错误的分支操作码解释

c - 如何列出 C 目录中目录中的文件?

javascript - 仅遍历一次时将可变数量的过滤条件应用于 javascript 数组?

c++ - 有什么东西我可以用 C 做,但不能用 C++ 做吗?

c++ - 有什么方法可以将两个或多个不同的类链接到一个类中(然后在 vector 上使用)?

c - 低碳代码 : Forward Declaration of Typedef'd Enum Failing?

python - 如何提高 Excel 中 xlwings UDF 的速度?

c - 一个大文件还是多个小文件?