想象你是一家餐厅的主厨。厨房分成两个区域:最里面的冷库用来存食材,大厅里的料理台用来做菜。每做一道菜,你都要跑到冷库取肉、取菜、取酱料,用完再跑回去存放。一天下来,你大部分体力不是花在炒菜上,而是耗在了“冷库—料理台”这条走廊上。计算机世界也有同样的窘境:AI加速器(料理台)和内存(冷库)物理分离,处理数据前必须先把数据搬过去,而“搬数据”消耗的能量和等待时间,往往比“算数据”本身还要多——这就是困扰芯片行业几十年的“冯·诺依曼瓶颈”。 Untether AI 给出的答案很直接:既然搬来搬去这么费劲,干脆把灶台搬进冷库——在存储阵列里直接嵌入计算单元,让权重数据待在原地,输入一来就当场完成矩阵乘法。这就是“存内计算”(In-Memory Computing)。本篇文章会带你认识这项新兴 AI 芯片架构:从硬件单元、矩阵乘法原理、推理优势,到精度量化的挑战,以及它在推荐、语音、自动驾驶等场景中的真实落地。

岗位关联

理解了存内计算,你就握住了 AI 芯片突破“内存墙”与“功耗墙”的另一把钥匙——在比拼算力峰值的军备竞赛之外,听懂“省着算”的底层逻辑。

目录
  1. 可视化演示
  2. 1. 从冷库到灶台的距离——存内计算原理
  3. 2. 迷你料理台——核心硬件结构
  4. 3. 现场调配配方——矩阵乘法实现
  5. 4. 上菜快、体力省——推理加速优势
  6. 5. 一勺盐还是 3.14 克——精度量化挑战
  7. 6. 中央厨房落地——产品与实现
  8. 7. 各取所需的餐厅——应用与发展
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示存内计算SRAM阵列架构、CIM与传统冯诺依曼架构对比及能效优势三种核心模式,直观呈现Untether AI存内计算消除数据搬运的关键技术。

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

存内计算架构 SRAM阵列集成PE权重静态驻留消除数据搬运 输入数据流过存储阵列就地完成矩阵乘法运算 SRAM+PE → CIM 存内计算是打破存储墙的核心架构创新

1. 从冷库到灶台的距离——存内计算原理

主厨在冷库和料理台之间来回奔波,每一步都在消耗体力、浪费时间。计算机科学家很早就算过一笔账:把数据从内存搬到计算单元,每搬一次消耗的能量,比做一次乘法运算高出上百倍。若一道菜要从冷库取十种食材,那么“取食材”的功夫反而成了大头,“做菜”本身的功夫成了小头。

在经典的冯·诺依曼架构里,存储器和运算器是两个独立部件,任何计算都得先把数据从存储中取出,经过总线搬运到运算器,算完再写回。搬运路径越长、次数越多,性能损耗越严重。传统 AI 芯片处理矩阵乘法时,模型权重往往大于片上缓存,于是每来一批输入数据,就要把权重从片外内存搬运一次——这正是主厨日复一日的跑腿日常。

存内计算(In-Memory Computing)彻底改变了玩法:它把计算单元直接嵌入存储阵列内部,让“存储”与“计算”在物理上融合。Untether AI 的芯片正是基于此思想,用 SRAM 搭建存储阵列,在存储单元旁布置算术逻辑单元(ALU),使矩阵乘法的乘累加操作可以在数据存储的位置就地完成。一次推理任务的总能耗,可以拆成如下两笔账:

主厨的顿悟,发生在把冷库改造成“嵌入式料理台”之后:食材就在手边,步骤就在案板上完成。存内计算的本质,正是把“跑腿”这项隐形开销从 AI 推理的账单里划掉——计算还是那个计算,只是不再需要一次次穿过那条耗能的走廊。

