如何禁用 CPU 的无序执行

How to disable out of order execution of CPU

本文关键字:无序 执行 CPU 何禁用      更新时间:2023-10-16

众所周知,现代CPU能够同时执行多个命令:https://en.wikipedia.org/wiki/Out-of-order_execution

因此,我们可能会得到如下事实:

当我们执行 c++ 代码时:x = a + b; y = c + d;y = c + d;可能会在x = a + b;之前执行。

我的问题是是否可以禁用 CPU 的无序执行?

不,当它有这样的硬件机制时,你不能停用它。这就是给你性能的原因。这就是CPU的设计方式。

C++保证的是,您将无法看到正确订单所需的内容与将得到的内容之间的区别。这也是像英特尔这样的供应商将确保组装的事情。

查看C++执行模型的 https://www.youtube.com/watch?v=FJIn1YhPJJc&frags=pl%2Cwn。

你应该关心的只是你的程序的意义。这不是迂腐,而是整个语言设计的基本基础。

C++程序描述程序的含义。它不是源代码与计算机字面上应该做的事情的一对一映射。

如果你想要这个,你将不得不用汇编或中世纪的一些老式语言进行编码,但即便如此,你也很难告诉现代 CPU 不要做它设计的所有聪明的事情来支持有用的程序。当然,我不知道有任何开箱即用的开关、标志或设置可以实现这一目标;这将违背CPU架构的本质。

最终,构建和编程差异引擎可能会更好;)

您无法在硬件级别(CPU 级别(停用重新排序。

但是,您可以确保编译器不会通过使用优化级别debug重新排序。

这将有助于调试程序,但会使代码变慢。不建议在生产代码中使用。

无法从程序中禁用无序执行,这是众所周知的内存屏障问题。由于问题后果仅出现在多线程程序中,因此必须使用同步原语来确保执行顺序。