fbpx
维基百科

乱序执行

计算机工程领域,乱序执行错序执行,英語:out-of-order execution,简称OoOEOOE)是一种应用在高性能微处理器中来利用指令周期以避免特定类型的延迟消耗的范式。在这种范式中,处理器根据输入数据的可用性确定执行指令的顺序,而不是根据程序的原始数据决定。在这种方式下,可以避免因为获取下一条程序指令所引起的处理器等待,取而代之的处理下一条可以立即执行的指令。

历史

乱序执行是一种受限的数据流架构计算的方式,在20世纪70年代至80年代数据流架构计算是计算机架构的重要研究领域。在这个课题上重要的学术研究是由Yale Patt以及他的HPSm模拟器所领导。一篇由James E. Smith和A.R. Pleszkun在1985年所发表的论文通过精确的描述了在乱序执行的机器上会发生的异常行为,从而完善了该模式。

通常认为第一台使用乱序执行的计算机是CDC 6600(1964),使用了scoreboard来处理冲突。在现代的实现方式中,这种的记分板被认为是顺序执行的组成部分,而不是乱序执行,尽管这样的机器等待第一个写后读的冲突。严格的说,这样的机器启动在顺序执行的方式下,但是有可能结束于乱序执行之中。

大约三年后,IBM的360/91(1966)引入了Tomasulo算法,从而支持了完全的乱序执行。

在1990年,IBM发布了第一个支持乱序执行的微处理器,POWER1,尽管乱序执行被限制于浮点数计算上。

在整个20世纪90年代中,乱序执行变得更加普遍并且在IBM/Motorola PowerPC 601(1993), Fujitsu/HAL SPARC64(1995), Intel Pentium Pro(1995), MIPS R10000(1996), HP PA-8000(1996), AMD K5(1996)和DEC Alpha 21264(1998)中被使用。较为知名的未采用乱序执行的处理器有Sun UltraSPARC, HP/Intel Itanium, Transmeta Crusoe, Intel Atom,以及IBM POWER6

乱序执行模式的逻辑复杂度是造成该技术在20世纪90年代之前没有成为计算机的主流的原因。许多低端的处理器受限于市场成本仍然未采用该范式,因为制造乱序执行的计算机需要大型的硅片。低能耗是另一种难以用乱序执行设计所实现的目标。

基本概念

循序執行

在早期的处理器中,指令的执行一般在以下的步骤中完成:

  1. 指令获取。
  2. 如果输入的运算对象是可以获取的(比如已经存在于寄存器中),这条指令会被发送到合适的功能单元。如果一个或者更多的运算对象在当前的时钟周期中是不可获取的(通常需要从主記憶體获取),处理器会开始等待直到它们是可以获取的。
  3. 指令在合适的功能单元中被执行。
  4. 功能单元将运算结果写回寄存器

乱序执行

这种范式通过以下步骤挑選可執行的指令先執行:

  1. 指令获取。
  2. 指令被发送到一个指令序列中(也称执行缓冲区或者保留站)。
  3. 指令将在序列中等待直到它的数据运算对象是可以获取的。然后指令被允许在先进入的(较旧的)指令之前离开序列缓冲区。
  4. 指令被分配给一个合适的功能单元并由之执行。
  5. 结果被放到一个序列中。
  6. 仅当所有在该指令之前的指令都将他们的结果写入寄存器后,这条指令的结果才会被写入寄存器中。这个过程被称为毕业或者退休周期。

乱序执行的重要概念是实现了避免计算机在用于运算的对象不可获取时的大量等待。在上述文字的要点中,乱序执行处理器避免了在顺序执行处理器处理过程第二步中当指令由于运算数据未到位所造成的等待。

例如

  1. b = a * 5
  2. v = *b
  3. c = a + 3

由於1與3可並行執行,而2之b無法隨即獲得,因此可以先計算乘法1與加法3,再執行2。

