2. AMD EPYC处理器架构解析

理解AMD EPYC处理器的性能特征,不能只看核心数量和主频,而要沿着“核心—CCX—CCD—IOD—内存/PCIe”这条物理与逻辑链路逐层展开。EPYC的架构本质上是把计算、缓存、内存控制器和I/O控制器解耦,再通过高速互连重新组合。对HPC集群建设而言,这种组合方式直接决定了内存带宽、NUMA拓扑、PCIe设备亲和性以及跨CCD通信开销,是选型、插卡、绑核和性能调优的基础。

一、Zen核心与SMT:计算的最小单元

Zen系列核心是EPYC的计算最小单元。每个核心拥有独立的整数执行单元、浮点单元、L1指令/数据缓存和L2缓存,并支持SMT(同步多线程),通常表现为每个物理核心对应两个逻辑处理器。以Zen 4为例,每核心L2缓存为1 MB,L1数据缓存32 KB、指令缓存32 KB。对HPC而言,浮点吞吐主要取决于每核心的FMA单元宽度、AVX-512支持情况以及每周期可发射的浮点操作数。Zen 4支持AVX-512,但采用256位数据通路双泵实现,因此在评估GROMACS、OpenFOAM、VASP等负载时,需要关注实际指令混合,而不能简单按“支持AVX-512”推断性能翻倍。

SMT对HPC的影响具有两面性:计算密集且寄存器压力大的负载,两个线程争抢同一核心的浮点单元,收益可能只有10%~30%;而访存密集、分支较多的负载,SMT可更有效地隐藏延迟。因此集群中是否开启SMT,应结合具体应用做对照测试,而不是统一开启或关闭。

二、CCX与CCD:缓存域与核心分组

多个Zen核心先组成CCX(Core Complex),共享同一块L3缓存;多个CCX再封装为一个CCD(Core Complex Die)。在EPYC 9004系列(Zen 4)中,典型配置是每个CCD含8个核心、32 MB L3缓存,通常组织为一个CCX。CCX内部核心访问共享L3的延迟低、带宽高;跨CCX或跨CCD访问则需经过IOD中的Infinity Fabric,延迟明显上升。

这一结构对HPC最直接的影响是“进程/线程放置”。MPI进程若被调度到同一CCD内,L3命中率和通信延迟更优;若跨CCD分布,则可能因L3分区和IF链路产生额外开销。实践中可用numactl、likwid或hwloc查看拓扑,再结合OMP_PROC_BIND、OMP_PLACES控制线程绑定。例如将OpenMP线程绑定到同一CCD的8个物理核心,往往比让操作系统自由调度获得更稳定的每周期浮点结果。

三、IOD与Infinity Fabric:内存和I/O的汇聚点

IOD(I/O Die)是EPYC的中央枢纽,集成内存控制器、PCIe控制器、Infinity Fabric交换结构以及安全/管理模块。CCD通过Infinity Fabric连接到IOD,内存和PCIe设备也挂在IOD上。因此,核心访问内存、核心访问GPU或网卡,都要经过IOD。IOD的设计决定了内存通道数量、PCIe通道数量以及NUMA域划分方式。

在EPYC 9004中,IOD提供12个DDR5内存通道,支持12通道DDR5-4800(每通道1 DIMM时),并可按每通道2 DIMM配置。PCIe方面提供128条PCIe 5.0通道,可拆分为x16、x8等不同宽度,用于GPU、NVMe和高速网卡。对HPC集群来说,这意味着单颗EPYC可同时挂载多块GPU和多块NVMe,但通道分配和NUMA亲和性必须提前规划。

AMD EPYC 架构与HPC资源匹配关系 CCD / CCX 层 CCD 0 8× Zen4 核心 32 MB L3 (CCX) SMT: 16 逻辑核 CCD 1 8× Zen4 核心 32 MB L3 (CCX) SMT: 16 逻辑核 CCD 2 8× Zen4 核心 32 MB L3 (CCX) SMT: 16 逻辑核 CCD 3 8× Zen4 核心 32 MB L3 (CCX) SMT: 16 逻辑核 … 最多 12 个 CCD Infinity Fabric (IF) 互连 IOD (I/O Die) — 中央枢纽 Infinity Fabric 交换结构 · 内存控制器 · PCIe 控制器 · 安全/管理 跨 CCD 通信、内存访问、PCIe 设备访问均经 IOD 内存通道层 12× DDR5 通道 · 最高 DDR5-4800 · 每通道 1~2 DIMM 理论带宽约 460 GB/s(12×4800 MT/s×8 B)· NUMA 域划分依据 PCIe 通道层 128× PCIe 5.0 GPU / NVMe / 网卡 HPC 匹配要点 CCD 内绑核降低 L3 争用 · 按 NUMA 域分配 MPI 进程 · GPU/NVMe 与 PCIe 根复合体亲和 · 内存通道满配保障带宽

四、内存通道与NUMA:带宽和延迟的边界

EPYC 9004的12个DDR5通道是HPC内存带宽的关键来源。以DDR5-4800计算,单通道带宽为4800 MT/s × 8 Byte = 38.4 GB/s,12通道理论总带宽约460 GB/s。但实际可用带宽受NUMA划分、DIMM填充方式和访问模式影响。若只插6条DIMM,带宽直接减半;若跨NUMA节点访问,延迟可增加数十纳秒。

在双路EPYC服务器中,每颗CPU构成一个NUMA节点(或按NPS设置拆分为多个NUMA域)。HPC应用应尽量让进程访问本地内存。例如运行WRF或OpenFOAM时,可用numactl --cpunodebind=0 --membind=0将进程和内存绑定到同一节点。对于MPI+OpenMP混合程序,通常建议每个NUMA节点放置一个MPI进程,再在该进程内启动与本地核心数匹配的OpenMP线程。

五、PCIe通道与加速器亲和性

128条PCIe 5.0通道为GPU、NVMe和高速网卡提供了充足的上行带宽。但在实际插卡时,必须关注PCIe设备挂在哪个IOD的哪个根复合体上。若GPU与使用它的CPU核心分属不同NUMA节点,数据需跨IF传输,延迟和带宽都会受损。因此,GPU服务器应优先将GPU插槽与对应CPU的PCIe通道对齐,并在运行时用CUDA_VISIBLE_DEVICES和numactl联合绑定。

对于NVMe存储节点,PCIe 5.0 x4单盘理论带宽约16 GB/s,多盘并发时需确认IOD上行带宽是否成为瓶颈。网络方面,400G InfiniBand或RoCE网卡通常占用x16 PCIe 5.0,应插在与计算进程相同的NUMA节点上,减少跨节点通信的额外跳数。

六、面向HPC负载的匹配原则

综合来看,EPYC架构与HPC负载的匹配可归纳为三条原则:第一,计算密集且缓存敏感的应用,优先保证CCD内绑核和L3局部性;第二,访存密集或内存带宽敏感的应用,优先满配内存通道并严格NUMA绑定;第三,GPU/NVMe/网卡等加速设备,优先保证PCIe亲和性与NUMA局部性。实际部署时,建议先用hwloc-ls或lstopo导出拓扑,再结合应用特征制定绑核与内存策略,最后通过STREAM、HPL、GROMACS等基准做验证,确认带宽、延迟和扩展效率达到预期。

在EPYC服务器BIOS中,NPS(Nodes Per Socket)设置会改变NUMA域数量。NPS=1将整颗CPU视为一个NUMA节点,NPS=4则拆为四个。HPC场景通常建议NPS=4以降低单域延迟,但需确认操作系统和应用能正确识别并绑定。