Booth算法与查找表融合:数字存内计算能效突破52.4 TOPS/W

发布时间:2026/5/27 19:45:42

Booth算法与查找表融合:数字存内计算能效突破52.4 TOPS/W 1. 项目概述当Booth算法遇上查找表存内计算能效如何再翻倍在AI芯片尤其是面向边缘设备的硬件加速器领域我们每天都在和两个“天敌”作斗争功耗和延迟。传统的冯·诺依曼架构下数据在内存和计算单元之间来回搬运所消耗的能量常常远超计算本身这就是所谓的“内存墙”。存内计算技术特别是数字存内计算被视为打破这堵墙的希望。它把计算直接搬到内存阵列里做数据原地不动计算就近完成理论上能效可以大幅提升。但理想很丰满现实却很骨感。传统数字存内计算架构里为了完成乘累加操作需要庞大的加法树网络这东西又占面积又耗电成了新的瓶颈。于是基于查找表的方案出现了。它的思路很巧妙既然每次计算都要用同样的权重那我为什么不提前把一些可能的中间结果算好存起来呢比如把相邻权重的和预计算并存进一个查找表里需要时直接查表读出省去了现场做加法的开销。这个想法听起来很美但早期的LUT方案有两个硬伤一是为了处理多比特输入不得不采用位串行方式一个N比特的输入要查N次表、做N次累加延迟和能效都上不去二是查找表本身的读出操作非常耗电尤其是当存储单元里存的是“1”时每次读出都伴随着一次完整的电容放电和充电过程功耗大头就在这里。今天要拆解的这篇工作——BooLUT-CIM就是针对这两个痛点下的一剂猛药。它把在乘法器里用了半个多世纪的Booth编码算法和查找表架构来了个“跨界融合”再配上一种针对负数的“幅度位反转”存储黑科技硬是在28nm工艺上把能效推到了52.4 TOPS/W。这不仅仅是数字上的提升更代表了一种设计思路的转变从单纯优化电路到在算法和架构的交叉点上寻找突破口。无论你是做AI芯片架构的工程师还是对底层硬件加速感兴趣的研究者理解这套组合拳背后的设计哲学和实现细节都大有裨益。2. 核心设计思路拆解为什么是Booth算法与LUT的联姻要理解BooLUT-CIM的精妙之处我们不能只看它做了什么更要理解它为什么要这么做。这需要我们从两个看似不相关的领域——数字电路中的乘法算法和存储器设计——找到共通点。2.1 从位串行到Booth编码计算粒度的跃升传统的LUT-CIM为了简化设计通常采用位串行输入。假设我们要计算一个8位输入IN和权重W的乘法其数学本质是IN × W Σ (IN[i] × W × 2^i)其中i从0到7。 这意味着电路需要处理8个比特每个比特IN[i]0或1控制着是否将W左移i位后的结果加入累加器。这个过程需要8个时钟周期吞吐率低且每次查找和加法操作都带来固定开销。Booth算法特别是Radix-4 Booth算法改变了游戏规则。它不再以单个比特为单位处理输入而是以重叠的3个比特为一组进行编码。具体规则是观察连续的三个比特IN[2i1],IN[2i],IN[2i-1]边界有特殊处理根据它们的组合产生一个编码值这个值可能是0、±W或±2W。这样一个8位数的乘法就被编码成了大约4个⌊8/2⌋部分积。公式变为IN × W Σ ( (-2*IN[2i1] IN[2i] IN[2i-1]) × W × 4^i )。带来的核心优势计算周期减半处理8比特输入从需要8个周期减少到只需要4个周期。吞吐率直接翻倍。部分积数量减少Radix-4 Booth将部分积数量减少到原来的一半这直接意味着后续需要累加的操作数变少无论是用加法树还是查找表复杂度都降低了。那么这个优势如何嫁接到LUT-CIM上呢这就是设计的关键洞察LUT存储的内容可以从“相邻权重的和”转变为“相邻Booth编码部分积的和”。2.2 LUT压缩的数学戏法从25行到9行的魔术如果直接将两个经过Radix-4 Booth编码的部分积每个部分积有5种可能值-2W, -W, 0, W, 2W相加那么可能的和就有5 × 5 25种。如果为每一对权重都存储一个25行的查找表面积开销将非常巨大完全抵消了Booth算法带来的好处。BooLUT-CIM的设计者在这里展现了对数字关系的深刻理解。他们发现这25种组合并非杂乱无章而是存在清晰的数学规律2倍关系2W和W之间存在简单的左移一位的关系。在硬件上一个左移操作通过一个多路选择器选择是否移位的成本远低于一个加法器。取反关系-W和W-2W和2W之间是简单的取反关系。在二进制补码中取反操作按位取反再加1虽然涉及加法但针对一个固定操作数可以优化。基于这两个“计算友好”的关系他们设计了一个巧妙的压缩方案不再存储25种完整的和而是存储一个9行的核心查找表。这9行对应了去除了2倍和取反冗余后的“基值”集合。为每个LUT配备一个1比特左移器和一个取反电路。在实际查表时根据Booth编码产生的控制信号先从一个较小的表中查出“基值”然后根据需要动态地对其进行左移实现×2或取反实现变号。这样用极小的电路开销一个多路选择器和一些控制逻辑就实现了25种组合的覆盖。这个设计体现了数字电路设计的精髓用控制逻辑的复杂度换取存储阵列的面积和功耗的显著降低。在先进工艺下晶体管的开关能耗通常低于大规模存储阵列的访问能耗因此这个交换是非常划算的。2.3 负值幅度位反转存储在比特层面“偷电”第二个创新点“负值幅度位反转存储”则是对存储器件物理特性的精准利用。论文中使用的存储单元是3T增益单元这是一种类似DRAM的单元利用电容上的电荷存储数据“1”或“0”。其读操作的关键在于读出“1”时需要打开放电通路让读位线上的预充电电压通过存储节点放电这个放电过程消耗的能量很大并且读位线在下一个周期必须被重新充电至满摆幅。而读出“0”时放电通路不打开几乎没有动态功耗。因此一个最直接的优化思路是让存储阵列里尽可能多地存“0”少存“1”即提高数据的“比特级稀疏性”。对于常规的二进制补码表示的权重正数尤其是接近0的正数通常有较多的高位0稀疏性高。但负数则不然因为负数的补码表示其符号位之后的有效位往往包含更多的“1”。NMI方案的聪明之处在于它改变了负数的存储格式。它不再存储负数的完整补码而是将其幅度位绝对值部分按位取反后存储。例如一个负数-3假设4位补码为1101其幅度3的二进制是0011取反后得到1100然后连同样式存储。这样操作后原来补码表示中密集的“1”就变成了“0”比特级稀疏性大幅提升。注意这种存储格式是LUT内部的“私有的”对外部接口和最终计算结果透明。在读出时通过一个定制的读出端口电路可以瞬间将这种“NMI格式”的数据恢复成标准的二进制补码供后续计算使用。这个转换电路的功耗远低于每次读“1”带来的放电功耗。论文数据显示该方案将LUT阵列的读出能效平均提升了1.59倍效果极其显著。3. 架构与电路实现细节理解了核心思想我们深入到芯片内部看看这些想法是如何变成晶体管和连线的。3.1 整体宏单元架构BooLUT-CIM宏单元是一个精心设计的系统其框图清晰地反映了数据流和控制流。LUT阵列核心这是一个144行 x 160列的3T增益单元阵列总容量22.5Kb。它被划分为16个独立的存储体。每个存储体内包含16个LUT每个LUT与一个NMI读写端口和一个1比特左移器配对。这种分体结构支持并行访问是提高吞吐量的关键。Booth编码单元这是架构的“大脑”。每个周期它接收32通道的3比特输入特征为什么是3比特因为Radix-4 Booth编码每次处理2个新比特需要参考前一个比特所以需要3比特的滑动窗口。Booth单元根据编码规则实时产生两路关键信号LUT地址决定从9行LUT中读取哪一行“基值”。控制信号包括TWO控制是否左移×2和NEG控制是否取反。此外它还需要计算Booth编码中取反操作产生-W或-2W所引入的补偿值1或2并将所有通道的补偿值汇总为Comp_sum送给后续的补偿加法器。计算路径数据从LUT中读出NMI格式→ 经过NMI读端口转换为补码 → 根据TWO信号决定是否左移 → 进入该存储体共享的加法树进行累加 → 与来自Booth单元的Comp_sum在补偿加法器中合并校正 → 最后进入全局的移位相加单元根据Booth编码的指数部分4^i进行加权移位累加得到最终的乘累加结果。工作模式该宏单元支持三种模式通过模式切换最大化硬件利用率CIM模式正常执行存内计算。刷新模式对3T增益单元进行定期电荷刷新防止数据丢失。编码模式这是实现“原位预计算”的关键。在此模式下相邻的LUT可以利用其间的第一级加法器将初始写入的权重进行加/减计算出预求和并写回LUT。这个过程完全在阵列内部完成避免了通过外部总线搬运数据的开销速度和能效极高。3.2 关键电路模块设计3.2.1 3T增益单元与LUT阵列3T增益单元由一个读写端口晶体管和一个存储节点电容构成。其面积比SRAM的6T/8T单元小密度高但需要定期刷新。在BooLUT-CIM中它被组织成9行x10列的块作为一个LUT。行由读字线和写字线控制列通过局部读位线和局部写位线连接。这种局部连线的设计减少了长走线的电容有助于降低功耗。3.2.2 NMI读写端口这是实现负值幅度位反转存储的物理基础。其核心是一个多路选择器网络。写入时当需要存储一个负数的补码时电路会截取其幅度位按位取反然后与符号位一起存入阵列。读出时端口根据存储的符号位最高位做出选择。如果符号位表示是正数原样存储则直接输出幅度位如果符号位表示是负数幅度位已反转则将存储的幅度位再次取反恢复成原始的幅度值再与符号位组合成标准补码。同时这个端口还集成了取反功能根据NEG信号用于实现Booth编码要求的-W或-2W操作。3.2.3 可重构加法器/减法器在编码模式下相邻LUT间的第一级加法器需要被重构成减法器以计算W1 - W2这样的预求和。这是通过一个巧妙的技巧实现的将加法器最低位的进位输入Cin连接到一个Sub信号上。当Sub1时相当于对第二个操作数取反并加1即进行二进制补码的减法操作从而将加法器变成了减法器。这种利用现有硬件通过微小改动实现新功能的设计是高性能数字电路中的常用技巧。4. 性能评估与对比分析任何架构创新最终都要用硅片上的数据说话。BooLUT-CIM在28nm CMOS工艺下实现了原型并进行了全面的仿真验证。4.1 核心性能指标能效在0.9V电压、400MHz频率下进行INT8乘累加操作在输入和权重稀疏性均为50%的典型场景下达到了52.4 TOPS/W的峰值能效。这个“TOPS/W”是衡量AI加速器能效的核心指标意为每瓦特每秒能完成多少万亿次操作。面积效率宏单元面积为0.229mm² x 0.110mm面积效率为4.05 TOPS/mm²。这意味着在每平方毫米的芯片面积上能实现每秒4.05万亿次操作。吞吐率该设计每4个周期产生16个通道的MAC结果在400MHz下吞吐率为102 GOPS。4.2 技术贡献分解为了厘清每个创新点的贡献论文进行了细致的剥离分析BooLUT方案本身与一个采用位串行输入的基线LUT-CIM设计相比BooLUT将能效提升了1.65倍面积效率提升了1.42倍。这主要归功于Booth算法将计算周期减半以及LUT压缩大幅减少了存储开销。NMI存储方案该方案将LUT阵列自身的读出能效提升了1.59倍并将整个CIM宏的总体能效进一步提升了1.17倍。这直观地反映了优化存储内容、利用数据统计特性对降低功耗的直接效果。总体提升综合两项技术最终实现了相比之前最好工作1.3倍的能效提升。4.3 与同类工作的横向对比将BooLUT-CIM与近年来发表在ISSCC、TCAS-II等顶会和顶刊上的其他数字存内计算设计进行对比其优势是明显的。许多前期工作虽然也达到了很高的能效但往往在精度如仅支持低位宽、灵活性如不支持浮点或面积效率上有所妥协。BooLUT-CIM在保持全精度INT8支持的同时在能效和面积效率上取得了均衡且领先的表现。这得益于其从算法Booth、架构LUT压缩到电路NMI存储的全栈协同优化思路。4.4 功耗分布解读论文提供的功耗分布图极具信息量。在一个优化的CIM宏中我们希望计算和数据移动的功耗占比尽可能高而存储阵列访问、时钟网络、外围电路等“开销”部分的功耗占比尽可能低。BooLUT-CIM的功耗分布显示得益于NMI方案LUT阵列的读出功耗占比被显著压制。这意味着更多的能量被用于有效的计算而不是消耗在存储器的读写操作上这是能效提升的本质体现。5. 设计启示、挑战与未来展望BooLUT-CIM不仅仅是一个高效的芯片设计更提供了一套可扩展的设计方法论。5.1 给硬件设计者的核心启示算法-架构协同设计是必由之路不要再把算法和硬件视为两个独立的阶段。像Booth这样的经典算法其编码特性可以直接指导存储架构的设计LUT压缩从而带来数量级的改进。未来针对特定神经网络算子如Depthwise卷积、注意力机制设计专用的编码和存储格式将是重要的研究方向。拥抱“非标准”数据格式NMI方案的成功表明在芯片内部尤其是在计算数据通路中为了优化能效和面积完全可以采用与软件层面不同的“私有”数据格式。关键在于设计高效、低开销的格式转换接口。利用数据的统计特性AI工作负载中的数据如权重、激值并非随机分布它们具有显著的统计特征如稀疏性、值分布集中。优秀的硬件设计应当主动感知并利用这些特征。NMI方案正是利用了权重分布集中于零值附近、负数补码表示不友好的特性。模式化设计提升硬件利用率支持CIM、刷新、编码三种工作模式让同一套硬件在不同时间执行不同任务最大化利用了硅片面积这是面向边缘设备面积受限场景的实用设计哲学。5.2 实际部署中可能遇到的挑战控制逻辑复杂度Booth编码、LUT地址生成、NMI转换、模式切换等控制逻辑比简单的位串行方案复杂得多。这增加了验证的难度也可能在关键路径上引入额外的延迟。在实际设计中需要精心流水线化这些控制逻辑确保它们不会成为性能瓶颈。工艺角与变化性3T增益单元的保留时间对工艺、电压、温度变化非常敏感。论文中设置了250ns的刷新间隔并留有1.5倍的余量。在更先进的工艺节点或对可靠性要求极高的场景如汽车电子需要更复杂的刷新管理电路或考虑采用更稳健的存储单元如STT-MRAM。编程与数据映射如何将神经网络的权重高效地映射到这种需要预计算求和的LUT结构中并管理好编码模式下的原位计算需要编译器或驱动层的紧密配合。这增加了软件栈的复杂性。扩展至高精度计算当前设计针对INT8优化。扩展到FP16、BF16甚至INT4混合精度时Booth编码的位数、LUT的大小、补偿逻辑都会发生变化需要重新进行面积-功耗-精度权衡。5.3 未来可能的演进方向与稀疏化协同该架构本身受益于数据的稀疏性。未来可以与网络剪枝、结构化稀疏训练等算法更深度结合在硬件层面识别并跳过对零值的无效操作实现动态能效优化。支持更灵活的数据流当前架构似乎是权重固定的。可以探索支持权重动态更新的版本使其能适应在线学习或权重更新的场景虽然这可能会牺牲部分能效。异构集成将BooLUT-CIM宏作为核心计算单元与片上网络、高带宽存储器、通用处理器核心等集成在一个芯片上构建完整的端侧AI SoC并优化数据在它们之间的调度。探索新兴器件考虑将3T增益单元替换为其他非易失性存储器如ReRAM或FeFET它们具有零静态功耗和存算一体的潜力可能与Booth-LUT架构产生新的化学反应。回过头看BooLUT-CIM的成功在于它没有孤立地看待存内计算中的任何一个问题。它将一个古老的乘法算法、一个基于存储预计算的架构以及对存储器件物理特性的深刻理解编织成了一个连贯的整体解决方案。它告诉我们在追求极致能效的道路上最有效的创新往往发生在不同学科知识的交叉点上。对于身处其中的工程师而言保持知识的广度并深挖每个技术细节背后的“为什么”或许就是设计出下一个突破性芯片的关键。

相关新闻