2、MLU硬件架构基础:MLU核心计算单元(MLU Core)、存储层次(HBM/DDR/SRAM)、互联总线与PCIe接口
寒武纪MLU(Machine Learning Unit)系列芯片是面向云端训练与推理的专用AI加速处理器。要深入理解编译器如何将神经网络算子映射到硬件上,首先必须建立对MLU硬件架构的清晰认知。本章将围绕MLU Core的计算模型、多级存储体系、片内互联总线以及对外PCIe接口四个维度展开,帮助读者构建从“芯片物理结构”到“编译器抽象视图”的桥梁。
2.1 MLU Core:AI计算的基本执行单元
核心原理:MLU Core是芯片上执行矩阵乘、卷积、激活函数等运算的物理引擎。与CPU的通用ALU不同,MLU Core针对深度学习负载做了大量定制化设计。一个典型的MLU Core内部包含多个执行流水线:矩阵运算单元(Matrix Unit,负责GEMM)、向量运算单元(Vector Unit,负责逐元素操作)、标量单元(Scalar Unit,负责地址计算和控制流)。这些单元通过内部的寄存器文件和局部SRAM(Local Memory)进行数据交互,形成“加载-计算-存储”的流水线闭环。
编译器视角下,MLU Core被抽象为一个“带本地存储的SIMD处理器”。每个Core可以独立执行一个kernel,也可以多个Core协同执行同一个大算子。编译器需要将算子切分为适合单个Core执行的子任务,并管理好每个Core的局部存储空间。
| 执行单元 | 典型宽度 | 支持的数据类型 | 典型指令 | 编译器关注点 |
|---|---|---|---|---|
| Matrix Unit | 16x16 或 32x32 MAC | FP16, BF16, INT8, INT4 | GEMM, 卷积 | 数据分块(Tiling)、K维循环展开 |
| Vector Unit | 128-512 通道 | FP32, FP16, INT32 | Add, Mul, Activation, Layout转换 | 向量化、内存对齐、广播处理 |
| Scalar Unit | 32-bit | INT32, FP32 | 地址计算、循环控制、分支 | 循环不变代码外提、强度削减 |
2.2 存储层次:从HBM到寄存器文件的五级体系
核心原理:MLU的存储层次设计遵循“容量与带宽的权衡”原则。从外到内依次为:HBM/DDR(片外主存)→ 共享SRAM(SMEM,片上全局共享)→ 局部SRAM(LMEM,每个Core私有)→ 寄存器文件(RF)→ 立即数/常量。编译器必须显式管理数据在这些层级之间的搬移,因为MLU不像CPU那样有自动的Cache一致性协议。
各级存储的关键参数与角色
- HBM2E/DDR4(片外):容量8-32GB,带宽约1.2TB/s(HBM)或50GB/s(DDR4)。用于保存模型权重、激活值、优化器状态。编译器需要将数据以DMA方式批量搬入片上。
- 共享SRAM(SMEM):容量2-4MB,带宽极高(多端口访问)。用于跨Core数据交换、卷积im2col重排、Reduce中间结果。编译器需避免bank conflict。
- 局部SRAM(LMEM):每个Core私有,容量64-256KB。存放当前算子的输入tile和输出tile。编译器通过双缓冲(Double Buffering)隐藏DMA延迟。
- 寄存器文件(RF):容量最小(几十KB),访问延迟1个周期。用于Matrix Unit的操作数缓存和中间累加。
- 计算单个tile所需的输入、输出、权重总大小。
- 若总大小 ≤ LMEM容量,则直接加载并计算。
- 若超出LMEM,则尝试将数据分块(Tiling),或利用SMEM做中转。
- 若SMEM也不足,则必须拆分算子为多个kernel,或使用HBM直接访问(性能下降明显)。
2.3 互联总线:NoC与Crossbar的工程实现
核心原理:MLU片内互联负责连接MLU Core集群、SMEM、存储控制器、PCIe控制器以及视频编解码等IP。现代MLU采用二维Mesh NoC(Network-on-Chip)或Crossbar结构。Mesh结构可扩展性好,但延迟随跳数增加;Crossbar延迟低但面积大。实际芯片常采用混合方案:Core集群内部用Crossbar,集群之间用Mesh。
编译器需要感知互联拓扑,以避免热点路由。例如,若两个Core频繁交换数据,应尽量让它们在物理位置上相邻。此外,DMA引擎通过互联总线访问HBM时,需要仲裁机制保证带宽公平性。
| 互联方式 | 延迟 | 带宽 | 可扩展性 | 典型应用 |
|---|---|---|---|---|
| Crossbar | 固定低延迟(~5ns) | 极高(全端口并发) | 差(面积O(n²)) | Core集群内部(16-32端口) |
| 2D Mesh NoC | 随跳数增加(每跳~2ns) | 每链路独立带宽 | 好(可扩展到上百节点) | 集群间通信、全局数据共享 |
2.4 PCIe接口:Host与MLU的数据通道
核心原理:PCIe(Peripheral Component Interconnect Express)是MLU与Host CPU之间的标准高速串行接口。当前主流MLU支持PCIe Gen4 x16,理论单向带宽约32GB/s。PCIe接口在MLU内部由三部分组成:物理层(PHY)、数据链路层、事务层。编译器通过驱动调用DMA引擎,将Host内存中的数据经PCIe搬运到MLU的HBM中,或反向搬回。
关键工程点在于PCIe TLP(Transaction Layer Packet)的大小与对齐。通常,每次DMA传输建议≥256字节,且地址需4KB对齐,否则带宽利用率会显著下降。此外,PCIe支持地址映射(BAR)和MSI-X中断,用于Host与MLU之间的控制信号传递。
2.5 案例拆解:ResNet-50第一个卷积层的数据流映射
场景与目标:假设输入为224x224x3的RGB图像,权重为7x7x3x64,输出为112x112x64。目标是将该卷积层高效映射到MLU上,并分析各硬件模块的参与情况。
初始参数:MLU配置为16个Core,每个Core的LMEM为128KB,SMEM为2MB,HBM带宽为1TB/s,PCIe带宽为32GB/s。
分析过程:
- 数据量估算:输入图像约150KB,权重约9.4KB,输出约800KB。总数据量约1MB,可完全放入SMEM。
- 分块策略:将输出特征图按空间位置切分为16份,每个Core负责处理112x112x64/16 = 784个输出像素。
- 数据加载:Host通过PCIe将图像和权重以DMA方式写入HBM(约1MB,耗时约0.03ms)。然后,DMA将输入tile从HBM搬入SMEM(约1MB,耗时约0.001ms)。
- 计算映射:每个Core从SMEM读取自己需要的输入区域(含padding),执行im2col+GEMM。Matrix Unit完成乘加,Vector Unit执行ReLU。
- 结果写回:输出tile先写入LMEM,再批量写回SMEM,最后通过DMA写回HBM。
结果与复盘:该层总耗时约0.15ms,其中计算占60%,数据搬移占40%。优化空间在于:将权重常驻SMEM,避免重复加载;使用双缓冲隐藏DMA延迟。若直接使用HBM访问而不经过SMEM,耗时将增加3倍。