Etotal=Ncompute×Ecompute+Nmove×Emove,Emove≫EcomputeE_{\text{total}} = N_{\text{compute}} \times E_{\text{compute}} + N_{\text{move}} \times E_{\text{move}}, \qquad E_{\text{move}} \gg E_{\text{compute}}
通俗理解:一次推理的能耗分成“算”和“搬”两本账,而“搬”往往比“算”贵得多。
  1. 总能耗标记完成一次推理消耗的全部能量,由计算能耗与搬运能耗两部分相加构成。
    Etotal=Ncompute×Ecompute+Nmove×EmoveE_{\text{total}} = N_{\text{compute}} \times E_{\text{compute}} + N_{\text{move}} \times E_{\text{move}}
  2. 计算能耗项计算次数与单次计算能耗的乘积,代表算术操作本身消耗的能量。
    Ncompute×EcomputeN_{\text{compute}} \times E_{\text{compute}}
  3. 搬运能耗项搬运次数与单次搬运能耗的乘积,代表数据在存储与计算间移动消耗的能量。
    Nmove×EmoveN_{\text{move}} \times E_{\text{move}}
  4. 能耗悬殊关系单次搬运数据的能耗远大于单次计算的能耗,这是存内计算的出发点。
    Emove≫EcomputeE_{\text{move}} \gg E_{\text{compute}}

2. 迷你料理台——核心硬件结构

这家“存内餐厅”的最小单元是一个“迷你料理台”:台面下方是一个储物抽屉,里面整齐码着做菜需要的固定配料(权重);台面上是一只小灶台(ALU)。主厨站在台前,伸手就能取料,点火就能开炒。少了“转身去冷库”的动作,每个料理台都可以独立完成一份菜的烹饪。

在硬件上,这个迷你料理台被称为“存内处理元件”(Processing Element,PE)。它由两部分构成:一小块 SRAM 存储阵列用于存放权重,一个嵌入式 ALU 用于执行乘法和加法运算。成千上万个 PE 以二维阵列的方式排列在芯片上,SRAM 与 ALU 如同梳子的齿一样交错咬合,形成一张“存储—计算”一体化的网格。

权重静态驻留(static weight residency)是这套设计的关键:模型训练完成后,权重被一次性烧写进阵列各 PE 的 SRAM 中,在整轮推理期间不再移动。每个 PE 只需在本地做乘累加,不需要全局总线广播权重。整个阵列能够容纳的权重总量,由 PE 数量、每个 PE 的单元数以及位宽共同决定:

一个料理台虽小,成千上万个料理台铺满整面墙,就能同时处理上千道菜。存内处理的威力不在于单个元件多么强悍,而在于“人人有料、台台能炒”的规模化协作——这正是 SRAM 阵列与嵌入式 ALU 组合起来的奇妙化学反应。

CSRAM=NPE×Wcell×bbitC_{\text{SRAM}} = N_{\text{PE}} \times W_{\text{cell}} \times b_{\text{bit}}
通俗理解:阵列容量 = 料理台数量 × 每个台子的抽屉格数 × 每格能装的比特数。
  1. 阵列总容量整个存内阵列可以容纳的权重数据总量,是衡量芯片规模的核心指标。
    CSRAM=NPE×Wcell×bbitC_{\text{SRAM}} = N_{\text{PE}} \times W_{\text{cell}} \times b_{\text{bit}}
  2. 处理元件数量芯片上并行排布的处理元件个数,直接决定并行计算的规模。
    NPEN_{\text{PE}}
  3. 单元数与位宽乘积单个元件内部的存储单元个数乘以每个单元的比特数,得到单元件容量。
    Wcell×bbitW_{\text{cell}} \times b_{\text{bit}}

3. 现场调配配方——矩阵乘法实现

做一道鱼香肉丝,本质是把肉丝、木耳、胡萝卜按比例混合,再淋上酱汁。神经网络的一次推理也差不多:把输入特征(食材)与权重(配料比例)做加权求和,得到输出(成品)。这个“按比例混合”的数学动作,叫矩阵乘法。

