热点推荐
ZOL首页 > CPU频道 > CPU评测 > 技术讲堂 >

改进的流水线

问倒Intel专家 酷睿i7四万字权威测试

CNET中国·ZOL&玩家堂 作者:中关村在线 玩家堂 责任编辑:向中 【原创】 2008年12月06日 06:06 评论
在本页阅读全文(共29页)


Core i7终极全面测试
Nehalem的流水线

    上图展示了Nehalem的流水线。了解Conroe微体系结构的读者可以看到,右上角非核心部分包括的QPI、三通道内存控制器、三级高速缓存都是之前Intel处理器中所没有的。此外核心部分Nehalem与之前的Penryn也有诸多不同。让我们来一起剖析Nehalem的设计,我们先来关注流水线的前端部分。

小贴士:

    很多朋友还不清楚什么是流水线以及流水线的具体作用。为了方便大家阅读,在此进行一些说明。让我们考虑这样一个例子。假如你家旁边开了一家洗衣房,而你有一筐衣服要洗。洗衣房洗衣服可以分为以下几个步骤:在前台登记并收取衣物、洗衣、晾干、熨烫。完成同样的事情可能有两种做法。第一种是前一个顾客在前台登记完成并洗完衣服,晾干、熨烫都完成以后你才能登记。这种做法既相当于流水线处理器出现之前的微处理器的处理方式。第二种方式是前一个顾客只要登记完成,你就可以登记,然后每个顾客按照顺序洗衣、晾干、熨烫。第二种方式即相当于流水线的处理方式。在这个例子中,衣物相当于程序中的每条指令,而洗衣房相当于处理器,洗衣房洗衣服的过程就相当于处理器处理指令的过程。很显然,具有流水线的处理器在处理任务时会高效很多。

Nehalem处理器在流水线前端的改进主要有以下几方面:

  • 宏操作融合
  • 循环流检测器
  • 分支预测

    Intel在Conroe处理器中首次引入了宏融合的概念。宏融合指的是将两条连续执行的x86指令当作一条指令来处理。宏融合的目的在于增加处理器处理指令的吞吐率并减小执行延迟(想想看将两缸衣服放到一缸里面洗,一定比连续洗两缸衣服要快),另外也改进了能耗比(洗一次总比洗两次省电)。在Conroe中,如果TEST/CMP指令后紧跟一条件分支指令,那么这两条指令被当做一条指令一并解码、执行和提交,但是只能在32位模式下进行。Nehalem可以同时在32位和64位模式下支持宏融合,可以明显提高64位处理模式下的执行效率。由于当前服务器大多使用64位的操作系统,而台式机也越来越多的使用64位的操作系统,因此支持64位的宏融合相当有必要。

Core i7终极全面测试

Core i7终极全面测试

    在Core微体系结构之前,并不具有循环流检测技术,循环流检测器也是Core微体系结构引入的。Core微体系结构在取指单元和译码单元加入了一个循环流检测器,这个循环流检测器是一个包含18条指令的缓冲,用于检测需要执行的指令是否是存在于一个循环中(循环的大小不能超过18条指令)。当CPU执行指令时,循环流检测器会检测自身的缓冲器。如果发现需要执行的指令包含在其中,将不再对这条指令进行分支预测和取指,而是从缓冲器中取出这条指令,并开始下一步的译码。循环流检测器的加入可以有效改善CPU在执行包含大量循环的应用程序时的表现。(还是拿洗衣房那个例子来讲,如果你每次过去的时候,不需要登记即可直接洗衣,那么无疑提高了你洗衣服的效率)。
        
    Nehalem处理器在此仅仅使用了一点小技巧:将循环流检测器放到译码之后进行。循环流检测器中存放的不再是译码之前的x86指令,而是28条微操作。由于程序包含的指令多为简单指令(每条指令被译码成一个微操作),因此新的循环流检测器往往可以扩展可以检测的循环的大小;更进一步的,检测到一个循环时,不仅被检测到的指令不需要分支预测和取指,甚至连译码过程也省略了,因此可以进一步提升对于循环处理的性能。

