深入探秘Pentium4(续) Hardsky 2001年 19期 编者按:我们在16期“今日硬件”中就缓存带宽和缓存延迟深入地对Pentium4做了基准测试和分析,本期我们就Pentium4的分支预测、整型指令和浮点指令运算能力继续深入研究。   #1●分支预测   为了测试CPU的分支预测能力,我们采用“Queens”作为基准测试工具。“Queens”是一个经典的益智游戏:你必须在一个n×n的棋盘上放置n个“皇后(queen)”,而且要保证任何一个“皇后”不能把其他的“皇后”吃掉,这实际上是一种布棋策略,通过复杂的逻辑推算来寻求解决方案,其中包含了很多分支预测编码。   “Queens”的循环其实只是一个很枯燥的由简单指令构成的指令序列:加载→比较→选择;加载→比较→选择;再加载→再比较→再选择……每一个指令都要依赖于先前的指令。从流程图看来,就形成了一个巨大的树形分支运算,包含了多重循环,这也提供了一个巨大的待处理数据流。   浅灰色柱形数据(见^19030101a^1)为计算在32×32的棋盘上放置32个“皇后”所需的时间,深灰色数据为折算到标准化的1GHz时的结果。通过对PentiumⅢ 800MHz和PentiumⅢ 1GHz的测试结果比较,我们可以看出CPU的分支预测的能力和主频有关。而同频的Pentium4和Athlon比较,前者所需的时间要略长一点。   #1●整型指令与浮点指令   从运行指令的效率来看,内存延迟对于整型指令非常重要,而内存总带宽对于浮点指令编码更加重要。   为了更好地理解这一点,可以举一个简单的例子:执行最常用的整数运算需要一两个周期,而对于常用的浮点运算需要3至7个周期。当今主流的CPU通过流水线(pipelining),每个周期可以计算一个FADD指令(浮点加法运算),计算一个乘法指令则需要2个周期,而Pentium4计算一个双精度浮点类型的除法至少需要38个时钟周期。幸运的是,很多指令能够并行执行。   目前主流CPU大都具有乱序执行、深度浮点指令运算和大容量缓冲区,使得高速缓存延迟对浮点运算性能影响不大。在一个浮点运算指令等待数据时,其他的浮点运算指令可以从缓冲区获得数据,而不需要等待那些花费时间较长的指令结束运算。Pentium4和Itanium均通过L2级高速缓存(延迟为6个周期)加载浮点运算指令,只要有数据,FPU(浮点运算单元)便可以很快地进行运算。因此,浮点指令优化编码较之整型指令编码更加依赖于内存带宽。   让我们看看采用堆排列基准作测试的结果吧(见^19030101d^2):   具有双通道数据处理能力的Athlon 1.2GHz DDR系统在浮点运算方面有很大的优势(测试数据>16KB),这说明了内存带宽对于浮点运算具有重要的作用。   #1●浮点运算性能   在前几年,计算机的浮点运算性能对工程师和科学家而言很重要,而现在却大不一样了,浮点运算性能对于很多3D游戏也显得至关重要了,因此从某种角度讲,浮点运算性能被看作是一个衡量CPU性能的关键指标。   我们采用Flops(一段用C语言编写的代码)来作为浮点运算性能的基准测试工具,它包含了我们频繁使用的指令,如FADD(浮点加法)、FSUB(浮点减法)和FMUL(浮点乘法),通过混合运算指令来测试系统的浮点运算性能。它是专门用来测试强大的FPU功能的,因为有70%以上的指令是针对浮点运算的。表1(^19030101b^)是各种CPU对于单个指令计算能力的比较,数据单位为时钟周期。   从上表可以看出,Pentium4在遇到大量的FDIV(双精度浮点除法)运算时会出现问题,仅仅进行一个双精度的除法时就需要38个时钟周期,即如果混合指令中包含一个FADD和FDIV时,计算FADD需要等待37个时钟周期。   参照Flops的混合运算指令模式(表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的时间。   但实际上,除了在工程设计和科学研究中需要运行大量的FDIV外,普通的运用中FDIV占的比例是很少的,当然出现只有FADD和FMUL的情况也很少。所以,从统计学的观点来讲,第二栏所得出的结果可能更贴近现实的情况。   值得注意的是:目前很多基准测试工具并没有对像Pentium4和Athlon这样的CPU作特别的优化编译,更别说应用程序(软件)了,所以让我们有这样的感觉:和PentiumⅢ比较,Pentium4没有明显的优势。但我们相信,Pentium4和Athlon逐渐进入主流市场,肯定会出现各种针对性的优化指令和应用软件。