四、K8L的整数性能
改进的乱序执行方式
编译好的宏指令Macro-Ops以三条为一组发送到指令控制器ICU,指令控制器把宏指令的信息存入重排序缓冲区ROB,然后转移到调度程序Scheduler等待调出。重排序缓冲区会自动保存宏指令的信息并且控制他们的退出顺序, 宏指令依然以三条一组的方式退出,由调度程序分派到不同执行单元进行下一步编译。调度程序分派出的宏指令在三条整数列队中排序为8条一组、共24条,同时它们的出入顺序也由编码器记录。每24条宏指令排满后,调度程序就立即向算数逻辑单元ALU发出整数运算指令,同时也向地址产成单元AGU发出寻址指令。这样,每一时钟周期就可以同时完成3条宏指令和2条寻址指令。例如:
· add ebx,ecx;
· mov eax,[ebx+10h];快速寻址计算
· mov ecx,[eax+ebx];地址依赖于前一个指令操作
· mov edx,[ebx+24h];这个指令在前面所有指令的地址计算完成之前是不会被执行的
三个一排的宏指令组会在执行后从ROB中移出,宏指令的排序和移出使得调度单元动态的控制着整体资源,提高处理器工作效率。不过当三个宏指令序列中有一个出现满载情况,那么新的宏指令序列就不能进入调度单元。但是在实际操作中出现这样的情况并不是太多,即使偶尔发生这种情况也并不会对处理器的执行效率有太大的影响。除此之外,组中宏指令组到调度单元序列的静态链接也有可能会降低调度单元的工作效率,因为一个序列可能含有2个或更多的宏指令等待执行,另一个序列则可能一个等待的宏指令也没有。这种情况在实际执行中并不常见,通常在管线中都会有足够多的等待执行指令。

在这个过程中存在着限制K8性能的一个重大瓶颈:虽然K8可以每周期派遣出2条寻址指令,而CORE构架只派遣1条寻址指令,但是K8构架采用的有序执行的方式使K8构架比每周期只派遣1条寻址指令的CORE构架还要慢。这是因为CORE构架采用的是改进的乱序执行方式(OOOE),改进成熟后的乱序执行方案还可以有效避免内存混淆现象。
在“AMD与奔腾4的终结!Intel世袭构架涅磐”一文中,我们提到过:“在过去的几年里,大多数CPU都远离了乱序执行方式(OOOE)的内核设计思路,而偏向了有序执行方式(IOE),大量的VLIW处理器的性能都严重受限于程序与编码器,而现在Core的出现则代表了INTEL当前OOOE方式的最高设计水平,INTEL宣称Core将比现有的IOE处理器更好更合理的迅速处理完数据。”现在令DIYER满意的是,AMD也将采用其最新的OOOE技术,运用到AMD赋予厚望、对抗强敌CORE构架的K8L构架之中,这将使K8L构架与CORE构架在寻址速度、数据介入上达到同一水准。同样的,乱序执行OOOE是必须有序输出BIO的,AMD的工程师们使用了同样成熟的Memory Disambiguation技术,可以也让K8L构架中存数和取数指令同时进行乱序执行而不用等待前排取数/存数指令的完成。这一优化也使K8L构架节约了一倍的亢余周期,使其存储器数据处理/传输环节速度显著加快。K8L构架和CORE构架的乱序执行机制存在着一些技术上的差异,不过都为每时钟周期5条宏指令的派遣速度(3 ALU+2 MEM)。
改进的整数处理单元
数据块中的X86指令被编码为宏指令,每个宏指令分解为两个微指令:一个整数或浮点运算指令和一个内存寻址操作。K8构架处理器区分有三种不同的指令:
· 单直接路径指令被硬件解码器的编译成一个宏指令
· 双直接路径指令被硬件解码器编译成两个宏指令
· 矢量路径指令被芯片整合的微代码引擎ROM解码成3条或更多的宏指令
K8构架不能够同时派遣出直接路径指令和矢量路径指令。解码器每周期最大只能完成3条宏指令,所以硬件解码器能完成三条单直接路径指令、一条单直接路径指令和一条双直接路径指令、或者一条半的双直接路径指令(分为两个周期完成的三条双直接路径指令),而矢量路径指令则需要更多的时间。
宏指令在硬件解码器中编译然后被统一成组发出,一组可能包含2个甚至1个宏指令以分隔直接路径和矢量路径,或者是区分不同组的指令。SSE、SSE2、SSE3中的矢量路径指令被K8构架处理器分为多条宏指令,然后由其64位执行单元分为两部分来处理这些128位的数据。这就是K8构架处理器把矢量路径指令解码成3条或更多条宏指令的原因。在K8L构架中,SSE执行单元将加宽到128位,这样就可以在一周期内完成部分的完整SSE指令,这意味着优化SSE指令后K8L构架处理器的处理速度至少比同频率K8构架处理器提高20%以上。
虽然K8L构架依然无法在一周期内完成4-5条指令而CORE构架可以,但是这并不会负面影响到K8L构架处理器的性能,因为一般而言,绝大部分周期指令都是不多于三条的,而且K8L构架由SSE指令分解出的宏指令数量要远低于Conroe。
与K8构架不同,CORE构架的3个整数执行单元中有2个为SIU简单整数单元快速执行单元,另一个为CIU复杂整数单元,同时宏指令的列队容量为32条,这使得CORE构架的整数执行效率要比K8构架稍高。但在K8L构架中AMD则设计为3个SIU简单整数单元和1个CIU复杂整数单元,总的来看,K8L构架处理器和CORE构架处理器的整数性能是处于同一水平的,严格的来看,K8L构架稍微领先于CORE构架,毕竟K8L构架要晚于对手半年多才定案。
