• 处理器大幅提高性能之一乱序执行


    这好比请A,B,C三个名人为晚会题写横幅“春节联欢晚会”六个大字,每人各写两个字。如果这时在一张大纸上按顺序由一个写好“春节”后再交给乙写“联欢”,然后再由ç写“晚会”,那么这样在一个写的时候,B和ç必须等待,而在乙写的时候ç仍然要等待而阿已经没事了。

    但如果采用三个人分别用三张纸同时写的做法,那么乙和Ç都不必须等待就可以同时各写各的了,甚至Ç和乙还可以比阿先写好也没关系(就象乱序)执行),但当他们都写完后就必须重新在横幅上(自然可以由别人做,就象CPU中乱序执行后的重新排列单元)按“春节联欢晚会”的顺序排好才能挂出去。超级网站整站下载器

    乱序执行(乱序执行)是指CPU采用了允许将多条指令不按程序规定的顺序分开发送给各相应电路单元处理的技术。比方核心乱序执行引擎说程序某一段有7条指令,此时CPU将根据各单元电路的空闲状态和各指令能否提前执行的具体情况分析后,将能提前执行的指令立即发送给相应电路执行。

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

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

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

    的的WinChip的性能表现看到一个带有大容量一级缓存的按序执行CPU能够同乱序执行的CPU竞争,在时钟周期方面,高速缓存未命中的代价是非常高昂的。带有大容量一级高速缓存的按序执行CPU性能,比只有较小容量缓存乱序执行CPU的性能要强。

    而上升的工程师在这方面犯了错误,MP6的一级高速缓存只有16KB,因此高速缓存未命中的发生频率比其他CPU高,以致于它很难“喂饱”它的3条流水线。这是很可惜的事,因为一个按序执行CPU不是太复杂,因此可以做得更小。如果Rise CPU具有较大的一级Cache和高时钟频率,那么,对于像K6-2那样的乱序执行CPU来说,上升CPU是一个凶狠的对手,它具有更好的浮点性能(双FPU流水线),而且成本也更便宜。集成256KB二级Cache的mP6-或许将纠正这个错误,但它要达到令人满意的时钟频率。

    由于K7采用大容量缓冲,因此它能及时发布足够多的非依赖性指令。大容量一级缓存,大容量缓冲和乱序执行,使K7的两条FPU流水线比Rise mP6的两条流水线更容易“喂饱”,效率更高。站长之家 

  • 相关阅读:
    Windows下Goland的Terminal设置为Git Bash
    BoltDB简单使用教程
    Base64编码转换原理
    [区块链|非对称加密] 对数字证书(CA认证)原理的回顾
    [数据库锁机制] 深入理解乐观锁、悲观锁以及CAS乐观锁的实现机制原理分析
    升级mojave后的小问题解决
    ubuntu安装ssh服务记录
    dubbo+maven多模块项目单元测试
    sass与less
    (转)初识 Lucene
  • 原文地址:https://www.cnblogs.com/oneasdf/p/9287905.html
Copyright © 2020-2023  润新知