← 返回访谈列表

Chip design from 深度访谈

Chip design from the bottom up – Reiner Pope

6
话题段落
756
字幕段落
80m
对话时长
-
核心金句

📋 访谈摘要

加载中...

📖 话题详览

点击任意话题卡片查看该时段的完整对话内容。

从逻辑门到矩阵乘法原语

访谈开场说明目标是从最小的芯片构件向上理解 AI 芯片。Reiner Pope 介绍芯片底层由 AND、OR、NOT 等逻辑门和物理金属连线组成,而 AI 芯片最核心的计算是矩阵乘法。矩阵乘法在三重循环中反复执行 multiply-accumulate,即把一对数相乘并累加到输出。嘉宾解释,AI 中乘法常用低精度,而累加会反复叠加误差,因此累加部分通常需要更高精度,这也是他用四位乘法和八位加法作为示例的原因。

逻辑门矩阵乘法乘加运算数值精度

手算乘加与部分积生成

嘉宾用手算长乘法展示四位数乘四位数再加八位累加值的过程。他先把一个四位数与另一个四位数的每个 bit 位相乘,并根据位的位置进行移位,得到多行 partial products。随后他指出,在求和这些乘法中间项时,可以把 accumulator 项一起放进同一个求和网格。为了生成这些部分积,硬件上只需要用 AND gate:两个输入 bit 都为 1 时输出才为 1。因此四位乘四位需要 16 个 AND gate,一般 p 位乘 q 位需要 p×q 个 AND。

长乘法部分积AND门电路规模

全加器与 Dadda 乘法器

在生成部分积后,主要工作转向求和。嘉宾解释 full adder 并不是软件意义上的 32 位加法器,而是把三个单 bit 输入压缩成两个 bit 输出,因此也叫 3→2 compressor。他用列求和示例展示如何不断从同一列取三个 bit,经全加器输出 sum 与 carry,并把 carry 写到相邻高位列。反复应用这一过程,直到网格压缩为最终结果。这种方法称为 Dadda multiplier,是面积高效乘法器的标准做法。示例中 24 个输入 bit 最终变成 8 个输出 bit,因此需要 16 个 full adders。

全加器Dadda乘法器3到2压缩面积效率

位宽、浮点格式与低精度优势

主持人追问 Nvidia 芯片规格中 FP4 与 FP8 吞吐量似乎可互换的问题。嘉宾说明,按前面画出的电路看,不同精度并不天然 fungible,芯片设计者必须决定 FP4 和 FP8 各占多少硬件资源,依据可能是客户需求、功耗预算或数据移动便利性。由于两个四位数可装进一个八位数的存储空间,软件和片上总线布局会更顺畅。更关键的是,乘法面积大致随 bit width 二次增长,因此降低精度带来的收益超过线性比例。Nvidia 过去通常按位宽减半、FLOP 翻倍报告,而 B300 以后开始体现 FP4 相对 FP8 更高的提升。

FP4FP8低精度计算二次缩放

寄存器文件与隐藏的数据移动成本

嘉宾回到 Tensor Cores 之前的 GPU 与 CPU 结构,说明传统 CUDA core 或处理器通常由 register file 和 ALU 组成,执行时从寄存器中任意选取若干输入,送入 multiply-accumulate 单元,再写回寄存器。为了从多个寄存器中选择某个值,硬件需要 mux。一个 n 输入、p bit 宽的 mux 需要 n×p 个 AND gate 和约 (n-1)×p 个 OR gate。由于一次乘加有三个输入,光是寄存器文件到计算单元的数据选择成本就可能远大于实际乘法电路。中间还插入了 Crusoe 云服务广告,强调 GPU 云总拥有成本与故障检测、节点替换等运维能力有关。

寄存器文件MUX数据移动CUDA核心

MUX 示例与 Tensor Core 动机

广告后,嘉宾用 two-way mux 的具体电路展示选择输入的过程:通过 one-hot selector 把目标输入与 1 相 AND,把其他输入与 0 相 AND,再用 OR 把结果合并。他强调,推广到 n 行、每行 p bit 时,成本就是 n×p 个 AND gate,而在前述传统电路里,多数面积用于寄存器读写,真正的逻辑单元只占小部分。这构成 Tensor Cores 的核心动机:不要只把单个 multiply-accumulate 固化进硬件,而是把矩阵乘法循环中更大粒度的结构固化为 systolic array。这样每次访问寄存器文件能做更多计算,并利用循环中保持不变的数据,提高 compute 相对 communication 的占比。

Tensor Core脉动阵列固定功能硬件通信开销