本章深入探讨AMD Infinity架构的设计理念、技术演进和实现细节。从Zen架构的模块化设计到MI300的异构集成,我们将分析AMD如何通过创新的互联技术实现高性能、可扩展的处理器设计。重点关注Infinity Fabric的协议栈、EPYC的NUMA拓扑、Chiplet互联策略,以及最新的CPU-GPU统一架构创新。
AMD Infinity Fabric(IF)首次出现在2017年的Zen架构中,是AMD实现Chiplet战略的核心技术。其设计理念包括:
模块化扩展性:通过标准化的互联协议,实现从消费级到数据中心的产品线覆盖。不同于Intel的monolithic设计,AMD选择了更灵活的多die策略。
协议分层架构:
┌─────────────────────────────────┐
│ Coherent HyperTransport │ ← 缓存一致性层
├─────────────────────────────────┤
│ Infinity Scalable │ ← 可扩展数据层
│ Data Fabric (SDF) │
├─────────────────────────────────┤
│ Infinity Scalable Control │ ← 控制平面
│ Fabric (SCF) │
├─────────────────────────────────┤
│ Physical Layer (PHY) │ ← 物理层
└─────────────────────────────────┘
数据平面(SDF - Scalable Data Fabric):
控制平面(SCF - Scalable Control Fabric):
Infinity Fabric物理层支持多种实现方式:
片内互联(On-die):
片间互联(Die-to-die):
芯片间互联(Socket-to-socket):
Infinity Fabric采用分布式路由架构:
目标地址解析流程:
Physical Address → Node ID → Die ID → Target
↓ ↓ ↓ ↓
[47:0 bits] [7:0 bits] [3:0 bits] Local
路由表配置示例:
Node 0: Local Memory [0x0000_0000 - 0x7FFF_FFFF]
Node 1: Remote Memory [0x8000_0000 - 0xFFFF_FFFF]
Node 2: IO Space [0x1_0000_0000 - 0x1_FFFF_FFFF]
采用MCM(Multi-Chip Module)设计,4个Zeppelin die通过Infinity Fabric互联:
┌─────────┐ ┌─────────┐
│ Die 0 │─────│ Die 1 │
│ 8 Cores │ IF │ 8 Cores │
│ 2ch DDR │ │ 2ch DDR │
└────┬────┘ └────┬────┘
│IF IF│
┌────┴────┐ ┌────┴────┐
│ Die 2 │─────│ Die 3 │
│ 8 Cores │ IF │ 8 Cores │
│ 2ch DDR │ │ 2ch DDR │
└─────────┘ └─────────┘
关键特性:
引入chiplet架构,分离计算和IO功能:
CCD0 CCD1 CCD2 CCD3
┌────┐ ┌────┐ ┌────┐ ┌────┐
│8C │ │8C │ │8C │ │8C │
└──┬─┘ └──┬─┘ └──┬─┘ └──┬─┘
│IF2 │IF2 │IF2 │IF2
┌──┴───────┴───────┴───────┴──┐
│ │
│ IO Die (14nm) │
│ 8ch DDR4 + 128 PCIe Gen4 │
│ │
└──┬───────┬───────┬───────┬──┘
│IF2 │IF2 │IF2 │IF2
┌──┴─┐ ┌──┴─┐ ┌──┴─┐ ┌──┴─┐
│8C │ │8C │ │8C │ │8C │
└────┘ └────┘ └────┘ └────┘
CCD4 CCD5 CCD6 CCD7
改进点:
优化缓存层次结构:
每CCD配置:
┌──────────────────────────┐
│ Core Complex Die │
├──────────────────────────┤
│ ┌────┐ ┌────┐ ... ×8 │
│ │Core│ │Core│ │
│ │32KB│ │32KB│ │
│ │L1 │ │L1 │ │
│ └──┬─┘ └──┬─┘ │
│ │ │ │
│ ┌──┴──────┴──┐ │
│ │ 512KB │ ×8 │
│ │ L2 Cache │ │
│ └──────┬─────┘ │
│ │ │
│ ┌──────┴──────┐ │
│ │ 32MB │ │
│ │ L3 Cache │ Shared │
│ └─────────────┘ │
└──────────────────────────┘
关键优化:
支持最多12个CCD,96核心配置:
双路系统拓扑:
Socket 0 Socket 1
┌─────────────────┐ ┌─────────────────┐
│ 12×CCD (96C) │ xGMI │ 12×CCD (96C) │
│ 12ch DDR5 │◄─────►│ 12ch DDR5 │
│ 128 PCIe Gen5 │ │ 128 PCIe Gen5 │
└─────────────────┘ └─────────────────┘
│ │
└──────────┬───────────────┘
│
CXL 2.0 Memory Pool
新特性:
Ryzen采用与EPYC相似但简化的设计:
Ryzen 5000系列架构:
┌─────────────┐ ┌─────────────┐
│ CCD 0 │ │ CCD 1 │
│ 8 Cores │ │ 8 Cores │
│ 32MB L3 │ │ 32MB L3 │
└──────┬──────┘ └──────┬──────┘
│ IF IF │
┌──────┴────────────────────┴──────┐
│ IO Die (12nm) │
│ 2ch DDR4 + 24 PCIe Gen4 │
│ Integrated Graphics* │
└───────────────────────────────────┘
*仅APU型号
针对游戏和桌面应用的优化:
统一内存访问(UMA)模式:
缓存优先模式:
精细化的功耗控制:
功耗状态转换:
C0 (Active) → C1 (Halt) → C2 (Stop) → C6 (Deep Sleep)
↓ ↓ ↓ ↓
~100W ~80W ~20W <5W
每CCD独立控制:
- 电压调节(0.2V - 1.5V)
- 频率调节(800MHz - 5.0GHz)
- 电源门控
Ryzen 7 5800X3D引入垂直缓存堆叠:
3D V-Cache结构:
┌─────────────┐
│ 64MB SRAM │ ← 3D堆叠层
│ V-Cache │
└──────┬──────┘
TSV│
┌──────┴──────┐
│ 32MB L3 │ ← 基础die
│ Base Cache │
└─────────────┘
Total: 96MB L3
技术特点:
MI300A是业界首个真正的CPU-GPU统一封装处理器:
MI300A架构概览:
┌───────────────────────────────────────┐
│ Active Interposer │
├───────────────────────────────────────┤
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │CPU │ │GPU │ │GPU │ │CPU │ │
│ │Tile │ │XCD │ │XCD │ │Tile │ │
│ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ │
│ │ │ │ │ │
│ ┌──┴───────┴───────┴───────┴──┐ │
│ │ Unified Memory Fabric │ │
│ └──┬───────┬───────┬───────┬──┘ │
│ │ │ │ │ │
│ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ │
│ │HBM3 │ │HBM3 │ │HBM3 │ │HBM3 │ │
│ │Stack│ │Stack│ │Stack│ │Stack│ │
│ └─────┘ └─────┘ └─────┘ └─────┘ │
└───────────────────────────────────────┘
关键规格:
MI300A实现真正的共享内存:
地址空间映射:
Virtual Address Space (64-bit)
├── CPU Accessible Region
│ ├── Code Segment
│ ├── Data Segment
│ └── Shared Memory
└── GPU Accessible Region
├── Global Memory
├── Local Memory
└── Shared Memory (同CPU)
缓存一致性协议:
MI300采用先进的die-to-die互联:
互联层次:
1. Chiplet内部:Infinity Fabric on-die
- 带宽:>1TB/s
- 延迟:<10ns
2. Chiplet之间:Elevated Fanout Bridge
- 带宽:64GB/s per link
- 延迟:<20ns
3. HBM接口:2.5D TSV
- 带宽:665GB/s per stack
- 延迟:~100ns
异构集成带来的挑战:
功耗分配:
散热方案:
Liquid Cooling
│
┌──────▼──────┐
│ Cold Plate │
├─────────────┤
│ TIM │
├─────────────┤
│ Chiplets │ ← 热密度:>500W/cm²
├─────────────┤
│ Interposer │
└─────────────┘
Infinity Cache是AMD在RDNA2中引入的大容量片上缓存:
内存层次结构:
┌────────────────┐
│ L0 Cache │ 16KB per CU
├────────────────┤
│ L1 Cache │ 128KB per SA
├────────────────┤
│ L2 Cache │ 4-8MB Total
├────────────────┤
│ Infinity Cache │ 32-128MB
├────────────────┤
│ GDDR6/HBM │ System Memory
└────────────────┘
物理布局:
GPU Die平面图:
┌─────────────────────────────┐
│ ┌───┐ Shader Arrays ┌───┐│
│ │IC │ ┌─┐┌─┐┌─┐┌─┐ │IC ││
│ │ │ │C││C││C││C│ │ ││
│ │32 │ │U││U││U││U│ │32 ││
│ │MB │ └─┘└─┘└─┘└─┘ │MB ││
│ └───┘ └───┘│
│ ┌───┐ Memory Ctrlr ┌───┐│
│ │IC │ ┌──────────┐ │IC ││
│ │32 │ │ L2 │ │32 ││
│ │MB │ │ Cache │ │MB ││
│ └───┘ └──────────┘ └───┘│
└─────────────────────────────┘
IC = Infinity Cache Slice
缓存命中率优化:
带宽放大效应:
有效带宽计算:
Effective BW = DRAM BW + (IC BW × Hit Rate)
示例(RX 6900 XT):
DRAM: 512GB/s
IC: 1.94TB/s × 65% = 1.26TB/s
Total: 1.77TB/s有效带宽
Infinity Cache的能效优势:
访问能耗对比(pJ/bit):
L0 Cache: 0.5
L1 Cache: 1.0
L2 Cache: 2.5
Infinity Cache: 5.0
GDDR6: 15.0
System DRAM: 50.0
功耗节省:~40%(vs 纯GDDR6)
xGMI(inter-chip Global Memory Interconnect)是AMD的高速互联协议:
协议特性:
性能规格:
xGMI代际演进:
xGMI 1.0: 23GB/s per link
xGMI 2.0: 50GB/s per link
xGMI 3.0: 64GB/s per link
xGMI 4.0: 96GB/s per link(规划中)
4-GPU全连接:
GPU0 ═══════ GPU1
║ ╲ ╱ ║
║ ╲ ╱ ║
║ ╳ ║
║ ╱ ╲ ║
║ ╱ ╲ ║
GPU2 ═══════ GPU3
═══ : xGMI 3-link (192GB/s)
║/╲ : xGMI 1-link (64GB/s)
8-GPU立方体拓扑:
┌─────┐ ┌─────┐
│GPU4 │───────│GPU5 │
└──┬──┘ └──┬──┘
│ ╲ ╱ │
┌──┴──┐ ╲ ╱ ┌──┴──┐
│GPU6 │───╳───│GPU7 │
└──┬──┘ ╱ ╲ └──┬──┘
│ ╱ ╲ │
┌──┴──┐ ┌──┴──┐
│GPU0 │───────│GPU1 │
└──┬──┘ └──┬──┘
│ ╲ ╱ │
┌──┴──┐ ╲ ╱ ┌──┴──┐
│GPU2 │───╳───│GPU3 │
└─────┘ ╱ ╲ └─────┘
灵活的PCIe/xGMI复用:
MI250X配置示例:
Total 128 PCIe Gen4 lanes
├── 64 lanes as xGMI (4×16)
│ └── GPU-to-GPU互联
└── 64 lanes as PCIe
├── 16× to CPU
├── 16× to NVMe
├── 16× to Network
└── 16× Reserved
ROCm软件栈支持:
// HIP代码示例:多GPU点对点通信
hipError_t enableP2P() {
int deviceCount;
hipGetDeviceCount(&deviceCount);
for(int i = 0; i < deviceCount; i++) {
for(int j = 0; j < deviceCount; j++) {
if(i != j) {
hipDeviceEnablePeerAccess(j, 0);
}
}
}
return hipSuccess;
}
// 直接内存访问
__global__ void p2pKernel(float* localData,
float* remoteData) {
int idx = blockIdx.x * blockDim.x + threadIdx.x;
// 直接访问远程GPU内存
localData[idx] = remoteData[idx] * 2.0f;
}
MI300A代表了几个关键技术突破:
1. 真正的统一内存架构
传统的CPU-GPU系统需要显式数据拷贝:
传统模型:
CPU Memory ──copy──> PCIe ──copy──> GPU Memory
延迟:~10μs,带宽受限于PCIe
MI300A模型:
Unified HBM3 ←─direct access─→ CPU/GPU
延迟:~100ns,带宽:5.3TB/s
2. chiplet级别的异构集成
不同于其他厂商的封装级集成,MI300A在chiplet级别实现异构:
3. 灵活的资源配置
配置选项:
├── Compute Mode
│ ├── CPU-only:24核心全速运行
│ ├── GPU-only:6个XCD全速运行
│ └── Hybrid:动态功耗分配
└── Memory Mode
├── Unified:所有HBM作为统一池
├── Partitioned:CPU/GPU独立分区
└── NUMA:细粒度NUMA控制
大模型训练性能:
训练GPT-3规模模型的性能对比:
通信开销分析(175B参数):
传统GPU集群:
- All-Reduce:45%时间
- 数据加载:15%时间
- 计算:40%时间
MI300A系统:
- All-Reduce:25%时间(统一内存减少拷贝)
- 数据加载:5%时间(CPU预处理)
- 计算:70%时间
性能提升:1.75×
科学计算应用:
分子动力学模拟(GROMACS):
传统加速方案:
CPU部分(力场计算)→ 数据传输 → GPU部分(短程力)
瓶颈:数据传输占30%时间
MI300A优化:
CPU/GPU并行计算,零拷贝共享
性能提升:2.1×
统一地址空间编程:
// MI300A统一内存编程示例
class UnifiedTensor {
private:
float* data; // 统一地址
size_t size;
public:
// CPU函数
void preprocessCPU() {
#pragma omp parallel for
for(size_t i = 0; i < size; i++) {
data[i] = normalize(data[i]);
}
}
// GPU kernel
__global__ void processGPU(float* data, size_t n) {
int idx = blockIdx.x * blockDim.x + threadIdx.x;
if(idx < n) {
data[idx] = activation(data[idx]);
}
}
// 无缝切换
void hybridProcess() {
preprocessCPU(); // CPU预处理
hipLaunchKernel(processGPU, ...); // GPU计算
// 无需数据传输!
}
};
MI300系列的技术路线图:
MI300X(纯GPU):
MI300C(规划中):
下一代Infinity架构:
AMD Infinity架构通过创新的chiplet设计和互联技术,实现了从消费级到数据中心的全产品线覆盖。关键技术创新包括:
架构层面:
性能优化:
异构集成:
关键公式总结:
有效带宽计算: \(BW_{effective} = BW_{DRAM} + BW_{cache} \times HR_{cache}\)
NUMA访问延迟: \(Latency_{total} = Latency_{local} + Hops \times Latency_{IF}\)
功耗效率: \(Energy_{per\_bit} = \frac{P_{dynamic} + P_{static}}{Throughput}\)
Chiplet良率提升: \(Yield_{chiplet} = \left(Yield_{monolithic}\right)^{Area_{ratio}}\)
练习20.1:计算Infinity Fabric带宽 一个EPYC 7763处理器有8个CCD,每个CCD通过Infinity Fabric 2连接到IO Die。如果每个链路提供50GB/s双向带宽,计算: a) 总聚合带宽 b) 任意两个CCD之间的最大带宽 c) 所有CCD同时访问内存的理论峰值带宽
Hint:考虑IO Die的内部交换能力和内存控制器数量。
练习20.2:3D V-Cache性能分析 Ryzen 7 5800X3D拥有96MB L3缓存(32MB基础+64MB V-Cache)。假设:
计算V-Cache带来的平均访问延迟改善。
Hint:考虑更大缓存容量对命中率的影响。
练习20.3:MI300A内存带宽利用 MI300A配备8个HBM3 stack,每个提供665GB/s带宽。在运行混合CPU-GPU工作负载时:
计算实际所需的内存带宽。
Hint:共享数据不需要重复传输。
练习20.4:EPYC NUMA优化 设计一个64核EPYC系统的NUMA亲和性策略,运行数据库应用:
提出最优的进程和内存布局方案。
Hint:考虑将热点数据复制到多个NUMA节点。
练习20.5:Infinity Cache优化 为4K游戏渲染优化Infinity Cache配置:
设计缓存分配和替换策略。
Hint:不同数据类型有不同的访问模式。
练习20.6:xGMI拓扑设计 设计一个8-GPU MI250X系统的互联拓扑,要求:
绘制拓扑图并计算关键指标。
Hint:考虑超立方体或蝶形网络。
练习20.7:MI300A编程优化 优化以下矩阵乘法代码以充分利用MI300A的统一内存:
// 原始代码
void matmul(float* A, float* B, float* C, int N) {
// CPU: 数据准备
prepare_data(A, B, N);
// 拷贝到GPU
hipMemcpy(d_A, A, size, hipMemcpyHostToDevice);
hipMemcpy(d_B, B, size, hipMemcpyHostToDevice);
// GPU: 计算
matmul_kernel<<<...>>>(d_A, d_B, d_C, N);
// 拷贝回CPU
hipMemcpy(C, d_C, size, hipMemcpyDeviceToHost);
// CPU: 后处理
postprocess(C, N);
}
Hint:利用统一内存避免显式拷贝。
练习20.8:功耗优化策略 为MI300A设计动态功耗管理策略:
在混合工作负载下优化功耗分配。
Hint:考虑工作负载特征和热约束。
问题:随机的内存分配导致大量跨NUMA访问 解决:使用numactl绑定进程和内存
问题:热点访问模式导致IF饱和 解决:数据分片和负载均衡
问题:过度的原子操作导致性能下降 解决:批量处理和本地累加
问题:xGMI链路未正确初始化 解决:检查BIOS设置和拓扑验证
问题:未预料的功耗节流 解决:合理的TDP配置和散热设计
问题:HBM通道利用不均 解决:交织访问和通道优化