本页目录

前沿 III · 专用加速器

层次:硕博 + 业界主战场 | 🔗 与 cs 站 GPU/MLSys 线、AI 站直接对接。 第四页给出了因果链:功耗墙 → 暗硅 → 专用化。本页把"专用化"这件事拆开算:一个专用电路凭什么比通用处理器快一到两个数量级?收益具体来自哪里?以及它的代价是什么?

学习层:加速器的第一问不是峰值算力,而是工作负载受哪一面屋顶限制

具体谜题:100 GOPS 的芯片为什么只跑出 50 GOPS?

某加速器峰值算力为 100 GOPS,外部带宽为 100 GB/s。一个算子每字节只做 0.5 次运算。你预计实际性能是 100 GOPS,还是由带宽限制的 50 GOPS?如果通过权重驻留把搬运量减半,计算强度从 0.5 提到 1.0 op/byte,系统是否立刻超过 100 GOPS?再把 90% 的任务加速 20 倍,端到端是否能达到 20 倍?

先做预测

先标记算子所在区域:① Roofline 给出的上限是 min(Ppeak, B I),不是峰值算力本身;② 低计算强度算子先受带宽限制,提高乘法器数量没有帮助;③ 数据流改变的是复用率与字节数,因而改变计算强度,而不一定增加峰值算力;④ Amdahl 的未加速部分会给整体加速比设上限。

最小 mental model:算力屋顶、带宽斜坡和数据流

把每个工作负载压成两个量:单位时间可完成的峰值运算 Ppeak,以及从存储层搬运数据的带宽 B。算子计算强度 I=ops/byte 越高,越能复用已读入的数据;权重驻留、输出驻留和行驻留只是把不同数据留在更近的存储层。真正的加速器是数据流、存储层级、数制和软件映射的共同设计。

形式机制与不变量

Pattainable <= min(Ppeak, B I),   I = ops / bytes,   S = 1 / [(1-f) + f/s]

Roofline 的转折点为 Iridge=Ppeak/B。当 I < Iridge 时,性能上限沿带宽斜坡增长;当 I >= Iridge 时,峰值算力成为屋顶。实验把 Ppeak 与 B I 的结果都写成 GOPS;例如 100 GB/s * 0.5 op/byte = 50 Gop/s = 50 GOPS,不能把它误写成 50 TOPS。Amdahl 式中的 f 是可加速工作比例,s 是该部分加速倍数;它是端到端不变量,不会因为芯片宣传的 TOPS 增加而消失。

实验会让不同数据流改变有效字节数,并把相同算子放在同一张 Roofline 图上。这样能区分“硬件峰值提高”和“工作负载实际跨过转折点”两种完全不同的改进。

反例与失效边界

  • Roofline 是上界模型,不包含 bank conflict、同步、稀疏索引、控制流、片间通信、编译器未映射算子和低利用率。
  • 低位宽通常降低存储与乘法成本,却可能引入量化误差、重排开销和额外校准;位宽并非越低越好。
  • 专用 ASIC 若算法或模型形状变化,固定数据流可能失效;FPGA/GPU 的灵活性是有价值的保险,而不是纯粹浪费。
  • 峰值 GOPS/TOPS 与实际吞吐、能效和任务质量不等价;必须写清 batch、精度、利用率、运算单位和端到端分母。

交互实验:拖动算子,找出真正的瓶颈

无 JavaScript 时的静态读法:本实验以 GOPS 记峰值和可达性能:峰值 100 GOPS、带宽 100 GB/s 时,ridge point 为 1 op/byte。计算强度 0.5 的算子上限是 min(100,100*0.5)=50 GOPS;计算强度 2 的算子上限是 100 GOPS。若权重驻留把 bytes 从 200 GB 降到 100 GB、ops 仍为 100 G operations,强度由 0.5 变为 1.0,带宽上限从 50 提高到 100 GOPS。最后用 Amdahl:f=0.9,s=20 时整体加速只有 1/(0.1+0.9/20)=6.9x。

数据流 ops bytes 计算强度 性能上限
普通缓存 100 G 200 G 0.5 50 GOPS
权重驻留 100 G 100 G 1.0 100 GOPS
输出驻留 100 G 125 G 0.8 80 GOPS

迁移任务:为一个新模型选加速器

