ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

存算一体深度解析:从存储墙到大模型推理的存储革命

2026/9/18 0:41:52 拓冰建站 浏览量
存算一体深度解析:从存储墙到大模型推理的存储革命 最近几年只要聊到AI芯片、边缘计算、大模型推理成本总绕不开“存算一体”这个词。发布会上讲学术论文里刷投资汇报里也在提但很多人对它的理解其实停留在“把存储和计算放在一起所以更快更省电”这种广告词层面稍微追问几句就说不清楚了。作为一个在芯片和算法中间摸爬滚打的从业者我试着用一篇尽量说人话的文章把存算一体从头到尾掰开揉碎聊一遍它到底解决什么问题底层物理原理是什么有哪些技术路线现在落地卡在哪个环节以及最关键的——它是不是真有宣传里说的那么神。这篇内容适合做AI推理加速的工程师、做芯片选型的产品经理以及想搞懂下一代计算架构的学生和朋友。1. 先厘清一件事我们为什么要“存算一体”1.1 冯·诺依曼架构的“存储墙”到底有多痛要讲清楚存算一体得先回到几乎所有现代计算机都在用的冯·诺依曼架构。这个架构的核心思想很简明存储和计算是两个独立的部分中间靠总线搬运数据。CPU只负责算内存只负责存两者之间有一条数据通道数据从内存搬到CPU寄存器、算完再搬回去。这套1930年代提出的架构支撑了人类几十年的计算发展在今天却越来越力不从心。打个比方你就明白了。CPU就像一个厨师内存是后厨的备料库总线是跑来跑去的传菜员。菜谱上写着“用A料和B料炒一个菜”厨师就得等传菜员先把A料从备料库端过来再跑一趟端B料每次炒菜都要来回折腾。如果厨师炒菜只要10秒传菜员来回要30秒那这顿饭的瓶颈根本不在厨师手上而在传菜路线太长。现在芯片厂商拼命提高主频、堆更多核心就相当于让厨师手里刀更快、锅更多但只要传菜员还在那条路上跑整体出菜速度就上不去。行业里把这个问题叫作“存储墙”也叫“内存墙”。你去看Horowitz那篇经典论文里的测算数据做一个64位浮点乘法大约需要20pJ皮焦耳但从DRAM里读一个64位数据却要1300pJ左右两者差了差不多两个数量级。也就是说一次完整的数据搬运加运算绝大部分能量根本没花在“算”上而是花在“跑”上了。更麻烦的是延迟DRAM访问延迟动辄几十纳秒而CPU核心运算周期已经进入纳秒甚至亚纳秒级别一旦缓存不命中CPU就干等着。1.2 算力需求增长与数据搬运成本之间的矛盾如果只是传统数据库或科学计算场景存储墙问题还不会显得这么致命毕竟那些场景对带宽和能耗的敏感度还在可接受范围。但AI大模型起来以后情况完全变了。一个千亿参数的稠密模型光权重就占几百GB训练和推理时每一层都要把权重从存储介质读出来参与矩阵乘法权重搬运量极大。大模型的Transformer结构里核心操作是矩阵乘法尤其Attention部分要对Q、K、V三个矩阵反复做投影计算。这些权重本质上是静态数据一旦训练完成就可以固化推理时只需要流式读取。问题是传统架构下每一次矩阵乘法都要把权重从DRAM或Flash搬到计算单元算完再丢掉换下一批权重复用率低得可怜。数据搬运成了整个推理过程的最大开销也直接决定了单卡能支撑多少并发、功耗压不压得住。边缘场景更苛刻。语音唤醒、图像识别、端侧大模型这类应用功耗预算往往只有几十毫瓦甚至更低同时还要满足实时响应。在这种限制下如果仍然沿用“数据搬到计算单元”的老路光是存储访问能耗就撑不住。所以存算一体被提上日程本质上不是学术界自嗨而是能耗和时延逼出来的替代方案。1.3 存算一体到底想干什么那么存算一体具体要做什么一句话概括把计算单元塞进存储阵列内部让数据在存放的位置直接完成计算而不是搬出去算完再搬回来。这里要区分两个概念很多人容易混。一个是近存计算Near-Memory Computing典型例子是把逻辑芯片和DRAM/HBM堆叠在同一个封装里缩短数据搬运的距离。另一个是存内计算Computing-in-MemoryCIM它更进一步——让“读存储单元”这个操作本身完成一次计算。什么意思传统架构里读内存就是老老实实把存在那的数字取出来CIM架构里你触发一次读操作存储阵列里的物理规律会顺带帮你做一次乘法和累加返回给你的直接是一个计算结果。这才是严格意义上的“存算一体”也是当前研究最热的那个方向。但我必须提前说明一点目前市面上大量商用的“存算一体”芯片其实是近存计算和存内计算的混合体纯正的大规模存内计算产品还很少。这篇文章接下来聊的“存算一体”默认指存内计算CIM如果涉及近存会单独说明。2. 存算一体的底层原理把矩阵乘加“硬折”进存储阵列2.1 物理基础欧姆定律和基尔霍夫定律如何做“乘加”理解存算一体最核心的计算原理你只需要两招初中物理知识欧姆定律和基尔霍夫电流定律。欧姆定律说I V / R V × G其中G是电导也就是电阻的倒数。如果我们把输入数据编码成电压V把权重数据编码成某个存储单元的电导G那么流过这个单元的电流I V × G这就完成了一次乘法。基尔霍夫电流定律说流入一个节点的电流之和等于流出该节点的电流之和。如果我们把同一列上的多个存储单元的电流汇聚到同一条位线上这些电流自然叠加在一起这就完成了一次加法。乘法有了加法也有了两者一组合就是矩阵向量乘Matrix-Vector MultiplicationMVM。这个运算听着很学术其实它是全连接层和卷积层的最核心计算。神经网络里每一个神经元对输入的加权求和本质上就是一个向量内积展开来看就是一堆“乘加操作”MAC。存算一体阵列相当于把整条“乘加”链条物理化、并行化——电压同时施加在一整行存储单元上每一列的电流同时完成一组加权求和一个读周期就能做出一整条向量乘的结果。这跟传统架构的差别在哪里传统架构里内存只负责吐数据乘加运算要靠ALU一步步执行CIM架构里阵列本身既是存储体又是运算单元读操作即计算。直观一点说这就好比一个仓库本来是“取货—送到加工车间—加工—送回仓库”四个步骤现在改成“在仓库里直接加工”中间所有运输环节全部砍掉了。2.2 从权重到电导神经网络如何映射到存储单元明白了物理原理下一步就是工程上的核心问题神经网络里那些浮点权重怎么变成存储单元里的电导值以模拟域CIM为例权重数值要先量化成合适的比特宽度再映射到每个存储单元的电导值。比如一个权重矩阵的每一行对应阵列的一行字线每一列对应阵列的一条位线矩阵中某个权重就存储在对应的交叉点单元上。因为实际器件很难做到很高精度的电导状态训练好的FP32权重通常要先量化成INT8、INT4甚至更低比特然后映射到器件可表示的电导区间。一个常见做法是训练时加入量化感知训练QAT让网络在训练阶段就模拟硬件上的量化误差和噪声避免部署时精度掉太多。更进阶一些的做法是把器件噪声、电导漂移也建模进训练过程业界叫“device-aware training”。这样训练出来的模型即使映射到非理想特性的器件上也能保持一个可以接受的精度水平。还有一个细节阵列大小和位宽不匹配时怎么办比如实际阵列是128×128的交叉开关但一个全连接层的权重矩阵是512×512那就得把矩阵切分成多个子块分时送入阵列最后在数字域拼接累加。这个过程牵扯到数据布局、时序调度和部分和累积是CIM编译器要做的事情后文会再展开。2.3 一次“存内计算”的读操作为什么能省下大部分搬运时间很多人第一次接触CIM时会问阵列算出一组部分和后续不是还得把数据往外搬吗这跟传统架构有什么区别区别在于搬运的量级和层次。传统推理过程中每一层权重矩阵的每一个元素都要经过总线搬到运算单元搬运量和权重参数量、计算次数成正比。CIM方案里权重被固化在阵列里不需要频繁搬出每次计算时搬出去的是“输入特征”和“输出结果”前者是一个小向量后者又直接灌入下一层或累加器中间免去了权重海量搬运这一大头。一个128×128的RRAM阵列在单个读周期内就能完成128×128次乘累加操作而传统架构要完成同等操作至少要把128×128个权重全部搬进ALU来回折腾的次数可想而知。当然第二个区别是并行度。传统CPU一次运算只能处理一个或一小组MACCIM阵列天然是“向量宽度列数”的大规模SIMD式并行撑满并行度的代价几乎为零因为阵列本身就在那里。但这里必须打个预防针读操作省了不代表系统全省了。阵列读出的模拟电流要经过模数转换器ADC变成数字信号ADC要做转换数据要做拼接输入要做数模转换DAC这些外围电路照样消耗面积和功耗。后面第4章我会专门讲这些“隐藏成本”。所以在评估CIM方案时一定要算系统级收益而不是只看阵列单点能效。3. 两大技术路线模拟域CIM和数字域CIM的路线之争3.1 模拟域路线RRAM/MRAM/PCM与电流叠加目前CIM技术路线分两大派一派是模拟域一派是数字域。模拟域CIM依赖新型非易失存储器件主流候选有RRAM阻变存储器、MRAM磁存储器、PCM相变存储器。它们的共同点是可以通过外加电压或电流改变存储单元的物理状态进而呈现不同阻值或电导而且断电后数据不丢失。RRAM是目前研究最热的方向之一。它靠介质中导电细丝的形成和断开改变电阻结构简单、密度高理论上能把阵列做得很大适合极致能效场景。问题在于良率和一致性RRAM的电导状态离散性大写噪声明显一个阵列里不同单元对相同写入条件的响应可能差很多这让高精度映射变得困难。PCM的优点是能实现较稳定的多电平存储比如单个单元存2比特甚至4比特建模相对方便但存在电导漂移问题——随着时间推移非晶态区域的阻值会缓慢变化直接影响计算精度。MRAM速度快、耐久度高适合做cache类应用但它电阻变化范围小模拟精度一般在CIM领域更偏向近存计算而非高精度存内计算。模拟域CIM的吸引人之处在于能效上限够高。把两个数值的乘法浓缩成一个电流信号几乎不做多余动作理论上可以达到惊人的TOPS/W指标。代价是精度有限、工艺成熟度不足、良率爬坡慢。适合什么场景能容忍低比特精度、追求极致能效的推理场景比如语音唤醒、小尺寸CNN、端侧低功耗AI。3.2 数字域路线SRAM内置数字逻辑和近存/存内计算的折中数字域CIM走的是另一条路它不依赖新型存储介质而是用标准CMOS工艺下的SRAM单元做改进。具体思路是在SRAM单元内部加一些数字逻辑让位线读出操作可以同时完成“与”或“或”之类的逻辑运算或者用电容上的电荷累加来实现乘加。这样存储单元还是数字电路计算结果也是确定性的不需要ADC转换精度和数字电路完全一致。数字域CIM的优点非常现实与现有CMOS工艺完全兼容可以直接复用成熟设计流程PDK、标准单元库、验证工具全部现成开发风险低。精度上没有模拟噪声的顾虑不需要处理电导漂移这类头疼的问题。更重要的是做芯片的人都知道能用成熟工艺解决的问题就不要去赌不成熟的器件。很多做端侧AI芯片的公司首选SRAM CIM作为第一版量产方案就是基于这个考量。它的短板也很明显数字逻辑单元面积明显比纯存储单元大SRAM单元加计算逻辑以后有效存储密度降下来了存算收益的“上限”不如模拟域那么极致。另一个问题是数字域CIM的能效提升主要来自减少搬运和增加并行而不是把能量省在运算本身所以TOPS/W数据通常不如模拟域跑分好看。我个人的观察是现阶段产业里真正出量、跑通的更多是数字SRAM CIM而不是RRAM模拟CIM。前者性价比更高、迭代更快后者更适合作为前瞻技术储备。3.3 路线对比与选型建议为了帮大家快速建立判断框架我做了一个对比表维度模拟域CIMRRAM/PCM/MRAM数字域CIMSRAM存储介质新型非易失器件标准SRAM单元计算方式电流/电压物理叠加位线逻辑/电荷累积精度受器件多态能力限制通常4-6bit可与数字电路一致ADC需求必须且面积功耗占比大通常不需要/简单比较器工艺成熟度低良率和一致性待提升高直接复用CMOS流程能效上限极高理论可达数百TOPS/W较高但上限低于模拟域主要挑战器件工艺、漂移、量产面积开销、存储密度下降研发风险高低选型建议也简单产品要在短期内落地、对供应链稳定性有要求选数字SRAM CIM风险和投入都可控如果算法团队能驾驭低比特量化产品又需要最极端的功耗控制可以赌一把模拟RRAM CIM但要做好器件测试、建模、良率爬坡的心理准备。至于MRAM现阶段更适合做缓存级近存计算离纯CIM更远一些。4. 真正落地时存算一体躲不开的问题4.1 模拟精度电导只有几比特模型精度怎么保理论说得再好落地就是另一回事了。模拟域CIM要面对的第一个硬骨头是精度。理想的存储器件应该有非常宽且连续可调的电导范围但实际器件根本不是这么回事。RRAM的稳定电导状态通常只有4到6比特PCM稍微好一点但也离8比特差得远。而现代主流AI推理精度基本都是INT8起步甚至FP8、FP16拿4比特的电导直接映射模型精度几乎肯定崩掉。工程上有几种补救方案。最常见的是bit-slicing也叫位切片把高精度的权重按二进制位拆开高位和低位分别存在多个单元里读出时分别乘上对应权重再移位累加。这个方案有效但代价是面积和功耗显著上涨因为你一个8比特权重可能要拆成2到3个单元阵列规模翻倍都不止。第二种方案是混合精度。把模型里对量化敏感的层比如某些Attention层或残差连接的末端放到数字计算单元对精度不敏感的卷积层、矩阵乘层放到模拟CIM。这样做的好处是费用可控但增加了架构复杂度编译器也得两头兼顾。第三种方案前面提过从训练阶段下手把器件噪声、电导漂移、写入误差全部建模进训练过程让模型“见过”这些噪声后学会自我纠正。这个方案在学术论文里效果不错但真正工程落地时需要一个靠谱的器件噪声模型这又反过来要求你和器件团队有足够深的协作关系。我在实际项目中的一个心得是第一版芯片别追求“全模拟CIM”最好在宏内部做双模设计既能跑CIM模式又能退化成普通SRAM模式。这样最起码可以当普通存储用调试灵活出了计算精度问题也能快速回退到数字路径对比排查。多花一点面积换来的是可调试性和备选方案值。4.2 ADC与数据读出面积和功耗的双重考验模拟域CIM有个很容易被低估的“隐形开销”——在外人看不见的模数转换器ADC上。阵列运算产生的是模拟电流要变成数字才能送给后续数字逻辑或直接喂给下一层。ADC的分辨率、速度和数量直接决定了整体面积和功耗。更尴尬的是阵列规模和ADC之间是一对根本矛盾阵列越大每条位线上累加的列电流位数越多需要的ADC分辨率越高分辨率越高ADC的面积和功耗急剧膨胀。结果就是阵列规模大到你享受不到存算的密度红利外围ADC反而成了面积和功耗的“大头”。工程上解决这个问题的常用招数是分块。别把阵列做成一个巨大的连续方阵而是拆成多个小阵列块每块用中等分辨率的ADC读出再在数字域做两级累加。这样ADC的规格要求降下来了代价是数据拼装的复杂度上升。还有一个细节容易踩坑仿真时只算阵列本身能效比把ADC功耗摊到每一次算子运算时才发现整体能效掉到只剩下原来声称的一半甚至更低。我的建议是做方案评估阶段就直接做宏级RTL加版图前评估把ADC、DAC、输入驱动电路、输出拼接逻辑全部放进功耗模型里再和你现有的数字SoC做整体吞吐量对比。只看单点阵列数据就拍板纯属自欺欺人。4.3 软件栈与编译器当前最大的生态短板如果说器件和ADC是硬件的坑那软件栈就是整个CIM生态最大的“软”短板。你想想PyTorch和TensorFlow把所有算子都抽象成了张量运算普通GPU拿到这些算子直接就能跑因为CUDA已经把所有底层细节处理好了。但CIM芯片呢算子需要映射到阵列权重需要做bit-slicing输入激活可能需要编码成脉冲宽度或电压幅度数据布局要考虑如何让阵列复用最大、DRAM流量最小——这些事情现有的AI框架一个都不会帮你做。所以每一家做CIM的公司都得自己憋一套编译器/工具链把ONNX或TFLite模型解析成计算图然后做算子切分、阵列映射、模拟域时序控制、数字域拼接代码生成最后调度到CIM宏上面。问题是这个领域还没有统一的标准和成熟的中间表示大家各自为战工具链成熟度远远落后于GPU生态。我的看法是如果团队刚上手做了个CIM芯片先别急着做“万能编译器”能跑通几个关键模型就够了。做一个针对自有芯片的TFLite前端把常见CNN和部分Transformer算子支持好然后跟着客户需求逐个加算子。CIM芯片的第一桶金几乎都来自垂直场景的定制交付通用编译器那是生态成熟之后才该想的事。4.4 工作负载匹配不是所有模型都适合“塞进”阵列再一个很容易被忽略的点是工作负载适配。CIM阵列擅长规则、密集、可静态映射的计算典型如卷积、全连接、Transformer里的QKV投影、注意力得分矩阵乘。因为它们的权重是静态的输入输出可以流水化处理复用得越好存算优势越明显。但CIM非常不擅长另一类算子softmax、layernorm、激活函数尤其带动态分支的、索引收集、归约操作。这些算子要么涉及非线性运算要么有动态数据依赖要么需要不规则的内存访问模式跟CIM阵列的“规则并行”风格完全冲突。实践里做CIM芯片几乎都要在片上加一个“常规数字处理核”专门用来跑这些边角算子。所以说当前很多CIM芯片本质上是一个混合架构CIM宏负责主力矩阵计算数字核负责残差、归一化和非线性两边协同完成整个模型。从产品设计角度看动手之前先做算子分析看看目标模型的MAC里到底有多少比例能真正映射到CIM上。如果CIM覆盖率只有50%那整颗芯片的收益可能并不如宣传那么美好。我还见过有的项目模型小、权重复用度低跑下来CIM宏使用率不到峰值的一半整体效果反而不如用DSP拼接的传统方案。选型之前先拿仿真器把每层MAC和DRAM访问量算清楚别凭感觉。5. 应用场景与行业现状我在项目中怎么看这个东西5.1 哪些场景适合现在尝试哪些还要等基于当前技术和生态成熟度我给出一个相对务实的判断。短时间内值得做、也能做的场景包括端侧语音唤醒、小目标检测、低比特量化CNN、离线推理盒子、AI MCU以及带严格功耗限制的可穿戴设备。这些场景共同特点是模型相对固定、权重静态、对时延和功耗敏感、端侧量不大但能接受定制。更关键的是它们对精度容忍度较高。语音唤醒这种任务业界早已习惯用低比特模型模型精度一点点下降根本感知不到而CIM正好可以在这类场景发挥能效优势。反观那些需要大模型训练、需要动态更新权重、需要高精度科学计算的场景现阶段用CIM基本是自找麻烦。训练为什么不适配CIM核心原因是训练过程需要高频随机访问权重并且每个step都要用梯度更新权重。模拟器件反复写入寿命有限RRAM写耐久度一般只有10的6次方到10的8次方次训练场景下很快就会写穿数字SRAM CIM虽然写起来没负担但训练要的高精度和灵活索引访问也不是它的强项。所以现在业界的共识是存算一体瞄准的是推理训练不是它的主战场至少中期内不是。5.2 大模型时代对存算一体是机会还是挑战大模型时代给CIM带来了新的机会。大模型推理最大的痛点就是权重搬运一个70B模型仅权重就要140GB以FP16计就算用INT8量化也要70GB。权重搬运占用的时间和能耗远超计算本身。如果把模型权重固化成CIM阵列的电导或SRAM内容让权重放在哪里、计算就在哪里进行那就能把这块最大的开销省掉。这恰恰是CIM最愿意干、也最擅长干的事。但压力同样明显。大模型的参数量太大了假设用模拟CIM需要几千块甚至上万块晶圆级的阵列才装得下阵列的一致性怎么保证权重低比特化趋势倒是利好CIM因为4bit甚至2bit量化可以更好地匹配模拟器件有限的精度能力。另一方面Transformer解码阶段的KV Cache会随着序列变长不断膨胀这部分动态数据要不要在CIM里处理怎么处理纯CIM显然不合适。而且生成式推理的复杂度不在矩阵乘本身而在序列之间的依赖关系CIM对这类串行依赖的计算模式帮不上太多忙。所以我认为大模型时代不会出现“一颗纯CIM芯片打天下”的场面更可能的形态是3D堆叠加近存加存内计算融合成一个“存算融合”的异构体系CIM只是其中一部分。5.3 一些务实的判断目前看大厂确实都在布局存算实验室和流片计划但规模出货的产品并不多真正落地的更多是端侧MCU级别的小芯片。这个现象不奇怪新架构从流片验证到量产爬坡本身就需要三五年周期加上软件工具链不成熟早期产品很难直接切入大市场。你在发布会上看到很多“业内领先”“全球首款”之类的宣传词一定要谨慎看待。能效比数字都是在特定benchmark、特定精度、特定温度条件下测出来的参考价值有但距离End-to-End产品级收益还有很长一段距离。另外存算一体这个方向对从业者的知识结构要求相当高。做器件的人要懂AI量化做架构的人要理解器件非理想性做软件的人还得懂硬件映射。跨学科是这行最大的门槛也是最大的壁垒。我自己这几年的体验就是每次和器件、算法、软件团队坐到一起开会才真正把方案的优劣边界想明白。如果读者里有学生我的建议是器件、架构、软件、算法四条线里至少通一条同时保持另外三条的“可对话”水平。不用全懂但得能听懂别人在讲什么。还有一个值得关注的趋势是chiplet和先进封装。CIM阵列本身做在存储die上逻辑die负责控制调度两者通过先进封装和3D堆叠集成这是目前兼顾成本和性能的一种实践路径很多公司的“存算一体”产品严格说也是这么做的。所以谈存算一体不一定要局限于二维阵列往三维堆叠方向想会更贴近实际产品形态。我自己在实际项目里试过把一部分卷积算子放到CIM宏上也在同一颗测试芯片上裁掉CIM只跑数字路径作对比。最后的结论是CIM的价值高度依赖系统里“静态权重复用度”这个指标。如果权重一次性流过、没有复用CIM的优势微乎其微如果有很高的复用度、又能承受低比特量化那它的能效收益确实可观。前一种情况你拿普通DSP加SRAM缓存也能做得差不多后一种情况CIM能把能耗压到传统方案的一个零头。最后分享一个小技巧不管你看中了哪家CIM方案也别急着问“TOPS/W多少”先问几个更“土”的问题——你们编译器支持哪几个模型量化感知训练工具开放吗ADC和其他外围电路做了系统功耗建模吗现场demo跑的是什么模型这些问题答得越具体项目落地的可靠性通常越高。答得越模糊宣传成分就越大踩坑概率越大。