矩阵乘法由大量“乘累加”(Multiply-Accumulate,MAC)操作组成:每个输出分量 y_i 是 n 个输入分量 x_j 与对应权重 w_ij 先相乘、再累加的结果。在传统芯片上,这一步要先从内存取出权重 w_ij,再执行乘法;而在存内计算芯片上,w_ij 就躺在当前格点的 SRAM 里,输入 x_j 一到达就直接读取并完成乘法。

在 Untether AI 的阵列中,权重矩阵被静态映射到各 PE。当输入向量 x 流入阵列时,每一行 PE 同时对自己管辖的权重做乘法与加法,全部行并行执行,一个数据流周期即可完成一次完整的矩阵—向量乘:

主厨备好十种配料的酱汁,客人点菜时只需按顺序倒入食材——每一列是一味料,每一道菜就是一次配方混合。矩阵乘法在存内阵列里,就是一场高度并行、原料不挪窝的“流水线烹饪”。

yi=∑j=1nwij⋅xj,i=1,2,…,my_i = \sum_{j=1}^{n} w_{ij} \cdot x_j, \qquad i = 1, 2, \ldots, m
通俗理解:第 i 道菜的味道 = 各种配料按配方比例混合后加总的结果。
  1. 输入分量输入向量的第 j 个元素,相当于一道菜的原材料之一。
    xjx_j
  2. 局部乘积驻留在格点中的权重与流入的输入相乘,得到一份局部贡献。
    wij⋅xjw_{ij} \cdot x_j
  3. 行内累加同一行所有格点的局部乘积逐级相加,得到第 i 个输出。
    ∑j=1nwij⋅xj\sum_{j=1}^{n} w_{ij} \cdot x_j
  4. 并行输出行m 个输出分量互不依赖,可在同一个数据流周期内并行算出。
    yi,i=1,2,…,my_i, \quad i = 1, 2, \ldots, m

4. 上菜快、体力省——推理加速优势

没有了冷库与料理台之间的马拉松,餐厅能同时做到两件事:上菜更快(低延迟),体力消耗更少(低功耗)。这正是存内计算最打动人的地方。推理(inference)阶段使用已经训练好的模型,权重不需要反复更新,因此权重静态驻留带来的收益在推理场景被放到最大。

先看延迟。传统架构等待权重从 DRAM 搬运到计算单元,需要经历数百个时钟周期的访存延迟;存内计算中权重近在咫尺,输入一到乘累加立刻开始。再看能效。研究数据表明,数据搬运消耗的能量常常占到 AI 推理总能耗的一半以上,存内计算把这部分开销直接归零,单位功耗能完成的运算量随之大幅提升。

衡量 AI 芯片能效的标准单位是“每瓦特每秒能完成的运算次数”,通常用 TOPS/W 表示:

对餐厅而言,“单位电费出菜量”是经营成败的关键。存内计算把最耗电的“跑腿”环节砍掉,能效比自然大幅领先。这也是为什么推荐系统、语音助手这类需要 7×24 小时在线推理的场景,开始青睐存内计算芯片——省下的电费,就是利润。

η=PTOPSWpower\eta = \frac{P_{\text{TOPS}}}{W_{\text{power}}}
通俗理解:能效比就像“每度电出几道菜”,存内计算把这个数推高了好几倍。
  1. 吞吐量芯片每秒完成的万亿次运算数,衡量算力大小。
    PTOPSP_{\text{TOPS}}
  2. 运行功耗芯片工作时的实际功率,以瓦特为单位。
    WpowerW_{\text{power}}
  3. 能效比计算吞吐量与功耗的比值,数值越高代表越省电。
    η=PTOPSWpower\eta = \frac{P_{\text{TOPS}}}{W_{\text{power}}}

5. 一勺盐还是 3.14 克——精度量化挑战

