|
我们首先来解释一下什么是内存混淆问题:采用乱序执行方式的处理器在面对多个load和store操作的时候也可以进行乱序执行,但是首先需要保证程序进行load和store操作的正确性。直观上这个问题与缓存一致性问题类似。下图是一个内存混淆现象的例子:第2个store操作与第9个load操作针对的是同样的内存地址,因此第9个操作不能移动到第2个操作之前执行,否则程序会得到错误的结果。但是很明显,第9个操作可以移动到第8个操作之前执行,因为它们针对的是不同的内存地址。然后,因为不知道第5个操作针对的内存地址,所以也就不能确定第9个操作是否可以移动到第5个操作之前执行。
 图12 内存混淆问题示例
判断2个内存操作(通常是一个load操作与一个store操作)是否针对同一个内存地址的过程,也就是判断是否会发生内存混淆现象的过程,称为内存相关性预测(Memory Disambiguation)。如果这2个操作针对不同的内存地址,那么它们就可以乱序执行。看似很简单,但是问题在于:为了对1个load操作的相关性进行预测,存储单元需要把它与缓冲区内所有的store操作进行比较,代价十分昂贵。
在古老的 P6 微架构中,这个问题是这样解决的:把store操作分成2步,首先计算内存地址,然后再真正存储数据。这样,store操作的内存地址就可以提前获得,从而可以比较容易的检测内存混淆问题。P6 微架构的内存乱序缓冲区(Memory Reorder Buffer,简称MOB)采用如下的规则:如果在乱序执行窗口中存在与某load操作内存地址相同的store操作,则该load操作不能提前执行;如果在乱序执行窗口中存在内存地址未知的store操作,则任何load操作不能提前执行;某store操作不能提前到另外一个store操作之前执行。
这样的规则虽然可以保证程序进行load和store操作的正确性,但是也丧失了一些本来可以提高执行效率的机会:比如当某load操作之前存在某内存地址未知的store操作的时候,很可能内存地址是不同的,因此该load操作本来可以提前执行的。研究表明,实际发生内存混淆现象的概率非常小。所以,一个更加合理的做法是:假设所有的load操作与store操作之间都不发生内存混淆现象,而当错误发生的时候再进行恢复。这样做显然会有更高的效率。
Core 微架构正是采用了这种更加高效的做法:P6 微架构和 NetBurst 微架构中采用的保守的规则被丢弃了,load 操作可以在内存地址未知的store操作之前执行。这样的话,当有错误发生的时候,处理器流水线将不得不暂停运转。然而就像前面讲到的,这种情况并不多见。为了最大限度的避免这种情况的出现,Core 微架构加入了一个动态的内存相关性预测器,根据历史信息来预测load操作的移动是否可行。据有关人员透露,该预测器的预测正确率达到90%以上。
下图的例子说明了Core 微架构的这种工作方式在多数情况下会带来的性能提升:P6 微架构需要9个时钟周期才能执行完的操作,Core 微架构只需要5个时钟周期。
 图13 Core 微架构的内存相关性预测
为了使读者真正认识到内存相关性预测和Core 微架构在内存相关性预测方面的改进的重要意义,我们举另外一组数据来说明。实际的X86程序中,一般有1/6左右的操作是store操作,1/3左右的操作是load操作。Core 微架构的乱序执行窗口能容纳96个操作,假如没有内存解疑技术,那么,占据乱序执行窗口一半左右的40~60个操作将只能顺序执行,这肯定将造成极大的资源浪费。这个时候,效率良好的内存相关性预测功能将带来本质上的性能提升。
我们已经看到,Core 微架构的每一个子单元都比以前的架构有很大的提升。除此以外,Core 微架构还引入了几项新技术,我们再一起来了解一下。
Core 微架构终于加入了对EM64T指令集的支持,弥补了 Yonah 微架构的最大缺憾。随着 Windows Vista 的到来以及 Intel、AMD 全面更换到64bit处理器,64bit计算的普及只是时间问题。
Core 微架构支持新的指令集——SSE4指令集。Intel 原本打算把该指令集用在采用 NetBurst 微架构的 Tejas 核心上。但是在由于功耗问题取消 Tejas 之后,该指令集出现在了 Core 微架构上。SSE4 指令集会带来一些性能上的提高,但是可能不会像 SSE2 指令集那样带来巨大的提升,因为 SSE4 指令集其中的大部分指令用于某些特殊的目的。
Core 微架构拥有增强的电源管理功能,并且2个核心可以分别进行管理。各功能单元以及内部总线在电路设计方面也考虑了节电的问题。与 Yonah 微架构一样,Core 微架构中的大部分功能单元在不使用的时候都可以进入睡眠状态以降低耗电,例如微码存储器等。另外,Core 微架构内部的多条总线为了提高总的传输带宽,加大了宽度,但是多数情况下并不需要如此大的传输宽度,于是 Intel 的工程师让这些总线平时只开放一般的宽度,甚至在没有信号传输的时候也可以进入睡眠状态。这种芯片可以部分关闭的能力早已是Core 微架构整个设计思想的一部分,使得我们只需要为我们使用的那部分电路“付款”。
Core 微架构开始支持 Virtualization Technology,即 Intel的硬件虚拟化技术。这项技术为处理器虚拟化提供了芯片级支持,使得在一个处理器上同时运行多个操作系统成为可能。还有从 Dothan 时代就开始加入的硬件防病毒功能,在采用 Core 微架构的处理器上已经成为必不可少的功能。
Core 微架构内建“数字温度传感器”(Digital Thermal Sensor),其作用当然是侦测处理器的温度,保证处理器的安全,与以前的温度二极管的作用一样。此外,还有传言声称,数字温度传感器如果认为当前的温度并不高,那么有可能会提高处理器的频率以获得更高的性能。是不是与某些显卡和主板的“OverDrive”功能很类似?如果这项技术真的实施,那么也可能只是用于 Conroe 和 Woodcrest,而不会用于 Merom,因为用提高功耗的方法来获得更高的性能并不符合移动平台处理器的设计思想。
Core 微架构针对笔记本电脑提供第2代功率状态报告功能(Power Status Indicator 2,简称PSI-2),可以通知系统现在的耗电状况,从而作为动态调整电压的依据,让系统可以更有效率的节电。
Core 微架构可以通过平台环境控制接口(Platform Environment Control Interface,简称PECI)把处理器的实际温度报告给系统,从而作为调整散热风扇运作模式的依据,对控制系统散热、噪音等方面很有帮助。
[上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [下一页]
|