NPU架构概览:从宏观到微观,一次讲透

各位同学,今天咱们来聊聊NPU的宏观架构。说实话,我第一次接触NPU设计时,也被各种术语搞得晕头转向。什么脉动阵列、数据流架构,听着就头大。但别担心,我会用最直白的方式,把这些概念掰开揉碎了讲给你听。

一、NPU的三大核心单元

一个NPU芯片,说白了就是三个部分:计算单元、存储单元、控制单元。我习惯把它们比作一个工厂——计算单元是工人,存储单元是仓库,控制单元就是厂长。

1. 计算单元(Compute Unit)

这是NPU的心脏。跟CPU不同,NPU的计算单元专门为矩阵运算优化。我见过很多新手问:“为什么不用CPU的ALU?” 你想想看,CPU的ALU一次只能处理几个数,而NPU一次要处理几百上千个数。这就是本质区别。

典型的计算单元包括:

  • MAC阵列:乘加运算器,这是最核心的部件
  • 累加器:把多次乘加结果累加起来
  • 激活函数单元:ReLU、Sigmoid等

我踩过的坑:曾经在设计第一版NPU时,我把MAC阵列做得太大,结果功耗直接爆表。后来才明白,计算单元的规模要和存储带宽匹配,否则就是“大马拉小车”。

2. 存储单元(Memory Unit)

存储单元是NPU的命门。我常说一句话:“NPU的性能,一半看计算,一半看存储。” 为什么?因为数据搬来搬去的时间,往往比计算本身还长。

典型的存储层次:

  • 片上SRAM:速度最快,但容量有限(几MB到几十MB)
  • 寄存器文件:紧贴计算单元,用于临时数据
  • 外部DRAM:容量大,但延迟高

我的建议:设计时一定要算好“数据复用率”。如果数据只被用一次就扔掉,那存储带宽再大也白搭。

3. 控制单元(Control Unit)

控制单元负责调度一切。它告诉计算单元该算哪块数据,告诉存储单元该搬哪块数据。我个人习惯用指令驱动的方式,而不是硬连线控制——这样灵活性更高。

二、数据流架构:行、列、脉动阵列

数据流架构,说白了就是数据怎么在计算单元之间流动。我见过三种主流方式,每种都有它的脾气。

1. 行数据流(Row-Stationary)

数据按行流动。比如一个矩阵乘法,第一行数据进来,算完再进第二行。这种架构的优点是控制简单,但缺点是数据复用率不高。

2. 列数据流(Column-Stationary)

数据按列流动。权重数据固定在一个位置,输入数据流过来。我在做卷积加速器时特别喜欢用这种——因为卷积核的权重可以一直待在原地,不用来回搬。

3. 脉动阵列(Systolic Array)

这是Google TPU的看家本领。数据像心跳一样,有节奏地在阵列中流动。每个计算单元只做一件事:把数据传给邻居,同时算自己的。

举个例子:假设你有一个4x4的脉动阵列。数据从左边流进来,权重从上面流进来。每个节点做一次乘加,然后把结果传给右边的节点。最终,右下角的节点输出最终结果。整个过程就像流水线一样,效率极高。

我当年第一次看到脉动阵列时,觉得这设计太巧妙了。但后来发现,它也有缺点——对数据依赖很敏感。如果某个节点卡住了,整个阵列都得等着。

NPU宏观架构图 计算单元 MAC阵列 累加器 激活函数 存储单元 片上SRAM 寄存器文件 外部DRAM 控制单元 指令调度 数据流控制 数据总线 控制信号 数据流架构:行数据流 | 列数据流 | 脉动阵列

三、典型NPU产品分析

光说不练假把式。咱们来看看市面上几款典型的NPU产品,看看它们是怎么设计的。

1. Google TPU(张量处理单元)

TPU是Google为深度学习量身定做的。它的核心是一个256x256的脉动阵列,专门做矩阵乘法。我记得第一次看到TPU的论文时,被它的性能吓了一跳——比当时的GPU快了一个数量级。

TPU的特点:

  • 脉动阵列:256x256 MAC,一次处理65536个乘加
  • 大容量片上存储:24MB SRAM,减少DRAM访问
  • 量化计算:支持INT8,降低功耗

注意:TPU的脉动阵列虽然快,但只适合矩阵乘法。如果你的模型里有大量非矩阵运算(比如稀疏操作),TPU的效率会大打折扣。

2. 华为达芬奇架构

达芬奇架构是华为自研的NPU,用在昇腾系列芯片上。它的设计思路跟TPU不太一样——采用了3D Cube结构。

达芬奇的特点:

  • 3D Cube:一个16x16x16的立方体,一次处理4096个乘加
  • 灵活的数据流:支持多种数据复用模式
  • AI Core:每个核心包含Cube、Vector、Scalar三个单元

我研究过达芬奇的指令集,发现它在灵活性上做得很好。比如,你可以用一条指令完成一个3D Cube的矩阵乘法,也可以用多条指令组合出更复杂的运算。

3. 其他NPU产品

产品 核心架构 特点
Apple Neural Engine SIMD阵列 低功耗,适合移动端
NVIDIA Tensor Core 混合精度矩阵 支持FP16/INT8混合
Intel NNP 脉动阵列 针对推理优化

我的经验:选NPU架构时,一定要看你的应用场景。如果是云端训练,TPU的脉动阵列很合适;如果是边缘推理,达芬奇的灵活性更好;如果是手机端,Apple的SIMD阵列功耗最低。

四、总结

好了,今天的内容就到这里。咱们从NPU的三大核心单元讲起,聊了计算、存储、控制各自的作用。然后深入数据流架构,分析了行、列、脉动阵列的优缺点。最后看了几款典型产品,了解了它们的设计思路。

记住一句话:没有最好的架构,只有最合适的架构。设计NPU时,一定要从实际需求出发,别盲目追求高大上的技术。

下次课,咱们会深入指令集设计,聊聊怎么给NPU写“程序”。到时候见!


专注资料整理