4. NPU核心原理
NPU(Neural Processing Unit)并非简单地将CPU或GPU的ALU堆叠复用,而是针对神经网络计算中“高并行、高复用、大吞吐、低精度容忍”的特性,从计算范式、存储组织到指令调度进行了体系化重构。理解NPU的核心原理,是进行异构集成部署(尤其是与DPU协同处理边缘大芯片任务)的前提。本章将从计算单元、存储层次、数据流与指令集架构四个维度展开,并结合边缘部署中的实际约束进行剖析。
4.1 计算单元:从MAC阵列到PE的组织逻辑
NPU的核心计算单元是乘加运算器(MAC),其基本操作是 D = A × B + C。单个MAC的硬件开销极小,但神经网络推理中超过90%的运算量是矩阵乘法和卷积,因此NPU将成千上万个MAC组织成处理单元(PE)阵列,并以脉动阵列或SIMD方式协同工作。
在实际芯片中,PE阵列的组织方式决定了计算效率的上限。以边缘部署常见的NPU为例,其计算单元通常具备以下特征:
- MAC数量与位宽:边缘NPU的MAC数量从几十GOPS到几百TOPS不等,位宽多为INT8/INT16,部分支持FP16。例如,瑞芯微RK3588的NPU为6 TOPS算力,采用INT8精度;而寒武纪MLU220则支持INT8/FP16混合精度。
- PE内部结构:每个PE包含一个MAC、一个累加器、若干寄存器。多个PE组成一个计算块(Tile),共享局部控制逻辑。
- 脉动阵列设计:Google TPU采用脉动阵列,数据在PE间逐级传递,减少寄存器访问次数,但灵活性较差;边缘NPU更多采用可配置的2D阵列,支持不同卷积核尺寸的映射。
在异构集成部署中,NPU的计算单元需要与DPU(数据处理单元)协同。DPU负责网络数据包处理、存储协议卸载,而NPU专注AI推理。两者通过片上网络(NoC)或PCIe连接,NPU计算单元产生的中间结果可以直接通过DPU的DMA引擎搬运,避免CPU介入。
4.2 存储层次:片上SRAM与外部DDR的权衡
NPU的存储层次设计直接决定了数据搬运能耗和延迟。与CPU的多级Cache不同,NPU的存储层次更加扁平化,且由软件(编译器)显式管理,而非硬件自动缓存。
| 存储层级 | 容量范围 | 访问延迟 | 功耗/bit | 管理方式 |
|---|---|---|---|---|
| 寄存器文件(RF) | 几十KB | 1-2周期 | 最低 | 编译器分配 |
| 片上SRAM(Local Buffer) | 几百KB ~ 几MB | 5-20周期 | 中等 | DMA显式搬运 |
| 全局共享内存(Global) | 几MB ~ 几十MB | 20-100周期 | 较高 | 多核共享 |
| 外部DDR/LPDDR | 几GB | 200-500周期 | 最高 | 软件管理 |
边缘NPU的片上SRAM通常只有2-8MB,而一个YOLOv5s模型的权重约14MB,激活值约几十MB。因此,数据复用是存储层次设计的核心目标。具体策略包括:
- 权重驻留:将当前层权重全部加载到SRAM,输入特征图分块(Tiling)处理。
- 激活值压缩:使用ReLU后稀疏性,以位图方式跳过零值存储。
- 双缓冲机制:DMA预取下一块数据的同时,计算单元处理当前块,隐藏搬运延迟。
在异构集成场景中,NPU与DPU共享DDR控制器。DPU处理网络报文时会频繁访问DDR,与NPU产生带宽竞争。解决思路是:① 在NPU侧配置独立的存储分区;② 使用DPU的QoS机制限制其DDR占用率;③ 将NPU的权重预加载到DPU管理的NVMe SSD中,通过PCIe直接加载。
4.3 数据流:三种经典模式与边缘适配
数据流决定了数据如何在存储层次和计算单元之间流动。不同的数据流策略对硬件利用率、能耗和延迟有显著影响。NPU设计中主要有三种经典数据流:
- 权重固定(Weight Stationary):权重从SRAM加载后驻留在PE中,输入特征图流经所有PE。适用于卷积核较小、权重复用率高的场景(如3×3卷积)。
- 输入固定(Input Stationary):输入特征图驻留在PE中,权重流经PE。适用于全连接层或1×1卷积。
- 输出固定(Output Stationary):部分和(Partial Sum)驻留在PE中,输入和权重均流动。适用于需要大量累加的场景(如深度可分离卷积)。
边缘NPU通常支持可配置的数据流模式,编译器根据算子类型自动选择。例如,地平线征程5的BPU(Brain Processing Unit)采用“数据驱动”架构,通过指令控制数据流方向,而非固定模式。
数据流设计还涉及片上网络(NoC)的拓扑。边缘NPU的NoC通常采用Mesh或Crossbar结构。Mesh结构扩展性好,但延迟随跳数增加;Crossbar延迟低,但面积开销大。在异构集成中,NPU的NoC需要与DPU的NoC进行桥接,确保数据在芯片间高效流转。
4.4 指令集架构:从标量到矩阵的层级设计
NPU的指令集架构(ISA)与CPU/GPU有本质区别。CPU的ISA面向通用计算,指令粒度小;NPU的ISA面向张量计算,指令粒度大,一条指令可以触发整个PE阵列执行一次矩阵乘法。
典型的NPU ISA包含以下指令类别:
| 指令类别 | 功能描述 | 示例 | 执行周期 |
|---|---|---|---|
| 矩阵指令 | 执行矩阵乘法/卷积 | MM 0x1000, 0x2000, 0x3000 | 数百周期 |
| 向量指令 | 执行激活、池化、归一化 | VADD, VRELU, VPOOL | 数十周期 |
| 标量指令 | 控制流、地址计算 | MOV, CMP, JMP | 1-5周期 |
| DMA指令 | 数据搬运(DDR↔SRAM) | DMA_LOAD, DMA_STORE | 与数据量相关 |
| 同步指令 | 多核/多引擎同步 | SYNC, BARRIER | 可变 |
指令集的设计哲学是“一次描述,批量执行”。编译器将深度学习模型编译为NPU指令序列,指令中携带张量地址、维度信息、数据格式等参数。边缘NPU的ISA通常采用VLIW(超长指令字)或VLIW+SIMD混合设计,以在有限的功耗预算内获得高指令级并行度。
// 示例:NPU汇编指令片段(伪代码)
// 加载权重到SRAM地址0x1000
DMA_LOAD 0x1000, DDR_ADDR_WEIGHT, SIZE_WEIGHT
// 加载输入特征图到SRAM地址0x2000
DMA_LOAD 0x2000, DDR_ADDR_INPUT, SIZE_INPUT
// 执行3x3卷积,输出到SRAM地址0x3000
CONV 0x1000, 0x2000, 0x3000, CH_IN=64, CH_OUT=128, K=3
// 执行ReLU激活
VRELU 0x3000, 0x3000, SIZE_OUTPUT
// 将结果写回DDR
DMA_STORE DDR_ADDR_OUTPUT, 0x3000, SIZE_OUTPUT
// 同步等待DMA完成
SYNC
在异构集成部署中,指令集架构的协同至关重要。NPU执行推理任务时,DPU可能同时执行网络协议处理。两者需要共享中断机制和状态寄存器。例如,NPU完成一次推理后,通过中断通知DPU,DPU将结果封装为网络报文发送。这种协同要求指令集层面支持跨引擎的同步原语。
4.5 案例拆解:边缘AI盒子中NPU与DPU的协同推理
以一个典型的边缘AI视频分析盒子为例,该设备集成了一颗包含NPU和DPU的SoC芯片,用于实时处理8路1080p视频流,执行人员检测和车牌识别。
背景与约束:设备功耗限制在15W以内,NPU算力为12 TOPS(INT8),DPU负责处理RTSP流解码和网络传输。初始方案中,NPU直接通过PCIe访问DDR中的视频帧,导致DDR带宽占用率高达85%,CPU利用率达60%,系统整体帧率仅为12 FPS,远低于目标的25 FPS。
分析过程:通过Profiling工具发现,NPU在读取视频帧时,每帧需要从DDR读取约2MB数据(1080p YUV420),而DPU解码后的视频帧存储在DDR的另一区域。NPU的DMA引擎与DPU的DMA引擎存在竞争,且NPU的L2缓存命中率仅为40%。
优化操作:
- 数据路径重构:将DPU解码后的视频帧直接写入NPU的专用SRAM分区(通过NoC直连),绕过DDR。这需要修改DPU的固件,将输出地址映射到NPU的保留地址空间。
- 指令级优化:将YOLOv5s的预处理(Resize、Normalize)从CPU迁移到NPU的向量指令单元,减少CPU介入。
- 双缓冲与流水线:在NPU指令序列中插入双缓冲DMA指令,使视频帧的搬运与推理计算重叠。
结果对比:优化后,DDR带宽占用率降至45%,CPU利用率降至20%,系统帧率提升至28 FPS,功耗仅增加0.8W。代价是NPU的SRAM可用容量减少了1.5MB(用于视频帧缓冲),导致部分大模型需要重新进行Tiling规划。
复盘经验:在异构集成中,数据路径的设计比计算单元的选择更重要。NPU与DPU之间的数据交换应尽量通过片上NoC完成,避免DDR回环。同时,指令集层面的协同(如DPU触发NPU启动)可以显著降低调度延迟。
4.6 常见误区与总结复盘
在NPU核心原理的理解和应用中,以下误区需要特别警惕:
- 误区一:只看TOPS算力。TOPS是理论峰值,实际有效算力受数据流、存储带宽、算子库优化程度影响。建议使用MLPerf Edge或AI Benchmark等标准化测试。
- 误区二:忽略精度与动态范围。INT8量化需要校准数据集,否则精度损失可能超过5%。边缘NPU的INT8支持通常需要配合量化感知训练。
- 误区三:将NPU视为黑盒。虽然编译器自动生成指令,但理解数据流和存储层次有助于排查性能瓶颈。例如,当推理延迟异常时,应检查是否发生了SRAM溢出导致的DDR频繁访问。
- 误区四:忽视与DPU的协同。在边缘大芯片中,NPU和DPU共享电源域、时钟和中断控制器。设计时应统一考虑功耗管理策略,避免NPU高负载时DPU因电压下降而丢包。