
数十年来,计算的体系结构一直被处理与存储之间的根本分离所定义。这种被称为冯·诺依曼架构的设计,为数字革命提供了动力,但如今正面临一个严峻的性能壁垒:冯·诺依曼瓶颈。在高速处理器和其远端内存之间无休止地穿梭数据,消耗了巨大的能量和时间,扼杀了我们最强大机器的性能。本文直面这一挑战,探讨一种革命性的范式——内存计算(Compute-in-Memory, CIM),它通过在数据存储的位置直接进行计算,从根本上重塑了这种关系。
我们的探索始于“原理与机制”部分,在那里我们将剖析冯·诺依曼瓶颈,并量化其对性能和能耗的影响。接着,我们将介绍CIM的核心理念,并探讨其两种主要实现方法:优雅的、由物理学驱动的模拟计算世界,以及精确的、有条不紊的数字位运算领域,同时权衡两者的利弊。
随后,“应用与跨学科联系”部分将理论与实践联系起来。我们将探究为何CIM是人工智能领域的游戏规则改变者,它能大规模加速深度学习核心的矩阵乘法运算。我们还将涉足神经形态计算这一激动人心的前沿领域,探索CIM如何为构建受大脑启发的系统提供基础,并展望3D集成等新兴技术如何塑造计算的未来。这次探索将揭示,CIM不仅是一项硬件创新,更是推动多个科学与工程学科进步的催化剂。
想象一位顶级大厨在一个巨大的工业级厨房里工作。他的烹饪台是工程学的奇迹,每小时能够切配、煎烤和装盘数百道菜肴。但有一个问题:每一种食材,从一撮盐到一根欧芹,都存放在厨房另一端的同一个遥远储藏室里。对于每道菜的每一个步骤,大厨都必须停下来,跑到储藏室,找到食材,然后再跑回来。显而易见,无论大厨的手速有多快,整个烹饪操作的效率都将受制于往返储藏室那段乏味而耗时的路程。
简而言之,这就是现代计算所处的困境。七十多年来,我们一直在一种名为冯·诺依曼架构的蓝图上构建我们的数字世界。这个由杰出的博学家John von Neumann及其同事提出的设计,优雅而简单:一个中央处理器(CPU),即“大厨”,与一个存储单元(即“储藏室”)在物理上是分开的,而程序指令和数据都存储在后者中。两者通过数据总线相连,这就像是供大厨疯狂冲刺的狭窄走廊。这种分离曾取得了惊人的成功,但随着我们的处理器变得快得令人炫目,我们一头撞上了一个根本性的限制。我们称之为冯·诺依曼瓶颈。
这个瓶颈并非一个微妙的学术概念;它是一个硬性的物理约束,支配着你拥有的几乎每一台计算设备的性能和能耗。一个系统的总性能不仅仅是其处理器的峰值速度,它受限于数据旅程中最慢的部分。我们可以用一个简单而有力的规则来表达这一点:可实现的吞吐量取决于计算速率和内存数据速率中的较小者。
让我们用一些数字来说明这一点。一个现代加速器芯片可能拥有每秒一万亿次运算()的峰值计算速率。这是一个几乎无法想象的数字。然而,这个芯片可能通过一条总线连接到其主内存,而该总线每秒只能传输,比如说,千兆字节的数据()。如果一个典型的运算,如乘积累加,需要取两个数并写回一个结果(总共12字节),那么内存系统每秒只能维持约亿次运算()。我们强大的万亿次级处理器被限制了近200倍,被迫等待来自储藏室的数据。系统完全受内存限制(memory-bound)。
这种疯狂的数据穿梭还带来了另一个更深远的代价:能量。在计算机芯片的微观世界里,将一个数据位通过相对较长的导线从内存中移出,所消耗的能量可能远超对其进行一次逻辑运算的能量。这就像我们的大厨跑去储藏室所消耗的卡路里比实际烹饪还要多。在一个典型的现代系统中,这种能量差异可能是惊人的。从片外内存移动一个比特的能量可能在皮焦()的量级,而执行一次简单计算的能量可能仅为——相差百倍。在人工智能这样需要处理数十亿数字、数据密集型应用成为主流的时代,这种数据移动能耗占据主导地位,耗尽了电池电量,并导致数据中心产生巨额电费。
如果问题在于厨房和储藏室之间的距离,那么解决方案就非常直接:将储藏室建在厨房周围。这就是内存计算(CIM,有时也称为In-Memory Computing, IMC)的核心理念。CIM不再将内存视为一个被动的存储仓库,而是将其转变为一个主动的计算基底。这是一个范式转变,旨在*原位(in-situ)*执行计算,即在数据存储的地方直接计算,从而最大限度地减少甚至消除到独立处理器的高昂传输成本。
对于一个需要个输入来产生个输出的工作负载,传统系统必须在内存总线上移动个数据。而CIM系统通过在本地执行计算,可能只需要移动最终的个结果,从而大大减少了数据流量。对于许多人工智能工作负载而言,其输入(例如模型权重)的数量远大于输出的数量,因此节省的开销是巨大的。
我们可以使用屋顶线模型(Roofline model)来将这一优势形式化,这是一个可视化系统性能极限的工具。该模型引入了一个关键指标,称为运算强度(operational intensity),定义为从内存中每移动一个字节的数据所执行的算术运算次数。运算强度低的工作负载是内存受限的;强度高的则是计算受限的。分界线是一个阈值。对于我们之前讨论的系统,这个阈值是。任何强度低于此值的任务都会受到内存的瓶颈限制。通过将数据保持在本地,CIM极大地减少了分母中的“移动字节数”,从而有效地提高了工作负载的运算强度,并将其性能推向芯片的真正潜力。
一个设计初衷仅是存储0和1的存储器件,如何能够真正进行计算呢?其中一个最优雅的答案来自模拟电子学的世界,在那里我们可以利用基本的物理定律来为我们完成数学任务。
想象一个由导线组成的网格,即一个交叉阵列,每个交叉点上都有一个微小的阻性存储元件。这些电阻器的电导(电阻的倒数)可以被编程到所需的值,用来存储一个矩阵的数值——例如,神经网络的突触权重。现在,我们向这个网格的水平行施加一组电压,代表一个输入向量。会发生什么呢?
欧姆定律,,告诉我们,在每个交叉点,都会有一个电流流过,其大小是其所在行的输入电压和电阻器存储电导的乘积。然后,基尔霍夫电流定律——一条简单的守恒规则,规定流入一个节点的电流必须等于流出该节点的电流——开始发挥作用。沿着一条垂直列产生的所有微小乘积电流,会自然地在该列的导线上汇集在一起。在一个瞬时的物理过程中,该阵列就计算出了一个点积:一列上的总电流是输入电压与存储电导乘积的总和。这是一个通过电学定律并行执行的向量-矩阵乘法。这种模拟电流求和是许多CIM架构核心的基本操作。这是通过物理学实现的计算,其效率惊人。
当然,大自然很少会提供免费的午餐。模拟世界是连续且混乱的,而不是数字世界里干净、离散的1和0。利用物理学进行计算意味着我们必须同时应对其不完美之处。
首先,元器件并非完美。即使被编程为相同的值,一个阻性器件的电导也永远不会与它的邻居完全相同。这种器件差异性(device variation)可以被建模为每个存储权重上的一个小的随机误差。当你将数千个这样略有瑕疵的器件的贡献相加时,误差会累积起来。最终输出电流中的噪声会随着阵列规模的增大而增长,这是构建大规模模拟系统的一个关键挑战。
其次,元器件不是静态的。在一些有前景的存储技术中,如相变存储器(PCM),编程后的电导值并非永久不变。它会随着时间的推移而“漂移”,遵循一种可预测的幂律衰减。一个被完美编程的权重,其值可能在几小时或几天内衰减超过50%。这意味着神经网络的大脑实际上在随时间遗忘,这是一个必须通过工程手段解决的严重可靠性问题。
第三,测量本身是不完美的。用于读取输出电流的灵敏放大器和模数转换器(ADC)自身也存在系统性的增益和偏移误差。一个测得的的电流,实际上可能对应一个的真实电流。幸运的是,这些系统误差可以被校正。通过使用片上具有已知电流的参考列,我们可以进行两点校准,以找到校正参数,确保我们的结果是准确的。
最后,随着我们构建更大的阵列以进行更多计算,总输出电流可能会变得非常大。这意味着线路末端的ADC需要能够处理巨大的动态范围,同时仍要对微小的变化保持敏感,这要求其分辨率随阵列大小对数增长——这在面积和功耗上都是一个巨大的成本。
如果模拟世界是混乱的,有没有更清晰的方法呢?另一种选择是数字位运算内存计算,它将数字存储器的标准、可靠的构建模块——SRAM单元——改造用于计算。
数字方法不是一次性地用模拟方式完成整个乘法,而是将其分解为各个组成位。一个8位数字乘以另一个8位数字可以分解为次单位乘法(逻辑与操作)。一个数字CIM阵列可以同时在数千行上执行这些位运算。在64个周期中的每一个周期,阵列都会计算出一个部分积。外围的“群体计数”电路随后对结果进行计数,一个数字移位加法器单元将这64个部分积组合起来,以重构出最终的多位答案 [@problem_-id:4276901]。
这种方法的美妙之处在于其精度。除非出现硬件故障,否则算术是精确的。它避免了困扰模拟设计的器件差异性、漂移和ADC量化等问题。然而,其权衡之处在于速度和复杂性。它需要许多数字周期,而不是一次模拟“瞬时”完成,并且需要更复杂的外围逻辑来管理位分解和重构。
无论是优美而混乱的模拟方法,还是精确而有条不紊的数字方法,都是目前正在积极探索的强大策略。它们代表了两种不同的哲学,用以解决同一个根本性问题:内存总线之困。通过巧妙地将计算直接嵌入到内存的结构中,我们正在为新一代计算机铺平道路,它们不仅速度更快,而且能效更高,准备好迎接我们这个时代日益增长的计算挑战。
在我们之前的讨论中,我们深入了内存计算(CIM)的核心,揭示了那些允许我们在数据驻留地直接进行计算的原理。我们看到,这个优雅的想法有望打破冯·诺依曼瓶颈的束缚——这一处理器与内存之间古老的分离,迫使数据进行持续且耗费大量能源的穿梭。但是,一个原理,无论多么优美,其真正的意义在于应用。现在,我们要问:用这个强大的工具,我们能构建怎样的新世界?它为其他科学和工程领域打开了哪些大门?当我们将抽象概念转化为其所能实现的具体奇迹时,故事才真正变得激动人心。
内存计算的兴起与人工智能(AI)的爆发式发展并行不悖,这并非巧合。现代AI,特别是深度学习,对一种特定类型的计算有着永不满足的渴求:矩阵乘法。无论是在照片中识别人脸、翻译句子,还是预测天气,神经网络的核心都是巨大的数字矩阵——即代表其习得知识的“权重”。为了处理新信息,必须应用这些知识,这意味着将这些庞大的权重矩阵与输入数据向量进行一次又一次的乘法运算。
在传统计算机中,这是一个极其低效的过程。想象一个宏伟的图书馆,里面藏有全世界所有的知识,写在数百万册厚重的卷宗(权重)里。为了回答一个问题(输入),传统处理器必须像一个手忙脚乱的图书管理员,跑到书架前,抓起一抱抱沉重的书籍,把它们搬到一张孤零零的书桌(CPU)前进行短暂的查阅,然后再把它们全部搬回去。大部分的能量都花在了搬运书籍上,而不是阅读的行为本身!
内存计算彻底改变了游戏规则。它将图书馆本身转变为一个智能实体。书本(权重)留在它们的书架上。你只需轻声说出你的问题,通过一种非凡的物理协调,书本之间会相互“商议”,并共同轻声回馈给你集体的答案。数据移动所花费的能量急剧下降。在一次典型的向量-矩阵乘法中,传统系统必须获取整个权重矩阵和输入向量,而CIM系统则只需将小量的输入向量流式传输到已经存有权重的内存阵列中。对于一个中等大小的矩阵,这可以使数据移动能耗降低超过250倍! 当你考虑到一个拥有数十亿权重的深度学习模型时,节省的能耗将是天文数字,这直接转化为移动设备更长的电池续航时间和大型数据中心急剧降低的电费。
但其好处不仅仅是节省能源,还关乎速度。计算性能通常由一个简单的问题决定:你是受限于计算速度,还是受限于获取数据的速度?这个概念被“屋顶线模型”完美地捕捉,它告诉我们一个任务是计算受限还是内存受限。如果处理器大部分时间都在空闲,等待数据从内存到达——就像一位因食材堵在路上而无法烹饪的杰出厨师——那么这个任务就是内存受限的。
许多AI工作负载都严重受内存限制。CIM直接解决了这个问题。通过省去获取权重的需要,它极大地减少了必须穿越内存和处理器之间那条缓慢、拥堵的高速公路的数据量。这增加了任务的*运算强度*——即计算量与数据移动量的比率。通过提高这一强度,CIM可以将一个内存受限的工作负载推向计算受限的区域,在那里处理器可以全速运行。结果呢?显著的速度提升,这不仅仅是因为节省了能源,更是因为计算引擎不再因缺乏数据而“挨饿”。
将这一优雅的原理转化为一块可工作的硅片,是一项集物理学、材料科学和电路设计于一体的巨大工程壮举。CIM芯片不是一块简单的内存;它是一个内部结构复杂的精密系统。
如果我们窥探一个模拟CIM核心的内部,我们不仅会发现存储单元,还会发现一系列支持性角色。需要数模转换器(DAC)将数字输入数据转换为驱动内存阵列的模拟电压。在另一端,当阵列根据欧姆定律和基尔霍夫定律通过求和电流完成其神奇的计算后,需要模数转换器(ADC)将模拟结果转换回计算机的数字语言。这些外围电路消耗能量并占用空间。CIM设计的精妙之处在于分摊。一个ADC可能服务于一整列数百或数千个存储单元。虽然ADC的能量成本是固定的,但它被分摊到该列中发生的所有并行计算上。这意味着,更大、更密集的阵列效率要高得多,因为外围电路的开销被更薄地分摊了。
内存阵列本身的基本构件是一个创新的温床。虽然标准的静态随机存取存储器(SRAM)——处理器缓存中使用的那种存储器——可以被改造用于CIM,但它相对庞大。前沿在于新兴的非易失性存储器,如阻变存储器(RRAM)或相变存储器(PCM)。这些源于材料科学的新型器件,可以在更小的物理空间内存储信息。通过使用RRAM而非SRAM,设计者可以在相同的芯片面积内封装显著更多的计算能力,从而实现每平方毫米更高的运算密度。这种器件物理学和电路架构之间的跨学科舞蹈,对于推动可能性的边界至关重要。
当然,CIM并非一根能让所有数据移动消失的魔杖。它是更大系统中的一个组件,系统层面的挑战依然存在。例如,当一个神经网络的权重矩阵太大,无法装入单个CIM片块(tile)时会发生什么?矩阵必须被分割,或称“切片”,分布到多个CIM块上。现在,虽然计算在每个片块内部是局部的,但来自每个片块的部分结果必须被收集和组合。这就引入了一个新的通信层面——片间通信——它成为了一个新的需要解决的瓶颈。构建这些系统需要巧妙的映射策略来最小化这种开销。 此外,即使权重是固定的,输入数据(AI术语中的“激活值”)仍然必须流式传输到各个片块中。如果CIM核心速度极快,它处理数据的速度可能会超过片上存储层次结构的供应速度。为了解决这个问题,工程师们使用了经典的计算机科学技术,如双缓冲,即当处理器处理当前数据块时,一个缓冲区正在被填充下一个数据块,从而确保计算引擎始终有数据供应,永不空闲。
虽然CIM正在彻底改变我们为现有任务构建更快、更高效计算机的方式,但其最深远的影响可能在于催生全新的计算形式,这些形式的灵感来自于我们所知的最复杂的计算设备:人脑。
这就引出了令人兴奋的神经形态计算领域。在此,理解其区别至关重要。模拟CIM,在其基本形式下,是像矩阵乘法这类数学运算的强大加速器。而神经形态计算,则旨在模拟大脑的结构和功能。它建立在超越简单CIM的两大支柱之上:信息由稀疏的、类似脉冲的事件(如神经元放电)来表示,并且系统以事件驱动的异步方式运行。
CIM为神经形态计算提供了物理基础——内存与处理的同地协作——但事件驱动的特性增加了另一层效率。神经形态系统不是在每个时钟周期处理图像中的每一个像素(一种密集操作),而仅在有新信息——一个变化、一个动作、一个“脉冲”——出现时和出现的地方消耗能量。在一个稀疏数据的世界里,这是极其强大的。对于一个拥有数百万个突触但任何时刻只有一小部分处于活动状态的网络来说,神经形态方法仅凭其优雅地“无所事事”的能力,就可以比传统的时钟同步、密集型架构节能超过一百万倍。
当我们考虑学习时,与神经科学的联系会进一步加深。在大脑中,学习通过一种称为脉冲时间依赖可塑性(STDP)的过程在局部发生。如果神经元A总是在神经元B之前放电,并加强了B的放电,那么从A到B的突触连接就会变强。如果A在B之后放电,连接则会减弱。这是基于事件局部时序的学习。值得注意的是,一些新兴纳米电子器件的物理特性可以直接模仿这种行为。像RRAM单元这样的器件的内部状态——它决定了其电阻(即突触权重)——可以通过穿过它的电脉冲的形状和时序来改变。通过设计施加代表突触前和突触后脉冲的电压脉冲的电路,可以使器件本身实现STDP学习规则。突触权重的变化成为器件内部物理过程(如离子漂移或晶体结构变化)的涌现属性。这是材料科学、器件物理学和神经科学的惊人融合,材料本身就在学习。[@problem-id:4290322]
当我们展望未来时,我们用来构建这些计算系统的物理画布也在演变。几十年来,进步一直由缩小晶体管驱动——让它们变得更小,并在平坦的二维芯片上封装更多。但现在我们正在学习向上构建,将多层硅片堆叠成一个单一的三维(3D)芯片。
这种3D集成是内存计算的完美搭档。2D芯片的根本限制在于其与外部世界通信的能力受其周长——一条一维线——的制约。相比之下,3D堆叠可以在其整个二维区域内实现层与层之间的通信。这带来了内部带宽的巨大飞跃。想象一个庞大的单层工厂,所有东西都必须通过其外墙上的门进出。现在想象一个摩天大楼式的工厂,有电梯和楼梯连接每一层的每一个点到上下楼层。其连通性要大得多。
通过将多层内存阵列直接堆叠在逻辑层之上,我们可以创建出密度极高、紧密耦合的CIM系统,其垂直连线超短,进一步降低了能耗和延迟。当然,新的挑战也随之而来,最显著的是散热——一座由活动计算机组成的摩天大楼会变得非常热,需要精密的冷却技术。但其潜力是巨大的,有望在计算密度和效率上实现又一次指数级的飞跃。通过分析几何和功率约束,我们可以看到,从2D转向3D可以提供显著的吞吐量提升,从而在未来实现更强大、更像大脑的计算系统。
从加速已经环绕我们生活的AI,到为真正类脑计算机奠定基础,内存计算的应用既广泛又具革命性。它不仅仅是一种新型芯片,更是一种关于计算的新思维方式,一种让我们更接近自然世界无缝效率的方式,并为我们探索智能的征程开启了新的篇章。