Pentium 4综合点评

    前段时间系里面要买50台机器,号称要招标,于是有DELL、HP、COMPAQ、IBM送来测试的多台P4样机。借此机会对这几款机器进行了测试,并获得了测试数据。根据这些测试数据,下面简单分析一下P4的内部体系结构和应该注意的程序优化技术。

    在函数首地址对性能影响的测试中,可以明显看出P4对函数的首地址不太敏感,首地址对大多数函数的影响小于1%,基本上可以忽略不计,极少数函数在首地址变化时有20%的差异,也不算大,并且还有可能是测量误差。在PIII上小函数对首地址异常敏感(性能差异可达1倍)的情况得到了很大的改善,说明Trace Cache发挥了作用。这对程序员是个福音,因为因为函数首地址实在是个头痛的问题。

    在循环展开对性能的影响的测试中,P4也反映出对循环展开的不敏感。这应该是得益于其2倍速ALU。对循环附加开销,主要是加法指令和条件转移指令,这些都可以在2倍速ALU上完成,再由超标量体系与循环体并行执行,循环附加开销基本上可以忽略。所以,在循环展开过程中性能不会有显著提高,有时候甚至会下降。这对程序员来说也是个好消息,不必再考虑究竟要对循环进行多少次展开。

    在地址模式对性能的影响的测试中,反映出与原来预测完全不同的结果。由于Intel把原AGU的运算分解到ALU中进行,本以为会导致复杂的寻址模式会影响性能,但实际结果表明,在P4上不同的寻址模式之间的速度竟然没有明显区别。Intel如何做到这一点就不得而知了。不过要说明的是,写操作的性能在所有地址模式下都不能接近设计值,这不能不说是一个遗憾。当执行小块内存(小于L1容量)的复制操作时,这将极大地影响性能。

    对L1和L2容量的测试都没有说明值得说的,只是L1太小,很是不爽。

    对L1的性能的测试,说明L1的延迟由PIII的3周期减少为2周期,这是很好的,特别是内存操作频繁、计算简单的多媒体程序,2周期的L1可以降低关键路径上的延迟,对提高速度很有帮助。但写操作的速度大打折扣,比PIII要差了一大截,这实在难以理解。

    块大小的测试,P4的L1是64字节,与Intel文档符合。个人认为,P4如此小的L1,还用64字节的块,会显著影响实际程序中的L1命中率。另外L2的块是128字节。Intel在文档有2个说法,在CPUID指令的说明中,说其L2是64字节的块,而在P4优化手册上,却说是128字节块。在这里的测试说明,P4应该是128字节的块。

    相关路数的测试也没什么好说的,L1是4路,L2是8路,与Intel文档相符。

    L1写策略的测试也很正常,L1是写通,与Intel文档相符。

    L2写策略的测试则很令人迷惑。主要是各种操作命中L2时的速度差异太大。例如,R-H的值有2.5(Dell/i850,Dell/SDR,HP/SDR)、7(COMPAQ/DDR)、58(COMPAQ/SDR)、140(IBM/SDR)等等。理论上,L2读命中与芯片组和内存都没有关系,应该可以测到一个一致的值。这里可能的原因只能理解为测试函数有问题。但究竟有什么问题,实在是想不通。是不是P4的L2不是采用的LRU替换策略,而是随机替换或者什么的?

    L2带宽和延迟测试的结果是正常的,在所有的机器上给出的值都一样。P4的L2的带宽比PIII要高不少(同主频比较),应该是很不错的。但延迟达18周期,与Intel宣称的7周期有很大的出入。也许只有FPU读数据时延迟才是7周期(Intel宣称P4的FPU是从L2中取数据的,L1对FPU没有作用)?

    内存带宽测试中,同为SDR的几个机器还是稍有差异。最差的DELL是978MB/s,最好的IBM是1037MB/s,差异约6%,应该认为是“有差别”的,但还达不到“显著”的程度。不知道同一厂家的同一批机器中的个体差异是否有这么大?也许这是正常的“个体差异”。COMPAQ/DDR使用的是PC1600,速度自然要比PC133快一些。想不通的是都用DDR了,为何不用PC2100??DELL/i850是双通道的PC800,理论带宽为3200MB/s,但实际只达到了2864MB/s,仅及理论值的约89%,不知道是受什么影响了。内存延迟情况来说,SDR的都是150ns左右,说明测试还是比较准确的。这个值可能比PIII要大,因为P4一次读128字节,而PIII一次读32字节。COMPAQ/DDR的延迟为128ns,比SDR小,是很合理的。i850的双通道RDRAM虽然带宽大,但延迟也是最大的,167ns。在随机读取操作多的应用中,延迟比带宽更重要,所以RDRAM的长延迟肯定会对性能有影响。在很多测试中RDRAM不及DDR也是可以理解的。最后要说明的是,写操作的带宽是不正确的,因为P4的L2是“Sectored”(Intel语),这对读操作应该影响不大,但对写操作有很大影响。在测试函数中没有考虑这种情况,所以这里的测试值比实际值要大了很多。

    复制操作的测试,用DDR和SDR内存的机器都基本上是内存带宽的一半,达到了可以达到的最大值。而在i850上则比理论最大值差了很多,也许可以通过改变参数提高性能(测试函数中的参数是为PIII的32字节块设定的)。

    向显存复制的操作真是让人大跌眼镜。所有的机器显卡都号称AGP4X,但最快的复制速度在所有机器上都在150MB/s附近,仅比PCI总线速度略快而已,比我的440BX上的AGP2X的显卡都要慢很多了。不知道是i845/i850芯片组的问题,还是显卡的问题(这些机器的显卡全都不同,即使有问题,测试值也应该不同才对)。

    TLB的测试也有一些问题。TLB的项数是64,与Intel文档相符。但在相关路数测试中,根据测试结果分析,相关路数应该不大于2,而Intel的文档说其是全相关??不知道是Intel乱说,还是它用的不是LRU替换策略?如果我有Tom's Hardware那样的地位,就一定要向Intel讨个说法。不过Tom's Hardware似乎不关心这方面。

    在P4上可以比较movups/movaps/movdqu/movdqa这几条指令的效果,因为P4能够执行所有这几条指令。这里的比较都是在对齐的内存地址上进行的。从结果可以看出,在L1和L2中,对齐和非对齐的指令访问对齐的内存的速度是有差异的,而浮点和整数指令之间则没有什么差异。

    在显存带宽测试中,所有机器的显存速度都只达到了150MB/s左右,实在是难以理解,我的笔记本上的AGP2X显卡都可达到250MB/s。

    寄存器测试反映了P4内部执行单元的设置。由于P4有2个2倍速ALU,所以理论上每个周期可以执行4个简单整数操作,但其Trace Cache每个周期只能发送3个uOP,所以限制了其ALU的发挥。ALU上的寄存器传递接近12B/c,合3指令/周期,比PIII的2指令/周期快了不少。但MMX寄存器传递只接近8B/c,说明P4只有1个MMX单元,而PIII是2个。同样,SSE和SS2上的寄存器传递只接近16B/c,说明只有1个SSE/SSE2单元。从这些设置中,可以知道,P4在执行普通整数指令上应该比同主频PIII快很多,但执行MMX指令则会比同主频PIII慢至少一半,执行SSE指令的情况各有特色,不知道如何比较。所以,如果要买一个经常执行MMX指令的机器(比如某些定制的实时多媒体系统),一个高主频的Tulatin可能比P4还快不少。但执行SPECint这样的评测程序,可能P4会有极大的优势。

    乘10测试中,Add4R2的延迟是2周期,说明P4的ALU确实是真正的2倍速。这对简单运算为主的程序来说是极其有利的。但P4的移位和乘法部件实在是很弱,移位部件虽然每周期可执行一个移位操作,但延迟达4周期,与PIII的1周期相比,实在是太长了,而乘法运算的延迟更是达14周期,而且要4.6~6周期才能处理一个乘法指令,可以想象,在处理多维数组这样的数据结构的时候,慢速的乘法单元会对性能有极大影响。这将抵销2倍速ALU所带来的性能提升。所以,对小常数乘法这样的运算,要尽量优化成加/减法。另外,为了效率的考虑,乘2和左移1位一定要改成自加一次的形式,这在PIII和P4上都是最快的(事实上左移4位左右的运算在P4上都应该用加法实现)。LEA2R2和LEA1R1的延迟相同,应该是调度执行方面不能在后半周期开始一个移位指令的原因。

    BTB深度测试也有一些令人迷惑。DELL/SDR上测得为9,DELL/i850上测得为10,而其余机器上测得为11。分析中间数据,都没有问题。但理论上这是不该有区别的。这里的区别难以作出合理的解释。不过即使11是正确值,离Intel宣称的可以准确预测循环次数为16次的内循环的说法仍有不小的距离。或者,P4对前向条件分支(相对偏移大于0)的处理不如后向条件分支(相对偏移小于0)效率高?希望Intel能够给个说法。

    返回地址栈测试没什么好说的,P4有16级返回地址栈,与PIII相同。16级应该是够用了。

    综合以上的分析,P4从体系结构来说,性能并不怎么样(规一化到相同的主频),在本来很强的部分,却有相关的部件拖了后腿,其余的部件又很弱。应该说P4的设计没有把硬件资源合理地分配到系统的各部分,某些部件占用了过多的资源,导致其余部件速度跟不上,从而影响了系统整体性能。不过P4可以做到较高的主频,而且可以与高速内存接口,也是其优点。如果Intel对P4内部部件进行优化,则P4应该是有很好表现的。


Leading Cloud Surveillance, Recording and Storage service; IP camera live viewing

Leading Enterprise Cloud IT Service; cloud file server, FTP Hosting, Online Storage, Backup and Sharing

Powered by FirstCloudIT.com, a division of DriveHQ, the leading Cloud IT and Cloud Surveillance Service provider since 2003.