性能之王还是不进反退,Prescott全
前面我们主要涉及的,只是处理器外围的缓存部分,下面,我们把目光投向Prescott的核心内部,首先看看前端部分的一些变化:
Prescott前端结构(点击放大)
如上图,P4的前端部分主要由指令取、指令解码、追踪缓存、MicrocodeROM以及分支预测机构所组成。在这一部分中,Prescott主要在以下三个方面采取了改进措施。
◎ 在解码部分,Prescott将把更多的指令将交由硬件解码器进行解码后由指令发布速度为3条/周期的追踪缓存来发布,而不是交由发布速度仅1条/周期的MicrocodeROM来解码后发布,比如我们在上面提到的软件预取指令,就是一个很好的例子;这一点,同Athlon64的情况比较类似,而有关MicrodeROM与硬件解码器的区别,请点击此处察看。
◎ 第二方面,Prescott的解码部分能够识别出更多指令之间不必要的数据依赖(Data Dependence),以便提高后面的乱序执行效率;
◎ 最后,也是最重要的一个方面,就是对分支预测机构的改进了,我们将主要针对此方面的改进作一些简要说明。
首先,是我们在前面尚未涉及的Trace Cache BTB部分。必须明确的一点是,Trace Cache BTB部分的变动,与Prescott的动态分支预测机构关系十分紧密,而动态分支预测机构的性能,则对于Prescott这样的超长流水线处理器,具备相当重要的意义。
我们知道,简单处理器取指令时,只能按照编译后的指令静态顺序进行顺次读取;但由于分支指令的跳转特性,打乱了这种依次执行的顺序;如果此时我们仍然按照指令编译时的静态顺序顺次读取,或是在具备分支预测的处理器上出现分支预测失败的现象,错误地读取了其它的指令进行处理,就必然造成流水线部分区域的停工或是作了无用功。如下图:
长流水线分支预测失败示意图(点击放大)
对于Prescott这样的31级超长流水线来说,这样的问题给处理器带来的危害显然比稍短的流水线更大。为了解决流水线在执行条件分支指令时的上述问题,就必须改进Prescott处理器中的分支预测机构,这方面Intel主要有以下三方面的措施:
◎ 动态分支预测方面,首先就是我们前面提到的,将追踪缓存(Trace cache)所用的分支目标缓冲条目数由以前的512条增加到了2千条;
◎ Intel还宣称在原有的动态分支预测机构中加入非直接跳转分支预测器(Indrector Branch Predictor),改进了动态预测非直接跳转分支的能力。
◎ 第三条措施,就是改进静态分支预测的策略。 <