如何禁用 CPU 的无序执行
How to disable out of order execution of CPU
众所周知,现代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
重新排序。
这将有助于调试程序,但会使代码变慢。不建议在生产代码中使用。
无法从程序中禁用无序执行,这是众所周知的内存屏障问题。由于问题后果仅出现在多线程程序中,因此必须使用同步原语来确保执行顺序。
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 如何确认我的constexpr表达式实际上已经在编译时执行
- C++17中的并行执行策略
- QML按钮点击功能执行顺序
- 递归无序映射
- 程序在执行程序的其余部分之前退出
- 为什么catch中的代码没有被执行
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 将执行、作业和WinAPI相乘
- 如何禁用 CPU 的无序执行
- 逗号运算符和无序执行