除了以上的改进以外,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处理器中看到。