乱序执行使用其他“可以执行”的指令来填补了时间的空隙,然后再在结束时重新排序运算结果来实现指令的顺序执行中的运行结果。指令在原始计算机代码中的顺序被称为程序顺序,在处理器中他们被按照数据顺序中被处理,这种顺序中,数据,运算符,在计算机寄存器中变得可以获取。一般来说乱序执行需要复杂的电路来实现转换一种顺序到另一种顺序并且维护在输出时的逻辑顺序;而处理器本身就好像是随机执行的样子。

乱序执行所带来的益处随着指令管道的加深和主存(或者缓存)和处理器间的速度差的变大而增长。在现代计算机中,处理器的运算速度大大超越了内存速度,所以在顺序执行处理器等待数据的过程中,乱序执行处理器能够执行大量的指令。

发送以及分配的分离实现了乱序执行

一个由新的范式所造成的区别是发送步骤从分配步骤中分离的序列的产生和毕业周期从执行周期中分离的产生。这种范式的一个早期的名称是"分离架构"。在早期的顺序执行处理器中,这些周期在一种相对固定的,管道化的方式中被执行。

为了避免错误的运算对象造成的指令乱序的减少,一种被称作寄存器重命名的技术被采用了。在这种模式中,将会有更多的寄存器被架构所定义。物理寄存器被加上标签从而不同架构的寄存器可以同时存在。

执行和写回的分离允许程序重新开始

结果序列是解决分支预测错误以及异常/中断的必要部分。结果序列允许程序程序在一个异常后重新开始,这需要指令在程序顺序中被完成。结果序列允许结果由于一个错误的分支预测以及发在在旧代码上的异常被丢弃。

把指令分配到过去的分支的能力解决了预测执行

微架构的选择

  • 执行应该被发送到一个集中的序列还是分布的序列中?
IBM PowerPC处理器采用了分布在不同的功能单元中的序列而其他的处理器采用了集中式的序列。IBM使用了术语“reservation stations”来描述他们的分布式序列。
  • 是否有一种即时的结果序列或者运算结果否则可以直接被写回寄存器?对于后者,序列的功能是由寄存器映射所处理,寄存器映射可以处理用于每条指令过程中的存器重命名信息。
早期的英特尔乱序处理器使用一种名为re-order buffer的结果序列,同时大部分之后的乱序处理器都使用了寄存器映射表。
更精确的说:英特尔P6类型的微处理器都同时具有一个ROB re-order buffer和一个寄存器映射表的机制。ROB主要是由分支错误预测恢复所推动。
英特尔P6类型的处理器是最早期的乱序执行处理器之一,但是被Intel Pentium 4 Willamette微架构所替代。多年后Intel Pentium 4 Willamette被证明是一个错误的由于性能和发热的问题,这一点迫使英特尔回到了P6架构设计并重新开始。结果便是诞生了酷睿酷睿2Sandy Bridge系列处理器以及Ivy Bridge系列。

参见

  • Scoreboarding
  • Tomasulo algorithm
  • Replay system
  • Dataflow architecture

深度阅读

  • Smith; Pleszkun. Implementation of precise interrupts in pipelined processors. Proceeding ISCA '85 Proceedings of the 12th annual international symposium on Computer architecture. 1985. doi:10.1145/327010.327125. 


