|
每一代CPU性能的提升,最大的根源都是架构方面有非常大的调整。从表中对比K8架构,Barcelona可以说是加强了很多,规格几乎都是成倍的增长。首先是SSE指令执行位宽,现在被AMD称为SSE128。在K8架构处理器中,两个SSE指令是并行处理的,SSE执行单元只有64-bits宽度,一个128-bit SSE指令操作,它不得不分割成两个64-bit指令操作,同样的一个128-bit SSE指令被获取后,它被首先解码成两个微操作(micro-ops),这会给这个指令带来多余的解码部分,效率上可想而知。
Barcelona的SSE执行单元则扩充为128-bits(实际上,Intel之前对于core2也是这么做的),一个128-bit SSE指令操作可以不必分割成两个64-bit操作,这意味着更多的可利用带宽可以被使用,那个FP scheduler也可以执行这些128-bit SSE指令操作。

SSE指令执行性能提升后也带来了另外一个瓶颈:指令获取带宽(instruction fetch bandwidth),这些128-bit SSE指令变得更大,同时为了最大化并行处理的解码数量,每周期32-bytes的带宽可以很好的解决这个问题,32-bytes的指令获取除了可以带来SSE代码带来好处外,同时也给整数代码带来了好处。
在这之后CPU可以获取和解码更多的指令,你需要能更多的把数据传到核心中去处理,因此AMD也进一步提高了L1 data cache和Barcelonas SSE寄存器(registers)之间的带宽,现在Barcelona可以实现2 x 128-bit loads/cycle的性能,同时L2 cache和内存控制器的接口也被提升到128-bits/cycle后,总体上平衡了上面的改进所带来的性能瓶颈。
SSE128的加强设计,和Intel对Yonah到Merom转变过程非常相像,在Conroe/Merom之前,Yonah在FP/SSE性能方面和K8没法相比,在此前的同频率下K8和Yonah的性能测试中,各项性能都可以打成平手,只有在视频编码方面不是这样,直到Core 2到来之后,才全面超过了AMD,相信SSE128的设计将给未来的Barcelona带来不错的表现。
核心调整
除了以上的改进以外,Barcelona在核心调整方面还有非常多的加强设计。首先从分支预测开始,总体来说,CPU的分支预测器的准确程度取决于设计的宽度和深度,在分支预测器不能有效预测的那些指令数量,决定了多少指令可以快速控制执行单元的运行。K8处理器的分支预测单元就是非常优秀的,而且为它的整体架构做了良好优化。
Barcelona追加了512-entry indirect predictor(512输入非直接分支预测器),用来预测非直接分支。一个非直接性分支跳转,它的目的是跳转到存储器中的地址指向,换句话说,一个分支有几个目标。一个非直接分支发送CPU到存储器的地址,它包含了指令需要被分支到的地址。
Intel追加了非直接预测器到他的Pentium M,设计灵感来源于更好的控制非预测分支数量将会带来更高效的性能(其中包括功耗方面的表现),这个设计同样也在此前的Prescott被采用,用来削弱NetBurst架构长管线设计所带来的性能上的损失。
在Prescott中,这个简单追加设计带来了在SPEC CPU2000测试软件中12%的分支预测错误,但是AMD和Intel在算法结构上的区别则不被公开,在SPEC CPU2000的253.perlbmk测试项目中,非预测分支减少是非常明显的,达到了将近55%。
非直接预测器并不是Barcelona唯一的性能提升亮点,回归堆栈(return stack)大小较K8有双倍大小的改进,举个例子,在一个很长的命令条中,命令代码包括了很多子程序(比如递归函数),CPU实际上会用完所有空间来纪录它的路径,一旦开始丢失回归地址的路径,就会导致无法进行下一步的分支预测,双倍大小的设计正好是为了解决这个问题,据说这个改进是在收到一个大型软件公司的请求才确定的。
更多的优化调整
当然还有一些调整,其中Translation Lookaside Buffers简称为TLBs,是用于虚拟地址向物理内存地址映射的作缓存的,TLBs的使用率是非常高的,但是因为程序变的越来越多,对内存的要求也就需要处理器设计者对TLB容量大小进行调整,相对于K7,K8就有增大,在Barcelona上,AMD也在重复这样的过程,比K8要大一些,但是它们现在支持1G pages,这对数据库应用和虚拟加载非常的有用,AMD同样在Barcelona上引进了128 entry 2M L2 TLB,用于满足更新的程序对大容量的需求。
Intel在Pentium M上引进的另外一个加强设计是更低的integer divide latency,尽管现在它的细节还不是很多,但是AMD说明他们已经在Barcelona中减小这个延迟,我们还不清楚它的设计是不是和Intel的方法类似,但是预计在真实应用中,不会给性能带来太多的提升。
还有一些不需要明显提升晶体管数目而提升性能的办法,就是把一些指令放到特殊的快速编码通道里面,这样可以很大程度上缩短指令解码的长度,作为sideband stack optimization(边带堆栈优化器,后面将具体涉及)优化加强一部分的CALL和RET-Imm指令现在也做了这样的处理,同样从SSE registers到 integer registers的MOVs也是这样。
提到指令,AMD也在Barcelona引进了新的扩展:LZCNT和POPCNT,这两个指令被用于加密应用中,AMD也是也引进了四个新的SSE扩展:EXTRQ/INSERTQ, MOVNTSD/MOVNTSS,我们将在未来Inel的Penryn处理器中看到。
上一页 [1] [2] [3] [4] [5] [6] 下一页 |