AMD Infinity Fabric 中 Data Fabric 的结构与全互联实现

关键词:Scalable Data Fabric (SDF)、CAKE、IFOP、IFIS/xGMI、GMI、全互联 mesh、中心交换

适用范围:Zen 1 ~ Zen 4 (EPYC) 及 Instinct MI300 系列 GPU


1. 总览:Infinity Fabric = 数据面 + 控制面

AMD 自 Zen 架构(2017)起,将片内/片间互连统一为 Infinity Fabric,它由两个逻辑平面组成:

平面 名称 职责
SDF(Scalable Data Fabric) 可扩展数据面 承载数据流量 :核心、缓存、内存控制器、I/O、die 间/插槽间链路之间的一致性访存与 I/O 传输。协议上是 HyperTransport 的超集,拓扑无关(总线、星型、mesh 皆可)
SCF(Scalable Control Fabric) 可扩展控制面 承载控制信号:SMU 电源/温度管理、PSP 安全、测试、配置。有自己专用的片间 SerDes,可跨 die/跨插槽互通

通常所说的 Data Fabric 即 SDF 。它的"全互联"(any-to-any)能力是通过三级结构 实现的:die 内一致性数据面 → 封装内 IFOP 直连 mesh → 插槽间 IFIS/xGMI。


2. 第一级:Die 内的一致性数据面

以 Zen 1 的 Zeppelin die(EPYC 7001 "Naples" 的基本单元)为例,SDF 在 die 内挂接约 11 个端口:

复制代码
┌───────────────────── Zeppelin Die (Zen 1) ─────────────────────┐
│                                                                 │
│  ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌────────────────┐  │
│  │  CCX 0    │ │  CCX 1    │ │  UMC ×2   │ │ IOMS → I/O Hub │  │
│  │ 4核+8MB L3│ │ 4核+8MB L3│ │ DDR4 2通道│ │ PCIe/SATA/USB  │  │
│  └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ └──────┬─────────┘  │
│        │ CCM         │ CCM         │              │            │
│ ═══════╧═════════════╧═════════════╧══════════════╧═══════════  │
│        SDF 一致性数据面(全 die 运行在 MEMCLK 时钟域,           │
│        如 DDR4-2666 时 = 1333 MHz,避免跨时钟域延迟)            │
│ ═══╤══════╤══════╤══════╤══════╤══════╤═══════════════════════  │
│  CAKE   CAKE   CAKE   CAKE   CAKE   CAKE                        │
│  IFOP0  IFOP1  IFOP2  IFOP3  IFIS0  IFIS1                       │
└────┬──────┬──────┬──────┬──────┬──────┬────────────────────────┘
     └──┬───┘      └──┬───┘      └──┬───┘
   封装内 die 间      封装内 die 间   插槽间(与 PCIe 引脚复用)

关键组件:

  • CCM(Cache-Coherent Master)端口:每个 CCX 经一个 CCM 接入 SDF,发起一致性请求;
  • UMC(统一内存控制器):每个 DDR4 通道一个,直接挂 SDF;
  • IOMS:通向 I/O Hub(PCIe 控制器、SATA、南桥)的主/从端口。只有 CCM 和 IOMS 能发起 DRAM 请求;
  • CAKE(Coherent AMD socKet Extender) :SDF 与物理链路之间的"关口",把一致性请求打包成 128-bit 包串行化送上 SerDes。Zeppelin 有 6 个 CAKE:4 个对接 IFOP(封装内),2 个对接 IFIS(插槽间)。

可见 Data Fabric 在 die 内就把"计算、内存、I/O、对外链路"统一挂到同一个一致性数据面上------这是全互联的基础:对外的每一条链路(CAKE 端口)天然就是 SDF 的一个节点,片外访问与片内访问走同一套协议,无需协议转换。


3. 第二级:封装内 die 间 ------ IFOP 全直连 mesh

Naples(EPYC 7001)在 SP3 封装内集成 4 个 Zeppelin die(其中两个旋转 180° 放置)。每个 die 用自己的 IFOP 链路直连其余 3 个 die,构成完全图 K4:

复制代码
        Die 0 ═══════════ Die 1
         ║ ╲               ╱ ║
         ║   ╲           ╱   ║
         ║     ╲       ╱     ║
         ║       ╲   ╱       ║
         ║         ╳         ║     ═ = IFOP 直连
         ║       ╱   ╲       ║     每 die 3 条出链路
         ║     ╱       ╲     ║     全封装共 6 条 = K4
         ║   ╱           ╲   ║     任意两 die 一跳直达
         ║ ╱               ╲ ║
        Die 3 ═══════════ Die 2

