先锋 趋势 方法 投研 作者
自下而上的芯片设计——Reiner Pope
返回节目精读

自下而上的芯片设计——Reiner Pope

摘要

  • 本期节目的主线,也是评估任何 AI 芯片押注的框架,是在整个技术栈的每一层都尽可能提高算力相对于通信的比值。 Reiner Pope 从逻辑门一路讲到完整架构,展示同一权衡如何反复出现于数值精度、寄存器文件、脉动阵列、时钟频率,以及 GPU 与 TPU 的布局之中。「这会在整个技术栈上下贯穿始终。」
  • 乘法器的芯片面积随位宽呈二次方增长——p位×q位乘法需要p×q个门——Pope称其为低精度算术在神经网络上表现出色的“唯一原因”。 Nvidia 的规格也开始体现这一点:在 B100/B200 上,精度减半只能让 FLOPs 翻倍;但 B300 列出的 FP4 是 FP8 的 3x——「虽然按理应当是 4x」。
  • 在 Tensor Core 出现之前的 CUDA 核心数据通路中,成本的“七分之七”都花在读写寄存器文件上,而不是数学运算。 Tensor Core/脉动阵列正是为解决这个问题而生:把权重本地存储,缓慢灌入数据,以线性通信换取二次方算力。脉动阵列(老一代 TPU 为 128×128)是「已知实现矩阵乘法最高效的电路」。
  • “芯片设计中大多数决策,本质上都是尺寸决策”——例如拿出 10% 的面积做数据搬运、90% 做脉动阵列;而时钟频率本身也是面积权衡。 吞吐量 = 每周期完成的工作量 × 每秒周期数,因此通过堆叠流水线寄存器拉高频率,可能最终「几乎把所有面积都花在流水线寄存器上」。
  • FPGA 与 ASIC 的经济学可以浓缩成一句话:ASIC 便宜约 10x、能效也更高,但第一块 FPGA 成本是 $10,000,而第一块 ASIC 仅流片就要花 $30 million。 因此,当工作负载每月变化、又需要确定性延迟(HFT)时,FPGA 更具优势。CPU 的非确定性是设计选择:缓存速度比 DDR 快 100x,却让延迟取决于运行环境;TPU 使用软件管理的 scratchpad,而 Groq 则宣传确定性延迟。
  • 目前最接近 MatX 产品线索的说法是:GPU 就是“铺满整块芯片的许多微型 TPU”(tensor core ≈ MXU),用更丰富的内部带宽换取比 TPU 更好的寄存器文件摊销;Dwarkesh 猜测 MatX 可能同时瞄准这项权衡的两端。 Pope 表示,MatX 曾公开讨论过「可拆分脉动阵列」——「大型脉动阵列,也可以是小型脉动阵列」。注:Dwarkesh 披露自己是 MatX 的 angel investor。

精读

1. AI 芯片的原子操作是乘加,而精度是不对称的

  • Pope 从矩阵乘法讲起:它本质上是 output[i,k] += input[i,j] × other input[j,k] 的三重循环,因此每一步都会发生一次乘加——这就是 AI 芯片围绕构建的基本原语。而且「累加步骤的精度几乎总是要高于乘法步骤」:求和会重复 j 次,舍入误差会累积;每条链路却只有一次乘法——因此才会出现 4-bit 乘法接 8-bit 加法的设计。
  • 例子把电路从头搭了出来:先用 p×q 个 AND 门生成 16 个部分积,再通过「全加器」(3→2 压缩器)求和,形成 Dadda 乘法器——这是标准的面积高效设计。Dwarkesh 亲自推导:24 个输入比特减去 8 个输出比特,等于 16 个全加器;一般情况下就是 p×q。Pope 说,MAC 适合作为基本原语的第二个原因,是它能得到「这种非常简洁、简单的 p×q」代数关系。

