无序执行的历史
直到大约1993年前,大多数CPU一次只能处理一条指令。当时如果采用流水线设计,比如摩托罗拉68040或者Intel 80486,就可以同时在不同的执行阶段处理不同的指令。
在1991和1992中,出现了MIPS R4000、Alpha 21064和奔腾,属于第一批面向普通市场的“超标量”处理器:每个CPU周期可以处理(读取、执行和退出)两条指令。
后来在1995年出现了Alpha 21264,出现了第一个每周期可以处理四条指令的CPU,时钟频率达到了300MHz,在当时是很惊人的。当Alpha21664出现在微处理器论坛上时,引起了观众的赞叹,包括来自英特尔和IBM的设计师,更不用说来自孙的设计师了。可惜阿尔法最后没有成功。
无论如何,这些厂商当时采用的是有序的有序技术:程序指令执行时,按顺序读取、执行、退休操作码,一次执行两到四条指令。
不同的指令需要不同的执行资源,程序流程往往是这样的:执行需要等待资源释放或者指令依赖解决,才能继续执行下一条指令。更糟糕的是,每一次新一代CPU的出现,都需要重新编译代码,针对新的CPU进行优化。否则,读/写指令之间很可能会出现过多的气泡,即空闲时间,导致性能提升不大,与竞争产品相比优势不大。
这时,乱序执行出现了。CPU硬件本身在读取指令后重新安排指令的执行顺序,并根据现有资源提供更多的执行单元、重命名寄存器、处理指令依赖等。所以奔腾Pro和Alpha 21264之后的新CPU几乎都采用乱序执行技术。
在大多数情况下,乱序执行可以加快芯片的运行速度,有时候加速很明显。21264的速度是21164的近两倍,奔腾Pro的速度也比奔腾快很多。最新的MIPS架构R10000,有了很大的改进,也是采用乱序执行。
从安腾到强国6
乱序执行发展得很好,直到Intel推出了一种全新的技术。重要的安腾处理器拥有真正独特的引擎,并使用重要的显式并行指令计算(EPIC)技术。更不用说安腾处理器超过100的指令格式组合,庞大的慢速寄存器组等。实际上,它重新采用了有序执行技术。因此,编译器必须完成所有的工作,以确保执行单元总是忙碌的。除了浮点处理密集型应用,要做到这一点并不容易,只要看看安腾系统的基准测试结果就知道了。
在随后的发展中,安腾框架的这一做法从未改变。相反,Sun曾经改用富士通的SPARC64,使用无序技术,而不是自己的UltraSPARC IV,使用有序技术。其他重要架构如x86继续采用无序技术,使用Core 2、K10等新引擎,并进一步完善这一方案,充分利用每一MHz。
如果因为某种原因需要AIX,那么Power的重要性不言而喻。Power4和Power5都是高速但复杂的RISC处理器,采用无序技术,结合了四种超标量执行机制和非常高的系统带宽。但是,Power6又回到了技术有序的时代。原因何在?
一个答案是,如果Power6的同步多线程效果好,就不用太担心在单线程上浪费执行资源:这种情况下,同时运行两个线程就可以了。此外,为了进一步大幅提升性能,倍频、加倍二级缓存、缩短算术逻辑单元(ALU)的延迟恐怕更为关键。即使这样,浮点处理单元也会保留一些乱序执行功能——这是十进制浮点处理单元(FPU)首次引入通用处理器的浮点运算部分。“同步双线程执行、负载预测机制以及增强的数据和指令预取功能,提高了超标量内核有序执行的性能。”这是IBM对其新芯片的评价。
Power5+的五路乱序执行被Power6的七路有序执行取代,但即便如此,也有几点需要注意:Power5+每个周期最多只有五条指令,而Power6给一个线程增加了两条指令,更有利于计算线程和内存搜索线程的结合。Power5+更注重内部资源,而Power6大部分时间都在等待内存,所以每个周期两次运算完全够用。那么性能上的提升是什么呢?看看基准测试specfp2006。2.2GHz主频的Power5+在这方面可以达到14.9,这当然是在改装的Power5机器上实现的。4.7GHz的Power6可以达到22.3,时钟频率提高了一倍多,性能提升不到一半。
所以Power6的7.9亿个晶体管分布在341 mm2这个相对较大的尺寸上,比巴萨/阿金纳的283mm2还要多,只比安腾的巨大尺寸小一点点。确实大大提升了性能,虽然没有乱序技术。虽然缓存和内存带宽都是随着时钟频率的增加而上升的,但是仍然可以说在相同的时钟频率下,复用有序技术在处理单线程任务时会导致30%左右的性能下降。
因此,我们必须等待更新的Power6系统和下一版本的AIX在编译器方面的进展,以减少这种性能损失。不过对于Power6来说,时序技术的使用确实显著提升了处理器的性能。安腾也采用了有序技术,但至少到目前为止还没有看到明显的效果。x86恐怕再也不会有有序的技术了。
然而,随着处理器技术的快速发展,Power6的设计者不会坐视不管。英特尔的3.6 GHz Harper town“Penryn”和AMD的3GHz Barcelona处理器将陆续问世,对IBM Power6构成重大挑战。IBM必须牢记,对于这种采用顺序技术的处理器,随着每一代后续CPU的出现,需要在编译器中做更多的工作。同时,不是每个人都有时间重新编译自己的应用程序。