这就是 Naples "全互联"的字面体现:任意两个 die 之间都有物理直连链路,跨 die 访问严格 1 跳。每 die 贡献 2 通道 DDR4,全插槽 8 通道,4 个 NUMA 节点。

链路指标(DDR4-2666,即 SDF @ 1333 MHz):

指标 数值
单条 IFOP 带宽 16 B/clk/方向 ≈ 42.7 GB/s(双向),~2 pJ/b,短距单端信号
4-die 封装剖分带宽 170.7 GB/s
延迟 本地内存 ~90 ns,跨 die ~145 ns

两个工程细节:

  • Zeppelin 实际放了 4 个 IFOP SerDes,全互联只需 3 条------第 4 条是为了把封装基板布线压缩到 4 层而加的冗余;
  • Threadripper(2 die)则把每 die 的 2 条 IFOP 并联使用,die 间带宽翻倍到 85.3 GB/s------说明 IFOP 数量是灵活的 die 间资源,可按产品裁剪。

4. 第三级:插槽间 ------ IFIS / xGMI

每个 Zeppelin 还有 2 个 IFIS SerDes(x16 差分,与 PCIe Gen3 引脚复用,~11 pJ/b)。2P 配置下:

复制代码
   Socket 0                                   Socket 1
 ┌───────────────┐                         ┌───────────────┐
 │  Die0 ══ Die1 │═══╗                   ╔═══│  Die0 ══ Die1 │
 │   ║ ╲    ╱ ║  │   ║   IFIS ×16         ║  │   ║ ╲    ╱ ║  │
 │  Die3 ══ Die2 │═══╬════ (×4 条) ══════╬═══│  Die3 ══ Die2 │
 │  (K4 mesh)    │═══╝                   ╚═══│  (K4 mesh)    │
 └───────────────┘                         └───────────────┘
  • 共 4 条 IFIS 链路 连接两颗 CPU(每 die 出一条),单条 37.9 GB/s,插槽间剖分 151.7 GB/s;
  • 代价:IFIS 占用 PCIe 引脚,2P 下每插槽 PCIe 从 128 条减为 64 条;
  • 跨插槽访问最坏 2 跳(1 次 IFIS 跨插槽 + 对端封装内至多 1 次 IFOP),延迟 ~200 ns。

至此,Zen 1 时代 Data Fabric 用 die 内一致性面 + 封装内 K4 mesh + 插槽间 xGMI 实现了从核到远端内存的全域 any-to-any。


5. 演进:Zen 2 起改用"中心交换"实现全互联

K4 mesh 在 4 个 die 时很优雅,但存在硬约束:mesh 链路数随 die 数 O(n²) 增长、SerDes 占 die 面积、且内存控制器分散在各 die 导致 NUMA 效应显著。因此 Zen 2(EPYC 7002 "Rome")把全互联从"全直连 mesh"改为"星型中心交换":

复制代码
                 ┌────────────────────────────────┐
   CCD0 ─GMI2──► │        服务器 IOD (14/12nm)     │
   CCD1 ─GMI2──► │  ┌──────────────────────────┐  │
    ...          │  │ SDF 交换枢纽:             │  │
   CCD7 ─GMI2──► │  │ · 8× GMI2 端口(接 CCD)    │  │
                 │  │ · 8× DDR4 通道 (UMC 内置) │  │
                 │  │ · 128× PCIe Gen4          │  │
                 │  │ · 3~4× xGMI2 (2P 互连)    │  │
                 │  └──────────────────────────┘  │
                 └───────────────┬────────────────┘
                                 │  xGMI2 ×3~4(各 x16)
                 ┌───────────────┴────────────────┐
                 │      对端 IOD(2P 插槽)        │
                 └────────────────────────────────┘
  • 8 个 CCD(每 CCD 2×CCX,纯计算)互不连接 ,各经一条 GMI2(基于 IFOP,32 B 读 + 16 B 写 / FCLK)接到中央 IOD;
  • 内存控制器集中到 IOD:任意 CCD 到任意内存通道都是"CCD→IOD→UMC"两跳,延迟大幅均一化(削弱了 Naples 的 NUMA 痛点);
  • 逻辑上仍是全互联------any-to-any 由 IOD 内部交换枢纽集中提供,物理拓扑从 mesh 变星型,用"固定 2 跳"换取 die 数量从 4 扩展到 8(Zen 4 达 12);
  • Infinity Fabric 2 的 SerDes 提到 25 GT/s(约为 Zen 1 的 2.3 倍),且 FCLK 与内存 MCLK 解耦;2P 用 3~4 条 xGMI2(用 3 条时可释放引脚,PCIe 增至 160 条)。

