华为的鲲鹏 920 和 TaiShan v110 CPU 架构
中国芯吧
全部回复
仅看楼主
吧务
level 12
hcdpz 楼主
调查华为独特的 L3 设计及其首款自主研发的核心
CHESTER LAM 2025年7月23日
华为是中国最大的科技公司之一,其企业产品涵盖从服务器到网络设备等各个方面。所有这些产品都需要先进的芯片才能保持竞争力。
华为通过其海思子公司投资开发自己的芯片,这使得华为能够根据自身需求定制芯片设计,并保护其业务免受供应链中断的影响。
鲲鹏 920 是一种基于芯片组的 CPU 设计,旨在满足各种企业应用的需求,包括云服务器、人工智能加速器和无线基站。
这里我们查看的是华为网卡中采用的 24 核鲲鹏 920 CPU 子系统。
图片来自华为研究出版物 3
特别感谢 Brutus 为此搭建了环境!
系统架构
鲲鹏 920 采用台积电的 CoWoS 封装技术,通过多个芯片实现华为海思所谓的“乐高式生产”。华为海思的芯片组策略是将等高的芯片并排放置,计算芯片位于中心,I/O 芯片位于两侧。
计算芯片被称为超级 CPU 集群(SCCLs),其芯片的顶部和底部边缘集成了 DDR4 控制器,使用了芯片的所有边缘区域用于片外接口。
SCCLs 采用台积电的 7 纳米工艺制造,包含多达 32 个 TaiShan v110 CPU 核心和 L3 缓存。一个独立的 IO 芯片使用台积电的 16 纳米节点,并连接到 PCIe、SATA 和其他低速 IO。所有芯片都位于一个 65 纳米中介层之上。
芯片间带宽能够实现高达 400 GB/s 的缓存一致性
鲲鹏 920:首款基于芯片 let 的 64 核 ARM 云服务 SoC
海思基于乐高的生产方式与英特尔的无晶圆厂策略有相似之处,后者同样强调高跨芯片带宽,但代价是更昂贵的封装技术和更紧密的芯片间距离限制。
与英特尔的 Sapphire Rapids 类似,将内存控制器放置在 CPU 芯片上,使得更小的 SKU 可以直接访问 DRAM,而无需将内存请求路由到另一个芯片。Sapphire Rapids 利用其高跨芯片带宽,使其多芯片设置在软件层面看起来像是一个整体。
L3 缓存和 DRAM 资源可以在不同芯片之间无缝共享,这与 NUMA 设置形成对比,在 NUMA 设置中,软件必须与不同的内存池进行交互。奇怪的是,我未能找到任何证据表明 Kunpeng 920 可以在多个 SCCL 之间组合 L3 和 DRAM 资源。
来自论文的图 4 展示了芯片被暴露为不同的 NUMA 节点。来自其他来源的 sample numactl 输出也显示每个芯片作为一个独立的节点
鲲鹏 920 支持使用华为“Hydra”链路的 dual 和 quad 插槽配置,这有助于进一步扩展核心数量。具有类似每个插槽核心数量的现代服务器处理器,如 Ampere Altra 和 AMD 的 Zen 2,仅扩展到 dual 插槽配置。
2025年08月14日 14点08分 1
吧务
level 12
hcdpz 楼主
计算芯片拓扑和 L3 缓存
TaiShan v110 核心在 SCCL 计算芯片中分组为四核 CPU 集群(CCL)。一个双向环形总线连接计算芯片上的各个模块,包括 CPU 集群、L3 数据库、内存控制器以及与其他芯片的连接。
L3 数据库与 CPU 集群配对,但似乎位于独立的环形站点上,而不是像 Intel 和 AMD 设计那样与一个 CPU 集群共享一个站点。一个完全启用的 SCCL 配有八个 CPU 集群,具有 21 个环形站点。
我们的 24 核 SKU 可能有两个 CPU 集群和 L3 缓存组被禁用,尽管目前尚不清楚环状停止是否仍然处于活动状态
华为异常地将 L3 标签放置在 CPU 集群中,而不是 L3 数据缓存组中。L3 还可以在不同的模式下运行。"共享"模式的行为类似于 AMD、Arm 和英特尔芯片上的 L3,使用所有 L3 缓存组共同形成一个大型共享缓存。
物理地址空间可能通过 L3 缓存组进行哈希处理,均匀分配访问到数据缓存组,以扩展带宽,同时防止数据重复。
"私有"模式将一个 L3 缓存组专用于最近的 CPU 集群,通过将大部分互连移出视野来提高 L3 性能。第三种"分区"模式可以动态调整每个核心集群的私有 L3 容量。
华为的论文暗示分区模式也可以动态调整 L3 策略,在共享模式和私有模式之间切换,处理不同任务甚至同一任务的不同阶段倾向于私有或共享 L3 行为的情况。
来自华为的论文 3
分区模式是默认模式,也是测试系统上的唯一模式。一些 Kunpeng 920 系统允许在 BIOS 中设置 L3 缓存策略,但测试系统没有 BIOS 界面,缓存控制设置也没有通过 UEFI 变量暴露出来。
2025年08月14日 14点08分 2
吧务
level 12
hcdpz 楼主
在分区模式下,一个核心可以看到合理的 36 周期 L3 延迟,直到接近 4 MB。随着私有 L3 部分扩展以包含附近的 L3 切片,测试尺寸增大时,延迟逐渐增加。最后,当测试尺寸接近 L3 容量时,延迟超过 90 周期。
索引寻址用于简化,通过简单寻址减去~1.5 周期(~.58 ns)即可获得延迟
如果另一个核心遍历相同的测试数组,其 L3 延迟在其容量范围内均匀较高。即使测试数组仅略微溢出 L2,延迟也会达到>90 周期范围,这表明 L3 正在以共享模式运行。
令人惊讶的是,同一集群中两个核心之间的数据共享会触发类似行为。或许 L3 在缓存行处于共享状态时进入共享模式,或者无法在集群的私有 L3 分区中缓存处于共享状态的缓存行。
这并非总是最优策略。例如,两个核心共享一个 2 MB 数组时,将该数组保留在私有 L3 分区中会更好。如果 L3 最初没有容量压力,数据重复不是问题。
集群内部数据共享缺乏特殊处理方式也令人费解。
从一方面来看,鲲鹏 920 的分区模式是一个优势,因为它利用了 L3 缓存单元靠近某些核心的布局方式。
2025年08月14日 14点08分 3
吧务
level 12
hcdpz 楼主
AMD、Intel 以及大多数 Arm 芯片在底层都具有相同的非均匀 L3 延迟特性,但不要尝试使用这种方式将 L3 数据更靠近核心放置。然而,从另一方面来看,分区模式试图弥补互连性能的不足。
当 L3 以共享模式运行时,或者单个核心使用整个 L3 时,鲲鹏 920 的 L3 延迟比 Intel 的 Sapphire Rapids 更差。仅每个核心 512 KB 的 L2 缓存,这简直太残酷了。
我倾向于后一种观点,因为即使是核心私有的对最近 L3 缓存的访问,其周期数延迟也与 Zen 2 的 L3 相同,Zen 2 将访问分布在多个 L3 缓存组中。
Zen 2 在共享或私有读取模式下,在整个 L3 容量范围内都保持了均匀的低延迟。因此,Kunpeng 920 的分区模式最好被视为一种机制,有时可以弥补高延迟互连的问题。
一个由四个核心组成的 TaiShan v110 集群可以实现 21.7 GB/s 的 L3 读取带宽,因此 Kunpeng 920 在集群级别的带宽瓶颈上与 Intel 的 E-Core 集群类似。然而,这些带宽瓶颈在 Kunpeng 920 上更为严重。
集群内兄弟核心之间的带宽竞争可以将 L3 延迟提高到 80 ns 以上。Intel 的设计在 Skymont 测试中也显示出延迟增加,但整体延迟较低且带宽较高。
内存访问由位于计算芯片顶部和底部边缘的一对双通道 DDR4 控制器提供,这些控制器连接到测试设置中的 32 GB DDR4-2400 内存。使用只读模式测量了读取带宽,结果为 63 GB/s。
未加负载时,服务器的延迟表现良好,为 96 ns,但在中等带宽负载下,延迟迅速上升到超过 100 ns。当推高带宽极限时,延迟可能超过 300 ns。
虽然不是很好,但相比 Qualcomm Centriq 可以达到的近 600 ns 的延迟,它的控制要更好一些。
2025年08月14日 14点08分 4
吧务
level 12
hcdpz 楼主
核心间延迟测试
Kunpeng 920 在四核集群内部反弹缓存行时能够提供合理的延迟。跨集群访问会显著增加延迟,并且可能因共享缓存行所在的节点而异。
与 AMD 的 Zen 2 相比,无论是集群内还是集群间的访问,延迟都更高,至少在桌面平台上是这样。
实践中缓存到缓存的传输很少见,我运行这个测试只是为了展示系统拓扑结构,并提供关于缓存一致性可能如何处理的线索。核心到核心的延迟不太可能对应用程序性能产生重大影响。
2025年08月14日 14点08分 5
吧务
level 12
hcdpz 楼主
TaiShan v110 核心概述
HiSilicon 的 TaiShan v110 是一个 64 位 ARM(aarch64)核心,具有 4 宽乱序执行。这是华为首次设计的定制核心。
虽然华为之前在服务器 SoC 中使用了 Arm 的 Cortex A57 和 A72,但 TaiShan v110 似乎与那些旧的 Arm 设计并没有太多共同点。
该核心具有适度的重排序能力,三个整数 ALU,一个双流水线 FPU,并且每个周期可以处理两个内存操作。
它与几年前的 Intel Goldmont Plus 大致相当,但比 Goldmont Plus 稍大,并且拥有一个更强大的服务器级内存子系统。
Arm 的 Neoverse N1 是另一个比较点,因为它是另一个在台积电 7nm 工艺节点上实现的密度优化型 aarch64 核心。Neoverse N1 也是 4 发射的,但其乱序执行引擎稍大。
2025年08月14日 14点08分 6
吧务
level 12
hcdpz 楼主
分支预测
华为的出版物称 TaiShan v110 使用“两级动态分支预测器”。两级预测使用分支地址和先前的分支结果来索引预测分支结果表。
这是一种相对简单的预测算法,在 2010 年代左右逐渐在高性能设计中不再流行。华为也可能指的是“两级”BTB 设置,或是一个创建两个覆盖级别的子预测器。
通过一个简单的测试,条件分支在随机长度模式中要么被取用要么不被取用,TaiShan v110 的行为有点像 Arm 的 Cortex A73。
一个包含 64 个条目的 BTB 为已执行分支目标提供单周期延迟,从而实现零气泡的已执行分支。除此之外,分支预测器处理具有 3 周期延迟的分支,只要代码适合在 32 KB 内,并且分支之间没有靠得太近。
相距 16B 或更近的分支会产生额外的惩罚周期,而更密集的分支性能较差。L1i 缓存溢出会显著增加已执行分支的延迟。
每 64B 缓存行有一个分支,延迟从 L2 达到 11-12 周期,或者当代码需要从 L2 获取时,延迟超过 38 周期。
这大致与数据侧 L2 和私有 L3 延迟相吻合,表明分支预测器无法领先于其他指令获取来驱动预取。
一个31条目的返回栈处理返回。对于间接分支的更通用情况,间接预测器可以跟踪每个分支高达16个周期,或在大致256个总间接目标之前不会遭受重大惩罚。
2025年08月14日 14点08分 7
吧务
level 12
hcdpz 楼主
SPEC CPU2017 中的分支预测精度大致与 Intel 的 Goldmont Plus 相当,尽管 Goldmont Plus 以微弱的优势获胜。
大约在同一时间,AMD 的 Zen 2 表现出更强的性能,并展示了在台积电的 7nm 工艺上高性能核心的预期表现。
2025年08月14日 14点08分 8
吧务
level 12
hcdpz 楼主
指令获取
TaiShan v110 拥有 64 KB 的指令缓存,每个周期可为核心提供四条指令。指令地址翻译使用一个 32 项的 iTLB,并由一个 1024 项的 L2 TLB 支持。
L2 TLB 可能与数据访问共享,但目前我没有编写测试来验证这一点。当代码从 L1i 溢出时,指令获取带宽会急剧下降,平均每个周期为 6-7 字节。
这使得 L2 代码读取带宽略差于 Intel 的 Goldmont Plus 或 Arm 的 Neoverse N1。来自 L3 的代码带宽非常差,与在 Goldmont Plus 或 Neoverse N1 上从 DRAM 获取指令差不多。
指令由一个 4 位宽的解码器进行解码,并将其转换为微操作。然后,核心执行寄存器重命名,并分配其他后端资源来跟踪它们并实现乱序执行。重命名器可以执行移动消除。
2025年08月14日 14点08分 9
吧务
level 12
hcdpz 楼主
执行引擎
TaiShan v110 采用基于 PRF 的执行方案,其中寄存器值存储在物理寄存器文件中,其他结构存储指向这些寄存器文件条目的指针。
reorder buffer 的容量与 Intel 的 Goldmont Plus 相似,但 TaiShan v110 更大的整数寄存器文件和内存排序队列应该会使其领先。
调度器布局将微操作分为 ALU、内存访问和 FP/向量类别,并为每种类别使用一个单独的统一调度器。每个调度器大约有 33 个条目。
Goldmont Plus 在整数侧采用分布式调度器布局,而 Arm 的 Neoverse N1 则采用纯分布式调度器布局。
SPEC CPU2017 的工作负载对 TaiShan v110 的调度器施加了很大压力。调度器条目在任何核心上通常都是“热”资源,所以看到这种情况并不罕见。
整数寄存器文件容量很少成为问题,因为核心几乎有足够的整数寄存器来覆盖 ROB 容量。TaiShan v110 在一个单独的寄存器文件中重命名标志(条件码),大约有 31 次重命名可用。
标志重命名也很少成为问题,除非在非常分支密集的工作负载中,例如文件压缩和 505.mcf。
浮点工作负载不仅给 FPU 的调度器带来压力,还增加了对 FP/向量寄存器文件的压力。
TaiShan v110 的 FP/向量寄存器文件容量可能与 Goldmont Plus 相似,但由于 AArch64 定义了 32 个 FP/向量寄存器而不是 x86-64 上的 16 个,因此可重命名的寄存器更少。更大的寄存器文件将有助于更好地平衡核心以应对 FP 和向量工作负载。
2025年08月14日 14点08分 10
吧务
level 12
hcdpz 楼主
执行端口
TaiShan v110 的整数执行端有四个端口。其中三个是通用 ALU,用于处理简单的常见操作,如整数加法和位运算。
分支可以经过其中的两个端口,但核心每个周期只能维持一个分支,这与那个时代的其他核心类似。第四个端口专门用于多周期整数运算,如乘法和除法。
整数倍数执行具有四个周期的延迟。Goldmont Plus 和 Neoverse N1 同样采用 3+1 的整数端口设置,但两者都将分支放在第四个端口上,而不是用于多周期运算。
将分支放在第四个端口可能对吞吐量稍好,因为分支比多周期运算更常见。将分支放在专用端口上也会自然地优先处理它们,因为其他指令类别不会争抢同一个端口。
这有助于更快地发现误预测,减少浪费的工作。另一方面,TaiShan v110 的布局可能通过按延迟特性分组端口来简化调度。
TaiShan v110 上的 FPU 有两个端口,这在当时针对低功耗和密度优化的设计中是常见的。这两个端口都可以处理 128 位向量长度的浮点融合乘加运算,使用 FP32 操作。FP64 操作的执行速度是四分之一。
FP32 FMA 操作的延迟为 5 周期。奇怪的是,FP32 加法和乘法操作只能由一个端口分别服务,尽管它们与 FMA 操作具有相同的 5 周期延迟。向量整数加法可以使用两个端口,并具有 2 周期延迟。
只有一个端口具有向量整数乘法器。
加载/存储
两个 AGU 端口生成内存地址,并为 L1D 命中提供 4 周期加载到使用的延迟。使用索引寻址时,延迟会增加 1-2 周期。AGU 生成的虚拟地址通过一个 32 项全关联数据 TLB 转换为物理地址。
一个 1024 L2 TLB 处理更大的内存足迹。命中 L2 TLB 会增加 11 周期的延迟,这对于低时钟频率的核心来说很慢。AMD 的 Zen 2 和 Intel 的 Goldmont Plus 分别具有 7 和 8 周期的 L2 TLB 延迟。
Zen 2 显著具有两倍的 TLB 容量,达到 2048 项,并且可以实现更高的时钟速度。
加载地址必须与先前的存储地址进行检查,以检测内存依赖性。存储转发具有6-7周期的延迟,即使存储只部分重叠后续的加载,这一延迟也显著保持不变。
核心的 L1D 似乎以 16B 对齐的块进行操作。跨越 16B 边界时,转发延迟会增加 1-2 个周期。只要两个独立加载和存储操作都不跨越 16B 边界,它们可以并行进行。
TaiShan v110 的 64 KB 数据缓存是 4 路组关联,每个周期可以服务两个 128 位访问。这两个都可以是加载操作,其中一个可以是存储操作。
数据缓存带宽优于 Intel 的 Goldmont Plus,后者每个周期也可以服务两个 128 位访问,但仅限于一个加载和一个存储。加载操作通常远多于存储操作,因此 TaiShan v110 在实际应用中应该具有带宽优势。
Neoverse N1 是一款更优化的高密度设计,其 L1D 带宽与 TaiShan v110 相似。
2025年08月14日 14点08分 11
吧务
level 12
hcdpz 楼主
L2 缓存
TaiShan v110 上的 L2 缓存容量为 512 KB,每个核心私有。尽管核心以四核为一组排列,但没有像英特尔 E-Core 那样的集群级共享缓存。
L2 的周期延迟为 10 周期,在周期数方面比 Neoverse N1 或 Zen 2 更快。
L2 每周期平均约 20 字节,表明核心在 L2 和 L1D 之间可能有一个每周期 32 字节的接口。使用读-改-写模式并未增加带宽,因此 L2 到 L1D 的接口可能不是双向的。
仍然,考虑到核心的大 L1D 和适度的向量功能,L2 带宽仍然充足。
TaiShan v110 的 L2 似乎是为了高性能而牺牲了容量。Goldmont Plus 则采取了相反的设计,使用一个大的 4 MB 共享 L2,因为 L2 也作为最后一级缓存。
华为可能希望依赖动态 L3 分区来降低平均 L2 缺失延迟,这使得 L2 设计可以专注于速度。
2025年08月14日 14点08分 12
吧务
level 12
hcdpz 楼主
性能:SPEC CPU2017
华为选择了 SPEC CPU2017 的整数套件作为评估 TaiShan v110 的指标,因为其目标市场包括“涉及大量整数运算”的工作负载。在单核测试中,TaiShan v110 分别领先于 Arm 的 Cortex A72 和 Intel 的 Goldmont Plus 22.5% 和 7%。
毫无疑问,它比前几代的核心要好。但考虑到 TaiShan v110 的工艺节点优势、更大的最后一级缓存以及更好的 DRAM 控制器,它和 Goldmont Plus 的领先优势并不明显。
与台积电 7 纳米的同行相比,TaiShan v110 处境更加艰难。Arm 的 Neoverse N1 比 TaiShan v110 快 52.2%。AMD 的 Zen 2 则取得了巨大的领先优势,这对于一款高性能设计来说是意料之中的。
虽然 TaiShan v110 总体上比 Goldmont Plus 要好,但在 505.mcf、525.x264 和 503.bwaves 测试中表现落后。在这三种情况下,TaiShan v110 每条指令的误预测率更高,分支预测准确度也更差。
2025年08月14日 14点08分 13
吧务
level 12
hcdpz 楼主
不知何故,这些测试挑战了 TaiShan v110 的预测器,尽管在其他测试中,例如 541.leela,其分支预测器在压力测试下达到了与 Goldmont Plus 相似的准确度。
Neoverse N1 在所有子测试中都胜过 TaiShan v110。Neoverse N1 的最大优势来自 505.mcf 和 525.x264。前者显示 Neoverse N1 的分支 MPKI 为 15.03,而 TaiShan v110 为 16.64。
505.mcf 受限于后端内存访问,除了分支误预测,使其成为任何 CPU 核心的噩梦。Ampere Altra 的缓存设置和更好的分支预测器可能共同使其比 Kunpeng 920 超出 100% 以上。
525.x264 的情况更难理解。
我在获取分数报告时怀疑 Kunpeng 920 出现了糟糕的运行,因为后续使用性能计数器的运行表明,根据实现的 IPC、实际指令计数和时钟速度,分数差距不应该这么大。
然而,由于有时间限制和远程测试设置,没有机会跟进。
无论 525.x264 的情况如何,Neoverse N1 的优势是显而易见的。N1 具有出色的分支预测器,在所有子测试中分支预测准确率的几何平均值上,几乎与 Zen 2 中的分支预测器相当。
其乱序执行引擎仅比 TaiShan v110 中的稍大。但 N1 的后端资源平衡性更好。它有更多的整数侧调度器条目和更大的 FP/向量寄存器文件。TaiShan v110 在这两个领域经常感到压力。
在内存子系统方面,Kunpeng 920 的分区模式带来的任何优势似乎都被 Neoverse N1 更大的 L2 所抵消。
2025年08月14日 14点08分 14
吧务
level 12
hcdpz 楼主
结语
鲲鹏 920 拥有众多引人注目的特性。它是服务器领域采用台积电 7 纳米工艺的早期采用者,比 Ampere Altra 和 Zen 2 服务器变体更早推向市场。
它采用了台积电的 CoWoS 封装,当时 AMD 选择了更简单的片上走线,而 Ampere 则坚持采用单片式设计。动态 L3 行为是一个突出特性,当时其他公司(除了 IBM)的 L3 缓存仅以“共享”模式运行。
我确信许多科技爱好者都曾研究过 Intel 和 AMD CPU 上的多银行 L3 设计,并好奇他们是否会尝试将 L3 数据更靠近使用最多的核心。华为正是试图做到这一点。
然而,鲲鹏 920 难以将这些特性转化为优势。如果芯片没有被设置为像单片式设计那样运行,那么 CoWoS 的高跨片带宽似乎被浪费了。
L3 的分区模式根据数据共享行为提供不一致的性能。当单个核心需要使用大部分 L3 容量或核心之间共享数据时,L3 性能较差。
Zen 2 的统一快速 L3 具有更高的性能一致性,即使它没有充分利用 bank/核心的局部性。Neoverse N1 使用更大的 L2 来隔离核心与 L3 延迟,这在实践中看起来也是一个更好的选择。
也许唯一显现出来的优势是其芯片设计方案的灵活性,这使华为能够覆盖更广泛的产品类别,同时重用芯片。
在核心层面,很难避免得出这样的结论:台积电的 7nm 优势也被浪费了。Neoverse N1 在同一节点上针对相似目标,并且做得更好。Arm 在密度优化设计方面的才能真正展现出来。
他们能够在相同区域内集成更大的结构,包括一个具有 6K 条目的 BTB 分支预测器和更大的向量寄存器文件。他们能够更好地调整核心结构,以减少延迟敏感型工作负载中的后端资源停顿。
最后,他们能够在保持与 TaiShan v110 相同区域占用的情况下,为 Neoverse N1 提供双倍的 L2 容量。由于设计目标不同,与 AMD 的比较要困难得多。
但值得注意的是,Zen 2 在桌面核心运行时实现了相似的面积效率,尽管增加核心宽度和重排序能力会遇到边际效益递减的问题。
这些核心的比较给人的印象是,AMD 和 Arm 充分利用了台积电的 7nm 工艺,而海思只是做了份内之事。但份内之事可能已经足够。
华为不需要 TaiShan v110 来与 Neoverse N1 和 Zen 2 正面竞争。它需要一个能够支撑其业务的强大核心。TaiShan v110 完全能够胜任这个角色。
更重要的是,海思早期采用先进的 TSMC 技术,并愿意尝试动态 L3 行为,这表明海思的工程师们并不害怕采取激进策略。
这意味着 TaiShan v110 可以成为未来设计的跳板,为华为的未来发展提供路径。
2025年08月14日 14点08分 15
1 2 尾页