3、NPU体系结构总览:计算单元、存储层次、控制流、数据通路,以及典型NPU的宏观架构图

NPU(Neural Processing Unit)并非通用处理器的简单加速扩展,而是针对神经网络计算中“高并行、高复用、高吞吐”特征而设计的专用处理器。理解NPU的体系结构,核心在于把握四个维度:计算单元(如何做乘加)、存储层次(数据放哪里)、控制流(指令如何驱动)、数据通路(数据如何流动)。本章以Arm Ethos-U系列与自研NPU为参照,建立宏观架构视图,为后续深入各子模块打下基础。

典型NPU宏观架构(以Ethos-U55/自研NPU为参考) 计算单元阵列(Compute Array) MAC 阵列 8×8~16×16 INT8/INT16 激活/池化 ReLU/Softmax MaxPool/AvgPool 累加器/量化 32bit ACC Requant/Shift 向量处理单元(Vector Unit) 逐元素运算:Add/Mul/Compare/Select 支持Broadcast、Stride访问 存储层次(Memory Hierarchy) 寄存器/ACC KB级,零延迟 局部SRAM 128KB~2MB 主存接口 DDR/LPDDR DMA引擎 多通道、描述符驱动 权重/激活缓存 Double Buffer、Ping-pong 控制流(Control Flow) 指令解码 VLIW/标量 微码序列器 循环/跳转 中断/事件 完成/错误 数据通路(Data Path) 总线矩阵 AHB/AXI/NoC 数据广播/收集 Multicast/Reduce 同步/握手 Valid/Ready Load/Store DMA 指令 总线 外部接口 APB配置 / AXI主存 / 中断输出 / 调试JTAG 系统总线 图例 计算单元 存储层次 控制流 数据通路

3.1 计算单元:MAC阵列与向量单元的协同设计

核心原理

NPU的计算能力主要来自乘加(MAC)阵列。一个典型的MAC单元执行 D = A × B + C 操作,其中A为激活值,B为权重,C为累加值。Ethos-U55采用8×8的MAC阵列(共64个MAC),而自研NPU通常配置为16×16甚至32×32的脉动阵列(Systolic Array)。MAC阵列擅长矩阵乘法,但处理逐元素操作(如Add、ReLU、Pooling)时效率低下,因此需要向量处理单元(Vector Unit)作为补充。向量单元通常包含4~16个并行ALU,支持SIMD(单指令多数据)操作,能够在一个周期内处理多个数据元素。

判断方法

评估计算单元性能时,不能只看MAC数量,还需关注:

  • 数据位宽:Ethos-U支持INT8/INT16,自研NPU可能增加BF16/FP16支持。位宽越大,单次计算精度越高,但吞吐量下降。
  • 累加器精度:32bit累加器是标配,防止INT8乘法累加时溢出。部分NPU采用40bit累加器以支持更大动态范围。
  • 利用率:实际有效MAC数 = 理论MAC数 × 利用率。利用率受数据供给、控制流开销影响,通常优化目标为≥80%。

案例拆解:卷积层映射

以3×3卷积、输入通道64、输出通道64、特征图32×32为例:

  1. 将卷积核展开为矩阵:权重矩阵维度 [64, 576](3×3×64),输入矩阵维度 [576, 1024](32×32=1024个位置)。
  2. MAC阵列按16×16分块计算,每次处理16个输出通道和16个空间位置。
  3. 向量单元负责ReLU激活和MaxPool下采样。

该映射方式下,MAC阵列利用率可达92%,但需要DMA提前将权重和输入数据搬运至局部SRAM。

经验提醒:MAC阵列的利用率瓶颈往往不在计算本身,而在数据供给。设计时应优先保证SRAM带宽 ≥ MAC阵列消耗速率,否则计算单元将空转等待。

3.2 存储层次:从寄存器到主存的四级结构

核心原理

NPU的存储层次设计目标是最小化数据搬运延迟。典型结构分为四级:

层级容量延迟用途
寄存器/累加器KB级0~1周期中间计算结果暂存
局部SRAM128KB~2MB2~4周期激活值、权重、中间特征图
主存接口GB级(DDR)100~200周期模型参数、大数据块
外部存储TB级(Flash)ms级模型持久化存储

Ethos-U55的SRAM容量为128KB~512KB,自研NPU通常配置1MB以上。SRAM采用多Bank设计(如8个Bank),支持多端口并行访问,提高带宽。

操作流程:Double Buffer机制

// 伪代码:DMA双缓冲加载
while (layer_idx < total_layers) {
    // 预加载下一层权重到Buffer B
    DMA_Load(weights[layer_idx+1], Buffer_B);
    // 当前层使用Buffer A计算
    Compute(Buffer_A, input, output);
    // 交换Buffer A/B
    Swap(Buffer_A, Buffer_B);
}

双缓冲(Ping-pong)技术通过交替使用两个SRAM区域,隐藏DMA加载延迟,使计算单元持续工作。

常见误区

风险提示:不要盲目增加SRAM容量。SRAM面积大、功耗高,且访问延迟随容量增加而上升。更优策略是优化数据复用——例如权重驻留(Weight Stationary)或激活驻留(Activation Stationary)的数据流设计。

