CPU性能优化:单发射和多发射

SIMD指令可以用一条指令来处理多个数据,其实就是通过数据并行来提高执行效率,为应对日益复杂的多媒体计算需求,x86和ARM处理器都分别扩展了SIMD指令集,这些扩展的SIMD指令和其他指令一样,在流水线上也是串行执行的,流水线通过前面的各种优化手段来提高吞吐率,就是通过提升处理器主频来提高运行效率。CPU的主频提升了,但是处理器在每个时钟周期能执行的指令个数仍然是不变的,每个时钟周期只能从存储器取一条指令,每个时钟周期也只能执行一条指令,这种处理器一般叫做单发射处理器。

    多发射处理器在一个时钟周期可以执行多条指令,处理器内部一般由多个执行单元,如算数逻辑单元ALU,乘法器,浮点运算单元等等,每个时钟周期仅有一个执行单元在工作,其他执行单元都闲着。双发射处理器可以在一个时钟周期内同时分发多条指令到不同的执行单元,让CPU同时执行不同的计算(加法,惩罚,浮点运算等),一个双发射处理器每个时钟周期理论上最多可以执行2条指令,一个4发射处理器理论上每个时钟周期最多可以执行4条指令,双发处理器的流水线如图。

  根据实现方式的不同,多发射处理器又可以分为静态发射和动态发射,静态发射指在编译阶段将可以执行的指令打包,合并到一个64位的长指令中,在打包过程中,若找不到可以并行的指令配对,则用空指令NOP补充,这种实现方式为超长指令集架构VLIW。如下面的汇编指令,带有||的指令表示这条指令要在一个时钟周期里同时执行。

ADD R1,R1,R0 || ADD R3, R2,R2

   VLIW实现简单,不需要额外的硬件,通过编译器在编译阶段就可以完成指令的并行。早期的汇编语言不支持指令的并执行声明,随着处理器不断的迭代更新,为了保证指令集的兼容性,现在处理器,如X86,ARM等都采用Super Scalar 结构,这种处理器在多发射的实现过程中会增加额外的取指单元,译码单元,逻辑控制单元等硬件电路,在指令运行时,将串行的指令序列转换为并行的指令序列,分发到不同的执行单元去执行,通过指令的动态并行化来提升CPU的性能。

   大家不要吧乱序执行和SuperScalar弄混了,两者不是一样,乱序执行是串行执行指令,只不过调整了指令的执行顺序而已,而SuperScalar则是并行执行多条指令,两者在一个处理器中是可以共存的,

一个处理器可以是双发射,顺序执行的,也可以是双发射,乱序执行额。可以单发射乱序执行,也可以但发射顺序执行。超标量处理器通过增加电路逻辑将指令并行化来提升性能,其代价是增加了芯片的面积和功耗,不同的处理器,根据自己的市场定位,可以灵活搭配合适的架构。是追求低功耗,还是高性能。

  VLIW和SuperScarlar分别从编译器和硬件上实现了指令的并行化,各有各的优势和局限性,VLIW虽然实现简单,但是由于兼容性问题,完全依赖流水线硬件去动态识别可并行执行的指令,分发到不同的执行单元,同时执行8条指令是SuperScarlar的极限。

    现在新架构的处理器美元指令集兼容的历史包袱,一般会采用显示并行指令计算的指令集结构,EPIC结合了VLIW和SuperScarlar的优点,EPIC实现原理也简单,指令使用3哥比特来表示相邻的两条指令有没有相关性,程序在运行时,流水线根据指令中的这些信息可以轻松实现指令的并行化和分发工作,EPIC大大简化了CPU硬件逻辑电路的设计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值