想象一个大型中央厨房:主厨在案台前颠勺炒菜,食材仓库却堆在走廊尽头。每做一道菜,帮厨都要一路小跑去取肉、取菜、取调料,炒完还要把剩料送回去。菜越做越复杂,帮厨往返跑的速度成了出菜速度的硬瓶颈——主厨手艺再高也白搭。现在的计算机芯片正面临同样的尴尬:处理器像主厨一样飞快运算,但数据在内存和计算单元之间来回搬运的“跑腿成本”远远超过了计算本身。 这篇文章要讲的“存内计算”,就像把中央厨房改造成自助火锅店——食材直接摆在每张餐桌的旋转台上,边涮边吃,彻底省掉仓库与灶台之间的奔波。而实现这场改造的关键,是一种叫“忆阻器”的小元件:它像一个能记住客人辣度偏好的智能调料罐,电压一碰就改变“口味”(电阻值),断电也不忘。从发展背景到原理、器件、优化策略,我们用一顿火锅的功夫,把这场计算范式变革看得明明白白。

岗位关联

学习存内计算与忆阻器AI加速,能让你在下一代计算架构浪潮到来前建立技术直觉,为AI芯片选型、基础设施规划等工程决策提供前瞻性视野。

目录
  1. 可视化演示
  2. 1 发展背景:中央厨房的困境
  3. 2 基本原理:把厨房搬到餐桌边
  4. 3 忆阻器器件:智能调料罐
  5. 4 分类方案:不同的上菜方式
  6. 5 加速器设计:为AI定制菜谱
  7. 6 优化策略:让口味更精准
  8. 7 应用展望:未来餐桌
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示冯诺依曼瓶颈能耗对比、忆阻器交叉阵列矩阵运算机制及不同硬件能效对比,切换模式交互探索。

本节配有交互动效(进入视口后自动加载,约 3KB)。

冯诺依曼瓶颈 CPU与RAM间数据搬运耗能远超计算 搬运能耗约为计算能耗的5-10倍 存内计算消除数据搬运瓶颈 E_move≫E_compute 数据搬运成为性能与功耗的根本限制

1 发展背景:中央厨房的困境

想象一个大型中央厨房,主厨在案台前颠勺炒菜,食材仓库却在走廊尽头。每炒一道菜,帮厨都要一路小跑去取肉、取菜、取调料,炒完还要把剩料送回去。菜越来越复杂,帮厨往返跑的速度成了出菜速度的硬瓶颈——主厨手艺再高也白搭。这种“跑腿比做菜还累”的窘境,正是当下计算机芯片的真实写照。

在经典的冯诺依曼架构中,处理器负责一切运算,内存负责存储数据,两者之间靠总线传输。问题在于:处理器运算速度的增长远快于内存访问速度的增长,数据搬运成了真正的瓶颈,科学家称之为“冯诺依曼瓶颈”或“内存墙”。与此同时,摩尔定律持续放缓,晶体管微缩逼近物理极限,继续靠堆晶体管提升性能越来越不划算。而AI模型规模却在指数级膨胀,动辄数百亿参数,对算力和带宽的渴求前所未有。

还有一个更扎心的问题——能耗。每次数据搬运都要给总线电容充放电,能量以热的形式散失。业界有个粗略共识:在传统架构中,数据搬运能耗通常是实际计算能耗的数十倍甚至上百倍。对大规模AI模型来说,权重和中间结果反复搬运,造成的能耗浪费极为可观。

就像帮厨跑腿的体力消耗远超主厨颠勺的力气,只要把厨房搬到餐桌边,省下来的体力就是纯赚。存内计算,正是那个把“中央厨房”改造成“自助火锅店”的革命性方案。

