深入探秘Pentium4 Hardsky 2001年 16期 编者按:关注处理器市场的朋友可能察觉到了英特尔和AMD之间的价格大战已经进入了白热化的阶段,与此同时,这两位业界巨人公布了它们2001年第一季度的盈利报告。一时间,Pentium4和Athlon的竞争让我们目不暇接。近来,还有非官方的消息说,支持SDRAM(i845A)和DDR SDRAM(i845B)的Pentium4芯片组i845将在今年第三季度出现。看来英特尔想要用Pentium4来回击AMD的强大攻势,为了更好地认识Pentium4,我们特地刊发了一些关于Pentium4的基准测试报道。   前一段时间Pentium4在光线跟踪(ray-tracing)、渲染(rendering)、指令编译(compiling)和几款DirectX游戏测试方面遭受到了Athlon 1.1GHz和1.2GHz的打击。另一方面,Pentium4在Quake3和视频编码方面的性能却表现得相当出色。如果只是简单地认为Pentium4仅仅是为了极高的时钟频率而设计的,这种认识未免也太简单了。当我们进行了关于AMD和英特尔处理器的一些深度基准检测后,我们相信你也会和我们一样为我们的发现感到震惊。   为了更好地理解Pentium4的系统架构,我们会对每一种CPU的四种重要子系统作检验和基准检测:高速缓存子系统、算术逻辑单元、分支预测子系统和浮点单元。   #1缓存带宽(Cache Bandwidth)   英特尔为了使处理器获得出色的性能,设计了更短的延迟时间和最大的带宽。Pentium4的L1-Cache(一级缓存)的延迟时间为2个时钟周期,L2-Cache(二级缓存)的延迟时间为7个时钟周期,容量为256KB。后者所能提供的带宽让人难以置信:核心频率为1.5GHz时,不少于48GB/s。我们用Cachemem(一款专门针对缓存的基准测试软件)做出的测试结果是:Pentium4 1.5GHz的L1-Cache所提供的带宽仅比Athlon 1.2GHz的L1-Cache高出1个百分点。Cachemem证实了双通道的L1-Cache在某些情况下一个时钟周期内可以传输两块数据,从而使Athlon的L1-Cache平均性能表现得更好。所以,英特尔虽然能够增加整个L1-Cache传输数据的带宽,却不能获得Athlon的双通道L1-Cache的数据传输率。   注意,英特尔256位的L2-Cache相对于Athlon的L2-Cache是相当出众的。相同主频的PentiumⅢ和Athlon的L2-Cache比较,前者所提供的带宽高出32%,但同时,在同一时钟频率标准下,Pentium4并没有使PentiumⅢ相形见绌。英特尔声称PentiumⅢ每2个时钟周期将数据传输到内核,而Pentium4只需要1个周期。这显然和上面的结果相矛盾。   英特尔有关人士的解释是这样的:“从数学的角度上讲很简单,Cachemem用MMX指令集中的MOVQ指令能够使每个指令读取或写入8个字节的数据(64位MMX寄存器),对于Pentium4 1.5GHz的情况,1500MB×8即12000MB。而用SSE指令集(XMM寄存器),每个指令能读取或写入16个字节的数据,当Pentium4能达到每个时钟周期执行128位指令,即充满整个通道,那么这时的带宽将达到24GB/s!从理论上讲,对于更广的256位数据线,L1-Cache和L2-Cache之间将达到48GB/s的数据传输带宽,但前提是必须使用SSE-2指令集来完成数据的传输,否则不会得到理论上的峰值。首先,目前绝大多数应用程序调用的指令是通过32位和64位的数据块来传输数据的,即使大多数重要的循环或多或少需要巨大的L1-Cache时,Athlon也可以通过双通道L1-Cache提供和Pentium4相差无几的带宽。然而,Pentium4通过SSE-2的优化后,至少能提供2倍的带宽,这也说明了SSE-2对于Pentium4的重要性。   从对Pentium4的高速缓存子系统做的测试来看,我们发现SSE-2指令集的优化作用很重要,没有了它,Pentium4与Pentium Ⅲ的性能相比除了主频更高之外,不能发挥出优异的功能。   #1缓存延迟(Cache Latency)   当然,带宽只是影响整体性能的一个因素。更高的带宽允许CPU获得更高的执行效率,但为了使得整体性能平衡,数据选通延迟(access latency)必须尽可能短,以确保CPU不会“等”得太久。   在很多情况下,缓存延迟都较长。如Thunderbird(雷鸟)的独占L2-Cache延迟就是20个时钟周期。众所周知,独占的含义就是在L2-Cache中没有L1-Cache中的数据或指令。而当L1-Cache有数据溢出时,最早占用L1-Cache的数据会被新的数据替代,而这时由L1-Cache“驱逐”或被替换的缓存数据将写入L2-Cache。   为了确保整个过程能够平稳地进行,新的AMD Athlon处理器设计了一种牺牲性缓冲器(Victim Buffer)的方法来接纳从L1-Cache被“驱逐”出来的数据。这种缓冲器总共拥有8个64字节宽度的入口,即可以接收8个被“驱逐”的64字节L1-Cache数据。通常,牺牲性缓冲器并没有充满数据,所有从L1到L2的数据复制工作是以并行的方式进行着。这样便只会消耗带宽,而不会增加L2通道的延迟时间。Thunderbird的L2-Cache的延迟时间在大多情况下为11个时钟周期。只有当L1-Cache出现大量地连续地溢出情况,才会使延迟时间达到20个时钟周期。这时,牺牲性缓冲器会充满数据,而且在L2-Cache开始向L1-Cache和执行单元传输数据之前,必须从牺牲性缓冲器释放的信息应当首先被复制到L2-Cache。   在Cachemem的测试中,当数据阵列大小为4KB和8KB时的结果,符合英特尔Pentium4的技术规范。然而,依照Cachemem的结果,L2-Cache的延迟时间不少于18个时钟周期!如果你看过英特尔的Pentium4开发指南,在第18页上,你会发现L2-Cache的延迟为7个时钟周期……究竟哪个是对的?Cachemem还是英特尔?   两者都是对的,L2-Cache数据线带宽为128个字节,Cachemem报告中的延迟时间是指充满整个数据线时的结果。然而L2-Cache数据线有两个64字节的扇区(Sector),所以Cachemem报告中以填充两个扇区的延迟时间为准,而不是一个扇区。另一方面,英特尔是以“纯”L2-Cache延迟为准。因为L2-Cache处理的数据正好是由L1-Cache所溢出的部分,所以应该在7个周期上再加上L1-Cache的延迟时间2个周期,即9个周期,正好是Cachemem报告中的一半。不过,这意味着在Pentium4中L2-Cache的延迟时间和Pentium Ⅲ的严格的7个周期相比显得逊色了。   然而,在IDF上,英特尔的发言人指出,在桌面应用程序中,Pentium4缓存的平均速度是PentiumⅢ的1.8倍。通过Cachemem测试,很难相信Pentium4的高速缓存要比PentiumⅢ的好。英特尔用的不是时钟周期来作单位,而是纳秒。如Pentium4 1.5GHz的L2-Cache的延迟时间,即9个时钟周期等于6纳秒,而PentiumⅢ 1GHz的L2-Cache的延迟时间为7个时钟周期,即7纳秒。我们从表1(^16030101a^)计算出英特尔所明确指出的“高速缓存平均速度(average cache speed)”,3.13/1.8正好是1.8倍,正好与英特尔的说法相吻合。   另一方面,为了获得单位时钟周期的良好性能,从CPU核心计算的延迟时间的平均值应该尽可能的短。但是,从表2(^16030101b^)中可以看出,按时钟周期来计算的平均延迟仅有18%的提高。   为了更好地利用CPU,提高其工作效率,减少空闲时间,就必须缩减缓存延迟,才能提高CPU的整体性能。按时钟周期来计算缓存延迟的话,Pentium4对于Athlon并没有明显的优势。