1. 从“闪电”到“通用”:ISSCC 2024 34.3论文的核心突破
最近在ISSCC 2024上读到一篇编号为34.3的论文,标题里“闪电”这个词一下就抓住了我的眼球。这可不是什么营销噱头,而是实实在在地描述了一种数模混合存内计算(CIM)架构的运算速度。更关键的是,它声称能同时适应Transformer和CNN这两种截然不同的神经网络架构。这让我这个在AI硬件领域摸爬滚打了十来年的老兵,也忍不住想深入扒一扒它的门道。毕竟,现在市面上大多数存内计算芯片,要么是为CNN的规整卷积优化,要么是为Transformer的密集矩阵乘加(MAC)设计,能“通吃”的少之又少。这篇论文提出的方案,看起来是想解决这个“专用”与“通用”之间的矛盾,其背后的设计思路和工程取舍,非常值得玩味。
简单来说,这篇论文的核心是提出了一种新型的数模混合存内计算宏单元(CIM Macro)。它通过一种巧妙的模拟域计算和数字域后处理的混合信号处理流程,实现了极高的能效和吞吐率,并且其计算模式具备足够的灵活性,能够高效处理CNN所需的乘积累加(MAC)操作和Transformer中占主导地位的向量-矩阵乘法(VMM)。论文中“闪电”的比喻,既指其超低的单次运算延迟,也暗示了其数据处理如闪电般迅捷的流水线设计。接下来,我就结合自己多年做AI加速器的经验,拆解一下这个“闪电”架构到底是怎么工作的,它解决了哪些痛点,以及在实际落地中我们可能需要关注哪些细节。
2. 架构总览:数模混合如何为“通用性”铺路
要理解这篇论文的贡献,我们得先看看当前存内计算芯片面临的普遍困境。纯数字存内计算虽然精度高、抗干扰能力强,但每个计算单元(Cell)面积大,做大规模并行MAC时能效提升有限。而纯模拟存内计算利用欧姆定律和基尔霍夫定律在模拟域直接完成乘加,能效极高,但通常受限于工艺偏差、噪声以及计算功能的单一性——很多模拟CIM阵列是为特定位宽(比如4-bit)的CNN卷积固定设计的,一旦遇到Transformer中更复杂的计算图或不同的数据流,就显得力不从心。
ISSCC 2024 34.3提出的数模混合架构,其核心思想是**“模拟域执行核心计算,数字域完成灵活后处理与调度”**。这听起来像是句正确的废话,但里面的门道很深。它的整体架构可以粗略分为三层:最底层是经过特殊设计的模拟存算单元阵列,这是能耗的“主战场”;中间层是高速、并行的模数转换器(ADC)和部分数字逻辑,这是精度和速度的“把关人”;最上层是灵活的数字处理单元和片上缓存,这是适应不同算法的“大脑”。
具体到这篇论文,它的模拟阵列很可能采用了一种支持多位输入(activation)和多位权重(weight)的电路设计。与传统模拟CIM只将权重存储在非易失性存储器(如RRAM, FeFET)中不同,它的创新点可能在于对输入数据的模拟域处理方式。我猜测它采用了一种时间域或电荷域编码技术,使得输入向量能够被高效地转换为模拟信号(如电流或电压),并与存储的权重在阵列中并行进行模拟乘法。成千上万个这样的乘法结果以电流形式在列线(Bitline)上求和,这就是模拟域的乘积累加。
这里的一个关键设计取舍是模拟计算的位宽和线性度。为了兼顾CNN和Transformer,论文中的模拟核心可能没有追求极高的计算精度(例如8-bit以上),而是通过优化电路设计,在6-bit甚至4-bit的模拟计算范围内达到极好的线性度,然后依靠后续的数字模块进行校准和更高精度的累加。这是一种非常务实的工程思维:用模拟电路做它擅长的事(低功耗、高并行乘法),把精度提升和复杂控制交给数字电路。
接下来,每一列模拟求和的结果通过一个高速度、中等精度的ADC转换为数字信号。这里“闪电”速度的第一个体现点就在ADC上。传统高精度ADC速度慢、功耗大,是模拟CIM的瓶颈。这篇论文大概率采用了并行度极高的SAR-ADC(逐次逼近寄存器型)或更先进的架构,以数量换时间和能效,即使用大量中低精度ADC并行工作,快速将整列模拟结果数字化。这些初步的数字结果被送入数字处理单元。
数字处理单元是灵活性的关键。它需要完成几项工作:首先,对来自不同列、不同ADC的结果进行数字域的累加和重组,以支持不同尺寸的卷积核或Attention矩阵;其次,它可能集成了一些简单的非线性函数(如ReLU的近似计算)或缩放(Scaling)操作;最后,它负责管理数据的流向,根据当前执行的是CNN层还是Transformer层,来配置计算的数据流图。正是这一数字层的可编程性,使得同一个硬件底层的模拟阵列能够为两种算法服务。
3. 模拟计算核心:实现“闪电”速度的电路级奥秘
“闪电”之名,首要来源于其模拟计算核心的超低延迟。论文中必定包含一组令人印象深刻的指标:单次VMM/MAC操作在纳秒(ns)级别完成,能效比达到数十甚至上百TOPS/W。这背后是精密的电路级创新。
3.1 存算单元的设计与权重映射
论文中的存算单元很可能不是简单的1T1R(一个晶体管一个电阻)结构。为了支持更灵活的多位计算和更好的线性度,它可能采用了类似电容耦合的电荷域计算单元,或者利用电流镜(Current Mirror)进行权重复制的电流域单元。其核心是将存储的权重值(通常是数字形式)通过一个高精度的数模转换器(DAC)或直接通过存储器件本身的电导值,转换为一个精确的参考电流I_weight。
当输入激活值(也是数字信号)到来时,它被一个快速的DAC转换为一个时间脉冲宽度或一个电压幅度。这个模拟信号控制着一条路径,让I_weight电流流入列线的时间或比例。这样,单个单元的贡献就是I_weight * f(activation),其中f是某种模拟调制函数。成千上万个单元同时操作,列线上的总电流就是所有单元贡献的求和,完美实现了I_total = Σ (Weight_i * Activation_i)。
这里的一个关键挑战是“非理想性”。晶体管的阈值电压偏差、导线电阻、电容寄生效应都会导致计算误差。论文必须提出一套校准方案。我推测它在数字处理单元中集成了一套后台校准引擎。例如,定期向阵列注入已知的测试向量,测量输出电流并与理想值对比,生成一组校准系数(Calibration Coefficients)。在正常计算时,这些系数用于修正ADC输出的数字结果。这种“模拟计算,数字校准”的思路,是保证计算精度、应对工艺角(Process Corner)变化的核心。
3.2 位线(Bitline)与字线(Wordline)的优化策略
模拟CIM的吞吐率常常受限于位线的充放电时间常数(RC Delay)。当阵列规模很大时,位线就像一条长长的、电容很大的导线,信号建立缓慢。为了实现“闪电”速度,论文必然在阵列划分和互联优化上下了功夫。
一种常见策略是分层位线结构。将一个大阵列划分为多个子阵列(Sub-array)。每个子阵列有自己的局部位线,长度短,RC延迟小。局部位线的结果通过一个灵敏放大器(Sense Amplifier)或一个中间缓冲器快速读出,然后再在更高层级进行数字汇总。这样,虽然增加了部分数字电路的开销,但换来了模拟路径速度的极大提升,是典型的以面积换速度、换能效的设计。
另一种策略是采用电压模(Voltage-Mode)而非电流模(Current-Mode)计算。虽然电流模求和更直接,但电压模在驱动长线缆时可能更有速度优势,尤其是结合了先进低电阻互联工艺的情况下。论文可能需要详细论证其选择某种信号模式的原因,这通常与芯片所采用的工艺节点(如22nm, 12nm FinFET)密切相关。
3.3 模数转换器(ADC)的并行化艺术
如前所述,ADC是瓶颈。论文中的ADC设计一定是亮点。我猜测它采用了时间交织(Time-Interleaved)SAR-ADC或异步SAR-ADC。
- 时间交织SAR-ADC:假设完成一次8-bit转换需要10个时钟周期。那么我可以部署8个SAR-ADC在同一列上,让它们轮流工作。第一个ADC转换第1、9、17...个数据;第二个ADC转换第2、10、18...个数据,以此类推。这样,从系统层面看,数据输出速率就提升了8倍。但这需要精密的时钟同步和校准来抵消各ADC之间的失配误差。
- 异步SAR-ADC:传统SAR-ADC每一步比较都等待一个固定时钟,异步SAR则在上一步比较完成后立即触发下一步,消除了时钟周期的空闲等待时间,从而在相同精度下达到更高的转换速度。
论文很可能将阵列的列划分为多个组,每个组共享一个高速ADC池。通过精细的调度,确保ADC的利用率最大化,避免空闲。同时,ADC的精度可能动态可调。在执行对噪声不那么敏感的操作(如某些Transformer层的前馈网络)时,可以降低ADC精度以换取更快的速度和更低的功耗。
4. 数字处理与数据流:适应Transformer与CNN的灵活性之源
模拟阵列和高速ADC提供了强大的计算引擎,但要让这个引擎既能跑CNN的固定赛道,又能跑Transformer的复杂越野,就需要一个聪明的“驾驶员”——即可编程的数字处理与数据流控制器。
4.1 针对CNN的优化数据流
对于卷积神经网络,其计算特性是权重共享和局部连接。一个卷积核要在输入特征图(Input Feature Map, IFMAP)上滑动,重复使用。在存内计算架构中,一种高效映射方式是将一个卷积核的权重,展开并映射到模拟阵列的一个或多个连续的行上。输入特征图的局部窗口数据,则作为激活值输入。
论文中的数字控制器需要高效地完成以下任务:
- 数据重排:从片上缓存(SRAM)或片外内存中读取的IFMAP数据,需要被切割、滑动,并按照阵列输入端口要求的格式进行重组。
- 结果累加:对于多通道卷积,模拟阵列一次计算可能只完成部分通道的求和。数字处理单元需要将多次计算的部分和(Partial Sum)进行累加,得到最终输出通道的一个点。
- 池化与激活:完成卷积和偏置加法后,数字单元需要执行ReLU等激活函数以及池化操作(如MaxPooling)。这些操作在数字域实现效率最高。
“闪电”架构的优势在于,其模拟核心的单次计算延迟极低,使得即使需要进行多次部分和累加,整体的计算吞吐率仍然很高。数字控制器的设计重点在于隐藏数据搬运的延迟,通过预取(Prefetching)和双缓冲(Double Buffering)等技术,确保模拟计算单元始终“有活干”。
4.2 针对Transformer的优化数据流
Transformer的计算核心是注意力机制,涉及大量的矩阵乘法,例如Q*K^T和Attention*V。这些矩阵通常很大,无法一次性全部放入存内计算阵列。
论文的架构需要解决两个关键问题:
- 大矩阵的分块计算:将大的权重矩阵(例如
W_Q,W_K,W_V)和输入向量分块,轮流加载到模拟阵列中。数字控制器的调度算法至关重要,它需要最小化权重加载(因为模拟阵列的权重编程通常较慢)和数据IO的开销。 - Softmax的近似处理:注意力得分后的Softmax函数是非线性的,无法在模拟域直接高效完成。论文可能采用了几种策略:
- 数字域精确计算:将模拟阵列计算得到的
Q*K^T结果(经过ADC)读回数字单元,用数字电路或小型处理器核计算Softmax。这需要较高的数据带宽。 - 模拟域近似:利用模拟电路的特性(如利用电流的指数关系)实现近似的Softmax,但这通常精度有限且设计复杂。论文更可能选择前者,并依靠其高速ADC和数字接口来保障带宽。
- 数字域精确计算:将模拟阵列计算得到的
此外,Transformer的前馈网络(FFN)层通常是两个大的线性变换夹着一个激活函数。这非常适合用此存内计算架构来处理:将FFN的权重矩阵映射到阵列中,输入向量流过即可完成计算。数字单元负责中间的GeLU或ReLU激活。
4.3 可配置的数据流控制器
为了实现通用性,论文中必定描述了一个可配置的数据流控制器(Dataflow Controller)或一个精简的指令集。编译器或开发者可以针对CNN或Transformer模型,描述其计算图和数据依赖关系。控制器将这些高级描述编译成一系列微指令,控制着:何时加载权重到哪个模拟子阵列、何时从内存读取输入数据、如何调度ADC转换、数字单元执行何种后处理操作(累加、激活、缩放)、结果写回到何处。
这个控制器的复杂度,直接决定了架构的易用性和性能上限。一个好的控制器能像高级语言的编译器一样,将计算任务高效地映射到硬件资源上,隐藏访问延迟,实现计算与通信的重叠。
5. 实测性能与能效分析:数据背后的设计权衡
任何芯片设计,最终都要用实测数据说话。ISSCC论文尤其注重可测量的性能指标。对于这篇34.3的论文,我们预期会看到在主流CNN模型(如ResNet-50, MobileNet)和Transformer模型(如BERT-base, Vision Transformer)上的测试结果。
5.1 性能指标解读
关键指标包括:
- 峰值算力(Peak Throughput):单位是TOPS(Tera Operations Per Second)。这个数字通常是在最理想情况(数据就绪、无冲突、精度最低模式)下测得。我们需要关注的是其有效算力(Sustained Throughput),即在运行完整模型时,平均能达到的算力。这反映了数据流调度和内存系统的效率。
- 能效(Energy Efficiency):单位是TOPS/W。这是存内计算最大的卖点。论文会给出核心计算(包括模拟阵列、ADC、数字逻辑)的能效,以及包含片外内存访问在内的系统级能效。后者往往比前者低一个数量级,因为它暴露了“内存墙”问题——从DRAM中搬运模型权重和激活值的功耗巨大。
- 精度(Accuracy):在目标数据集(如ImageNet, GLUE)上的分类或理解精度,与浮点(FP32)基线模型的对比。精度损失需要控制在1%以内才算实用。
- 延迟(Latency):处理单张图片或单个句子的端到端时间。这对于实时应用至关重要。
我特别会去查看论文中关于不同位宽下的精度-能效权衡曲线。这能告诉我们,为了适配Transformer和CNN,他们选择的模拟计算核心的“甜点位宽”是多少。例如,可能模拟核心在4-bit时能效最高,但为了满足BERT某些层的精度要求,需要在数字后处理中融合更高精度的累加,最终系统以6-bit的等效精度运行。
5.2 与纯数字ASIC和GPU的对比
论文一定会将自家芯片与传统的数字AI加速器(如NVIDIA GPU的Tensor Core,或谷歌的TPU)以及其他的存内计算方案进行对比。对比的维度包括能效、算力密度(TOPS/mm²)和灵活性。
- vs. 数字ASIC/GPU:在能效和算力密度上,“闪电”架构应该有数量级的优势,尤其是在计算密集型算子(MatMul)上。但在灵活性(支持新模型)和开发易用性上,GPU的通用编程模型仍然无敌。这篇论文的贡献在于,在保持存内计算超高能效的同时,通过数字可编程层显著提升了灵活性,向通用性迈进了一大步。
- vs. 其他模拟/数模CIM:对比的重点会放在“通用性”上。论文需要证明,在运行CNN时,其性能不输于专用的CNN CIM芯片;在运行Transformer时,其性能又显著优于那些为CNN优化的CIM芯片。同时,其“闪电”延迟的特性,可能使其在需要极低延迟的边端推理场景(如自动驾驶的感知模块)中独具优势。
5.3 面积开销与成本考量
数模混合设计必然会引入额外的数字逻辑和ADC,这些都会增加芯片面积。论文需要展示其面积分解(Area Breakdown):模拟阵列占多少,ADC占多少,数字逻辑和缓存占多少。一个健康的设计应该是模拟计算部分占据主导面积,因为那是能效的来源。如果数字控制部分面积过大,那就失去了存内计算的意义,更像一个带模拟加速器的数字处理器。
成本方面,这种设计通常依赖于先进的CMOS工艺(如12nm, 7nm)来实现高密度、低功耗的数字逻辑和模拟开关。如果使用了非易失性存储器(如RRAM)来存储权重,还需要考虑后端集成(BEOL Integration)的额外工艺步骤和成本。论文可能会讨论其设计与标准CMOS工艺的兼容性,这是决定其能否大规模商用的关键。
6. 潜在挑战与工程化落地思考
尽管论文描绘了美好的前景,但从实验室原型到大规模量产应用,还有很长的路要走。结合我的经验,这个“闪电”架构在实际工程化中可能会遇到以下几个挑战:
6.1 工艺偏差与长期漂移的校准
模拟电路对工艺偏差极其敏感。同一批芯片中,不同核心、不同列之间的ADC增益、存算单元的电导都可能存在差异。论文中提到的后台校准算法,其复杂度和有效性需要经过大规模芯片测试的验证。校准过程本身会消耗功耗和时间,需要在系统空闲时进行。此外,非易失性存储器件(如果使用)可能存在电阻值随时间和编程次数漂移的问题,这需要周期性的、更复杂的重校准(Re-calibration),甚至在线训练(On-device Training)来补偿,这将对系统设计提出更高要求。
6.2 软件栈与编译器的缺失
“硬件易得,软件难求”。再强大的硬件,如果没有好用的软件工具链,也无法被广大算法工程师使用。这篇论文的架构需要一个全新的编译器。这个编译器需要:
- 将PyTorch/TensorFlow模型解析成计算图。
- 进行图优化、算子融合。
- 将计算图映射到硬件上,包括权重的量化与映射、数据流的调度、指令的生成。
- 管理校准和补偿的流程。
开发这样一套成熟的软件栈,其工作量不亚于设计芯片本身。论文中可能只提到了一个手写的、针对特定模型的驱动,离通用易用的SDK还有很大距离。
6.3 测试与验证的复杂性
数模混合芯片的测试成本远高于纯数字芯片。模拟部分的测试需要昂贵的ATE(自动测试设备)和复杂的测试向量。如何定义测试覆盖率?如何快速定位是模拟阵列、ADC还是数字逻辑的故障?这需要设计大量的可测试性设计(DFT)电路,如扫描链(Scan Chain)、内建自测试(BIST)等,这些又会占用额外的芯片面积。
6.4 应用场景的精准定位
“既能适应Transformer又能适应CNN”听起来很全能,但在商业上,全能往往意味着在某个特定领域不如专用芯片极致。因此,找到最适合的落地场景至关重要。我认为以下几个方向很有潜力:
- 边缘AI设备:如高端智能手机、AR/VR眼镜、机器人。这些设备需要同时处理计算机视觉(CNN)和自然语言处理(Transformer)任务,对能效和延迟要求苛刻。
- 智能传感器:集成在摄像头或麦克风内,进行实时的、低功耗的感知与理解。
- 云端推理加速卡:作为GPU的补充,专门用于处理对能效敏感的大规模Transformer模型推理负载。
最终,这篇ISSCC 2024 34.3的论文代表了一个清晰的技术趋势:存内计算正在从追求极致的能效,向兼顾灵活性和通用性演进。它通过精妙的数模混合架构和电路设计,在“专用”与“通用”之间找到了一个颇具吸引力的平衡点。“闪电”般的速度是其性能的宣言,而对Transformer和CNN的双重适配则是其野心的体现。当然,从论文到产品,中间充满了工程挑战。但毫无疑问,它为下一代低功耗、高性能AI芯片的设计,提供了一个极具参考价值的技术范本。对于我们这些从业者来说,关注这类研究,不仅是为了了解前沿,更是为了思考如何将这些创新点,融入到我们解决实际产品问题的工程实践中去。