深入探秘Pentium4(续)

Author: Hardsky Date: 2001年 19期

?牐牨嗾甙矗何颐窃?16期“今日硬件”中就缓存带宽和缓存延迟深入地对Pentium4做了基准测试和分析,本期我们就Pentium4的分支预测、整型指令和浮点指令运算能力继续深入研究。
  #1?牐牎穹种гげ?
  ?牐犖瞬馐訡PU的分支预测能力,我们采用“Queens”作为基准测试工具。“Queens”是一个经典的益智游戏:你必须在一个n×n的棋盘上放置n个“皇后(queen)”,而且要保证任何一个“皇后”不能把其他的“皇后”吃掉,这实际上是一种布棋策略,通过复杂的逻辑推算来寻求解决方案,其中包含了很多分支预测编码。
  ?牐牎癚ueens”的循环其实只是一个很枯燥的由简单指令构成的指令序列:加载→比较→选择;加载→比较→选择;再加载→再比较→再选择……每一个指令都要依赖于先前的指令。从流程图看来,就形成了一个巨大的树形分支运算,包含了多重循环,这也提供了一个巨大的待处理数据流。
  ?牐犌郴疑问荩?见^19030101a^1)为计算在32×32的棋盘上放置32个“皇后”所需的时间,深灰色数据为折算到标准化的1GHz时的结果。通过对PentiumⅢ 800MHz和PentiumⅢ 1GHz的测试结果比较,我们可以看出CPU的分支预测的能力和主频有关。而同频的Pentium4和Athlon比较,前者所需的时间要略长一点。
  #1?牐牎裾椭噶钣敫〉阒噶?
  ?牐牬釉诵兄噶畹男?率来看,内存延迟对于整型指令非常重要,而内存总带宽对于浮点指令编码更加重要。
  ?牐犖烁玫乩斫庹庖坏悖梢跃僖桓黾虻サ睦樱褐葱凶畛S玫恼怂阈枰涣礁鲋芷冢杂诔S玫母〉阍怂阈枰?3至7个周期。当今主流的CPU通过流水线(pipelining),每个周期可以计算一个FADD指令(浮点加法运算),计算一个乘法指令则需要2个周期,而Pentium4计算一个双精度浮点类型的除法至少需要38个时钟周期。幸运的是,很多指令能够并行执行。
  ?牐犇壳爸髁鰿PU大都具有乱序执行、深度浮点指令运算和大容量缓冲区,使得高速缓存延迟对浮点运算性能影响不大。在一个浮点运算指令等待数据时,其他的浮点运算指令可以从缓冲区获得数据,而不需要等待那些花费时间较长的指令结束运算。Pentium4和Itanium均通过L2级高速缓存(延迟为6个周期)加载浮点运算指令,只要有数据,FPU(浮点运算单元)便可以很快地进行运算。因此,浮点指令优化编码较之整型指令编码更加依赖于内存带宽。
  ?牐犎梦颐强纯床捎枚雅帕谢甲鞑馐缘慕峁桑?见^19030101d^2):
  ?牐牼哂兴ǖ朗荽?理能力的Athlon 1.2GHz DDR系统在浮点运算方面有很大的优势(测试数据>16KB),这说明了内存带宽对于浮点运算具有重要的作用。
  #1?牐牎窀〉阍怂阈阅?
  ?牐犜谇凹改辏扑慊母〉阍怂阈阅芏怨こ淌?和科学家而言很重要,而现在却大不一样了,浮点运算性能对于很多3D游戏也显得至关重要了,因此从某种角度讲,浮点运算性能被看作是一个衡量CPU性能的关键指标。
  ?牐犖颐遣捎肍lops(一段用C语言编写的代码)来作为浮点运算性能的基准测试工具,它包含了我们频繁使用的指令,如FADD(浮点加法)、FSUB(浮点减法)和FMUL(浮点乘法),通过混合运算指令来测试系统的浮点运算性能。它是专门用来测试强大的FPU功能的,因为有70%以上的指令是针对浮点运算的。表1(^19030101b^)是各种CPU对于单个指令计算能力的比较,数据单位为时钟周期。
  ?牐牬由媳砜梢钥闯觯琍entium4在遇到大量的FDIV(双精度浮点除法)运算时会出现问题,仅仅进行一个双精度的除法时就需要38个时钟周期,即如果混合指令中包含一个FADD和FDIV时,计算FADD需要等待37个时钟周期。
  ?牐牪握誇lops的混合运算指令模式(表2)(^19030101c^),有以下几种情况(百分比表示各基本指令在混合指令中的比例):
  ?牐犖颐亲邢缚匆幌虏馐缘慕峁?见^19030101e^3):Pentium4 1.5GHz和PentiumⅢ 1GHz比较,除在模式1和5中,前者在混合指令中并没有什么优势。究其原因可能是Pentium4 1.5GHz在其他几种混合模式中,由于在进行FDIV运算时没有足够的FADD指令而使得整体的计算时间加长。
  ?牐犖颐窃儆帽?3(^19030101f^)来仔细地分析一下上述结果。第一个例子比较简单,Athlon 能够充分发挥双通道数据运算的能力,即每个时钟周期可以计算一个FADD和一个FMUL指令,而Pentium4却需要两个周期,所以得到第一栏的结果。Pentium4具有一个独立单元来运算FDIV,所以后面两栏只计算运行FDIV所需的时间就可以了,而Athlon和PentiumⅢ的情况和FMUL计算单元相关,即它们运行FDIV指令是通过FMUL间接计算的,所以还必须加上运行FMUL的时间。
  ?牐牭导噬希嗽诠こ躺杓坪涂蒲а芯恐行枰诵写罅康腇DIV外,普通的运用中FDIV占的比例是很少的,当然出现只有FADD和FMUL的情况也很少。所以,从统计学的观点来讲,第二栏所得出的结果可能更贴近现实的情况。
  ?牐犞档米⒁獾氖牵耗壳昂芏嗷疾馐怨ぞ卟⒚挥卸韵馪entium4和Athlon这样的CPU作特别的优化编译,更别说应用程序(软件)了,所以让我们有这样的感觉:和PentiumⅢ比较,Pentium4没有明显的优势。但我们相信,Pentium4和Athlon逐渐进入主流市场,肯定会出现各种针对性的优化指令和应用软件。