AI芯片架构基础:冯·诺依曼架构与哈佛架构、数据流架构、脉动阵列架构

芯片架构这事儿,说白了就是决定数据怎么在芯片里流动、计算单元怎么组织。我刚开始接触AI芯片时,总觉得架构选择是个纯理论问题,后来踩过几次坑才明白——选错架构,后面所有优化都是白搭。

咱们先看最经典的两种架构,再聊AI芯片特有的数据流和脉动阵列。

冯·诺依曼架构 vs 哈佛架构

冯·诺依曼架构,大家应该都熟悉。指令和数据共用一条总线,存在同一个存储器里。好处是灵活,坏处嘛——就是那个著名的“冯·诺依曼瓶颈”。

我在一个边缘推理芯片项目里吃过这个亏。当时用冯·诺依曼架构跑一个轻量级CNN,结果发现大部分时间都花在取指令和数据上,计算单元反而在空等。这就是典型的“存储墙”问题。

核心痛点:冯·诺依曼架构下,CPU/加速器每做一次运算,至少需要两次访存(取指令+取数据)。当数据量增大时,总线带宽就成了天花板。

哈佛架构呢?指令总线和数据总线分开,各走各的。这样取指令和取数据可以同时进行,吞吐量直接翻倍。很多DSP处理器和微控制器都用这个方案。

但注意,哈佛架构也有代价——你得有两套独立的存储器和总线,芯片面积和功耗都会增加。AI芯片里,我见过不少混合方案:指令走哈佛,数据走冯·诺依曼,取个折中。

对比维度 冯·诺依曼架构 哈佛架构
存储器 指令+数据共用 指令/数据分离
总线 单总线 双总线
并行度 低(串行访存) 高(并行访存)
面积/功耗 低 高
典型应用 通用CPU、AI加速器 DSP、MCU、部分NPU

我的建议:做AI芯片时,别死磕纯冯·诺依曼或纯哈佛。看看你的模型特点——如果权重占大头、指令少,可以考虑指令走哈佛、数据走冯·诺依曼的混合方案。我在一个语音唤醒芯片上就这么干过,面积只多了5%,但推理延迟降了30%。

数据流架构

数据流架构,跟前面两种完全不同。它不是“指令驱动”,而是“数据驱动”。

什么意思呢?传统架构是:取指令→解码→执行。数据流架构是:数据准备好了→直接触发计算。没有指令,没有PC指针,计算完全由数据流动来驱动。

你想想看,这对AI推理有多友好?神经网络本身就是个有向无环图,数据从输入层流到输出层,每层计算只依赖上一层的输出。数据流架构天然匹配这种计算模式。

我记得2017年做一款视觉处理芯片时,试过用数据流架构做卷积加速。效果确实好——数据在计算单元之间直接传递,不需要反复写回DRAM,功耗降了一大截。但调试起来是真痛苦,数据依赖关系一旦画错,整个流就断了。

避坑指南:我曾经在一个数据流芯片上犯过错误——没处理好控制依赖。比如某些层需要根据中间结果做条件判断(如循环次数可变),数据流架构处理这种场景非常别扭。建议:纯数据流适合固定计算图,有分支逻辑时加一点控制信号做辅助。

数据流架构的典型代表是Wave Computing的DPU和MIT的CGRA架构。它们把计算单元排成阵列,数据按预定路径流动,每个单元只做一件事——乘加、激活、池化。效率极高,但灵活性差。

脉动阵列架构

脉动阵列,这是AI芯片里绕不开的话题。Google TPU就是靠它出名的。

脉动阵列的核心思想:数据像心跳一样,在计算单元之间“脉动”传递。每个PE(处理单元)只跟邻居通信,数据流是规则的、同步的。

拿矩阵乘法举例。假设你要算C = A × B。传统做法是把A和B都读到寄存器里,算完再写回去。脉动阵列的做法是:让A矩阵的数据从左往右流,B矩阵的数据从上往下流,每个PE在交汇点做一次乘加,结果累加在本地。

这样做的好处是什么?

  • 数据复用率高:每个数据被多个PE重复使用,减少访存次数
  • 局部性极好:PE只跟邻居通信,连线短、功耗低
  • 吞吐量大:所有PE同时工作,流水线满时每个周期出一个结果

我参与过一个脉动阵列设计,128×128的PE阵列,跑卷积时利用率能到85%以上。但有个坑——脉动阵列对数据依赖很敏感。如果卷积步长不是1,或者有空洞卷积,数据流就会乱,需要做数据重排。

关键指标:脉动阵列的“利用率”是核心。理想情况是100%,但实际受限于数据供给和计算模式。我见过很多设计,阵列很大(256×256),但利用率不到50%,白白浪费面积。建议:先分析你的主流算子,再决定阵列大小和数据流方向。

下面这张图展示了脉动阵列的基本数据流模式:

脉动阵列数据流示意图(2D Systolic Array) 输入 A 输入 B PE₁₁ PE₁₂ PE₁₃ PE₁₄ PE₂₁ PE₂₂ PE₂₃ PE₂₄ PE₃₁ PE₃₂ PE₃₃ PE₃₄ PE₄₁ PE₄₂ PE₄₃ PE₄₄ 输出 C 每个PE累加局部结果 数据流方向说明: → A矩阵数据从左向右水平流动 ↓ B矩阵数据从上向下垂直流动 ⊕ 每个PE做一次乘加并累加

三种架构的对比与选型

实际项目中,很少只用一种架构。我见过最多的方案是“混合架构”——控制部分用冯·诺依曼,计算阵列用数据流或脉动阵列。

举个例子:华为昇腾芯片,控制核是ARM(冯·诺依曼),AI计算核是达芬奇架构(类似数据流+脉动阵列的混合体)。这样既保留了灵活性,又保证了计算效率。

架构类型 优势 劣势 适合场景
冯·诺依曼 灵活、通用、易编程 访存瓶颈、功耗高 控制逻辑、预处理、后处理
哈佛 指令/数据并行、确定性高 面积大、灵活性差 DSP、固定算法加速
数据流 高吞吐、低功耗、天然匹配DAG 调试难、控制依赖处理弱 CNN/RNN推理、图计算
脉动阵列 数据复用率高、局部性强、可扩展 数据依赖敏感、利用率波动大 矩阵乘法、卷积、全连接层

选型建议:如果你做的是通用AI芯片(跑多种模型),建议用冯·诺依曼做控制+数据流做计算。如果你做的是专用芯片(只跑某几个固定模型),脉动阵列是性价比最高的选择。我个人的经验是——先画计算图,看数据依赖关系,再决定架构。别一上来就拍脑袋选脉动阵列,万一你的模型里全是depthwise卷积,脉动阵列的利用率会很难看。

小结

架构选择没有银弹。冯·诺依曼灵活但慢,哈佛快但贵,数据流高效但难调,脉动阵列吞吐大但挑算子。做AI芯片设计,关键是想清楚你的目标场景——是跑大模型还是小模型?是训练还是推理?是云端还是边缘?

嗯,这些想清楚了,架构选型就水到渠成了。