Etotal=Ecompute+Edata_transfer,Edata_transfer≫EcomputeE_{\text{total}} = E_{\text{compute}} + E_{\text{data\_transfer}}, \qquad E_{\text{data\_transfer}} \gg E_{\text{compute}}
公式说明:系统总能耗等于计算能耗加上数据搬运能耗,而在传统架构中搬运能耗往往远大于计算能耗,这就是“能耗墙”的数学表达。
  1. 总能耗$E_{\text{total}}$ 表示完成一次AI推理任务消耗的总能量,等于计算与搬运两部分之和
    Etotal=Ecompute+Edata_transferE_{\text{total}} = E_{\text{compute}} + E_{\text{data\_transfer}}
  2. 计算能耗$E_{\text{compute}}$ 是处理器内部真正做运算所消耗的能量
    EcomputeE_{\text{compute}}
  3. 搬运能耗$E_{\text{data\_transfer}}$ 是数据在内存和计算单元间通过总线传输消耗的能量,占比通常超过90%
    Edata_transferE_{\text{data\_transfer}}
  4. 不等式含义当搬运能耗远大于计算能耗时,省掉搬运就意味着数量级的能耗节省——这正是存内计算登场的动力
    Edata_transfer≫EcomputeE_{\text{data\_transfer}} \gg E_{\text{compute}}

2 基本原理:把厨房搬到餐桌边

自助火锅店是怎么解决跑腿问题的?它取消了仓库和灶台的距离——食材直接码放在每张餐桌的旋转台上,伸手就能拿到,边涮边涮边吃。厨房的“存储”和“计算”融为了一体,客人不再需要等帮厨来回取料。

存内计算正是这个思路:不再让数据在内存和计算单元之间来回跋涉,而是在存储单元阵列内部直接完成计算。最常用的做法是借助模拟域的物理定律来“免费”计算——每个存储单元像变阻器一样通过电流,把同一列的单元用电线连起来,根据基尔霍夫电流定律,汇入的电流天然就是各支路电流之和,不需要额外的加法器电路。

想象一个交叉阵列:横向的字线输入电压(代表数据输入),纵向的位线收集电流(代表计算结果)。每个交叉点上有一个可编程电阻器件,其电导值代表权重。输入电压乘以电导就是电流(欧姆定律),同一列各电阻的电流自动汇合(基尔霍夫定律),正好完成了一次矩阵向量乘法。整个过程在物理上一步完成,时间复杂度不随矩阵规模增长。

旋转台上的每盘菜(输入)经客人取用后汇入锅里,一锅汤底(输出电流)自然调好了味道。物理世界的加法器,比中央厨房里的专职加法器快得多、省得多。

Ij=∑i=1nGjiViI_j = \sum_{i=1}^{n} G_{ji} V_i
公式说明:第 j 条位线收集到的总电流,等于该列所有忆阻器电导与对应输入电压乘积之和,这正是一次并行的乘累加运算。
  1. 列电流$I_j$ 表示第 j 条位线上收集到的总电流,对应输出向量的第 j 个元素
    Ij=∑i=1nGjiViI_j = \sum_{i=1}^{n} G_{ji} V_i
  2. 器件电流$G_{ji} V_i$ 是位于第 j 行第 i 列交叉点上的存储器件贡献的电流,由欧姆定律决定
    Iji=Gji×ViI_{ji} = G_{ji} \times V_i
  3. 物理求和基尔霍夫电流定律保证同一列各支路电流自动在金属线中汇合,无需数字加法器
    ∑i=1nIji\sum_{i=1}^{n} I_{ji}
  4. 映射关系若电压 $V_i$ 代表输入 $x_i$,电导 $G_{ji}$ 代表权重 $W_{ji}$,则电流 $I_j$ 就是输出 $y_j$
    yj=∑i=1nWjixiy_j = \sum_{i=1}^{n} W_{ji} x_i

3 忆阻器器件:智能调料罐

自助火锅店最神奇的,其实是那个“智能调料罐”——它内部有数十个微小的通道,电压一冲击,通道的粗细就会改变,相当于“记住”了客人上次选择的辣度,哪怕断电也不忘。下次客人再来,无需重新设置,直接就有熟悉的味道。

这个比喻对应的是忆阻器(Memristor),全称“记忆电阻器”。它的电阻值不是固定的,而是随流经它的电荷历史而变化,并且变化后能长久保持——这就是非易失特性。更关键的是,它的电阻可以连续调整到多个中间态,而不只是开/关两种状态,因此能够编码多比特的权重数据。

