【发布时间】:2016-04-27 11:16:48
【问题描述】:
我想知道是否有办法从 bash 中刷新 cpu 缓存?我注意到here 上有一个解决方案,但我不明白他的 ruby 代码以及这是否是刷新缓存的正确方法。
【问题讨论】:
-
为什么要刷新 CPU 缓存?您可能无法在任何多任务操作系统上完全实现它,因为可能会有一个上下文切换,它会更改您将在返回时获得的 CPU 缓存的哪一位,或者使您开始刷新的内容无效.
-
@RowlandShaw 我正在对文本语料库中的程序(训练模型)进行计时。该程序以较低的建模复杂性开始,并逐渐增加复杂性。我通过设置一个参数来增加复杂性,该参数放在一个 bash 脚本中的 for 循环中,复杂性从低到高。问题是每个复杂性级别报告的时间必须好像缓存中没有任何内容[以便在不同复杂性之间进行公平比较]。
-
您不需要了解 Ruby 代码。该代码只会生成大量 NOP 和无用的 XOR。您可以通过 while 循环和几乎什么都不做 200000 次来模拟相同的效果。
-
@manzur 我明白了,但为什么这应该有效?更清楚地说,为什么这可以保证整个缓存内容都充满了新的东西?
-
@user3639557 该代码不能保证缓存将被刷新。刷新取决于您的 CPU 及其驱逐策略。但是,有用于 x86 的
CFLUSH指令。此外,这篇文章看起来与您的相关:stackoverflow.com/questions/1756825/…