后续各代的关键变化:

代际 Data Fabric 相关变化
Zen 3 (Milan) CCD 内合并为单一 8 核 CCX(32 MB L3 一体共享),CCD 内不再跨 CCX;IOD/拓扑沿用 Rome
Zen 4 (Genoa) 最多 12 CCD,IOD 提供 12 个 GMI3 连接 + 12 通道 DDR5 + PCIe Gen5/CXL;≤4 CCD 的型号可给每 CCD 绑定双接口;2P xGMI3 走 PCIe Gen5 PHY,4 条 x16 理论 512 GB/s
Instinct MI300/MI350 (GPU) 8 个 XCD 互不直连 ,全部经 Infinity Fabric 接到 IOD(IOD 内含 256 MB MALL/Infinity Cache 与 HBM 控制器)------与 Rome 相同的"中心交换式全互联"思路;整机层面每 GPU 出 7 条 ×128 GB/s IF 链路,构成 8 卡全互联 mesh(K8,聚合 896 GB/s)

6. 小结:Data Fabric 实现全互联的设计哲学

  1. 协议统一:SDF 一套一致性协议贯穿 die 内、封装内、插槽间,CAKE/GMI/xGMI 只是不同距离、不同功耗预算(2 → 11 pJ/b)下的物理层适配;
  2. 小规模全直连:4 die 以内用 IFOP 构成完全图,一跳直达、带宽剖分最大化(Naples K4、Threadripper 双链路、8 GPU K8 mesh 均属此类);
  3. 大规模中心交换 :die 数增多后改用中央 IOD 星型交换,把 O(n²) 的连线复杂度收敛为 O(n),同时集中内存控制器以均一化延迟------"全互联"从物理直连演变为逻辑上的 any-to-any;
  4. 代价可见:每一跳都有明确的延迟/带宽标签(90 → 145 → 200 ns),这也是 Fleet 这类芯粒感知软件需要显式管理数据局部性的根本原因。

附:链路带宽速查表

链路 带宽 说明
Zen 1 IFOP(die↔die) 42.7 GB/s/条 16 B/clk/方向 @ 1333 MHz,~2 pJ/b
Naples 4-die 封装剖分 170.7 GB/s K4 mesh,6 条 IFOP
Zen 1 IFIS(插槽↔插槽) 37.9 GB/s/条 x16 差分,与 PCIe Gen3 复用,~11 pJ/b
Naples 2P 插槽间剖分 151.7 GB/s 4 条 IFIS
Threadripper 2-die 85.3 GB/s 每 die 双 IFOP 并联
Zen 2 GMI2(CCD↔IOD) 32 B 读 + 16 B 写 / FCLK SerDes 25 GT/s(2.3× Zen 1)
Rome 2P xGMI2 3~4 条 × x16 3 条时 PCIe 增至 160 条
Genoa 2P xGMI3 4 条 × x16 ≈ 512 GB/s 走 PCIe Gen5 PHY
MI300X GPU↔GPU 128 GB/s/条 × 7 = 896 GB/s 8 卡 K8 全互联
相关推荐
Eloudy5 小时前
全文 - Learning Exact NVIDIA SASS Encoders with [特殊字符]₂ Linear Algebra
sass·gpu
风静雪冷1 天前
AI 超节点关键技术深度解析:从高速互连、内存访问到大模型并行执行
大模型·gpu·ai超节点
智码看视界1 天前
深度学习:环境搭建PyTorch vs TensorFlow 选型
pytorch·深度学习·tensorflow·gpu·环境搭建·cuda·框架选型
Eloudy1 天前
OpenSM 管理 IB 网络简介 与 FabricManager 的设计思路
gpu·rdma·roce
Eloudy2 天前
【无标题】
网络·gpu·rdma·roce
蒸鱼Yuzheng3 天前
Shader 指令成本回归:离线编译、设备权重与误报控制
ci/cd·性能优化·gpu·shader·vulkan
Smoothcloud润云4 天前
PyTorch推理服务模型热切换与失败回滚实战:降低版本更新中断
服务器·人工智能·pytorch·python·深度学习·gpu
Eloudy4 天前
gem5 模拟 AMD GPU 的 PPA:从周期级时序到功耗与能量的完整实践
gpu
Eloudy5 天前
DOCA GPUNetIO 开源版(GDAKI)实现分析
gpu·rdma·roce