第一章 AI芯片核心架构:从计算到互联
大家好,我是你们的老朋友。今天咱们聊聊AI芯片的骨架——核心架构。
说实话,我入行那会儿,AI芯片还没这么火。那时候做DSP,做GPU,谁想到后来会专门为神经网络设计芯片?但技术就是这么往前推的。今天这一章,我会把AI芯片最核心的四个模块拆开来讲:计算单元、存储层次、数据流架构、片上互联。
嗯,这四个东西,说白了就是芯片的“手脚”、“肚子”、“血管”和“骨架”。
1.1 计算单元:MAC与PE阵列
先讲最核心的——计算单元。
AI芯片里最频繁的操作是什么?乘加运算。一个神经元输出 = 权重 × 输入 + 偏置。你想想看,一个神经网络动辄几百万个神经元,每个神经元都要做乘加。所以芯片里最基础的单元就是MAC(乘加单元)。
我个人习惯把MAC理解成一个“小算盘”。它一次只能算一个乘加。但一个芯片里,我们会放成千上万个MAC。这些MAC怎么组织?最常见的方式就是PE(处理单元)阵列。
关键概念:一个PE通常包含一个MAC、本地寄存器、以及一些控制逻辑。多个PE排成阵列,就能并行处理大量数据。
我在项目中遇到过一个问题:PE阵列的规模怎么定?
举个例子,假设我们要做8×8的矩阵乘法。如果你用4×4的PE阵列,一次只能算16个乘加,需要分4次才能算完。但如果你用8×8的阵列,一次就能搞定。代价呢?芯片面积大了4倍,功耗也上去了。
所以,PE阵列的大小是个权衡。我建议初学者先记住一个原则:阵列规模 = 计算吞吐 ÷ 单MAC性能。具体怎么算,后面章节会细讲。
避坑指南:我曾经在项目里把PE阵列做得太大,结果布线绕不开,时序跑不到目标频率。后来学乖了,先做floorplan,再定阵列大小。
1.2 存储层次:SRAM、HBM、DDR
计算单元再快,数据喂不进去也是白搭。这就引出了存储层次的问题。
AI芯片的存储,我习惯把它看成“金字塔”。
| 层级 | 典型容量 | 带宽 | 延迟 | 用途 |
|---|---|---|---|---|
| 寄存器(RF) | 几十KB | 极高 | 1个周期 | PE本地数据 |
| SRAM(片上) | 几MB~几十MB | 高 | 几个周期 | 权重、中间结果 |
| HBM(高带宽内存) | 几GB~几十GB | 很高 | 几十周期 | 模型参数、大张量 |
| DDR(外部内存) | 几十GB~几百GB | 中等 | 几百周期 | 数据集、备份 |
你看,越靠近计算单元,容量越小但速度越快。这就是经典的“存储墙”问题——计算越来越快,但内存带宽跟不上。
我记得有一次做推理芯片,模型有100MB的权重。如果全放DDR里,每次计算都要等几百个周期去取数据。后来我们用了HBM,带宽提升了10倍,推理延迟直接降了60%。
所以,我建议你在设计存储层次时,先算清楚:你的模型有多大?数据复用率有多高?这两个问题决定了SRAM该做多大,HBM该配多少。
注意:SRAM虽然快,但面积大、漏电高。我曾经有个项目,SRAM占了芯片面积的40%,功耗占了30%。后来不得不砍掉一半SRAM,改用HBM。嗯,这就是现实——没有完美的存储方案。
1.3 数据流架构:数据流、权重流、混合流
有了计算单元和存储,接下来就是怎么让数据“流”起来。
数据流架构,说白了就是数据在PE阵列里怎么移动。主要有三种模式:
- 数据流(Data Flow):输入数据在PE间传递,权重固定不动。适合卷积层,因为同一个权重会被多个输入复用。
- 权重流(Weight Flow):权重在PE间传递,输入数据固定。适合全连接层,因为同一个输入要和多个权重相乘。
- 混合流(Hybrid Flow):数据和权重都在PE间流动。适合复杂网络,灵活性最高,但控制逻辑也最复杂。
我个人习惯用数据流做卷积,权重流做全连接。为什么?你想想看,卷积层里一个3×3的卷积核,要在整个特征图上滑动。如果权重不动,数据流过去,每个PE只需要存一份权重,省存储。
但全连接层不一样。一个输入要和所有神经元相连,权重矩阵巨大。这时候让权重流起来,每个PE只存一小部分权重,就能减少片上存储压力。
实战经验:我在做一款边缘AI芯片时,用了混合流。卷积层用数据流,全连接层用权重流。结果呢?性能比纯数据流提升了30%,比纯权重流提升了20%。但代价是控制逻辑复杂了一倍。嗯,这就是取舍。
1.4 片上互联:NoC与总线
最后,所有模块之间怎么通信?这就靠片上互联了。
传统做法是用总线(Bus)。所有模块挂在一根总线上,谁要通信谁申请。简单,但带宽有限。一个模块占着总线,其他模块就得等。
现代AI芯片更常用NoC(片上网络)。NoC就像城市里的交通网络——有交叉口、有路径选择、可以并行通信。
你看这张图,每个PE通过路由节点(R)连接。数据可以从PE0传到PE1,也可以从PE0传到PE3,路径可以选。这就是NoC的优势——并行通信,带宽高。
但NoC也有代价。每个路由节点要消耗面积和功耗。我做过一个16×16的NoC,光路由就占了芯片面积的15%。
所以,什么时候用总线,什么时候用NoC?
- 小规模芯片(< 8个PE):总线就够了,简单、省面积。
- 大规模芯片(≥ 8个PE):必须用NoC,否则总线会成为瓶颈。
我的建议:如果你刚开始设计AI芯片,先用总线。等性能瓶颈出现了,再换成NoC。别一开始就上NoC,否则你会被路由器的设计折磨到怀疑人生。我曾经就是那个被折磨的人。
本章小结
好了,这一章我们聊了AI芯片的四个核心模块:
- 计算单元:MAC和PE阵列,决定了芯片的算力。
- 存储层次:SRAM、HBM、DDR,决定了数据能不能喂饱计算单元。
- 数据流架构:数据流、权重流、混合流,决定了数据怎么在PE间移动。
- 片上互联:总线和NoC,决定了模块之间怎么通信。
这四个模块,每一个都是取舍。面积、功耗、性能、灵活性——没有完美的方案,只有最适合你应用场景的方案。
下一章,我们会深入PE阵列的设计细节。到时候我会拿一个实际的卷积层例子,手把手教你算PE阵列的规模。嗯,到时候见。