本文介绍并比较了CPU架构超标量superscalar和超长指令自VLIW(Very long instruction word)。
乱序执行(In-order & out-of-order execution)
在各单元不按规定顺序执行完指令后还必须由相应电路再将运算结果重新按原来程序指定的指令顺序排列后才能返回程序。这种将各条指令不按顺序拆散后执行的运行方式就叫乱序执行(也有叫错序执行)技术。这样将根据个电路单元的状态和各指令能否提前执行的具体情况分析后,将能提前执行的指令立即发送给相应电路单元执行,在这期间不按规定顺序执行指令,然后由重新排列单元将各执行单元结果按指令顺序重新排列。采用乱序执行技术的目的是为了使CPU内部电路满负荷运转并相应提高了CPU的运行程序的速度。分枝技术:(branch)指令进行运算时需要等待结果,一般无条件分枝只需要按指令顺序执行,而条件分枝必须根据处理后的结果,再决定是否按原先顺序进行。
采用乱序执行技术的目的是为了使CPU内部电路满负荷运转并相应提高了CPU的运行程序的速度。
在按序执行中,一旦遇到指令依赖的情况,流水线就会停滞,如果采用乱序执行,就可以跳到下一个非依赖指令并发布它。这样,执行单元就可以总是处于工作状态,把时间浪费减到最少。乱序执行可以允许在发布指令3前发布指令4~8,而且这些指令的执行结果可以在指令3引出后立即引出(按序引出对X86 CPU来说是必需的),实际解码率又会增加25%。不过PⅡ和K6从乱序执行中得到的好处有限,因为如果CPU遇到指令依赖情况,它必须找到更多的非依赖指令进行发布。WinChip的性能表现看到一个带有大容量一级Cache的按序执行CPU能够同乱序执行CPU竞争,在时钟周期方面,Cache未命中的代价是非常高昂的。带有大容量一级Cache的按序执行CPU性能,比只有较小容量Cache乱序执行CPU的性能要强。在Cortex A9中,ARM引入了高端处理器常用的乱序执行(Out-of-Order)和猜测执行(Speculative Execution)机制.
超长指令字(VLIW:Very long instruction word)指的是一种被设计为可以利用指令级并行(ILP)优势的CPU体系结构,。一个按照顺序执行指令的非超标量处理器不能充分的利用处理器的资源,有可能导致低性能。
性能可以通过同时执行一系列指令中的不同子步骤来提高(这就是 流水线),或者像 超标量架构一样,甚至完全的并行执行多个处理器指令。进一步的提高可以通过指令的执行顺序与在程序代码中出现的顺序不同来提高,这就是 乱序执行。 这3种技术都要付出代价:增加了硬件的复杂性。在并行执行任何操作之前,处理器必须确认这些指令间没有相互依赖。例如第一个指令的结果作为第二个指令的输入。很明显,这样的2条指令那个无法同时执行,并且第2条指令不能在先于第一条指令执行。 乱序执行处理器增加了硬件资源用于调度指令和决定相互依赖。处理器包含多个功能单元,如不同的算术运算单元ALU,乘累加MAC单元、移位处理单元和浮点运算单元等。 另一方面,VLIW通过另外一种方法来实现并行。VLIW的并行指令执行是基于一个确定的调度。这个调度是程序在编译的时候就已经确定好的。由于决定乱序执行的工作是由 编译器来完成的,处理器不再需要上面三种技术所需的调度硬件。结果VLIW处理器相比其他多数的超标量处理器提供了更加强大的处理能力但是更少的硬件复杂性(编译器的复杂性提高了)。 正如一些其他比较新颖的架构,这种并行执行的概念只有当编译器能生成有效的代码的时候才变得有用。事实上,一些有着特殊目的的指令可以用来帮助一些复杂的操作,例如快速傅立叶变换或者在地貌计算中出现的计算。如果编译器无法准确的找出相关的代码并且生成可以利用CPU能力的目标代码,这些特殊目的的指令将变得毫无用处。例如,程序员可能需要将他的算法用一种可以降低编译器工作难度的方式进行描述。
超标量(superscalar)CPU架构是指在一顆处理器内核中实行了 指令级并行的一类 并行运算。这种技术能够在相同的CPU主频下实现更高的CPU吞吐率(throughput)。处理器的内核中一般有多个执行单元(或称功能单元),如算术逻辑单元、位移单元、乘法器等等。未实现超标量体系结构时,CPU在每个时钟周期仅执行单条指令,因此仅有一个执行单元在工作,其它执行单元空闲。超标量体系结构的CPU在一个时钟周期可以同时分派(dispatching)多条指令在不同的执行单元中被执行,这就实现了指令级的并行。超标量体系结构可以视作MIMD(多指令多数据)。超标量体系结构的CPU一般也都实现了 指令流水化。但是一般认为这二者是增强CPU性能的不同的技术。第一种采用了超标量技术的X86处理器是Pentium。
比较总结 超标量用硬件来决定哪些指令可以并行执行,而VLIW采用软件来决定哪些指令并行,通过把指令调度的复杂度交给编译器来降低硬件复杂度。 http://zh.wikipedia.org/wiki/%E8%B6%85%E9%95%BF%E6%8C%87%E4%BB%A4%E5%AD%97
http://en.wikipedia.org/wiki/Very_long_instruction_word
http://en.wikipedia.org/wiki/Superscalar
http://zh.wikipedia.org/wiki/%E8%B6%85%E7%B4%94%E9%87%8F
http://houh-1984.blog.163.com
本文介绍并比较了CPU架构超标量superscalar和超长指令自VLIW(Very long instruction word)。
**来源:http://houh-1984.blog.163.com/blog/static/3112783420126782142799/
|