2. 精度呈二次方扩展,Nvidia 的规格也反映了这一点

  • Dwarkesh 在讲解中途意识到:乘法器面积与位长呈二次方关系,「所以低精度带来的优势比你想象中还要大」。Pope 明确认同:这种二次方扩展「是低精度算术在神经网络上表现出色的唯一原因」。
  • 可交易的推论是:直到 B100/B200,历史上精度减半只能让 FLOP 数翻倍——按照数学关系看,这并不完全准确。Nvidia 的 B300 规格如今列出 FP4 是 FP8 的 3x;Dwarkesh 说:「虽然按理应当是 4x。」Pope 回应「对」,同时指出浮点数指数会让纯整数模型变得复杂。
  • Dwarkesh 追问:FP4 和 FP8 的电路能不能「凑合着共用」?Pope 回答:「按图中画法,它们并不特别容易复用」——FP4/FP8 的组合是主要设计决策之一,要么由客户需求决定,要么通过均衡功耗预算来决定。2x 比值之所以干净,还有一部分原因在于数据搬运:两个 4-bit 数字可以装进一个 8-bit 存储槽,让总线尺寸「配合得非常漂亮」。

3. Tensor Core 之前,数据通路成本的七分之七都在数据搬运

  • 通用 CPU/CUDA 核心数据通路由寄存器文件向 ALU 供数,但其中隐藏着极其昂贵的成本:选择一个寄存器,需要一个由 n×p 个 AND 门加上 (n−1)×p 个 OR 门构成的 mux,而且还要乘以 3 个输入端口。代入具体数字后,数据搬运要用 24p 个门,而实际乘加只需要 4p 个门。「几乎所有成本,也就是七分之七的成本,都在读写寄存器文件。」
  • Dwarkesh 的软件工程师式感叹值得保留:「你会想,‘我只要选第 3 个元素就行了’,但这么简单的事情本身就是一套相当复杂的电路。」Pope 说:「这是所有隐藏数据搬运成本的第一步」——而这正是 Volta 这一代 Tensor Core 要解决的问题。

4. 脉动阵列:把两层循环固化进硬件,用线性连线换取二次方算力

  • 诀窍是再向上抽象两层循环,把完整的矩阵-向量乘法硬连进硬件。权重矩阵保持不变,并存储在阵列本地的寄存器中,供多个向量重复使用——这样只需与寄存器文件进行 x 规模的通信,就能获得 x·y 规模的计算。Dwarkesh 总结、Pope 认可:矩阵乘法的特性让你可以「在真正输出某个值之前,塞进大量乘法」。
  • 权重如何进入阵列?「我们只是把它做得非常慢。我们非常缓慢地把它灌入脉动阵列」——通过菊花链逐时钟加载一行。Dwarkesh 的概括是:带宽等于芯片面积,因此应当通过较窄的通道加载那些很少变化的数据。老一代 TPU 被描述为 128×128,这是「已知实现矩阵乘法最高效的电路」。
  • 被问到什么问题最令他夜不能寐时,Pope 没有作戏剧化回答:「芯片设计中大多数决策,本质上都是尺寸决策。」脉动阵列要多大,寄存器文件要多大——这些是相互耦合的问题,例如拿出 10% 的面积用于数据搬运、90% 用于阵列。更大的寄存器文件能换来应用层面的灵活性,却会挤占算力面积。
  • Dwarkesh 将其与上一期节目联系起来:跨芯片推理优化的是单位内存带宽的算力;这里优化的则是每单位寄存器到逻辑的数据传输能完成多少次乘法。Pope 说,同样的效果不仅体现在 ALU 的精度上,也体现在矩阵尺寸上。

5. 时钟是全芯片级互斥锁,逻辑中的循环决定了它的速度

  • Pope 的框架是:芯片拥有 1,000 亿个晶体管并行工作;不同于软件中昂贵的互斥锁,「芯片中的所有电路大约每纳秒都会暂停片刻并完成同步」。时序设计会留出余量,让信号提前约一个周期的 25% 到达;真正的偏差通常会「超出多个标准差」,时钟域跨越除外。
  • Dwarkesh 像在玩 Factorio 一样反问:为什么一定要全局同步?「事情什么时候做完就什么时候做完。」Pope 的回答是,制造差异意味着当计算 f 和 g 在 h 处汇合时,f 可能会碰上 g 的前一个值,也可能碰上下一个值。这也是为什么同一 3nm 制程上的两块芯片时钟频率可能不同——取决于能否压住关键路径。
  • 插入流水线寄存器可以把一团逻辑从中间切开,以面积为代价换取 2x 时钟频率;但反馈循环(例如运行中的累加和)无法拆分,否则就改变了计算过程,「而这决定了时钟周期」。如果走得太远,一个寄存器(8 个等效门)会压过它所驱动的 AND 门(1 个门):「相比实际逻辑,几乎所有成本都会变成同步或通信成本。」Dwarkesh 随即联想到:这又是批量大小的权衡——低延迟,低吞吐。