3.3 控制流:指令驱动与事件驱动混合模式

核心原理

NPU控制流设计需平衡灵活性与效率。纯硬件状态机(FSM)效率高但灵活性差;纯通用处理器(如RISC-V核)灵活但开销大。主流方案是混合控制:

  • 标量指令流:由小型控制器(如Cortex-M核或专用微码引擎)执行循环、跳转、分支等控制指令。
  • 数据并行指令:通过VLIW(超长指令字)或SIMD指令驱动MAC阵列和向量单元。
  • 事件驱动:DMA完成、计算完成、错误发生等事件触发中断或状态切换。

判断方法

检查控制流设计是否合理,可关注:

  1. 指令发射宽度:VLIW指令通常包含2~4个子操作(如MAC、Load、Store、ALU),需确保子操作无数据依赖。
  2. 循环开销:硬件循环(Loop)指令可减少循环计数和跳转开销,Ethos-U支持嵌套循环。
  3. 同步机制:计算单元与DMA之间需有同步信号(如Semaphore),防止数据竞争。

案例拆解:多算子流水线

假设一个推理任务包含Conv → ReLU → Pool → FC四个算子。控制流设计如下:

  1. 标量核配置各算子参数(输入地址、输出地址、维度)。
  2. DMA加载Conv权重,启动Conv计算。
  3. Conv完成后触发事件,自动启动ReLU(无需标量干预)。
  4. ReLU完成后启动Pool,Pool完成后启动FC。

该流水线将标量核干预次数从4次降为1次,控制开销减少75%。

复盘要点:控制流设计应遵循“配置一次、执行到底”原则。频繁的标量干预会严重降低NPU利用率,尤其在处理小算子(如逐元素Add)时。

3.4 数据通路:总线矩阵与数据流优化

核心原理

数据通路决定了数据在计算单元、存储层次和外部接口之间的传输路径。典型NPU采用多层总线矩阵:

  • AXI/AHB总线:连接主存接口、DMA、配置寄存器,位宽64~128bit。
  • 内部数据总线:连接SRAM Bank与MAC阵列,位宽256~512bit,支持多Bank并行访问。
  • 广播/收集网络:将同一份激活值广播到多个MAC单元,或将多个部分和收集累加。

操作流程:数据流优化策略

// 数据流优化示例:权重驻留
for (int oc_block = 0; oc_block < num_oc; oc_block += 16) {
    // 将16个输出通道的权重加载到SRAM并驻留
    LoadWeights(oc_block, SRAM);
    for (int ic_block = 0; ic_block < num_ic; ic_block += 16) {
        // 流式加载输入块
        LoadInput(ic_block, SRAM);
        // 计算部分和
        MAC_Compute(oc_block, ic_block);
    }
}

权重驻留(Weight Stationary)策略将权重固定在SRAM中,输入数据流式加载,适合权重大于激活值的场景(如全连接层)。

常见误区与排障

现象可能原因排查方法
计算单元利用率低数据通路带宽不足检查SRAM端口冲突、总线仲裁延迟
DMA传输超时总线优先级配置错误检查AXI QoS设置、仲裁策略
数据错位广播/收集网络同步失败检查Valid/Ready握手信号时序
风险提示:数据通路设计中最易忽视的是多Master并发访问问题。当DMA、计算单元、标量核同时访问SRAM时,需通过仲裁器(Arbiter)分配优先级。建议将计算单元设为最高优先级,DMA次之,标量核最低。

3.5 典型NPU宏观架构对比与设计要点

核心原理

将上述四要素整合,可得到典型NPU宏观架构。以Ethos-U55为例:其计算单元包含64个MAC和向量单元,存储层次为128KB SRAM,控制流采用微码引擎,数据通路为AHB/AXI总线。自研NPU通常在此基础上扩展:增加MAC数量至256~1024个,SRAM提升至1~4MB,引入NoC(片上网络)替代传统总线。

对比分析

维度Ethos-U55自研NPU(典型)
MAC数量64256~1024
SRAM容量128KB1~4MB
数据位宽INT8/INT16INT8/INT16/BF16
控制方式微码+标量VLIW+事件驱动
总线接口AHB/AXIAXI/NoC
典型场景MCU级AI边缘计算/自动驾驶

设计决策要点

  1. 算力需求:先确定目标MAC数(如1TOPS@INT8),再反推MAC阵列规模和时钟频率。
  2. 存储带宽:SRAM总带宽 = MAC数 × 2(激活+权重)× 数据位宽 × 时钟频率。若带宽不足,需增加Bank数或提高位宽。
  3. 控制复杂度:算子种类越多,控制流越复杂。建议先支持Conv/FC/Pool/ReLU,再扩展其他算子。
  4. 功耗预算:MAC阵列功耗占比通常超过60%,可通过电压频率调节(DVFS)优化。
总结复盘:NPU体系结构设计是“木桶效应”——计算单元、存储层次、控制流、数据通路任一环节成为瓶颈,都会拖累整体性能。建议在设计初期建立性能模型(如利用Arm Cycle模型或自建Simulator),在RTL实现前验证架构可行性。对于初学者,建议先从Ethos-U55这类简单架构入手,理解基本数据流后,再尝试自研NPU的扩展设计。