4、数据流与计算模式:权重固定、输入固定、输出固定等数据流策略,以及脉动阵列、SIMD、SIMT等计算模式

NPU(神经网络处理器)的微架构设计,本质上是在回答两个核心问题:数据从哪里来、到哪里去(数据流策略),以及计算单元如何组织、如何并行(计算模式)。这两个问题决定了芯片的面积效率、能效比(TOPS/W)以及实际部署时的利用率。本章将深入剖析权重固定(Weight Stationary)、输入固定(Input Stationary)、输出固定(Output Stationary)三种经典数据流策略的适用场景,并对比脉动阵列(Systolic Array)、SIMD、SIMT三种计算模式在硬件资源调度与编程模型上的本质差异。理解这些底层机制,是进行NPU选型、算子映射优化以及自研加速器设计的关键前提。

NPU数据流与计算模式映射关系 输入特征图 ifmap (H×W×C) 权重 Weight (R×S×C×K) 输出特征图 ofmap (OH×OW×K) 权重固定 (WS) 权重驻留PE寄存器,输入流经PE 适合:权重复用率高、大通道数 典型:Eyeriss、自研CNN加速器 能耗:权重读取能耗↓ 输入广播能耗↑ 输入固定 (IS) 输入驻留PE,权重流经PE 适合:输入复用率高、小卷积核 典型:部分脉动阵列变体 能耗:输入读取能耗↓ 权重广播能耗↑ 输出固定 (OS) 部分和驻留PE累加器 适合:输出通道多、全连接层 典型:TPU v1(部分)、GPU Tensor Core 能耗:累加器读写能耗↓ 数据广播能耗高 脉动阵列 (Systolic) PE间数据流水式传递,每个PE只做MAC 优势:数据复用极致,控制开销低 劣势:负载不均衡时利用率骤降 典型:Google TPU、Ethos-U55 数据流:权重固定/输入固定 SIMD (单指令多数据) 同一条指令驱动多个ALU执行不同数据 优势:硬件简单,适合并行度规整算子 劣势:分支发散时效率低 典型:ARM NEON、RISC-V Vector 数据流:输出固定为主 SIMT (单指令多线程) 硬件线程级并行,warp/wavefront调度 优势:灵活,支持动态分支和复杂控制流 劣势:调度开销大,功耗高 典型:NVIDIA GPU、Mali GPU 数据流:输出固定为主 数据流策略决定数据搬运能耗,计算模式决定并行粒度与硬件复杂度

4.1 三种数据流策略的核心原理与判断方法

数据流策略解决的是“在计算过程中,哪一类数据应该尽量驻留在离计算单元最近的地方(如寄存器或局部SRAM),以减少高能耗的数据搬运”。在冯·诺依曼架构中,数据搬运能耗远高于计算能耗(通常高1~2个数量级),因此NPU设计的第一要务就是最大化数据复用。

核心原理:权重固定(WS)将权重预加载到PE阵列的寄存器中,输入特征图数据在PE间流动,每个PE将输入与本地权重相乘并累加部分和。输入固定(IS)则相反,输入数据驻留,权重在PE间广播或流动。输出固定(OS)将部分和累加器驻留在PE内,输入和权重都流经PE,最终由累加器生成完整输出。

判断方法:选择哪种数据流策略,需要根据算子的特征和硬件资源约束进行权衡。以下是三条实用的判断准则:

  1. 看数据复用率:如果卷积核通道数大(如C=512),权重复用率极高,优先选择WS;如果输入特征图空间尺寸大(如224×224),输入复用率高,优先选择IS;如果输出通道数多(如K=1024),且每个输出需要累加多次,优先选择OS。
  2. 看片上存储容量:WS需要将整个权重矩阵驻留,若权重超过SRAM容量,则需频繁换入换出,反而降低效率。IS需要驻留输入块,适合输入尺寸较小的算子。
  3. 看PE阵列规模:大规模PE阵列(如16×16以上)更适合WS,因为权重广播成本低;小规模PE阵列(如4×4)更适合IS或OS,灵活性更高。
数据流策略驻留数据流动数据典型能耗瓶颈适用算子
权重固定 (WS)权重输入、部分和输入广播能耗大通道卷积、全连接
输入固定 (IS)输入权重、部分和权重广播能耗小卷积核、深度可分离卷积
输出固定 (OS)部分和输入、权重数据广播能耗输出通道多、1×1卷积

4.2 脉动阵列:数据流与计算的极致融合

脉动阵列是一种将数据流策略与计算单元物理结构深度融合的架构。其核心思想是:每个PE(处理单元)只负责一个乘累加操作(MAC),数据在相邻PE之间以流水线方式传递,每个PE从上游接收数据,计算后将结果传递给下游。这种设计使得数据在PE间的移动本身就是计算过程的一部分,极大减少了数据搬运次数。

工程实现要点:以Google TPU v1为例,其脉动阵列规模为256×256,权重预加载到PE中(WS策略),输入特征图从左侧流入,部分和从下方流出。每个PE包含一个乘法器、一个加法器和一个累加寄存器。数据在每个时钟周期沿行方向移动一个PE,经过256个周期后,一行输入完成与所有权重的卷积计算。

