【发布时间】:2018-01-06 09:58:54
【问题描述】:
这里提到了预取指令:https://c9x.me/x86/html/file_module_x86_id_252.html,它允许系统程序提示 cpu 哪些数据应该进入缓存。但是,如果是引导加载程序作为操作系统加载的单个简单程序 - 就像 MikeOS 一样简单 - 那么,这些提示是否可以几乎确定哪些数据位于缓存中,因为只有一个进程在控制 CPU - 或者cpu 还在自己做分支预测吗?是不是表示这个目的首选cpu的内部分支预测?
【问题讨论】:
-
不这么认为,不。此外,允许它的性能损失可能远远超过任何收益。您将如何确保您的缓存策略对所有 CPU 架构、所有缓存大小等都是最佳的?
-
x86 有
prefetchinstruction,但通常 CPU 足够聪明,可以识别访问模式本身,因此您必须仔细测量性能以查看它是否真的有帮助,或者只是将无用的操作码添加到二进制。 -
@fredrik 感谢您的 cmets,但您能否详细说明一下可能会导致的一些性能损失?
-
因为这是一个非常开放的问题(不是 stackoverflow 问题),所以答案是绝对的。如果您可以控制处理器并了解架构,那么您可以控制缓存中的大部分内容(如果不是全部的话)。即使没有完全控制,您也可以鼓励缓存中的内容,但您正在与其他代码竞争,并且如果您不知道/理解其他代码或它在做什么,它决定了您可能拥有的控制权。
-
如果这是另一个我崩溃/幽灵的问题,这不是你解决它们的方式。
标签: assembly x86 cpu cpu-architecture cpu-cache