忆阻器的阻变机制通常依靠器件内部导电细丝的形成与断裂,或氧空位的迁移等物理过程。上下电极为金属,中间夹着氧化物介质。施加足够强的电压脉冲,会在介质中“生长”出导电细丝,电阻骤降;反向脉冲则使细丝熔断,电阻回升。通过控制脉冲的幅度和次数,可以让细丝“卡”在某个中间粗细,对应稳定的多级电阻。大量忆阻器排列成交叉阵列,就构成了存算一体的核心结构。

智能调料罐的“通道粗细”就像导电细丝,客人选了微辣、中辣还是重辣,罐子通过改变通道粗细记住口味,下次复用——这正是忆阻器存储并计算权重的方式。

V(t)=M(q(t))⋅I(t),M∈[Roff, Ron]V(t) = M(q(t)) \cdot I(t), \qquad M \in [R_{\text{off}},\, R_{\text{on}}]
公式说明:忆阻器的电压等于其忆阻值乘以电流,忆阻值由历史累计电荷决定,可在高阻与低阻之间连续调节。
  1. 忆阻欧姆定律$V(t) = M(q(t)) \cdot I(t)$ 表明忆阻器遵循欧姆定律形式,只是电阻 M 随时间变化
    V(t)=M(q(t))⋅I(t)V(t) = M(q(t)) \cdot I(t)
  2. 电荷历史$q(t)$ 是从过去到当前流经器件的累计电荷,代表器件的“记忆”状态
    q(t)=∫−∞ti(τ) dτq(t) = \int_{-\infty}^{t} i(\tau)\, d\tau
  3. 状态范围$M$ 的取值在高阻态 $R_{\text{off}}$ 与低阻态 $R_{\text{on}}$ 之间连续可调
    M∈[Roff, Ron]M \in [R_{\text{off}},\, R_{\text{on}}]
  4. 多级映射将忆阻器的稳定电阻值映射到神经网络权重值,多个中间态就是多个量化等级
    M  ↦  WM \;\mapsto\; W

4 分类方案:不同的上菜方式

自助火锅店也分派系:有的店用旋转台任意自选(模拟),有的店用固定套餐定量配给(数字),有的店把厨房挪到餐厅角落(半自助),还有的店是混合经营。存内计算同样分成几条技术路线。

第一类是模拟存内计算,直接在模拟域通过电导和电压做乘累加,效率极高,一个阵列一次操作就能算出整列输出,但受噪声和量化误差影响。第二类是数字存内计算,在存储阵列内部用布尔逻辑或数字电路完成运算,结果确定可复现,但单元面积偏大、集成密度受限。第三类是近存计算,将计算逻辑放在存储芯片旁边而非内部,实现难度较低,但仍有数据搬运开销。第四类则是混合方案,不同层级采用不同策略,兼顾效率与可靠性。

分类背后的本质是精度与效率的权衡。模拟存内计算用连续电压和电导工作,需要高性能ADC把模拟信号转回数字,ADC位数有限就引入了量化误差;数字存内计算牺牲面积换来确定性,适合对精度敏感的推理任务。

旋转台想怎么转就怎么转(模拟),套餐里的菜是一份份码好的(数字)。只要客人能忍受口味略微不精准,旋转台的效率和自由度显然更高——这正是模拟存内计算在AI推理中占据主流的原因。

Vquant=Δ⋅round(VanalogΔ),Δ=Vmax⁡2bV_{\text{quant}} = \Delta \cdot \mathrm{round}\left(\frac{V_{\text{analog}}}{\Delta}\right), \qquad \Delta = \frac{V_{\max}}{2^{b}}
公式说明:模拟信号经过量化,映射到最近的有效等级,量化步长由满量程电压除以 2 的量化位数次方决定。
  1. 模拟信号$V_{\text{analog}}$ 是忆阻器输出的连续模拟电压,包含所有细微变化
    VanalogV_{\text{analog}}
  2. 取整运算$\mathrm{round}$ 将连续值舍入到最近的离散等级,这个过程不可逆
    round(VanalogΔ)\mathrm{round}\left(\frac{V_{\text{analog}}}{\Delta}\right)
  3. 量化步长$\Delta = V_{\max} / 2^{b}$,满量程越大或位数越少,步长越大,误差越大
    Δ=Vmax⁡2b\Delta = \frac{V_{\max}}{2^{b}}
  4. 量化结果$V_{\text{quant}}$ 是最终用于计算的离散值,与原始模拟值的差就是量化误差
    Vquant=Δ⋅round(VanalogΔ)V_{\text{quant}} = \Delta \cdot \mathrm{round}\left(\frac{V_{\text{analog}}}{\Delta}\right)

