现在的位置: 首页 > 综合 > 正文

乱序执行技术

2013年12月09日 ⁄ 综合 ⁄ 共 961字 ⁄ 字号 评论关闭

乱序执行技术
   乱序执行(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的结果,在一定程度上,加快了程序的执行速度。


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

抱歉!评论已关闭.