3. NPU硬件架构基础
在边缘视觉终端中,CPU、GPU、DSP 和 NPU 往往同时存在,但它们擅长的任务并不相同。理解 NPU 的硬件架构,关键不是记住某个型号的规格,而是建立一条从“算子”到“计算阵列”再到“片上存储”的映射思路。只有把数据流、计算流和存储层次看清楚,才能在部署模型时判断瓶颈究竟在算力、带宽还是调度。
一、NPU 与 CPU/GPU/DSP 的差异
CPU 是通用控制核心,擅长分支判断、标量运算和复杂调度;GPU 拥有大量线程,擅长规则的大规模并行浮点计算;DSP 面向信号处理,常用 SIMD 和专用乘加指令处理定长数据流;NPU 则把神经网络中最常见的矩阵乘、卷积、激活等操作固化或半固化为硬件数据通路,以更低的功耗完成高吞吐张量计算。
从执行方式看,CPU 是“取指—译码—执行”的通用流水线,GPU 是“多线程分时复用”,DSP 是“向量指令+循环展开”,NPU 更接近“数据驱动+空间并行”。这意味着 NPU 对控制流复杂、算子频繁切换的模型并不友好,但对卷积、全连接、Transformer 中的矩阵乘等规则计算非常高效。
| 对比维度 | CPU | GPU | DSP | NPU |
|---|---|---|---|---|
| 核心优势 | 控制与标量 | 大规模并行浮点 | 定长信号处理 | 低功耗张量计算 |
| 典型并行度 | 低 | 高 | 中高 | 高 |
| 数据精度 | FP32/FP64 | FP16/FP32 | 定点/浮点 | INT8/INT4/FP16 |
| 存储层次 | 多级缓存 | 显存+共享内存 | 片上 RAM | 片上缓存+权重缓存 |
| 适用场景 | 调度、后处理 | 训练、通用并行 | 音频、雷达 | 推理、边缘视觉 |
二、MAC 阵列与张量计算
NPU 的计算核心通常由 MAC(乘累加)阵列构成。一个 MAC 单元完成一次乘法和一次加法,阵列则把大量 MAC 组织成二维或三维结构,使卷积中的滑窗乘加可以并行展开。例如 3×3 卷积在某个输出点上需要 9 次乘加,若通道数为 64,则一次输出需要 576 次乘加;MAC 阵列可以同时处理多个输出点和多个通道,从而把计算时间压缩到与阵列规模相关的量级。
张量计算可以理解为“高维数组上的批量乘加”。在硬件层面,它通常被拆解为矩阵乘:把输入特征图和权重分别重排成矩阵,再通过脉动阵列或乘加树完成计算。脉动阵列的特点是数据在阵列中按节拍流动,权重可以复用,输入也可以复用,因此能显著降低对片外带宽的依赖。
卷积计算示例(单输出点):
for oc in range(64):
acc = 0
for ic in range(32):
for kh in range(3):
for kw in range(3):
acc += input[ic][h+kh][w+kw] * weight[oc][ic][kh][kw]
output[oc][h][w] = acc
这段伪代码展示了卷积的计算量来源。NPU 的硬件优化点在于:把内层循环展开为并行 MAC,把权重和输入放入片上缓存,并通过数据复用减少重复读取。因此,评估 NPU 时不能只看 TOPS,还要看有效利用率和实际带宽。
三、片上存储与数据流
NPU 的片上存储通常分为权重缓存、输入缓存、输出缓存和中间结果缓存。权重缓存用于存放卷积核参数,输入缓存用于存放当前 tile 的特征图,输出缓存用于暂存部分和。由于片外 DRAM 访问功耗远高于片上 SRAM,NPU 架构设计会尽量让数据在片上完成多次复用。
典型数据流包括:输入特征图从 DRAM 搬入输入缓存,权重从 DRAM 搬入权重缓存,MAC 阵列读取两者完成乘加,结果写入输出缓存,再经过激活、池化等后处理写回 DRAM。若模型层与层之间可以融合,中间结果可以留在片上,避免反复搬运。
四、典型 NPU 架构与工作流程
典型 NPU 架构可以概括为“控制单元+计算阵列+片上存储+数据搬运单元”。控制单元负责解析指令、调度算子;计算阵列负责 MAC 运算;片上存储负责缓存;DMA 负责在 DRAM 与片上存储之间搬运数据。部分 NPU 还会集成专用激活单元、池化单元和量化/反量化单元。
下面用一张结构关系图展示典型 NPU 的内部组成与数据流向。图中突出 MAC 阵列、片上缓存和 DMA 之间的连接关系,便于理解“计算—存储—搬运”三者的协同。
从图中可以看到,NPU 的高效并非来自单一模块,而是控制、搬运、缓存和计算阵列的协同。控制单元决定算子如何切分,DMA 决定数据何时到达,片上缓存决定复用次数,MAC 阵列决定峰值吞吐。任何一环出现等待,整体利用率都会下降。
五、案例与常见误区
以边缘人脸检测为例,输入 1080p 图像经过预处理后送入 NPU。第一层卷积通道数较少,计算量不大,但输入数据量大,DMA 搬运可能成为瓶颈;中间层通道数增加,MAC 阵列利用率上升;最后几层输出通道少,计算量下降,但后处理如 NMS 往往回到 CPU 执行。因此,实际帧率由“NPU 推理时间+CPU 后处理时间+数据搬运时间”共同决定。
复盘时建议按以下清单检查:模型算子是否全部被 NPU 支持;量化方案是否与硬件匹配;输入输出是否频繁在 CPU 与 NPU 之间拷贝;片上缓存是否足够容纳一个 tile;DMA 是否与计算重叠。把这些点逐一确认,才能让 NPU 的架构优势真正转化为终端上的帧率和能效。