米其林菜谱会写“盐 3.14 克”,但街边小馆的调料勺只有整勺刻度。存内计算也面临类似的窘境:SRAM 存储单元的物理面积有限,位宽不可能像 CPU/GPU 那样随便支持 FP32 或 FP64。为了把更多权重塞进阵列,Untether AI 等厂商通常使用 INT8、INT4 甚至更低位的量化表示——相当于把“3.14 克”改成“1 小勺”。

量化的过程,是把连续的权重值映射到有限的离散档位上。设位宽为 b,则权重 w 先乘上刻度系数 2^{b-1},再就近取整,最后还原为量化权重。这个过程中丢失的信息就是量化误差 e_q。误差虽小,但经过成千上万层网络的累积放大,最终可能导致模型精度明显下滑,例如分类准确率下降几个百分点。

为了缓解精度损失,业界发展出多种补偿技术:量化感知训练(Quantization-Aware Training,QAT)让模型在训练阶段就适应低比特表达;混合精度方案把敏感层保留为高精度、其余层用低精度;此外还有误差反馈与权重残差技巧。存内计算的精度问题,本质上是在“存储密度”与“数值保真度”之间找平衡。

好厨师懂得取舍:同一道菜,快餐店用标准勺,宴会厅就精确到克。存内计算芯片同样可以“看菜下料”——核心层用 8bit,外围层降到 4bit。量化不是要取消精度,而是要用工程智慧,让每一比特都花在刀刃上。

w^=round(w×2b−1)2b−1,eq=w−w^\hat{w} = \frac{\text{round}(w \times 2^{b-1})}{2^{b-1}}, \qquad e_q = w - \hat{w}
通俗理解:量化好比把“3.14 克盐”简化成“1 小勺”,省了地方,但味道会略有偏差。
  1. 放大到刻度把连续权重乘以刻度系数,映射到大整数范围,便于取整操作。
    w×2b−1w \times 2^{b-1}
  2. 就近取整四舍五入到最近的整数档位,产生离散的量化值。
    round(w×2b−1)\text{round}(w \times 2^{b-1})
  3. 还原量化权重除以刻度系数,回到原始数值范围,得到近似权重。
    w^=round(w×2b−1)2b−1\hat{w} = \frac{\text{round}(w \times 2^{b-1})}{2^{b-1}}
  4. 量化误差原始权重与量化权重之差,衡量精度损失的大小。
    eq=w−w^e_q = w - \hat{w}

6. 中央厨房落地——产品与实现

当成千上万个迷你料理台被集成到一块硅片上,就成了一间“中央厨房”。Untether AI 正是把存内计算从论文带到量产芯片的代表厂商。它的芯片将 SRAM 阵列与计算单元紧密耦合,专为神经网络推理而打造。

以 Untether AI 的加速器产品为例:芯片内部包含大量存内处理元件,每个元件内置 SRAM 与 ALU,权重在推理前一次性加载并驻留。芯片通过 PCIe 等接口与宿主系统相连,部署成加速卡形态,供服务器插槽使用。其标称性能以 TOPS 计算,与阵列规模、时钟频率直接相关:

从芯片到加速卡再到机柜,存内计算产品的落地路径与常规 AI 加速卡类似:模型量化后编译部署到阵列上,权重按位宽映射进 SRAM,推理请求到达后即可低延迟响应。相比同等功耗的传统 GPU 推理方案,存内计算在能效比与延迟两项指标上往往有数倍优势,但受限于 SRAM 容量,单卡容纳的模型规模有限。

中央厨房再大,也有灶台数量的上限。受 SRAM 密度的制约,存内计算芯片当前更适合中等规模的推理模型;但正因为它把能效比做到极致,在“又要快又要省电”的边缘推理市场,它正在成长为不可忽视的新势力。

