我第一次读到H.T. Kung教授1982年的论文时,有种发现新大陆的兴奋感。这位卡内基梅隆大学的教授可能没想到,他提出的"脉动阵列"概念会在三十多年后成为AI芯片的标配设计。当时他面对的挑战和我们现在何其相似——如何在有限的I/O带宽下榨取更多算力。
脉动阵列的核心思想其实很生活化:想象一条汽车装配流水线。每个工位(PE处理单元)只做固定工序,零件(数据)在传送带上有节奏地流动,最终成品(计算结果)从末端产出。这种设计完美体现了Kung提出的三大原则:
Google的TPUv1团队在2013年面临的选择很有代表性:当时他们测试发现,用GPU做神经网络推理时,72%的时间花在内存访问上。这直接促使他们选择了脉动阵列架构,最终在2015年实现的TPUv1比同期GPU能效高30倍。这个案例生动展示了经典理论如何解决现代问题。
在芯片设计领域,简单往往意味着可靠和高效。我参与过的一个AI芯片项目中,最初尝试用复杂异构设计,结果布线拥塞导致时序难以收敛。后来改用脉动阵列的规整网格,面积反而缩小了15%。
这种设计有几个精妙之处:
TPUv1的256x256阵列就是个典型例子——整个阵列由65536个完全相同的MAC单元组成,这种极端规整性让它在28nm工艺下就能实现92TOPS的算力。
脉动阵列最精妙的部分在于数据流设计。我常把它比作编舞——每个数据元素都要在正确的时间到达正确的位置。以矩阵乘法为例,有三种经典数据流模式:
| 模式 | 权重处理 | 输入处理 | 输出处理 | 适用场景 |
|---|---|---|---|---|
| 权重静止(WS) | 固定 | 流动 | 流动 | CNN推理 |
| 输出静止(OS) | 流动 | 流动 | 固定 | 全连接层 |
| 输入静止(IS) | 流动 | 固定 | 流动 | 特殊矩阵运算 |
实测发现,在ResNet-50推理中,WS模式比OS模式能效高40%,这正是TPU选择WS架构的原因。但要注意,没有放之四海皆准的方案——我们在做语音识别芯片时,就采用了OS模式来适配长序列处理。
内存墙问题是所有芯片设计师的噩梦。脉动阵列的解决思路很巧妙:让每个数据进入芯片后尽可能多地被使用。举个例子,在做3x3卷积时,传统架构需要9次读取输入特征图,而脉动阵列通过数据流动复用,平均每个输入元素被使用3次。
这里有个实用公式可以评估设计优劣:
code复制计算强度 = 总操作数 / 数据搬运量
以TPU的矩阵乘为例,计算强度达到O(N),意味着矩阵越大,数据复用效率越高。这也是为什么现代AI芯片倾向使用大尺寸阵列(如256x256),虽然这会增加设计复杂度。
Google TPUv1的架构图初看可能令人困惑——为什么权重从上往下流,特征图从左往右流?这其实是为了最大化数据复用。在实际项目中,我们发现这种设计有几个工程优势:
有个容易踩的坑是数据格式转换。TPU要求输入数据按特定顺序排列,这个预处理可能消耗高达20%的端到端时间。我们在第二代芯片中加入了硬件转置单元,才解决了这个瓶颈。
将卷积转为矩阵乘是TPU的绝妙设计,但实现起来并不简单。以3x3卷积为例,需要:
这个过程会产生约2.25倍的数据膨胀,我们在芯片中专门设计了压缩模块来缓解带宽压力。有趣的是,后来发现这种设计对Transformer模型同样有效,算是意外之喜。
脉动阵列的性能对数据流时序极其敏感。这里分享几个实测有效的优化技巧:
在优化ResNet-18推理时,通过精细调整数据流波形,我们在同一芯片上实现了15%的加速。这印证了Kung教授的观点:脉动阵列的性能很大程度上取决于"舞蹈编排"的优劣。
脉动阵列在AI推理中的成功不是偶然的。从第一性原理看,它完美匹配了神经网络计算的几个本质特征:
在图像分类任务中,TPU的利用率能达到75%以上,而GPU通常只有30-40%。这个差距主要来自脉动阵列的确定性设计,避免了缓存、分支预测等通用架构的开销。
任何技术都有其边界。我们在实际项目中遇到的典型挑战包括:
新兴的混合架构正在突破这些限制。比如某款最新AI芯片就采用了"脉动阵列+可编程向量单元"的设计,既保持矩阵运算效率,又增加了灵活性。这种折中方案值得关注。
选择是否采用脉动架构时,建议考虑以下因素:
在28nm时代,我们做过对比测试:对于ViT模型,脉动架构比SIMD架构能效高3倍;但对于RNN模型,优势缩小到1.5倍。这个结果印证了架构选择需要具体问题具体分析。