
1. 项目概述从“存算分离”到“存算一体”的范式之争在过去的半个多世纪里计算机体系结构一直遵循着“冯·诺依曼架构”的金科玉律计算单元CPU/GPU和存储单元内存/硬盘是分离的。数据需要在两者之间来回搬运才能完成一次完整的计算。这个模式成就了信息时代的辉煌但也埋下了效率的瓶颈——著名的“内存墙”问题。随着人工智能、大数据分析的算力需求呈指数级增长数据搬运所消耗的功耗和产生的延迟已经远远超过了计算本身。这就好比一个顶尖的大厨计算单元被困在一个狭小的厨房里他每做一道菜都需要跑到遥远的仓库存储单元去取一次食材大部分时间和精力都花在了跑腿上真正烹饪的时间反而很少。为了打破这个瓶颈存内计算应运而生。它不是一个单一的技术而是一类技术的统称其核心思想是让“仓库”本身具备“烹饪”的能力直接在数据存储的地方完成计算从而彻底避免或大幅减少数据搬运。我最初接触这个概念是在研究边缘AI设备的低功耗方案时当时为了在资源受限的终端上跑神经网络模型对每一焦耳的能量、每一毫秒的延迟都锱铢必较存内计算展现出的潜力让人眼前一亮。不过深入下去你会发现存内计算领域内部也存在一条清晰的分水岭数字存内计算和模拟存内计算。这两条技术路径就像武侠小说里的“剑宗”与“气宗”理念迥异各有优劣共同描绘着下一代计算芯片的蓝图。本文就将深入拆解这两大技术路线的原理、实现、挑战与应用场景希望能为正在关注或投身于这个前沿领域的同行们提供一份清晰的“导航图”。2. 存内计算的核心原理与分类逻辑要理解数字和模拟存内计算的区别我们首先要回到计算最本质的数学模型。无论是复杂的深度学习推理还是简单的图像处理其核心都可以归结为大量的乘累加运算。例如一个神经网络的层计算就是输入向量与权重矩阵的乘法求和。在传统架构中权重存储在内存中输入数据从外部输入两者被分别读取到计算单元如ALU或MAC单元的寄存器中然后执行乘法再将结果累加。存内计算的精妙之处在于它利用了存储器件本身的物理特性来“原位”完成这个乘累加操作。其分类逻辑正是基于实现这一操作所依赖的物理量是离散的还是连续的。2.1 计算的基本单元从晶体管到记忆器件传统计算依赖于逻辑门与、或、非等由晶体管搭建而成处理的是高电平代表‘1’和低电平代表‘0’的数字信号。存内计算则依赖于具有记忆功能的器件这些器件不仅能存储状态‘0’或‘1’或者一个模拟值还能在其物理状态上直接执行运算。常见的用于存内计算的记忆器件包括静态随机存储器SRAM速度快、功耗低是数字存内计算的主流载体。动态随机存储器DRAM密度高也有相应的存内计算探索。非易失性存储器NVM如阻变存储器RRAM、相变存储器PCM、磁性存储器MRAM和闪存Flash。这类器件的电阻/电导值可以被连续地调节天然适合存储模拟权重是模拟存内计算的理想选择。2.2 分类依据信号域与计算范式数字存内计算的核心在于它虽然在内存阵列内部进行计算但处理的信息始终是离散的数字信号0和1。计算过程本质上是对布尔逻辑的加速例如在SRAM阵列中通过对字线、位线的特殊设计在读取数据的同时完成多位数据的与、或、非及加法操作。它更像是把一个小型计算器加法器、逻辑门直接嵌入到了每个内存单元或每列内存的感知放大器附近。模拟存内计算则跳出了数字域的束缚它利用欧姆定律和基尔霍夫定律等模拟电路的基本原理。在这里存储单元的物理量如电导G被用来代表一个权重值通常是模拟值输入的电压信号V施加在单元上产生的电流I根据欧姆定律 I G × V 自然就是乘法结果。同一字线上所有单元产生的电流在位线上根据基尔霍夫电流定律自动求和从而一次性完成整个向量-矩阵的乘累加。这个过程是并行的、模拟的、连续的。注意这里的“模拟”并非指精度低或不稳定而是指计算在连续的物理量电流、电压、电荷域中进行。最终模拟结果需要通过模数转换器ADC转换回数字信号供后续处理。因此ADC的性能精度、速度、功耗是模拟存内计算系统成败的关键之一。简单类比数字存内计算像是在图书馆内存的每个书架旁安排了一个擅长心算的图书管理员你告诉他书名地址他快速找到并口头告诉你页数数字结果。而模拟存内计算则像是把书本身设计成一种特殊的结构书的厚度代表信息当一道光输入信号穿过一排书时透光量的总和直接就是计算结果这个过程是物理现象的自然呈现。3. 数字存内计算在确定性的堡垒中寻求突破数字存内计算可以看作是传统计算架构的一种激进改良。它没有颠覆数字电路的底层逻辑而是通过精巧的电路设计将计算功能更深地融入内存架构。3.1 核心实现机制与电路设计目前最成熟、研究最广泛的数字存内计算方案是基于SRAM的。一个标准的6T SRAM单元可以稳定地存储1比特数据。数字存内计算的关键在于如何利用SRAM阵列的并行读取能力一次性对多行存储的数据进行操作。一种典型的技术是位线计算。在传统SRAM读取中激活一条字线该行所有单元存储的数据会通过位线对上微小的电压差来体现。数字存内计算电路通过修改感知放大器的前级电路或者增加额外的逻辑门使得当同时激活多条字线时位线上的信号能直接反映出这些行数据之间的逻辑运算如与、或、异或或算术运算如多位数加法的结果。例如通过设计一种特殊的SRAM单元和时序控制可以实现两个二进制数的乘法部分积的生成和压缩整个过程在阵列内部完成只有最终的求和结果需要输出极大地减少了数据移动。3.2 优势与适用场景数字存内计算的最大优势在于其确定性和高精度。它继承数字电路的全部优点抗噪声能力强信号非‘0’即‘1’容错性高。设计流程成熟可以充分利用现有的EDA工具链和标准单元库进行设计和验证。与现有数字系统无缝集成计算结果直接是二进制数无需复杂的模数转换接口。可编程性强通过配置同一套硬件可以执行不同的操作灵活性较好。因此数字存内计算非常适合对精度要求极高、算法相对规整的应用场景高性能计算中的特定内核如加密解密、数据压缩/解压、某些科学计算中的稠密矩阵运算。数字信号处理前端在一些通信基带处理中可以加速滤波器等模块。二进制神经网络加速BNN的权重和激活值都是1/-1用1/0表示其计算本质上是XNOR和Popcount操作非常适合用数字存内计算实现能获得极高的能效比。3.3 挑战与局限性然而数字存内计算也有其天花板面积开销大为了实现计算功能需要在SRAM单元周围增加额外的晶体管和控制逻辑这会显著降低存储密度。相当于为了给图书管理员腾出办公空间不得不减少书架的容量。计算并行度受限虽然比传统架构好但其并行度仍然受限于数字电路的位宽和架构。一次能同时处理的行数有限。能效提升有瓶颈它减少了数据搬运能耗但数字开关操作本身的动态功耗依然存在。对于需要高精度如INT8、FP16乘加运算的场合其能效优势相对于模拟方案可能不够显著。4. 模拟存内计算拥抱物理世界的连续与并行模拟存内计算是一条更为“激进”的路径它试图直接利用物理定律进行计算将存储器件本身的电学特性作为计算的基石。4.1 核心原理欧姆定律与基尔霍夫定律的共舞其核心电路通常是一个交叉开关阵列。阵列的每个交叉点都是一个非易失性存储单元如RRAM、PCM。单元的电导值G被编程为神经网络的一个权重值可以是正也可以是负负权重需要通过差分对或额外的电路实现。计算时输入电压信号V施加在一条字线行线上。根据欧姆定律流过每个单元的电流 I_ij G_ij × V_i。然后所有连接到同一位线列线上的单元产生的电流会自动求和这是由基尔霍夫电流定律决定的I_j Σ I_ij Σ (G_ij × V_i)。看一个向量输入V_i与矩阵权重G_ij的乘累加操作在一次模拟操作中就完成了且并行度等于阵列的列数。一个拥有1024列的阵列就能一次性完成1024个乘累加操作。4.2 关键器件与非易失存储器的角色模拟存内计算的性能高度依赖于核心存储器件RRAM通过电压脉冲改变介质层的电阻状态阻值可以在多个等级间连续调节非常适合存储多比特权重。其结构简单与CMOS工艺兼容性好是目前最热门的选择之一。PCM通过电流加热使相变材料在晶态低阻和非晶态高阻之间转换也能实现多级存储。Flash成熟的浮栅晶体管技术通过注入电荷量来调节阈值电压也可用于模拟权重存储但写入速度慢、功耗高是主要挑战。这些器件的电导线性度、对称性、动态范围以及器件间的均一性直接决定了计算的实际精度。例如如果同一个“权重值”在不同单元上编程出的电导差异很大那么计算结果就会产生系统性误差。4.3 巨大优势与诱人前景模拟存内计算的魅力在于其理论上的超高能效和算力密度原位并行计算一次操作完成整个向量-矩阵乘法并行度极高延迟极低。模拟计算的自然高效乘法通过欧姆定律自然实现累加通过电流求和自动完成避免了数字电路中大量晶体管开关的能耗。内存即计算存储单元直接参与计算实现了真正的“存算一体”面积利用率高。这使得它几乎是为深度学习推理尤其是边缘侧和终端侧的推理任务量身定制的卷积神经网络/视觉Transformer其核心就是大量的乘累加运算。推荐系统大规模的嵌入表查找与矩阵运算。传感器内计算在图像传感器、音频传感器阵列中直接进行预处理只将有意义的信息传输给后端大幅减少数据量。4.4 严峻挑战与工程难题然而通向理想的道路布满荆棘器件非理想特性这是最大的挑战。器件的非线性、不对称性、漂移、随机涨落都会引入计算误差。需要复杂的电路和算法进行补偿和校准。模数转换瓶颈模拟计算结果电流或电压必须被高精度、高速、低功耗地转换为数字信号。高精度ADC本身就是一个功耗和面积大户容易成为系统瓶颈。编程精度与耐久性如何精确、快速地将数字权重值映射到模拟电导值器件在多次编程后性能是否会退化设计与测试复杂度模拟/混合信号电路的设计、仿真和测试流程远比数字电路复杂缺乏成熟的设计自动化工具。实操心得在评估一个模拟存内计算方案时不要只看其理论峰值算力TOPS和能效TOPS/W一定要追问其系统级精度在目标神经网络上的表现。一个在MNIST数据集上能达到99%精度的芯片在ResNet-50上可能精度暴跌。同时要关注其校准电路的 overhead面积和功耗占比以及ADC的具体规格。5. 数字vs模拟技术路线对比与选型指南为了更直观地对比这两条技术路线我将核心差异总结如下表特性维度数字存内计算模拟存内计算计算范式布尔逻辑离散数字信号处理物理定律欧姆/基尔霍夫定律连续模拟信号处理核心器件SRAM (主流) DRAMRRAM, PCM, Flash, MRAM等NVM计算精度高比特级精确确定性好相对较低受器件和电路噪声影响通常需要校准能效潜力较高主要节省数据搬运能耗理论上极高原位模拟计算能耗极低算力密度中等受数字逻辑面积限制理论上极高内存单元直接计算并行度极高工艺兼容性优秀标准CMOS工艺设计流程成熟挑战中需要后端NVM工艺集成混合信号设计复杂非易失性否SRAM/DRAM易失是NVM器件支持即时开关机适用计算逻辑运算整数运算二进制神经网络乘累加运算深度学习推理FP32, FP16, INT8等成熟度较高已有原型芯片和早期产品快速演进中研究热点已有演示芯片5.1 如何为你的项目选择技术路线选择数字还是模拟不是一个单纯的技术问题而是一个需要综合权衡应用场景、精度要求、能效目标、开发周期和成本的系统工程问题。选择数字存内计算如果你的需求是算法多样化且需要高精度你的应用不止于矩阵乘法还包括大量的逻辑判断、条件分支或需要高精度整数/定点数运算。追求设计的确定性和可靠性项目不能容忍结果的不确定性需要成熟的设计和验证流程来保证流片成功。快速原型验证希望利用现有成熟的数字IP和EDA工具链缩短开发时间。与现有CPU/SoC紧密耦合作为现有数字系统的一个加速模块需要干净的数字接口。选择模拟存内计算如果你的需求是极致能效比是首要目标应用场景对功耗极其敏感如可穿戴设备、物联网传感器、手机端的常驻AI功能。计算模式高度固定核心负载是大规模的、固定的矩阵乘法如预训练好的神经网络权重不变。可以容忍一定的计算误差应用本身具有容错性或者可以通过算法如训练时考虑噪声、电路校准技术来补偿硬件误差。追求超高算力密度在有限的芯片面积内需要集成巨大的算力。5.2 混合与协同计算的未来值得注意的是数字与模拟的界限并非泾渭分明。一种更务实的趋势是混合模式存内计算或异构计算。在芯片层面可以集成多个存内计算宏用模拟宏处理大规模的、对精度要求稍低的乘累加运算如CNN的卷积层用数字宏处理需要高精度或逻辑控制的运算如激活函数、池化层、元素级操作。在系统层面存内计算芯片可以作为加速卡与通用CPU协同工作由CPU处理控制流和复杂逻辑存内计算卡专攻数据流和计算密集型任务。这种“让专业的器件做专业的事”的思路很可能是在未来一段时间内最可行的落地路径。6. 实操考量从算法到芯片的协同设计无论是选择数字还是模拟路线要真正实现一个高效的存内计算系统绝不能只关注电路设计必须进行算法-硬件协同设计。6.1 为存内计算“特训”你的算法对于模拟存内计算尤其如此。直接将为GPU训练的FP32模型部署上去效果往往很差。需要针对硬件特性对算法进行优化量化与压缩将权重和激活值从高精度FP32量化到低精度INT8、INT4甚至更低甚至进行二值化/三值化以适应硬件有限的动态范围和精度。训练后量化与量化感知训练简单的训练后量化会导致精度损失。更优的方法是进行量化感知训练在训练的前向传播中模拟量化噪声让模型从学习阶段就“习惯”硬件的非理想特性从而获得更高的部署精度。稀疏性利用神经网络权重和激活往往具有稀疏性。可以设计支持稀疏计算的存内计算架构跳过对零值的运算进一步提升能效。映射策略如何将一个大型神经网络模型高效地映射到物理上有限的存内计算阵列上这涉及到权重切片、数据流调度等复杂的编译优化问题。6.2 芯片设计中的折衷艺术芯片设计是一连串的折衷。在存内计算芯片设计中以下几个折衷点至关重要阵列大小 vs. 外围电路开销阵列越大计算并行度越高但位线/字线变长带来的RC延迟和噪声也会增加且所需的ADC/DAC等外围电路也更复杂。存在一个最优的阵列规模。ADC精度 vs. 速度与功耗高精度ADC速度慢、功耗大低精度ADC速度快、功耗小但会限制系统整体精度。需要根据应用需求找到平衡点。器件精度 vs. 校准成本使用更高一致性、更线性的器件成本高。也可以通过设计复杂的在线校准电路来补偿低质量器件的误差但这又会增加面积和功耗开销。数字存内计算计算逻辑复杂度 vs. 存储密度嵌入的计算功能越复杂SRAM单元的面积开销就越大存储密度就越低。6.3 设计流程与工具链的缺失目前成熟的、面向存内计算的EDA工具链几乎空白。设计者往往需要用SPICE或类似工具进行晶体管级或混合信号仿真速度极慢。自行开发行为级模型来快速评估架构性能。手动进行布局布线或者对传统数字设计流程进行大量修改。 这极大地提高了设计门槛和周期。构建一个从高层算法描述到底层芯片GDSII的自动化设计流程是推动存内计算产业化必须跨越的鸿沟。7. 常见问题与实战避坑指南在实际研究和工程化过程中会遇到许多纸上谈兵时想不到的问题。以下是我总结的一些常见“坑”及应对思路。7.1 模拟存内计算的精度陷阱问题仿真结果完美但实测精度远低于预期。排查器件模型是否过于理想早期的研究常使用理想的线性电阻模型。务必引入真实的器件模型包含非线性、不对称性、随机 telegraph 噪声、循环耐久性退化等效应。外围电路的非理想性是否考虑周全包括字线驱动器的电阻、位线的寄生电容和电阻、读出放大器的偏移、ADC的积分非线性等。这些都会“污染”干净的模拟计算。系统级校准策略是否有效简单的单点校准无法应对温度变化和器件漂移。需要考虑周期性后台校准或在线实时校准方案。避坑技巧在架构设计初期就建立一个包含器件、阵列、外围电路乃至封装寄生的系统级仿真平台。采用蒙特卡洛仿真统计大量样本下的精度分布而不是只看典型值。7.2 数字存内计算的功能与灵活性困境问题设计了一个高效的SRAM存内计算宏但发现它只能做一种特定操作如定点乘法算法稍一变动就无法支持。排查计算模式是否过于僵化是否将算法细节“硬编码”到了电路里数据通路和控制逻辑是否可配置能否通过微码或配置寄存器改变操作类型和流程避坑技巧在追求极致效率的同时保留一定的可编程性。例如设计一个基础的计算原语阵列如支持多位加法和逻辑操作通过一个轻量级的指令集或配置接口来控制数据流和操作序列使其能适配一小类算法而不是单一算法。7.3 系统集成与数据搬运的隐形开销问题存内计算核本身的能效很高但集成到SoC后整体能效提升并不明显。排查数据搬运的路径变长了吗虽然计算核内部搬运少了但数据从片外DDR到存内计算核的搬运开销可能成了新瓶颈。计算核的利用率高吗如果因为数据依赖或调度不善导致庞大的计算阵列经常处于空闲状态那么能效优势就被稀释了。数据预处理和后处理的功耗占比多大例如数据格式转换、激活函数计算、池化操作等如果仍在传统数字逻辑中完成其功耗可能不容忽视。避坑技巧采用近内存或存内计算的层次化设计。在存内计算核周围集成适量的高速缓存和专用的数据预处理/后处理单元形成一个相对自包含的“计算岛”。同时在编译器层面优化数据调度尽可能提高计算核的利用率和数据复用率。从我个人的实践经验来看存内计算不是一个可以“即插即用”的银弹技术。它要求架构师、电路设计师、器件工程师和算法研究员紧密协作。成功的存内计算芯片一定是算法为硬件量身定制硬件为算法充分优化的产物。当前我们正处在这个领域从实验室走向产业化的黎明前夕数字路线稳健前行模拟路线潜力巨大。对于开发者而言理解这两种范式的本质区别和适用边界是做出正确技术选型、避开早期陷阱的第一步。这个领域的竞赛不仅是算力和能效的竞赛更是对计算本质深刻理解的竞赛。