1、深入浅出多核心处理器技术全面解析 Intel Core 微架构牛子敏,033143杨博,033153陈庆,033154摘要:多核处理器技术已经逐渐成为处理器发展的趋势。本文首先阐述了 Intel 采用多核处理器作为发展方向的原因,介绍了多核处理器的概念及特点,并以 Intel Core 微架构为例,详细介绍了该系列处理器的技术特点和性能。本文最后还对多核处理器的前景进行了展望。关键词:多核处理器,Intel,Core 微架构一、 引 言由于近几年来,由于 PC 应用越来越复杂,需要越来越强大的 CPU 处理能力。而 CPU 性能提高是通过提高 CPU 主频和前端总线频率,以及扩大缓存来实现。提
2、高主频对 PC 散热的设计是很大的挑战,同时会增加成本,单核心处理器的发展已经达到一个极限。为了解决这些问题,人们提出了多核技术的概念。多核技术不但可以提高性能,而且很好地解决了功耗的问题,成为未来处理器的发展方向。由于 Intel 原本寄以厚望、号称频率将提升至 10GHz 的 NetBurst 微架构屡遭重创,如采用 90nm 制造工艺的 Prescott 遭遇功耗过高、散热困难的问题,原定推出的 4GHz 的 Pentium 4 580 被无限期推迟,而后继产品也被取消。NetBurst 微架构遭遇无法解决的功耗问题,发展受阻。与此同时,竞争对手 AMD 的 K8 处理器在性能和功耗两方
3、面都表现良好,正在桌面和服务器平台上侵占原本属于 Intel 的市场,势头迅猛。这也迫使 Intel 只能选择重新研发兼具高性能与低功耗的微架构。因此 Intel 选择了使用多核心架构的 Core 微架构作为其下一代产品。因此本文着重讨论了 Intel Core 微架构各方面的技术细节,这对未来处理器的发展是具有重大意义的。二、 Intel 为何转向 Multi-Core 的开发?其实在 Intel 之前,HP,IBM 已经有多核处理器开发出来,例如苹果之前用的 IBM POWER4处理器,只不过没有应用到桌面系统而已。此次 Intel 调整方向主要应该有如下三个原因。第一,双核心技术的引入是
4、提高处理器性能的另一个行之有效的方法。因为处理器实际性能是处理器在每个时钟周期内所能处理的指令数的总量,因此增加一个内核,处理器每个时钟周期内可执行的指令数将增加一倍。在双核处理系统中,所有的任务和线程都能够使用系统中的所有资源。操作系统会安排每个处理器使用资源的顺序和使用时间,任务或者线程会在两个物理内核中并行处理。而在单个物理内核中,任务和线程在本质上还是串行处理的。因此在同等级别中双核处理器的工作效率要远远高于单核处理器。第二,引入双核心的架构还可以全面增加处理器的功能,这也是一个很重要的因素。有这么一个事实:双处理器架构的引入和微软下一代 Vista 操作系统将在很大程度上促进虚拟技术
5、的发展。AMD 和英特尔都坚信虚拟技术将成为下一代电脑系统的一个主要特征,而且是重要特征。第三,引入双核心架构的一个重要原因是随着单核集成度越来越大,所需要的核心电压也随之增长,而 CPU 功耗是和电压成立方比的,因此将导致 CPU 功耗会大幅度增长,散热也会成为一个很难解决的问题。综上诸个因素,双核心架构都是很有利的,这也就难怪突变方向朝双核架构大力发展。三、 对 Intel Core 微架构技术细节的介绍2.1 先进的 65nm 制程1965 年,Intel 公司的创建者 Gordon Moore 提出了一个众所周知的理论“摩尔定律”:认为集成电路密度大约每两年翻一番。在过去 40 年的时
6、间里面,摩尔定律不但印证了集成电路技术的发展,而且也印证了计算机技术的发展。Intel 公司在 2005 年开始采用65nm 的生产工艺,在其最新推出的双核处理器中使用的就是这种最新的生产工艺。如今的 65nm 的工艺与之前 Intel 使用的 90nm 工艺相比,Intel 的 65nm 工艺沿用了90nm 工艺和以往使用的很多成熟技术,比如 300mm 直径的晶圆(Wafer Size)、硅化镍栅极、1.2nm 二氧化硅栅极电介质、低介电碳掺杂氧化物(Low-K CDO)、铜连接工艺等。除此以外,65nm 工艺还拥有一些新特性:将从 90nm 工艺开始使用的应变硅技术升级到第二代,使得晶体
7、管的效率更高;此外,8 层金属传导层堆叠比 90nm 工艺的 7 层增加了一层,接触栅极节距也减小到 220nm,使得晶体管密度进一步加大;采用更新的光刻技术,以便制造出 35nm宽的栅极。Intel 的处理器都是由 CMOS(互补金属氧化物半导体)组成的,CMOS 包括 N 型和 P 型两种晶体管,由源极、栅极和漏极组成,在栅极和其他两级之间有一层栅极(绝缘)电介质。在NMOS 中,载流子是带负电荷的电子,当 NMOS 的栅极电压高的时候,电流处于“开”的状态,电压低的时候处于“关”的状态。而 PMOS 的载流子是带有正电荷的空穴,开关状态与 NMOS正好相反。但是随着制造工艺的进步,晶体管
8、的体积变得越来越小,某些问题也随之而来。在130nm 及以前工艺的时候,由二氧化硅制成的栅极电介质的厚度足以阻挡电子的通过,由于漏电带来的损耗功率非常小。但当制造工艺发展到 90nm 工艺的时候,栅极电介质的厚度减少到了 1.2nm,仅仅是 5 个原子层的厚度,由于隧道效应,电子可以从其中穿过,带来的后果就是漏电量和发热量的增加。源极与漏极之间的硅层也越来越薄,在晶体管处于“关”状态的时候产生了严重的阈下泄漏。这两种泄漏电流给晶体管增加了沉重的负担。此外,源极也在向硅基板泄漏电流。根据 Intel 官方网站报道的一些相关研究,如果没有任何技术措施,65nm 工艺 CPU 漏电功率将达到 100
9、W150W,而 45nm 工艺的 CPU 仅仅阈下泄漏功率就将达到100W,总发热量足以使 CPU 在开机数秒钟之内烧毁。针对这一问题,Intel 公司提出了如下解决方案:为了提高晶体管的工作效率,降低动态能耗,Intel 在 90nm 工艺中引入了单轴应变硅技术。其基本的思想就是减小源极与漏极之间的电阻,使得工作电流(Ion)更大,以提高晶体管的响应能力。应变硅技术在栅极氧化物层下面使用了一层极薄的单晶硅,并对其预施加张力或者压力,改变原有的晶格结构。对于 NMOS 来说,载流子是电子,使用高张力的氮化硅陶瓷薄膜帽,对硅晶格施加张力,加大硅原子的距离,可以让电子更方便地通过,提高 Ion;对
10、 PMOS 而言,载流子是空穴,使用选择性硅锗源极/漏极,可以施加压力提高空穴密度,从而加大 Ion。65nm 工艺依然沿用了 90nm 工艺的基本原理,但将应变硅技术提升为第二代,进一步提高了工作电流(Ion)和漏电电流(Ioff)之比,与 90nm 工艺相比,使得晶体管的工作电流提升了 15%,漏电电流降低了 4 倍。随着工艺的改进,晶体管的栅电容也有了进一步的下降。65nm 工艺的栅极氧化物二氧化硅层的尺寸没有变化,仍然维持着 1.2nm 的厚度,但栅极长度减少为 35nm,这使得栅极电容下降了大约 20%,加上工作电流的提高,带来的好处是使晶体管的切换频率提高了 1.4倍。在 65nm
11、 工艺制程的 SRAM 中,Intel 还引入了休眠晶体管模式来降低能耗,这一技术也将被引进 65nm 工艺制程的处理器核心中,减少缓存的发热量。在 SRAM 缓存子块上连接一个NMOS 休眠晶体管,使其在空闲时进入休眠状态,可以大幅度降低 SRAM 和 ALU(算术逻辑单元)的电流泄漏。与 90nm 工艺中采用的体偏置技术相比,它的性能大约是后者的 1100 倍。除此之外,堆叠效应也能够对降低能耗有一定的贡献。多重供应电压技术也是 65nm 工艺降低能耗的手段之一,它可以有效降低运行功率(Active Power)。通过这些技术,65nm 工艺处理器的发热量将会有不小的降低。2.2 14 级
12、指令执行管线和四组指令编码器随着当今技术的不断发展,新型体系结构设计需要考虑两方面的要素:一是合理的增加计算机系统中硬件功能的比例,使体系结构对操作系统,高级语言甚至应用软件提供更多,更好的支持;二是通过多种途径提高计算机体系结构中的并行性等级,使得凡是能并行计算和处理得问题都能并行计算和处理,使这种体系结构和组成能对算法提供更多,更好得支持。而提高并行性有 3 种有效的途径,一是时间重叠,二是资源重复,三是资源共享。时间重叠就是要使计算机能够流水的处理数据和指令,而流水线是一把双刃剑,使用不好的话,未伤人先伤己。Intel 最新发布的多核处理器在架构变化中,Core 核心第一个变化就是处理器
13、流水线缩短了-仅采用 14 级指令执行管线设计。此前,Northwood 和 Willamette 核心的流水线为 20 级,相对于当时的 PIII 或者 Athlon XP 的 10 级左右的流水线来说,增长了几乎一倍。到现在市场上采用 Proscott 核心的 PD 和 Celeron 流水线为 31 级。众所周知,流水线越长,频率提升潜力越大,但是一旦分支预测失败或者缓存不中的话,所耽误的延迟时间越长。如果一旦发生分支预测失败或者缓存不中的情况,Prescott 核心就会有 39 个周期的延迟。这要比其他的架构延迟时间多得多。因此,参照现在的 Pentium M 和 Athlon 64
14、架构,Core 新架构将采用 14 级流水线,可以在原来 Pentium 4 的基础上提升执行效率,不过想要在短期之内看到突破 4GHz 频率的CPU 变成了一个不可能实现梦。除了执行管线有所精简外, Core 多核处理器架构另一特色莫过于内建四组指令编码器,可在一个频率周期(clock cycle)内,同时编码四个 x86 指令。自从 AMD 失败的 K5 之后,有超过十年的时间,x86 的世界从没出现过四组指令编码器的设计。因 x86 的指令长度、格式与寻址模式都相当的紊乱,导致 x86 指令编码器是非常难作的东西,甚至连 Intel 先前的NetBurst 微处理器架构,就通过导入 Tr
15、ace Cache 存放编码后的微指令,企图替代高性能复数指令编码器,但改进并不是很明显。因此在 Core 微处理器架构上,Intel 最后采用了四组指令编码器设计。Core 多核微处理器延续先前 P6 与 Banias 微处理器架构的方式,由三组简单编码器(simple decoder)与一组复杂编码器(complex decoder)所组成的“4-1-1-1“结构,四组指令编码器中,仅有复杂编码器可处理最多由四个微指令所组成的复杂 x86 指令;如果不幸碰到非常复杂的指令,复杂编码器就必须呼叫微码循序器(Microcode Sequencer),以取得微指令序列。为了配合四组编码单元,Co
16、re 多核微处理器架构的指令取指单元在一个频率周期内,从第一阶指令缓存中,获取(fetch)六个 x86 指令至指令编码缓冲区(Instruction Queue),判定是否有符合宏指令融合的配对后,将最多五个 x86 指令,交派给四组指令编码器。四组指令编码器在每个频率周期中,发给(issue)保留站(Reservation Station)四个编码后的微指令,保留站再将存放的微指令交派(dispatch)给五个执行单元。执行指令数越多,意味着其处理能力越强,表现出来的性能越高。2.3 多核处理器高效内存管理技术在处理器速度发展越来越快的今天,计算机的瓶颈之一就是内存与处理器速度的不匹配,导
17、致内存存取延迟较长。Intel 为了弥补缺乏整合型内存控制器、导致内存存取延迟较长的缺憾,在内存系统上花了很大的功夫。在降低 Cache 延迟方面有一个关键技术,称之为:Memory Disambiguation 技术,即在存数和取数指令都乱序执行的情况下,保证取数指令都能取回它前面的最近一条对同一地址的存数指令所存的值。比如如果一条取数指令在一条存数指令之后且两条指令的地址相等,但取数指令先访问 Cache,也要保证取数指令取回该存数指令的值。在过去,一个接连在回存指令后的加载指令,因可能目标内存地址相同之故,为了确保内存数据一致性(Memory Consistency),必须等待该回存动作
18、结束后,才能执行该加载动作,避免因使用相同地址,导致内存数据一致性发生错误。为此,Core 多核微处理器架构提供内存数据相依性预测功能(Memory Disambiguation),可在处理器将数据回存内存的同时,预测后继的加载指令是否采用相同的内存地址,如果不是就可立即执行加载动作,毋需等待该回存指令,这可大幅改善非循序执行(Out-Of-Order Execution)核心的效率,以及缩短存取内存的延迟。又如果一条取数指令在一条存数指令之前且两条指令的地址相等,但存数指令先访问Cache,也要保证取数指令取回原来 Cache 中的值,而不是存数指令新存的值。这是有风险的。因为你刚刚读的数据
19、可能会在 CPU 内部的处理过程中发生变化,从而出现错误。但是Intel 称,这个系统非常聪明,可以得到不会发生变化的数据。Core 多核微处理器架构每个核心分别内建一组指令及二组数据预先撷取器,而共享的L2 缓存控制器内建两组、可动态分配至不同的核心的数据预先撷取器,可根据应用程序数据的行为,进行指令与数据的预先撷取动作,让所需要的内存地址数据,尽量存放在缓存之中,减少存取内存的次数。2.4 Smart Cache在 Intel 的 Core 微架构中,在对性能的各种提升方面,一个重要突破就是对二级缓存的设计改进。主要包括两方面:一,缓存的共享设计;二,节能机制。Intel 没有给各自的核心
20、设置独立的二级缓存而是让两个核心共享一个 2MB 二级缓存。当一个核心空闲时,另一个核心可以完全的访问所有 2MB 缓存。但大部分时间下不是这种情况,那智能的动态分配就显得很重要。共享缓存相对独立缓存的一个重要好处就是它降低了缓存的一致性复杂度。如果多核拥有各自的二级缓存,那么它很类似于计算机体系结构中的集中式多处理器架构,各个处理器之间缓存的一致性就是通过相当复杂的监听技术来实现的,而这必然得付出额外的开销,对性能有影响,多核心间的缓存一致性也是相似的。所以这种共享设计对双核心来说还是很有优势的。另一个重要好处就是 Intel 通过采用动态缓存分配技术对两个核心进行智能的分配缓存使得两个核心
21、协作,可以增大缓存利用率又减少缓存的命中失效情况发生。这种方法直接通过共享来达到两个核心的通信和数据共享,而不需要外部前端总线的参与进而改善了性能。Intel 的 smart cache 技术还增强了数据预取技术,在缓存请求还未发生时可以猜测性的把数据预取到二级缓存。此外,数据缓存单元带(Data Cache Unit Streamer)可以更早的唤起一级缓存以增益二级缓存的预取性能。Smart cache 的另外一个特点就是它的节能机制。Intel 的 smart cache 可以根据需要或者在非活动期将其内容刷回到系统主存。当一旦数据被保存到主存,缓存槽(cache ways)就会关闭。由
22、于二级缓存数据完整性的要求,于是决定了供给处理器进行深度睡眠(Deeper sleep)的最小电压极限。因此当数据存回主存时,Intel 的 Core Duo 双核处理器会转换到另一种称为增强型深度睡眠(Enhanced Deeper Sleep)的新型电源管理状态。在这种状态下,处理器会降低电压,使电压低于之前的深度睡眠最小电压极限,从而达到节能的目的。据研究可知,功率和电压是成平方比的,所以降低电压可以有效的降低功率。2.5 Power coordinationIntel 开发双核处理器的一个重要的原因就是原来的单处理器随着集成度的不断提高,主频的不断加快,功耗突飞猛进。Proscott
23、核心失败最大的一个原因就是功耗过高,因此Intel 在新一代 Core 内核架构中在功耗控制方面下了相当的功夫,引入了在 Pentium M、Yonah 移动处理器上应用的诸多节能技术 Core 微处理器架构的电源管理机制基本上改良自 Pentium M 与 Yonah 的设计,处理器内各功能单元并非随时保持启动状态,可根据预测机制,仅启动需要的功能单元,这点与 Pentium M/Yonah 相同,从而降低功耗。Smart cache 技术中也引入了节能技术,上面已经详述过。同时 Core 架构中引入了独具特色的Split Buses(分离式总线)设计。在传统的 x86 处理器内的总线,往往
24、仅为了应付特殊的需求而加长宽度,例如 ALU 单元写回 128 位数据,但大多数的情况都不需要这么宽,导致浪费电力在这些额外的总线线路上。Core 微处理器架构导入分离式总线(Split Buses),仅有遇到特殊状况时,才会启动全部的总线宽度,平时只启用一半的宽度以节省电力。2.6 分支预测在性能与能耗的平衡决策中,Intel 最终在 Core 的 BP 分支预测单元(Branch Predictor)上投入了大量的晶体管。 作为连接内存和 CPU 的重要环节,在 BP 分支预测上投入宝贵的晶体管资源是十分值得的。相对于预测错误后让 CPU 浪费时间和电耗来等待再次预测,一次准确的预测不仅仅
25、节约了处理时间、提高了性能,也同样降低了 CPU 的功耗。 Core 的三重分支预测单元实际上与 Pentium M 的预测单元是一样的,在 Core 的分支预测核心中存在一个双模态预测器和一个球型预测器,这些预测器记录下过去的执行历史并随时通知内核前端的 ROB 和 RS,ROB 和 RS 从 BTB 分支目标缓冲器(Branch Target Buffer)中快速取回所需要的数据地址,常规预测如通知一个分支在循环中仅在奇次迭代发生, 而不在偶次迭代中发生等, 这些在动态执行(P6 系列)处理器上的静态预测技术还有有着长远的发展空间。 Core 的分支预测单元拥有新的预测器- 循环回路预测(
26、Loop Detector)与间接分支预测(Indirect Branch Predictor) 。 循环回路预测 分支历史表(Branch History Tables)不能够记录下足够详细的循环回路历史来准确预测下次的运算,所以每次循环回路的运行都浪费了大量的亢余时间。 循环回路预测(Loop Detector)则可以记录下每个循环回路结束前的所有的详细分支地址,当下一次同样的循环回路程序需要运算时,内核前端的 ROB 和 RS 就可以以 100%的准确度来快速完成任务,Core 构架拥有一个专门的运算法则来进行这种循环回路预测。 间接分支预测 间接分支预测(Indirect Branch
27、 Predictor)在运用时并不是立即分支,而是从寄存器中装载需要的预测目标,它实际上是一个首选目标地址的历史记录表。在 ROB 和 RS 需要间接分支的时候它就可以提供帮助,ROB 和 RS 就可以快速提取到适用的结果,这与 P6 构架用可预测的条件分支替换间接分支来改善性能是相反的。2.7 宏指令融合所谓宏融合即针对译码工作前的 X86 指令,可以在预解码阶段将相似类型的 X86 指令进行融合操作,然后将其送入单译码器中产生一条微指令操作。这项操作的对于 X86 指令的针对性很强,并不是所有的 X86 都可以进行,比如像 compare 和 test 指令就可以和分支指令相融合译码,只会
28、产生一条微指令操作。在 Core 的四个译码器单元中,每一个单元都有一周期完成一次宏融合到产生微指令的能力,但是总体存在每周期产生一条微操作的总限制。增加微指令融合不但要在预译码部分和译码部分的流水线增加新的硬件设计,同时也要对后端的 ALU 和分支执行单元进行修改。这些新增加的硬件部分负担会被宏融合带来节省后端硬件开销弥补,因为宏融合在同样的 X86 指令输入数量下产生更少的微操作指令,最终完成同等工作需要更少的后端硬件开销,从 Core 核心整体来看就是获得每条 X86 指令最佳的功耗效率,这就是 Intel 为何努力尽可能的让译码单元获得 X86 指令和处理器执行的微操作指令的 1:1
29、译码产生率的原因。当然,如果说宏融合可以在更少的 ROB 以及 RS 后端硬件资源下完成等同甚至更多的工作,那么也意味着该技术的应用为同等或者更宽更强大的后端硬件提供了足够的前端译码能力,总体获得了更大的执行带宽。一个单 ALU 可以执行一条实际上是两条 X86 指令融合后的微操作,就好比两条指令同时并行运行,即相同的执行单元数量的前提下获得更强的处理能力。四、 小 结摩尔定律会是永恒的真理吗?多年以来,处理器似乎都在走一条比较顺畅的道路,从当年的以 MHz 计发展到现在的以 GHz 计,但是鉴于功耗、制程、散热等多方面的原因,频率再有突破性的提高已是非常困难了,厂商们开始探讨一条多核心之路。 在使用 Windows 的时候,就算你的处理器能提高一倍的频率,你的操作系统也能提高一倍的工作效率吗?太多复杂程序的同时处理使得频率的提升意义显得不是那么重要。从 HT 超线程开始,到现在的热门双核心处理器,似乎就是多核心之路的开始。双核处理器可以有两个处理器单元,也就是相当于两台处理器同时运作,可以大大减轻系统的负担,Intel 未来预计 Core 微架构的核心将会提升到 10 个,以适应更加严酷的考验!而同时