族谱网 头条 人物百科

乱序执行

2017-10-16
出处:族谱网
作者:阿族小谱
浏览:565
转发:0
评论:0
历史乱序执行是一种受限的数据流架构计算的方式,在20世纪70年代至80年代数据流架构计算是计算机架构的重要研究领域。在这个课题上重要的学术研究是由YalePatt以及他的HPSm模拟器所领导。一篇由JamesE.Smith和A.R.Pleszkun在1985年所发表的论文通过精确的描述了在乱序执行的机器上会发生的异常行为,从而完善了该模式。通常认为第一台使用乱序执行的计算机是CDC6600(1964),使用了scoreboard来处理冲突。在现代的实现方式中,这种的记分板被认为是顺序执行的组成部分,而不是乱序执行,尽管这样的机器等待第一个写后读的冲突。严格的说,这样的机器启动在顺序执行的方式下,但是有可能结束于乱序执行之中。大约三年后,IBM的360/91(1966)引入了Tomasulo算法,从而支持了完全的乱序执行。在1990年,IBM发布了第一个支持乱序执行的微处理器,POWER1,...

历史

乱序执行是一种受限的数据流架构计算的方式,在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/MotorolaPowerPC 601(1993),Fujitsu/HAL SPARC64(1995),IntelPentium Pro(1995), MIPS R10000(1996), HP PA-8000(1996),AMD K5(1996)和DEC Alpha 21264(1998)中被使用。较为知名的未采用乱序执行的处理器有SunUltraSPARC, HP/IntelItanium, Transmeta Crusoe, Intel Atom,以及IBMPOWER6。

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

基本概念

顺序执行

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

指令获取。

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

指令在合适的功能单元中被执行。

功能单元将运算结果写回寄存器。

乱序执行

这种范式通过以下步骤打乱指令:

指令获取。

指令被发送到一个指令序列中(也称执行缓冲区或者保留站)。

指令将在序列中等待直到它的数据运算对象是可以获取的。然后指令被允许在先进入的、旧的指令之前离开序列缓冲区。

指令被分配给一个合适的功能单元并由之执行。

结果被放到一个序列中。

仅当所有在该指令之前的指令都将他们的结果写入寄存器后,这条指令的结果才会被写入寄存器中。这个过程被称为毕业或者退休周期。

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

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

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

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

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

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

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

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

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

微架构的选择

执行应该被发送到一个集中的序列还是分布的序列中?

是否有一种即时的结果序列或者运算结果否则可以直接被写回寄存器?对于后者,序列的功能是由寄存器映射所处理,寄存器映射可以处理用于每条指令过程中的存器重命名信息。

参见

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 .


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱

更多文章

更多精彩文章
评论 {{commentTotal}} 文明上网理性发言,请遵守《新闻评论服务协议》
游客
发表评论
  • {{item.userName}} 举报

    {{item.content}}

    {{item.time}} {{item.replyListShow ? '收起' : '展开'}}评论 {{curReplyId == item.id ? '取消回复' : '回复'}}

    回复评论
加载更多评论
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回
打赏
私信

推荐阅读

· 执行董事
参见非执行董事
· 非执行董事
相关专业操守利益冲突(Conflictofinterests)公司治理外部董事(独立董事)董事(劳方董事)外部链接参见执行董事独立董事
· 可执行文件
现代的可执行文件在现代的各种电脑架构,可执行文件除了有程序的信息之外,还有其他信息,例如让程序运行的操作系统设置值数据、调试数据等等。二进制档作此含义特指无法广泛应用于其他计算机针对特定操作系统配置的软件发行模式。系统调用除了微处理器指令,可执行文件也具有系统调用数据,让程序可使用操作系统提供的服务。因为系统调用数据,在各操作系统都有所不同,因此可执行文件除多数要分开不同的微处理版本,也有分开不同操作系统版本。常见可执行文件的扩展名.exe(Dos、Windows系列).com(Dos、Windows系列).App(以文件夹存在,MacOSX).run(LinuxUbuntu)脚本不是所有的可执行文件,都只存有电脑能阅读的数据。以脚本语言撰写的脚本文件,都可以是可执行文件,而且内含的数据可被人类阅读,多数以ASCII文本存档。原因是:脚本语言无需经过编译器预先编译,就可经过解释器(如Per...
· 可执行与可链接格式
格式ELF文件有两种索引:程序头中记载了运行时所需的段,而段首地址表记载了二进制文件中段的首地址ELF文件的组成:ELFheader程序头:描述段信息Section头:链接与重定位需要的数据程序头与Section头需要的数据.text.data工具readelf显示elf文件objdump显示elf和object格式文件
· 苏联中央执行委员会
链接苏联中央执行委员会

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信