想象你是一位习惯待在办公室的图书管理员,而图书馆的书架全在百米外的库房中。领导说:“把每本书的标价加总。”你只好一趟趟跑库房翻书、抄数字,再回到办公室拨算盘。跑腿的时间,远比拨算盘的时间多得多。传统电脑正是这位“图书管理员”:负责计算的“大脑”在办公室,海量数据像藏书一样存在“库房”,两者之间运送数据的通道,就是整栋楼里最拥挤的走廊。存算一体芯片的愿景,是让“书页自己会算账”——把计算能力直接藏进存储的地方,让数据钉在原地完成运算。这条路,叫近数据计算。它不是某一种具体的芯片,而是一整套“少跑腿、就地算”的架构哲学,正从人工智能推理加速走向下一代计算。
掌握存算一体架构的瓶颈分析与优化思路,帮你在 AI 芯片、端侧推理等岗位一眼看穿“带宽受限”背后的工程本质,做出真正的架构级判断。
可视化演示
展示存算一体架构原理、存内计算实现方式及性能优化策略,交互切换理解近数据计算核心技术。
本节配有交互动效(进入视口后自动加载,约 3KB)。
'+modeData.arch.caption+'
1. 冯诺依曼瓶颈
继续那位图书管理员。他所在的年代,所有书籍都要从库房抱到办公室才能阅读、做批注。如果这栋楼足够气派——算盘再大、计算能力再强——也只是“更快的拨算盘”,而跑库房的腿仍是一条条码在书架间的路。数据越庞大,跑腿越频繁,整个系统就被这段路途掐住了喉咙。
这就是冯诺依曼架构的命门:运算器(CPU)和存储器(内存)在物理上分居两地,所有指令和数据都通过总线来回搬运。随着芯片算力每年增长约 60%,内存带宽每年却只增长约 10%,CPU 的“算力胃口”越来越大,“走廊”的吞吐能力却跟不上,这个剪刀差被称为存储墙。存储墙带来的不只是时间,还有功耗墙——一次从内存读取数据的能耗,约为一次算术运算的 100 倍。
换句话说,图书管理员 99% 的体力都花在跑腿上,而不是拨算盘上。只要让书页在库房里就能“被算”,管理员才能从马拉松中解放出来——这正是存算一体入场的原因。
- 任务总能耗程序执行一次完整计算任务消耗的总能量,包含搬运与计算两部分
- 搬运能耗数据从内存读出、写入以及经过总线传输过程中消耗的能量
- 计算能耗算术逻辑单元真正执行加法、乘法时消耗的能量
- 数量级对比实测数据表明,访存能耗约是计算能耗的两个数量级,这是 100 倍近似值的来源
2. 存算一体原理
如果给每本书装上一枚“会算账的书签”,管理员再也不用把整本书抱回办公室。书签上记着书的价格、销量和库存,任何汇总需求,翻开对应页面即可就地完成。这个朴素的想法,在芯片世界叫存内计算:把计算单元嵌入存储单元,让数据不必搬家。
存算一体最经典的实现形态是交叉阵列。想象一张棋盘,横线是字线,竖线是位线,每个交叉点放一个存储单元。左边给每条字线输入一个电压代表输入特征,右边每条位线上流出的电流,就是这一列所有单元“电压乘电导”的累加——而这恰好就是数学上的点积运算。
它的物理原理是欧姆定律与基尔霍夫电流定律。每个单元的电导 G 预先写入了权重,输入电压 V 经过单元产生电流 I = V × G,同一位线上的所有电流自然叠加,形成输出。实现手段分两条路:模拟实现利用电流/电荷累加,速度快但精度受限;数字实现则在阵列附近布置加法器,精度高但面积开销大。
这就像火锅店里,每桌备好全部食材,顾客夹起即涮即吃,厨师不再需要满店送菜。交叉阵列把“乘法”藏在物理定律里,把“加法”藏在电流汇合里,一眨眼的工夫,矩阵乘法的核心运算已经完成。
- 单元位置第 i 行第 j 列的存储单元,存放着权重信息
- 输入特征加在第 i 行字线上的输入电压,代表这一个输入维度的数值
- 局部电流根据欧姆定律,单个单元贡献的电流等于电压乘电导
- 位线累加同一列所有单元的电流通过基尔霍夫定律自然汇合,得到输出
3. 硬件实现路线
书签的材质不同,算账的方式和成本也不同。存算一体同样存在多条硬件路线,每家“火锅店”端出的形态各异,但都遵循“边存边算”的哲学。
第一条路线基于 SRAM(静态随机存储器)。SRAM 速度最快、与数字逻辑工艺高度兼容,但单元面积大、容量有限,适合小规模高精度的神经网络层。第二条路线基于 ReRAM(阻变存储器),如同可反复擦写的石板,单元通过阻值变化存储权重,能做得很小、密度高,还能天然在模拟域做乘加,是目前学术界与工业界的明星。
第三条路线基于闪存(Flash)。闪存成本低、容量大,写入慢但读取快,非常适合权重基本固定的推理场景,这也是大厂热衷的“闪存存内计算”方向。此外还有存内查找表技术:把常见运算结果预先算好存在阵列里,用地址查表完成逻辑操作,适合对精度要求高的计算。无论哪条路线,核心思想都可以概括为:把权重映射为可被电压直接作用的物理量,再通过电流读出结果。
选择哪条路线,就像选火锅还是烧烤:SRAM 是精致小灶,ReRAM 是高密度大锅,闪存是实惠自助。工程上常做混合搭配,把不同材质的专长组合进一颗芯片,物尽其用。
- 输入信号每条字线上的输入电压,对应数据向量中的元素
- 权重存储权重通过单元电导值表示,电导越大权重越大
- 点积求和输出是所有输入与对应权重乘积的累加
- 并行完成阵列中所有乘法在电压施加的瞬间同时发生,无需逐一执行
4. 算法适配方法
火锅再好吃,食材也得切成片、摆好盘才能下锅。存算一体的阵列虽然能在物理上完成乘加,但要让它跑起真正的神经网络,算法层必须先“切菜摆盘”。
第一步是把神经网络里最常见的卷积和全连接层,重写为矩阵乘法。卷积通过一种叫 im2col 的变换,把输入特征图拆成矩阵;权重矩阵则按行列映射到交叉阵列上。随后,矩阵里的每个元素要量化成低比特数,因为模拟阵列的电导级数有限(通常只有 4~8 比特),这就是近似计算策略的一部分——用一点点精度损失,换取巨大的能效收益。
量化就是给每个浮点权重找一个邻近的可表示值。常规做法是设置一个步长 Δ,先做就近取整,再乘回步长:
切好的菜才能整齐码进锅。同理,量化、重排、分块后的权重才能体面地“入驻”交叉阵列。算法工程师与芯片工程师在“盘子尺寸”上反复对齐,这正是存算一体系统设计中最磨人的协作环节。
- 原始权重训练得到的浮点权重,范围不固定,无法直接写入有限电导态
- 量化步长用最大绝对值和位宽 b 计算出的最小刻度,决定精度与范围
- 就近取整将权重除以步长后四舍五入,映射到整数刻度
- 反量化还原整数刻度乘回步长,得到可存储在阵列中的量化权重
5. 芯片架构设计
一间火锅店不能只有锅,还得有切配间、传菜口和收银台。存算一体芯片同样不能只有存储阵列这块“铁板”,它需要一整套外围电路来支撑运转。
数据进入阵列前,数字信号要经过 DAC(数模转换器)变成电压;阵列算完后,模拟电流要经过 ADC(模数转换器)还原成数字结果。行译码器负责唤醒对应字线,列选择器负责选出要读的位线,还有时序控制、输出缓冲、片上网络等。正是这些外围电路,往往占据芯片面积和功耗的一大部分,也是设计博弈的焦点。此外,针对工艺波动造成的缺陷单元,芯片会预留冗余行/列进行替换修复,就像火锅店总多备几口锅。
一条重要的设计准则是最大化阵列中的数据复用:让同一批权重尽可能被多次使用,而不是反复重新写入。整体能效可以写成:
装修餐馆时,老板最怕后厨通道比灶台还占地方。芯片设计师同样警惕“外围比本体还贵”:好的存算芯片,ADC 数量和位宽会精打细算到极致,让每一分功耗都花在刀刃上。
- 并行度阵列规模,一次读取能同时完成 M×N 次乘加
- 工作频率阵列每秒重复执行的读写周期数
- 阵列功耗存储单元本身在乘加过程中消耗的功率
- 外设功耗DAC、ADC、译码器与缓冲等辅助电路的功率开销
6. 工程优化与展望
火锅店运营久了,老板总结出三件事:食材提前切好摆盘(数据复用),煮锅按桌号轮转(流水线并行),电费账单逐项核对(能耗优化)。存算一体芯片的工程化,也在这三条线上持续打磨。
数据复用通过分块调度,让同一权重服务多批输入;流水线并行把“写入—计算—读出—转换”拆成多级,让阵列时刻忙碌;能耗优化则从降低 ADC/DAC 位宽、稀疏化计算入手,跳过对结果无贡献的零数据。这些手段合并起来,能带来约一个数量级的能效提升:
展望未来,存算一体正从“数据搬运的终结者”走向更多可能。边缘设备端,低功耗推理让手机与耳机跑得起大模型;数据中心端,推荐系统与大语言模型的权重驻留推理带来数倍能效提升;而在更前沿,模拟域并行计算的思想与量子 AI 中“叠加态天然并行”的理念交相辉映,为未来计算范式提供了新的想象空间。从图书管理员的疲惫双腿,到书页自会算账,再到整座图书馆的智能调度——近数据计算的故事,才刚刚翻开新的一页。
- 搬运时间优化前权重与数据在总线上往返的时间
- 计算时间真正的乘加运算所花的时间
- 缩减系数搬到存储阵列内后,剩余搬运时间与原先的比值
- 总体加速比优化前后总耗时的比值,β 越小加速比越大
AI 应用场景
数据中心大模型推理加速
阶段:模型推理部署
解决的问题:大模型权重动辄几十 GB,传统 GPU 推理时需反复从内存读取权重,带宽逼近饱和、功耗高企;存算一体把权重驻留在阵列内,输入特征流过阵列即逐层产生结果,绕开最昂贵的“读权重”路径。
具体案例:某推荐系统推理专用芯片采用 SRAM 存算一体阵列,对比同工艺 GPU,单卡吞吐提升近 10 倍,能效提升约 20 倍,让每瓦功耗处理更多用户请求。
边缘端侧设备智能
阶段:端侧推理
解决的问题:手机、耳机、摄像头等设备电池有限、散热苛刻,传统方案难以支撑实时语音识别或图像检测;存算一体的低搬运特性,让小型神经网络在毫瓦级功耗下完成推理。
具体案例:某可穿戴健康监测芯片集成 ReRAM 存算阵列,持续处理心率与血氧数据,续航从一天延长到一周,响应延迟降到毫秒级,真正让“书页在库房就能算出答案”。
未来计算范式探索
阶段:前沿研究
解决的问题:经典芯片能效逼近物理极限,学界探索“以物理定律替代逻辑电路”的路径;存算一体的模拟域并行思想与量子 AI 的叠加态并行有异曲同工之处。
具体案例:某高校团队正研究用阻变阵列模拟量子态演化中的矩阵运算,作为量子启发计算的硬件试验床,为量子 AI 与未来计算积累工程经验。
Python 演示
import numpy as np class CrossbarSimulator: """模拟一个 8x8 的 ReRAM 存算一体交叉阵列""" def __init__(self, weights): self.weights = np.array(weights, dtype=float) def compute(self, inputs): """输入电压沿字线进入,位线电流累加得到点积结果""" outputs = np.zeros(self.weights.shape[1]) for j in range(self.weights.shape[1]): for i in range(self.weights.shape[0]): outputs[j] += inputs[i] * self.weights[i, j] return outputs def energy_cost(self, inputs): """存算一体只需搬运输入与输出,权重全程驻留阵列""" return inputs.size + self.weights.shape[1] def von_neumann_energy(inputs, weights): """冯诺依曼架构中每个权重都要从内存搬到处理器,搬运量巨大""" return inputs.size * weights.size def quantize(weights, bits=4): """把浮点权重量化到低比特,模拟存算一体阵列的精度约束""" max_val = np.abs(weights).max() delta = max_val / (2 ** (bits - 1)) return np.round(weights / delta) * delta def main(): np.random.seed(7) weights = np.random.rand(8, 8) - 0.5 inputs = np.random.rand(8) - 0.5 sim = CrossbarSimulator(quantize(weights, bits=4)) result = sim.compute(inputs) reference = weights @ inputs print("存算一体结果:", np.round(result, 3)) print("理想浮点结果:", np.round(reference, 3)) print("平均绝对误差:", np.round(np.mean(np.abs(result - reference)), 4)) print("冯氏搬运量:", von_neumann_energy(inputs, weights)) print("存算搬运量:", sim.energy_cost(inputs)) ratio = von_neumann_energy(inputs, weights) // sim.energy_cost(inputs) print("能效提升约:", ratio, "倍") if __name__ == "__main__": main()
class CrossbarSimulator:定义一个模拟存算阵列的类,把“会算账的书签”装进对象里outputs[j] += inputs[i] * self.weights[i, j]每个单元的“电压乘电导”就地累加到对应位线,正是欧姆定律的体现return inputs.size + self.weights.shape[1]存算一体只搬输入和结果,权重全程驻留阵列return inputs.size * weights.size冯诺依曼要把每个权重都搬一次,搬运量是两者的乘积delta = max_val / (2 ** (bits - 1))用最大权重和位宽算出量化步长,对应“切菜摆盘”的盘子大小sim = CrossbarSimulator(quantize(weights, bits=4))量化后的权重写入阵列,模拟真实芯片的精度约束reference = weights @ inputs用 NumPy 的矩阵乘作为“理想答案”做对比
常见误区
误区刚接触时,我常把“把缓存做大一点”“把内存搬到 CPU 旁边”理解为存算一体,觉得两者差不多,都是让数据少跑路。
正解两者层次完全不同。近内存计算(如扩大缓存、HBM 堆叠)只是缩短搬运距离,数据依旧要从存储读出再送进计算单元;存算一体则把乘加运算直接搬进存储单元内部,数据根本不离开阵列。好比“把图书室搬到办公室隔壁”和“让书页自己会算账”是两回事。
为何常见:因为两者都强调“减少数据移动”,初学者容易被“近数据”这个相似词误导,忽略了计算元件位置这一本质区别。
误区听说存算一体能效高,我以为将来 CPU 和 GPU 会被淘汰,所有程序都能跑在存算芯片上。
正解存算一体擅长的是矩阵乘法这类数据规整、可量化的负载,比如神经网络推理和推荐系统;而分支判断、文件系统、随机访问等不规则逻辑,仍需传统数字处理器完成。现实中常采用“存算阵列加通用核”的异构架构,就像火锅店也有后厨和微波炉。
为何常见:厂商宣传常常只强调“能效提升几十倍”,受众容易忽略这只针对特定算子,误以为通用计算也能全面加速。
误区模拟计算靠电流累加,噪声和工艺误差很大,我认为它只停留在论文里,企业根本不会量产。
正解精度问题的确存在,但工程上有一整套补偿手段:低比特量化让权重与阵列能力匹配、冗余映射加行列替换修复坏单元、读出校准消除系统偏差。而神经网络推理本身对噪声有鲁棒性,就像川菜“少许盐、差不多辣”也能端上桌。目前多家公司已量产存算一体推理芯片。
为何常见:模拟计算的“不精确”在直觉上与计算机“0/1 精确”的印象冲突,让人低估了误差的可控性和算法本身的容错能力。
误区既然叫存内计算,数据应该完全不动,带宽问题不就归零了?并发访问也不会拥挤了吧。
正解省掉的是“权重反复从内存读入计算单元”这笔最大开销,但输入特征仍需通过 DAC 写入阵列,计算结果需经 ADC 读出,阵列间通信、权重更新(训练或校准)也还要搬数据。用图书管理员打比方:书页自己会算,可你仍要翻到那一页、把题目亮出来、再誊写答案。
为何常见:“存内计算”的字面义容易让人望文生义,以为搬运彻底消失,忽视了输入输出接口和阵列间通信这些绕不开的搬运路径。
面试题
Q1. 冯诺依曼架构中“存储墙”问题指的是什么?
- A.内存容量不足导致程序无法加载
- B.数据在存储器和处理器之间搬运成为瓶颈← 正确答案
- C.硬盘读写速度太慢导致开机慢
- D.内存条物理尺寸太大占用空间
答案:B。存储墙是指处理器算力增长远超内存带宽增长,导致数据搬运速度跟不上计算速度,瓶颈不在容量而在搬运通道。就像图书管理员跑腿的速度赶不上拨算盘的速度,选项 B 准确描述了这一现象,其余选项与带宽不匹配问题无关。
Q2. 存算一体芯片最核心的设计思想是什么?
- A.提高处理器主频来加快计算
- B.在存储单元内部直接完成运算← 正确答案
- C.用更大的缓存减少访存次数
- D.用多核并行提升吞吐能力
答案:B。存算一体的本质是把计算融入存储单元,让数据不出阵列即完成乘加,对应“书页自己会算账”。提高主频、加缓存、多核并行都是在传统“搬运加计算”框架内优化,没有改变数据必须搬离存储才能计算的本质。
Q3. ReRAM 交叉阵列实现乘加的物理依据主要是?
- A.欧姆定律与基尔霍夫定律← 正确答案
- B.麦克斯韦电磁感应定律
- C.法拉第电磁感应定律
- D.楞次定律与磁场能理论
答案:A。交叉阵列中,每个单元按欧姆定律产生“电压乘电导”的电流,同一列电流按基尔霍夫电流定律自然累加,从而完成乘加。电磁感应、楞次定律描述的是磁场与感应电动势的关系,与阻变阵列的电流累加机制无关。
Q4. 下列哪些属于存算一体的主流硬件实现路线?
- A.基于 SRAM 的存内计算← 正确答案
- B.基于 ReRAM 的交叉阵列← 正确答案
- C.基于闪存的存内计算← 正确答案
- D.基于量子比特的通用计算
答案:ABC。SRAM、ReRAM、闪存都是把权重存储在单元内并在原地完成乘加的主流路线,分别对应“精致小灶、高密度大锅、实惠自助”。量子比特属于量子计算范畴,与存算一体的成熟硬件路线并列不当。
Q5. 一次 DRAM 访存的能耗大约是算术运算的多少倍?
- A.基本相当甚至还要更低
- B.高出约一到两个数量级← 正确答案
- C.高出约五到六个数量级
- D.低出大约一个数量级
答案:B。经典工程数据显示,一次从 DRAM 读取数据的能耗约为一次算术运算的 100 倍,即约两个数量级。这正是存算一体“少搬数据就是省能耗”的出发点。五到六个数量级过于夸张,基本相当或更低则与实测明显不符。
Q6. 近数据计算的核心理念可以用哪个比喻形容?
- A.把书桌搬进书库减少跑腿← 正确答案
- B.把书全部烧掉只留摘要
- C.请更多秘书并行取书
- D.把书库搬到更远的地方
答案:A。近数据计算强调让计算发生在数据所在地,就像把书桌搬进书库,省去来回跑腿的搬运开销。烧书、加秘书、搬远书库都与“数据就地计算”的核心思想背道而驰。
Q7. 存算一体芯片设计面临的主要挑战包括?
- A.模拟计算的精度损失问题← 正确答案
- B.器件良率与一致性波动← 正确答案
- C.阵列间数据流调度复杂← 正确答案
- D.完全无法执行任何乘法
答案:ABC。模拟累加引入噪声导致精度损失,器件工艺波动造成单元不一致,多阵列间如何调度数据流也是难题,这三项都是真实工程挑战。而阵列本身就是通过物理定律做乘法,选项 D 与基本原理矛盾,纯属干扰项。
Q8. 存算一体中量化权重 w_q 的计算方法是?
- A.先取整再乘回升量化步长← 正确答案
- B.直接加上随机噪声修正
- C.截断小数部分保留整数
- D.把所有权重替换成常量
答案:A。标准做法是 w_q = round(w / Δ) × Δ,先按步长就近取整再乘回,对应“切成标准盘子的菜”。选项 B、C、D 分别描述加噪、截断、常量替换,都不是规范的对称量化流程。
Q9. 交叉阵列计算 y = Wx 时,输入和输出分别用什么表示?
- A.输入电压与输出电流结合← 正确答案
- B.输入电流与输出电压结合
- C.输入频率用来表示结果值
- D.输入相位决定输出幅度
答案:A。交叉阵列中,输入特征以电压形式加在字线上,权重用电导表示,位线上汇集的电流即输出,形成“电压乘电导累加”的乘加链。调换电压电流、用频率相位表示结果,都不符合欧姆定律与基尔霍夫定律的物理工作方式。
Q10. 存算一体芯片比较适合哪些应用场景?
- A.神经网络推理加速← 正确答案
- B.边缘设备端侧智能← 正确答案
- C.数据中心大规模服务← 正确答案
- D.所有加密算法均适用
答案:ABC。神经网络推理充满规整的矩阵乘法,最契合存算阵列;边缘设备看重低功耗,数据中心看重高能效,都是典型落地场景。加密算法既不规则又高度依赖随机访问,“所有加密算法均适用”的说法过于绝对,不符合存算一体的技术边界。