经验提醒:脉动阵列对数据流节奏要求极高。如果卷积核尺寸(如3×3)与PE阵列维度不匹配,会导致大量PE空闲。实际工程中,通常采用“数据填充”或“多通道合并”策略,将多个输入通道的数据拼接成PE阵列宽度,以提高利用率。

案例拆解:某边缘端NPU采用8×8脉动阵列,运行3×3卷积(输入通道32,输出通道32)。初始设计直接映射,导致利用率仅42%。分析发现,3×3卷积核在8×8阵列上产生大量边界空白。优化方案:将输入通道拆分为4组,每组8通道,分别映射到阵列的4行,同时将3×3卷积拆分为9个1×1卷积子任务,按时间顺序依次执行。优化后利用率提升至78%,能效比提升1.6倍。

4.3 SIMD与SIMT:并行粒度的不同选择

SIMD(单指令多数据)和SIMT(单指令多线程)是两种主流的并行计算模式,它们在NPU中通常作为补充计算单元,处理脉动阵列不擅长的算子(如激活函数、池化、归一化等)。

SIMD核心原理:一条指令同时驱动多个ALU(算术逻辑单元)执行相同操作,每个ALU处理不同的数据元素。例如,ARM NEON指令集支持128位向量操作,一次可处理4个32位浮点数或8个16位整数。SIMD的硬件实现简单,控制逻辑少,能效比高,但要求数据并行度规整,遇到分支或数据依赖时效率骤降。

SIMT核心原理:以线程为调度单位,多个线程组成一个warp(NVIDIA)或wavefront(AMD),硬件自动调度warp执行。每个线程有自己的程序计数器和寄存器,但同一warp内的线程必须执行同一条指令(锁步执行)。SIMT的灵活性远高于SIMD,支持动态分支和复杂控制流,但调度器硬件开销大,功耗高。

对比维度SIMDSIMT
并行粒度数据级并行(向量)线程级并行(warp)
硬件复杂度低(无调度器)高(需要warp调度器)
分支处理不支持(需编译器展开)支持(但分支发散时效率低)
能效比高(约2-3 TOPS/W)中(约0.5-1 TOPS/W)
典型应用激活函数、池化、逐元素操作复杂网络层、动态形状算子

实战场景:在自研NPU中,通常采用“异构融合”策略:脉动阵列负责卷积和矩阵乘,SIMD单元负责激活函数和池化,SIMT单元(或可编程核)负责动态形状的算子(如NMS、RoIAlign)。这种设计既保证了核心算子的高能效,又保留了灵活性。

风险提示:SIMT单元在NPU中容易成为功耗黑洞。由于NPU的供电和散热设计通常以脉动阵列的功耗为基准,SIMT单元的高动态功耗可能导致局部热点。建议在物理设计时,将SIMT单元分散布局,并增加独立的时钟门控和电源域。

4.4 数据流与计算模式的协同设计

数据流策略和计算模式不是孤立的,它们共同决定了NPU的实际性能。协同设计的关键在于:让数据流策略匹配计算模式的数据访问特征,让计算模式匹配算子的并行特征。

协同设计流程:

  1. 算子特征分析:统计目标工作负载中各类算子的占比、数据维度、并行度。
  2. 数据流选择:根据主要算子的复用特征,选择WS、IS或OS作为主数据流策略。
  3. 计算模式匹配:将规整的算子映射到脉动阵列或SIMD,将不规则算子映射到SIMT。
  4. 存储层次设计:根据数据流策略设计多级缓存(L1 PE寄存器、L2 SRAM、L3 DRAM),确保数据搬运能耗最小。
  5. 性能仿真验证:使用cycle-accurate仿真器验证不同映射方案下的利用率和能效。

案例拆解(完整闭环):某公司自研NPU面向AIoT场景,主要运行MobileNetV2和YOLO-tiny。初始设计采用纯WS数据流+脉动阵列,实测发现深度可分离卷积(Depthwise Conv)利用率仅35%。分析定位:深度可分离卷积的权重数量极少(仅3×3×C),WS策略导致权重驻留时间短,PE频繁等待新权重加载。优化方案:针对深度可分离卷积,切换到IS数据流(输入驻留,权重广播),并利用SIMD单元并行处理多个通道的逐元素乘法。同时,在硬件上增加数据流切换寄存器,允许软件在运行时动态切换WS/IS模式。优化后,深度可分离卷积利用率提升至82%,整体芯片能效比提升1.8倍。复盘经验:单一数据流策略无法覆盖所有算子,硬件必须支持至少两种数据流模式的动态切换。

总结复盘:数据流策略决定了数据搬运的能耗下限,计算模式决定了并行度的上限。优秀的NPU架构设计,是在这两者之间找到最佳平衡点。对于初学者,建议先从理解WS和脉动阵列入手,这是目前最成熟的组合;然后逐步扩展到IS和SIMD,理解不同算子的适配性;最后再考虑SIMT的灵活性代价。