超纯量
超纯量(superscalar)CPU架构是指在一颗处理器内核中实行了指令级并行的一类并行运算。这种技术能够在相同的CPU主频下实现更高的CPU流量(throughput)。处理器的内核中一般有多个执行单元(或称功能单元),如算术逻辑单元、位移单元、乘法器等等。未实现超纯量体系结构时,CPU在每个时钟周期仅执行单条指令,因此仅有一个执行单元在工作,其它执行单元空闲。超纯量体系结构的CPU在一个时钟周期可以同时分派(dispatching)多条指令在不同的执行单元中被执行,这就实现了指令级的并行。超纯量体系结构可以视作多指令流多数据流。
超纯量体系结构的CPU一般也都实现了指令流水化。但是一般认为这二者是增强CPU性能的不同的技术。
![](http://upload.wikimedia.org/wikipedia/commons/thumb/c/ce/Superscalarpipeline.png/300px-Superscalarpipeline.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/c/c2/Processor_board_cray-2_hg.jpg/220px-Processor_board_cray-2_hg.jpg)
历史
编辑第一个超纯量的设计是在1965年西摩·克雷开发的CDC 6600。1984年的Intel i960CA与1987的AMD 29050处理器是第一个量产的单晶粒超纯量处理器。这些RISC系统的CPU使用超纯量架构,是由于当时RISC的设计的核心较简单,能够直接发送指令与调度多种功能性的单位(像是ALU)。这也是在八、九十年代RISC处理器比CISC处理器的运算速度更快的主要原因。
除了那些低功率CPU、嵌入式CPU、以及使用电池电源的CPU,1998年以后开发的CPU设计都已经是超纯量体系结构。第一种采用超纯量技术的x86处理器是Pentium。第一批采用了把CISC指令异步解码为微指令序列技术的处理器是Nx586、P6架构的Pentium Pro以及AMD K5。这使得被缓存的微指令可以动态调度(dynamic scheduling)执行,使得P6架构的并行性更优于P5架构的Pentium;这也使得预测执行(投机执行)更易实现,CPU的时脉也可以更高。
从纯量到超纯量
编辑最简单的处理器是纯量处理器。该处理器执行每个指令通常会在一个时间内操作一个或两个资料项目。但相较之下,向量处理器执行每个指令能够同时间运作很多资料项目。而超纯量处理器则是将纯量与向量处理器混合起来。每个指令处理一个资料项目,但是有多个多馀的处理器内的功能单位能同时处理额外独立的资料项目。
超纯量处理器设计强调增强指令发送的准确度,而且能够加强很多功能单位的利用度。这样当单位增加时效能增进就能很明显。当早期的超纯量CPU有两组ALU与一组FPU的时候,像PowerPC 970较先进的设计就内含四组ALU、二组FPU与一对单指令流多数据流单位。但如果调度器(dispatcher)效率低落,系统的性能将会拖累。
超纯量处理器的执行速度通常高于每周期一个指令。但同时处理多个指令不见得就是超纯量化,像是管线化CPU与多核心CPU,就是使用不同的方式,来达同时处理多个指令的目的。
而超纯量处理器的调度器从记忆体读取指令,而且决定要将哪些指令能够并行处理,将这些指令再调度到CPU内重复的功能单元。因而超纯量处理器可以想成它有多个平行的管线,这些管线可以平行处理一个执行绪中指令。
限制
编辑超纯量的效能增进会被这三处限制住:
- 指令流中的本质并行度(degrees of intrinsic parallelism),也就是限制指令级平行的数量。
- 复杂又耗时的调度器的消耗时间与依赖性检查逻辑电路。
- 分支指令的处理
现有的二进制程式有不同的本质并行度。在部分指令中并不与其他指令互相关联而能同时执行。而另一部分指令就有相互关联:一个指令会影响其他指令的资源或结果。像是a=b+c ; d=e+f
这串指令,因为运算中并不会相互影响而能够并行运算。但是a=b+c ; d=a+f
这串指令就可能无法并行执行,是因为指令顺序中后面的指令需要前面的运算结果。
当同时发出指令的数量增加,依赖性检查的成本会大量增加。由于检查过程中需要CPU参与,这样会恶化CPU的处理效率。而此成本包含为了实现依赖性检查而增加的逻辑闸,还有在这些逻辑闸之间的时间延迟。而研究显示出逻辑闸成本在某些状况下可能会高达 ,n是处理器的指令集数量,而k是同时发送的指令数量。在数学领域称之为排列组合问题。而即使该指令流并没有任何的指令依赖性,超纯量处理器还是要去检查,这样子才能确保结果不会错误。而无论半导体制程是多么进步,或是切换速度是多么的快,同时发送的指令数量还是有一个限制在。当更新进的制程允许更多的功能性单位内建其中(像是ALU),但是指令依赖性检查成长得太快以至于超纯量调度限制还是感觉很小,既使同时有五到六个指令同时调度进去。
然而即使将无限快的依赖性检查逻辑电路内建于超纯量CPU,如果指令流自己有很大的依赖性,这样还是可能会限制住效能。这样在源码流之间的本质平行度就会形成第二个限制。
替代技术
编辑综合来说,这三个限制驱使研究转向其他的效能增进架构,例如超长指令字(VLIW)、显式并行指令计算(EPIC)、同步多执行绪(SMT)和多核心处理器。
在VLIW架构,繁重的指令相依性检查工作由运行时的硬体逻辑转移到编译器身上。而EPIC与VLIW相似,但多了快取预取指令。
同步多执行绪通常缩写为SMT,目的是为了改进超纯量处理器的总体效率。此架构允许多个独立的执行绪更佳的利用现代处理器架构的资源。
超纯量处理器不同于多核心处理器之处,在于多馀的功能单元无法构成完整的处理器。一个处理器由多个较细粒度的功能单元所组成,例如算术逻辑单元(ALU)、整数乘法器、整数位移器、浮点运算器等等。每个功能单元可能存在复数版本,使得多个指令能平行执行。此做法不同于多核心处理器,后者使用多个执行绪(一核一绪)同时地处理指令;也不同于管线化处理器 - 复数指令可以同时存在于不同的执行阶段,就像工厂装配线一样。
这些替代技术并非互斥,他们可以(经常是)被合并使用到单一处理器上。因此一颗多核心处理器可能是这样,每个核心包含复数个平行管线,每个管线都是超纯量。有些处理器还拥有向量处理的能力。
内部链接
编辑- Hyper-Threading
- 并行多工
- 预测执行 / 及早求值
- 软体停滞,会出现于多处理器系统,由于超纯量的逻辑依赖性造成的现象。
参考书目
编辑- Mike Johnson, Superscalar Microprocessor Design, Prentice-Hall, 1991, ISBN 0-13-875634-1
- Sorin Cotofana, Stamatis Vassiliadis, "On the Design Complexity of the Issue Logic of Superscalar Machines", EUROMICRO 1998: 10277-10284
- Steven McGeady, "The 1960CA SuperScalar Implementation of the 80960 Architecture", IEEE 1990, pp. 232-240
- Steven McGeady, et al., "Performance Enhancements in the Superscalar i960MM Embedded Microprocessor," ACM Proceedings of the 1991 Conference on Computer Architecture (Compcon), 1991, pp. 4-7
外部链接
编辑