性能之王还是不进反退,Prescott全
要分辨两栋建筑物的异同,没有内部构造图是不行的,对于处理器来说也是如此。所以,首先我们还是来看两张Prescott核心架构与Northwood的架构对比图吧:
Prescott与Northwood的架构对比图(点击放大)
我们可以看到,上图中最明显的变化有三处:
◎ 指令追踪缓存(Trace Cache,作用类似于以前的一级指令缓存)所用的分支目标缓存(Trace Cache BTB,主要用于动态分支预测),条目数(Entries)由512条增加到2000条;
◎ 一级数据缓存容量倍增,由原来的8KB增加到了16KB。缓存联合路数也随之倍增,由原来的4路联合(4ways)增加到8路联合(8ways);
◎ 二级缓存容量也由原来的512KB增加到了1MB,缓存联合路数则保持不变。
考虑到读者对于缓存已经比较熟悉,因此我们先就涉及到缓存变化的后两个项目进行分析。而对于大家还不太熟悉的BTB,我们将放到后面再作说明。
前面我们已经提到,Prescott的频率可高达5GHz左右,而归根结底,处理器需要内存为其输送数据。处理器在如此高的频率下工作,即使是尚未走向主流的下一代DDRⅡ内存,在没有辅助措施的条件下也会略显吃力,更不必说目前的DDR内存了。
内存系统跟不上处理器的脚步,是长久以来存在于系统设计中的一个问题。对于这个问题,AMD公司通过在K8处理器中内置内存控制器,并增加二级缓存容量到1MB来解决。而同期推出的P4至尊版则没有变动其它机构,仅追加了2MB三级缓存。至于Prescott,则主要采用了以下三个方面的措施进行解决。
● 最容易理解的措施——增加一级、二级缓存的容量。我们已经从对比图中看到了。不过需要提醒大家注意的是,虽然增大缓存的容量有利于缓解慢速的内存所带来的影响,但在某种条件下,也可能随之提高缓存的延迟,在Prescott中就出现了这种现象。以下就是我们使用ScienceMark 2.0测试缓存延迟时所得到的结果。
| 一级缓存 | 二级缓存 | ||
延迟 周期 | 纳秒 | 延迟 周期 | 纳秒数 | |
P4 3.2E | 4 | 1.25 | 26 | 8.11 |
P4 3.2 | 2 | 0.62 | 19 | 5.92 |
表中可见,扩容后,Prescott的一级缓存、二级缓存延迟分别增加到Northwood的2倍和1.4倍左右,扩容的副作用较为明显。
● 第二条措施——对P4原有的预取技术作出改进。
考虑到读者可能对预取技术还比较陌生,因此我们首先对预取技术作简要的说明。没有使用预取机构的处理器,只能在需要对数据进行处理时查找缓存,如果缓存中没有所需数据,就必须停止工作,等待内存提供此数据。而使用预取机构后,则可以在数据需要处理之前就完成查询缓存,向内存中取数据,并将数据预取到缓存中工作,隐藏了内存的延迟,如下图:
预取原理图(点击放大)
P4中具备软件预取和硬件预取两种预取方式。所谓软件预取,就是在程序的代码中由编程人员人为地添加预取指令。而硬件预取则由处理器全权管理预取工作,不需要编程人员手工插入预取指令。Prescott中对两种预取都做出了一些改进。
软件预取方面,对过去的P4来说预取的对象只能是普通数据。这意味着软件预取指令只能为二级缓存提供预取服务。而在Prescott中则扩大了软件预取的对象,不仅可以为二级缓存提供预取服务,而且还能够为另一种重要的缓存——二级缓存D-TLB提供预取服务(有关TLB的说明请点击这里了解)。
此外,在旧的P4中,软件预取指令必须由速度慢的MicrcodeROM负责解码。而现在则可由速度较快的硬件解码器解码,存放在发布速度快得多的Trace Cache中(MicrocodeROM和硬件解码器的区别请点击这里了解)。也算提高预取性能的一种辅助措施吧。
硬件预取方面,Prescott的硬件预取机构在预取时机、预取对象的选择上也变得更加智能化,不过Intel对于硬件预取方面的改变并没有提供更多的细节说明。
● 最后由于Prescott中超线程技术的存在,对弥补内存延迟的技术提出了更高的要求,为此,Intel进一步增加了部分内部缓冲器的容量,以满足开启超线程时的需要。<