前言
与GPU动辄成千上万个核不同,CPU核数目前仍处于百核级别。AMD基于最新Zen 5架构发布的产品中,核数最多的型号AMD EPYC™ 9965也只有192个核。
那么,为什么CPU不能有更多的核呢?
这是一个系统工程的问题,涉及到多种因素的权衡。本文将结合AMD Zen 5 EPYC 9005系列(下文简称Zen 5)的架构,从CPU制造流程讲起,带读者理解现代CPU架构的同时,解释为什么CPU不能有更多的核。
从CPU制造流程讲起
CPU的制造过程可以简单总结如下:
晶圆是制作CPU的主要材料,它由圆柱形单晶硅锭(用直拉法从熔融后的高纯度多晶硅中拉出)切片而成,目前主流的晶圆尺寸为12英寸,约7万mm²。
一片晶圆能够光刻若干个芯片,我们把这种未经封装的单个功能芯片称为Die(裸片)。我们很容易想到,如果把Die设计得足够大,一片晶圆只光刻一个Die,那么单Die的核数就能更多了。
然而,受光刻技术限制,当前光刻掩膜版最大面积约858mm²,一旦超过这一阈值,需通过多次曝光拼接完成光刻,但会导致工艺复杂度增加和良率显著下降。
另外,即使在最大光刻掩膜版面积内,Die的面积也不是越大越好。通常来说,晶圆都有一定的缺陷密度,考虑极限场景,晶圆面积=光刻掩膜版最大面积,如下图所示,Die的面积越小,良品率就越高。
所以,出于成本的考虑,追求更高的良品率会限制芯片的面积,从而限制了芯片核的数量。
既然单块芯片面积受限,那能不能把多块小芯片组合成一块大芯片呢?
当然可以!
Chiplet架构:把小芯片组合起来
Chiplet是一种将传统单片式系统级芯片(SoC)拆分为多个功能模块化小芯片(Die),再通过先进封装技术(如2.5D/3D堆叠)互联集成的设计架构。其核心思想是通过标准化接口将不同工艺节点、不同功能的Die灵活组合,形成高性能异构系统芯片。
所以,Chiplet既突破了传统单芯片的物理极限(858mm²),也兼顾架构设计的灵活性。
Chiplet架构下,Die通常会被分成CPU Die(CCD)和IO Die(IOD)两类。
- CPU Die负责高频计算,集成CPU Core(核)、高速缓存(L2/L3 Cache)等,采用先进的工艺,提供更高的计算密度;
- IO Die负责资源管控,集成内存控制器、PCIe总线、SATA接口等,采用成熟的工艺,更好保证信号的完整性。
AMD Zen 5采用Chiplet架构设计,一块完整的芯片包含多个CPU Die和1个IO Die。其中,CPU Die采用3nm/4nm工艺,IO Die采用6nm工艺。
虽然Chiplet理论上支持,但通常不会为了得到更多的核而无限制地扩展CPU Die。比如,AMD Zen 5一个CPU Die上有8个核,当前最多支持集成16个CPU Die,共计128核。
其中原因主要受以下几点限制:
- 功耗和散热问题。集成更多的CPU Die意味着更高的功耗,散热可能成为问题,会导致芯片温度过高,影响晶体管的寿命。
- 内存带宽受限。一块芯片上通常只有1个IO Die,其DDR内存通道数是固定的,比如,AMD Zen 5的内存通道数为12。更多的核意味着内存带宽竞争更大,平均单核内存带宽更低。
- 缓存一致性机制更复杂。虽然可以通过增加IO Die的数量来提升内存带宽,但这同样受功耗和散热问题限制,而且更多的CPU Die会导致缓存一致性机制过于复杂,得不偿失。
在拥有一定面积的芯片上,既然无法通过扩展更多的CPU Die来增加核数,那么能否提升单个CPU Die的核数呢?
当然可以!通过把核做得更小,就能让一定面积下的CPU Die拥有更多的核。
更小的核
以AMD Zen 5 EPYC 9005系列为例。
除了前文提到的8核/Die的Zen 5 core,还有16核/Die的Zen 5C core。
它们之间的一些参数如下:
Zen 5 core | Zen 5C core | |
---|---|---|
单Die核数 | 8核 | 16核 |
L2 Cache大小 | 1MB | 1MB |
共享L3 Cache大小 | 32MB | 32MB |
平均单核L3 Cache大小 | 4MB | 2MB |
基础频率 | 2.6-4.2GHZ | 2.1-2.3GHZ |
最高睿频频率 | 5GHZ | 3.7GHZ |
从上述对比可以看出,Zen 5C的核数更多,但单核性能更弱。这很好理解,每个核都由各种单元组成,如下展示了Zen 5的微架构图:
为了把核做得更小,核内各单元的尺寸/电路必然会缩小,性能也就更低了。比如,TAGE分支预测器的BTB容量变小,会导致分支预测准确率下降,从而影响单核性能。
所以,单CPU Die的核数也不能太多,否则单核性能太低,也没有意义。
另外,GPU之所以能够做到成千上万个核,是因为GPU的设计理念上是并行性和吞吐量有限,要求同时处理数千个相似任务,这使得GPU的核极度简化,仅保留基础算术逻辑单元(ALU)和少量高速缓存。所以GPU的核能够做到足够小!
而CPU的设计理念是追求通用性和灵活性,要求处理复杂的逻辑控制、分支预测、乱序执行等通用计算任务,所以核无法做得很小。
既然单CPU Die核数不能太多,单CPU上的CPU Die也不能太多,那么能不能把多个CPU互联起来,形成一个拥有更多核的服务器呢?
当然可以!
多路CPU系统
如果一块主板上只有1个CPU,通常会把它称为单路(Single-Socket)CPU系统,有2个CPU则称为双路(Two-Socket)CPU系统,以此类推,还有四路CPU、八路CPU等。
如今,单路和双路都是常见的配置,比如,AMD Zen 5提供了单路和双路两种配置。
在多路CPU系统中,CPU之间通过IO Die上的高速互联接口完成互联。AMD的高速互联协议为Infinity Fabric,如下展示了AMD Zen 5在双路配置下的互联结构图:
AMD Zen 5的IO Die中,Infinity Fabric高速互联接口与PCIe接口用的是同一个物理接口,所以这里存在计算和IO的权衡。多路CPU有着更多的计算算力,但更少的IO扩展接口。
类似地,多路CPU系统中的路数也不能无限扩展,整机功耗和散热问题、互联总线的带宽和时延瓶颈、更复杂的缓存一致性协议等都是阻碍因素。
还要考虑业务负载
到目前为止,我们都在围绕成本、物理限制、技术复杂度等维度来讨论。
假如我们克服了这些问题,并生产出一款超多核的CPU型号,那么它就一定能够很受欢迎吗?
未必!我们忽略了最重要的因素,业务负载。
比如,对Redis来说,它是一个单线程的业务负载,单实例下,给它再多的核也用不上,它需要的是更强的单核性能。
比如,对IO密集的存储型业务来说,它不需要很强的CPU计算性能,需要的是更大的IO带宽和更低的IO时延。
比如,对云基础设施提供商来说,一台整机服务器上通常运行着多个容器业务。多路CPU系统确实能够减少机柜的数量,从而降低成本。但考虑到系统的可靠性,他们可能更偏爱核数更低的单路CPU服务器,因为单路CPU下,单机故障的业务影响范围会更小。
所以,“为什么CPU不能有更多的核?”这是一个系统工程的问题,要经过多方面因素的综合权衡。
更好的方法是为用户提供多种选择,让用户能够根据自身的业务需求,选取合适的CPU型号。
如下为AMD Zen 5 EPYC 9005系列的全部型号,多达27种:
总结
本文主要针对“为什么CPU不能有更多的核?”进行了讨论,总结起来,主要有以下几个原因:
- 芯片本身的物理限制。更大面积的芯片往往会有着更低的良品率,成本会急剧上升;而且功耗会更大,散热很可能成为问题,从而影响晶体管的寿命。
- 带宽和时延限制。随着核数增多,内存带宽、高速缓存带宽、CPU的高速互联带宽都会成为瓶颈。
- 缓存一致性协议限制。更多的核数,特别是在多路CPU系统下,缓存一致性会变得非常复杂,为了追求更多的核数,而让系统复杂性急剧增大,可能会得不偿失。
- 业务负载不一定合适。技术服务于业务,很多业务并不需要很多的核,所以业务合适最重要。
总之,世上没有有一款完美的CPU,系统设计,一切尽在权衡!
文章配图
可以在 用Keynote画出手绘风格的配图 中找到文章的绘图方法。
参考
[1] 5TH GEN AMD EPYC™ PROCESSOR ARCHITECTURE WHITE PAPER, AMD
[2] AMD EPYC™ 9005 SERIES PROCESSORS DATASHEET, AMD
[3] CPU 是如何制造出来的, 爱涂鸦啊
[4] 现代分支预测:从学术界到工业界, Easton Man
[5] 深入理解分支预测原理,揭开AMD Zen 5的高性能秘诀, 元闰子
[6] DeepSeek
[7] 秘塔AI搜索
更多文章请关注微信公众号:元闰子的邀请