我目前正在尝试优化我的软件以获得更好的CPU缓存使用率。 SO上有一些帖子表明它有时难以猜测 CPU缓存正在做什么以及为什么在某些情况下会出现性能下降的原因。例如:
因此,为了获得缓存未命中的线索,我可以运行perf
来获取缓存未命中数以及它们发生的位置以及valgrind --tool=cachegrind
来模拟缓存(至少L1和最后一级缓存。)
很高兴知道哪里缓存未命中,但我想知道为什么它们发生(例如缓存垃圾等) )。有没有办法明确暂停程序并查看缓存中的内容(可能是程序在valgrind
和vgdb
附加了)?
答案 0 :(得分:0)
根据我的经验,您需要反汇编二进制文件,并查看程序使用缓存的位置。查看调用预取或高速缓存指令的位置。这将为您提供它的地点和原因。这是一个不幸的痛苦过程。