5 加速器设计:为AI定制菜谱

给AI设计的存内计算加速器,就像为火锅店设计一套“自动上菜流水线”——菜谱(权重)提前摆在旋转台上固定好,顾客(输入数据)落座即涮,出菜(推理结果)又快又稳。后厨只需要在入口安排一个点菜员(DAC),出口安排一个摆盘师(ADC)。

AI推理的核心操作是矩阵向量乘法。在存内计算加速器中,神经网络权重 W 被“烧录”成忆阻器阵列的电导 G,输入向量 x 经DAC编码为输入电压 V,输出电流 I 经ADC转换回数字信号,就是输出向量 y。整个乘累加过程在模拟域一步完成,耗时与矩阵尺寸基本无关,这是传统数字电路难以企及的并行度。

外围电路同样关键。输入端需要DAC将数字数据转换为电压脉冲,输出端需要ADC将模拟电流还原为数字结果,控制逻辑负责各层调度。这些外围接口的能耗和面积称为“外围开销”,往往决定系统级能效。此外,由于忆阻器电导只能为正,负权重需要拆分为正负两个子阵列做差分运算;偏置项 b 通常在读出端用电流源或数字加法实现;非线性激活函数则在阵列外的数字域完成。

菜谱(权重)提前预制在旋转台上,客人点菜(输入)一到,锅底即刻生成(输出电流),后厨(外围电路)只做最后的摆盘。整套流水线完全为AI推理的高吞吐量而设计。

yj=∑i=1nWjixi+bj  ⟷  Ij=∑i=1nGjiViy_j = \sum_{i=1}^{n} W_{ji} x_i + b_j \;\longleftrightarrow\; I_j = \sum_{i=1}^{n} G_{ji} V_i
公式说明:神经网络线性层的数学运算,与交叉阵列中电流等于电导乘电压之和的物理规律,在形式上完全同构。
  1. 数学目标$y_j = \sum_{i=1}^{n} W_{ji} x_i + b_j$ 是神经网络线性层的定义式
    yj=∑i=1nWjixi+bjy_j = \sum_{i=1}^{n} W_{ji} x_i + b_j
  2. 物理映射电导 $G_{ji}$ 映射权重 $W_{ji}$,电压 $V_i$ 映射输入 $x_i$,电流 $I_j$ 映射输出 $y_j$
    Wji↔Gji,xi↔Vi,yj↔IjW_{ji} \leftrightarrow G_{ji}, \quad x_i \leftrightarrow V_i, \quad y_j \leftrightarrow I_j
  3. 偏置项偏置 $b_j$ 不在阵列内计算,通常在读出端加一个恒定电流补偿
    Ij+bjI_j + b_j
  4. 激活函数非线性激活在阵列外数字域执行,阵列只负责线性乘累加部分
    aj=σ(Ij+bj)a_j = \sigma(I_j + b_j)

6 优化策略:让口味更精准

智能调料罐虽好,但偶尔也会手抖:电导漂移、温度波动、ADC取整,都会让口味偏咸或偏淡。火锅店的大厨们总结了几套“补救技巧”,让味道尽可能稳定。

首先是正负矩阵分解——忆阻器电导只能为正,而神经网络权重有正有负,于是将权重矩阵拆成两个非负矩阵之差,分别映射到两个子阵列,再将两条位线的电流差分读出,即可表示正负权重。其次是脉冲幅值调节——输入不再用单一电压,而是用一组脉冲,通过调节脉冲幅度或宽度来提高有效精度。误差补偿纠偏针对器件非理想性,在训练阶段注入噪声模拟硬件误差、在推断阶段做定标修正。混合精度配置则是“好钢用在刀刃上”:对敏感层使用较多量化位,对冗余层减少位数,在精度和能效间取得平衡。

这些策略的共同目标,是让“物理计算”逼近“理想计算”。实际部署中通常将权重按层统计分布做定标,并周期性刷新电导来抑制漂移。

