最初在Pentium M中,引进了一个叫“dedicated stack manager”(专注堆栈管理器)的特性,根据字面上解释,它是用于控制x86堆栈操作的,比如push, pop, call, return,它的意图就是为了把堆栈操作从所有运行代码中分离出来,以让处理器能够更加有效的处理其它任务。
在Barcelona中,AMD也引进了类似的叫Sideband Stack Optimizer(边带堆栈优化器)的技术,以让堆栈指令不再需要通过3-way解码,并通过整数执行单元的堆栈操作了,这个小小的优化设计可以带来整体性能的提升。
更快的加载
在以前的《新处理器之王!Core 2 Duo全面大评测》文章中,我们对Core 2的智能内存访问技术进行了解析,在对比系统内存存取表现,AMD K8却因内建内存控制器而比Intel Core微架构优胜,但由于Core微架构采用短Pipeline Stage架构及频率相对Netburst微架构低,加上高容量的L2 Cache并内建Shared Router Bus减少FSB使用,因此系统内存控取的表现差距已不像与上代Netburst微架构产品那么严重。而为了进一步拉近与K8架构上的内存性能距离,Intel还在Core微架构中加入全新的内存读取技术,称为Memory Disambiguation。
Memory Disambiguation是一个十分聪明的设计,通过Out of Order过程把内存读取次序作出分析。在传统的微架构里,内存读取是按流程顺序而被执行,如图上例子,Load 4是独立的Data X读取执行,也必需要等待其他Store 1、Load 2及Store 3工作完毕,即使Load 4的Data X和前面的资料存取动作并无关系,因为处理器并不会得到前面的动作是否会改变Data X的数值,所以不能重新排序并分析Load 4能否提前执行。
在Intel Core微架构中通过智能的分析机制,能预知Load 4的Data X是完全独立,并可让它提前执行。正因如此Memory Disambigutaion能减少处理器的等候时间减少闲置,同时减低内存读取的延迟值,而且它可以侦出冲突并重新读取正确的资料及重新执行指令,保证运作结果不会出现严重,但在正常情况下Memory Disambirutation出错的机会率很低。
可以看出Intel Core微架构,一个主要特性是加载指令可以绕过以前加载和存储的指令,平均来说在程序中所有指令的1/3是在加载的时候就完成了,所以如果能够提升加载性能,你就可以全面提升程序的运行性能,在Core微架构中,加载可以被重新排序,以确保需要这些数据的指令在存储访问非常繁忙的时候被执行。
AMD K8架构没有上面同等的乱序执行的协调能力。在没有集成内存控制器的情况下,Intel能够很轻松的执行更多的内存操作,Barcelona采用了类似的方法修正了这个问题,它也能够重新排序这些加载。但是Barcelona需要等待在决定是否这个加载可以被优先于存储执行之前,才把存储地址计算出来,通过这种方式,Barcelona不会有机会预测错误。AMD的设计者考虑到采用类似Intel的预测器的做法,但是好像对它的架构并没有太大益处,AMD能每个周期产生三个存储地址,因为它有3个AGUs (Address Generation Units),而相比Intel只有1个,所以Barcelona在这方面有优势。
从上面看,Barcelona的乱序执行能力加强后,应该会在这方面性能强于Core 2。