6

具体来说,我正在寻找诸如“在加载之前不能订购任何操作”或“在写入之后不能订购任何操作”等短语的简单英语解释。究竟什么是操作,它是什么意思让它“重新订购”?

4

2 回答 2

3

不同的指令使用处理器的不同部分。现代超标量处理器能够同时执行多条指令,只要它们使用不同的资源(来自单个线程,我不是指多核)。因此,CPU 实际上会在指令流中向前寻找一条可以与当前指令同时开始工作的指令(由于流水线和分支预测,指令在执行之前会被解码很长一段时间,这看起来-可能提前)。

CPU 非常注意数据依赖性,这意味着如果一条指令使用另一条指令的结果,它们将以正确的顺序执行。但是,例如,如果两条指令写入两个不同的内存位置,而第一个指令无法启动,因为它正在等待一个整数除法单元变得可用,那么“稍后”指令的内存写入实际上可能首先发生。

当其他线程正在查看这些内存位置时,这变得很重要。所以指令集中提供了标志,称为内存屏障,它告诉 CPU 流水线中的后续指令需要等待较早的指令,即使没有数据依赖性。C++11 内存模型定义了你的源代码必须是什么样子才能说服编译器插入这些标志。

于 2013-07-14T04:58:06.647 回答
1

这在 C++ 标准的第 1 条中进行了解释。1.9及以后我相信。

于 2013-07-14T04:50:51.410 回答