智能调料罐只能加料不能减料,那就准备两罐——一罐加辣一罐降辣,两个罐子同时出料,两股味道一抵,刚好还原客人要的“微辣”。这就是正负矩阵分解的精髓。

W=W+−W−,W+=max⁡(W,0),W−=max⁡(−W,0)W = W_{+} - W_{-}, \qquad W_{+} = \max(W, 0), \quad W_{-} = \max(-W, 0)
公式说明:任意有符号权重矩阵都可以分解为两个非负矩阵之差,是解决忆阻器只支持正电导的标准方法。
  1. 权重分解任意有符号矩阵 $W$ 都可写成两个非负矩阵 $W_{+}$ 与 $W_{-}$ 的差
    W=W+−W−W = W_{+} - W_{-}
  2. 正部矩阵$W_{+} = \max(W, 0)$ 只保留正权重元素,负元素置零
    W+=max⁡(W,0)W_{+} = \max(W, 0)
  3. 负部矩阵$W_{-} = \max(-W, 0)$ 把负权重取绝对值后保留
    W−=max⁡(−W,0)W_{-} = \max(-W, 0)
  4. 差分读出两个子阵列的输出电流相减,即可恢复有符号的乘法结果
    Iout=I+−I−I_{\text{out}} = I_{+} - I_{-}

7 应用展望:未来餐桌

自助火锅模式已经在本店跑通,下一步自然是开分店——写字楼下的十元快餐(边缘端)、中央厨房的宴会(云端)、还有为量子料理做准备的“分子料理实验室”(量子协同)。

边缘AI推理是存内计算的最佳切入点:智能手机、智能耳机、物联网传感器对功耗极其敏感,存内计算在低负载下也能保持极高能效,原生支持“常开”AI功能。云端侧重训练辅助和超大模型推理加速,存内阵列作为可重构加速模块与GPU共存,把反复落盘的矩阵乘法卸载下来。再看更远处,存内计算的模拟运算理念与量子计算的线性代数操作有天然的亲和性,可用于量子线路经典模拟的加速。

但产业化挑战依然明显:忆阻器工艺成熟度、器件一致性、可量产性尚未完全解决;EDA工具链、编译器和深度学习框架支持不足;缺乏统一标准。每一项都是需要产业界长期攻关的硬骨头。

自助火锅从咖啡馆开到中央厨房,能不能成为未来餐饮主流,还得看“智能调料罐”的良品率是否过硬——技术成熟度,是所有新范式跨越产业化的共同关口。

S=tvontcim=tcompute+ttransfertcompute=1+ttransfertcomputeS = \frac{t_{\text{von}}}{t_{\text{cim}}} = \frac{t_{\text{compute}} + t_{\text{transfer}}}{t_{\text{compute}}} = 1 + \frac{t_{\text{transfer}}}{t_{\text{compute}}}
公式说明:存内计算的加速比等于传统架构总耗时除以存内架构耗时,传统架构中搬运时间占比越高,加速效果越显著。
  1. 加速比定义$S$ 表示同一任务在传统架构与存内架构上的耗时比
    S=tvontcimS = \frac{t_{\text{von}}}{t_{\text{cim}}}
  2. 传统耗时$t_{\text{von}} = t_{\text{compute}} + t_{\text{transfer}}$,包含实际计算和数据搬运两步
    tvon=tcompute+ttransfert_{\text{von}} = t_{\text{compute}} + t_{\text{transfer}}
  3. 存内耗时$t_{\text{cim}}$ 近似等于 $t_{\text{compute}}$,因为搬运时间趋近于零
    tcim≈tcomputet_{\text{cim}} \approx t_{\text{compute}}
  4. 极限意义$S = 1 + t_{\text{transfer}} / t_{\text{compute}}$,搬运占比越高,加速比越大
    S=1+ttransfertcomputeS = 1 + \frac{t_{\text{transfer}}}{t_{\text{compute}}}

AI 应用场景

边缘AI推理加速

阶段:部署与推理

解决的问题:传统边缘设备执行AI推理时,需要频繁将权重从内存搬运到处理器,电池损耗快且延迟高。存内计算让权重常驻在忆阻器阵列中,矩阵运算在存储内部就地完成,能耗可降低一到两个数量级。

