
半个多世纪以来,被称为冯·诺依曼架构的计算与存储分离模式一直是数字计算的基石。然而,这一基础设计如今正面临着根本性的危机。对于我们这个时代要求最高的计算问题,从训练大型AI模型到复杂的科学模拟,在处理器和内存之间穿梭数据所花费的时间和精力,远远超过了实际计算本身。这个“冯·诺依曼瓶颈”,或称“内存墙”,是未来进步的一个关键障碍。本文探讨一种激进的解决方案:存内逻辑(Logic-in-Memory, LIM),一个通过在数据驻留之处直接进行计算来打破这一障碍的范式。在接下来的章节中,我们将开启一段从概念到应用的旅程。我们首先探讨LIM的核心“原理与机制”,揭示如何巧妙地利用物理定律进行计算,并审视其固有的工程权衡。随后,在“应用与跨学科联系”部分,我们将见证这一思想的深远影响,从加速人工智能、塑造下一代超级计算机,到在分子层面启发新颖的计算形式。
想象一位世界级的学者在一座宏伟的图书馆里工作。图书馆(我们的内存)藏有人类所有的知识,几乎是无穷无尽的书籍。学者的工作室(我们的处理器)则位于繁忙校园另一端的一栋独立建筑里。为了撰写一篇新论文中的一句话,学者必须跑到图书馆,找到正确的书籍(数据),把它们带回工作室,进行阅读和整合的脑力劳动(计算),然后再把新写好的句子跑着送回图书馆保管。对于一篇复杂的论文,学者几乎所有的精力都花在了来回奔波上,而不是在工作室里思考。
这本质上就是现代计算的现状。为数字革命提供了半个多世纪动力的辉煌设计——冯·诺依曼架构——正是建立在内存与处理分离的基础之上。而对于我们今天面临的许多最激动人心的问题——从训练庞大的人工智能模型到模拟复杂的气候系统——我们发现,仅仅是移动数据所花费的能量和时间,就可能远超实际计算本身所花费的能量和时间。这就是所谓的“冯·诺依曼瓶颈”或“内存墙”。
让我们用数字来说明这一点。考虑AI中的一个基石操作:将矩阵乘以向量得到结果,即。如果我们的矩阵有行列,在传统计算机中,一种简单的做法可能需要获取矩阵的所有个元素,并对行中的每一行,重新获取向量的个元素。在这种情况下,用于获取操作数的总数据流量与成正比。对于拥有数百万元素的矩阵,这是天文数字般的数据来回穿梭。
如果我们能教会图书馆阅读,而不是强迫学者奔波,那会怎样?如果我们能在数据存储的地方直接进行计算呢?这就是存内逻辑(LIM),也被称为存内计算(CIM)的核心,一个优美而简单的原理。其思想是在存储数据的内存阵列内部或紧邻其旁,物理上直接执行算术运算[@problem_d:4048648]。
让我们重新审视矩阵乘法。在一个理想的CIM系统中,庞大的权重矩阵被预先加载到计算内存中并驻留于此。我们只需要将输入向量流入一次,然后读出输出向量。总数据流量现在只与输入和输出向量的大小成正比,即。
内存流量的减少比例给出了一个惊人的结果: 对于任何合理大的矩阵,其中和都达到数千或数百万,这个值会非常接近1。我们实际上消除了绝大部分曾严重影响性能的数据移动。我们打破了流量的束缚。
这听起来近乎神奇。一个仅为保持电荷或维持状态而设计的卑微内存单元,如何能突然执行乘法和加法?答案是该领域最优雅的方面之一:我们不是在每个内存单元中构建一个微型冯·诺依曼机,而是巧妙地利用了本已支配其运作的基本物理定律。
最强大的方法之一依赖于电子学中最古老的两条定律。想象一个由导线组成的网格,一个交叉阵列,在每个交叉点,我们放置一个微小的电阻元件,比如忆阻器。该元件的电阻可以被编程来表示我们矩阵中的一个值。更具体地说,我们使用其电导,即电阻的倒数()。
现在,要执行矩阵向量乘积,我们在网格的行上施加电压,其中第行的电压代表我们输入向量的一个元素。根据欧姆定律,流过位置处电阻的电流就是电压与电导的乘积: 物理学就这样为我们免费完成了一次乘法!
但这还不是全部。网格中的每条列线都连接到该列的所有电阻。基尔霍夫电流定律告诉我们,流出该列线的总电流就是流入它的所有单个电流之和: 在一瞬间,通过施加电压和测量电流,我们利用物理定律计算了整个点积——矩阵乘法的核心。所有的电流同时“投票”,总电流就是选举的结果。这是一种在传统处理器中无法想象的规模的并行计算。
利用物理学的这一原理不仅限于电阻。考虑另一个基本元件:电容器。想象一组电容器,每个都代表市政厅会议中的一个“市民”。我们可以将输入值“编码”为电容器上的初始电压,并将其电容作为权重。
最初,每个电容器都是隔离的。然后,我们闭合一组开关,将它们全部连接到一条共享的导线上。会发生什么?电荷从电荷较多的电容器流向电荷较少的电容器,直到整个系统达到一个单一、均匀的平衡电压。这只是自然界寻求平衡的表现。
根据电荷守恒的基本定律,系统前后的总电荷量必须相同。通过数学推导,我们发现最终的平衡电压是: 这是一个初始电压的加权平均值!物理学再一次仅仅通过遵循其自身规则,为我们完成了一项复杂而有用的计算。
这一切似乎好得令人难以置信,在某种程度上确实如此。驾驭模拟物理世界伴随着一系列深刻的挑战。数字世界是干净、精确和可预测的;而模拟世界是混乱、嘈杂和近似的。
在模拟计算机中,“5”这个值不是由精确的比特模式(1-0-1)表示,而可能由恰好伏特的电压表示。但如果一个随机的热波动增加了伏特呢?该值现在变成了。这就是模拟误差的本质。每一次模拟乘法和加法都会引入一个微小的、随机的误差。
当我们执行数千次这样的操作时,比如在点积运算中,这些小误差会累积起来。幸运的是,如果这些误差是随机的且以零为中心,它们并不仅仅是简单相加;它们会根据统计学定律累积。来自次操作的总误差,每次操作的误差方差为,将遵循一个总方差为的高斯分布。这使我们能够做出一个关键的权衡。如果我们需要最终答案在某个阈值内具有高概率的准确性,我们就可以计算出每次独立操作所允许的最大误差标准差。这是物理学、统计学和工程需求之间一场优美的博弈。
我们宏伟的模拟计算的结果是一个模拟信号——电流或电压。但世界的其他部分都运行在数字比特上。为了弥合这一差距,我们需要一个模数转换器(ADC),一个在这两个世界之间的翻译官。
不幸的是,ADC是这个故事中不为人知的“反派”。一个高速、高精度的ADC会消耗巨大的能量。事实上,其能耗通常随着所需精度位数的增加而呈指数级增长: 这种“指数惩罚”可能非常严重,以至于完全抵消了我们通过在内存中计算所节省的所有能量。
驯服ADC的关键在于摊销。当我们计算一个长度为的点积时,我们执行了次乘累加(MAC)操作,但我们只需要在最后进行一次ADC转换。因此,每次MAC操作的ADC成本为。这意味着只有当我们能执行一长串计算后才需要转换回数字领域时,CIM才真正变得高效。我们甚至可以计算一个盈亏平衡长度,即CIM节省的能量恰好被ADC消耗的能量抵消的点。为了让CIM胜出,向量长度必须大于。
有人可能会问:我们能直接使用处理器中已有的静态随机存取存储器(SRAM)吗?答案是“不完全可以”。一个标准的SRAM单元(一个6T单元)使用单一路径进行读写。如果我们试图通过同时激活多行来进行CIM,那么“读取”存储值的过程可能会干扰它们,导致单元翻转其状态。这被称为读干扰,就像在有人积极擦除文字的同时试图阅读一本书。
解决方案是设计一个更复杂的内存单元。例如,一个8T SRAM单元增加了两个额外的晶体管,以创建一个专用的、解耦的读取端口。单元核心锁存器中存储的值充当一个开关,控制一个独立的电流路径,但电流本身从不流过锁存器。这种隔离是在不损坏存储数据的情况下进行稳健模拟计算的关键。
存内逻辑并非CPU的通用替代品。它是一种专门的工具,为某类问题进行了精巧的设计。理解其理想的应用领域至关重要。
一些IMC方法倾向于模拟世界,以精度和噪声为代价提供巨大的速度(一次性完成点积!)。另一些被称为数字IMC的方法则停留在数字领域,通过在SRAM阵列的位线上直接执行位逻辑运算(如与门或异或非门)。这速度较慢——一个8位乘以8位的乘法可能需要64个连续的位运算周期——但它是完全精确的,没有模拟噪声或ADC转换的烦恼[@problem_t:4276901]。两者之间的选择是速度与精度之间的经典工程权衡。
或许,看清IMC适用范围的最清晰方式是通过Roofline模型,这是高性能计算中使用的一种强大的可视化工具。该模型描绘了一个系统可达到的性能与其运算强度的关系,运算强度是执行的计算次数与从内存移动的数据字节数之比()。
一个系统的性能被两条线“封顶”:一条代表其峰值计算能力(它能思考多快)的水平线,和一条代表其内存带宽(它能读取多快)的斜线。
现代AI工作负载是出了名的内存密集型。它们的运算强度很低。IMC的神来之笔在于它从根本上改变了游戏规则。通过原位执行计算,它极大地减少了给定任务运算强度计算中的字节项。它没有改变硬件的峰值性能或物理带宽,但它提高了工作负载本身的有效运算强度。
在Roofline图上,这相当于将一个内存密集型的工作负载向右移动。当它向右移动时,它会沿着倾斜的内存屋顶向上攀升,从而实现更高水平的实际性能。它使应用程序能够释放更多一直存在但因等待数据而休眠的计算潜力。归根结底,它是对抗流量束缚的完美解药。
在了解了存内逻辑的基本原理之后,我们可能会倾向于将其视为芯片设计师的一个优雅但专门的技巧。但事实远非如此。在数据所在地进行计算的原则不仅仅是一种优化;它是一种范式转变,一种思考信息与处理关系的新方式。它的影响正在远远超出单个内存阵列的范围,重塑着从我们口袋里的人工智能到预测地球未来的宏大科学模拟的一切,甚至在分子尺度上启发着新的计算形式。现在,让我们踏上这片新领域的探索之旅,看看这些思想将把我们带向何方。
在当今人工智能的核心,从语言模型到图像识别器,都存在着一个看似简单却被执行了数十亿次的操作:矩阵向量乘法。一个神经网络本质上是一个由相互连接的节点组成的庞大集合,其中每个连接的强度由一个“权重”表示。一次推理就是信号在这个网络中层层传递的级联过程,每一层都在执行一次大规模的矩阵向量乘积。臭名昭著的“内存墙”对AI的打击比几乎任何其他领域都更严重,正是因为权重矩阵巨大,将它们从内存中取到独立的处理单元是主要的瓶颈。
存内逻辑提供了一个惊人直接的解决方案。与其获取权重,为什么不让内存本身成为计算器呢?想象一个由微小的电阻式内存单元组成的巨大网格,每个单元都以电导值的形式存储一个突触权重。正如我们在原理讨论中所见,通过在该网格的行上施加输入电压,欧姆定律和基尔霍夫电流定律共同作用,在一个并行的模拟步骤中完成了矩阵向量乘法。从每列流出的电流就是瞬时总和,正是我们寻求的答案。
这不是遥远的梦想;它是当前深入研究和开发的基础。要构建一个实用的系统,必须将一个可能包含数百万权重的庞大逻辑矩阵进行分区,并映射到硅芯片上由较小物理交叉阵列组成的瓦片式马赛克上。每个瓦片并行操作,最终结果通过数字方式拼接在一起。所需的物理瓦片数量,更重要的是,将模拟结果转换回数字领域所需的模数转换器(ADC)的数量,成为决定芯片尺寸和功耗的关键设计指标。
当然,大自然不会免费给予任何东西。这种优雅的模拟计算也伴随着一系列深刻的挑战。对密度的追求——在每平方毫米内封装更多的计算能力——驱使工程师们探索超越标准六晶体管SRAM单元的新型存储技术。像阻变存储器(RRAM)这样的器件有望实现更小的单元尺寸,可能提供数倍的计算密度。一项仔细的分析,不仅考虑内存单元,还考虑外围ADC的面积,揭示了这些新兴技术如何能够在单位面积性能上实现显著飞跃。
此外,在模拟域工作意味着要与连续的、有时是混乱的物理定律作斗争。在一个基于SRAM的存内计算系统中,结果以电荷形式累积在电容器上,而这些电荷会不断地试图泄漏掉。这种“电压下降”是一种计算错误。为了保持准确性,电容器必须足够大,以便在整个计算期间能稳定地保持其电荷以抵抗泄漏。这就产生了一个根本性的权衡:更高的精度需要更大的电容器,而这会消耗宝贵的芯片面积和功耗。这是物理约束如何塑造计算精度的优美而直接的例证。
为免我们认为存内逻辑是一种非此即彼的纯模拟方案,其实也存在巧妙的数字方法。通过在内存阵列内逐位(串行)处理数据,可以执行等同于乘法的逻辑运算。此类系统的能量成本归结为对位线的微小电容进行充电和放电的基础物理过程。总能量就是每次位翻转的基础能量,乘以发生翻转的概率,这个概率因子由所处理数据的统计特性决定。这使得工程师能够构建完全数字化的、但在内存中执行的处理器,其能效可以从第一性原理进行精确建模。
从单个芯片的视角放大,最小化数据移动的原则启发了整个系统构建方式的革命性变革。如果目标是让逻辑和内存更近,为什么不把它们堆叠起来呢?三维(3D)集成超越了传统芯片平坦的二维格局。
一种方法是2.5D集成,这就像建立一个高科技工业园区:独立的逻辑和内存裸片被制造出来,然后并排放在一个硅“中介层”上,由中介层将它们连接起来。这比在主板上传输信号有了巨大的改进。但一个更激进的愿景是单片3D(M3D)集成,这就像建造一座摩天大楼。在这里,逻辑层和内存层直接在彼此之上制造,通过称为单片层间通孔(MIV)的超密集、纳米级垂直导线连接。差异是惊人的。2.5D连接的间距可能为几十微米,而MIV的间距可以达到几百纳米。由于互连密度与间距的平方成反比,这可能导致单位面积连接数量增加一万倍。又因为信号延迟与导线长度的平方成正比,将连接从毫米缩短到纳米会导致延迟急剧下降。这是弥合逻辑-内存差距的终极物理实现。
然而,这个3D愿景直接遭遇了另一个基本物理定律:热力学。堆叠都在产生热量的有源硅层会造成一场热学噩梦。顶层的热点必须将其热量向下推过所有下层才能到达散热器。这种热阻的堆叠可能导致显著的温度升高,可能危及芯片的运行。因此,3D堆叠带来的巨大带宽和延迟优势必须与热管理这一关键挑战仔细权衡。
一个更务实、近期的做法是近内存处理(NMP)。我们不是将逻辑完全集成在内存中,而是在内存旁边放置一个小型、专用的处理器。这就产生了一种新的架构难题。主CPU和NMP可能以不同的数据粒度“对话”。例如,CPU可能以64字节的缓存行获取数据,而NMP可能被优化以处理不同大小的数据块。选择最佳的NMP缓存行大小成为一个微妙的平衡行为。较大的缓存行可以摊销发起数据传输的开销,但如果任务只需要该行中的一小部分数据,那么传输的其余部分就是浪费的带宽。理想的大小是最小化每个有用字节的平均传输时间,这个量取决于被加速的具体工作负载。
到目前为止,我们的动机是效率:我们如何能以更快的速度和更少的能量来执行当今AI的数学运算?但一个更深层的问题在召唤我们:如果我们尝试更像大脑一样计算呢?神经形态计算是存内逻辑的一个分支,它不仅从大脑的结构(内存和处理同地协作)中汲取灵感,也从其运行原理中汲取灵感。
一个真正的神经形态系统与通用的AI加速器是不同的。它的信息货币不是寄存器中的数字,而是稀疏、异步的“脉冲”,即短暂的电活动脉冲,非常像生物神经元的动作电位。计算是事件驱动的,仅在脉冲发生的时间和地点进行。神经元本身就是一个物理电路元件——或许是一个由突触电流充电并有泄漏的电容器——它随时间整合输入,并在超过阈值时发放一个脉冲。突触不仅仅是一个存储的数字;它是一个有状态的物理设备,比如忆阻器,其电导(即其权重)会根据通过它的脉冲历史而改变。这种局部学习机制被称为突触可塑性。这个范式与同步的、时钟驱动的数字加速器,甚至只执行矩阵乘法的简单模拟交叉阵列,都有着根本的不同。
真正的魔力在于这些新兴纳米电子器件的物理特性如何能直接实现学习。脉冲时间依赖可塑性(STDP)是一种生物学习规则,即如果突触前神经元在突触后神经元之前不久发放脉冲,突触权重就会增强;如果在其之后发放脉冲,则会减弱。这种“共同激发,共同连接”的原则可以从器件物理学中自然产生。想象一下,将突触前和突触后的脉冲塑造成特定的电压波形。忆阻性突触的内部状态会根据其两端的总电压而演变。突触前和突触后电压轨迹之间的重叠量决定了电导的最终变化。脉冲的时间和顺序通过器件的内部传输物理,直接转化为连接的增强或减弱。在这种美妙的综合中,一个高层次的学习规则成为了低层次器件动力学的涌现属性。
战胜数据移动瓶颈的核心思想是如此基础,以至于它以不同的语言出现在完全不同的科学领域中。
考虑一下用于气候和天气预测的高性能计算(HPC)所面临的挑战。在超级计算机上运行的全球模拟在每个时间步都会产生PB级的数据。传统上,这些数据会被写入一个巨大但相对较慢的并行文件系统以供日后分析。这个I/O步骤可能比计算本身花费更长的时间,迫使科学家减少数据保存频率,从而损失科学保真度。解决方案?“原位”处理。分析或数据简化代码不是移动原始数据,而是在计算节点本身上运行,就在模拟数据位于内存的地方。然后,体积小得多的处理后结果被“在途”发送到专用的暂存节点,这些节点异步处理写入存储的慢速任务。这使得主模拟可以继续进行,从而极大地减少了因I/O而损失的时间。对于一个高频率的工作流,这可以将数小时的阻塞I/O时间缩短为仅仅几分钟,从而为科学发现开辟了新的途径。这是超级计算机规模的存内逻辑。
也许最令人惊叹的跨学科联系将我们带到了合成生物学的领域。研究人员正在探索将DNA作为一种超密集、长期的存储介质——一个分子硬盘。理论上,一克DNA可以存储比一个仓库的传统硬盘更多的信息。你将如何搜索如此庞大的档案?对全部DNA进行测序将是极其缓慢和昂贵的。答案再一次是,存内计算。科学家可以将一个“查询”设计成一组自由漂浮的DNA链。这些链通过一系列被称为链置换的、经过精巧编程的化学反应与存档的DNA相互作用。这些反应可以被设计成形成逻辑门——与、或、非——直接在分子数据上执行布尔搜索查询。只有满足查询条件的DNA分子才会将其“有效载荷”链释放到溶液中,以供收集和测序。计算在试管内发生,选择性地检索感兴趣的数据,而无需读取整个档案。
从根据脉冲时序学习的硅突触,到在模拟飓风接触磁盘之前就对其进行分析的超级计算机,再到搜索分子文库的DNA计算机,我们得到的教训是相同的。逻辑与内存的分离并非自然界的基本法则;它是我们技术发展的一个历史产物。通过挑战它,我们不仅仅是在构建更好的计算机——我们正在发现一种更集成、更高效、最终也更强大的计算方式。