在水城,往农田送水历来有两种方式:一种是拎水桶——把水装进标准容器,一桶一升,账房先生数得明明白白,可伙计们跑断腿;另一种是架水管——拧开阀门,水流源源不断、粗细随心,速度快得惊人,却没人能精确说出“这一秒流过多少升”。老周管着全城的灌溉调度,他渐渐意识到:水桶是数字,水管是模拟。更要紧的是,他发明了一套“让水闸自己算账”的办法——把配水手册直接刻在闸门上,水一开,结果就自己流出来了。这就是模拟计算与存内计算的故事:用连续的物理量(水位、电流、电导)直接表达数值和运算,把存储与计算融进同一个物理器件。SRAM 像精密的旋钮阀门,RRAM 像能被水流“记住形状”的记忆合金闸门。本文就用这套水城的语言,带你从零走进模拟计算的灌溉世界。
理解模拟计算是读懂 AI 芯片底层原理的钥匙。掌握它,你就能看懂“存算一体”时代的技术选型、评测指标与精度权衡,为设计低功耗 AI 系统打下根基。
可视化演示
展示RRAM交叉阵列模拟乘加电路(电压V→电导G→电流I=ΣG·V)、im2col卷积映射与脉冲编码算法、以及模拟vs数字计算在能效(10fJ vs 1000fJ/100x)、TOPS、精度(6bit vs 16bit)上的对比与三大工程挑战(失配/温漂/噪声)。
本节配有交互动效(进入视口后自动加载,约 3KB)。
RRAM交叉阵列模拟乘加 行波导施加输入电压V_i,RRAM单元电导G_ij编程为权重,电流I_j=ΣG_ij·V_i物理求和完成MAC 吉尔伯特乘法器(gm)实现V→I跨导转换,物理定律一步完成运算无需时钟驱动 I_j=Σ_i G_ij·V_i 模拟计算利用连续物理量直接运算,物理过程即计算
模拟计算概述
在水城,往农田送水有两种方式。第一种是拎水桶:每桶刚好一升,伙计们一桶一桶拎到田里,桶数清清楚楚,可速度慢、人累;第二种是架水管:拧开总阀门,水流源源不断、粗细随心,没人能精确说出“这一秒流过多少升”。老周过去一直用水桶,因为账房先生只认整数。可眼看水田越来越多,他不得不认真打量起那根令人生畏又令人心动的水管。
数字计算就是拎水桶:用 0 和 1 编码一切数值,一位一位搬、一位一位算。模拟计算则是水管:直接让电压、电流等连续物理量表达数值大小,运算就发生在物理规律里——两个电流在节点交汇处自然相加,不需要加法器;水闸开度乘以水流,乘积就体现在流量上,不需要乘法器。神经网络里最频繁的“权重乘输入再加和”,恰恰是物理世界最擅长的事。
以第 j 个输出神经元为例,它要算的是一次加权求和:
1. 输出分量:等式左边 y_j 表示第 j 个神经元的输出,对应水城第 j 条干渠最终获得的水量。
2. 累加求和:符号 Σ 表示把 i 从 1 到 n 的所有项加在一起,对应各条支渠汇入干渠的水流之和。
3. 权重与输入:W_ji x_i 是第 i 路输入与权重的乘积,对应“第 i 条支渠的水速 × 水闸开度”。
数字水桶要雇无数伙计来回拎,模拟水管却让水自己流、自己在渠口相遇、自己相加。明白这一点,就抓住了模拟计算乃至存内计算的灵魂:让物理规律替我们算,而不是让电路模仿人类一步一步地算。
存内计算原理
老周发现,即便换了水管,配水手册还锁在中央档案室里。每次调配水量,伙计们先要去档案室抄录各田配比,送回调度室核算,再拿着命令去拧阀门。这一来一回,路上跑死马,账房算秃头。这正是计算机领域的“冯·诺依曼瓶颈”:数据在存储器和计算单元之间反复搬运,既耗能又耗时,速度被“跑腿”卡死。
存内计算(存算一体)的回答是:把配比直接刻在水闸上。每条支渠的水闸开度就是权重,水一开,乘累加自动完成,结果沿着干渠直接流向下游。存储单元本身变成了计算单元,“档案室”与“调度室”合二为一,数据再也不出远门。这既是存储与计算的物理融合,也是模拟计算最经典的舞台。
硬件上,最经典的实现是交叉阵列(crossbar):横线是输入行,竖线是输出列,每个交叉点是一个存储器件(SRAM 单元或 RRAM 器件),其状态代表权重。输入电压沿行线送入,电流穿过器件后在列线汇流。依据基尔霍夫电流定律,列线上的电流恰好是所有行输入的加权和:
1. 输出电流:I_j 是第 j 条列线上的总电流,即第 j 个输出的模拟量表达,对应第 j 条干渠的总水量。
2. 器件电导:G_ij 是交叉点器件的电导(电阻的倒数),对应水闸开度,用来存储权重。
3. 输入电压:V_i 是第 i 行输入的电压,对应第 i 条支渠的水压。
4. 基尔霍夫汇流:求和表示所有行的电流在同一条列线上自然叠加,无需额外加法器。
这样,一次矩阵向量乘法在一瞬间“流”完,效率堪比大水漫灌整片梯田。SRAM 与 RRAM 正是两种不同材料打造的“水闸”,接下来我们分别登门拜访。
SRAM计算单元
SRAM 水闸像精密旋钮阀门:用电压信号驱动,能高速开合,坏处是必须持续通电维持状态,一断电开度就丢了(易失性)。它的最小单元叫 6T 单元——六个晶体管组成一对互相咬合的反相器齿轮,牢牢记住 0 或 1。由于单单元只存一位,多位权重需要若干单元拼合,电流域、电荷域各有分工。
在 SRAM 存内计算里,权重通常以多位二进制形式存在多个单元中。电荷域像“预蓄水”:先把输入电压加载到位线上,让电荷按比例分配共享;电流域像“分流”:让位线放电,放电电流由存储值控制,各路电流在列线上叠加。两种方式都把“加法”交给物理汇流,“乘法”交给电荷或电流的比例关系。
电荷域的累加可用电荷守恒描述——多个电容上的电荷汇入一个总电容,输出电压是各支路电压的加权平均:
1. 输出电压:V_out 表示累加电容上的最终电压,对应汇水池最终的水位读数。
2. 电荷加权:C_i V_i 是第 i 个单元贡献的电荷量,电荷好比“水分子总数”,电容好比“水桶容积”。
3. 总电容归一:除以总电容 C_tot 相当于把多桶水倒进一个大池子后测量水位。
SRAM 旋钮虽好,但断电就“失忆”,而且六个晶体管占面积大。于是人们开始寻找能“记住开度”的非易失阀门——RRAM 登场了。
RRAM计算单元
RRAM 水闸像一块“记忆合金”:大电流如洪峰冲过闸门,改变内部导电细丝的形状,冲得越狠开度越大;断电后开度依然保持(非易失)。要改配比就再冲一次。RRAM 两端的电阻可被编程为不同阻值,而电导值(电阻的倒数)正好对应权重——这是它与 SRAM 最本质的分工差异。
SRAM 存的是“0/1 挡位”,需多单元拼一个权重;RRAM 的模拟电导可以直接表达连续权重,一个器件就是一个权重,这让 RRAM 在单位面积密度上更有优势。当然,导电细丝每次冲刷的粗细总有随机起伏,多比特状态也不够稳定,像是被泥沙反复修改的闸门——这个缺点我们留到优化策略一节再治。
计算时,输入电压加载在器件两端,依据欧姆定律,流过器件的电流等于电导乘以电压:
1. 单器件电流:I_i 是流过第 i 个 RRAM 器件的电流,代表这一路的加权结果。
2. 电导即权重:G_i 是器件当前的电导,由编程时导电细丝的粗细决定,对应闸门开度。
3. 电压即输入:V_i 是加在器件两端的输入电压,对应上游水压。
4. 欧姆定律:I = G·V 是欧姆定律的体现,电导是电阻的倒数,开度越大水流越畅。
RRAM 能“记住”开度,却记不太准,每一次冲刷都会留下随机的痕迹。好在后文的校准与冗余策略,能让这块“记性不好”的闸门将功补过。
信号转换环节
外界与水城打交道需要两道翻译:调度室的纸质命令(数字 0/1)要被翻译成水闸开度(模拟电压),这叫数模转换 DAC;测水员要把干渠水位读数登记成数字报表,这叫模数转换 ADC。没有这两道翻译,模拟水城就无法与外面的数字世界对接。每次模拟乘法运算前,数字输入经 DAC 变成电压;运算结束,列电流经 ADC 变回数字。
DAC 的位数决定输入细腻度:位数越多,电压分得越细,就像尺子刻线越多量得越准。ADC 的位数则决定输出读数精度。以 DAC 为例,N 位数字 D 被转换成满量程电压的对应分数:
1. 输出模拟电压:V_out 是 DAC 输出的电压,用来驱动后续的模拟计算阵列。
2. 满量程参考:V_ref 是参考电压,对应水表的满刻度,是转换的“标准尺”。
3. 数字编码:D 是 N 位二进制数对应的整数值,范围从 0 到 2^N − 1。
4. 分辨率分母:2^N 表示把满量程细分为 2^N 格,N 越大格子越细,量化误差越小。
翻译环节是模拟水城的“度量衡”,也是误差的重要来源:测水员尺子刻度有限,读出的水位总带舍入误差。这正是下一节要算的账。
性能特性分析
老周的实验田试运行一个月后,账房先生摆出三本账:能效、吞吐、精度。好消息是,送水再也不雇跑腿伙计,一次矩阵运算就是“大水漫灌”,能耗与延时大幅下降;坏消息是,测水员汇报的数字总与理论值差一点点。模拟存内计算的能效优势来自两点:消除数据搬运、物理并行。
传统数字方案做矩阵乘法,需要从内存反复搬数据、逐个乘加;模拟存内计算让乘累加在阵列里一次“流”完,能效可提升两到三个数量级,吞吐量同步大涨。代价是精度损失:权重量化、DAC/ADC 转换、器件噪声、工艺偏差都会引入偏差。相对误差是常用的度量:
1. 理想结果:Wx 是数学上精确的矩阵向量积,对应账房先生心算的标准答案。
2. 模拟结果:Ŵx̂ 是经过量化、转换、噪声后的实际结果,对应测水员的实测报表。
3. 向量范数:‖·‖ 表示向量长度,把所有分量的误差“拧成一股绳”来度量。
4. 相对误差:分子除以分母得到无量纲比值,让不同规模的问题可在同一把尺子上比较。
精度损失虽是模拟计算的“阿喀琉斯之踵”,但水城自有对策:闸门老化就校准、怕读数不准就多装几根尺子、重要灌区就用粗细双管。这正是下一节要讲的优化策略。
优化策略方案
水闸用久了会泥沙淤积,开度偏了;测水员眼睛也会花。老周的经验浓缩成三个字:校、冗、混。校是定期校准每扇闸门,冗是对关键闸门做双备份取平均,混是重要农田用精细的细水管(高精度)、普通农田用粗水管(低精度)。对应到存内计算,就是校准补偿、冗余映射、混合精度三大法宝。
校准补偿:先测量每个器件的实际电导,建立一张“真实权重表”,再在软件里补偿偏差,相当于给每扇闸门记一张“偏了多少”的小抄。冗余映射:让多个 RRAM 器件共同表示一个权重,读取后取平均,抑制单器件的随机噪声。混合精度则按数据敏感性分配资源。
混合精度常见实现之一是“位切片”:把一个高精度权重拆成 B 张不同权重的位平面,分别做模拟计算后再按二进制权重合并:
1. 权重拆分:W 表示一个高精度权重,被拆分成 B 份(B 个位平面)。
2. 位平面权重:W^(k) 是第 k 个位平面上的权重,只含 0/1 或小幅值,对应一层薄水板。
3. 二进制加权:2^{-k} 是第 k 位的权值,k 越小权重越大,像水板层数越厚贡献越大。
4. 加权求和:把所有位平面的贡献按权叠加,恢复出完整权重。
此外还有“算法协同设计”:训练阶段就引入低比特噪声,让模型变得“皮实”,推理时即使模拟计算有偏差也能正常工作。水城由此开出了既省水又保收成的双赢药方。
应用与展望
水城的经验很快传遍四方:偏远农场没有中央调度室,靠自给自足的闸门就地计算;大灌区要靠它省下海量跑腿成本。存内计算也找到了同样的舞台——凡是被矩阵乘累加主宰的地方,都有它大显身手的空间。
当前最成熟的应用是神经网络推理:卷积、全连接、注意力机制本质上都是矩阵运算,模拟存内计算的乘累加效率让它在低功耗边缘 AI 中大放异彩。面向未来,模拟的连续表达天然贴合量子态与神经形态计算的“模糊美学”——量子 AI 与未来计算都把连续物理量当作第一公民,存内计算的交叉阵列或许正是连接经典与量子的一座水桥。
从能效账本看,一个模拟存内计算系统的总能耗可以拆成三笔开销:
1. 总能耗:E_total 是整个模拟存内计算系统的总能耗,对应水城的总耗水量。
2. 乘累加能耗:E_MVM 是阵列中模拟乘累加消耗的能量,这是存内计算的“主业”,效率极高。
3. DAC 能耗:E_DAC 是数模转换开销,输入数据越多、位数越高越昂贵。
4. ADC 能耗:E_ADC 是模数转换开销,通常随精度位数增加而近似指数增长。
老周站在水城的最高处,看着细流汇入干渠、干渠奔向田野。他知道,真正的变革不是把水桶换成了水管,而是让水自己学会了算账——而这场灌溉革命,才刚刚开始。
AI 应用场景
智能耳机的始终在线唤醒词检测
阶段:推理部署(边缘端)
解决的问题:智能耳机待机时需 7×24 小时监听唤醒词,传统数字芯片反复搬运矩阵运算数据,功耗高到电池无法承受。模拟存内计算把唤醒词检测所需的乘累加放进 SRAM 阵列一次“流”完,消除搬运开销。
具体案例:某可穿戴厂商将小规模 SRAM 存内计算宏嵌入耳机主控,唤醒词检测功耗从毫瓦级降至微瓦级,续航提升近 4 倍;同时用 ADC 的低位数设计换取更低功耗,配合训练时注入量化噪声,唤醒准确率几乎无损。
电商推荐系统的向量召回加速
阶段:在线推理(数据中心)
解决的问题:推荐系统每秒要处理上亿次“用户 × 物品”的相似度计算,本质是海量矩阵乘累加;传统方案中访存能耗占总能耗六成以上。RRAM 存内计算把相似度权重映射到交叉阵列,用位切片混合精度执行。
具体案例:某电商平台实验性部署 RRAM 存内计算加速卡,将召回阶段向量检索吞吐提升 5 倍,单次推理能耗下降 70%;通过校准补偿与冗余映射,精度损失经重训练后控制在 0.3% 以内。
工业产线的实时视觉缺陷检测
阶段:模型训练与推理协同
解决的问题:产线质检要求实时处理高分辨率图像,传统方案要么精度高但慢,要么快但精度低。借助“算法协同设计”,在训练时模拟模拟器件的噪声与量化,让卷积网络对模拟误差天然鲁棒,再用存内计算加速卷积层。
具体案例:某面板厂将混合精度 SRAM 存内计算用于 AOI 光学检测,卷积层运算迁移至存内计算宏,单帧处理延时从 120ms 降至 35ms,漏检率不升反降,产线节拍因此提升了近一倍。
Python 演示
import numpy as np def quantize(x, levels): """把连续值量化到 levels 个档位,模拟 RRAM 电导档位""" x = np.clip(x, 0.0, 1.0) idx = np.round(x * (levels - 1)) return idx / (levels - 1) def write_read(weights, trials=1, noise_std=0.06): """模拟 RRAM 写入噪声:多次写入读取,trials=1 为单次""" noise = np.random.normal(1.0, noise_std, (trials,) + weights.shape) reads = weights * noise if trials == 1: return reads[0] return np.median(reads, axis=0) def analog_mvm(weights, inputs, w_bits=4, adc_bits=6): """模拟存内计算完整链路:权重量化 -> 电流累加 -> ADC 量化""" w_q = quantize(weights, 2 ** w_bits) # 权重映射为电导档位 x_q = quantize(inputs, 16) # 输入 DAC 量化 out = w_q @ x_q # 交叉阵列电流汇流 v_max = max(float(np.max(out)), 1e-9) step = v_max / (2 ** adc_bits) # ADC 量化步长 out_adc = np.round(out / step) * step return out_adc, w_q, out def bit_sliced_mvm(weights, inputs, w_bits=4): """位切片混合精度:把权重按二进制位拆成多张平面计算后合并""" levels = 2 ** w_bits w_idx = np.round(weights * (levels - 1)).astype(int) total = np.zeros(weights.shape[0]) for k in range(w_bits): plane = ((w_idx >> k) & 1).astype(float) total += (2 ** k / (levels - 1)) * (plane @ inputs) return total def main(): np.random.seed(42) W = np.random.rand(4, 4) # 理想权重矩阵 x = np.array([0.2, 0.5, 0.8, 0.3]) # 输入向量 ideal = W @ x print("理想输出:", np.round(ideal, 4)) out_adc, w_q, _ = analog_mvm(W, x) err_a = np.linalg.norm(out_adc - ideal) / np.linalg.norm(ideal) print("模拟输出:", np.round(out_adc, 4)) print("完整模拟链路误差: %.2f%%" % (err_a * 100)) err_q = np.linalg.norm(w_q @ x - ideal) / np.linalg.norm(ideal) print("仅权重量化误差: %.2f%%" % (err_q * 100)) single = write_read(w_q, trials=1) calib = write_read(w_q, trials=8) err_n = np.linalg.norm(single @ x - ideal) / np.linalg.norm(ideal) err_c = np.linalg.norm(calib @ x - ideal) / np.linalg.norm(ideal) print("单次读取误差: %.2f%%" % (err_n * 100)) print("中位数校准后误差: %.2f%%" % (err_c * 100)) bs = bit_sliced_mvm(w_q, x, w_bits=4) err_b = np.linalg.norm(bs - ideal) / np.linalg.norm(ideal) print("位切片重建误差: %.2f%%" % (err_b * 100)) if __name__ == "__main__": main()
out = w_q @ x_q用矩阵乘法一次性模拟“交叉阵列电流汇流”,对应水渠交汇的自然相加。step = v_max / (2 ** adc_bits)按满量程与 2 的 N 次方计算 ADC 量化步长,尺子刻线越细误差越小。reads = weights * noise给每个电导乘一个随机扰动,模拟 RRAM 导电细丝写入的随机起伏。np.median(reads, axis=0)对多次读取结果取中位数,正是“冗余映射 + 校准”抑制噪声的关键。plane @ inputs每个位平面单独做一次矩阵乘,体现“位切片”把高精度运算拆成若干低精度通道。total += (2 ** k / (levels - 1)) * ...按二进制权重把各平面结果合并,对应公式 W = Σ 2^{-k} W^{(k)}。
常见误区
误区我听说模拟计算误差大、精度低,所以存内计算现在只能发发论文,离商用还远得很。
正解模拟存内计算已经进入商业落地阶段,IBM、台积电等都有相关原型或产品,并在推荐系统、边缘 AI 推理中投入使用。关键在于很多 AI 任务天然容忍低比特量化误差,配合混合精度与校准技术,最终模型精度损失可以控制在可接受范围。模拟的“不精确”不等于“没用”——就像水渠漏一点水,稻田照样丰收。
为何常见:初学者容易把“器件精度”等同于“系统精度”,忽略了算法与校准可以在软件侧弥补硬件缺陷。
误区存内计算不就是在手机 SoC 里把内存芯片放在 CPU 旁边嘛,减少一点搬运距离而已。
正解把存储和计算封装在同一基板上,那是“近存计算”(near-memory computing),数据仍要搬运;真正的存内计算(in-memory computing)是在存储单元的物理内部完成运算——在 SRAM 位线上直接做电荷累加、在 RRAM 交叉阵列里让电流自然汇流。这才叫“把档案室搬进水闸、让水闸自己算账”。
为何常见:行业里“存算一体”这个词被营销物料泛化使用,常把封装级集成也归入其中,混淆了“近”与“内”的本质区别。
误区反正都是在存储阵列里做模拟计算,SRAM 和 RRAM 的区别不就是断电丢不丢数据吗?
正解两者计算机制差异很大:SRAM 是易失性存储,权重以位/电压形式存在 6T 单元中,靠电荷共享或位线电流实现累加;RRAM 是非易失器件,权重直接映射为可编程电导值,单器件即可表达多比特权重。就像旋钮闸门与记忆合金闸门,虽然都“控制水流”,但内部结构和操作方式完全不同。
为何常见:从应用层看两者都做矩阵乘累加,器件物理层的巨大差异被掩盖了。
误区RRAM 既然叫“模拟器件”,它的电阻应该想设多少就设多少,精度无限高。
正解RRAM 电导的调节本质是导电细丝的形成与断裂,带有随机性,实际可可靠分辨的状态通常只有几个比特(如 2~8 bit),还存在写入噪声、漂移和耐久性限制。正因如此才需要校准、冗余映射和混合精度等技术来“打补丁”。
为何常见:“模拟”二字容易让人误以为连续就等于无限精确,忽视了物理器件的噪声与离散化本质。
误区模拟计算误差主要是 ADC 量化造成的,那把 ADC 位数加高不就行了?
正解ADC 的功耗和面积随位数近似指数增长,往往是模拟存内计算系统的能耗大头(对应 E_ADC)。过高的 ADC 会把模拟计算省下的能量又吃回去,所以要在任务精度与能效之间取平衡,甚至刻意用低比特 ADC 配合算法重训练来补偿。
为何常见:量化误差公式 Δ = V_fs / 2^N 直观上“位数越高误差越小”,让人容易忽略位数增长带来的巨大成本约束。
面试题
Q1. 模拟计算与数字计算最本质的区别是什么?
- A.模拟计算使用连续的物理量表达数值← 正确答案
- B.模拟计算的耗电量一定更小
- C.模拟计算不需要任何能量就能工作
- D.模拟计算只能处理音频信号
答案:A。模拟计算直接用电压、电流等连续物理量表达数值,运算发生在物理规律中;数字计算用离散的 0/1 逐位处理。B、C、D 都是对模拟计算的过度或错误推断,就像“水管”一定比“水桶”省电一样不成立。
Q2. “冯·诺依曼瓶颈”指的是什么?
- A.存储器与处理器之间搬运数据的开销← 正确答案
- B.处理器发热导致性能大幅下降
- C.存储器容量不够用导致系统卡顿
- D.网络传输数据时延过高影响体验
答案:A。冯·诺依曼架构中,数据要在存储器和计算单元之间来回搬运,搬运的速度和能耗成为系统瓶颈,正如水城伙计在档案室与闸门之间来回跑腿。发热、容量、网络都属于不同层面的问题。
Q3. 存内计算(in-memory computing)的核心思想是什么?
- A.把计算单元与存储器封装在同一基板
- B.在存储单元内部直接完成运算任务← 正确答案
- C.用缓存替代主存减少搬数据开销
- D.把全部数据预先复制到处理器缓存
答案:B。存内计算的精髓是让存储器件本身参与运算,在物理层完成计算,如同把配水手册刻在水闸上。A 是“近存计算”,C、D 仍是传统架构的缓存优化,都没有让“存储即计算”。
Q4. 在 RRAM 交叉阵列中,权重通常映射为什么物理量?
- A.器件的电导值← 正确答案
- B.器件的电容值
- C.器件的电感值
- D.器件的温度值
答案:A。RRAM 的电导 G 可被编程为不同阻值档位,电流 I = G·V 直接完成乘法,所以电导是权重的天然载体。电容用于 SRAM 电荷域方案,电感与温度与权重映射无关。
Q5. SRAM 存内计算单元最常用的结构是什么?
- A.6T 单元(两个交叉耦合反相器)← 正确答案
- B.1T1C 单元(一个晶体管加电容)
- C.浮栅晶体管单元(类似闪存工艺)
- D.铁电电容单元(利用极化翻转)
答案:A。6T 单元由两个交叉耦合反相器互锁,是 SRAM 的标准结构,像一对咬合的齿轮记住 0/1。1T1C 是 DRAM、浮栅是闪存、铁电是 FeFET 的典型结构,都不属于 SRAM。
Q6. N 位 ADC 的量化步长公式是什么?
- A.Δ = V_fs 除以 2 的 N 次方← 正确答案
- B.Δ = V_fs 乘以 2 的 N 次方
- C.Δ = 2 的 N 次方除以 V_fs
- D.Δ = V_fs 加上 2 的 N 次方
答案:A。满量程电压被均分为 2^N 个台阶,每个台阶高度就是步长 Δ = V_fs / 2^N。位数越多台阶越细,如同把一米的尺子分成更多小格;其余选项的运算关系均不正确。
Q7. 位切片混合精度中,一个权重按 W = Σ 2^{-k} W^{(k)} 拆分,其含义是什么?
- A.按二进制位拆成位平面再加权求和← 正确答案
- B.把权重随机分给多个计算单元
- C.用多个 ADC 并行读出同一结果
- D.将模拟信号重复采样后再合并
答案:A。位切片把高精度权重拆成 B 个位平面,每层仅含少量比特,按 2^{-k} 加权合并后还原出完整权重,像把厚水板拆成多层薄板分别搬运再叠回。B、C、D 描述的分别是随机映射、并行读出与过采样,与位切片无关。
Q8. 下列哪些属于模拟存内计算的典型误差来源?
- A.器件写入噪声与电导漂移← 正确答案
- B.ADC 量化带来的舍入误差← 正确答案
- C.工艺偏差导致的单元失配← 正确答案
- D.数据在硬盘中的长期存储
答案:ABC。模拟链路中,RRAM 写噪声与漂移、ADC 读数舍入、制造工艺偏差都会污染计算结果,如同水闸淤积、尺子刻度粗、闸门出厂尺寸不一。硬盘存储属于数字持久化环节,与模拟计算误差无直接关系。
Q9. 关于模拟存内计算系统的能耗与精度,下列哪些说法正确?
- A.ADC 功耗随位数近似指数增长← 正确答案
- B.总能耗可拆分为阵列与转换开销← 正确答案
- C.模拟乘累加阵列能耗通常极低← 正确答案
- D.提高 ADC 位数一定降低总能耗
答案:ABC。总能耗 E_total = E_MVM + E_DAC + E_ADC,阵列运算极省能,而 ADC 功耗随位数近似指数上升,所以“无脑加位数”会把省下的能量吃回去,D 的说法不成立。转换环节常成为新的能效瓶颈。
Q10. 下列哪些属于存内计算的主流应用场景?
- A.边缘端低功耗神经网络推理← 正确答案
- B.大规模推荐系统的向量召回← 正确答案
- C.数据库日志的审计与归档
- D.工业视觉的实时缺陷检测← 正确答案
答案:ABD。神经网络推理、推荐向量召回、工业视觉检测都以矩阵乘累加为核心且对能效敏感,是存内计算的天然舞台。数据库日志归档是纯存储型任务,不涉及大量就地计算,收益甚微。