PTOPS=2×NPE×fclk×10−12P_{\text{TOPS}} = 2 \times N_{\text{PE}} \times f_{\text{clk}} \times 10^{-12}
通俗理解:芯片的 TOPS 峰值 = 元件总数 × 频率 × 每个周期两次运算,再折算成万亿单位。
  1. 元件总数阵列内全部存内处理元件的数量,决定并行算力的上限。
    NPEN_{\text{PE}}
  2. 时钟频率芯片每秒的周期数,频率越高运算节奏越快。
    fclkf_{\text{clk}}
  3. 运算能力换算每个元件每周期完成一次乘与一次加,合计两次运算,再换算为万亿次。
    PTOPS=2×NPE×fclk×10−12P_{\text{TOPS}} = 2 \times N_{\text{PE}} \times f_{\text{clk}} \times 10^{-12}

7. 各取所需的餐厅——应用与发展

不同餐厅有不同客群:高档餐厅讲究仪式感,快餐连锁追求出餐速度;AI 推理场景也一样。存内计算的“低延迟、高能效”特性,恰好命中三类典型场景:推荐系统、自然语言处理、自动驾驶。

推荐系统是典型的“权重搬运重灾区”:模型中的 embedding 表巨大,每次请求都要检索大量参数。存内计算把 embedding 权重驻留在阵列中,用户特征一到立即计算相似度与排序得分,显著降低线上延迟。NLP 任务(如语音唤醒、智能客服)则受益于 Transformer 推理中的大量矩阵乘法被原位加速。自动驾驶对时延最为苛刻,车载芯片必须在毫秒级完成目标检测与路径决策,存内计算的低延迟特性让“看见到反应”更快一步。

推理总延迟可以拆成计算时间与数据搬运时间之和:

存内计算的未来,是朝着更大容量、更高位宽、更成熟的编译生态演进,同时也有向训练场景探索的学术尝试。正如中央厨房不会取代所有餐厅,存内计算也不会取代传统 GPU,但它正在让“又省又快”的推理体验从可能变成现实——这也许是 AI 芯片军备竞赛之外,最值得倾听的一个声音。

Linfer=Tcompute+DweightBbusL_{\text{infer}} = T_{\text{compute}} + \frac{D_{\text{weight}}}{B_{\text{bus}}}
通俗理解:推理延迟 = 动手算的时间 + 等材料搬来的时间,存内计算把后者几乎清零。
  1. 计算时间纯算术操作的执行耗时,由运算量与流水线效率决定。
    TcomputeT_{\text{compute}}
  2. 搬运时间权重数据量除以总线带宽,即搬完必要数据所需的时间。
    DweightBbus\frac{D_{\text{weight}}}{B_{\text{bus}}}
  3. 推理总延迟两段时间求和。存内计算让权重搬运量趋近于零,搬运项几乎消失。
    Linfer=Tcompute+DweightBbusL_{\text{infer}} = T_{\text{compute}} + \frac{D_{\text{weight}}}{B_{\text{bus}}}

AI 应用场景

推荐系统的在线推理加速

阶段:模型推理部署阶段

解决的问题:推荐模型的 embedding 表庞大,传统 CPU/GPU 推理时每来一个请求都要把权重从 DRAM 搬运到计算单元,造成高延迟、高功耗。存内计算让 embedding 权重静态驻留于 SRAM 阵列,输入特征一到达即原位完成相似度计算与排序,端到端延迟大幅下降。

具体案例:某短视频平台的粗排推荐模型,原本在 GPU 上单次推理耗时约 8ms,改用存内计算加速卡后降至 2ms 以内,单卡功耗下降约 40%,线上 P95 延迟显著改善,广告点击率预估的更新频率得以翻倍。

终端语音助手的低功耗唤醒

阶段:端侧推理阶段

解决的问题:智能音箱需要 7×24 小时监听唤醒词,功耗是最大约束。传统方案需要频繁把模型权重从内存搬到 DSP,存内计算把唤醒模型权重固定在阵列中,麦克风数据流入即算,唤醒延迟低且平均功耗大幅下降。

