arch/pipeline: history

This commit is contained in:
gatieme
2021-11-14 19:44:29 +08:00
parent 6e141c3fde
commit 31154b1f8c
7 changed files with 112 additions and 13 deletions
+112 -13
View File
@@ -76,29 +76,102 @@ blogexcerpt: 虚拟化 & KVM 子系统
# 4 35 年来发生了什么改变
-------
## 4.1 微架构发展
-------
  相较于现今的标准,最初的处理器设计显得太过简单。最初的 8086 处理器的执行过程可以简述为从当前指令指针取得指令,通过译码,执行最后退出,然后继续从指令指针指向的下一条指令处取得指令。
  新的处理器增加了新的功能,有些增加了新的指令,有些增加了新的寄存器。我将主要关注和本文主题有关系的改变,这些改变影响了 CPU 指令执行的流程。其他的一些变化比如虚拟内存或者并行处理虽然都很有意义而且有趣,但是并不在本文主题的范围内。
| 时间线 | 里程碑 | 描述 |
|:-----:|:-----:|:---:|
| 1982 年 | 指令缓存在 1982 年被加入到处理器中。 | 通过指令缓存,处理器可以一次性从内存读取更多指令并放在指令缓存中,而不用每条指令都从内存中取。指令缓存仅有几个字节大小,只能容纳数条指令,但是因为消除了之后每次取指往返内存和处理器的时间,极大的提高的效率。 |
| 1985 年 | 386 处理器引入了数据缓存,而且扩展了指令缓存的设计。 | 数据访存请求通过一次性读取更多的数据放在数据缓存中,从而提升了性能。而且,数据缓存和指令缓存都从几个字节扩大到几千字节。 |
| 1989 年 | 推出的 i486 处理器引入了五级流水线。 | 这时,在 CPU 中不再仅运行一条指令,每一级流水线在同一时刻都运行着不同的指令。这个设计使得 i486 比同频率的 386 处理器性能提升了不止一倍。五级流水线中的取指阶段将指令从指令缓存中取出(i486 中的指令缓存为 8KB);第二级为译码阶段,将取出的指令翻译为具体的功能操作;第三级为转址阶段,用来将内存地址和偏移进行转换;第四级为执行阶段,指令在该阶段真正执行运算;第五级为退出阶段,运算的结果被写回寄存器或者内存。由于处理器同时运行了多条指令,大大提升了程序运行的性能。 |
| 1993 年 | Intel 推出了奔腾(Pentium)处理器。 | 由于诉讼问题,Intel 无法继续沿用原来的数字编号。因此,用奔腾替代了 586 作为新款处理器的代号。奔腾处理器相对 i486 处理器对流水线做出了更多修改。奔腾处理器架构增加了第二条独立的超标量流水线。主流水线工作方式类似于 i486,第二条流水线则并行的运行一些较简单的指令,比如说定点算术,而且该流水线能更快的进行该运算。 |
| 1995 年 | Intel 推出了奔腾 Pro (Pentium Pro)处理器。 | 和之前的处理器相比,奔腾 Pro 采用了完全不同的设计。该处理器采用了诸多新特性以提高性能,包括乱序(Out-of-Order, OOO)执行的部件以及猜测执行。流水线扩展到了 12 级,而且引入了“超标量流水线”的概念,使得许多指令可以被同时处理。我们稍后将详尽的介绍乱序执行的部件。 |
| 在 1995-2002 年之间 | 乱序执行部件经过了数次重大改进。 | 处理器中加入了更多的寄存器;单指令多数据(Single Instruction Multiple Data, or SIMD)的引入使得一条指令可以进行多组数据运算;现有的缓存变得更大而且引入了新的缓存;有些流水级被拆分成更多流水级,有些流水级被合并,使得更加适合实际的应用。这些改变对整体性能的提升有重要作用,但它们都没有从根本影响数据在处理器中的流动方式。 |
| 2002 年 | 发布的奔腾 4 处理器引入了超线程技术。 | 乱序执行部件的设计使得指令被执行的速度比处理器能够提供指令的速度更快。因此对于大部分应用,CPU 的乱序执行部件在大部分时间处于空闲状态,甚至在高负载的情况下也不能充分利用。为了让指令流能充分的流入乱序执行部件,Intel 加入了第二套前端部件(译注:在处理器结构中,前端是指取指,译码,寄存器重命名等模块,经过前端部件的处理后,指令等待发射进入乱序执行部件)。虽然实际上只有一个乱序执行部件,但对于操作系统来说,它能看到两个处理器。前端部件包含两组同样功能的 X86 寄存器,两个指令译码器根据两个指令指针指向的地址分别处理。所有的指令被一个共享的乱序执行部件执行,但对应用程序来说并不知情。当乱序执行部件执行完成,像之前一样退出流水线后,最终结果返回虚拟的两个处理器。 |
| 2006 年 | Intel 发布了酷睿(Core)微架构。为了品牌效应,它被称做酷睿2(二总比一好)。 | 令人惊讶的是,处理器频率不升反降,而且超线程也被去掉了。通过降低时钟频率,每一级流水线可以做更多工作。乱序执行部件也被扩展的更宽。各种不同的缓存和队列都相应做的更大。而且处理器被重新设计,以适应双核和四核的共享缓存结构。 |
| 2008 年 | Intel 开始用酷睿 i3, i5, i7 的方式来命名新的处理器。 | 新处理器重新引入了超线程。这三个系列的处理器主要区别在于内部缓存大小不同。 |
| 未来的处理器,Intel 的下一代微结构被称为 Haswell。 | Haswell 据称将于 2013 年发布。目前已知的文档说明它将拥有 14 级流水级的乱序执行部件,所以它仍然遵循从奔腾 Pro 以来的基本设计思路。 |
| 时间线 | 里程碑(微架构) | 描述 | 代表处理器 |
|:-----:|:------------:|:---:|:---------:|
| 1982 年 | 指令缓存在 1982 年被加入到处理器中。 | 通过指令缓存,处理器可以一次性从内存读取更多指令并放在指令缓存中,而不用每条指令都从内存中取。指令缓存仅有几个字节大小,只能容纳数条指令,但是因为消除了之后每次取指往返内存和处理器的时间,极大的提高的效率。 | 80286 |
| 1985 年 | 386 处理器引入了数据缓存,而且扩展了指令缓存的设计。 | 数据访存请求通过一次性读取更多的数据放在数据缓存中,从而提升了性能。而且,数据缓存和指令缓存都从几个字节扩大到几千字节。 | 80386 |
| 1989 年 | 推出的 i486 处理器引入了五级流水线。 | 这时,在 CPU 中不再仅运行一条指令,每一级流水线在同一时刻都运行着不同的指令。这个设计使得 i486 比同频率的 386 处理器性能提升了不止一倍。五级流水线中的取指阶段将指令从指令缓存中取出(i486 中的指令缓存为 8KB);第二级为译码阶段,将取出的指令翻译为具体的功能操作;第三级为转址阶段,用来将内存地址和偏移进行转换;第四级为执行阶段,指令在该阶段真正执行运算;第五级为退出阶段,运算的结果被写回寄存器或者内存。由于处理器同时运行了多条指令,大大提升了程序运行的性能。 | 80486 |
| 1993 年 | Intel 推出了基于 P5 微架构的奔腾(Pentium)处理器。 | 由于诉讼问题,Intel 无法继续沿用原来的数字编号。因此,用奔腾替代了 586 作为新款处理器的代号。奔腾处理器相对 i486 处理器对流水线做出了更多修改。奔腾处理器架构增加了第二条独立的超标量流水线。主流水线工作方式类似于 i486,第二条流水线则并行的运行一些较简单的指令,比如说定点算术,而且该流水线能更快的进行该运算。 | Pentium |
| 1995 年 | Intel 推出了基于 P6 微架构的奔腾 Pro (Pentium Pro)处理器。 | 和之前的处理器相比,奔腾 Pro 采用了完全不同的设计。该处理器采用了诸多新特性以提高性能,包括乱序(Out-of-Order, OOO)执行的部件以及猜测执行。流水线扩展到了 12 级,而且引入了“超标量流水线”的概念,使得许多指令可以被同时处理。我们稍后将详尽的介绍乱序执行的部件。 | Pentium Pro |
| 在 1995-2002 年之间 | 乱序执行部件经过了数次重大改进。 | 处理器中加入了更多的寄存器;单指令多数据(Single Instruction Multiple Data, or SIMD)的引入使得一条指令可以进行多组数据运算;现有的缓存变得更大而且引入了新的缓存;有些流水级被拆分成更多流水级,有些流水级被合并,使得更加适合实际的应用。这些改变对整体性能的提升有重要作用,但它们都没有从根本影响数据在处理器中的流动方式。 | Pentium MAX<br>Pentium II<br>Pentium III |
| 2002 年 | NetBurst 架构 | 使用 NetBurst 架构的奔腾 4 处理器引入了超线程技术。乱序执行部件的设计使得指令被执行的速度比处理器能够提供指令的速度更快。因此对于大部分应用,CPU 的乱序执行部件在大部分时间处于空闲状态,甚至在高负载的情况下也不能充分利用。为了让指令流能充分的流入乱序执行部件,Intel 加入了第二套前端部件(译注:在处理器结构中,前端是指取指,译码,寄存器重命名等模块,经过前端部件的处理后,指令等待发射进入乱序执行部件)。虽然实际上只有一个乱序执行部件,但对于操作系统来说,它能看到两个处理器。前端部件包含两组同样功能的 X86 寄存器,两个指令译码器根据两个指令指针指向的地址分别处理。所有的指令被一个共享的乱序执行部件执行,但对应用程序来说并不知情。当乱序执行部件执行完成,像之前一样退出流水线后,最终结果返回虚拟的两个处理器。 | Pentium IV |
| 2001 年 | 发布了 IA-64 微架构, 支持 64 位. | 引入了 HT 超线程, 允许处理器在每个周期最多运行 6 条指令 | Itanitum(安腾)/2001年<br>Itanitum 2/2002 年 |
| 2003 年 | Pentium M 架构 | Pentium D 处理器是首颗 2 核(胶水双核)的处理器, CPU 进入多核时代。 | Pentium M<br>Celeron M |
| 2005 年 | Yonah 微架构 | Yonah 是 Pentium M 和 NetBurst 架构的改进和优化版本, 是微架构向酷睿迈进的第一步。在能耗和电源管理方面做了优化。通过独立的双核心电源调节,大大减少能量消耗. 弱点主要继承自原先的Pentium M架构,如因缺少集成内存控制器带来的高内存延时(同时DDR-II内存自身也比DDR内存有更高的延迟问题)和因每个核心有更少的浮点单元因而更慢的浮点运算单元(FPU)。 | Core Duo |
| 2006 年 | 第一代酷睿(Core)微架构 | 目前比较普遍的看法是,Core微架构是 Pentium Pro 架构,或者说是 P6 微架构的延续。令人惊讶的是,处理器频率不升反降,而且超线程也被去掉了。通过降低时钟频率,每一级流水线可以做更多工作。乱序执行部件也被扩展的更宽。各种不同的缓存和队列都相应做的更大。而且处理器被重新设计,以适应双核和四核的共享缓存结构。采用新的内存相关性预测技术。支持增强的电源管理功能。支持硬件虚拟化技术和硬件防病毒功能。内建数字温度传感器。还可提供功率报告和温度报告等,配合系统实现动态的功耗控制和散热控制。 | Core 2 Duo |
| 2007 年 | Penryn 微架构 | 是 Core 的优化改进版本,较大的 Cache 容量,FSB 和时钟速度较高,支持 SSE4.1 指令。 | Wolfdale<br>Yorkfield 45nm [TICK] |
| 2008 年 | Nehalem 微架构 | 新处理器重新引入了超线程(SMT技术。开始用酷睿 i3, i5, i7 的方式来命名新的处理器。这三个系列的处理器主要区别在于内部缓存大小不同。 | Nehalem 家族处理器/代号 Boomfield(Core i7)/45nm [TOCK]<br>Westmere 家族处理器/Core i3i5/32nm [TICK] |
| 2011~2012 年 | [Sandy Bridge 微架构](https://en.wikichip.org/w/index.php?title=intel/microarchitectures/sandy_bridge) | 在酷睿的基础上结合了在 NetBurst 实施的一些改进与原来的 P6 设计。 前端完全重新设计,拥有新的解码管道,使用了新设计的 µOP 缓存。后端是实现了一个基于 PRF 的寄存器重命名单元。 | 第二代酷睿 Sandy Bridge 家族处理器/32nm [TOCK]<br>第三代酷睿 Ivy Bridge 家族处理器/ 22nm [TICK] |
| 2013~2014 年 | Haswell | 拥有 14 级流水级的乱序执行部件,所以它仍然遵循从奔腾 Pro 以来的基本设计思路。 L3 采用 non-inclusive LLC。为了在一块 CPU 里塞进越来越多的核心数,Intel 的多核 CPU 引入了 ring bus 的设计,核心、LLC、QPI 控制器分布于环上,内存控制器和 QPI 总线分布在环的两端,然而这样的结构随着核心的增加,延迟也会增加,于是从 Haswell 开始,高核心数的服务器 CPU 开始使用双线环网结构(双环+双内存控制器的架构),在 LCC 中是单环, MCC 中是一个完整环和一个半环,HCC 中则是两个完整的环,半环和完整的环都带有一个独立的内存控制器。引入 COD(Cluster on DIE) 解决 NUMA 内存不一致的问题,逻辑上分为核数和 LLC 各为一半的两个 cluster,被操作系统当做两个 NUMA 节点。| 第四代 Haswell/22nm [TOCK]<br>Haswell Refresh/22nm [REFRESH]<br>第五代 Broadwell/14nm [TICK] |
| 2015~2017 年 | [Skylake](https://en.wikichip.org/wiki/intel/microarchitectures/skylake_(server)) | 借鉴了 Broadwell 的诸多优化。采用 mesh 总线结构,引入了网状互联网络(从环拓扑),由于核心较多时,mesh 结构即使是取最短路线也有可能跨过整个 DIE 而导致延迟较大,因此设计了 SNC(sub-NUMA cluster) 替代 Broadwell 的 COD(Cluster on DIE),将核心、CHA 和 LLC 单元分配到物理距离较近的内存控制器上。这样在 L3 cache miss 的时候会从更近一侧的内存控制器去访问内存,SNC 开启时可以获得更低的平均内存访问延迟。虽然这样单 socket 也会被识别为两个 NUMA 节点,但是原因却和 Haswell 不同。 | 第六代 Skylake/14nm [TOCK]<br>第七代 Kaby Lake/14nm<br>第八代 Coffee Lake家族,Whiskey Lake家族,以及Amber Lake家族/14nm<br>第九代 Coffee Lake Refresh<br>第十代 Comet Lake家族 |
| 2019 年 | IceLake(代号 Sunny Cove) | 更宽的流水线、更多的执行单元以及专用指令(比如 AVX-512)执行单元的优化 | 第十一代产品 Rocket Lake家族/14nm/Cypress Cove 微架构<br>第十一代产品 Tiger Lake家族用使用 Willow Cove 微架构/10nm [Optimization] |
| 2021 年 | 混合架构,为了区别于 ARM 的 big.LITTLE,被称为 Intel Hybrid 或者 Hybrid Computing Architectures。 | 同时包含使用了 Golden Cove 微架构的酷睿大核(P-core) 和使用了 Grace Mont 微架构 Atom 小核(E-core)。<br>Golden Cove 属于十一代笔记本酷睿(Tiger Lake)里 Willow Cove 的升级,具有更深、更宽的流水线,频率设定较高,强调高性能,在某些方面都有巨大的变化,例如乱序指令窗口,ROB(重排序缓存)的大小,充分利用了新制程晶体管密度提升带来的好处。<br>Grace Mont的角色按照设计理念是做一些轻体力活为主,主打低能耗,但是本身的性能还是可以的,它属于 Atom 阵营里的第四代乱序执行架构。<br>为此还专门加入了一个名为 Thread Director(线程导向器)的硬件线程导向器,这个导向器的目的就是把各种线程按照其负荷递交给不同类型的内核。 | 第十二代 Alder Lake |
Intel 自酷睿处理器以来,奠定了超标量流水线架构的基本形态,这种形态经过 Sandy BridgeHaswellSkylakeIceLake 的不断发展,通过更深的缓冲区,更高的访存操作,更宽的SIMD执行能力,微指令缓存等手段,成为了几乎目前所有高性能处理器都有和将要有的形态。
## 4.2 处理器微架构发展路线
-------
### 4.2.1 Tick-Tock 战略
-------
众所周知 Intel 之前有个著名的 [Tick-Tock 战略](https://www.intel.com/content/www/us/en/silicon-innovations/intel-tick-tock-model-general.html),他指的是每年按照**工艺年-架构年**交替升级产品,持续在前代产品的基础上改进
* 当在工艺年(tick)的时候重点是使用新的制程,小幅修改微架构。
* 当在架构年(tock)的时候,将会推出较大改进的微架构,往往此时 ISA 也会扩展更多指令集,并且优化上年推出的制程,进一步改善功耗和良率,在已经取得成功的产品上持续改进,使得 Intel 始终保持对竞争对手的优势
如果不出意外,产品节奏会是这样。
![Tick-Tock 战略](./intel-tick-tock.jpg)
  那么,流水线到底是什么?乱序执行部件是什么?他们如何提升了处理器的性能呢?
不过不出意外怎么可能呢。但是计划永远赶不上变化。
到 14nm 的时候,Tick-Tock 策略出现了危机,因为 Tick 工艺节点出现了较大的延迟,内部 14nm 的 Broadwell 推出时出现了一点偏差,外围又有 AMD 的紧追不舍, Intel 不得不出了 Haswell-refresh 来解燃眉之急,不过好在没有太大延迟,随着架构年的 Skylake 微架构的如期发布,也还算是赶上了一年一换代的节奏。
### 4.2.2 Processor-Architecture-optimization 策略
-------
不过事情远远没有那么简单。在 Skylake 发布之后,10nm 再一次难产,意识到工艺问题预远没有预期那么简单的牙膏厂,只能被迫将 Tick-Tock 战略彻底放弃。
2016年3月22日,Intel在财务报告中宣布,Tick Tock将放缓至三年一循环,增加优化环节,进一步减缓实际更新的速度。至此改为三步走的 PAO(Processor-Architecture-optimization) 策略,即“制程-架构-优化”。
* 制程:在架构不变的情况下,缩小晶体管体积,以减少功耗及成本
* 架构:在制程不变的情况下,更新处理器架构,以提高性能
* 优化:在制程及架构不变的情况下,对架构进行修复及优化,将BUG减到最低,并提升处理器时钟频率 [1]
于是产品计划变成了这个摸样。
![PAO 策略](./intel-PAO.jpg)
CannonLake 如期作为第一代 10nm 出现,但是 10nm 的问题远比意料中的复杂,CannonLake 产品的发布再次难产,而且随着 AMD 堆核战略在 Ryzen 上取得成效,Intel 决定使用现有产品 14nm 堆核进行应对,这让 Cannonlake 变成了极其尴尬的产品,它将永远成为英特尔推动 10nm 至高无上的努力的障碍。实际仅推出了一款芯片 Core i3-8121U。产品干脆没有上市,实际产品情况变成了这样。
![10nm 的危机](./intel-10nm.jpg)
接着就是大家熟知的事情了:
2019年发布基于微架构 Sunny Cove 的 10nm 处理器,也就是之前就被爆出来的 Ice Lake(注意这是处理器代号,而Sunny Cove则是CPU微架构代号),使用的是10nm工艺,提升了 IPC,增加了新的指令集。接下来是 2020 年 发布 Willow Cove,使用 14nm 工艺。
> Willow Cove vs Cypress Cove
>
> Rocket Lake 处理器用的内核 Cypress Cove,它应该是把 10nm 的 Willow Cove 改用14nm工艺生产所用的代号,但它并不完全等于 Willow Cove,应该是结合 14nm 工艺重新开发的。因此 Cypress Cove 相比于 Skylake 的IPC提升可能没 Willow Cove 的 25% 这么多,但是现在14nm工艺所能达到的频率比10nm更高,所以 Rocket Lake 的最高频率会比 Tiger Lake 的 4.7GHz 更高。
>
> [https://www.techpowerup.com/268511/intel-willow-cove-backported-to-14nm-is-cypress-cove](https://www.techpowerup.com/268511/intel-willow-cove-backported-to-14nm-is-cypress-cove)
而 2021 年发布了混合架构的 Alder Lake,同时包含 Golden Cove 微架构的大核和 Grace Mont 微架构的小核,至此以 Cove 架构作为高性能微架构以及 Mont 架构作为其他偏向能耗的处理器的微架构应该是后面几年的主旋律。
![cove 和 mont 架构路线](./intel-cove-and-mont.jpg)
# 5 CPU 指令流水线
-------
  那么,流水线到底是什么?乱序执行部件是什么?他们如何提升了处理器的性能呢?
  根据之前描述的基础,指令进入流水线,通过流水线处理,从流水线出来的过程,对于我们程序员来说,是比较直观的。
  I486 拥有五级流水线。分别是:取指(Fetch),译码(D1, main decode),转址(D2, translate),执行(EX, execute),写回(WB)。某个指令可以在流水线的任何一级。
@@ -232,6 +305,32 @@ XOR a, b
  感谢与我一起参与这次旅行!
# 9 参开资料
-------
| 编号 | 链接 | 描述 |
|:---:|:----:|:---:|
| 1 | [Intel_Tick-Tock](https://zh.wikipedia.org/wiki/Intel_Tick-Tock) | 维基百科-Intel 微架构 |
| 2 | [详述Intel系列CPU架构的发展史](https://wenku.baidu.com/view/e465434b2b160b4e767fcf44.html) | NA |
| 3 | [【X86】---关于Intel芯片架构的发展史](https://www.cnblogs.com/szhb-5251/p/6669860.html) | NA |
| 4 | [英特尔微处理器列表](https://zh.wikipedia.org/wiki/英特尔微处理器列表) | NA |
| 5 | [Intel真的在挤牙膏?历代Core i7处理器性能大比拼](https://www.expreview.com/49967-2.html) | NA |
| 6 | [INTEL CPU全系列架构发展史](http://www.360doc.com/content/20/0218/07/31409419_892835563.shtml) | NA |
| 7 | [Microarchitectures - Intel](https://en.wikichip.org/wiki/intel/microarchitectures) | NA |
| 8 | [List of Intel CPU microarchitectures](https://infogalactic.com/info/List_of_Intel_CPU_microarchitectures) | NA |
| 9 | [List of Intel CPU microarchitectures](https://wikimili.com/en/List_of_Intel_CPU_microarchitectures) | NA |
| 10 | [Intel Microarchitecture Overview](https://www.thomas-krenn.com/en/wiki/Intel_Microarchitecture_Overview) | NA |
| 11 | [英特尔新一代Core微架构全面解析](http://tech.sina.com.cn/h/2006-04-27/1421920715.shtml) | NA |
| 12 | [一起聊聊业界即将用上的Intel Golden Cove高性能核心?](https://zhuanlan.zhihu.com/p/411109256) | NA |
| 13 | [IceLake微架构CPU介绍与性能分析](https://zhuanlan.zhihu.com/p/83399457) | NA |
| 14 | [Microarchitectures - Intel](https://en.wikichip.org/wiki/intel/microarchitectures) | NA |
| 15 | [从 E5-2690v4 的 NUMA 数量说起,浅谈 Broadwell 到 Skylake 的改进](https://www.starduster.me/2018/05/18/talk-about-evolution-from-broadwell-to-skylake) | NA |
| 16 | [从核心性能不一致到sub-numa](https://zhuanlan.zhihu.com/p/60110000) | NA |
| 17 | [NUMA入门:那些必须知道的基础概念](https://www.it610.com/article/1281587993060065280.htm) | NA |
| 18 | [NUMA Domian和NUMA Distance](https://www.cnblogs.com/kongchung/p/14745803.html) | NA |
| 19 | [如何看待第 12 代英特尔酷睿处理器的产品革新?会给行业带来什么影响?](https://www.zhihu.com/question/494592488/answer/2206656842) | NA |
<br>
* 本作品/博文 ( [AderStep-紫夜阑珊-青伶巷草 Copyright ©2013-2017](http://blog.csdn.net/gatieme) ), 由 [成坚(gatieme)](http://blog.csdn.net/gatieme) 创作.
Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB