调试CPU高速缓存

我目前正试图优化我的软件以获得更好的CPU缓存使用率。 SO上有一些帖子表明,有时很难猜测 CPU缓存在做什么,以及为什么在某些情况下性能会下降。 例如:

  • 为什么memcpy()的速度每4KB急剧下降?
  • 为什么我的程序在循环8192个元素时很慢?
  • 为什么转置一个512x512的矩阵要比转置513x513的矩阵慢得多?
  • 因此,为了获得缓存未命中发生的线索,我可以运行perf来获得缓存未命中的次数,以及valgrind --tool=cachegrind模拟缓存(至少是L1和last-级高速缓存)。

    这是非常好的知道在哪里高速缓存未命中发生,但我想知道他们为什么会发生(例如高速缓存捣毁等)。 有没有办法显式地暂停程序,看看缓存里面有什么(可能是运行在valgrindvgdb的程序)?


    根据我的经验,您需要反汇编您的二进制文件,并查看程序使用缓存的位置。 看看预取或缓存指令被调用的位置。 这会给你它的位置和用途。 这是一个不幸的痛苦过程。

    链接地址: http://www.djcxy.com/p/85963.html

    上一篇: Debugging the CPU Caches

    下一篇: Why does my 8M L3 cache not provide any benefit for arrays larger than 1M?