具体案例:一款智能手表需要实时识别手势。传统方案每毫秒搬运约1MB权重数据,电池数小时即告急;改用存内芯片后,手势推理权重预先“烧录”在阵列中,输入传感器特征向量即可在微秒内得到结果,续航提升数倍。

云端大模型推理加速

阶段:模型推理与服务

解决的问题:大语言模型在云端推理时,权重交互动辄数百GB,GPU的HBM带宽成为瓶颈。存内计算作为协处理器将反复使用的权重常驻,大幅降低数据搬运压力。

具体案例:某云厂商部署存内计算加速卡用于BERT类模型批量推理,实验显示在相同精度下每请求能耗降低约60%,吞吐量提升约40%,有效缓解了GPU集群的供电压力。

科学计算中的矩阵运算加速

阶段:模型训练或数值模拟

解决的问题:科学计算常包含大规模矩阵乘法,传统架构既耗时又耗电。存内计算在模拟域原生完成乘累加,能大幅加速这类规律性强、数据量大的线性代数运算。

具体案例:某气象模拟项目求解线性方程组时,将系数矩阵映射到忆阻器阵列,每次迭代的矩阵向量乘在纳秒级完成,整体迭代收敛速度提升数十倍,为实时预报争取了宝贵时间。

Python 演示

python39 行
import numpy as np  def cim_quantize_weight(weight, bits=4):    """将权重映射到忆阻器电导后量化,再反映射回权重域"""    w_max = np.abs(weight).max()    # 权重归一化到[0,1],对应忆阻器电导可调范围    g_norm = (weight + w_max) / (2 * w_max)    # 忆阻器电导仅支持有限级(受工艺精度限制)    levels = 2 ** bits    g_quant = np.round(g_norm * (levels - 1)) / (levels - 1)    # 量化电导反映射回权重值    return g_quant * 2 * w_max - w_max  def crossbar_mvm(weight, input_vec, bits=4):    """存内计算交叉阵列矩阵向量乘: I = G @ V"""    w_quant = cim_quantize_weight(weight, bits)    # 基尔霍夫定律:输出电流等于电导矩阵乘以输入电压向量    return w_quant @ input_vec, w_quant  def main():    np.random.seed(42)    weight = np.random.uniform(-1, 1, (4, 3))    x = np.random.uniform(-1, 1, 3)     y_ideal = weight @ x    y_cim, w_quant = crossbar_mvm(weight, x, bits=4)    # 对比理想浮点结果与存内计算量化结果    err = np.mean(np.abs(y_ideal - y_cim))    print("理想矩阵乘:", np.round(y_ideal, 4))    print("存内计算:  ", np.round(y_cim, 4))    print("平均绝对误差:", np.round(err, 4))    print("权重最大偏差:", np.round(np.abs(weight - w_quant).max(), 4))  if __name__ == "__main__":    main()
目的:用Python仿真存内计算交叉阵列执行矩阵向量乘的全过程,直观展示忆阻器有限电导级数带来的量化误差。
  1. def cim_quantize_weight(weight, bits=4):定义权重量化函数,模拟忆阻器只有有限电导等级的现实约束
  2. g_norm = (weight + w_max) / (2 * w_max)将有符号权重线性映射到[0,1]电导区间,让负权重也能被正电导表示
  3. levels = 2 ** bits计算量化等级数,4bit对应16级电导状态,bit越多精度越高
  4. g_quant = np.round(g_norm * (levels - 1)) / (levels - 1)将连续电导值舍入到最近的有效级,模拟器件精度限制
  5. return w_quant @ input_vec, w_quant矩阵乘法的本质就是基尔霍夫定律的电流求和,一行代码完成并行乘累加
  6. err = np.mean(np.abs(y_ideal - y_cim))计算理想结果与存内计算仿真的平均绝对误差,量化精度评估的标准做法

常见误区

误区听说存内计算后,以为芯片里不再需要传统处理器,所有计算都在存储阵列中完成,CPU从此可以淘汰。

正解实际上存内计算主要负责高耗能的规则运算(如矩阵乘法),而数据流控制、复杂逻辑分支、非线性激活函数等仍由数字逻辑或传统处理器完成。更准确的说法是“计算与存储深度融合”,而不是完全取代CPU。类比自助火锅店,食材在桌面涮好,但点单系统、排风系统还是需要专门的后台来管理。