乱序执行, 此條目需要补充更多来源, 2018年1月28日, 请协助補充多方面可靠来源以改善这篇条目, 无法查证的内容可能會因為异议提出而被移除, 致使用者, 请搜索一下条目的标题, 来源搜索, 网页, 新闻, 书籍, 学术, 图像, 以检查网络上是否存在该主题的更多可靠来源, 判定指引, 在计算机工程领域, 错序执行, 英語, order, execution, 简称oooe或ooe, 是一种应用在高性能微处理器中来利用指令周期以避免特定类型的延迟消耗的范式, 在这种范式中, 处理器根据输入数据的可用性确定执行指. 此條目需要补充更多来源 2018年1月28日 请协助補充多方面可靠来源以改善这篇条目 无法查证的内容可能會因為异议提出而被移除 致使用者 请搜索一下条目的标题 来源搜索 乱序执行 网页 新闻 书籍 学术 图像 以检查网络上是否存在该主题的更多可靠来源 判定指引 在计算机工程领域 乱序执行 错序执行 英語 out of order execution 简称OoOE或OOE 是一种应用在高性能微处理器中来利用指令周期以避免特定类型的延迟消耗的范式 在这种范式中 处理器根据输入数据的可用性确定执行指令的顺序 而不是根据程序的原始数据决定 在这种方式下 可以避免因为获取下一条程序指令所引起的处理器等待 取而代之的处理下一条可以立即执行的指令 目录 1 历史 2 基本概念 2 1 循序執行 2 2 乱序执行 3 发送以及分配的分离实现了乱序执行 4 执行和写回的分离允许程序重新开始 5 微架构的选择 6 参见 7 深度阅读历史 编辑乱序执行是一种受限的数据流架构计算的方式 在20世纪70年代至80年代数据流架构计算是计算机架构的重要研究领域 在这个课题上重要的学术研究是由Yale Patt以及他的HPSm模拟器所领导 一篇由James E Smith和A R Pleszkun在1985年所发表的论文通过精确的描述了在乱序执行的机器上会发生的异常行为 从而完善了该模式 通常认为第一台使用乱序执行的计算机是CDC 6600 1964 使用了scoreboard来处理冲突 在现代的实现方式中 这种的记分板被认为是顺序执行的组成部分 而不是乱序执行 尽管这样的机器等待第一个写后读的冲突 严格的说 这样的机器启动在顺序执行的方式下 但是有可能结束于乱序执行之中 大约三年后 IBM的360 91 1966 引入了Tomasulo算法 从而支持了完全的乱序执行 在1990年 IBM发布了第一个支持乱序执行的微处理器 POWER1 尽管乱序执行被限制于浮点数计算上 在整个20世纪90年代中 乱序执行变得更加普遍并且在IBM Motorola PowerPC 601 1993 Fujitsu HAL SPARC64 1995 Intel Pentium Pro 1995 MIPS R10000 1996 HP PA 8000 1996 AMD K5 1996 和DEC Alpha 21264 1998 中被使用 较为知名的未采用乱序执行的处理器有Sun UltraSPARC HP Intel Itanium Transmeta Crusoe Intel Atom 以及IBM POWER6 乱序执行模式的逻辑复杂度是造成该技术在20世纪90年代之前没有成为计算机的主流的原因 许多低端的处理器受限于市场成本仍然未采用该范式 因为制造乱序执行的计算机需要大型的硅片 低能耗是另一种难以用乱序执行设计所实现的目标 基本概念 编辑循序執行 编辑 主条目 指令周期 在早期的处理器中 指令的执行一般在以下的步骤中完成 指令获取 如果输入的运算对象是可以获取的 比如已经存在于寄存器中 这条指令会被发送到合适的功能单元 如果一个或者更多的运算对象在当前的时钟周期中是不可获取的 通常需要从主記憶體获取 处理器会开始等待直到它们是可以获取的 指令在合适的功能单元中被执行 功能单元将运算结果写回寄存器 乱序执行 编辑 这种范式通过以下步骤挑選可執行的指令先執行 指令获取 指令被发送到一个指令序列中 也称执行缓冲区或者保留站 指令将在序列中等待直到它的数据运算对象是可以获取的 然后指令被允许在先进入的 较旧的 指令之前离开序列缓冲区 指令被分配给一个合适的功能单元并由之执行 结果被放到一个序列中 仅当所有在该指令之前的指令都将他们的结果写入寄存器后 这条指令的结果才会被写入寄存器中 这个过程被称为毕业或者退休周期 乱序执行的重要概念是实现了避免计算机在用于运算的对象不可获取时的大量等待 在上述文字的要点中 乱序执行处理器避免了在顺序执行处理器处理过程第二步中当指令由于运算数据未到位所造成的等待 例如 ol li b a 5 li li v a href E6 8C 87 E6 A8 99 E9 9B BB E8 85 A6 E7 A7 91 E5 AD B8 html title 指標 電腦科學 a b li li c a 3 li ol 由於1與3可並行執行 而2之b無法隨即獲得 因此可以先計算乘法1與加法3 再執行2 乱序执行使用其他 可以执行 的指令来填补了时间的空隙 然后再在结束时重新排序运算结果来实现指令的顺序执行中的运行结果 指令在原始计算机代码中的顺序被称为程序顺序 在处理器中他们被按照数据顺序中被处理 这种顺序中 数据 运算符 在计算机寄存器中变得可以获取 一般来说乱序执行需要复杂的电路来实现转换一种顺序到另一种顺序并且维护在输出时的逻辑顺序 而处理器本身就好像是随机执行的样子 乱序执行所带来的益处随着指令管道的加深和主存 或者缓存 和处理器间的速度差的变大而增长 在现代计算机中 处理器的运算速度大大超越了内存速度 所以在顺序执行处理器等待数据的过程中 乱序执行处理器能够执行大量的指令 发送以及分配的分离实现了乱序执行 编辑一个由新的范式所造成的区别是发送步骤从分配步骤中分离的序列的产生和毕业周期从执行周期中分离的产生 这种范式的一个早期的名称是 分离架构 在早期的顺序执行处理器中 这些周期在一种相对固定的 管道化的方式中被执行 为了避免错误的运算对象造成的指令乱序的减少 一种被称作寄存器重命名的技术被采用了 在这种模式中 将会有更多的寄存器被架构所定义 物理寄存器被加上标签从而不同架构的寄存器可以同时存在 执行和写回的分离允许程序重新开始 编辑结果序列是解决分支预测错误以及异常 中断的必要部分 结果序列允许程序程序在一个异常后重新开始 这需要指令在程序顺序中被完成 结果序列允许结果由于一个错误的分支预测以及发在在旧代码上的异常被丢弃 把指令分配到过去的分支的能力解决了预测执行 微架构的选择 编辑执行应该被发送到一个集中的序列还是分布的序列中 IBM PowerPC处理器采用了分布在不同的功能单元中的序列而其他的处理器采用了集中式的序列 IBM使用了术语 reservation stations 来描述他们的分布式序列 是否有一种即时的结果序列或者运算结果否则可以直接被写回寄存器 对于后者 序列的功能是由寄存器映射所处理 寄存器映射可以处理用于每条指令过程中的存器重命名信息 早期的英特尔乱序处理器使用一种名为re order buffer的结果序列 同时大部分之后的乱序处理器都使用了寄存器映射表 更精确的说 英特尔P6类型的微处理器都同时具有一个ROB re order buffer和一个寄存器映射表的机制 ROB主要是由分支错误预测恢复所推动 英特尔P6类型的处理器是最早期的乱序执行处理器之一 但是被Intel Pentium 4 Willamette微架构所替代 多年后Intel Pentium 4 Willamette被证明是一个错误的由于性能和发热的问题 这一点迫使英特尔回到了P6架构设计并重新开始 结果便是诞生了酷睿 酷睿2和Sandy Bridge系列处理器以及Ivy Bridge系列 参见 编辑Scoreboarding Tomasulo algorithm Replay system Dataflow architecture深度阅读 编辑Smith Pleszkun Implementation of precise interrupts in pipelined processors Proceeding ISCA 85 Proceedings of the 12th annual international symposium on Computer architecture 1985 doi 10 1145 327010 327125 取自 https zh wikipedia org w index php title 乱序执行 amp oldid 73277532, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。