【问题标题】:Why aren't out of order CPUs troublesome?为什么乱序 CPU 不麻烦?
【发布时间】:2016-02-07 20:12:17
【问题描述】:

我最近在这个链接https://en.wikipedia.org/wiki/Out-of-order_execution了解了乱序执行CPU

有些东西我不太明白。为什么这些 CPU 不麻烦?我的意思是,如果我有指令乱序执行,即使它们适用于不同的数据,我是否能够达到数据不按照程序顺序更新的情况?

我的意思是,如果我有类似的东西:

x = 1;
y = 2;
x = x+y;
print x;
print y;

是什么阻止了“print y”指令在“print x”之前执行?

也许我对这种 CPU 有什么误解,你能给我解释一下吗?

提前致谢

【问题讨论】:

  • 如果第二个不依赖第一个,它只能乱序执行两个操作。它还可以推测性地执行它认为将要采用的分支,然后如果它以另一种方式分支,则放弃该状态。基本上,制造这些 CPU 的人非常聪明,并且使用强大的工具来确保它们无序工作。
  • 在这里挖掘大学记忆......但我相信这与不同指令所采用的途径有关。两个打印命令共享一个路径,因此第二个必须等待第一个。但是如果两个命令使用不同的路径,它们可以自行移动,直到它们与当前正在使用的另一条指令的路径相交

标签: cpu computer-architecture


【解决方案1】:

在乱序处理器中,指令被乱序执行,但按顺序提交。这意味着外部可见状态按顺序变为可见。对内存的写入(包括 I/O 操作)在本地缓冲,以便它们可以按顺序释放到外部内存系统,类似地,使用寄存器重命名将寄存器结果存储在本地。这允许本地处理器使用早期推测值而不违反外部可见排序。如果推测不正确,则会使用回滚机制将状态恢复到以前的已知有效状态。

请注意,技术上将结果承诺到处理器内核外部状态不一定要按顺序进行,只要无序结果是非推测性的并且不违反排序保证.对于弱内存一致性模型,这可能(理论上)允许值在外部可见的乱序。 (I/O 需要有序,因此打印示例仍然需要按顺序提交。)此外,如果其他内核知道值在性质或顺序上是推测性的,则可以使这些值在外部可见。无序(同样,理论上),并且值的消费者会因不正确的推测而回滚。 (这将“外部可见”从单个处理器内核的外部扩展到一些更大的系统组件的外部,这些组件知道推测并支持回滚。)

(在非常不切实际的理论中,将推测实现扩展到人机界面是可能的如果接口的定义允许此类故障(即,人类纠正错误推测的值和顺序)。然而,由于人类甚至比大多数 I/O 设备还要慢(推测将在比重要的更短的时间内得到解决)并且这种推测的扩展将非常复杂并且通常是不可取的,因此它不太可能被广泛使用。 )

【讨论】:

    【解决方案2】:

    @paul-a-clayton 已经给出了很好的答案。我想再提一件事。

    早期的无序架构出了名的麻烦。根本的问题是他们不能保证精确的中断。由于 Smith & Pleszkun 的seminal paper 中提出的解决方案,这种情况在 80 年代末/90 年代初发生了变化。他们引入了重新排序缓冲区的想法,该缓冲区允许指令无序发出但按顺序提交。

    【讨论】:

      猜你喜欢
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多