我目前正在尝试优化我的软件以更好地使用 CPU 缓存。 SO 上有一些帖子表明,有时难以猜测CPU 缓存在做什么以及为什么在某些情况下性能会下降。例如:
- Why does the speed of memcpy() drop dramatically every 4KB?
- Why is my program slow when looping over exactly 8192 elements?
- Why is transposing a matrix of 512x512 much slower than transposing a matrix of 513x513?
因此,为了获得缓存未命中发生位置的线索,我可以运行 perf
来获取缓存未命中数及其发生位置,以及 valgrind --tool=cachegrind
来模拟缓存(至少是一级缓存和末级缓存)。
很高兴知道缓存未命中发生在何处,但我想知道它们发生的原因(例如缓存垃圾等)。有没有办法显式暂停程序并查看缓存中的内容(也许程序在 valgrind
和 vgdb
中运行)?
最佳答案
根据我的经验,您需要反汇编二进制文件,然后查看程序在何处使用缓存。查看调用预取或缓存指令的位置。那会给你它的位置和原因。不幸的是,这是一个痛苦的过程。
关于c++ - 调试 CPU 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40840373/