具体案例:某智能家居语音模组在 ARM DSP 上平均唤醒功耗约 150mW,替换为存内计算芯片后降至 60mW,唤醒延迟从 120ms 降为 45ms,电池供电设备可以数周不充电。

自动驾驶中的实时目标检测

阶段:车载推理阶段

解决的问题:自动驾驶的检测模型对时延极度敏感,每多 10ms 延迟都可能影响安全决策。存内计算原位完成卷积与全连接层的矩阵乘,避免权重搬运的等待,让摄像头数据到检测结果的路径更短。

具体案例:某 L2+ 量产驾驶辅助系统使用存内计算加速 YOLO 系列检测模型,在 1080p 视频流上实现 30ms 以内的端到端推理,满足紧急制动场景下“看到即反应”的响应要求。

Python 演示

python59 行
"""存内计算 vs 传统架构:权重搬运开销对比""" import numpy as npimport time  class TraditionalChip:    """传统冯诺依曼架构:权重存储与计算分离,每批输入都要重新搬运权重"""     def __init__(self, weights):        self.weights = weights        self.move_count = 0     def forward(self, batch):        """逐批处理:每处理一批输入,都视作一次完整的权重搬运"""        out = np.zeros((self.weights.shape[0], batch.shape[1]), dtype=np.float32)        for b in range(batch.shape[1]):            self.move_count += 1            out[:, b] = np.matmul(self.weights, batch[:, b])        return out  class InMemoryTile:    """存内计算:权重静态驻留于 SRAM 阵列,输入到达后原位乘累加"""     def __init__(self, weights):        self.weights = weights        self.move_count = 0     def forward(self, batch):        """一次矩阵乘完成全部批量,权重全程不出阵列"""        return np.matmul(self.weights, batch)  def main():    np.random.seed(42)    weights = np.random.rand(256, 512).astype(np.float32)    batch = np.random.rand(512, 128).astype(np.float32)     chip = TraditionalChip(weights)    tile = InMemoryTile(weights)     t0 = time.time()    y1 = chip.forward(batch)    t1 = time.time() - t0     t0 = time.time()    y2 = tile.forward(batch)    t2 = time.time() - t0     assert np.allclose(y1, y2), "两种架构的数学结果应当完全一致"     print(f"传统架构: 权重搬运 {chip.move_count} 次, 耗时 {t1 * 1000:.2f} ms")    print(f"存内计算: 权重搬运 {tile.move_count} 次, 耗时 {t2 * 1000:.2f} ms")    print(f"搬运次数比: 传统 {chip.move_count} : 存内 {tile.move_count}")  if __name__ == "__main__":    main()
目的:用两个类分别模拟传统架构与存内计算,执行相同的矩阵乘法,对比权重的“搬运次数”——传计算架构每处理一个输入列就要搬一次权重,而存内阵列的搬运次数恒为零。
  1. self.move_count = 0初始化搬运计数器,在存内计算类中它将永远是 0。
  2. self.move_count += 1传统架构每处理一个输入列,就把整份权重“搬”一次,计数器随之加一。
  3. out[:, b] = np.matmul(self.weights, batch[:, b])传统架构的典型模式:先把权重取到计算单元再相乘。
  4. return np.matmul(self.weights, batch)存内计算把批量矩阵乘一次性完成,权重始终驻留在“阵列”内部。
  5. assert np.allclose(y1, y2)验证两种实现的数学结果完全一致,差异只来自搬运方式而非计算本身。

常见误区

误区很多人以为存内计算只是把 DRAM 换成 SRAM,内存访问速度变快了,所以推理变快。既然 SRAM 比 DRAM 快,那“存内”不就是“用好内存”的意思吗?

正解存内计算的关键不在存储器快慢,而在把 ALU 嵌进存储阵列里,让乘累加在存储原址完成。速度提升主要来自消除权重搬运,而非单纯的存储介质升级。好比把灶台搬进食材仓库,省的是来回跑动的时间,而不是冰箱本身制冷变强了。

