【问题标题】:How to monitor CPU cache on Windows?如何在 Windows 上监控 CPU 缓存?
【发布时间】:2018-10-05 19:38:57
【问题描述】:

我想尽可能避免我的代码从二级缓存中清除。

您将如何在 C++/C# 中实现这一目标以及如何使其负责。

编辑:我可以收集 L2 缓存未命中的数量吗? 回答:是的Can I get the L2 cache miss count of each process on the windows platform?

【问题讨论】:

  • 不直接,不。 VTune 可以告诉您一些事情,例如在缓存之间移动了多少数据,但不能告诉您(至少在我的记忆中)特定级别的缓存中究竟有哪些数据。您几乎无法根据存储数据的地址以及您何时/如何使用它来手动确定这一点。
  • 有一些 MSR 可以让你读出缓存使用情况,但它可能仍然没有你想要的那么酷。问题是它有点像薛定谔的猫。看看这个:stackoverflow.com/questions/10122520/…

标签: windows


【解决方案1】:

似乎人们不愿意透露这方面的信息(c++ 或 c# 无关紧要)。所以我可能不得不制定自己的策略,这可能会使用一套方法,而不是一套严格的规则或配方。

为了实现 Windows 应用程序的最大命中/未命中率,我可能会:

【讨论】:

    【解决方案2】:

    这个问题似乎是基于对现代 x86 CPU 上缓存如何工作的误解。例如,它说“L2 而不是 L3”。在几乎所有现代 x86 CPU(包括 Intel 和 AMD)上,不可能在 L2 缓存而不是 L3 缓存中保存数据。这将导致缓存一致性失败,因为 L3 缓存中没有数据表明 L2 缓存中没有数据,并允许内核假设没有其他内核缓存它。

    坦率地说,不太了解 CPU 工作原理的人不应该试图控制缓存中的数据。如果他们比最初设计这些 CPU 的人做得更好,那就太神奇了。

    【讨论】:

    • 感谢您的机智回答。但它是无用的。哦,等一下,但你知道..让我编辑这个问题,也许你会给出一个真正的答案..你知道的。只是为了好玩
    • 实际上,我认为让您提出正确的问题比对原始问题的任何“真实答案”都做得更好。
    • 确定。这是你打发时间的方式:)))谢谢大卫,还是耶稣? :))))))
    • @David Schwartz 您所说的有关在 L2 中但不在 L3 中导致高速缓存一致性失败的数据对于 AMD 处理器无效。 AMD 允许不同的缓存级别拥有不同的数据,而不是在所有缓存级别中具有相同的数据。这称为独占缓存,而在每个级别中具有相同数据的称为包含缓存。
    • 我认为很明显 OP 的意思是“而不是只是 L3”并且没有误解缓存的工作原理。这个答案似乎不再与问题(当前状态)相关。此外,即使第二段是正确的,它也不应该阻止某人尝试编写高效的代码。
    猜你喜欢
    • 2020-09-30
    • 2018-11-08
    • 2016-11-11
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多