大小核与异构多核
打开一台现代智能手机的功耗分析工具,你会发现一个惊人的事实:在绝大多数时间里,手机SoC的80%晶体管处于完全关闭状态。这不是设计缺陷——这是物理定律的必然结果。当Dennard缩放在2005年左右终结后,晶体管密度继续按摩尔定律增长,但功耗密度不再下降。一颗3nm芯片如果所有晶体管同时全速运行,瞬时功耗将超过500W——远远超出任何可行的散热方案。这就是"暗硅"问题,它从根本上重塑了处理器的设计哲学:不再追问"如何让所有晶体管同时工作",而是追问"在有限的功耗预算下,哪些晶体管应该被激活"。
设计提示
统一视角连接。处理器设计的本质是在有限的晶体管预算和功耗约束下,通过投机和并行的层层叠加来逼近指令吞吐率的理论上限。前面章节讨论了在单个核心内部追求并行的各种技术——超标量、乱序执行、SMT(第 45.0 章)。本章转向核心之间的并行维度:在暗硅约束下,同构多核已经无法充分利用芯片上的晶体管预算,异构多核(大小核)通过资源分化——而非第 45.0 章中SMT的资源共享——来在性能和能效之间取得最佳平衡。如果说SMT是让多个线程共享同一份资源来提高利用率,那么大小核是让不同类型的资源各自优化来提高效率。
在过去二十多年中,处理器性能的提升经历了从单纯追求频率到追求多核并行的转变。然而,随着Dennard缩放定律的终结和功耗墙的到来(回调第 3.0 章中关于功耗物理的讨论),传统的同构多核(homogeneous multicore)——在一个芯片上放置多个完全相同的核——也面临着严峻的挑战。芯片上的晶体管数量仍在按照摩尔定律增长,但受限于功耗预算,不可能同时激活所有晶体管,这就是所谓的暗硅(Dark Silicon)问题。在这一背景下,异构多核(heterogeneous multicore)应运而生:在同一个芯片上集成不同类型的处理器核——大核(性能核)追求极致的单线程性能,小核(效率核)追求最优的每瓦性能——通过操作系统调度将不同类型的工作负载分配到最合适的核上,从而在性能和能效之间取得最佳平衡。
ARM在2011年推出的big.LITTLE架构是异构多核的先驱,将高性能的Cortex-A15与低功耗的Cortex-A7组合在同一个SoC中。此后,Intel在2021年的Alder Lake中首次在x86桌面处理器上引入了大小核混合架构(Performance Core + Efficient Core),Apple则从2020年的M1开始在其桌面/笔记本处理器中采用性能簇与效率簇的设计。到了2025年,异构多核已经成为从移动端到服务器端的主流设计范式。
本章将系统地讨论大小核与异构多核的设计原理。首先分析异构计算的根本动机——暗硅约束与异构Amdahl定律(回调第 4.0 章中关于PPA权衡的讨论);然后深入比较性能核与效率核在微架构设计上的差异(回调第 43.0 章中关于ARM Cortex-X核的讨论);接着讨论核迁移与调度的硬件和软件机制;最后通过Intel、Apple和ARM的实际案例,展示异构多核在工业界的具体实现。
异构计算的动机
为什么需要异构多核?这个问题的答案根植于两个基本事实:第一,功耗墙和暗硅效应使得在有限的热设计功耗(TDP)预算下不可能同时激活所有大核;第二,真实的工作负载在串行和并行阶段之间交替变化,不同阶段对处理器核的需求截然不同。
暗硅与功耗约束
暗硅是指在先进工艺节点下,芯片上虽然可以集成海量的晶体管,但由于功耗和散热的限制,在任何给定时刻只能同时激活其中一部分晶体管,其余晶体管必须保持关闭(dark)状态。这一现象最早由Esmaeilzadeh等人在2011年的论文《Dark Silicon and the End of Multicore Scaling》中系统地分析和命名。
暗硅问题源于Dennard缩放定律的终结。在Dennard缩放有效的年代(约19702006年),随着晶体管尺寸缩小,阈值电压和供电电压同比例降低,使得每个晶体管的功耗密度保持不变。这意味着在给定面积的芯片上,虽然晶体管数量翻倍了,但总功耗并没有增加,所有晶体管都可以满负载运行。然而从45nm工艺节点之后,由于漏电流的物理极限,阈值电压不能再继续降低,供电电压的下降也趋于饱和。其结果是每个晶体管的功耗密度不再随尺寸缩小而降低——当晶体管数量翻倍时,总功耗也翻倍,但散热能力的提升远远跟不上这个速度。
图图 46.1定量地说明了暗硅问题。假设在某个基准工艺节点下,一个芯片可以集成个晶体管,功耗预算为,每个晶体管的功耗为,则可以同时激活的晶体管比例为:
在Dennard缩放有效时,工艺迭代使翻倍但减半,始终约为100%。在Dennard缩放终结后,翻倍但几乎不变,每代下降约50%。到了3nm和2nm工艺,一个200300mm的芯片可以集成超过500亿个晶体管,但只能同时激活其中20%30%。
暗硅问题对处理器设计的影响是深远的。如果一个芯片只能同时激活20%30%的面积,那么设计者必须回答一个关键问题:如何最有效地利用这有限的功耗预算?
暗硅激活比的定量推导
为了精确理解暗硅问题的严重程度,我们用真实数据计算不同工艺节点下的激活比。激活比公式(式 (46.1))可以用功耗密度和die面积重新表述:
其中是满载时的功耗密度(W/mm),是die面积(mm),是热设计功耗(W)。
性能分析 1 — 暗硅激活比的五步定量推导
用真实数据逐代计算激活比:
第一步:45nm节点(2009年,Intel Nehalem)。
功耗密度 W/mm(满载典型值)
Die面积 mm
TDP = 130 W
几乎所有晶体管都可以同时激活——Dennard缩放尚在发挥作用。
第二步:22nm节点(2014年,Intel Haswell)。
W/mm(Dennard缩放开始失效)
mm
TDP = 84 W
约40%的芯片面积必须保持"暗"状态。
第三步:7nm节点(2020年,AMD Zen 3 / TSMC N7)。
W/mm
mm(单个CCD chiplet)
TDP 70 W(单CCD分摊)
第四步:5nm节点(2022年,Apple M2 / TSMC N5)。
W/mm
mm(M2整颗SoC,含GPU/NPU)
TDP 22 W(M2的CPU+GPU功耗预算)
CPU面积 mm,CPU TDP12 W
在移动SoC中,CPU区域的激活比已降至仅15%!
第五步:3nm节点(2024年,Apple M3 / TSMC N3E)。
W/mm
CPU面积 mm,CPU TDP12 W
趋势外推到2030年(2nm / 1.4nm)。假设功耗密度继续按每代约25%的速率增长:
2nm(2027年预计): W/mm,
1.4nm(2030年预计): W/mm,
这些数字令人震惊:到2030年,一颗先进工艺的芯片可能只有7%的面积能同时激活。这使得异构设计从"可选优化"变为"生存必需"。
图图 46.2以pgfplots形式展示了激活比随工艺节点的定量下降趋势。
在同构多核设计中,所有核都是完全相同的大核。当所有核同时满载运行时,总功耗可能超出TDP预算,此时只能通过降频来适应功耗约束,导致每个核的性能都下降。更糟糕的是,大多数真实工作负载并非时时刻刻都能充分利用所有核——例如用户在浏览网页时通常只有一两个线程在活跃工作,此时大部分核处于空闲状态,功耗预算被浪费了。
异构多核提供了一种更灵活的解决方案:将芯片面积划分为少量的大核和大量的小核。在轻负载或单线程场景下,只激活一个大核并让它以最高频率运行,获得极致的单线程性能;在重负载多线程场景下,关闭大核,激活所有小核来处理并行任务,在有限的功耗预算内获得最高的总吞吐量。
性能分析 2 — 同构vs异构的功耗效率对比
考虑一个TDP为45 W的芯片,分别采用同构和异构两种设计:
同构方案:8个相同的核,每核最高15 W(Boost)/ 5 W(Base)。
单线程Boost模式:1核15 W + 7核idle 1 W = 22 W,单线程性能为
全核满载模式:8核 5 W = 40 W,总吞吐为(降频)
异构方案:4个大核 + 8个小核,大核15 W/5 W,小核2 W/1 W。
单线程Boost模式:1大核15 W + 其余idle = 22 W,单线程性能为
全核满载模式:4大核 5 W + 8小核 2 W = 36 W,总吞吐为
异构方案的总吞吐量与同构方案相当( vs ),但功耗更低(36 W vs 40 W),并且小核在后台任务(邮件通知、系统服务等)中的能效远优于用大核来处理这些轻量级任务。
从功耗模型的角度可以更清楚地理解异构的优势。处理器核的功耗与性能之间并非线性关系,而是呈现出递减的边际收益。具体来说,对于一个超标量核心,性能与功耗之间的关系大致服从如下模型:
这意味着将功耗翻倍只能获得约倍的性能提升。反过来,将功耗减半只损失约的性能。这种非线性的功耗-性能关系正是异构多核的理论基础:与其将所有功耗预算投入少量大核以追求极致性能,不如将一部分预算分配给大量的低功耗小核,后者在每瓦性能上更加高效。
设计提示
功耗-性能的非线性关系是处理器设计中最重要的经验法则之一。它的物理根源在于:提高处理器性能通常需要增加微架构的复杂度(更宽的发射宽度、更大的乱序窗口、更大的Cache),这些结构的功耗增长速度快于它们带来的性能提升。例如,将发射宽度从4-wide增加到8-wide,发射队列的面积和功耗以超线性的速度增长(CAM结构的匹配功耗约与宽度的平方成正比),但IPC的提升通常不到2倍。
Amdahl定律的推广
在讨论异构多核的性能模型之前,先回顾经典的Amdahl定律。对于一个包含串行比例和并行比例的程序,在个同构核上执行的加速比为:
当时,,即串行比例决定了加速比的上限。如果,则无论使用多少个核,加速比最多为10倍。
2010年,Hill和Marty在论文《Amdahl’s Law in the Multicore Era》中将Amdahl定律推广到了异构多核的场景。他们考虑一个芯片的总面积为(以等效的基线小核数量计算),一个大核的面积为倍的小核面积(),则芯片上可以放置1个大核和个小核。大核的性能为小核的倍(基于式 (46.3)中功耗-性能的平方根关系近似)。
在异构执行模型中,串行阶段由大核执行,并行阶段由所有小核执行(大核此时关闭以节省功耗),加速比为:
其中分母第一项表示串行阶段的执行时间(大核加速倍),第二项表示并行阶段的执行时间(个小核加上大核也参与并行执行,等效于个小核的性能)。
图图 46.3比较了同构和异构两种设计在不同串行比例下的加速比。
从图图 46.3可以观察到几个重要结论。
第一,当串行比例很低()时,同构全小核设计具有最高的加速比,因为并行阶段占据了绝大部分执行时间,更多的核意味着更高的并行吞吐。
第二,当串行比例较高()时,异构设计的优势变得非常显著。例如在时,异构设计()的加速比为24.1,远高于同构全小核的9.6和同构全大核的9.0。这是因为异构设计兼顾了两方面的优势——用大核加速串行瓶颈,用小核提供并行吞吐。
第三,大核的最优面积取决于串行比例。串行比例越高,越应该将更多的芯片面积分配给大核。在实际设计中,的值因工作负载而异,因此大核面积的选择需要在目标工作负载的统计特征上进行优化。
硬件描述 1 — 异构Amdahl定律的设计含义
异构Amdahl定律揭示了一个看似矛盾的设计需求:为了最大化芯片级性能,既需要足够强大的大核(加速串行阶段),又需要足够多的小核(提供并行吞吐)。在给定的芯片面积和功耗预算下,设计者必须在大核的"大"和小核的"多"之间取得平衡。
具体的设计参数包括:
大核数量:通常48个,取决于目标工作负载的线程并行度
小核数量:通常416个(桌面)或24个(移动)
大核面积:通常为小核面积的倍
大核功耗:通常为小核功耗的倍
大核性能:通常为小核性能的倍(单线程IPC)
在实际的处理器设计中,Hill-Marty模型需要进行若干修正。首先,大核和小核之间的性能差异并非严格遵循面积的平方根关系,实际的比例取决于具体的微架构设计。例如Intel的Golden Cove(P-core)与Gracemont(E-core)的单线程性能比约为,而面积比约为。其次,模型假设大核和小核不能同时工作,但现实中它们通常是同时活跃的——大核处理延迟敏感的前台任务,小核处理后台服务。最后,模型没有考虑核间通信开销、缓存一致性协议的代价、以及核迁移的延迟。
尽管如此,异构Amdahl定律仍然提供了一个有价值的理论框架,帮助设计者理解异构多核相对于同构多核的优势所在,并指导大核与小核之间面积和功耗预算的分配。
Pollack规则与异构的数学证明
Hill-Marty模型中的关键假设源自Pollack规则(Pollack’s Rule,1999年):处理器性能大致与微架构复杂度(以晶体管数或面积衡量)的平方根成正比。这一经验法则的物理根源在于:
增加面积倍主要用于加宽发射宽度、加深乱序窗口和增大Cache——这些结构的面积/功耗以超线性速率增长,但IPC的提升速率低于线性。
具体来说,将发射宽度从增加到,发射队列的CAM匹配电路面积增长约(回调第 27.0 章中关于发射队列面积缩放的讨论),但IPC增长约。
Cache面积按容量线性增长,但Cache命中率的提升遵循对数递减——翻倍容量通常只降低miss率约30%40%。
异构优于同构的数学证明。设芯片总面积为(以等效小核面积为单位),目标最大化加速比。对于同构方案(全小核),加速比为。对于异构方案(1大核面积+小核),加速比为(式 (46.5))。
要证明异构优于同构,需证明存在使得。对关于求导并令其为零,可求得最优大核面积:
当且足够大时,,即异构设计总是优于同构设计。对于典型参数、,——即最优大核面积约为9.3个等效小核面积。
不同串行比下的最优大核数量。表表 46.1列出了在不同值下的最优大核面积和对应的加速比提升。
| 串行比 | 最优 | 同构加速比 | 异构加速比 |
|---|---|---|---|
| 1% | 2.0 | 72.0 | 76.5 |
| 5% | 5.1 | 17.7 | 30.5 |
| 10% | 9.3 | 9.6 | 24.1 |
| 20% | 16.0 | 4.9 | 13.8 |
| 50% | 28.4 | 2.0 | 6.1 |
从表中可以看出,当时(覆盖了绝大多数真实工作负载),异构设计的加速比显著优于同构设计——在时异构的加速比是同构的2.5倍。
大小核的微架构设计
大核(性能核,Performance Core,P-core)和小核(效率核,Efficient Core,E-core)在微架构设计上有着本质的区别。大核追求极致的单线程性能,不惜为此付出更大的面积和功耗代价;小核追求最优的每瓦性能和每平方毫米性能,在有限的资源预算下尽可能提高能效。
性能核的设计哲学
性能核的设计目标是最大化单线程IPC。为了实现这个目标,性能核在微架构的几乎每个维度上都采用了最激进的设计。
(1)宽发射与深乱序。性能核通常采用6-wide到10-wide的解码/发射宽度,配合数百项的ROB来容纳大量的飞行中指令。宽发射使得处理器在每个周期可以从更多的指令中发现并行性,深乱序窗口使得处理器可以"看"到更远的指令序列,跨越长延迟操作(如Cache缺失)找到可以执行的独立指令。
以Intel Golden Cove为例,其解码宽度为6-wide、ROB容量为512项、发射队列总容量约为97项。Apple Firestorm更为激进,解码宽度为8-wide、ROB容量约630项。这些大型结构占据了处理器核心面积的很大比例,也是性能核功耗偏高的重要原因。
(2)大容量多级Cache。性能核通常配备大容量的L1 Cache(64KB I-Cache + 4880KB D-Cache)和私有的L2 Cache(12MB甚至更大)。大Cache减少了缺失率,从而降低了因访存延迟导致的流水线停顿。Cache的关联度也通常设置得较高——L1通常为8路或12路组相联,L2通常为12路或16路组相联——以进一步降低冲突缺失。
(3)精密的分支预测器。性能核通常配备最先进的分支预测器,如大容量的TAGE预测器(数万项的历史表)、精确的间接跳转预测器、循环检测器等。高精度的分支预测对于宽发射处理器尤为重要——分支预测错误的惩罚不仅包括流水线冲刷的周期数(通常1520个周期),还包括冲刷期间大量乱序资源的浪费。在8-wide的处理器中,一次分支预测失败可能浪费120160条微操作的执行资源。
(4)复杂的访存子系统。性能核通常配备多个Load/Store端口(23个Load端口 + 12个Store端口),大容量的Load Queue(通常128192项)和Store Queue(通常72128项),以及高级的数据预取器(如跨步预取、指针预取等)。这些结构确保了在密集的访存代码中,流水线不会因为Load/Store端口冲突或队列满而停顿。
(5)高频率设计。性能核在电路设计上也追求高频率,通过更深的流水线划分、定制的关键路径优化来提高时钟频率。现代性能核的Boost频率可以达到5 GHz以上(Intel Raptor Cove达到6 GHz)。
表表 46.2汇总了几个代表性性能核的微架构参数。
| 参数 | ||||
| Golden Cove | ||||
| Lion Cove | ||||
| Firestorm | ||||
| Cortex-X4 | ||||
| 解码宽度 | 6-wide | 8-wide | 8-wide | 6-wide |
| ROB容量 | 512 | 576 | 630 | 320 |
| 整数发射队列 | 97 | 120+ | 160+ | 160 |
| L/S队列 | 128/72 | 192/114 | 128/108 | 136/78 |
| L1I Cache | 32KB | 64KB | 192KB | 64KB |
| L1D Cache | 48KB | 48KB | 128KB | 64KB |
| L2 Cache | 1.25MB | 3MB | 12MB(共享) | 1MB |
| 最高频率 | 5.2 GHz | 5.5 GHz | 3.2 GHz | 3.4 GHz |
| 整数ALU端口 | 5 | 6 | 6 | 6 |
| Load端口 | 2 | 3 | 3 | 2 |
| Store端口 | 1 | 2 | 2 | 2 |
代表性性能核的微架构参数对比
设计提示
Apple的性能核设计哲学与Intel/AMD有明显不同。Apple选择了更大的L1 Cache(I-Cache 192KB、D-Cache 128KB,远大于其他厂商的3264KB),更大的ROB,但更低的频率(3.2 GHz vs 5 GHz以上)。这种设计用更大的微架构来换取更高的IPC,再用较低的频率来控制功耗。由于,降频带来的功耗节省是超线性的——频率从5 GHz降到3.2 GHz(0.64倍),结合电压的同步降低(约0.8倍),功耗下降到约倍,而IPC的提升可以部分补偿频率的下降。这种设计在移动端和笔记本电脑等功耗敏感的场景中特别有优势。
效率核的设计哲学
效率核的设计目标是最大化每瓦性能(performance per watt)和每平方毫米性能(performance per mm)。效率核并非简单地"缩小"性能核——它有自己独特的微架构设计哲学,在每个设计维度上都做出了不同的权衡。
(1)窄发射与浅乱序。效率核通常采用4-wide到6-wide的解码宽度,ROB容量在128256项之间。虽然这些参数远小于性能核,但它们代表的是"高效的甜蜜点"——微架构研究表明,从2-wide到4-wide,IPC的提升几乎是线性的;从4-wide到6-wide,IPC仍有显著提升但增速放缓;从6-wide到8-wide,IPC的提升已经相当有限,而面积和功耗的增长则是超线性的。效率核选择在边际收益递减之前的"拐点"停下。
(2)小而高效的Cache。效率核通常配备较小的L1 Cache(32KB I-Cache + 3248KB D-Cache)和较小的私有L2 Cache(256KB2MB)。有些设计中,多个效率核共享一个L2 Cache来进一步节省面积——例如Intel Gracemont中每4个E-core共享一个2 MB的L2 Cache,每核分摊只有512 KB。
(3)简化的流水线。效率核通常采用较浅的流水线(1015级),这不仅降低了分支预测失败的惩罚(周期数更少),还减少了流水线寄存器的面积和功耗。有些效率核甚至采用顺序执行(in-order)设计来进一步简化硬件——ARM Cortex-A55就是一个双发射的顺序核,完全没有乱序执行的硬件开销。
(4)适度的分支预测器。效率核的分支预测器在精度上不如性能核,但由于流水线较浅,预测失败的惩罚也较小。效率核可能使用较小的TAGE预测器或简单的GShare预测器,省去了性能核中使用的高级预测机制(如TAGE-SC-L中的统计校正组件)。
(5)有限的访存带宽。效率核通常只有12个Load端口和1个Store端口,Load Queue和Store Queue的容量也较小(通常4872项)。这些简化在大多数轻量级工作负载中不会成为瓶颈,但在密集的访存代码中可能导致明显的性能下降。
表表 46.3汇总了几个代表性效率核的微架构参数。
| 参数 | ||||
| Gracemont | ||||
| Skymont | ||||
| Icestorm | ||||
| Cortex-A520 | ||||
| 解码宽度 | 4-wide | 6-wide | 4-wide | 2-wide |
| 执行模型 | 乱序 | 乱序 | 乱序 | 顺序 |
| ROB容量 | 256 | 256+ | 96 | N/A |
| L1I Cache | 64KB | 64KB | 128KB | 32KB |
| L1D Cache | 32KB | 48KB | 64KB | 32KB |
| L2 Cache | 2MB(4核共享) | 4MB(4核共享) | 4MB(共享) | 256KB(私有) |
| 最高频率 | 3.8 GHz | 4.0 GHz | 2.1 GHz | 2.2 GHz |
| 整数ALU端口 | 4 | 5 | 4 | 2 |
| 面积(相对大核) | 1/3 | 1/3 | 1/3 | 1/5 |
| 功耗(相对大核) | 1/5 | 1/5 | 1/4 | 1/8 |
代表性效率核的微架构参数对比
图图 46.4直观地对比了性能核和效率核在微架构宽度和深度上的差异。
为了量化比较性能核和效率核的能效特性,考虑在相同的SPEC CPU 2017 INT基准测试上运行两种核。以Intel Alder Lake为例(数据为公开的估算值):
Golden Cove P-core @4.9 GHz: 性能200分 (单核), 功耗15 W
Gracemont E-core @3.7 GHz: 性能140分 (单核), 功耗3 W
计算能效(性能/功耗):
P-core: 分/W
E-core: 分/W
E-core的能效约为P-core的3.5倍。这意味着在同样的功耗预算下,E-core可以提供更高的总吞吐量——4个E-core (12 W)的总性能为分,而1个P-core (15 W)只有200分。当然,P-core在单线程性能上仍然占据绝对优势(200 vs 140),这正是大小核混合设计的意义所在。
:::
ISA兼容性的约束
大小核混合设计面临的一个关键技术挑战是ISA兼容性:大核和小核必须支持相同(或足够接近)的指令集体系结构,使得操作系统可以将任何线程透明地在大核和小核之间迁移,而不需要应用程序感知底层的核类型差异。
这个约束在x86架构上尤为棘手。x86指令集经过数十年的扩展,积累了大量的SIMD指令集扩展:SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AVX、AVX2、AVX-512、AMX等。每一代扩展都需要额外的执行单元、更宽的寄存器文件和更复杂的编码/解码逻辑。如果要求效率核也支持所有这些扩展,就会大幅增加效率核的面积和功耗,削弱其能效优势。
Intel在Alder Lake的设计中做出了一个争议性的决策:E-core(Gracemont)不支持AVX-512指令集。虽然Alder Lake的P-core(Golden Cove)硬件上本身具备AVX-512的执行能力,但为了保持大小核之间的ISA兼容性,Intel在Alder Lake中直接禁用了P-core的AVX-512。这意味着整个芯片上没有任何核可以执行AVX-512指令,避免了线程从P-core迁移到E-core时因不支持AVX-512而崩溃的问题。
这个决策引发了大量讨论。一方面,它简化了操作系统的调度——所有核看起来都一样(至少在ISA层面),不需要特殊的调度逻辑。另一方面,它牺牲了AVX-512用户的性能——对于科学计算和机器学习等依赖AVX-512的工作负载,Alder Lake的性能反而不如前代的Rocket Lake。
设计权衡 1 — AVX-512与大小核兼容性的权衡
针对AVX-512兼容性问题,存在以下几种设计选项:
选项A:全核支持AVX-512。大核和小核都实现AVX-512执行单元。这保证了完全的ISA兼容性,但E-core需要512位宽的SIMD执行单元和寄存器文件,面积可能增加30%40%,严重削弱E-core的能效优势。
选项B:禁用AVX-512(Intel Alder Lake的选择)。在整个芯片上禁用AVX-512,避免兼容性问题。代价是放弃AVX-512的性能收益。
选项C:核亲和性调度。允许P-core支持AVX-512,E-core不支持。操作系统通过核亲和性(affinity)将使用AVX-512的线程绑定到P-core上,禁止其迁移到E-core。这需要操作系统具备检测AVX-512指令使用的能力(例如通过XSAVE状态追踪),增加了调度的复杂性。
选项D:陷入-模拟(Trap and Emulate)。当E-core遇到AVX-512指令时触发异常,由软件模拟该指令(或将线程迁移到P-core)。这种方案的延迟很高,不适合频繁使用AVX-512的工作负载,但对偶尔使用的情况可以接受。
Intel在后续的Arrow Lake(2024年)中选择了一种演进的方案:P-core支持AVX-512(通过两次AVX-256执行来模拟),E-core支持AVX-256但不支持AVX-512,通过软件调度确保AVX-512代码只在P-core上运行。
在ARM架构上,ISA兼容性问题相对简单。ARM的大核和小核通常支持相同的ARM v8/v9 ISA,包括NEON SIMD和SVE/SVE2扩展。由于ARM ISA从一开始就为异构设计考虑了兼容性(big.LITTLE从2011年就开始了),大小核之间的ISA差异很小,主要体现在可选的扩展上(如某些核可能不支持MTE——内存标签扩展)。ARM的DynamIQ规范明确要求同一个DynamIQ簇中的所有核必须支持相同的ISA特征集,从架构层面保证了兼容性。
在RISC-V上,异构多核的ISA兼容性更加灵活。RISC-V的模块化ISA设计(RV64G = RV64IMAFD)天然支持不同的核实现不同的扩展子集——只要两个核的公共子集足够运行操作系统和应用程序的基本代码即可。例如,一个RISC-V异构SoC可以包含支持RV64GCV(含向量扩展)的大核和只支持RV64GC的小核,操作系统只需将向量化代码调度到大核上执行。
核迁移与调度
在异构多核系统中,操作系统需要决定每个线程应该运行在哪种类型的核上,并在适当的时机将线程从一种核迁移到另一种核。这个决策过程涉及硬件和软件的紧密协作:硬件负责监控线程的运行时行为并提供反馈,操作系统基于这些反馈做出调度决策。
Intel Thread Director
Intel的Thread Director(线程调度器)是Alder Lake引入的一项硬件辅助调度技术,旨在帮助操作系统更智能地将线程分配到P-core或E-core上。Thread Director的核心思想是:让硬件在运行时分类每个线程的行为特征,并通过标准化接口将这些信息反馈给操作系统。
Thread Director的架构由三个主要组件构成,如图图 46.5所示。
(1)CRQOS线程分类引擎。CRQOS(Class of Request Quality of Service)是Thread Director的硬件核心。它通过处理器内部的性能监控计数器(PMU)持续观察每个线程的运行时行为,包括指令混合类型(整数/浮点/SIMD/分支密集型)、IPC水平、Cache缺失率、内存带宽需求等指标。基于这些观察,CRQOS将每个线程分类为一个线程类别(thread class),并每隔约1ms更新一次分类结果。
Intel定义了多个线程类别(Alder Lake定义了4个,Meteor Lake扩展到更多),每个类别对应一种典型的工作负载特征。例如:
Class 0:低活跃度线程(后台任务、空闲线程),适合在E-core上运行
Class 1:标量整数密集型线程,P-core和E-core的性能差距中等
Class 2:向量/SIMD密集型线程,P-core具有显著优势(更宽的SIMD单元)
Class 3:高IPC密集型线程(如数据库查询、编译),P-core具有最大优势
(2)HFI(Hardware Feedback Interface)。HFI是Thread Director与操作系统之间的标准化通信接口。HFI在内存中维护一个能力表(capability table),表中为每个处理器核提供两个评分:
性能指标(Performance Capability):该核对当前线程类别的预期性能,范围0255
能效指标(Energy Efficiency Capability):该核对当前线程类别的预期能效,范围0255
硬件在CRQOS更新线程分类或系统状态发生变化(如温度变化导致核节流)时,自动更新HFI能力表,并通过中断通知操作系统。操作系统读取更新后的能力表,据此调整线程的调度决策。
(3)操作系统集成。Thread Director的有效性高度依赖操作系统的支持。Windows 11是第一个支持Thread Director的操作系统——它在调度器中集成了HFI的接口,可以根据性能和能效指标将前台高优先级线程调度到P-core上,将后台低优先级线程调度到E-core上。Linux内核从5.18版本开始通过intel_hfi驱动支持HFI接口,并在后续版本中不断优化了对混合架构的调度支持。
硬件描述 2 — Thread Director的硬件开销
Thread Director的硬件实现需要以下资源:
PMU采样逻辑:每个核上复用现有的性能监控计数器(PMC),增加采样聚合逻辑,面积开销约5K10K门
CRQOS分类引擎:基于查找表或决策树的分类逻辑,在uncore区域实现,面积约30K50K门
HFI能力表:一个小的SRAM表(每核2字节 核数 线程类别数),约数百字节
中断生成逻辑:当能力表更新时生成中断通知OS
总体硬件开销不到核面积的0.1%,但对异构调度的效果有显著的提升。在没有Thread Director的早期Windows 10上运行Alder Lake时,操作系统可能错误地将前台线程调度到E-core上,导致用户感知到明显的卡顿。
Thread Director的决策延迟分析
Thread Director的端到端决策延迟是理解其调度精度和响应速度的关键参数。整个决策链路可以分解为四个阶段:
(1)PMU采样窗口(约30s)。CRQOS引擎每隔约30s从各核心的PMU中采样一批性能计数器快照。采样的指标包括退休指令数(Instructions Retired)、分支Miss数、L1/L2 Cache Miss数、SIMD指令比例、以及端口利用率等。30s的采样窗口对应约150 K个时钟周期(在5 GHz频率下),足以收集具有统计显著性的行为特征。
(2)CRQOS分类决策(约15s)。CRQOS引擎基于采样数据对线程进行分类。分类算法本质上是一个硬件决策树或查找表——将多维特征向量(指令混合、IPC水平、miss率等)映射到预定义的线程类别。在Alder Lake中定义了4个类别,Meteor Lake扩展到约8个类别,Lunar Lake/Arrow Lake进一步细化。分类的硬件实现约需数十到数百个时钟周期。
(3)HFI表更新与中断通知(约510s)。当分类结果变化或系统状态(如温度)发生显著变化时,CRQOS更新HFI能力表并向操作系统发送中断通知。中断的传递和处理延迟取决于操作系统的中断处理路径。
(4)操作系统调度响应(约50150s)。操作系统收到HFI中断后,在下一个调度决策点(通常在下一个时钟中断或任务唤醒时)读取更新后的能力表,据此调整线程的核亲和性。Windows 11的调度器在大多数情况下可以在约100s内响应HFI更新。
总端到端延迟约为100200s。这意味着Thread Director无法捕捉短于100s的工作负载相位变化——例如一个线程在50s的SIMD密集阶段和50s的标量阶段之间交替时,Thread Director可能来不及在每个阶段切换线程到最优核心。这是硬件辅助调度的固有局限。
Thread Director在Windows与Linux上的差异
Thread Director的效果高度依赖操作系统的配合程度。
Windows 11。Windows 11是Thread Director的"原生搭档"。微软与Intel联合开发了Windows调度器对HFI的集成:
前台窗口线程自动获得P-core偏好(QoS偏向性能)
后台服务线程自动获得E-core偏好(QoS偏向效率)
Thread Director的分类结果作为调度器的建议(hint),调度器保留最终决策权
当P-core因热节流(thermal throttling)而性能下降时,HFI能力表自动更新,调度器将负载转移到未受影响的核心
Linux。Linux内核从5.18版本开始通过intel_hfi驱动支持HFI接口。但Linux的CFS(Completely Fair Scheduler)调度器对异构核心的支持在早期版本中较为粗糙——CFS主要基于负载均衡而非能力匹配来做决策。从Linux 6.3开始,引入了sched_asym_packing特性,使CFS能更好地利用HFI信息:优先将任务打包到高性能核心上,而非均匀分散到所有核心。Linux 6.6进一步引入了能效-性能联合优化的调度路径。
案例研究 1 — Thread Director在Alder Lake上的实测效果
在Intel Alder Lake i9-12900K上,Thread Director在不同工作负载下的调度决策可以通过perf和Intel VTune观测到:
场景一:单线程计算密集(Cinebench R23单核)。Thread Director将工作线程分类为Class 3(高IPC密集型),HFI为P-core报告性能指标255、能效指标120,为E-core报告性能指标90、能效指标255。Windows调度器据此将工作线程固定在P-core上,P-core以5.2 GHz Turbo频率运行。
场景二:多线程编译(make -j24)。Thread Director识别到大量并发线程,将它们分类为Class 1(标量整数密集型)。8个P-core各运行2个HT线程(共16线程),8个E-core各运行1个线程(共8线程),总计24线程全部活跃。P-core降频至4.9 GHz(全核Turbo),E-core运行在3.7 GHz。实测总编译吞吐量比仅使用8个P-core(16 HT线程)高约35%。
场景三:混合工作负载(游戏+直播串流)。Thread Director将游戏主线程分类为Class 3(P-core优先),将OBS串流编码线程分类为Class 2(SIMD密集型,P-core优先),将OBS的非关键线程和系统服务分类为Class 0/1(E-core)。这种精细分类使得游戏帧率仅下降约3%(相比独立运行),而串流质量完全保持。
ARM DynamIQ与EAS调度
图图 46.6展示了Thread Director从采样到调度决策的完整流程。
ARM在异构多核的调度方面走了一条不同于Intel的路线。Intel的Thread Director侧重于硬件分类和反馈,而ARM的EAS(Energy Aware Scheduling,能量感知调度)侧重于在软件层面建立精确的能量模型,让操作系统调度器直接基于能量成本做出最优决策。
ARM big.LITTLE到DynamIQ的演进。ARM在2011年推出的big.LITTLE架构是移动异构多核的先驱。在最初的big.LITTLE设计中,大核簇(cluster)和小核簇是完全独立的——每个簇有自己独立的L2 Cache,簇间通过CCI(Cache Coherent Interconnect)互联。这种设计有两种调度模式:
簇迁移模式(Cluster Migration):整个工作负载要么运行在大核簇上,要么运行在小核簇上,不能同时使用两个簇。切换时需要保存整个簇的状态并冷启动另一个簇,延迟高达数十微秒。
CPU迁移模式(CPU Migration / In-Kernel Switcher, IKS):每个大核与一个小核配对形成一个"虚拟核",操作系统看到的核数只有物理核数的一半。线程在配对的大核和小核之间迁移,延迟较低。
全局任务调度(Global Task Scheduling, GTS):操作系统可以看到所有核(大核 + 小核),自由地将线程调度到任何核上。这是最灵活也是性能最好的模式,但需要操作系统具备异构感知的调度能力。
2017年,ARM推出了DynamIQ架构来替代big.LITTLE。DynamIQ的核心改进在于将大核和小核放在同一个簇中,共享一个L3 Cache(称为DSU——DynamIQ Shared Unit)。这带来了几个关键优势:
核间迁移的延迟大幅降低——不再需要跨簇传输Cache数据
灵活的核组合——不再限于"大核簇 + 小核簇"的对称结构,可以在一个簇中放置X-core + A-core + E-core等任意组合
共享L3 Cache减少了数据冗余,提高了缓存利用率
EAS能量感知调度。EAS是Linux内核中专门为异构多核设计的调度框架,从Linux 5.0开始被合入主线内核。EAS的核心思想是:在做出调度决策时,不仅考虑性能(传统调度器的唯一目标),还要考虑能量成本(energy cost)。调度器为每个可能的调度决策计算预期的能量消耗,然后选择在满足性能需求的前提下能量消耗最低的方案。
EAS的能量模型基于以下输入:
性能域(Performance Domain):定义了一组可以独立调节频率/电压的核。例如在一个4P+4E的设计中,4个P-core可能构成一个性能域,4个E-core构成另一个性能域。
能量模型(Energy Model, EM):为每个性能域提供一个功耗-频率-性能的查找表。例如,P-core在2 GHz下功耗3 W、计算能力1000(抽象单位),在4 GHz下功耗12 W、计算能力1800。
利用率(Utilization):通过PELT(Per-Entity Load Tracking)机制跟踪每个任务的CPU利用率历史。
当一个任务需要被调度时,EAS的决策流程如下:
计算任务的利用率需求(例如占用CPU 30%的时间)
对于每个可选的目标核,计算如果将该任务放置到该核上,系统的总能量消耗是多少
选择总能量消耗最低的核,前提是该核有足够的计算能力满足任务的性能需求
如果所有低功耗核都已饱和,则将任务调度到高性能核上
案例研究 2 — EAS在ARM Cortex-A78/A55平台上的调度示例
考虑一个4A78 + 4A55的DynamIQ平台,两个性能域:
A78域:频率范围1.0 GHz2.8 GHz,最大功耗3.5 W/核
A55域:频率范围0.5 GHz2.0 GHz,最大功耗0.5 W/核
场景:一个视频播放应用,主线程(解码)利用率40%,UI线程利用率10%,后台服务线程各5%。
EAS的调度决策:
解码线程(40%利用率):首先检查A55是否能满足。A55在2.0 GHz时的计算能力约为A78在2.8 GHz时的50%。40%利用率对A55来说意味着需要约80%的A55能力——可以满足,选择A55核,功耗约0.3 W。
UI线程(10%利用率):轻松放在A55上,功耗约0.05 W。
后台服务线程(各5%):全部放在A55上,总功耗约0.08 W。
所有A78核保持idle或进入低功耗状态(WFI/power gating)。
如果解码线程的利用率突然上升到80%(切换到4K HDR视频),EAS会重新评估:
80%利用率超出了A55的能力(需要160%的A55能力),将解码线程迁移到A78核。
A78在1.8 GHz即可满足80%的利用率需求,功耗约1.2 W。
如果将A78提升到2.8 GHz,功耗会增加到3.5 W,但由于利用率只有80%(还有余量),EAS不会选择最高频率。
整个过程中,EAS始终选择满足性能需求的最低能量方案。
EAS能量模型的详细结构
EAS的核心数据结构是能量模型(Energy Model, EM),它为每个性能域定义了一组OPP(Operating Performance Point)——即(频率, 电压, 功耗)三元组。以下是一个典型ARM平台上的能量模型示例:
| A78域(大核) | A55域(小核) | ||||||
| 频率(MHz) | 电压(V) | 功耗(mW) | 能力 | 频率(MHz) | 电压(V) | 功耗(mW) | 能力 |
| 1000 | 0.65 | 180 | 358 | 500 | 0.55 | 15 | 89 |
| 1400 | 0.72 | 350 | 501 | 800 | 0.62 | 40 | 143 |
| 1800 | 0.80 | 650 | 644 | 1200 | 0.70 | 85 | 215 |
| 2200 | 0.88 | 1100 | 787 | 1600 | 0.78 | 160 | 286 |
| 2800 | 1.00 | 2200 | 1024 | 2000 | 0.85 | 280 | 358 |
其中"能力"(capacity)是DMIPS或BogoMIPS标准化后的抽象计算能力值。EAS使用这些三元组来计算在每个OPP下运行特定利用率任务的能量消耗。
EAS调度算法伪代码
EAS的核心调度决策可以用以下伪代码描述:
// EAS调度器: 为任务task选择最优目标核心
// 输入: task (利用率util, 当前核src_cpu)
// 输出: 最优目标核 best_cpu
function eas_find_best_cpu(task, src_cpu):
best_energy = MAX_INT
best_cpu = src_cpu // 默认保持不迁移
// 遍历所有性能域 (如 A78域, A55域)
for each perf_domain pd:
// 遍历该域中的每个核心
for each cpu in pd.cpus:
// 计算如果将task放在cpu上, 系统总能量
new_util = cpu.current_util + task.util
// 找到能满足new_util的最低OPP
opp = find_min_opp(pd, new_util)
if opp == NULL:
continue // 此核无法满足性能需求
// 计算能量 = 功耗 * 执行时间
energy = opp.power * (new_util / opp.capacity)
// 加上其他核的能量 (维持当前不变)
total_energy = energy + system_energy_without(cpu)
// 考虑迁移代价
if cpu != src_cpu:
total_energy += migration_cost(src_cpu, cpu)
// 更新最优
if total_energy < best_energy:
best_energy = total_energy
best_cpu = cpu
return best_cpu迁移代价的量化模型
EAS在做迁移决策时,需要考虑迁移本身的能量和延迟成本。迁移代价可以分解为:
其中是上下文保存/恢复的能量成本(约0.52J),是目标核唤醒的能量成本(与低功耗状态深度有关),是Cache/TLB冷启动的能量成本(远大于前两项)。
Cache冷启动的量化。当线程从大核迁移到小核后,小核的L1/L2 Cache中不包含该线程的工作集。假设线程的工作集大小为字节,Cache行大小为64字节,则需要加载行。每行的加载延迟取决于数据在共享Cache层中的位置:
数据在共享L3中:约3050个周期/行,能量约0.5nJ/行
数据在主存中:约200300个周期/行,能量约5nJ/行
对于一个工作集 KB的线程,需要加载1024行。如果80%命中L3、20%需要访问主存:
延迟方面:周期 s(在2 GHz频率下)。
这意味着一次核迁移的Cache预热延迟约为1050s,这与实测数据一致。EAS通过设置迁移冷却时间(hysteresis,通常为15ms)来避免过于频繁的迁移——只有当在新核上运行的预期能效收益大于迁移代价时,才执行迁移。
迁移延迟与缓存预热
核迁移(core migration)是异构多核调度中不可避免的操作:当操作系统决定将一个线程从P-core迁移到E-core(或反过来)时,需要执行一系列的软件和硬件操作,这些操作会引入不可忽略的延迟。
核迁移的过程包括以下步骤:
(1)保存上下文。操作系统保存当前核上线程的体系结构状态,包括通用寄存器(GPR)、浮点/SIMD寄存器(FPR/SIMD)、程序计数器(PC)、状态寄存器等。在x86上还需要保存大量的MSR(Model-Specific Register)状态。上下文保存的延迟通常在0.52s左右。
(2)唤醒目标核。如果目标核处于低功耗状态(如ARM的power gating或x86的C-state),需要先将其唤醒。唤醒延迟取决于低功耗状态的深度:
C1/WFI状态:1s
C6/power gating状态:10100s(需要恢复供电和重新初始化)
(3)恢复上下文。将保存的体系结构状态恢复到目标核上。延迟与保存类似,约0.52s。
(4)缓存预热(Cache Warming)。这是核迁移中最大的隐性开销。当线程从源核迁移到目标核后,目标核的L1和L2 Cache中不包含该线程的工作集数据——所有之前在源核L1/L2 Cache中命中的访存请求,现在都会变成Cache缺失。线程需要经过一个"预热"阶段,将工作集数据逐渐加载到目标核的Cache中,在此期间性能会显著下降。
缓存预热的延迟取决于线程的工作集大小和Cache层次结构。表表 46.5估算了不同Cache层次的预热开销。
| Cache层次 | 容量 | 缺失延迟 | 典型预热行数 | 预热时间估算 |
|---|---|---|---|---|
| L1I Cache | 3264KB | 35 cycles | 200500 | 15s |
| L1D Cache | 3248KB | 35 cycles | 100300 | 0.53s |
| L2 Cache | 256KB2MB | 1015 cycles | 10005000 | 20100s |
核迁移后不同Cache层次的预热开销估算
总的迁移延迟(包括上下文切换和Cache预热)通常在50200s范围内。这意味着如果迁移过于频繁(例如每毫秒迁移一次),迁移开销将占据线程总执行时间的5%20%,严重抵消异构调度带来的能效收益。因此,操作系统调度器通常会设置一个迁移冷却时间(hysteresis),在做出迁移决策后的一段时间内不再考虑迁移,以避免"乒乓"效应。
设计提示
DynamIQ架构通过将大核和小核放在同一个簇中并共享L3 Cache,显著降低了核迁移的Cache预热开销。当线程从大核迁移到小核(或反向)时,L1/L2 Cache的数据确实会丢失,但L3 Cache中的数据仍然存在——因此迁移后的Cache缺失只需要从共享L3中获取数据(约3050个周期),而不需要访问主存(约200300个周期)。这使得DynamIQ平台上的核迁移延迟比早期big.LITTLE(簇间迁移需要通过CCI传输Cache数据)降低了约23倍。
为了进一步降低迁移延迟,一些研究提出了Cache预取迁移(prefetch-based migration)技术:在迁移发生之前,硬件提前将源核L1/L2 Cache中最近访问过的行预取到共享L3 Cache(或直接预取到目标核的L2 Cache中)。这可以将迁移后的Cache预热时间从数十微秒降低到数微秒。Apple的M系列处理器据信采用了类似的技术,因为其P-core和E-core共享一个大容量的SLC(System Level Cache),迁移时数据可以在SLC中找到。
实际案例
本节通过三个代表性案例——Intel Alder Lake/Arrow Lake、Apple M系列、ARM Cortex-X/A/E组合——展示异构多核在工业界的具体实现。这些案例涵盖了x86、ARM和定制架构三种ISA,以及桌面、移动和服务器三种应用场景。
Intel Alder Lake和Arrow Lake
Intel Alder Lake(第12代酷睿,2021年)是Intel首次在桌面处理器上引入大小核混合架构的产品,也是x86阵营中异构多核的里程碑。其后续产品Raptor Lake(第13代,2022年)和Arrow Lake(第15代,2024年)在Alder Lake的基础上持续演进。
Alder Lake的核心配置。旗舰型号i9-12900K包含8个P-core(Golden Cove微架构)和8个E-core(Gracemont微架构),P-core支持超线程(HT,每核2线程),E-core不支持超线程,总计24线程()。
Alder Lake的互联结构采用Ring Bus,将P-core、E-core和共享的L3 Cache(30 MB)连接在一起。图图 46.7展示了Alder Lake的芯片级架构。
Alder Lake的设计决策分析。
(1)P-core与E-core的面积比。在Alder Lake的Die照片分析中,一个Golden Cove P-core(含L2 Cache)的面积约为4.5 mm2,一个Gracemont E-core约为1.3 mm2(4核簇含共享L2约6 mm2)。面积比约为。这意味着1个P-core的面积可以放置约3.5个E-core——但P-core的单线程性能只比E-core高约50%(在SPEC CPU 2017 INT上)。从面积-性能的角度看,E-core的效率远高于P-core。
(2)Thread Director的调度策略。在Windows 11上,Alder Lake的Thread Director采用了如下的默认调度策略:
前台应用的高优先级线程 P-core
后台服务线程 E-core
SIMD/AVX2密集型线程 P-core(因P-core的SIMD单元更宽)
当P-core功耗接近TDP限制时,将部分线程迁移到E-core以避免节流(throttling)
(3)缓存一致性。Alder Lake的L3 Cache是包含式(inclusive)还是非包含式(non-inclusive)取决于具体的数据路径。P-core的L2 Cache采用非包含策略(L2中的数据不一定在L3中有副本),E-core的共享L2同样是非包含的。L3 Cache在整个Ring Bus上是统一编址的,通过Hash函数将地址分散到不同的L3 bank上。
Arrow Lake的演进。相比Alder Lake,Arrow Lake(2024年)做出了以下关键变化:
P-core从Golden Cove演进到Lion Cove,解码宽度从6-wide提升到8-wide,ROB从512项增加到576项
E-core从Gracemont演进到Skymont,解码宽度从4-wide提升到6-wide,成为乱序4-wide的增强版
取消P-core的超线程(HT),因为在大小核架构中E-core可以更高效地承担HT原本处理的后台任务
Lion Cove支持APX扩展(新增16个通用寄存器r16r31)和AVX-512(通过双泵256位执行)
Skymont的单线程性能已经接近两代前P-core(Skylake)的水平
采用分离式Tile架构(Compute Tile + GPU Tile + SoC Tile),通过Foveros 3D封装集成
案例研究 3 — Alder Lake中E-core性能的"意外"竞争力
Intel Alder Lake发布时,一个令业界惊讶的事实是:Gracemont E-core的单线程性能已经达到了Skylake(第6代酷睿,2015年)P-core的水平。一个面积只有1.3 mm2、功耗约3 W的效率核,性能媲美7年前面积5 mm2以上、功耗15 W以上的旗舰核心。
这一结果的原因在于:
工艺红利:Gracemont使用Intel 7工艺(约等于TSMC 7nm),而Skylake使用14nm。工艺的进步使得Gracemont可以用更小的面积实现Skylake同等规模的微架构结构。
微架构优化:虽然Gracemont的发射宽度只有4-wide(Skylake为4-wide),但6年间积累的微架构优化(更好的分支预测、更高效的Cache预取、更优的流水线划分)使其IPC在同等宽度下有显著提升。
频率提升:Gracemont的最高频率为3.7 GHz,接近Skylake的4.0 GHz(非Boost)。
这个案例说明,"效率核"并不意味着"低性能核"——随着工艺的进步,效率核的绝对性能在持续提升,最终可能达到甚至超过前几代性能核的水平。未来的趋势是:今天的P-core微架构可能成为下一代的E-core微架构基础。
Apple M系列的性能效率簇
Apple的M系列芯片(M1/M2/M3/M4,2020年至今)是ARM架构上异构多核设计的标杆之作。Apple没有使用ARM的标准Cortex核心,而是完全自研了两种核心——Firestorm/Avalanche/Everest(性能核)和Icestorm/Blizzard/Sawtooth(效率核)——并将它们集成在一个统一的片上系统(SoC)中。
Apple M1的架构。M1(2020年)包含4个Firestorm P-core和4个Icestorm E-core,组织为两个簇:
性能簇(Performance Cluster):4个Firestorm核,共享12 MB L2 Cache
效率簇(Efficiency Cluster):4个Icestorm核,共享4 MB L2 Cache
SLC(System Level Cache):16 MB的片上末级缓存,由CPU、GPU和Neural Engine共享
Apple M1的一个独特设计是簇内L2 Cache共享。与Intel Alder Lake中P-core各自拥有私有L2 Cache不同,Apple的4个P-core共享一个巨大的12 MB L2 Cache(到M4增长到16 MB以上)。这种设计有以下优势:
当只有12个P-core在活跃工作时,它们可以独占整个12 MB的L2 Cache,相当于每核6 MB以上的L2容量——远大于Intel P-core的1.25 MB私有L2。这对于Cache敏感的工作负载(如数据库、编译器)带来了显著的性能提升。
当4个P-core都在工作时,如果它们访问的数据有重叠(例如多线程编译同一个大型项目),共享L2 Cache避免了数据在多个私有L2中的冗余存储。
共享L2 Cache使得同一簇内的核间通信延迟很低——两个核可以通过L2 Cache传递数据,不需要访问更远的SLC或主存。
Firestorm P-core的微架构特色。如46.2.1 节中表表 46.2所示,Firestorm是一个8-wide解码、ROB约630项的超宽乱序核心。它的几个独特设计值得特别关注:
超大L1 Cache:L1 I-Cache 192 KB,L1 D-Cache 128 KB。这比同时代的Intel和ARM核心大24倍。超大L1 Cache可以容纳更大的工作集而不溢出到L2,降低了平均访存延迟。代价是L1 Cache的访问延迟可能比小Cache多1个周期,但Apple通过定制的Cache设计将这个额外延迟消化在流水线中。
不支持SMT:Apple选择不在P-core上实现同时多线程。理由是在大小核架构中,轻量级线程可以运行在E-core上,不需要SMT来提高P-core的利用率。去掉SMT不仅简化了微架构(不需要线程间共享和仲裁的逻辑),还避免了SMT带来的安全风险(如侧信道攻击)和单线程性能的潜在损失(共享前端带宽、TLB等资源)。
低频率高IPC设计:Firestorm的最高频率仅3.2 GHz(相比Intel/AMD的5 GHz以上),但通过更高的IPC来补偿。这种设计思路使得Apple芯片的能效极其出色——在同等性能下功耗远低于x86竞争对手。
M系列的演进。表表 46.6总结了Apple M系列芯片在核心配置上的演进。
| 芯片 | 年份 | 工艺 | P-core | E-core | 性能簇L2 | 效率簇L2 | SLC |
|---|---|---|---|---|---|---|---|
| M1 | 2020 | 5nm | 4 (Firestorm) | 4 (Icestorm) | 12MB | 4MB | 16MB |
| M1 Pro | 2021 | 5nm | 8 (Firestorm) | 2 (Icestorm) | 24MB | 4MB | 24MB |
| M1 Max | 2021 | 5nm | 8 (Firestorm) | 2 (Icestorm) | 24MB | 4MB | 48MB |
| M2 | 2022 | 5nm | 4 (Avalanche) | 4 (Blizzard) | 16MB | 4MB | 16MB |
| M3 | 2023 | 3nm | 4 (Everest-v1) | 4 (Sawtooth-v1) | 16MB | 4MB | 24MB |
| M3 Pro | 2023 | 3nm | 6 | 6 | 18MB | 4MB | 36MB |
| M4 | 2024 | 3nm | 4 (Everest-v2) | 6 (Sawtooth-v2) | 16MB+ | 4MB+ | 16MB |
| M4 Pro | 2024 | 3nm | 10 | 4 | 26MB+ | 4MB | 48MB |
Apple M系列芯片核心配置演进
从M1到M4的演进可以观察到以下趋势:
第一,P-core数量随着产品定位(标准/Pro/Max/Ultra)的提升而增加,但E-core数量保持相对稳定(26个)。这反映了Apple的设计哲学:E-core主要用于处理后台任务和轻量级工作负载,数量不需要太多;性能的扩展主要通过增加P-core来实现。
第二,SLC的容量持续增大,从M1的16 MB增长到M4 Pro的48 MB以上。SLC是Apple异构架构的关键——它作为CPU(P-core + E-core)、GPU和Neural Engine之间的共享末级缓存,既减少了各个计算单元对主存带宽的争用,也降低了核间迁移时的Cache预热开销。
第三,性能簇的L2 Cache容量也在持续增长,这与Apple追求更高IPC的设计理念一致——更大的L2 Cache意味着更低的缺失率,更少的流水线停顿。
Apple的调度机制。Apple在macOS中使用了定制的调度器来管理大小核。与Intel的Thread Director不同,Apple的调度器更多地依赖QoS(Quality of Service)标签来做调度决策:
User Interactive(QoS 33):UI主线程、动画线程 P-core,最高优先级
User Initiated(QoS 25):用户主动触发的任务(如打开文件) P-core
Default(QoS 21):一般性任务 P-core或E-core,根据负载决定
Utility(QoS 17):长时间运行的任务(如文件索引) 优先E-core
Background(QoS 9):后台维护任务 E-core
这种基于QoS标签的调度方式比Intel的硬件分类方式更加确定性——开发者可以通过API明确指定任务的QoS级别,确保关键任务运行在P-core上。缺点是需要开发者显式标记QoS,如果标记不当(例如一个CPU密集型任务被错误地标记为Background),调度器会做出次优决策。
设计提示
三种调度方案——Intel Thread Director(硬件分类)、ARM EAS(软件能量模型)、Apple QoS(应用标签)——代表了异构调度设计空间的三个极端。Intel方案的优势是对应用透明——不需要开发者做任何标记,硬件自动感知线程行为并提供调度建议。但硬件分类的精度有限(只有48个类别),且端到端决策延迟约100200s,无法捕捉快速的工作负载相位变化。ARM EAS方案的优势是精确的能量建模——它直接优化能量消耗而非性能,对移动设备的续航至关重要。但EAS依赖Linux内核的PELT利用率跟踪机制,PELT的指数衰减平均有约32ms的响应延迟,对突发性负载的响应较慢。Apple QoS方案的优势是确定性——开发者明确指定优先级,调度器不做猜测。但这要求Apple生态系统中的应用正确使用QoS API,在第三方应用支持不完善时可能出现次优调度。
设计权衡 2 — 三种异构调度方案的对比
| 特性 | Intel Thread Director | ARM EAS | Apple QoS |
|---|---|---|---|
| 决策层 | 硬件分类+OS | 纯OS | 应用+OS |
| 主要依据 | PMU计数器 | 能量模型+利用率 | QoS标签 |
| 对应用透明性 | 高(自动) | 高(自动) | 中(需标记) |
| 决策延迟 | 100200s | 1050ms | 即时 |
| 能量优化 | 间接(效率评分) | 直接(能量模型) | 间接(核分配) |
| 适应突发负载 | 中 | 慢 | 快 |
| 硬件开销 | CRQOS+HFI | 无额外硬件 | 无额外硬件 |
| OS依赖 | Win11/Linux 6.x | Linux 5.0+ | macOS/iOS |
ARM Cortex-X加A加E组合
ARM的IP核产品线为异构多核提供了最丰富的选择。ARM目前提供三个系列的CPU核心:Cortex-X系列(超大核,追求极致性能)、Cortex-A系列(大核,平衡性能与效率)、Cortex-A5xx系列(小核,追求极致效率)。SoC设计者可以根据目标应用场景自由选择核心的类型和数量组合。
从big.LITTLE到DynamIQ的架构演进。
ARM big.LITTLE(20112016年)的标准配置是一个大核簇(通常4个Cortex-A57或A72)加一个小核簇(通常4个Cortex-A53),如图图 46.8所示。两个簇各有独立的L2 Cache,通过CCI-400/CCI-500互联。这种设计的主要限制是:
簇间迁移延迟高(需要通过CCI传输Cache数据)
核组合固定为"大簇 + 小簇"的二元结构
同一簇内的核必须运行在相同频率(簇级DVFS)
DynamIQ(2017年至今)通过以下改进解决了这些问题:
将大小核放在同一个簇内,共享DSU(DynamIQ Shared Unit)中的L3 Cache
支持簇内每个核独立的DVFS(per-core DVFS),可以精细控制每个核的频率和电压
支持灵活的核组合,一个簇内最多可以包含8个核,核心类型可以任意混合
DSU提供了Snoop Filter和L3 Cache,降低了核间一致性协议的延迟
Cortex-X/A/E三级核组合。从2020年开始,ARM引入了Cortex-X系列(X1、X2、X3、X4、X925),定位为比Cortex-A7xx更高性能的"超大核"(超级性能核)。加上中间定位的Cortex-A7xx(大核)和Cortex-A5xx(小核),ARM形成了三级异构的核组合方案:
1 Cortex-X4(Prime Core):最激进的微架构,6-wide解码、ROB 320项、最高频率3.4 GHz。面积最大,功耗最高,追求极致单线程性能。用于处理延迟最敏感的前台任务。
3 Cortex-A720(Performance Core):略微缩减版的大核,与X4 ISA兼容但微架构参数略小。性能约为X4的85%90%,但面积和功耗约为X4的60%70%。用于处理多线程性能需求。
4 Cortex-A520(Efficiency Core):顺序双发射核心,性能约为X4的30%40%,但面积仅为X4的1/5,功耗仅为X4的1/8。用于后台任务和待机。
这种三级组合(1+3+4)在旗舰手机SoC中已经成为标准配置,如Qualcomm Snapdragon 8 Gen 3(1X4 + 3A720 + 4A520)和MediaTek Dimensity 9300(1X4 + 3A720 + 4A520)。
三级核的调度策略比二级核更加精细:
系统空闲或极轻负载:只有A520在运行,其余核处于power-gated状态
单线程轻负载(如消息通知):1个A520足以处理
单线程中等负载(如社交媒体浏览):1个A720,A520处理后台
单线程重负载(如游戏主线程):X4以最高频率运行
多线程重负载(如视频编辑渲染):X4 + 3A720同时工作
全核负载(如AI推理):所有核同时工作,频率根据热预算动态调节
性能分析 4 — 三级核组合的能效优势量化
以Qualcomm Snapdragon 8 Gen 3为参考,比较三级核(1X4 + 3A720 + 4A520)与等面积的同构设计。假设芯片总CPU面积预算为15 mm2(在TSMC 4nm下):
同构方案A(全大核):个A720级别核心
峰值单线程性能:1.0(以A720为基准)
峰值多线程吞吐:5.0
满载功耗:
最低空闲功耗:(WFI状态,无power gating)
三级方案B(1X4 + 3A720 + 4A520):总面积 = (略超预算,但接近)
峰值单线程性能:1.15(X4比A720约快15%)
峰值多线程吞吐:
满载功耗:
最低空闲功耗:(仅A520运行,其余power-gated)
三级方案的空闲功耗仅为同构方案的1/6,这对移动设备的待机续航至关重要。同时多线程吞吐略高(5.55 vs 5.0),峰值单线程性能也更好(1.15 vs 1.0)。
DynamIQ簇的缓存拓扑。在DynamIQ架构中,缓存的组织方式是一个重要的设计选择。DSU(DynamIQ Shared Unit)支持以下缓存拓扑选项:
私有L2 + 共享L3:每个核有私有L2 Cache(X-core通常1 MB,A-core通常512 KB,E-core通常256 KB),所有核共享DSU中的L3 Cache(416MB)。这是最常见的配置。
簇L2 + 共享L3:小核可以选择多核共享L2 Cache(类似Intel E-core的做法),进一步节省面积。
无L3:在低端配置中可以去掉L3 Cache,只保留私有L2,通过NoC直接访问内存或SLC。这适用于面积极度受限的IoT SoC。
DSU中的L3 Cache采用了Snoop Filter来优化缓存一致性协议的效率。Snoop Filter记录了每个Cache行在各个核的L1/L2中的存在状态——当一个核需要获取另一个核持有的数据时,Snoop Filter可以精确地将snoop请求只发送到持有该数据的核,而不需要广播到所有核。这在8核的DynamIQ簇中显著降低了一致性协议的功耗和延迟。
硬件描述 3 — DynamIQ Shared Unit (DSU) 的硬件结构
DSU-120(ARM最新的DynamIQ共享单元)的关键规格:
支持最多8个核(任意X/A/E组合)
L3 Cache容量:216MB,可配置关联度
Snoop Filter:独立于L3 Cache,可追踪L3容量24倍的地址范围
支持MOESI一致性协议
支持per-core独立时钟域(每个核可以独立调频,不受其他核影响)
支持per-core独立电源域(每个核可以独立power gate)
连接接口:AMBA ACE/CHI协议,与CMN-700/CMN-S3等NoC互联
DSU本身的面积在TSMC 4nm下约为0.51.0mm(不含L3 Cache SRAM),L3 Cache SRAM的面积约为每MB 0.30.5mm。
异构多核的高级话题
本节讨论异构多核设计中几个重要的高级话题,包括异构一致性协议、功耗管理策略、以及异构多核的未来趋势。
异构缓存一致性的挑战
在异构多核系统中,缓存一致性协议面临独特的挑战。大核和小核的Cache层次结构不同(大小、关联度、访问延迟都不同),但一致性协议必须保证所有核看到的内存视图是一致的。
延迟不对称问题。当P-core和E-core同时访问同一个Cache行时,一致性协议中的snoop请求和响应延迟取决于发起方和响应方的核类型。P-core的L1/L2 Cache通常有更低的访问延迟(得益于更先进的SRAM设计和更短的关键路径),因此P-core响应snoop请求的速度比E-core更快。协议的超时机制和仲裁逻辑需要考虑这种延迟不对称性。
带宽不对称问题。P-core通常有更高的Cache Fill带宽(更多的未完成缺失(outstanding miss)队列,如MSHR),因此在争用共享L3 Cache或内存带宽时,P-core可能"饿死"E-core。一些设计通过QoS机制对不同核的带宽进行公平分配——例如ARM的MPAM(Memory Partitioning and Monitoring)允许为每个核或每组核分配独立的Cache和带宽配额。
Cache行大小的兼容性。在某些异构设计中,大核和小核可能使用不同的Cache行大小(例如大核使用128字节行以提高预取效率,小核使用64字节行以节省面积)。这种情况下,一致性协议需要处理行大小不匹配的问题——通常通过在共享Cache层采用较大的行大小,并在snoop时进行行内偏移转换来解决。不过在实际产品中,大小核通常使用相同的Cache行大小(64字节)以简化一致性协议的设计。
异构功耗管理
异构多核系统的功耗管理比同构多核更加复杂,因为大核和小核的功耗特性差异很大。一个有效的功耗管理策略需要在全芯片层面协调大核、小核、共享缓存、互联和内存控制器的功耗状态。
Per-core DVFS。在DynamIQ架构中,每个核可以独立调节频率和电压(回调第 49.0 章中关于DVFS硬件实现的详细讨论)。这意味着当只有一个P-core在运行高负载时,它可以以最高频率和电压运行,而其他核保持在最低频率或关闭状态。Per-core DVFS的硬件开销包括每个核需要独立的电源域(需要片上LDO或独立的PMIC通道)和独立的PLL(锁相环,用于生成核时钟)。
Per-core DVFS对异构多核的能效优化至关重要。考虑以下场景:在一个1X4 + 3A720 + 4A520的SoC中,如果没有per-core DVFS(即同一簇内所有核必须运行在相同频率),当X4需要以3.4 GHz运行来处理前台游戏线程时,同簇的3个A720核也被迫运行在3.4 GHz——即使它们只在处理轻量级的物理模拟任务,实际只需要1.5 GHz。这种频率的"被迫提升"导致了大量不必要的功耗浪费:,频率从1.5 GHz提升到3.4 GHz(2.27倍),加上伴随的电压提升(从0.7V到0.95V,1.36倍),功耗增加到约倍。Per-core DVFS允许X4独立运行在高频高压,A720保持在低频低压,避免了这种浪费。
Power Gating。当一个核处于空闲状态时,仅降频(clock gating)可能不够——核中的漏电流仍然存在。Power gating通过切断核的供电来消除漏电流,将功耗降至几乎为零。但power gating的进入和退出延迟较高(10100s),因此只适用于预计核将长时间空闲的情况。在异构系统中,典型的power gating策略是:当系统负载很轻时,power gate所有P-core,只保留E-core运行;当负载突增时,快速唤醒P-core。
Power gating的进入/退出延迟在不同工艺节点下有显著差异:
| 工艺节点 | 进入延迟 | 退出延迟 | 漏电流节省 |
|---|---|---|---|
| 16/14nm FinFET | 5s | 10s | 85%90% |
| 7nm | 8s | 15s | 88%93% |
| 5nm | 10s | 20s | 90%95% |
| 3nm | 15s | 30s | 92%96% |
随着工艺缩小,漏电流占总功耗的比例增加(从14nm的约20%增长到3nm的约35%40%),power gating的节能效果更加显著。但退出延迟也在增加,因为更先进工艺的电源网络设计更复杂,恢复稳定供电需要更长的时间。
热预算动态分配。在一个芯片上,大核和小核共享同一个热预算(TDP)。当P-core满载运行产生大量热量时,热传导可能影响到相邻的E-core区域。先进的热管理策略会根据实时温度传感器的读数动态调整核的频率和功耗分配——例如当P-core区域温度接近热限制时,降低P-core的频率并将部分负载迁移到温度较低的E-core上。Intel的Thread Director在HFI能力表中也会反映温度引起的核能力变化——当一个P-core因过热而被降频时,其HFI性能指标会下降,引导操作系统将线程迁移到其他未过热的核上。
硬件描述 4 — 异构功耗管理的硬件基础设施
异构多核的功耗管理依赖以下硬件基础设施(更详细的讨论见第 49.0 章):
片上温度传感器:每个核心至少配备12个温度传感器(通常是数字温度传感器或环振荡器温度传感器),采样频率约110kHz,精度约1C
电流传感器:通过片上电流镜或电阻分压器测量每个电源域的瞬时电流,用于实时功耗估算
PMIC接口:每个独立电源域(per-core或per-cluster)连接到外部PMIC(Power Management IC)的一个通道,通过I2C/SPI/SPMI总线控制电压和使能
频率控制器:每个独立时钟域的PLL/DPLL,支持在数十到数百纳秒内切换频率挡位
Power Controller(功耗控制器):集中式的硬件状态机(通常位于SoC的"always-on"电源域中),协调所有核心和子系统的功耗状态转换
以Qualcomm Snapdragon 8 Gen 3为例,其功耗管理子系统包含约50K100K门的专用硬件逻辑(不含PMIC),支持最多12个独立电源域的管理。
未来趋势与展望
异构多核是处理器设计的长期趋势。展望20252030年,以下几个方向值得关注。
(1)更多层次的异构。目前的主流设计采用二级(P+E)或三级(X+A+E)异构。未来可能出现四级甚至更多层次的异构——例如在三级CPU核心的基础上,进一步集成专用加速器核心(如NPU、信号处理单元、密码学引擎等),形成"通用核 + 专用加速器"的深度异构架构。RISC-V的模块化ISA设计使得这种深度异构更加自然——每个核可以实现不同的ISA扩展组合,针对特定工作负载进行优化。
(2)自适应核设计。传统的大小核是在设计时固定的——一个核要么是大核,要么是小核,不能在运行时改变。未来的研究方向是自适应核(adaptive core或morphable core),通过在运行时动态开启或关闭微架构组件(如额外的解码通道、发射端口、Cache bank)来在"大核模式"和"小核模式"之间切换。这种设计可以在单线程高性能需求时变成"大核",在多线程或低功耗需求时变成"小核",从而更灵活地适应工作负载的变化。
(3)Chiplet异构集成。Chiplet(小芯片)技术为异构多核开辟了新的集成路径。不同类型的核可以在不同的工艺节点上制造(例如P-core使用3nm先进工艺追求高频率,E-core使用6nm成熟工艺降低成本),然后通过先进封装技术(如EMIB、Foveros、CoWoS等)集成在同一个封装中。Intel的Arrow Lake和Meteor Lake已经采用了这种Chiplet架构——CPU Compute Tile(P-core + E-core)和SoC Tile在不同的工艺节点上制造。
(4)软硬件协同优化。异构多核的效率高度依赖软件的支持。未来的编译器和运行时系统可能具备更强的异构感知能力——例如编译器可以自动分析代码的串行/并行特征和计算密度,生成针对不同核类型优化的代码版本;运行时系统可以基于实时的性能监控数据动态选择在哪种核上运行哪个代码版本。这种软硬件协同优化可以进一步释放异构多核的性能潜力。
设计提示
异构多核设计的核心哲学可以用一句话概括:用合适的核做合适的事(right core for the right job)。在功耗受限的世界里,没有一种核心设计能够同时在所有工作负载上达到最优——大核在单线程性能上占优,小核在能效上占优,专用加速器在特定任务上占优。异构多核的本质是承认这种多样性,并通过灵活的调度机制在不同场景下选择最合适的计算资源。
异构多核的性能建模
为了在设计阶段指导大小核的配置选择,需要建立准确的异构多核性能模型。本节讨论几个关键的建模方法。
Hill-Marty模型的扩展
46.1.2 节中介绍的Hill-Marty模型是一个简化的分析框架。在实际设计中,需要对该模型进行以下扩展。
(1)多类型核的建模。将二级异构(大核 + 小核)扩展到三级异构(X + A + E)。设芯片总面积为,X-core面积为、性能为,A-core面积为、性能为,E-core面积为、性能为。设配置为个X-core、个A-core、个E-core,则面积约束为:
串行阶段使用最强的X-core执行,并行阶段使用所有核执行,加速比为:
设计者的目标是在式 (46.8)的约束下最大化式 (46.9)的加速比。
(2)功耗约束的引入。实际设计不仅受面积约束,还受功耗约束。设每种核的峰值功耗分别为、、,总功耗预算为,则需要满足:
在面积和功耗的双重约束下,最优的核配置通常不是面积约束或功耗约束单独确定的,而是两个约束中更紧的那个决定的。对于移动设备,功耗约束通常更紧(芯片面积可以做得较大,但电池和散热限制了总功耗);对于服务器,面积约束可能更紧(功耗预算较充裕,但芯片面积受限于良率和制造成本)。
工作负载特征分析
异构调度的效果取决于工作负载的特征。不同的工作负载在以下几个维度上有不同的需求:
ILP(指令级并行度):高ILP的工作负载(如编译器、数据库查询优化)受益于大核的宽发射和深乱序窗口;低ILP的工作负载(如链表遍历)在大核上的IPC提升有限。
内存密集度:高Cache缺失率的工作负载(如图数据库、随机访问)在大核上的IPC被内存延迟限制,大核相对于小核的优势缩小——因为此时性能瓶颈在内存系统而非核心微架构。
SIMD利用率:使用SIMD/向量指令的工作负载在大核上有显著优势(更宽的SIMD单元,如512位 vs 128位)。
分支密集度:高分支密集度的工作负载受益于大核更精确的分支预测器。
理想的调度器应该根据这些维度的实时观察来决定每个线程运行在哪种核上。Intel的Thread Director正是试图通过硬件监控这些维度来实现自动分类的。
性能分析 5 — 工作负载类型对大小核性能差距的影响
以下数据来自公开的基准测试分析(基于ARM Cortex-X4 vs A520平台),展示不同类型工作负载中大核相对于小核的性能优势比:
| 工作负载类型 | X4/A520性能比 | 瓶颈所在 |
|---|---|---|
| 整数计算密集(Dhrystone) | 3.0 | ILP/频率 |
| 浮点计算密集(Linpack) | 3.5 | FPU宽度/频率 |
| SIMD密集(NEON向量化) | 4.0 | SIMD宽度 |
| Cache友好型(矩阵乘法) | 3.2 | Cache/计算平衡 |
| Cache不友好型(随机访问) | 1.5 | 内存延迟(核心无关) |
| 分支密集型(解释器) | 2.8 | 分支预测器精度 |
从上表可以看出,当工作负载是内存延迟受限时(Cache不友好型),大核相对于小核的优势缩小到仅1.5倍——因为此时两种核都在等待内存,核心微架构的差异被内存延迟"淹没"了。在这种情况下,使用小核运行这类工作负载的能效优势更为显著。
本章小结
本章系统地讨论了大小核与异构多核处理器的设计原理和实现。核心要点总结如下:
(1)暗硅与异构动机。Dennard缩放定律的终结导致了暗硅问题——芯片上不可能同时激活所有晶体管。功耗-性能的非线性关系()使得在相同的功耗预算下,"少量大核 + 大量小核"的异构设计比"全部大核"或"全部小核"的同构设计更加高效。
(2)异构Amdahl定律。Hill-Marty模型将Amdahl定律推广到异构场景,证明了在程序存在串行瓶颈()的情况下,异构设计的加速比显著优于同构设计。大核加速串行阶段,小核提供并行吞吐,两者互补。
(3)大核vs小核微架构。大核追求极致的单线程IPC(宽发射、深乱序、大Cache、精密分支预测),小核追求最优的每瓦性能(窄发射、浅流水线、小Cache)。两种核在面积上通常差34倍,在功耗上通常差510倍,在单线程性能上差1.52.5倍。
(4)ISA兼容性。大小核必须支持兼容的ISA以实现透明的线程迁移。在x86上这导致了AVX-512兼容性的权衡(Alder Lake选择禁用AVX-512);在ARM上DynamIQ规范要求簇内ISA一致;在RISC-V上模块化ISA提供了更灵活的兼容性方案。
(5)调度机制。Intel的Thread Director通过CRQOS硬件分类引擎和HFI接口实现硬件辅助调度;ARM的EAS通过软件能量模型实现能量感知调度;Apple通过QoS标签实现确定性调度。三种方案各有优劣,代表了硬件主导、软件主导和应用主导三种不同的设计哲学。
(6)迁移开销。核迁移涉及上下文保存/恢复和Cache预热,总延迟约50200s。DynamIQ通过共享L3 Cache降低了迁移时的Cache预热开销。过于频繁的迁移会抵消异构调度的收益,需要通过迁移冷却时间来控制。
(7)实际案例。Intel Alder Lake/Arrow Lake(8P+8E/16E,Ring Bus,Thread Director),Apple M系列(4P+4E/6E,簇内共享L2,SLC,QoS调度),ARM DynamIQ(X+A+E三级核,DSU共享L3,per-core DVFS)代表了x86和ARM阵营中异构多核的最佳实践。
异构多核已经从一个学术概念发展为工业界的主流设计范式。随着暗硅问题的加剧和工作负载多样性的增加,异构设计的重要性只会越来越高。未来的处理器将在更多层次上实现异构——不仅包括CPU核心的大小异构,还包括CPU+GPU+NPU+DSP等计算单元的功能异构,以及通过Chiplet技术实现的跨工艺节点异构集成。第 49.0 章将详细讨论功耗管理的微架构机制——包括DVFS、Clock Gating和Power Gating的硬件实现——这些技术是大小核功耗管理的基础设施。
设计权衡 3 — 从大小核到多核互连——前向桥接
本章讨论了如何在一个芯片上组织不同类型的核心。但一个关键问题尚未解答:这些核心之间如何高效地通信?第 47.0 章将深入讨论多核互连(interconnect)的设计——从Ring Bus到Mesh NoC,从MOESI一致性协议到Snoop Filter的硬件实现。
在异构多核系统中,互连面临独特的挑战:大核与小核的带宽需求不对称(大核需要更高的Cache Fill带宽),不同核簇之间的延迟不对称(同簇内的核间通信远快于跨簇通信),以及核迁移时的Cache数据传输需要互连提供足够的瞬时带宽。DynamIQ的DSU和Intel的Ring Bus/Mesh都是针对这些异构挑战的互连解决方案——第 47.0 章将详细分析它们的设计权衡。
从更宏观的视角看,大小核的设计(本章)和互连的设计(第 47.0 章)共同构成了多核处理器"核心+通信"的两大支柱。一个优秀的大小核设计如果搭配了不合适的互连拓扑,其性能潜力将无法充分发挥。