来源: Dwarkesh Podcast (Substack) | Reiner Pope | May 22, 2026
分类: 其他
原文发表: May 22, 2026
纪要生成: 2026-05-24
Reiner Pope 是 AI 芯片初创公司 MatX 的 CEO(本期主持人 Dwarkesh 也是其天使投资人)。此前他在 Google 从事软件效率、编译器及 TPU 架构相关工作。本集在黑板上从最基本的逻辑门开始,逐步构建出乘法累加器、多路复用器、脉动阵列、流水线寄存器,最终对比 CPU、GPU、TPU、FPGA 乃至人脑的差异,完整呈现了芯片设计由底向上的核心原理与关键权衡。
本节重点
p×q,全加器数亦为 p×q(输入比特总数为 p×q + p + q,输出比特为 p+q)。详细精要
C[i,k] += A[i,j] × B[j,k] 的每一步都是一个乘法后累加;同时,累加过程中舍入误差会累积,因此累加精度通常高于乘数精度(例如 4 位乘、8 位累加),以获得更高的数值稳定性。乘累加之所以“光滑”地契合矩阵内积,还因为它使得门数分析极为简洁:p×q 个 AND 和同等数量全加器。
手工构建 4×4 乘加的全过程:将两个 4 位数(1001 和 另一个 4 位数)的每一位相乘,得到 16 个部分积,再加上一个 8 位累加数,共 24 个需要求和的比特。
第二部分:对所有比特进行求和。这里使用的核心电路是 全加器(full adder),它输入 3 个单比特(通常来自同一列),输出 2 个比特(和与进位),因此又称为 3→2 压缩器。全加器的功能就是统计三个输入中 1 的个数,并以二进制输出。
达达乘法的还原压缩步骤:从最右列开始,每次取 3 个比特送入全加器,输出 1 个和(留在原列)和 1 个进位(移至左列);不断重复,直到每列只剩 1 个比特。
p×q 个 AND 门产生部分积,再加上 p+q 个累加输入比特,总计 p×q + p + q 个输入比特,输出为 p+q 位,因此全加器数量 = (p×q + p + q) - (p+q) = p×q。这正是达达乘法器简洁的代数量。每一步全加器调用对应一个逻辑门,所有连线需要在物理上实现为金属迹线,这就是芯片上实际占用面积的来源。
精度与面积的二次方关系:AND 门数和全加器数都是 p×q,如果两个乘数位宽相同,电路面积约与位宽的平方成正比。这也是低精度(如 FP4)极致高效的根本原因。
这也解释了为何 AI 芯片设计中,不同精度格式(FP4/FP8)的面积分配是一个核心决策:要么按客户需求配比,要么按功率预算均摊。
可伸缩性与精度格式的复用问题:同一条乘法累加电路是否可以复用于 FP4 和 FP8?答案是否定的——手绘的这一套电路只能用于一种固定位宽。要支持多种格式,要么复制多个单元,要么通过其他方式拆分,但无法简单“复用”。
💬 精华片段(中文)
“The first reason is that it's what shows up in matrix multiplication. The second is that it gave us this very slick, simple p×q, very simple algebra.”
本节重点
n×p 个 AND 和 (n-1)×p 个 OR——仅数据搬运就占用绝大部分面积。详细精要
多路复用器是完全透明的软硬件界面;软件只需指明“读取第 3 号寄存器”,而硬件必须从所有寄存器中拣选出这一路。
多路复用器的门级实现:采用最朴素的方法:把每个寄存器输出与一个控制位相 AND(掩膜),然后将所有结果相 OR 合并。
n 路、每路 p 位的 mux,需要 n×p 个 AND 门(每一位都要与选择信号进行 AND),以及 (n-1)×p 个 OR 门(将所有掩膜后的信号逐层或起来)。以一个两路、4 位的 mux 为例,Reiner 在黑板上演示了每一步的与/或操作,指出其过程类似于加法,但 OR 的合并比全加器简单得多。
数据移动成本 vs 计算成本:以 8 个寄存器的文件为例,读取 3 个操作数需要 3 个 mux,总 AND 门数 = 3 × 8 × p = 24p。而一个 4 位乘法器只消耗约 4p 个 AND 门(且全加器门数规模类似)。
这揭示了“隐藏的数据移动成本”:软件程序员以为只是“选一个数”,但硬件上需要大量额外电路。大多数通用处理器的瓶颈正是这些透明但庞大的互连逻辑。
转变为脉动阵列的动机:既然绝大部分面积都花在了搬运上,那就必须想办法让每个字节搬运过来后能做更多计算。Volta 代 Tensor Core(通用名称为脉动阵列 systolic array)正是这一思路的产物。
💬 精华片段(中文)
“All of this work just moving the data from the register file to the logic unit is many, many times more expensive than the logic unit.”
本节重点
O(x) 成正比(x 为一维尺寸),而非 O(xy),从而极大节省与外部寄存器文件的昂贵连线。详细精要
y = Wx)的整个计算过程用二维运算单元网固定下来。输入向量(右侧)流入,与本地存储的权重相乘后,部分和沿垂直方向累积,最终从底部输出结果向量。这种空间上的列内累加恰好对应矩阵乘法的点积。
权重本地化,向量流动:最大的优化在于权重矩阵保留在脉动阵列内部的寄存器中,整个推理或训练过程中长时间不变,仅馈入不同的向量。
相比传统设计(每周期从寄存器文件搬运全部权重),这一策略将通信量从与矩阵大小成正比 O(xy) 降为与向量大小成正比 O(x)。计算量仍是 O(xy),因此计算/通信比获得 O(y) 倍的提升。
权重的“涓流”加载机制:虽然权重存储在阵列内部,但终究需要初始化。采用的办法是沿着列方向缓慢移位:每个时钟周期将新的权重数推入第一行,同时所有行下移一行。
代价是加载延迟较高,但对于权重更新频率极低的推理场景完全可接受。这与数据中心级推理的“加大批量以摊薄内存带宽”思想一脉相承:都在通过固定数据重用提升计算密度。
整体面积效率:这一结构将原本花费在 register file muxes 上的大量 AND/OR 门,转换为更多乘法器,直接提升单位面积的有效算力。早期 TPU 中常见 128×128 的规模,现代 AI 加速器几乎无一例外包含某种形式的脉动阵列。
💬 精华片段(中文)
“The key trick is that this matrix can be stored locally to the systolic array. … we’re going to reuse these numbers over and over again for a large number of different vectors.”
本节重点
详细精要
这保证了极度可预测的并行执行,而不必像软件那样使用昂贵的互斥锁。
时钟频率与吞吐:每秒完成的操作为 频率 × 每周期完成的操作数。提升频率有两种方式:要么用更好的工艺节点,要么在设计中插入额外寄存器拆分长逻辑路径。
芯片设计者的任务之一就是在频率、面积与功耗之间取得平衡。不能无限制插入寄存器,因为寄存器本身也是要占门和布线的。
反馈环路对时钟的限制:当电路结构包含从输出回到输入的环路(例如累积求和 acc = acc + new)时,简单插入寄存器会改变算法。
因此,反馈环路中纯粹的组合逻辑延迟决定了时钟周期的最小值;工艺库中 AND/全加器的单级延迟约为 10 ps,一串 10–30 级门才能在一个周期内完成。这也就是 2–5 GHz 级别的时钟频率来源。
面积效率视角:如果过分追求高频率而插入过多寄存器,可能出现寄存器面积远超逻辑本身的情况。例如,一个 AND 门面积为 1,一个寄存器约为 8;若每一级逻辑后都插入寄存器,大部分面积都沦为“同步税”,实际吞量反而下降。
💬 精华片段(中文)
“If I try to put a pipeline register right in the middle of it, … I will end up with a running sum of the even numbers and a running sum of the odd numbers.”
本节重点
详细精要
高频交易公司采用 FPGA,是因为他们追求纳秒级确定性延迟,并且交易策略经常迭代,ASIC 的固定逻辑无法适应这种变化。
FPGA 的核心构造块:LUT、寄存器和超大 mux 网络:
互连:每个 LUT 和寄存器的输入前都连接着一个巨大的多路复用器,从周围数十个节点中选择信号来源。这片固定的互连结构(绘制为白色背景)是“出厂时的本质开销”,而实际使用的信号路径(橙色)只是其上叠加的一条“逻辑布线”。
面积开销的量化:实现一个四输入 AND 门,在 ASIC 中只需 3 个 AND 门(两两相与);而 FPGA 需要通过一个 LUT。
因此 FPGA 实现同样逻辑的资源开销约是 ASIC 的 10 倍,这直接对应了功能密度和能效的十倍差距。
可编程性来自海量配置位:编程 FPGA 的本质,是为每一个 mux 选择线(选择从哪个邻近节点读入)和每一个 LUT 的真值表写入数据。这些配置位存储在 FPGA 各处的 SRAM 中,上电时加载,决定了芯片的逻辑功能。
💬 精华片段(中文)
“Using a LUT, I can also implement it, but it's going to take 32 gates instead of three.”
本节重点
详细精要
对于高频交易等场景,这种不确定性是绝对无法接受的,因此必须转向可控的方案。
暂存器的设计理念:在 TPU 中,同样有一块片上高速存储(类似缓存),但不再有“自动缓存”的电路。软件使用两类完全不同的指令:一种读/写暂存器,另一种读/写片外 HBM。
这种方式牺牲了一定的编程便利性(需要显式 DMA 搬移),但换来确定性和面积效率(无需实现复杂的缓存一致性协议和 Tag 比较逻辑)。
确定性微架构:Reiner 指出,实现确定性 CPU 在技术上完全可行——只需去掉缓存和其他推测性部件(如分支预测器),改用暂存器或全同步设计。但此类 CPU 由于访存延迟暴露,大多数程序(依赖缓存提升性能)将慢上百倍,因此在通用市场不具吸引力。而在专用领域,Groq 和 TPU 等芯片正是这样设计的。
💬 精华片段(中文)
“The presence of a cache is absolutely necessary for a CPU to run at a reasonable speed. … But whether or not you get a cache hit depends on the ambient environment … a big source of non-determinism.”
本节重点
详细精要
CPU 的 ALU 自身可能只是整核面积的 5% 以下。GPU 则通过消灭大部分分支预测逻辑和缩小寄存器文件,将更多面积用于 ALU。
分支预测器的作用:现代 CPU 流水线深度达 10–20 级,取指、译码、执行、写回均需多个周期。遇到条件分支时,如果等待分支结果再取下一条指令,流水线会停顿。
一旦预测失败,整个流水线需要刷新,损失大量周期。因此预测准确率必须极高(通常 >95%),这需要复杂的硬件结构,带来很大面积和功耗开销。
GPU 的替代策略:GPU 的一个 SM 管理着数十个 warp(线程束),每当一个 warp 因分支或访存停顿,硬件瞬间切换到另一个 warp 执行。这种零开销线程切换有效隐藏了延迟,因此不需要庞大分支预测器。
💬 精华片段(中文)
“The thing that does not have an equivalent in a GPU is the branch predictor. … Stripping a lot of that out … drives a lot of the GPU gains over the CPU.”
本节重点
详细精要
大脑的“计算与存储合为一体”类似于片上 SRAM,但芯片中的计算单元和存储仍是物理分离的,尽管在三维封装中可异质集成。
时钟速度与能效:人脑的神经元平均发放频率仅约 10 Hz,而 GPU 主频 1 GHz 以上,差距 10^8 量级。
因此,降频1000 倍只能降低约 1000 倍的总能耗,但能效(每焦耳完成的操作数)并没有质的提升——因为原有电路在做完一次计算后就“睡”了,没有白做无用功。真正提升能效要靠减少每次操作的必需翻转数(如低精度、脉动复用)。
动态功耗的本质:芯片中存储一个比特相当于对一个微小电容充电;从 0 变 1 充电,1 变 0 放电到地。每次翻转的电荷流动产生了热。降低数据搬运、减少精度、使用时钟门控(关掉不用的部分)等手段,才是降低每操作能耗的有效途径。
💬 精华片段(中文)
“If you run a chip much slower … you will have 1,000 times fewer transitions. … But it's not a substantial advantage in energy efficiency.”
本节重点
详细精要
因此说“一个 GPU 就是一大堆微型 TPU 拼在一起”从架构角度基本准确。
TPU 的整体布局:通常由 2–4 个巨大的脉动阵列(矩阵单元)占据芯片主体,中间是向量处理单元 (VPU),辅以高速暂存器。这是典型的粗粒度异构设计。
但代价是:向量单元与矩阵单元之间的数据搬移通道少(例如仅两端),当运算需要频繁在矩阵和向量之间切换时,数据移动变成瓶颈。
数据移动的几何因素:在 TPU 中,单个大阵列的边界周长有限,往返向量单元的总带宽受限。而 GPU 由大量 SM 各自独立运作,从每个 SM 的向量单元到其本地张量核心的带宽总和更大——因通道数量多且距离短。
这构成另一种粒度-带宽权衡:粗粒度摊薄控制开销但束缚数据流动;细粒度自由但受限于每个结点规模。
可分割脉动阵列的设想:Reiner 披露 MatX 公开讨论的 splittable systolic array 概念,试图让一个大型阵列在需要时可动态拆分成多个小型独立阵列,以期同时获得大阵列的面积效率和小阵列的灵活性。这一思路也映射了 AI 推理与训练负载中多样性的矩阵形状对硬件的需求。
💬 精华片段(中文)
“From a very high-level point of view, the GPU has a lot of tiny TPUs tiled across the whole chip.”
| 术语 | 解释 |
|---|---|
| logic gate / 逻辑门 | 构成芯片的最基本单元,如 AND、OR、NOT,物理上由晶体管实现。 |
| multiply-accumulate (MAC) / 乘累加 | 执行 a = a + (b × c) 的操作,是矩阵乘法的核心原子操作。 |
| full adder / 全加器 | 将三个单比特数相加,产生和与进位输出的电路;又称 3→2 压缩器。 |
| Dadda multiplier / 达达乘法器 | 一种利用全加器逐层压缩部分积的硬件乘法器结构,以面积高效著称。 |
| mux / 多路复用器 | 从多个输入信号中选择一路输出的电路,在芯片中用于数据路径选择和可编程互连。 |
| register file / 寄存器文件 | 一小组高速存储单元,为处理器核心提供操作数并接收结果。 |
| CUDA core | Nvidia GPU 中的基本计算单元,早期主要负责浮点/整数 ALU 操作,后配合张量核心使用。 |
| Tensor Core / 张量核心 | Nvidia Volta 代起引入的固定功能单元,硬件实现脉动阵列或类似结构,加速矩阵乘加。 |
| systolic array / 脉动阵列 | 以二维网格排列的处理器单元,数据以脉动节奏在单元间传递;权重常驻本地以获得极高数据复用。 |
| TPU (Tensor Processing Unit) | Google 开发的 AI 加速器,内部包含大型脉动阵列和暂存器,针对 TensorFlow 优化。 |
| MXU (Matrix Unit) | TPU 中的矩阵乘法单元,即大尺寸脉动阵列。 |
| clock cycle / 时钟周期 | 芯片全局同步信号的周期;所有寄存器在该周期边沿捕获数据,决定芯片基本操作节奏。 |
| pipeline register / 流水线寄存器 | 为拆分长逻辑路径以提升时钟频率而插入的寄存器,增加流水级数。 |
| feedback loop / 反馈环路 | 组合逻辑的输出又馈入输入的电路(如累加器),限制了可插入寄存器的位置。 |
| FPGA (Field-Programmable Gate Array) | 可在现场反复编程的芯片,通过 LUT 和可配置互连模拟任意数字电路。 |
| ASIC (Application-Specific Integrated Circuit) | 为特定应用定制的不可重构芯片,面积/功耗/性能最优,但需高昂流片费。 |
| LUT (Look-Up Table) / 查找表 | FPGA 中的基本逻辑单元,通过预存真值表实现任意 n 输入布尔函数;通常为 4 输入。 |
| one-hot encoding / 独热编码 | 选择控制的一种编码方式,任何时候只有一位为1,其他全0;在 mux 中选择特定通道。 |
| cache / 缓存 | 透明保存近期/频繁使用数据的硬件结构,旨在减少平均访存延迟,但引入不确定性。 |
| scratchpad / 暂存器 | 由软件显式管理的片上高速存储,无自动缓存机制,提供确定性延迟。 |
| DDR / HBM | 分别为双倍数据速率内存和高带宽内存,用作芯片的外部大容量内存。 |
| branch predictor / 分支预测器 | 推测条件分支方向及目标的硬件模块,让 CPU 流水线免于等待分支结果,是 CPU 高性能的关键。 |
| warp scheduler / 线程束调度器 | GPU 中负责将多个线程束(warps)调度到执行单元上的硬件,通过即时切换隐藏延迟。 |
| SM (Streaming Multiprocessor) | Nvidia GPU 中的可编程多处理器,包含多个 CUDA 核心、张量核心、共享内存等。 |
| von Neumann architecture / 冯·诺依曼架构 | 计算与存储分离、指令顺序执行的经典计算机模型;现代 CPU 仍然遵循,但加入了大量并行优化。 |
| splittable systolic array / 可分割脉动阵列 | 一种新型阵列设计,可根据负载动态拆分成多个独立小阵列或组合成一个大阵列。 |