第二章 Intel 64 及 IA-32架构
2.1 Intel 64 和 IA-32架构简史
下面的几个小节总结并概述了从IA-32到Intel 64架构的主要主要技术革命:从8086处理器到最新的Intel Core 2 Duo,Core 2 Quad以及Intel至强处理器5300和7300系列。为1978年发行的处理器创造的目标代码(object code,obj文件)依然能够在最新的Intel 64 及 IA-32架构处理器上运行。
2.1.1 16位处理器和分段(1978)
在IA-32架构家族出现之前是16位处理器的时代–8086和8088;8086具有16位的寄存器和16位外部数据总线,20位的寻址能力和1MB的地址空间;8088和8086类似,但8088只有8位的外部数据总线;
8086/8088位IA-32架构引入了分段技术。使用分段技术时,16位段寄存器包含一个指向最高64KB内存段的指针。使用4个段寄存器,8086/8088处理器可以最多寻址256KB空间,而不需要在段之间切换。20位地址(可以由一个段寄存器和一个附加的16位指针组成)提供1MB范围的寻址能力。
2.1.2 Intel 286处理器(1982)
Intel 286处理器位IA-32架构引入了保护模式(protected mode),保护模式使用段寄存器作为一个描述符表的选择器/指针。描述符提供24位的寻址能力(16MB),支持段交换位基础的虚拟内存管理和大量的保护机制。这些机制包括:
2.1.3 Intel 386处理器(1985)
Intel 386处理器是IA-32架构家族的第一款32位处理器。Intel 386处理器引入了32位寄存器,用于保存操作数和寻址。Intel 386处理器的每一个32位寄存器的低16位保留了早期处理器16位寄存器的特性,支持向后兼容。该处理器同时提供了虚拟8086模式,允许以更高的性能执行为8086/8088处理器设计的程序。
另外,Intel 386处理器支持以下特性:
2.1.4 Intel 486处理器(1989)
Intel 486处理器通过扩展Intel 386处理器的指令解码和执行单元为5个流水线阶段提供了更好的并行执行能力。每个阶段可以和其他阶段平行执行,最高5条指令在不同的阶段执行。
另外,该处理器添加了以下特性:
2.1.5 Intel奔腾处理器(1993)
Intel奔腾处理器添加了第二条执行流水线以实现超标量性能(两条流水线,u和v,可以在一个时钟周期内执行两条指令)。片上一级缓存分离成为了指令缓存和数据缓存(I Cache和D Cache)。数据缓存使用MESI协议来支持更高效率的写回(之前的处理器使用的写通)。增加了分支预测(使用片上分支表)来提升循环结构的性能。
另外,该处理器增加了以下特性:
奔腾处理器家族后续版本引入了MMX技术(multi media extesion)。Intel MMX技术使用单指令,多数据执行模型来对打包在一个64位寄存器整形数据执行并行计算。
2.1.6 P6处理器家族(1995-1999)
P6处理器基于超标量微处理器体系结构。P6家族微架构的一个设计目标在于显著的高于奔腾处理器的性能,而使用相同的0.6微米,四层金属BICMOS制造工艺。该处理器家族包括以下处理器:
2.1.7 Intel奔腾4处理器家族(2000-2006)
Intel奔腾4处理器家族基于Intel NetBurst微架构;Intel奔腾4处理器引入了SSE2扩展。Intel奔腾4处理器3.4GHz,支持超线程技术,引入了SSE3扩展。Intel奔腾4处理器至尊版(Intel奔腾4处理器 5xx和6xx序列)引入了64位架构,支持超线程技术。Intel奔腾4处理器672和662引入了Intel虚拟技术。
2.1.8 Intel至强处理器(2001-2007)
Intel至强处理器(除双核Intel至强处理器LV,Intel至强处理器5100系列外)基于Intel NetBurst微架构。该系列IA-32(Intel 64)处理器设计用于多处理器服务系统和高性能工作站。Intel至强处理器MP引入对超线程技术的支持。64位Intel至强处理器3.6GHz(800MHz系统总线)引入了Intel64位架构。Dual-Core Intel至强处理器引入了双核技术。Intel至强70xx系列处理器引入了Intel虚拟化技术(在一块磁盘不同分区运行不同的操作系统)。
Intel至强5100系列处理器引入了节能,高性能的Intel酷睿微架构。该处理器基于Intel64架构,包含了虚拟化技术,双核技术。Intel至强3000系列处理器同样基于Intel酷睿微架构。Intel至强5300系列处理器在一个封装中引入了四个处理器核心,同样基于酷睿微架构。
2.1.9 Intel奔腾M处理器(2003-2006)
Intel奔腾M处理器家族是高性能,低功耗的移动处理器家族,其增强的微架构基于先前的IA-32 Intel移动处理器。该系列产品旨在延长电池寿命,并与平台创新无缝集成,从而实现新的使用模式(如扩展移动性、超薄外形和集成无线网络)。
其扩展的微架构包括:
2.1.10 Intel奔腾处理器至尊版(2005)
Intel奔腾处理器至尊版引入了双核技术。该技术支持高级的硬件级多线程。该处理器基于Intel NetBurst微架构且支持SSE,SSE2,SSE3,超线程技术,并且是64位架构。
2.1.11 Intel酷睿双核及酷睿单核处理器(2006-2007)
Intel酷睿双核处理器提供高效的能源管理,可延长电池使用的低功耗的双核性能设计。该家族和单核Intel酷睿处理器在奔腾M处理器家族上提除了增强的微架构。
该增强的微架构包括:
双核至强处理器LV和Intel酷睿双核处理器基于相同的微架构,支持IA-32架构。
2.1.12 Intel至强处理器5100,5300系列和Intel酷睿二代处理器(2006)
Intel至强3000,3200,5100,5300和7300系列处理器,Intel奔腾双核处理器,Intel酷睿二代至尊版,Intel酷睿二代四核处理器,Intel酷睿二代双核处理器支持Intel64架构;都基于高性能,低功耗的65nm制程Intel酷睿微架构。Intel酷睿微架构包含下列革新特性:
Intel至强5300系列,Intel酷睿二代至尊处理器QX6800系列,Intel酷睿二代四核处理器支持Intel四核技术
2.1.13 Intel至强处理器5200,5400,7400系列和Intel酷睿二代处理器(2007)
Intel至强5200,5400和7400系列处理器,Intel酷睿2代四核Q9000系列处理器,Intel酷睿2代双核处理器E8000系列支持Intel 64架构;都基于增强的使用45nm制程的Intel酷睿微架构。增强的Intel酷睿微架构支持以下更优的特性:
Intel至强5400系列处理器,Intel酷睿二代四核处理器Q9000系列支持Intel四核技术;Intel至强处理器7400系列提供最高六核心和最高16MB的三级缓存
2.1.14 Intel凌动(atom)处理器(2008)
Intel凌动处理器第一代产品使用45nm制程。其架构为Intel Atom微架构,该架构为超低功耗设备优化。Intel凌动微架构特色在于两条顺序流水线,这两条流水线极大的降低了功耗,提升了电池使用时间,支持超小规格(ultra-small form factor,更小规格的电路,更大的集成度)。最初的Intel凌动处理器和后续处理器包括D2000,N2000,E2000,Z2000,C1000系列,支持下列特性:
2.1.15 Intel凌动处理器家族基于silvermont微架构(2013)
Intel凌动C2xxx,E3xxx,S1xxxseries基于Silvermont微架构。基于Silvermont微架构的处理器支持最高到SSE4.2,AESNI和PCLMULQDQ的指令集扩展;
2.1.16 Intel酷睿i7处理器(2008)
Intel酷睿i7 900系列处理器支持Intel64架构;基于Nehalem微架构,使用45nm制程。Intel酷睿i7处理器和Intel至强5500系列处理器支持一下特性:
2.1.17 Intel至强7500系列处理器(2010)
Intel至强7500和6500系列处理器基于Nehalem微架构,使用45nm微制程。支持2.1.16节描述的相同特性,加上下述特性:
2.1.18 2010 Intel酷睿处理器家族
2010 Intel酷睿处理器家族涵盖酷睿i7,i5,i3处理器,基于westmere微架构,32nm制程。包含以下特性:
2.1.19 Intel之前处理器5600系列(2010)
Intel之前处理器5600系列基于Westmere微架构,32nm制程。支持2.1.16节列出的相同特性,以及下列特性:
2.1.20 第二代Intel酷睿处理器(2011)
第二代Intel酷睿处理器涵盖Intel i7,i5和i3处理器,基于Sandy Bridge微架构,32nm制程。支持下列特性:
Intel至强处理器E3-1200同样基于Sandy Bridge微架构;
Intel至强处理器E5-2400/1400基于Sandy Bridge-EP微架构;
Intel至强处理器E5-4600/2600/1600基于Sandy Bridge-EP微架构,支持多路(单主板多个CPU,NUMA架构);
2.1.21 第三代Intel酷睿处理器(2012)
第三代Intel酷睿处理器涵盖Intel 酷睿i7,i5和i3处理器,基于Ivy Bridge微架构。Intel至强处理器E7-8800/4800/2800 v2和Intel至强处理器1200 v2同样基于Ivy Bridge微架构
Intel至强处理器E5-4600/1400 v2基于Ivy Bridge-EP微架构
Intel至强处理器E5-4600/1600基于Ivy Bridge-EP微架构,支持多路。
2.1.22 第四代Intel酷睿处理器(2013)
第四代Intel酷睿处理器涵盖Intel酷睿i7,i5和i3处理器,基于Haswell微架构。Intel至强处理器E3-1200 v3同样基于Haswell微架构。
2.2 具体发展信息
2.2.1 P6家族微架构
奔腾Pro处理器引入了一个新的微架构,通常被称为P6处理器微架构。P6微架构后来在片上L2 Cache进行了优化,称为高级传输缓存(Advanced Transfer Cache)。
该微架构是一个三路超标量体系结构的,流水线的架构。三路超标量体系结构意味着使用并行处理器技术,该处理器可以在单个时钟周期中解码,派发,完全执行三条指令。为了处理这个数量级的指令流,P6处理器使用分离的,12级超流水线,支持乱序指令执行。下图展示了带有高级传输缓存(L2 Cache)的P6处理器微架构流水线的概念视图。
为了保证给指令执行流水线提供平稳的指令和数据流支持,P6处理器微架构使用了两级缓存结构。L1 Cache包含一个8KB的I Cache和一个8KB的D Cache,两者都和流水线紧密连接。L2 Cache支持256KB,512KB或者1MB的静态随机存取器,L2 Cache通过一条全速的64位缓存总线和处理器核心连接。
P6处理器微架构的核心在于成为动态执行的乱序执行机制。动态执行包含三个数据处理概念:
2.2.2 Intel NetBurst微架构
Intel NetBurst微架构支持:
快速的执行引擎
以处理器频率两倍运行的算术逻辑单元ALU
基本的整形操作能在1/2个时钟周期内完成派发
超流水线技术
深度流水,为PC和服务器启用业界领先的时钟频率
频率余量和可扩展性以在未来保持业界领先地位
高级的动态执行 - 深度的,乱序,预测执行引擎
至多126条指令处于执行状态
流水线中至多48个加载(load)和24个存储(store)
增强的分支预测能力
减少更深度流水中错误预测的代价
高级的分支预测算法
4K的分支目标阵列
新的缓存子系统
L1 Cache
高级的执行跟踪缓存(Execution Trace Cache)存储已解码的指令
执行跟踪缓存从主执行循环中移除解码延迟
执行跟踪缓存将程序执行流路径合并于单行
低延迟的D Cache
L2 Cache
全速,8路片上 L2 高级传输缓存(Advance Transfer Cache)
带宽和性能随着处理器频率提升
高性能的,四倍并发的总线接口连接到Intel NetBurst微架构系统总线
支持四倍并发,可扩展的总线时钟以实现至高4倍有效速度
一秒8.5GB的带宽
超标量体系结构以支持平行
重命名的扩展寄存器以避免寄存器命名空间限制
64B的缓存行大小
下图为NetBurst微架构概观,该微架构流水线由三部分组成(1)前端流水,(2)乱序执行核心,(3)retirement单元
2.2.2.1 前端流水
前端以程序顺序向乱序执行核心提供指令流,执行下列功能:
该流水为解决高速,流水设计的微处理器中的一般问题设计。其中两个问题造成了主要的延迟:
流水线中的跟踪缓存的操作解决了上述问题。解码引擎不断的取指和解码,并构建微指令序列称为跟踪(trace)。在任何时间,多个跟踪(预取的分支)存储在跟踪缓存中。跟踪缓存搜索活动分支之后的指令。如果该指令也是预取分支中的第一条指令,那么从内存层次中提取和解码指令的过程就会停止,而预取分支就会成为新的指令来源。
跟踪缓存和解码引擎使用相互配合的分支预测硬件,利用分支目标缓冲区(Branch target buffer, BTBs)对分支目标的线性地址进行预测并尽快获取分支目标。
2.2.2.2 乱序执行核心
乱序执行核心乱序执行执行指令的能力是支持并行的关键因素。该特性使得处理器可以重排指令,因此如果一个微指令延迟,其他的微指令可以继续处理。处理器使用了几个缓冲区来平滑微指令流。
其核心理念在于促进并行执行能力。在上述条件下,处理器在单个时钟周期内可以派发至多6条微指令(这超过了跟踪缓存和retirement 微指令的带宽)。大多数的流水线每个时钟周期可以执行一个新的微指令,因此对每个流水线来说多条指令可以同时执行。许多算术逻辑单元(ALU)指令每个周期可以启动两次;许多浮点指令可以每两个周期执行一次。
2.2.2.3 Retirement单元
Retirement单元从乱序执行核心中接收已经执行完成的微指令的结果,并处理结果,以便按原有的程序顺序更新体系结构状态。
当一条微指令执行完成并写入结果时,该微指令退休(retire)。每个时钟周期内,至多可以退休三条微指令。处理器中的ROB(reorder buffer)缓存已经完成的微指令,顺序的更新体系结构状态,并处理器异常的顺序。Retirement单元同时跟踪分支,并向BTB(Branch target buffer)更新分支目标信息。BTB清除不再需要的预取微指令序列。
2.2.3 Intel酷睿微架构
Intel酷睿微架构引入了以下特性:
Intel Core 2 Extreme,Intel Core 2 Duo processors和Intel Xeon processor 5100系列在Intel酷睿微架构上实现了双核,每个核心子系统功能示意如下:
2.2.3.1 前端
Intel酷睿微架构前端为Intel动态执行引擎提供了以下增强:
2.2.3.2 执行核心
Intel酷睿微架构执行核心采用超标量和乱序执行技术,以提升IPC(instructions executed per cycle),采用了以下特性以提高执行效率和吞吐:
2.2.4 Intel凌动微架构
Intel凌动微架构通过以下技术最大化单线程和多线程工作的处理性能:
2.2.5 Nehalem微架构
Nehalem微架构为Intel酷睿i7处理器许多特性提供了基础,其建立在45nm Intel酷睿微架构的成功,提供了以下特性增强:
2.2.6 Sandy Bridge微架构
Sandy Bridge微架构基于Intel酷睿微架构和Nehalem微架构的成功,提供以下功能特性:
更多的AVX资料,参见5.13节,Intel Advanced Vector Extensions和第十四章 Programming with AVX,FMA和AVX2
2.2.7 SIMD指令
从奔腾Ⅱ和带有MMX技术的奔腾处理器家族开始,Intel 64和IA-32架构已经引入了6个扩展指令集以支持SIMD操作。这些扩展包括MMX技术,SSE扩展,SSE2扩展,SSE3扩展,补充SIMD扩展3,SSE4。这些扩展都提供了一组指令在整数向量或浮点向量(packed interger/packed floating-point)实现SIMD操作。
SIMD整型操作使用64bit MMX或128bit XMM寄存器,SIMD浮点操作使用128bit XMM寄存器。下图总结了不同的SIMD扩展操作的不同数据类型和这些数据类型如何在MMX和XMM寄存器打包存放。
Intel MMX技术在奔腾Ⅱ和带有MMX技术的奔腾处理器家族中引入。MMX指令在MMX寄存器中打包的字节,字,双字整型上执行SIMD操作。这些指令对整型数组和整形流数据操作的应用相当有用。
SSE扩展在奔腾三代处理器中引入。SSE指令操作XMM寄存器中打包的单精度浮点型或者MMX寄存器中打包的整形数据。一些SSE指令提供了状态管理,cache控制,内存排序操作。其他SSE指令针对操作数组的应用。
SSE2扩展和超线程技术一同在奔腾四代处理器中引入,SSE3提供了13指令加速SSE,SSE2和x87-FP数学计算能力。SSSE3在Intel志强5100系列处理器和酷睿2处理器中引入,提供了32条指令加速SIMD整形操作。
SSE4扩展提供了54条指令,其中47条称为SSE4.1,SSE4.1在Intel志强5400系列和Intel酷睿2 QX9650处理器中引入。其余的7条SSE4扩展指令称为SSE4.2
AESNI和PCLMULQDQ引入了7条新的指令,其中6条是基于AES加密/解密标准的算法加速原语,称为AESNI,PCLMULQDQ指令用于加速通用块加密,可以对两个64为位宽的二进制数执行无进位乘法。
Intel 64架构允许四代128-bit SIMD扩展访问至多16个XMM寄存器,IA-32提供8个XMM寄存器。
Intel高级向量扩展(AVX)为前面的SIMD指令集扩展提供了全面的架构增强,AVX引入了下列架构增强:
2.2.8 Intel超线程技术
Intel超线程技术是为了提升IA-32架构处理器在多线程操作系统和应用或者单线程多任务应用下的性能而开发的。该技术使得单个物理处理器使用共享的执行资源可以并发运行两个甚至更多独立的指令流(IBM POWER架构单个核心上可以并发的跑8个线程)。
Intel超线程技术是IA32架构处理器多线程能力的一种,和使用分离的物理封装的多线程不同,其使用一个处理器核心中的共享资源提供硬件级的多线程能力。结构上,一个支持Intel超线程技术的IA32处理器包含两个或者更多的逻辑处理器,每个都有自己的IA32架构状态。每个逻辑处理器有全套的IA32数据寄存器,段寄存器,控制寄存器,debug寄存器和大部分的MSRs组成,同时每个逻辑处理器都有自己的可编程中断控制器。
上图是支持Intel超线程的处理器和传统的双处理器系统的对比。和传统的使用两个或多个独立其物理IA32处理器的多处理器系统不同,支持超线程技术的IA32处理器中的逻辑处理器共享物理处理器的核心资源,包括执行引擎,系统总线接口。上电并初始化后,每个逻辑处理器可以被独立的引导去执行一个特定线程,中断或者halted。
Intel超线程技术通过单个物理核心上提供两个或者多个逻辑处理器,充分的利用了现代操作系统和高性能应用中的进程级和线程级并行,而显著的提升了处理器性能。该技术允许一个物理处理器上同时的执行两个或多个线程,每个逻辑处理器使用该物理处理器中的资源执行来自一个应用程序线程的指令流。该物理处理器核心使用乱序的指令调度一最大化的在每个周期内使用执行单元,而并发的执行两个线程。
2.2.8.1 一些实现说明
所有的Intel超线程技术配置需要:
更多关于超线程技术的资料:https://www.intel.com/content/www/us/en/homepage.html
在固件层(BIOS):初始化逻辑处理器的基本程序和传统的多处理器平台相同,在Multiprocessor Specification, Version 1.4中描述的多处理器系统上电和初始化的机制同样在支持超线程的处理器中使用。
为双处理器或多处理器平台设计的操作系统可能使用CPUID来确定硬件多线程功能是否存在,并确定其提供的逻辑处理器数量。现有的为双处理器或多处理器平台设计的操作系统可以在支持超线程技术的处理器上正确运行,但还是推荐进行一些代码修改以优化其性能(参见第七章 多处理器管理)
2.2.9 多核技术
多核技术是IA32架构系列处理器多线程能力的另一种。多核技术通过在一个封装中提供更多的处理器核心而增强处理器多线程能力。
Intel奔腾处理器Extreme版是第一个引入多核技术的处理器,该处理器同时支持多核和超线程技术,这意味着其最多可以提供四个逻辑处理器。双核志强处理器支持多核,超线程并支持多处理器平台。Intel奔腾D处理器同样支持多核技术,但不支持超线程技术,这意味着其最多提供两个逻辑处理器,每个逻辑处理器都独占其处理器核心的执行资源。
Intel酷睿2处理器,Intel志强3000系列,5100系列处理器和Intel酷睿双核处理器支持功耗优化的多核技术。这些处理器包括一个共享的二级缓存,二级缓存支持两个核心间高效率的数据共享而减少了对系统总线的争用。
2.2.10 Intel 64架构
Intel 64架构增大软件的线性寻址空间到64bit,并支持至多52bit的物理地址空间,同时还引入了一种新的操作模式(IA-32e mode)。IA-32e模式可以在两种子模式下执行:(1)兼容模式允许64为操作系统不加修改的运行大多数遗留的32位软件,(2)64位模式是的64为操作系统可以运行访问64bit地址空间的程序
64-bit模式下,应用程序可能访问:
Intel 64体系结构处理器支持现有的IA-32软件,因为它能够运行所有非64位的遗留软件IA-32体系结构支持的模式,大多数现有的IA-32应用程序也以兼容模式运行。
2.2.11 Intel虚拟化技术
Intel 64和IA-32架构的Intel虚拟化技术提供了一种虚拟化的扩展,称为虚拟机扩展(VMX)。一个支持VMX的Intel 64或IA-32平台可以像多个虚拟系统/虚拟机一样工作。每个虚拟机可以独立的运行操作系统和应用。
VMX还为用于管理虚拟机操作的新系统软件层(虚拟机监视器VMM)提供编程接口,参见 Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3C
Intel酷睿i7处理器为Intel虚拟化技术提供了以下增强:
2.3 Intel 64及IA-32处理器发展迭代
参见手册
2.4 建议从即将上市的产品中一处的指令集和功能
无
HLE还保留了编程接口,可以继续使用,但是实际使用的是HTM。