4、AI芯片核心架构:计算单元(MAC阵列、SIMD、脉动阵列)、存储层次(寄存器、缓存、HBM)、片上网络(NoC)与数据通路设计
AI芯片的算力并非单纯由晶体管数量决定,而是由计算单元、存储层次与片上通信三者的协同效率共同决定。在《全额支付AI芯片架构与算子优化实战》课程中,理解这三者的物理实现与数据流约束,是进行算子映射、访存优化和性能调优的前提。本章将深入拆解MAC阵列、SIMD与脉动阵列的差异,剖析寄存器到HBM的存储层级,并阐明NoC如何决定数据通路的带宽与延迟。只有将算法指令与硬件拓扑对齐,才能实现理论峰值到实际吞吐的逼近。
4.1 计算单元:MAC阵列、SIMD与脉动阵列的架构差异
4.1.1 核心原理:三种计算范式的物理实现
AI芯片的计算单元设计直接决定了算力上限与能效比。MAC(乘累加)阵列是最基础的并行计算单元,由多个乘法器和加法器组成,每个时钟周期可完成多次乘加操作。例如,一个16×16的MAC阵列包含256个乘加单元,可在一个周期内完成256次乘加。MAC阵列的优点是结构简单、控制逻辑少,适合矩阵乘法和卷积等规则运算。
SIMD(单指令多数据)单元则采用向量化执行方式,一条指令同时作用于多个数据元素。与MAC阵列不同,SIMD单元通常包含ALU(算术逻辑单元)、移位器、激活函数单元等,能够执行更复杂的运算,如ReLU、池化、归一化等。SIMD的灵活性更高,但控制逻辑和指令解码开销也更大。
脉动阵列(Systolic Array)是一种特殊的数据流驱动架构,数据在阵列中逐级传递,每个处理单元(PE)只与相邻PE通信。以Google TPU为例,其256×256的脉动阵列中,权重预先加载到PE中,激活数据从左侧流入,部分和向下流动,最终在底部输出。这种设计极大减少了数据搬运次数,但要求数据流高度规则,对不规则算子(如动态形状的稀疏计算)支持较差。
| 特性 | MAC阵列 | SIMD单元 | 脉动阵列 |
|---|---|---|---|
| 数据流模式 | 广播/多播 | 向量加载-计算-存储 | 逐级流水传递 |
| 控制复杂度 | 低 | 中 | 低(数据驱动) |
| 灵活性 | 中(规则运算) | 高(支持复杂指令) | 低(规则数据流) |
| 能效比(TOPS/W) | 中 | 中低 | 高 |
| 典型应用 | 卷积、矩阵乘 | 激活、池化、归一化 | 固定形状的矩阵乘 |
4.1.2 判断方法:如何为算子选择计算单元
在实际算子优化中,需要根据算子的计算特征选择匹配的计算单元。判断流程如下:
- 分析算子类型:如果是矩阵乘法或标准卷积,优先考虑MAC阵列或脉动阵列;如果是逐元素操作(如激活函数)、归约操作(如求和、最大值),则使用SIMD单元。
- 评估数据复用性:如果权重可复用且数据流规则,脉动阵列能最大化利用数据复用;如果数据流不规则(如稀疏卷积),MAC阵列配合灵活的路由更合适。
- 检查控制流复杂度:若算子包含大量条件分支或动态形状,SIMD的指令级灵活性更优。
4.1.3 案例拆解:卷积算子在三种单元上的映射
假设一个3×3卷积,输入特征图尺寸为64×64×128,输出通道为256。在MAC阵列上,可将卷积展开为矩阵乘,利用256个MAC并行计算输出像素的部分和。在SIMD单元上,可对每个输出通道的向量化数据进行乘加,但需要多次循环。在脉动阵列上,将权重固定到PE中,输入特征图从左向右流动,每个PE计算一个输出通道的部分和。
实测数据(基于某AI加速芯片模拟器):MAC阵列完成该卷积需12,582个周期,SIMD需28,672个周期,脉动阵列仅需8,192个周期。但脉动阵列的输入数据需要按特定顺序排列,若输入特征图来自前一层的不规则输出,则需要额外的数据重排开销。
4.1.4 常见误区与总结
- 误区一:认为MAC阵列数量越多性能越高。实际上,若存储带宽不足,MAC阵列会因数据饥饿而空转,利用率大幅下降。
- 误区二:忽略脉动阵列的边界效应。当矩阵尺寸不是阵列尺寸的整数倍时,会产生大量空闲PE,需通过填充(Padding)或分块处理。
- 误区三:将SIMD用于高密度矩阵乘。SIMD的指令开销和访存模式不适合高密度计算,应使用专用矩阵单元。
总结:计算单元的选择不是孤立的,必须与数据布局、存储层次和片上网络协同设计。在算子优化时,先确定计算模式,再设计数据分块和路由策略。
4.2 存储层次:寄存器、缓存与HBM的协同设计
4.2.1 核心原理:存储墙问题的硬件解法
AI芯片的算力增长远快于DRAM带宽增长,导致“存储墙”问题。为此,现代AI芯片采用多级存储层次:寄存器文件(RF)位于计算单元内部,容量最小(通常几十KB),延迟约1ns;L1/L2缓存(SRAM)位于片上,容量从几百KB到几十MB,延迟5-20ns;HBM(高带宽存储)通过3D堆叠和硅通孔(TSV)技术,提供高达1-3TB/s的带宽,但延迟在100ns以上。
存储层次的设计目标是通过数据复用减少对HBM的访问。例如,在卷积算子中,输入特征图的某个像素会被多个输出通道复用,若能将输入块缓存到SRAM中,则可显著降低HBM访问次数。
4.2.2 操作流程:数据分块(Tiling)与缓存命中优化
数据分块是算子优化的核心步骤,其流程如下:
- 确定分块维度:根据SRAM容量,将输入特征图、权重和输出划分为多个块(Tile)。例如,将64×64×128的输入划分为4个32×32×128的块。
- 计算缓存需求:每个块需要的SRAM空间 = 输入块大小 + 权重块大小 + 输出块大小。确保总和小于L2缓存容量。
- 设计循环顺序:在循环中,先加载输入块到SRAM,再加载权重块,计算完成后写回输出。通过循环重排(Loop Reordering)最大化数据复用。
- 使用双缓冲(Double Buffering):在计算当前块时,预取下一个块的数据,隐藏HBM访问延迟。
4.2.3 案例拆解:HBM带宽瓶颈的定位与解决
在某AI推理芯片上运行Transformer模型时,发现矩阵乘算子(GEMM)的利用率仅为45%。通过性能分析工具(如NVIDIA Nsight Compute)发现,HBM读带宽达到理论峰值的92%,而计算单元利用率不足50%。
分析过程:检查数据复用率,发现权重矩阵被重复加载了多次。原因是权重矩阵尺寸为1024×1024,而L2缓存只有4MB,无法容纳整个权重。进一步分析发现,分块策略将权重按行分块,但每个输出块需要所有权重行,导致权重被反复读取。
优化操作:将分块策略改为按列分块,使每个输出块只依赖部分权重列,同时增加权重在SRAM中的驻留时间。优化后,HBM读带宽降至理论峰值的61%,利用率提升至78%。
4.2.4 常见误区与总结
- 误区一:盲目增大缓存容量。SRAM面积和功耗开销大,且缓存增大会增加访问延迟,需权衡。
- 误区二:忽略数据布局对缓存的影响。NHWC与NCHW布局在不同硬件上的缓存命中率差异显著,需根据硬件特性选择。
- 误区三:未考虑多级缓存的包含性。若L1和L2不包含,数据可能被重复存储,浪费空间。
总结:存储层次优化的核心是“数据复用”,通过分块、双缓冲和布局调整,让数据尽可能在靠近计算单元的位置被多次使用。
4.3 片上网络(NoC)与数据通路设计
4.3.1 核心原理:NoC的拓扑与路由机制
片上网络(NoC)连接计算单元、存储层次和I/O接口,其拓扑结构直接影响数据通路的带宽和延迟。常见的拓扑包括:
- Mesh(网格):每个节点与上下左右四个邻居相连,易于扩展,但多跳延迟高。适用于大规模芯片(如Intel Ponte Vecchio)。
- Crossbar(交叉开关):所有节点通过开关矩阵直接连接,延迟低,但面积和布线复杂度随节点数平方增长。适用于中小规模芯片(如NVIDIA A100的L2到SM的互联)。
- Ring(环形):节点首尾相连,布线简单,但带宽受限。适用于节点数较少的场景。
数据通路设计包括单播(Unicast)、多播(Multicast)和广播(Broadcast)三种模式。在AI算子中,权重广播和激活多播是常见需求,NoC需支持高效的多播路由以减少拥塞。
4.3.2 判断方法:如何评估NoC瓶颈
评估NoC性能时,需关注以下指标:
- 带宽利用率:实际吞吐与理论带宽之比。若利用率超过80%,则可能成为瓶颈。
- 平均延迟:数据从源到目的地的平均时间,包括路由延迟和排队延迟。
- 拥塞点:通过性能计数器定位哪些链路的队列深度持续较高。
4.3.3 案例拆解:多核芯片上的数据流映射
某AI芯片有16个计算核心(C0-C15),通过4×4 Mesh网络连接。运行一个大型卷积算子时,发现核心C0-C3的利用率高达90%,而C12-C15的利用率仅为30%。
分析过程:通过NoC性能计数器发现,C0-C3到L2缓存之间的链路带宽利用率达到95%,而C12-C15的链路利用率仅为20%。原因是数据分块时,输入特征图被连续分配到C0-C3,导致这些核心需要频繁访问L2,而其他核心则空闲。
优化操作:将输入特征图按循环分配(Round-Robin)到所有核心,使每个核心处理的数据块均匀分布。同时,将权重数据通过多播方式一次性广播到所有核心,减少单播请求。优化后,所有核心的利用率均达到75%以上,整体性能提升1.8倍。
4.3.4 常见误区与总结
- 误区一:只关注计算单元利用率,忽略NoC拥塞。NoC拥塞会导致计算单元等待数据,利用率下降。
- 误区二:认为Mesh拓扑一定优于Crossbar。对于小规模芯片,Crossbar的延迟优势更明显。
- 误区三:未考虑数据通路的QoS。在混合负载(如计算与通信并发)下,需为关键数据流设置优先级。
总结:NoC设计需与算子映射协同,通过均匀分配数据、利用多播特性和监控拥塞点,才能充分发挥计算单元的算力。