小贴士:

    程序是由很多指令组成的。在执行前,程序首先被加载到内存中。程序执行时,CPU首先要从内存或高速缓存中获取指令,这个过程被成为取指。在CPU取到指令后,需要判断这条指令是什么类型的指令,究竟要执行什么操作,这个过程被称为译码。在指令被译码后,需要为这条指令分配它计算所需要的资源,例如加法器等,这个过程被称为分派和发射;指令在计算单元中具体执行的过程被称为执行;执行结束后,需要将运行结果存回目标地址,这个过程被称为回写;指令结束运行,这个过程被称为提交。

    Nehalem处理器的另一个改进是分支预测器。在当今的处理器设计中,分支预测器的设计是非常重要的一部分。较高的分支预测正确率和更快的纠错可以使得处理器的性能获得提升。同时较高的分支预测正确率可以减少重新取指的次数,从而提升处理器的能耗比。

    对于当前一些特定的应用软件而言,目前的分支预测器工作的并不是很有效。例如包含大量无规律数据访问的数据库应用,分支预测器预测的正确率相当低下。(感兴趣的读者可以参考IBM PowerPC微处理器以及IBM eServer i系列服务器首席架构师Frank G.Soltis所著的《罗彻斯特城堡——IBM eServer i系列服务器技术揭秘》一书)。Nehalem首次采用了多级分支预测机制,加入了第二级分支目标缓冲器(BTB)。分支目标缓冲器用来对分支指令的目标地址进行预测。在分支预测方向正确的时候,分支目标缓冲器可以有效的提升处理器取指的性能。Nehalem第二级BTB的加入,可以增强处理器在处理分支指令的效率,提升处理器在数据库等商业应用方面的性能。

    另外,传统的处理器通过使用返回栈缓冲器(RSB)来预测函数返回时的地址。但由于程序中函数调用往往是嵌套的,递归调用的函数将会导致RSB会溢出;并且在投机执行时,RSB也可能因为分支预测错误而产生错误的返回地址。Nehalem对RSB进行重命名,最大限度的消除了栈溢出问题以及预测错误对函数返回时的影响。

小贴士:

    分支预测器是在分支指令没有得出执行结果前,处理器对分支的方向(究竟是选择哪条路线继续执行)和目标地址(新的执行从哪里开始)进行猜测的过程。在分支预测后,处理器将按照分支预测器的预测方案从一级高速缓存中取出某一段指令继续执行,而不是等待分支指令执行结束再取出正确的指令流。由于当前的处理器大多是超标量流水线结构,因此流水线中一般都有几十条指令在同时运行。如果其中一条分支指令的预测产生错误,处理器将不得不清空流水线中分支指令后的所有指令,并且从正确的位置重新取指、译码、执行。这样即会导致处理器的效率严重降低。由于程序中分支指令往往较多(研究表明一般占全部指令的15%~25%),因此分支预测的正确率对处理器的性能有着至关重要的影响。

Core i7终极全面测试
Nahalem执行引擎

    在分析完前端流水线后,我们再继续看一下Nehalem的执行引擎。Nehalem的执行引擎与之前的Penryn有着明显的不同。首先Nehalem采用了2个寄存器分配表,这是因为Nehalem支持SMT,需要为每个线程在执行时所用到的寄存器分别进行重命名,以免两者发生冲突。其次重排序缓冲器从96表项增加到了128表项、保留站从32表项增加到了36表项,MOB对于Load操作支持的深度从32个增加到48个,对于Store操作支持的深度从20个增加到32个。这同样是因为SMT的原因。由于最多可以有两个线程在处理器中运行,那么它们之间不可避免的需要争抢资源。增加一些部件的数量,可以有效的减少线程之间的资源冲突,提升处理器在执行多线程任务时的表现。

上一页 1 2 3 4 5 ...29 下一页
频道热词:AMD  散热器  intel  
视觉焦点
CPU评测热点
排行 文章标题
TOP10周热门CPU排行榜
  • 热门
  • 新品
查看完整榜单>>