2、NPU硬件基础:NPU架构组成、与GPU/CPU的差异及关键性能指标
NPU(Neural Processing Unit,神经网络处理单元)是专为深度学习推理与训练设计的专用处理器。与CPU的通用计算和GPU的并行渲染不同,NPU的硬件结构围绕“矩阵乘加”和“数据搬运”两大核心操作进行定制,其架构设计的核心目标是:在有限的功耗和面积预算内,最大化单位时间内的有效计算吞吐量。理解NPU的硬件组成、与CPU/GPU的本质差异以及性能指标的真实含义,是进行指令调度优化和硬件加速的前提。本章将从计算单元、存储层次、互联总线三个维度拆解NPU架构,并深入剖析TOPS、带宽与利用率之间的制约关系。
2.1 NPU计算单元:从MAC阵列到数据流引擎
核心原理:NPU的计算单元并非简单堆叠ALU,而是以“脉动阵列”(Systolic Array)或“近存计算”(Near-Memory Computing)为基本范式。以Google TPU的脉动阵列为例,其核心是一个二维的MAC(Multiply-Accumulate)单元网格,每个MAC单元只与相邻单元通信。当输入特征图(IFMap)和权重(Weight)以数据流方式“泵”入阵列时,每个时钟周期内所有MAC同时执行乘法并向右/向下传递部分和(Partial Sum)。这种结构消除了传统CPU/GPU中频繁的寄存器访问和指令解码开销,使得计算密度(每平方毫米的算力)达到极致。
现代NPU通常将计算单元划分为三个层次:
- 标量单元(Scalar Unit):负责地址生成、循环计数、分支控制等标量运算,相当于NPU的“指挥中枢”。它不执行矩阵运算,但决定了指令调度的节奏。
- 向量单元(Vector Unit):执行激活函数(ReLU/Sigmoid)、BatchNorm、Pooling、Element-wise操作等非矩阵运算。其SIMD宽度通常为128~512 bit,支持INT8/FP16混合精度。
- 矩阵单元(Matrix Unit / MAC阵列):核心计算引擎,规模从16×16到128×128不等。以128×128阵列为例,单周期可完成16,384次乘加运算,在1GHz频率下INT8算力可达32 TOPS。
判断方法:评估NPU计算单元能力时,不能只看MAC总数,还需关注:
- 数据流模式:是权重固定(Weight Stationary)还是输入固定(Input Stationary)?这决定了权重复用率和寄存器压力。
- 累加精度:INT8乘法的累加器是否为INT32?若累加精度不足,大矩阵运算时可能出现溢出或精度损失。
- 稀疏化支持:是否支持权重/激活的稀疏跳过?若支持,实际有效算力可提升2~4倍。
案例拆解:以某款7nm NPU为例,其MAC阵列为64×64,共4096个MAC单元,频率1.2GHz,INT8峰值算力为4096×2×1.2G=9.8 TOPS。在运行ResNet-50时,实测利用率仅62%,瓶颈在于激活函数的向量运算与矩阵运算串行执行——向量单元空闲等待MAC阵列完成卷积。通过指令级流水线优化(将ReLU与下一层卷积的权重加载重叠),利用率提升至81%。
2.2 存储层次与数据搬运:NPU性能的隐形瓶颈
核心原理:NPU的存储层次设计遵循“数据就近计算”原则。典型层次为:寄存器堆(RF)→ 共享内存(SMEM)→ 全局缓存(L2)→ 片外DRAM。每一级存储的容量和带宽相差约一个数量级:寄存器堆容量KB级、带宽TB/s级;共享内存容量MB级、带宽数百GB/s;片外DDR带宽仅几十GB/s。指令调度的核心任务之一,就是通过DMA(Direct Memory Access)预取和双缓冲(Double Buffering)技术,将数据从慢速存储提前搬运到快速存储,隐藏访存延迟。
存储层次的关键参数:
| 存储层级 | 典型容量 | 典型带宽 | 访问延迟 | 调度策略 |
|---|---|---|---|---|
| 寄存器堆(RF) | 64KB ~ 256KB | >2 TB/s | 1~2 周期 | 编译器静态分配 |
| 共享内存(SMEM) | 256KB ~ 2MB | 256~512 GB/s | 20~30 周期 | DMA 双缓冲 |
| 全局缓存(L2) | 4MB ~ 32MB | 64~128 GB/s | 100~200 周期 | 硬件预取/软件流水 |
| 片外DRAM | 8GB ~ 64GB | 32~64 GB/s(DDR5) | 200~400 周期 | 批量突发传输 |
操作流程:一个典型的NPU指令调度周期包含四个阶段:
- DMA加载(Load):将下一层所需的权重和输入从DRAM搬运至SMEM,此过程与当前层计算并行。
- 计算(Compute):MAC阵列从SMEM读取数据执行矩阵乘加,结果写入累加器。
- 向量处理(Vector):累加器数据经向量单元完成激活/池化,结果写回SMEM。
- DMA存储(Store):将输出特征图从SMEM写回DRAM,同时释放SMEM空间。
案例拆解:某AI加速卡在运行BERT-Large推理时,实测SMEM带宽利用率达92%,但MAC利用率仅45%。分析发现:每个Transformer Block的自注意力计算中,Q×K^T矩阵乘法的中间结果(seq_len×seq_len)需频繁写回SMEM再读取,导致数据搬运量是计算量的3倍。优化方案:将Softmax计算融合到矩阵乘法流水线中,避免中间结果落SMEM,最终MAC利用率提升至68%。
2.3 互联总线与系统集成:从NoC到片外接口
核心原理:NPU的互联总线负责连接计算单元、存储层次以及外部系统(CPU、DMA、其他加速器)。片上网络(NoC)通常采用Mesh或Ring拓扑,以提供高带宽、低延迟的数据通路。片外接口则通过PCIe、DDR/HBM控制器与主机或外部存储通信。互联总线的设计直接影响多核NPU的可扩展性和数据一致性。
互联总线的关键设计维度:
- 拓扑结构:Mesh拓扑适合多核NPU(如8×8阵列),每核与邻居通信延迟固定;Ring拓扑布线简单,但远距离通信延迟随跳数增加。
- 数据位宽:片上NoC通常为128~512bit,片外AXI总线为128~1024bit。位宽越大,单次传输数据量越大,但布线面积和功耗也越高。
- 缓存一致性:NPU通常不参与CPU的缓存一致性协议(如MESI),而是通过显式DMA同步。这降低了硬件复杂度,但要求编译器精确管理数据依赖。
判断方法:评估互联总线性能时,需关注以下指标:
- 每核带宽:总带宽除以核数,若每核带宽低于SMEM带宽的1/4,则多核扩展时可能出现通信瓶颈。
- 同步开销:核间同步(Barrier)的延迟,通常为几十到几百周期。若同步过于频繁,会严重降低并行效率。
- DMA并发度:支持多少个DMA通道同时工作?通道越多,数据搬运与计算的重叠度越高。
案例拆解:某云端推理芯片集成4个NPU核,通过2D Mesh互联。在运行YOLOv5时,4核并行处理4张输入图像,理论加速比应为4倍,实测仅2.8倍。分析发现:每个核完成计算后需通过NoC将结果汇总到核0进行NMS后处理,核间通信数据量虽小(仅检测框坐标),但同步次数高达2000次/帧,每次同步延迟约150周期,累计开销达300K周期。优化方案:将NMS后处理分配到各核本地执行,仅汇总最终结果,同步次数降至4次,加速比提升至3.6倍。
2.4 关键性能指标:TOPS、带宽与利用率的真实含义
核心原理:TOPS(Tera Operations Per Second)是NPU最常被引用的指标,但也是被误解最深的指标。TOPS的计算公式为:TOPS = MAC数量 × 2 × 时钟频率。其中“×2”表示一次乘加运算计为两次操作(乘法+加法)。然而,TOPS是理论峰值,实际性能取决于利用率(Utilization)和访存带宽。
Roofline模型:这是分析NPU性能边界的最有效工具。其核心思想是:
- 计算密集区(Compute-bound):当算数强度(Arithmetic Intensity = FLOPs/Byte)高于交叉点时,性能受限于TOPS。
- 访存密集区(Memory-bound):当算数强度低于交叉点时,性能受限于带宽。
交叉点 = 峰值算力 / 实际带宽。例如,某NPU峰值算力100 TOPS,片外带宽64GB/s,交叉点 = 100×10^12 / (64×10^9) ≈ 1562 FLOPs/Byte。若某算子的算数强度仅500 FLOPs/Byte,则其理论最高性能 = 500 × 64GB/s = 32 TOPS,仅为峰值的32%。
操作流程:评估NPU实际性能的步骤:
- 计算峰值TOPS:从芯片手册获取MAC数量和频率。
- 测量实际带宽:使用带宽测试工具(如STREAM)测量片外和片上带宽。
- 分析算子算数强度:统计目标模型各层的FLOPs和访存量。
- 绘制Roofline图:将各层标记在图上,识别瓶颈类型。
- 优化调度:对访存密集层进行算子融合、分块优化;对计算密集层进行流水线调度。
案例拆解:某NPU运行推理,峰值算力80 TOPS,片外带宽48GB/s。分析各层算数强度:
| 层类型 | FLOPs | 访存量 | 算数强度 | 瓶颈类型 |
|---|---|---|---|---|
| QKV投影(矩阵乘) | 2.4G | 1.2MB | 2000 | 计算密集 |
| Softmax | 0.1G | 2.0MB | 50 | 访存密集 |
| FFN(两层MLP) | 9.6G | 4.8MB | 2000 | 计算密集 |
| LayerNorm | 0.05G | 1.5MB | 33 | 访存密集 |
优化前,Softmax和LayerNorm因访存密集导致整体利用率仅40%。通过算子融合(将Softmax与QK^T矩阵乘融合,将LayerNorm与FFN融合),访存量降低60%,整体利用率提升至65%。