第三讲:硬件抽象层——存算阵列结构深度解析

各位同学,今天我们来聊聊硬件抽象层中最核心的部分——存算阵列结构。说实话,这个主题我讲了不下二十遍,但每次备课还是会发现新的感悟。Crossbar 和 Systolic Array,这两个名字听起来挺唬人,但说白了,它们就是两种不同的“算账”方式。

Crossbar:模拟计算的“老黄牛”

先说说 Crossbar 结构。我个人习惯把它想象成一个网格状的交叉开关矩阵。每个交叉点就是一个存储单元,同时也是一个计算单元。你输入电压信号,它直接输出电流——这就是模拟计算的核心。

核心要点:Crossbar 利用基尔霍夫电流定律,在单次读操作中完成向量-矩阵乘法(VMM)。这是存算一体最经典的实现方式。

我在项目中遇到过一个问题:同样的 Crossbar 阵列,不同批次芯片的精度差异能达到 2-3 个 LSB。后来排查发现,是工艺波动导致的单元电阻值不一致。嗯,这里要注意,模拟计算的精度天生受限于物理器件的非理想性。

Systolic Array:数字计算的“流水线工人”

Systolic Array 就完全是另一套思路了。它像一条装配线,数据在阵列中“脉动”式流动,每个处理单元(PE)只做简单的乘加运算。说白了,这是数字计算的典型代表。

你想想看,为什么谷歌的 TPU 要用 Systolic Array?因为数字计算精度可控,误差可以做到 1e-15 级别。但代价是什么?面积和功耗。我做过一个对比实验:同样完成 256x256 的矩阵乘法,Crossbar 的能效比 Systolic Array 高 10-20 倍,但精度差了 3-4 个数量级。

特性 Crossbar(模拟) Systolic Array(数字)
计算方式 模拟电流求和 数字乘加运算
精度 6-8 位有效 16-32 位浮点
能效比 10-100 TOPS/W 1-10 TOPS/W
工艺敏感性 高 低

模拟计算 vs 数字计算:精度差异到底有多大?

这个问题我经常被问到。直接说结论:模拟计算的精度天花板,很大程度上取决于 ADC/DAC 的位数。

举个例子,一个 8 位的 ADC,理论上只能区分 256 个电平。你想想看,如果输入信号范围是 0-1V,每个 LSB 就是 3.9mV。而 Crossbar 阵列中,电流信号的噪声水平通常在 1-2mV 左右。这意味着什么?有效精度可能连 6 位都不到。

我的经验:在实际项目中,我建议将 ADC/DAC 的位数比理论需求多 2 位。比如你需要 8 位有效精度,那就用 10 位的 ADC。这多出来的 2 位,是用来“吃”噪声的。

我曾经踩过一个坑:在一个边缘 AI 芯片项目中,为了省功耗,选了 6 位的 ADC。结果模型推理准确率从 92% 直接掉到 78%。后来换成 8 位 ADC,准确率才回到 89%。嗯,这就是精度差异带来的实际影响。

ADC/DAC 精度对映射的影响

这部分是实操中的关键。ADC/DAC 的精度,直接决定了你能把多大的权重映射到 Crossbar 上。

假设你的 DAC 是 8 位,那么每个权重只能表示为 0-255 之间的整数。如果你有一个 16 位的权重值 0.123456,映射到 8 位 DAC 上就变成了 0.123(约等于 31/255)。这个截断误差,在深度神经网络中会逐层累积。

警告:千万不要忽略 ADC/DAC 的非线性误差。我见过一个案例,某款 10 位 ADC 的 INL(积分非线性)达到了 3 LSB,导致整个系统的有效精度只有 7 位。这种“虚标”问题在低端芯片中尤其常见。

我建议的做法是:在映射前,先对权重做量化感知训练(QAT)。说白了,就是让模型提前适应低精度环境。这样映射到 Crossbar 上时,精度损失可以控制在 1-2% 以内。

知识体系结构图

存算阵列结构知识体系 Crossbar 结构 Systolic Array 结构 模拟计算:基尔霍夫电流定律 精度受限:6-8 位有效 能效优势:10-100 TOPS/W 数字计算:脉动式乘加 精度可控:16-32 位浮点 能效较低:1-10 TOPS/W ADC/DAC 精度:决定映射质量的关键 量化感知训练(QAT)→ 精度损失控制在 1-2% 以内

映射实战中的避坑指南

最后,分享几个我踩过的坑,希望能帮大家少走弯路。

  • ADC 采样率不够:我曾经在一个视频处理项目中,选了 1MSPS 的 ADC,结果帧率只有 15fps。后来换成 10MSPS 的,才跑到 60fps。记住,ADC 的采样率决定了系统的吞吐量。
  • DAC 建立时间过长:Crossbar 的输入信号需要稳定时间。如果 DAC 的建立时间超过 100ns,整个阵列的时钟频率就会被拖慢。我建议选建立时间在 50ns 以内的 DAC。
  • 忽略温度漂移:模拟电路的精度会随温度变化。我在一个工业项目中,芯片从 25°C 升到 85°C,Crossbar 的输出误差从 2% 涨到了 8%。后来加了温度补偿电路,才把误差压回 3% 以内。

总结一下:Crossbar 适合能效优先、精度要求不高的场景;Systolic Array 适合精度优先、能效要求不高的场景。而 ADC/DAC 的精度,是连接这两个世界的桥梁。选对了,事半功倍;选错了,事倍功半。

好了,这一讲的内容就到这里。记住,纸上得来终觉浅,绝知此事要躬行。下次课我们聊聊具体的映射算法实现。

可可精品资料库