乱序执行技术
来源:互联网 发布:伟大复兴 知乎 编辑:程序博客网 时间:2024/05/22 08:20
乱序执行(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的结果,在一定程度上,加快了程序的执行速度。
有时间看看<计算机体系结构:量化研究方法>
- 乱序执行技术
- 乱序执行技术
- 乱序执行技术
- CPU乱序执行技术
- 多线程-多核心-SMP-NUMA-乱序执行技术
- 乱序执行
- cpu乱序执行
- 编译乱序和执行乱序
- 乱序执行的原理
- 乱序执行中 寄存器重命名(Register Renaming )技术介绍
- 乱序执行的简单概念
- 乱序执行和内存屏障
- 处理器的乱序和并发执行
- 乱序执行和内存屏障
- 乱序执行和内存屏障
- 乱序执行和内存屏障
- 处理器的乱序和并发执行
- 处理器的乱序和并发执行
- nfs服务器的配置和调试
- 好记性不如烂笔头。每天进步一点点
- 用rhel6.1光盘创建本地yum源
- Struts Action-Driven
- WordPress数据库结构介绍
- 乱序执行技术
- Android驱动USB摄像头
- 一根网线让两台电脑同时上网的解决办法
- WordPress数据库各表结构介绍
- Hibernate的Query接口和Criteria接口的区别
- BMP文件格式
- SQL中使用WITH AS
- 简单而又复杂的TCP/IP
- js基础知识