为何常见:存内计算宣传语强调“消除数据搬运”,容易让初学者误解为所有计算任务都搬进存储,忽略了控制逻辑仍然存在的现实。

误区觉得忆阻器和普通晶体管一样只有通/断两种状态,每个器件只能存1bit信息,跟Flash存储没什么区别。

正解忆阻器的核心优势恰恰是多级连续可调。通过精确控制导电细丝的粗细或氧空位浓度,可以实现16、32甚至更高数量的稳定电导态,对应4-6bit甚至更高的权重精度。当然级数受噪声和漂移限制,但绝不是只有两种状态。

为何常见:人们习惯了数字世界的"0/1"二元模型,而忆阻器本质是模拟器件,连续可调的特性反而不容易被初学者接受。

误区认为存内计算既然能跑神经网络矩阵乘法,结果一定与IEEE浮点计算完全一致,部署时无需考虑精度问题。

正解模拟域运算天然存在量化误差——ADC位数有限、电导级数有限、器件电导漂移、温度波动,都会让计算结果偏离理想值。实际部署通常需要重新训练或定标补偿,或者采用混合精度策略,保证关键层精度不下降。

为何常见:论文中的演示为了美观常用理想化模型,忽略模拟电路的非理想性,导致读者误以为物理计算是完美无误差的。

误区认为存内计算只能加速神经网络推理,别的领域用不上,是一项“偏科”的技术。

正解存内计算本质是加速矩阵乘法和密集线性代数运算,因此图像滤波、优化求解、科学计算中的迭代求解器同样受益。AI只是最大的驱动场景,而非唯一应用。就像旋转台火锅既能涮肉也能涮菜,核心是“就地加工”这个模式的价值。

为何常见:大量存内计算的学术论文都以神经网络分类作为演示任务,容易让人形成“只会做AI”的刻板印象。

误区看到媒体渲染的“新范式革命”,以为存内计算芯片明年就会全面取代GPU和CPU,进入所有数据中心。

正解工程化还面临器件良率、一致性、可靠性、EDA工具链、编译器支持等多重障碍。当前处于原型到早期商用阶段,主流数据中心短期仍是GPU/TPU的天下,存内计算更多以协处理器身份逐步渗透。

为何常见:学术新闻的乐观宣讲与产业落地的漫长周期之间存在信息差,读者容易把实验室成果等同于成熟产品。

面试题

Q1. 冯诺依曼瓶颈指的是什么?

单选题 · easy

  • A.中央处理器运算频率太低
  • B.数据在存算单元间搬运成瓶颈← 正确答案
  • C.主存储器容量严重不足
  • D.编译优化技术仍未成熟

答案:B。冯诺依曼瓶颈指处理器与存储器之间的数据搬运速率远低于处理器运算速率,大量时间和能耗浪费在“跑腿”上。选项A是处理器本身慢,属于因果颠倒;C容量短缺是容量问题而非速率问题;D编译优化只能缓解不能根治。故选B。

Q2. 存内计算的核心思想是什么?

单选题 · easy

  • A.在存储单元内部直接完成计算← 正确答案
  • B.仅增加内存带宽而不改架构
  • C.用软件预取减少缓存缺失
  • D.提高主频与流水线级数

答案:A。存内计算把计算融入存储阵列,利用物理定律就地完成运算,省去数据搬运。B只是加带宽治标不治本;C是软件层面的缓存优化;D是传统处理器性能路线,都未改变“计算与存储分离”的根本架构。故选A。

Q3. 忆阻器的关键特性是什么?

单选题 · mid

  • A.电阻随通电史改变且断电保持← 正确答案
  • B.电阻值恒定只读不可重写
  • C.只能存储单个二进制比特
  • D.必须持续供电才能记忆

答案:A。忆阻器的电阻随流经电荷的历史变化并能保持,断电不丢,这就是“记忆电阻”的含义。B只读与忆阻器可重复擦写矛盾;C它支持多级电阻态而非仅1bit;D非易失特性恰恰不需要持续供电。故选A。

