当前位置:首页 > 科研成果库

存算一体架构,真能把“搬数据”这口气省掉吗?

2026-10-28 11:49:10小研科研成果库9

先讲个我自己的糗事。前年帮朋友调一块边缘语音板,唤醒词模型不大,几百KB。按理说跑起来轻松。结果待机电流死活下不来。查了半天,算法没锅,是主控每隔几十毫秒醒一次,把模型从Flash搬到SRAM,再算两下,再睡。搬的那点数据,比算的功耗还扎眼。那一刻我对“存算一体架构”这几个字,才算有了点肉疼的理解。

对。就是搬运。我们平时聊算力,老盯着算力指标、主频、制程。可真正在端侧咬人的,常常是数据在路上耗掉的电和时间。

那块板子教会我的事:算得快,不如少搬两趟

那块板子教会我的事:算得快,不如少搬两趟那块板子教会我的事:算得快,不如少搬两趟

冯·诺依曼那套结构,说白了就是厨房和粮仓分开。CPU是灶台,内存是仓库。炒菜时缺根葱,跑一趟仓库;缺瓣蒜,再跑一趟。算得再快,路上耽误了。

芯片里还夸张。片外DRAM访问一次,能耗和延迟都远高于片上一次乘加。有研究给过量级,别抠具体数字,反正差着好几个身位。到了AI推理这儿,矩阵乘加又特别吃数据,权重一大,搬运就成了主旋律。业内常说“内存墙”,听着像术语,翻译成人话:算力不是没有,是喂不饱。

所以存算一体架构的思路很朴素:别搬了,把灶台挪到粮仓里。或者干脆一点,让粮仓自己会炒菜。

存算一体架构到底在“一体”什么

这词容易被说玄。它不是一个单独器件,也不是某家公司的产品名。它更像一个谱系:离存储近一点,叫近存计算;把计算塞进存储阵列里,叫存内计算。再往下分,数字存内计算、模拟存内计算,路子不一样。

先说近存计算。逻辑不复杂:存储和计算单元挨着放,缩短数据通路。3D堆叠、HBM旁边挂计算单元,都算这个思路的亲戚。它改的是“距离”。

再说存内计算,这个有点意思。拿阻变存储器做的交叉阵列举例,阻变存储器是一种能用电导记住权重的器件。横线竖线交叉,每个交叉点放一个可编程电阻。权重不是存在某个格子里的0和1,而是存成电导值。输入电压从行上加进去,根据欧姆定律,每个交叉点产生电流;列上的电流按基尔霍夫定律一求和,乘加就出来了。

存算一体架构阻变存储器交叉阵列乘加原理图存算一体架构阻变存储器交叉阵列乘加原理图

你看,没有把权重搬到计算单元那一步。电压一加,物理定律替你做矩阵运算。读出来的是模拟电流,后面接模数转换器(ADC)转成数字。写权重的时候慢一点、疼一点,但推理时读得多、写得少,正好对上。

数字存内计算则更像“在SRAM里塞小计算器”。它不靠模拟电导,靠数字逻辑在存储阵列边上做按位运算。精度稳,代价是面积和能效优势没那么野。两条路各有各的甜区和坑。

关键加粗一句:存算一体架构不是把CPU干掉,而是把“搬”这个动作从关键路径上拿掉。它解决的是数据通路问题,不是通用计算问题。这点想明白,很多争论就消停了。

模拟存算的甜区,和ADC那盆冷水

模拟存算的甜区,和ADC那盆冷水模拟存算的甜区,和ADC那盆冷水

模拟存内计算诱人的地方,是并行度。一个阵列,一次读操作,整行整列的乘加同时发生。做低精度神经网络推理,矩阵乘加占大头,这活儿它熟。

但别急着上头。我见过太多PPT把交叉阵列画得像永动机。实际板子一上电,问题排着队来。