6. FPGA 从底层到顶层都是 mux,可编程性的代价是 10x

  • 按 Pope 的数字,FPGA 能做的任何事情,ASIC 都能以约一个数量级更低的成本、更高的能效完成;但「第一块 FPGA 成本是 $10,000,而你制造的第一块 ASIC 要花 $30 million,因为它需要完成一次完整流片」。因此,当确定性延迟很重要、且工作负载「可能每月变化一次」时,FPGA 更有优势。
  • 机械结构上,FPGA 由寄存器、4 输入 lookup table(16 种可能的函数,以真值表存储)以及在邻近单元之间进行选择的 mux 构成;配置本质上只是设置 mux 的控制信号。Dwarkesh 追问其层层嵌套的结构,得到的答案是:「从底到顶都是 mux。」10x 的具体来源是:四路 AND 在 ASIC 中只需要 3 个门,在 LUT 中却要 32 个门——因为后者必须列出真值表的每一行,而不是直接放置一个门。
  • HFT 机构为什么不直接使用 CPU?确定性延迟是可以实现的(Groq 宣传这一点,TPU 核心也具备),但「在市场上并不太有吸引力」。罪魁祸首主要是缓存:它比 DDR 快两个数量级,并且不可或缺——没有缓存,「所有程序的运行速度都会慢 100 倍」;但缓存命中率取决于 CPU 所处的运行环境。TPU 则反过来:由软件显式发出 scratchpad 指令,与 HBM 指令分开,不让硬件自行猜测。

7. CPU 把芯片面积花在哪里,以及大脑的慢时钟为何不是硅的捷径

  • CPU 只有约 1,000 路并行(100 个核心 × 16-wide 向量),但每个核心都很庞大:缓存、寄存器文件,以及 GPU 没有对应物的分支预测器。解析一条分支大约需要 5ns(一个 200MHz 时钟周期);若要运行在 1-2GHz,就必须「提前 5 个周期,在你甚至执行到那条指令之前」完成预测。去掉预测器、收紧寄存器文件,「推动了 GPU 相对 CPU 的大量性能提升」。
  • 对于 Dwarkesh 将 CPU 与大脑比较的说法,Pope 回应:大脑以慢时钟运行 batch-size-1,但给硅芯片降频并不会获得类似大脑的能效。由于动态开关功耗——每次比特翻转都要给电容充放电——占芯片能耗的大部分,把时钟降慢 1,000x,只会让转换次数减少约 1,000x、能耗减少约 1,000x;这是同比例变化,并非实质性的能效优势。

8. GPU 是许多微型 TPU,MatX 曾讨论可拆分脉动阵列

  • Pope 的顶层图景是:GPU 围绕 L2 布置规则网格状、近乎同质的 SM;TPU 则是在一个向量单元周围布置少数几个巨型矩阵单元。把 TPU 缩小后,「这大致就是 SM」——「GPU 就是铺满整块芯片的许多微型 TPU」,tensor core ≈ MXU。
  • 权衡在于:大型 TPU 式阵列能更好地摊薄寄存器文件成本,但向量单元与矩阵单元之间的数据只能跨过「两条外围连线」,而 GPU 内部有 16 条连线;因此,GPU 的 SM 内部数据搬运便宜且充足,TPU 的约束则在于单元之间的数据传输。
  • Dwarkesh 直接抛出 MatX 的判断:采用带 SRAM 的 GPU 式小型脉动阵列,同时去掉每个 SM 中支持 CUDA 所需的负担。Pope 谨慎回应:「我们曾公开讨论过一种称为可拆分脉动阵列的东西——大型脉动阵列,也可以是小型脉动阵列。」