《Designing AI Chip Software and Hardware》中文整理版02-Systolic Array:为什么它是 芯片真正的发动机
授权状态:原文公开免费阅读,但未见明确的开放许可或中文翻译发布授权。本文为非商业学习交流翻译;中文分篇标题为译者拟题;本文为第 2 / 9 部分。
硬件设计提案(摘要)
下面是我所提议设计的摘要。我建议你最后再读这一节,不过如果你愿意,也可以一开始就读。这个设计的定义性特征是:硬件上容易实现,编程起来像 CPU 一样容易,并且从“计算 / 瓦特”的角度来看非常便宜。我怀疑任何一家做AI芯片的公司都不会直接原样采用我的方案,但我建议你逐条看完这个设计,并且对每一处偏离都要想清楚:你为什么认为偏离它是个好主意。如果我真的开始造这个东西,我当然也会随着时间推移修改这个设计。
“等等,这不就是一个挂了脉动阵列的 CPU 吗?你的意思是,只靠这个就能打过复杂的 GPU 和 AI ASIC?”是的,这就是我相信的。这个芯片的大部分都是缓存和脉动阵列,所以你不需要在标量计算和向量计算上偏离 CPU 路线。CPU 是最容易编程的东西,而且硬件工程师和软件工程师都已经知道怎么构建和使用 CPU。这就是这个想法。你需要读完整份文档才会明白为什么这行得通,不过这里先列出这个设计的一些重点:
-
设计一个传统 CPU,加入额外的向量计算能力(以及寄存器),并在每个核心上连接一个脉动阵列。如果你的名字叫 Intel 或 AMD,那大概就用 x86;否则,就找一个又快又便宜(对你来说便宜)、并且你能自己制造或授权使用的东西。
-
配备一个大的软件管理 SRAM 缓存(software-managed SRAM cache,单位为 MB),如果某个程序没有使用其中一部分,它还可以潜在地兼作自动缓存。
-
支持所有存储器和网络之间的 DMA(直接内存访问,Direct Memory Access)。允许 SRAM-network-SRAM DMA。为 DMA 提供硬件 8-bit Huffman 压缩 / 解压缩能力,速度达到 HBM / 链路速度。
-
不需要主机计算机(host computer)——你的芯片本身已经是一个通用 CPU。确保你的芯片能够运行 Linux 和 TensorFlow / PyTorch。再加入一些没有脉动阵列的标量核心。
-
不要给你的芯片配备大量 HBM。通过使用多颗芯片来放下权重。
-
给你的芯片配一个 SSD。通过使用稀疏注意力(sparse attention),让 KV 缓存(KV cache)可以放到这里。
-
脉动阵列只支持 7-bit 乘法,不支持 16-bit。求和位宽更大,并且采用饱和处理。
-
脉动阵列支持 RHS 上的 1-of-2 稀疏——简单,并且允许 2 倍吞吐。
-
主网络是由铜走线构成的 1D 或 2D 环面拓扑(torus)。使用便宜的定制主板,让它们能够在 1D 或 2D 方向上相互扣接,连接这些走线。不需要昂贵线缆。
-
为你的芯片写一个 XLA 后端(XLA backend)。大多数用户会通过 XLA 使用这个设备。同时支持用标准 C++(带 intrinsic)编写的自定义 kernel 和自定义 XLA op。
-
这个设计也适用于训练阶段(training),但一开始要专注于推理阶段(inference)——那更容易。
这避开了那些你其实并不真正需要的 AI 芯片昂贵部分。用 RTL 实现这种硬件很直接,而且你可以像给任何其他 CPU 编程一样给它编程。我不知道为什么类似这样的东西还没有成为 AI 芯片的行业标准。这个行业似乎更喜欢追求新奇的非 CPU 架构。
要用好这颗芯片,需要相当高的软件成熟度;你还必须做一些 AI 研究,让稀疏(索引式)注意力能够良好工作,同时还要让 1:2 稀疏能够良好工作。而且,在这里建议的低 HBM 配置下,要运行一个大 LLM,会需要很大的最小安装规模。你可以选择修改这个设计,让它不那么经济,以绕开这些因素;我认为那样仍然是一个好的设计,但会更昂贵。我无法预测哪一种选择会最大化你的利润,但这里建议的是从大规模交付时的单位成本 token 产出来看更好的方案。
给硬核读者看的关于Groq LPU 的技术说明
Groq 的 LPU 设计不需要任何 HBM。这和我这里说的是同一回事吗?在通过分散权重来避免每颗芯片都需要大容量存储权重这一点上,它是一样的;这也会带来一个相同的要求:安装规模必须很大。不过,在处理 KV 缓存需求方面,它并不一样。Groq 对解码阶段(decode,输出 token)采用低 batch(因此 token 延迟也低)的方式,这会显著降低 KV 缓存需求——这就是它们为什么不需要任何 HBM 来存储 KV 缓存。这意味着 Groq 的芯片不会(也不能)使用大型脉动阵列(大型脉动阵列需要更高 batch),这必然会导致更差的功耗效率和面积效率。Groq 的方式还会带来非常高的带宽需求,而 LPU 之所以具备这种带宽,是因为它用 SRAM 代替了 HBM。我在这里提出的设计则相反:使用索引式注意力(indexed attention,它会带来低得多的带宽需求),从而可以把 KV 缓存卸载到 SSD 上,这样仍然可以使用大 batch,也因此仍然可以使用大型脉动阵列。但这意味着你必须让稀疏(索引式)注意力真的工作起来——如果你(以及你的客户)搞不定这一点,那就必须增加更多 HBM,事实上大多数 AI 芯片也确实是这样做的。
脉动阵列——AI 硬件的基础
脉动阵列(systolic arrays)是 AI 硬件的基础,也就是深度学习硬件的基础。为什么?
像Transformer 这样的深度学习模型里,几乎所有数学运算(OPs)都发生在矩阵乘法内部。大型脉动阵列是在硬件中实现矩阵乘法最高效的方式。所以,脉动阵列就是 AI 硬件的基础。
像 Nvidia GPU(例如 Blackwell)或 Google TPU 这样的 AI 加速器芯片(AI accelerator chip),本质上就是一种访问脉动阵列的方式。AI 芯片上除了脉动阵列之外还有更多组成部分,但脉动阵列是最重要的组成部分,就像汽车的发动机一样。
这份文档并不是用来解释什么是脉动阵列,或者它们如何用于矩阵乘法的——我假设你已经知道这些了。不过,如果你以前没听说过,也可以让 Gemini 这样的 AI 助手给你解释。
如果明天出现了一种更好的 AI,并且它不依赖矩阵乘法,那么这份文档里的结论可能都需要改变。目前看起来事情并不是朝这个方向发展,因为矩阵乘法已经长期占据核心地位了;但对于任何 AI 硬件芯片生产商来说,这都是一个风险:取决于 AI 研究接下来会发生什么,他们现在的 AI 芯片明天可能就不再有用了。这个情况无法绕开。十年前是这样,今天也是这样。
像 Nvidia GPU 和 Google TPU 这样的 AI 芯片上有许多大型脉动阵列。如果一颗 AI 芯片设计得合理,那么 AI 所消耗的大部分电力都会用于驱动这些脉动阵列。所以,当你听到 AI 消耗大量电力时,实际上是在说脉动阵列消耗了大量电力,至少对于设计合理的 AI 硬件来说是这样。这并不是因为脉动阵列的能效差——如果没有脉动阵列,所需电力会高得多。
决定一颗 AI 芯片速度和能效上限的,正是脉动阵列。事实上,当我们谈论一颗 AI 芯片的利用率(utilization)时,理想情况下它应该接近 100%,我们大多数时候其实是在谈论脉动阵列有多忙。芯片的其他部分存在的目的,就是让脉动阵列一直保持忙碌。
在 Nvidia GPU 上,脉动阵列位于 Nvidia 所称的TensorCore 内部。Google 使用矩阵乘法单元(Matrix Multiply Unit,MXU)这个术语来指代它们的脉动阵列。你可能会注意到,“multiply” 这个词里并没有 X,但 x 有时会用来表示乘法,比如 2 x 3 = 6,所以它们把它叫作带 X 的 MXU。AMD 把它们的脉动阵列称为MatrixCores。Intel 把通往它们脉动阵列的接口称为Advanced Matrix Extensions(AMX)。在Amzon Inferentia/Trainium上,脉动阵列被称为 NeuronCores。听起来好像存在大量不同的 AI 芯片路线,当然它们确实有差异,但本质上都是脉动阵列,再加上一些把它们组织起来的其他东西。全都是脉动阵列。那些品牌名称是为了市场营销。也有一些 AI 芯片不包含脉动阵列,比如非常老的 Nvidia GPU。和包含脉动阵列的芯片相比,由于功耗效率和面积效率较差,它们对大多数 AI 应用来说并不理想。
所以,下次你听到某个 AI 芯片说自己有 “Northern Lights-Speed Einstein Genius Cores”,或者 “Newton AppleFall Eureka Cores”,或者不管它们又要起什么名字,你只需要记住:它们说的其实是脉动阵列。全都是脉动阵列。供你参考,脉动阵列是在1978年发明的。我们最近看到带有大型脉动阵列的 AI 芯片不断出现,是因为 AI 创造了对这种东西的需求。它并不是什么先进的现代技术,而是一项老技术,只是突然之间有了庞大的客户群。如果深度学习在 1978 年就被发明出来,那么当时也会出现一波脉动阵列芯片——我是说 AI 芯片——的热潮。事情会是一样的。它并不是什么复杂精巧的现代产物。
你可能会说,高内存带宽和高网络带宽对 AI 也很重要,所以事情并不只是脉动阵列。是的,但为什么 AI 需要高带宽?这是因为脉动阵列太高效了,所以你需要高带宽来喂饱它们——否则它们就会闲在那里,等待更多工作。如果没有脉动阵列,芯片会慢得多,而且每颗芯片也远不需要那么多带宽。AI 革命是由脉动阵列的成本效益托起来的。
所以现在你知道了:AI 芯片的发动机是脉动阵列,而每家公司都会给自己的脉动阵列芯片起一个不同的名字。
在这份文档的后续部分,我会重点讨论 Nvidia GPU 和 Google TPU,因为我曾在 Google 和 Nvidia 都做过这两类产品,所以我很熟悉它们;同时也是因为截至 2026 年,它们是行业里排名前二的 AI 芯片产品。当然,还有很多其他脉动阵列芯片——我是说 AI 芯片。
给硬核读者看的例外情况
确实有少数例外。Groq 的 LPU 没有大型脉动阵列,甚至可能根本没有脉动阵列。LPU 面向的是低 token 延迟,而不是经济型 AI。Nvidia 授权了 Groq 的技术,而这正是 Jensen(Nvidia 的 CEO)在 GTC 2026 上所说的:它面向的是昂贵、低延迟的 token,而不是一般意义上的经济型 AI。还有一些模拟芯片(analog chips),使用光或电,以其他方式尝试实现经济性——这些方案尚未被证明可行,但如果未来被证明可行,它们也许会变得重要。
更大的脉动阵列效率更高
这一节是这份文档中少数几个带有一点数学内容的章节之一。所以,为了弥补这一点,它也配了一些(画得不太好的)图片。假设你想把两个 N × N 矩阵 A 和 B 相乘,得到矩阵乘积 C = A * B。那么你可以把一个脉动阵列想象成这样:
图示说明:图中左侧输入 A的一行,上方输入B的一行,中间是脉动阵列,右侧输出C的一行。
在每个周期(cycle),这个脉动阵列从左侧接收一个向量,从上方接收一个向量,并向右侧输出一个向量。你可以看出,这个图是简化过的,因为它需要知道整个矩阵 B,才能产生C的某一行,所以在看到全部B之前,你无法产生C的任何一行。这就是为什么在现实中,整个矩阵B会先被送入脉动阵列并存储在那里,然后它才开始处理A的各行。不过,如果你在一个接一个地做很多独立的矩阵乘法,那么你可以在处理当前A矩阵、输出前一个C矩阵的同时,把下一个B 矩阵送进去。这样,脉动阵列的左侧、上方和右侧就可以在每个周期都保持忙碌,这被称为 100% 利用率(100% utilization)。100% 是好事。
脉动阵列还会使用一种叫作 skew / stagger(偏斜 / 错位)的东西,这会让图示进一步复杂化。不过我会把它排除在讨论之外,因为它和本节内容无关。
一个 N × N 脉动阵列的向量宽度是 N。如果我们把向量宽度从 N 翻倍到 2N,也就是创建一个 2N × 2N 的脉动阵列,而不是 N × N 的脉动阵列,会发生什么?它看起来大概会像这样:
图示说明:向量宽度翻倍,脉动阵列从 N × N扩展为2N × 2N,面积变成原来的 4 倍。
这些向量宽度是原来的两倍,而脉动阵列是原来的 4 倍大,所以它每个周期可以做 4 倍的数学计算。为了看清楚将向量宽度翻倍带来了什么收益,我们需要把图扩大,把和每个脉动阵列关联的 CPU(或者类似 CPU 的结构,比如 GPU)也包括进去。这个 CPU 会告诉脉动阵列该做什么,并处理来自 A、B 和 C 的行,也就是向量。你可以在下面的图中看到这一点。
图示说明:左图是 4 个较小的 N × N脉动阵列,每个都需要对应的 CPU 控制;右图是 1 个更大的2N × 2N脉动阵列,由一个更宽的 CPU / CPU 类结构控制。
那么,使用这个更大的脉动阵列,我们到底得到了什么?更大的 2N × 2N 脉动阵列每个周期做的数学计算量是之前的 4 倍,所以如果使用较小的 N × N 脉动阵列来构造一个吞吐量等价的结构,就需要 4 个脉动阵列。它还需要额外的 4 个 CPU 核心,来告诉这 4 个脉动阵列该做什么,并处理它们的向量。因此,使用一个 2N × 2N 脉动阵列,而不是一个 N × N 脉动阵列,就把 CPU 核心数量 / CPU 工作量减少了 4 倍。
不过,右图中的 CPU 必须处理宽度翻倍的向量,这会让它更昂贵,但它的成本增加不到 2 倍。所以,从左图变成右图,我们让芯片其余部分缩小了超过 2 倍。同时,我们并没有损失任何矩阵乘法能力。因此,通过把向量宽度翻倍,我们让芯片其余部分的效率提升了 2 倍。再做一次,你会得到 4 倍。再做一次,你会得到 8 倍,如此类推。
你可能会问:难道不能只用同一个 CPU 核心来驱动左图里的全部 4 个脉动阵列吗?可以,但那样这个 CPU 核心就需要有 4 倍的能力 / 速度,所以总体数学关系并没有改变。
这些图解释了为什么我们正在看到 AI 芯片朝着越来越大的脉动阵列发展。Nvidia GPU 在 Volta(2017)中获得了 4 × 4 脉动阵列,在 Turing(2018)中获得了 16 × 16 脉动阵列,在 Blackwell(2025)中获得了 64 × 64 脉动阵列。Google TPU 一直使用 128 × 128 或 256 × 256 的脉动阵列尺寸。
你可能会觉得这幅图不适用于 GPU,因为我在图中画的是一个脉动阵列和一个 CPU 核心,而图里并没有叫作 GPU 的东西。但就这个特定观点而言,GPU 只是一种特殊形式的 CPU,一种带有大量向量计算能力的 CPU。因此,这幅图完全适用于 GPU。你在图里看到 “CPU” 的地方,把它理解成 “GPU”,就能得到正确的想法。
这里有个谜题值得思考。早在 2017 年,Nvidia 就已经是一家规模很大、利润很高的公司,而 GPU 当时是、现在也是它的主力产品。与此同时,虽然 Google 也是一家非常大的公司,但 Google 内部的 TPUv2 团队很小,软硬件加起来总共大概 30 人左右,其中 XLA 团队只有 5 人。然而,从那时起,Google TPU 一直能够很好地和 Nvidia GPU 竞争。这怎么可能?我认为,答案很大程度上和脉动阵列的尺寸有关。
我们从脉动阵列尺寸的角度比较一下 Volta 和 TPUv3。Volta 有 4 × 4 脉动阵列,而 TPUv3 有 128 × 128 脉动阵列。为了看看这会产生什么影响,我们分别看标量计算和向量计算。
标量计算
标量计算(scalar compute)包括那些告诉 AI 加速器其他部分应该做什么的处理工作。我们刚才看到,向量宽度每翻倍一次,用于矩阵乘法的标量工作量就会减少 4 倍。从 4 到 128,需要把向量宽度翻倍 5 次。因此,从 4 × 4 脉动阵列变成 128 × 128 脉动阵列,对标量计算的收益是:
4^5 = 4 * 4 * 4 * 4 * 4 = 1024x
一颗 AI 芯片除了矩阵乘法之外,也必须使用标量计算来做其他事情,所以这并不是完整故事,但它是故事的重要部分。TPU 为了驱动脉动阵列执行矩阵乘法,只需要做原来 1/1024 的标量工作量。实际上甚至比这个还要更多,因为 TPU 的向量寄存器是 8 × 128,而不只是 128,所以是 8 * 1024 = 8192x。标量工作并不是 AI 芯片上的主要成本,但它也不是完全微不足道的,而 1024 这个倍数不可能被忽略。
向量计算
Vector compute
我们刚才看到,向量宽度每翻倍一次,脉动阵列外部的向量工作量就会减少 2 倍。从 4 到 128 需要翻倍 5 次,所以这会变成:
2^5 = 2 * 2 * 2 * 2 * 2 = 32x
这非常显著。你可能会说,脉动阵列内部发生的事情本身也是一种向量工作,所以我们并没有消除这么多向量工作,只是把它从脉动阵列外部移到了脉动阵列内部。从技术上说,这是真的。但脉动阵列比向量处理器高效得多,包括在取输入和存结果这些工作上也是如此。因此,真正实现的是:把这部分工作从一个低效得多的位置,移动到了一个高效得多的位置。所以净效果并没有完整的 32 倍那么大,但仍然非常显著。
如果你请一位优秀的硬件工程师更完整地解释这件事,他可能会给你一大段解释,涉及寄存器文件(register files)、皮焦耳(picojoules)、芯片内部数据传输效率,可能还会顺带讨论各种替代设计。但总体结论是:大得多的脉动阵列效率也高得多。
所以,你可以开始理解,一个 Google 的小团队怎么能够跟 Nvidia 的强大实力竞争。当然还有其他原因,但这是一个重要原因。现在 Nvidia GPU 的脉动阵列也变大了,不过它们仍然没有 Google TPU 上的那么大。
这里显然会出现一个问题:既然如此,为什么不是所有人都使用更大的脉动阵列,比如 1024 × 1024?那不是应该更高效吗?这就是下一节的主题。

持续创作高质量文章,欢迎关注公众号。
-
拓驰猎头2010年成立,总部在深圳,全职猎头80人+,全球Office10个+,专注在芯片半导体、AI大模型、智能硬件、新能源、汽车5大赛道30个+细分行业。
-
Jason,拓驰猎头CEO,20年猎头经验。
长期招募合伙人、猎头顾问、SOHO顾问等,欢迎+V:hunterjason
夜雨聆风