一、加速器微架构概览:脉动阵列与数据流
各位同学,今天我们来聊聊卷积加速器里最核心的架构——脉动阵列。说实话,我第一次接触这个概念时,觉得它特别像工厂里的流水线。每个工人只做一件事,然后把半成品传给下一个人。嗯,脉动阵列就是这么个思路。
1.1 经典的脉动阵列(Systolic Array)架构
脉动阵列,说白了就是一组处理单元(PE)排成阵列。每个PE只和邻居通信。数据像血液一样,在阵列里有节奏地“脉动”。
我在项目中遇到过这样一个场景:用4x4的脉动阵列做3x3卷积。你想想看,如果让每个PE独立计算,那数据搬运量会大得吓人。但脉动阵列不一样——数据从左边流进来,权重从上边流进来,结果在PE里累加,然后往下传。
核心特点:
- 每个PE只做简单的乘加运算(MAC)
- 数据流是规则的、可预测的
- 局部互联,没有全局总线瓶颈
- 高吞吐、低功耗
下面这张图,是我手绘的一个4x4脉动阵列结构。你看,数据从左边进来,权重从上面进来,结果从下面出去。
1.2 空间架构 vs 时间架构
这两个概念,我当年花了很长时间才真正搞明白。简单来说:
空间架构:把计算摊开在空间上。每个PE负责一部分计算,大家同时干活。脉动阵列就是典型的空间架构。
时间架构:复用同一个计算单元,分时处理。比如用一个MAC单元,循环计算所有乘加操作。
| 对比维度 | 空间架构 | 时间架构 |
|---|---|---|
| 硬件资源 | 多PE并行,面积大 | 单PE复用,面积小 |
| 吞吐率 | 高(O(N²)) | 低(O(1)) |
| 控制复杂度 | 简单,数据流固定 | 复杂,需要调度逻辑 |
| 功耗 | 较高(但效率高) | 较低(但时间长) |
| 典型应用 | Google TPU、NVIDIA Tensor Core | 传统DSP、CPU SIMD |
我的经验:做加速器选型时,我一般这样判断——如果面积预算充足、对延迟敏感,选空间架构。如果面积受限、吞吐要求不高,选时间架构。曾经有个项目,客户非要在一个小芯片上跑大模型,我建议用时间架构,结果...嗯,性能差得没法看。后来还是换了空间架构。
1.3 数据流类型
数据流类型,说白了就是决定“谁不动、谁在动”。我把它分成四种:
1.3.1 权重固定(Weight Stationary)
权重加载到PE后就不动了。输入数据流过来,和权重做乘加。结果累加后输出。
- 优点:权重复用率高,适合权重不变的推理场景
- 缺点:输入数据需要广播,带宽压力大
- 我遇到过:做边缘端推理芯片时,用的就是权重固定。因为模型训练好后权重就不变了,省了不少搬运开销。
1.3.2 输入固定(Input Stationary)
输入数据待在PE里不动。权重流过来,和输入做计算。结果累加后输出。
- 优点:输入数据复用,适合输入特征图较大的场景
- 缺点:权重需要频繁更新
- 避坑指南:我曾经在一个视频处理项目里用了输入固定,结果发现输入数据太大,PE存不下。后来改成行固定才解决问题。
1.3.3 输出固定(Output Stationary)
部分和结果留在PE里累加。输入和权重都流进来,计算完成后一次性输出最终结果。
- 优点:减少片外访存,适合大卷积核
- 缺点:PE需要额外的累加器
- 我的习惯:做高精度计算时,我偏好输出固定。因为累加过程在PE内部完成,精度损失小。
1.3.4 行固定(Row Stationary)
这是Google TPU用的数据流。把卷积核的一行权重固定在一个PE行里。输入数据按行流过,结果按行累加。
- 优点:平衡了权重和输入的复用,数据搬运最少
- 缺点:控制逻辑复杂,需要精心调度
- 我记得:第一次看TPU时,被行固定的调度图绕晕了。后来自己动手画了一遍,才明白它的精妙之处。
⚠️ 重要提醒:数据流的选择不是拍脑袋决定的。我见过太多人直接抄Google TPU的行固定,结果自己的芯片面积爆炸。记住:没有最好的数据流,只有最适合你场景的数据流。
1.4 数据流对比总结
| 数据流类型 | 谁不动 | 谁在动 | 最佳场景 | 典型芯片 |
|---|---|---|---|---|
| 权重固定 | 权重 | 输入、结果 | 推理、权重不变 | 边缘推理芯片 |
| 输入固定 | 输入 | 权重、结果 | 大输入特征图 | 视频处理 |
| 输出固定 | 部分和 | 输入、权重 | 大卷积核、高精度 | 科学计算加速器 |
| 行固定 | 权重行 | 输入行、结果行 | 平衡复用、高吞吐 | Google TPU |
好了,这一章的内容就到这里。脉动阵列和数据流类型是卷积加速器的基石。你想想看,理解了这些,后面讲具体设计时,你就能明白为什么这么做了。
核心要点回顾:
- 脉动阵列:局部互联、规则数据流、高吞吐
- 空间架构:面积换性能;时间架构:时间换面积
- 四种数据流各有适用场景,没有银弹
- 选型时考虑:面积、功耗、延迟、数据复用率