ADC就是那盆冷水。阵列输出的是模拟电流,你得转成数字。高精度ADC面积大、功耗高;低精度ADC快是快,量化噪声又上来了。整个系统的能效,经常不是被阵列卡住,是被ADC和DAC卡住。你说气不气。还有电压降(IR drop),线有电阻,电流一过,电压就掉;器件一致性也麻烦,同一片晶圆上,这个点导通电导和那个点能差出一截;温度一漂,读数跟着飘。写噪声、读噪声、保持特性,全是工程活。

所以模拟存算的等效精度,别指望一上来就顶到32位浮点。很多演示在4到8位权重、低精度激活上跑得挺欢。这不是丢人,是场景选择。存算一体架构的精度不是免费午餐,它拿噪声换并行。

我前阵子看一块测试板跑关键词识别,模型量化到8位,阵列那边算得飞快,结果ADC一开,功耗曲线立马抬头。朋友苦笑:省下来的搬运功耗,又被转换器吃回去一半。你看,工程里没有白捡的便宜。

它适合谁,不适合谁:别拿锤子找钉子

先说适合的。端侧、低功耗、权重相对固定、以矩阵乘加为主的推理任务,是存算一体架构的甜区。比如TWS耳机里的语音唤醒、可穿戴的心电异常初筛、工业传感器上的振动分类。这些场景有个共同点:设备常年靠电池,主控大部分时间该睡就睡,模型更新不频繁。

存算一体架构边缘语音唤醒芯片测试板存算一体架构边缘语音唤醒芯片测试板

拿语音唤醒举例。传统做法是麦克风前端一直采,特征提取后送MCU,MCU隔一会儿醒一次跑小网络。存算一体架构可以把唤醒词模型的权重提前写进阵列,前端特征变成电压激励,阵列直接出结果。平时深睡,检测到疑似唤醒才叫醒主控。省的不是一点半点。

再说不太适合的。高精度训练、频繁更新权重、控制流特别复杂的任务,别硬塞。模拟阵列写一次慢,写寿命也有限,你让它天天改权重,它受不了。大模型训练那种数据流和精度要求,还是老老实实走数字路线。存算一体架构不是万能钥匙,它更像一把专用扳手。

还有个常见误解:有人以为存算一体就是“内存里加个ALU”,把近存和存内混着说。其实差别大了。近存计算改的是距离,存内计算改的是计算发生的位置。前者工程上落地门槛低一些,后者能效潜力大,但器件和工具链的坑也深。

软件栈也是个大坑。你阵列做得再漂亮,编译器不支持、算子库没有、量化工具链对不上,算法工程师照样抓瞎。我见过一家团队,硬件指标很能打,结果模型部署卡了三个月,结果发现是某个激活函数没有对应实现。这种事,纸面上不会写。

别急着喊颠覆,先看边界

别急着喊颠覆,先看边界别急着喊颠覆,先看边界

存算一体架构这几年热,热得有道理。数据搬运的账,迟早要算。端侧AI起来后,这个账就躲不开。可热归热,别把它吹成“内存墙一拆,算力自由”。

它解决的是特定数据通路问题。器件一致性、良率、ADC开销、芯片设计工具链(EDA)支持、可靠性、安全,一个都绕不开。尤其安全,权重存在电导里,侧信道和物理访问的风险得重新评估,侧信道比如通过功耗、电磁泄漏猜模型。端侧设备丢了、被拆了,模型保密怎么做?这些不是发论文时能一句带过的。

我的判断很朴素:存算一体架构会先在边缘推理里扎根,在特定低精度、高并行、权重固定的场景里证明自己。它不会一夜之间替换现有计算体系,也没必要。工程进步常常是这样,先在一个小口子上咬住,再慢慢往外扩。

回到那块语音板。后来我们把模型拆小,减少唤醒频次,待机电流降下来了。但那个“搬数据比算数据还费劲”的念头,一直留在我脑子里。存算一体架构要干的,就是把这件事从根上拧过来。

能不能成?看器件,看工具链,也看我们愿不愿意承认:有些计算,真不该先搬再算。