为何常见:SRAM 确实比 DRAM 快,字面意思又带“存储”,很容易让人把“存内”误解为“内存升级”。

误区既然权重驻留在阵列里,那所有数据都不用搬了——输入不用搬、中间结果不用搬、输出也不用搬,整个芯片零流动。

正解存内计算消除的是权重的重复搬运。输入数据(激活值)仍需要从外部流入阵列,层与层之间的中间结果也要继续流动。只是相比传统架构,最沉重的“主角”——权重——老老实实待在原地,相当于把反复搬运的大件食材固定在了案板上,但水、电、配菜还是要接进来的。

为何常见:“零搬运”的宣传话术常被望文生义,忽略了它特指权重驻留。

误区既然 INT8/INT4 又省电又省面积,那把位宽降到 2bit 甚至 1bit,存内计算芯片岂不是无敌了?精度掉一点应该没关系吧?

正解位宽降低会带来量化误差,且误差会随网络深度累积放大,模型精度可能明显下降。存内计算需要在位宽与精度之间做权衡,通常要配合量化感知训练、混合精度等补偿手段。好比菜谱从“精确到克”简化成“一勺盐”,省事了,但口味很可能变差。

为何常见:只看到位宽下降带来的能效收益,忽视了误差对精度的非线性放大效应。

误区训练和推理都是矩阵乘法,存内计算能加速推理,那训练也直接套用,反正算法一样。

正解训练需要前向、反向、权重更新三个过程,权重必须在训练中频繁改写;存内计算的权重静态驻留设计、有限位宽以及写操作能耗,使得训练场景受到很大限制。当前 Untether AI 等产品聚焦推理加速,训练仍需传统高精度芯片完成。

为何常见:只看到矩阵乘法形式相同,忽略了训练的数据流与权重更新模式和推理完全不同。

误区存内计算这么强,功耗低、延迟小,以后所有 AI 芯片都会变成存内计算,GPU 要退出历史舞台了。

正解存内计算在推理、边缘、低延迟场景优势明显,但在大模型训练、通用计算、超高精度需求场景仍有短板。实际产业中多种架构并存互补,存内计算是重要方向,但不是万能答案。中央厨房适合连锁快餐,不代表米其林餐厅也得把灶台搬进仓库。

为何常见:新技术宣传往往夸大其词,人们容易从“重要突破”直接推导出“全面替代”。

面试题

Q1. 冯·诺依曼瓶颈主要指什么?

单选题 · easy

  • A.计算与存储间搬运开销← 正确答案
  • B.芯片电路设计复杂度
  • C.操作系统调度开销大
  • D.内存容量总存在上限

答案:A。冯·诺依曼架构把存储与计算分离,数据必须通过总线在两者之间搬运,这种搬运开销成为系统性能的主要瓶颈,正如主厨在冷库和料理台之间反复跑腿。B 说的是设计难度,C 是软件问题,D 是容量问题,都不是“瓶颈”的本意。

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

单选题 · easy

  • A.在存储阵列内直接完成计算← 正确答案
  • B.通过增大缓存加速数据访问
  • C.提高芯片时钟频率以加速
  • D.用更大的内存装载全部数据

答案:A。存内计算把计算单元嵌入存储阵列,让乘累加在数据存放的原位完成,消除权重搬运。B 只是改善缓存,C 是传统提频路线,D 只是扩大容量,都没有触及“存储与计算融合”的本质。

Q3. 存内处理元件主要由哪两部分组成?

单选题 · mid

  • A.SRAM存储阵列与嵌入式ALU← 正确答案
  • B.DRAM存储与片外控制器
  • C.高速缓存与复杂调度逻辑
  • D.乘法器与独立解码单元

答案:A。存内处理元件(PE)= 一小块 SRAM 存储阵列 + 嵌入式 ALU,前者静态存放权重,后者就地执行乘累加,相当于储物抽屉与小灶台的组合。DRAM 是片外存储,缓存和调度逻辑不是存内计算的特征组件。