Q4. 存内计算相比传统冯诺依曼架构的优势包括哪些?

多选题 · mid

  • A.降低数据搬运的能耗开销← 正确答案
  • B.天然支持大规模并行乘加← 正确答案
  • C.彻底消除量化带来的误差
  • D.无需任何外围辅助电路

答案:AB。存内计算让数据就地处理,大幅减少搬运能耗(A);阵列中所有交叉点同时参与乘累加,具备天然并行性(B)。但模拟域运算有量化误差,无法“彻底消除”(C错);DAC/ADC等外围电路仍然必要(D错)。故选AB。

Q5. 交叉阵列执行矩阵向量乘法的物理基础是?

单选题 · mid

  • A.欧姆定律与基尔霍夫电流定律← 正确答案
  • B.牛顿第三定律与动量守恒
  • C.法拉第电磁感应与楞次定律
  • D.热力学第二定律与熵增原理

答案:A。每个交叉点上电流由欧姆定律(I=GV)决定,同一列电流由基尔霍夫电流定律自动汇合,二者共同构成矩阵乘法的物理实现。B是力学定律,C是电磁感应,D是热学定律,都与交叉阵列的电流求和无关。故选A。

Q6. 正负权重矩阵分解(W=W+−W−)解决的典型问题是?

单选题 · mid

  • A.忆阻器电导只能取非负值← 正确答案
  • B.提升ADC采样速率上限
  • C.压缩权重矩阵存储空间
  • D.降低外围电路的供电电压

答案:A。忆阻器电导物理上只能为正,而神经网络权重有正有负,因此拆成两个非负矩阵分别映射到两个子阵列,再差分读出。B采样速率是ADC指标,与权重符号无关;C分解反而增加面积,不压缩空间;D供电电压与正负表示无直接关系。故选A。

Q7. 存内计算加速器输出精度受限的硬件原因有哪些?

多选题 · hard

  • A.忆阻器电导级数有限限制权重精度← 正确答案
  • B.模数转换器量化环节引入噪声← 正确答案
  • C.器件电导随使用时间发生漂移← 正确答案
  • D.外围电路的接口协议不兼容

答案:ABC。精度损失根源在器件与电路物理特性:电导级数有限使权重只能取离散值(A),ADC有限位数把连续电流舍入为数字(B),电导漂移让已写入的权重缓慢偏离(C)。D是工程互操作问题,不直接影响单个输出的数值精度。故选ABC。

Q8. 数字存内计算与模拟存内计算的核心区别是什么?

单选题 · easy

  • A.模拟域做连续运算数字域做布尔运算← 正确答案
  • B.模拟方式只用电压数字方式只用电流
  • C.一个速度快一个存储密度高
  • D.两者本质相同没有区别

答案:A。模拟存内计算在模拟域用连续电导和电压做乘累加,数字存内计算在存储阵列内用布尔逻辑做离散运算。B两者都同时使用电压和电流,划分方式错误;C快慢和密度差异是结果而非本质;D显然错误。故选A。

Q9. 混合精度配置策略的核心思路是什么?

单选题 · hard

  • A.关键层高精度冗余层低精度← 正确答案
  • B.所有层统一采用最高精度
  • C.所有层统一采用最低精度
  • D.仅输入端做高精度截断

答案:A。混合精度策略识别网络中对误差敏感的关键层(如分类层)使用较高量化位,对冗余层(如部分卷积层)使用低位数,在整体精度几乎不变的前提下提升能效。B和C都是统一精度,D只处理输入截断。故选A。

Q10. 某团队设计存内计算加速器,以下哪些设计决策有助于缓解外围电路开销?

多选题 · extreme

  • A.增大阵列规模摊薄DAC数量开销← 正确答案
  • B.在阵列内部复用输出减少数据转换← 正确答案
  • C.将激活函数集成到阵列内数字块← 正确答案
  • D.沿用传统逐层全精度映射流程

答案:ABC。外围开销指DAC/ADC和控制逻辑的能耗面积代价。增大阵列让更多权重共享同一套DAC(A对);输出复用减少转换次数(B对);激活做进阵列内数字块可减少外部数据往返(C对);D沿袭全精度逐层映射会增加外围负担(D错)。故选ABC。