【问题标题】:Debugging the CPU Caches调试 CPU 缓存
【发布时间】:2017-04-11 22:38:30
【问题描述】:

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

因此,为了了解缓存未命中发生的位置,我可以运行 perf 来获取缓存未命中的计数以及它们发生的位置以及 valgrind --tool=cachegrind 来模拟缓存(至少一个 L1 和一个最后一级缓存)。

很高兴知道在哪里缓存未命中发生,但我想知道为什么会发生(例如缓存丢弃等)。有没有办法显式暂停程序并查看缓存中的内容(可能在附加的valgrindvgdb 中运行程序)?

【问题讨论】:

  • 计算机科学中只有两个难点:缓存失效和命名。
  • @themagicalyang:“计算机科学中只有两件困难的事情:缓存失效、命名事物和一个错误”。请不要破坏众所周知的谚语。
  • 您不想看到“为什么”它们会在个别时间发生,而是“为什么”它们会经常发生。

标签: c++ c performance caching cpu-cache


【解决方案1】:

根据我的经验,您需要反汇编二进制文件,然后查看程序在哪里使用缓存。查看调用预取或缓存指令的位置。这将为您提供它的位置和原因。这是一个不幸的痛苦过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 2017-07-15
    • 2014-01-09
    • 1970-01-01
    • 2017-07-09
    • 2011-01-13
    相关资源
    最近更新 更多