Q4. 权重静态驻留指的是什么意思?

单选题 · mid

  • A.权重固定在本地存储中不搬运← 正确答案
  • B.权重每一轮推理都重新加载
  • C.权重存放在外部的大容量DRAM
  • D.权重在训练过程中冻结不更新

答案:A。权重静态驻留指模型推理前把权重一次性写入阵列内的 SRAM,推理期间不再移动,这是存内计算消除搬运开销的关键设计。B 与传统架构相反,C 是典型的冯·诺依曼布局,D 说的是训练阶段的冻结技巧,与硬件驻留无关。

Q5. 降低量化位宽最直接的代价是什么?

单选题 · mid

  • A.可能引入额外的量化误差← 正确答案
  • B.模型训练速度必然会变慢
  • C.推理延迟一定会大幅增加
  • D.芯片功耗一定会明显上升

答案:A。位宽降低意味着权重只能表达有限的离散档位,原始值与量化值之间的误差随之产生,且会随网络层数累积放大。B、C、D 说反了——位宽降低通常会加快推理、降低功耗,代价主要在精度侧。

Q6. 存内计算实现推理加速的直接原因是?

单选题 · hard

  • A.消除权重搬运从而降低延迟← 正确答案
  • B.将芯片设计尺寸大幅缩小
  • C.使用更小的开源神经网络
  • D.减少训练过程所需的数据量

答案:A。传统架构每次推理都要把权重从 DRAM 搬到计算单元,访存延迟高;存内计算让权重待在原处,输入一到立即乘累加,直接砍掉了这部分延迟。芯片尺寸、模型大小、训练数据都与推理加速的机制无关。

Q7. Untether AI 芯片最适合哪类应用?

单选题 · mid

  • A.边缘端低延迟推理场景← 正确答案
  • B.云端大模型预训练任务
  • C.大规模数据库事务处理
  • D.桌面操作系统日常调度

答案:A。存内计算的高能效与低延迟特性,最匹配推荐系统、语音唤醒、自动驾驶等边缘端实时推理场景。预训练需要频繁更新权重且对精度要求高,数据库与系统调度不是矩阵乘法的用武之地。

Q8. 应对量化精度损失的常见方案有哪些?

多选题 · mid

  • A.训练阶段引入量化感知← 正确答案
  • B.采用混合精度的计算方案← 正确答案
  • C.提高芯片供电的电压
  • D.增加外部存储的整体容量

答案:AB。量化感知训练让模型在训练时就适应低比特误差,混合精度方案对敏感层保留高精度、其余层用低精度,两者都能有效缓解精度损失。提高电压只增加功耗,增加存储容量不解决数值表示精度问题。

Q9. 存内计算相对传统架构有哪些优势?

多选题 · mid

  • A.有效降低推理过程的功耗← 正确答案
  • B.减少权重搬运带来的延迟← 正确答案
  • C.完全消除输入数据的流动
  • D.提升单位瓦特的计算能力← 正确答案

答案:ABD。权重不搬运,节省了最昂贵的搬运能耗与访存延迟,单位瓦特的吞吐量(TOPS/W)因此提升。但输入数据和中间结果仍然需要流动,C 的说法过于绝对,不是存内计算的特性。

Q10. 关于存内计算的描述哪些是正确的?

多选题 · hard

  • A.处理元件内含存储与ALU← 正确答案
  • B.权重可以静态驻留于阵列← 正确答案
  • C.完全不需要任何数据流动
  • D.当前主要应用于推理加速← 正确答案

答案:ABD。每个 PE 由 SRAM 与 ALU 构成,权重可一次性写入并驻留,当前产品聚焦推理阶段加速。但输入数据、中间激活值仍需流动,阵列并非完全静止。理解“权重不动、数据流动”才是抓住存内计算精髓的关键。