AMD Zen CPU 架构
前言
本文先介绍AMD Zen 架构,结合前一篇文章《CPU的生产和概念》一起来看效果会更好,在CPU的生产和概念中主要是以Intel方案来介绍,CPU的生产和概念中的 多核和多个CPU方案2 就是指的AMD Zen2架构。
Zen1 和 Intel 还比较像,只是一个CPU会封装多个小的Die来得到多核能力,导致NUMA node比较多。
AMD 从Zen2开始架构有了比较大的变化,Zen2架构改动比较大,将IO从Core Die中抽离出来,形成一个专门的IO Die,这个IO Die可以用上一代的工艺实现来提升成品率降低成本。剩下的core Die 专注在core和cache的实现上,同时可以通过最新一代的工艺来提升性能。并且在一个CPU上封装一个 IO Die + 8个 core Die这样一块CPU做到像Intel一样就是一个大NUMA,但是成本低了很多,也许在云计算时代这么搞比较合适。当然会被大家笑话为胶水核(用胶水把多个Die拼在一起),性能肯定是不如一个大Die好,但是挡不住便宜啊。这估计就是大家所说的 AMD YES!吧
比如Core Die用7nm工艺,IO Die用14nm工艺,一块CPU封装8个Core Die+1个IO Die的话既能得到一个多核的CPU成本有非常低,参考 《CPU的生产和概念》中的良品率和成品部分。
介绍完AMD架构后,会拿海光7280这块CPU(实际是OEM的AMD Zen1 架构,一块芯片封装4个die)和 Intel的CPU用MySQL 来对比一下实际性能。
网上Intel CPU架构、技术参数等各种资料还是很丰富的,但是AMD EPYC就比较少了,所以先来学习一下EPYC的架构特点。
AMD EPYC CPU演进路线
后面会针对 第二代的 EPYC来做一个对比测试。
AMD EPYC CPU Families:
Family Name | AMD EPYC Naples | AMD EPYC Rome | AMD EPYC Milan | AMD EPYC Genoa |
---|---|---|---|---|
Family Branding | EPYC 7001 | EPYC 7002 | EPYC 7003 | EPYC 7004? |
Family Launch | 2017 | 2019 | 2021 | 2022 |
CPU Architecture | Zen 1 | Zen 2 | Zen 3 | Zen 4 |
Process Node | 14nm GloFo | 7nm TSMC | 7nm TSMC | 5nm TSMC |
Platform Name | SP3 | SP3 | SP3 | SP5 |
Socket | LGA 4094 | LGA 4094 | LGA 4094 | LGA 6096 |
Max Core Count | 32 | 64 | 64 | 96 |
Max Thread Count | 64 | 128 | 128 | 192 |
Max L3 Cache | 64 MB | 256 MB | 256 MB | 384 MB? |
Chiplet Design | 4 CCD’s (2 CCX’s per CCD),4 Die | 8 CCD’s (2 CCX’s per CCD) + 1 IOD ,9 Die | 8 CCD’s (1 CCX per CCD) + 1 IOD | 12 CCD’s (1 CCX per CCD) + 1 IOD |
Memory Support | DDR4-2666 | DDR4-3200 | DDR4-3200 | DDR5-5200 |
Memory Channels | 8 Channel | 8 Channel | 8 Channel | 12 Channel |
PCIe Gen Support | 64 Gen 3 | 128 Gen 4 | 128 Gen 4 | 128 Gen 5 |
TDP Range | 200W | 280W | 280W | 320W (cTDP 400W) |
命名规范:
Zen1
hygon 5280封装后类似下图(一块CPU封装了2个Die,还有封装4个Die的,core更多更贵而已)
或者4个Die封装在一起
Zen1 Die
下面这块Die集成了两个CCX(每个CCX四个物理core), 同时还有IO接口
Quad-Zeppelin Configuration, as found in EPYC.
Zen CPU Complex(CCX)
hygon 5280使用这个结构, There are 4 cores per CCX and 2 CCXs per die for 8 cores.
- 44 mm² area
- L3 8 MiB; 16 mm²
- 1,400,000,000 transistors
封装后的Zen1(4Die)
4个Die的内部关系
详实数据和结构
Zen2 Rome
Zen2开始最大的变化就是将IO从Core Die中抽离出来,形成一个专门的IO Die。封装后如下图:
以上结构的CPU在2路服务器下的内部结构:
跨socket的内存访问的数据流跟互联有关,如上图标示,比如从左边的CCD0到右边的CCD0的内存,大概需要经过10跳。
node0 | node1 | node2 | node3 | node4 | node5 | node6 | node7 | |
---|---|---|---|---|---|---|---|---|
node0 | 89.67 | 99.357 | 108.11 | 110.54 | 181.85 | 187.71 | 179.507 | 179.463 |
node1 | 90.983 | 111.65 | 106.11 | 188.77 | 194.7 | 188.179 | 189.512 | |
node2 | 91.2 | 98.272 | 180.95 | 190.53 | 184.865 | 186.088 | ||
node3 | 89.971 | 186.81 | 193.43 | 192.459 | 192.615 | |||
node4 | 89.566 | 97.943 | 108.19 | 109.942 | ||||
node5 | 90.927 | 111.123 | 108.046 | |||||
node6 | 91.212 | 103.719 | ||||||
node7 | 89.692 |
上面表格是3 xGMI互联的情况下,测试出来的访存时延,可以看到在某些node间访存时延会有一些的突增,不够均匀,比如node1到node 5、node2到node5;上述latency跨socket如果用默认BIOS值在280左右
以下表格是厂商默认值和优化值对比(用优化值能将latency从280下降到180左右):
参数 | 可选项 | 默认值 (milan:V260 rome:V26.02) | 优化值 | 备注 |
---|---|---|---|---|
xGMI Link Width Control | Manual/Auto | Auto | Manual | |
xGMI Force Link Width Control | Unforce/Force | Unforce | Force | |
xGMI Force Link Width | 0/1/2 | 2 | 2 | 2 = Force xGMI link width to x16 |
3-link xGMI max speed | [00]6.4Gbps …… [0A]16Gbps ……[13]25Gbps *[FF]Auto | Auto | 16Gbps | IEC的rome和milan都是16Gbs,其他产品要与硬件确认 |
另外发现启用透明大页后测试内存时延能降低20%(通过perf发现没开THP的tlb miss很高)
Zen2 Core Complex Die
- TSMC 7-nanometer process
- 13 metal layers[1]
- 3,800,000,000 transistors[2]
- Die size: 74 mm²
- CCX size: 31.3 mm², 4core per CCX // 16M L3 perf CCX
- 2 × 16 MiB L3 cache: 2 × 16.8 mm² (estimated) // 中间蓝色部分是L3 16M,一个Die封装两个CCX的情况下
在Zen2/Rome架构中,一个CCD由两个CCX构成,一个CCX包含4个物理核,共享16MB的L3 cache。
Zen3
在Zen3/Milan架构中,抛弃了两个CCX组成一个CCD的概念,一个CCD直接由8个物理核构成,共享整个Die上的32MB L3 cache。
再就是可以选择增加 v-cache,3D封装更大的L3 cache,如下图,一个CCD 默认是32M L3,但是 v-cache 可以增加一块 64 MB的L3进去(TSMC的SOIC封装在一起),这块 L3 Die 可以单独生产
Milan-X芯片面积及定价策略
TDP (W) | Cores | Base Freq (GHz) | Max. Freq (GHz) | L3(MB) | Channels DDR | Max DDR Freq | PCIeLane | |
---|---|---|---|---|---|---|---|---|
7763 | 280 | 64 | 2.45 | 3.5 | 256 | 8 | 3200 | x128 |
7773X | 280 | 64 | 2.2 | 3.5 | 768 | 8 | 3200 | x128 |
比如上表中 7773X 相对 7763 封装了更大的L3,同时降低了主频来控制发热
下表为标品的芯片面积和售价数据,对比可以看出,扩容2倍L3的芯片整体硅面积增加了31%,售价提升了12%
area mm^2 | price 1KU($) | |
---|---|---|
7763 | IOD 416+CCD 81*8=1064 | 7890 |
7773x | +add L3D 41*8=1392 | 8800 |
AMD PPOG文档中摘录的关于CPU的micro-bench相关的数据:
1,访存时延上, Vcache普遍有2~6ns的延迟优化;访存带宽上二者基本一致;
2,spec CPU上,整形跑分基本持平,vcache的容量增加部分被主频的降低抵消;浮点跑分提升10%,mem-intensive类型的HPC/AI类应用,将得到比较明显的提升;
3,spec JBB上,vcache的改善明显,critical和max jOPS均得到了10%以上的提升;
Workloads | 7763 | 7773X vcache |
---|---|---|
NPS4 Core0 Node0 (ns) | 85 | 83 |
NPS4 Core0 Node1 (ns) | 97 | 92 |
NPS4 Core0 Node2 (ns) | 106 | 100 |
NPS4 Core0 Node3 (ns) | 109 | 104 |
STREAM Add (GBps) | 100% | 99.9% |
STREAM Copy(GBps) | 100% | 99.9% |
STREAM Scale(GBps) | 100% | 100.1% |
STREAM Triad(GBps) | 100% | 99.8% |
SPEC CPU2017 FP Rate Base | 100% | 109.8% |
SPEC CPU2017 Int Rate Base | 100% | 100.9% |
SPECjbb2015-MultiJVM Critical-Jops | 100% | 111.6% |
SPECjbb2015-MultiJVM Max-jOPS | 100% | 116.7% |
Zen1 VS Zen2
Here is what the Naples and Rome packages look like from the outside:
numa
zen1 numa distance:
hygon numa distance:
1 | # numactl -H //Zen1 hygon 7280 2 socket enable die interleaving |
看完这些结构上的原理,让我们实际来看看AMD的性能怎么样。
hygon 7280 PCM数据
hygon pcm(performance counter monitor) 工具由芯片公司提供
1 | [root@hygon3 16:58 /root/PCM] |
在本地启动benchmarksql压力,并将进程绑定到0-8core,然后采集到数据:
1 | ./pcm.x -r -topdown -i=1 -l2 |
Apple M1
The M1
The critically-acclaimed M1 processor delivers:
- 16 billion transistors and a 119mm squared-die size.
- 4 performance cores, 12MB L2 Cache.
- 4 efficiency cores ith 4MB L2 cache.
- 8 GPU Cores.
- 16GB DDR4x memory at 68GB/s.
The M1 Pro
The M1 Pro takes this higher, with:
- 33.7 billion transistors on a 240mm squared die.
- 8 performance cores, 24MB L2 Cache.
- 2 efficiency cores with 4MB L2 cache.
- 16 GPU Cores.
- 32GB DDR5 memory at 200GB/s.
对比下 i9-12000,i9也有GPU只是没有说多少个,它的GPU频率在0.3到1.55GHz之间
ISA | x86-64 (x86) |
---|---|
Microarchitecture | Alder Lake, Golden Cove, Gracemont |
Process | Intel 7 |
Die | 215.25 mm²” 20.5 mm × 10.5 mm |
MCP | No (1 dies) |
Cores | 16 |
Threads | 24 |
l1$ size | 0.75 MiB (768 KiB, 786,432 B, 7.324219e-4 GiB) + and 0.625 MiB (640 KiB, 655,360 B, 6.103516e-4 GiB) + |
l1d$ size | 0.25 MiB (256 KiB, 262,144 B, 2.441406e-4 GiB) + and 0.375 MiB (384 KiB, 393,216 B, 3.662109e-4 GiB) + |
l1i$ size | 0.5 MiB (512 KiB, 524,288 B, 4.882812e-4 GiB) + and 0.25 MiB (256 KiB, 262,144 B, 2.441406e-4 GiB) + |
l2$ size | 4 MiB (4,096 KiB, 4,194,304 B, 0.00391 GiB) + and 10 MiB (10,240 KiB, 10,485,760 B, 0.00977 GiB) + |
l3$ size | 6 MiB (6,144 KiB, 6,291,456 B, 0.00586 GiB) + and 24 MiB (24,576 KiB, 25,165,824 B, 0.0234 GiB) + |
The M1 Max
The M1 Max provides:
- 57 billion transistors on a 420mm squared die.
- 8 performance cores, 24MB L2 Cache.
- 2 efficiency cores with 4MB L2 cache.
- 32 GPU Cores.
- 64GB DDR5 memory at 400GB/s.
And the new M1 Ultra
The M1 Ultra brings you:
- 114 billion transistors on a 840mm squared die.
- 16 performance cores, 48MB L2 Cache.
- 4 efficiency cores with 4MB L2 cache.
- 64 GPU Cores.
- Up to 128GB DDR5 memory at 800GB/s.
倚天710
一个die有64core,每两个core是一个cluster,一块cpu封装两个die
一个die大小是314平方毫米,600亿晶体管
平头哥的几款芯片:
总结
AMD和Intel在服务器领域CPU设计上走了两个不同的方向,Intel通过RingBus、Mesh等方案在一块Die上集成多个core,成本高,在多核场景下性能好。
AMD则是通过设计小的Die来降低成本,然后将多个Die封装到一块CPU上来售卖,Zen1架构的多个Die之间延迟高,于是Zen2将IO抽离出来用一块单独的IO Die来负责IO,这样多核之间的时延比Zen1好了很多。
而在云计算场景下AMD的设计非常有竞争优势,因为云计算大部分时候是要把一块大的CPU分拆售卖,从架构上AMD对分拆售卖非常友好。
整体来说AMD用领先了一代的工艺(7nm VS 14nm),在MySQL查询场景中终于可以接近Intel了,但是海光、鲲鹏、飞腾还是不给力。
参考资料
[CPU 性能和Cache Line](/2021/05/16/CPU Cache Line 和性能/)
[Perf IPC以及CPU性能](/2021/05/16/Perf IPC以及CPU利用率/)
[Intel PAUSE指令变化是如何影响自旋锁以及MySQL的性能的](/2019/12/16/Intel PAUSE指令变化是如何影响自旋锁以及MySQL的性能的/)