给定一个包含大矩阵乘、稀疏检索、归一化和分支控制的模型,请分别估算每个算子的 ops、bytes、计算强度和质量约束。选择 CPU、GPU、FPGA 或 ASIC 的组合,写出数据流与存储层级,并用 Roofline 和 Amdahl 说明为什么你的方案是端到端决策,而不是“买峰值 TOPS 最大的芯片”。

一、通用处理器的开销在哪

执行一条加法指令,CPU 实际做了多少事?

取指、译码、寄存器重命名、乱序调度、分支预测、访存地址计算、缓存查找、写回、提交……真正的加法只占其中很小一部分能量。研究普遍表明,通用处理器执行一次运算的能量中,绝大部分花在"指令的管理"而非"数据的计算"上。

这些开销是通用性的代价:CPU 不知道下一条指令是什么,必须准备好应对任何情况。专用加速器知道自己要算什么,于是可以把这些开销几乎全部省掉。

二、专用化的收益来源

拆成四项,每一项都可以独立评估:

① 消除指令开销。 固定功能单元不需要取指译码,控制逻辑是硬连线的。

② 定制数据通路与并行度。 直接摆放大量乘加单元,按算法的数据流连接。脉动阵列(systolic array)是经典结构:数据像脉搏一样在阵列中流动,每个数据被取出一次后在阵列内被复用多次——这直接攻击了第十页的核心问题(搬运比计算贵)。

③ 定制数制。 通用处理器要支持 FP64/FP32;而神经网络推理在 INT8、FP8 甚至更低精度下往往够用。能量大致随位宽的平方级下降(乘法器面积与能耗),这是深度学习加速器最大的单项收益。训练则需要更宽的动态范围,于是有 BF16、FP8 等格式的设计权衡(🔗 AI 站)。

④ 定制存储层次。 用软件可控的便签存储器(scratchpad)替代硬件管理的缓存,数据搬运在编译期就被规划好,避免了缓存的猜测与冲突开销。

综合起来,同一算法在专用电路上的能效可比通用 CPU 高一到两个数量级——这些收益是可以逐项估算的,不是玄学。

三、谱系:从通用到专用

类型 灵活性 能效 典型场景
CPU 最高 最低 控制流复杂的通用任务
GPU 高(可编程 SIMT) 中 数据并行、训练
FPGA 中(可重构) 中高 小批量、需要快速迭代、原型
DSA/ASIC 低(固定功能) 最高 大规模部署的稳定负载

这是一条清晰的权衡曲线:灵活性与能效互为代价。

选择的经济学:ASIC 的 NRE(一次性工程费用)在先进节点极高(设计 + 掩模,第十一页)。只有出货量足够大、且算法足够稳定时才划算。这解释了几个产业现象:

一个关键风险:算法演进可能让 ASIC 变废铁。为特定网络结构做的极致优化,可能因模型架构变化而失效——所以现代 AI 加速器的设计要在"专用"与"留有余地"之间取平衡,通常保留可编程的向量单元来处理未预见的算子。

四、设计的中心问题:数据流

加速器设计的核心不是"堆多少个乘法器",而是如何组织数据移动(承第十页)。

对一个卷积或矩阵乘,同一个数据可以在不同层级被复用。按"什么保持不动"分类:

没有普适最优——最优数据流取决于层的形状(批大小、通道数、卷积核大小)与存储层次结构。所以加速器设计与编译器/映射器必须协同设计,这也是 MLSys 这个领域存在的原因(🔗 cs 站 mlsys 线)。

Roofline 模型是分析工具:把性能上限画成计算强度(每字节数据完成多少次运算)的函数——低计算强度的算子受带宽限制,高计算强度的受算力限制。优化的第一步永远是判断自己在屋顶线的哪一侧(🔗 cs 站 perf 线有完整推导)。

五、超越数字:几条更激进的路线【前沿/未定】

共同的模式(值得记住):这些路线在特定窄场景中确有优势,但要取代主流数字加速器,必须同时打败它的能效、精度、工具链生态与制造成熟度——最后一项往往才是致命的。这与第五页新器件、第十六页存内计算的处境完全一致。

六、系统视角:加速器不是孤岛

一个常被忽略的现实:加速器的实际收益往往被系统因素吃掉。

七、要点


下一页:既然电互连的功耗越来越难以承受,能不能用光来传数据?硅光与射频——把光子和电磁波带进芯片。