乱序执行技术

定义

在各单元不按规定顺序执行完指令后还必须由相应电路再将运算结果重新按原来程序指定的指令顺序排列后才能返回程序。这种将各条指令不按顺序拆散后执行的运行方式就叫乱序执行(也有叫错序执行)技术。

解释

这样将根据个电路单元的状态和各指令能否提前执行的具体情况分析后,将能提前执行的指令立即发送给相应电路单元执行,在这期间不按规定顺序执行指令,然后由重新排列单元将各执行单元结果按指令顺序重新排列。采用乱序执行技术的目的是为了使CPU内部电路满负荷运转并相应提高了CPU的运行程序的速度。分枝技术:(branch)指令进行运算时需要等待结果,一般无条件分枝只需要按指令顺序执行,而条件分枝必须根据处理后的结果,再决定是否按原先顺序进行。

目的

采用乱序执行技术的目的是为了使 CPU 内部电路满负荷运转并相应提高了CPU的运行程序的速度。
这好比请A、B、C三个名人为晚会题写横幅“ 春节联欢晚会 ”六个大字,每人各写两个字。如果这时在一张大纸上按顺序由A写好"春节"后再交给B写"联欢",然后再由C写"晚会",那么这样在A写的时候,B和C必须等待,而在B写的时候C仍然要等待而A已经没事了。
但如果采用三个人分别用三张纸同时写的做法, 那么B和C都不必须等待就可以同时各写各的了,甚至C和B还可以比A先写好也没关系(就象乱序执行),但当他们都写完后就必须重新在横幅上(自然可以由别人做,就象CPU中乱序执行后的重新排列单元)按"春节联欢晚会"的顺序排好才能挂出去。

工作原理

在按序执行中,一旦遇到指令依赖的情况,流水线就会停滞,如果采用乱序执行,就可以跳到下一个非依赖指令并发布它。这样,执行单元就可以总是处于工作状态,把时间浪费减到最少。乱序执行可以允许在发布指令3前发布指令4~8,而且这些指令的执行结果可以在指令3引出后立即引出(按序引出对X86 CPU来说是必需的),实际解码率又会增加25%。不过PⅡ和K6从乱序执行中得到的好处有限,因为如果CPU遇到指令依赖情况,它必须找到更多的非依赖指令进行发布。

 

乱序执行技术
   乱序执行(out-of-orderexecution),是指CPU允许将多条指令不按程序 规定的顺序分开发送给各相应电路单元处理的技术。这样将根据个电路单元的状态和各指令能否提前执行的具体情况分析后,将能提前执行的指令立即发送给相应电路单元执行,在这期间不按规定顺序执行指令,然后由重新排列单元将各执行单元结果按指令顺序重新排列。采用乱序执行技术的目的是为了使CPU内部电路满负荷运转并相应提高了CPU的运行程序的速度。分枝技术:(branch)指令进行运算时需要等待结果,一般无条件分枝只需要按指令顺序执行,而条件分枝
必须根据处理后的结果,再决定是否按原先顺
序进行。 虽然执行的时候不按顺序,但结果还是顺序的。而且只有上下文无关的内容才能这么执行。在宏观(汇编级)上,还是顺序的。

    cpu层次的东西,不会对上层产生结果性的影响,但乱序执行与分支预测,会对程序的效率产生影响,因为每一次分支判错,都会丢弃计算的结果。在一个使用投机执行的处理器中,处理器会开始执行预测的分支目标处的指令。它这样做的方式是,避免修改任何实际的寄存器或存储器位置,直到确定了实际的结果。如果预测是正确的,处理器就简单地提交投机执行的指令的结果,把它们存储到寄存器或存储器中。如果预测是错误的,处理器必须丢弃掉所有投机执行的结果,在正确的位置,重新开始取指令的过程。这样做会引起很大的分支处罚,因为在产生有用的结果之前,必须重新填充指令流水线。

    也就是说,在使用if...else...这样的分支操作时,由于cpu的缘故,我们可能会浪费一些时钟周期。

    作为c程序员,对于这个东西,我们无能为力。一切都要靠编译器来解决这个问题,不过,我们可以减少条件分支的使用(呵呵...意识流的...)。

    比较明显的例子是在驱动中使用的unlikely()和likely()优化。 这两个是分支预测的好例子。

     而乱序执行,大概是这样的:

     br label

     ld8 r9 r5

     add r6 r9 r5

    由于ld(load)指令执行的周期较长,为了加快执行的速度,可以这样优化:

    ld8 r9 r5

    br label

    add r6 r9 r5

    在ld执行时,同时进行条件判断,如果需要分支跳转,那么舍弃ld的结果, 如果需要执行add,那么等待ld的结果,在一定程度上,加快了程序的执行速度。


    有时间看看<计算机体系结构:量化研究方法>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值