服务器 频道

2008年度评测报告:深入Nehalem微架构

The Core Execution Engine: Out-of-Order Execution
处理器核心执行引擎:乱序执行

   由于ROB里面保存的指令数目是如此之大(128条目),因此一些人认为它的作用是用来从中挑选出不相关的指令来进入执行单元,这多少是受到一些文档中的Out-of-Order Window乱序窗口这个词的影响(后面会看到对ROB会和MOB一起被计入乱序窗口资源中)。

  ROB确实具有RS的一部分相似的作用,不过,ROB里面的指令是调度器通过RAT发往RS的同时发往ROB的,也就是说,在“乱序”之前,ROB的指令就已经确定了。指令并不是在ROB当中乱序挑选的(这在RS当中进行),ROB担当的是流水线的最终阶段:一个指令的Retire回退单元;以及担当中间计算结果的缓冲区。

RS(Reservation Station,中继站):等待源数据到来以进行OOOE乱序执行(没有数据的指令将在RS等待)
ROB(ReOrder Buffer,重排序缓冲区):等待结果到达以进行Retire指令回退(没有结果的指令将在ROB等待)

 
The Core Execution Engine: Out-of-Order Execution

  Nehalem的128条目的ROB担当中间计算结果的缓冲区,它保存着猜测执行的指令及其数据(猜测执行也是在Pentium Pro开始引入的,Pentium Pro真是一个划时代的产品),猜测执行允许预先执行方向未定的分支指令,Nehalem的分支预测成功率没有被提及(只是含糊地说“业内最高”)。在大部分情况下,猜测执行工作良好——分支猜对了,因此其在ROB里产生的结果被标志为已结束,可以立即地被后继指令使用而不需要进行L1 Data Cache的Load操作(这也是ROB的另一个重要作用,典型的x86应用中Load操作是如此频繁,达到了几乎占1/3的地步,因此ROB作用巨大)。在剩下的不幸的情况下,分支未能按照如期的情况进行,这时猜测的分支指令段将被清除,相应指令们的流水线阶段清空,对应的寄存器状态也就全都无效了,这种无效的寄存器状态不会也不能出现在RRF里面。


Pentium Pro架构,可见在后继型号在OOOE方面变化的基本只是一些数字变大了

  重命名技术并不是没有代价的,在获得前面所说的众多的优点之后,它令指令在发射的时候需要扫描额外的地方来寻找到正确的寄存器状态,不过总体来说这种代价是非常值得的。RAT可以在每一个时钟周期重命名4个uops的寄存器,经过重命名的指令在读取到正确的操作数并发射到统一的RS(Reservation Station,中继站,Intel文档翻译为保留站点)上。RS中继站保存了所有等待执行的指令。

  和Core 2相比,Nehalem的ROB大小和RS大小都得到了提升,ROB重排序缓冲区从96条目提升到128条目(鼻祖Pentium Pro具有40条),RS中继站从32提升到36(Pentium Pro为20),它们都在两个线程(超线程中的线程)内共享,不过采用了不同的策略:ROB是采用了静态的分区方法,而RS则采用了动态共享,因为有时候会有一条线程内的指令因等待数据而停滞,这时另一个线程就可以获得更多的RS资源。停滞的指令不会发往RS,但是仍然会占用ROB条目。由于ROB是静态分区,因此在开启HTT的情况下,每一个线程只能分到64条,不算多,在一些极少数的应用上,我们应该可以观察到一些应用开启HTT后会速度降低,尽管可能非常微小。

0
相关文章