“超越摩尔定律”,存内计算走在爆发的边缘

前言

过去几十年来,在摩尔定律的推动下,处理器的性能有了显著提高。然而,传统的计算架构将数据的处理和存储分离开来,随着以数据为中心的计算(如机器学习)的发展,在这两个物理分离的单元之间传输数据的成本越来越高,在整体延迟和能耗方面占据了主导地位。

同时,尽管传统逻辑门具有通用性和鲁棒性,但其计算效率低下,在进行乘法、加法和非线性函数等算术计算时需要消耗大量资源。此外,通过在底层硬件层面构建多个内核来提高计算并行性也需要耗费大量资源。

传统的计算硬件基于冯-诺依曼架构,处理和内存分离,数据需要在两者之间来回穿梭。这在处理机器学习任务时效率很低,既限制了计算速度,又浪费了电力。神经形态计算有各种不同的形式,是一种可能的解决方案,例如,IBM研究院的研究人员最新设计的芯片中受大脑启发,它将内存和处理元件共置一地,无需访问片外内存。这种被称为NorthPole的芯片能以比现有架构更快的速度和更低的能耗执行图像识别任务。

另一种也可归入神经形态计算的方法是存内计算 。在这里,计算任务被转移到存储它们的内存单元中。 迄今为止,已开发出了一系列复杂的存内计算技术,用于克服冯-诺依曼瓶颈,并持续提高计算吞吐量和能效。

在后摩尔时代提高计算机性能

存内计算(CIM)技术是解决摩尔定律瓶颈的潜在方案之一。

CIM与“存算一体化”(in-memory computing)和内存处理密切相关,其子领域有时被称为存内逻辑。CIM的基本思想是,将数据计算移至存储数据的内存单元,从而实现原位计算,消除带宽限制和数据移动成本。

它通常利用物理定律(如基尔霍夫电流定律)和内存阵列中的电荷共享来进行模拟计算,创建高效的计算基元,包括逻辑门和乘积(MAC)操作。此外,交叉点随机存取存储器(RAM)架构允许自然扇出,从而促进了大规模计算并行性。

这些优势催生了各种CIM研究方向, 目的是在后摩尔时代提高计算机性能,并为人工智能(AI)等应用构建计算加速器 

CIM研究涉及从基础电子器件到高级架构和大规模系统的各个层面,可以使用新兴的电阻式存储器,也可以使用成熟的硅基存储器。尽管名称相同,但CIM技术的基本原理却大相径庭,这取决于全部或部分输入操作数是否由存储单元就地提供、计算完成后是否将输出重新就地存储在存储单元中、输入/输出数据是易失性还是非易失性,以及输入/输出数据是否以相同的物理方式表示......这些差异使得我们很难对CIM技术形成全面的认识。

计算基元和CIM的基础部件。a)冯-诺依曼体系结构和CIM体系结构中计算原语的ouroboros模型。在冯-诺依曼计算机中,计算路线从基本逻辑门开始,提供算术运算,以支持人工神经网络等算法。所有这些计算都在处理器中执行,处理器与整个内存层次结构通信,以运行完整的程序。在当今的CIM提议中,计算一般基于存内单元中的物理MAC运算,利用物理定律进行乘法和求和。物理MAC可以很容易地在内存阵列中并行化,以进行向量和矩阵运算,这反过来又为ANN奠定了基础。b)CIM架构,包括内存阵列瓦片组、输入/输出(I/O)缓冲器和控制器。c)包括VM和NVM在内的存储器技术,所有这些技术都可以在交叉点架构中实现CIM

MAC是计算机运算的基本操作,它与基础布尔逻辑门的关系如图所示。在冯-诺依曼计算机中,所有操作都依赖于功能完整的逻辑门,而逻辑门又是由互补金属氧化物半导体(CMOS)晶体管构成的。逻辑门用于构建算术计算的处理核心,其中最重要的是MAC运算。由于矩阵代数的常规形式,标量MAC运算可通过顺序处理或多核并行化扩展到矢量/矩阵运算。

最后,矩阵代数为大量算法奠定了基石,其中,ANN(和深度学习)是当今最受关注的算法。就CIM而言,其理念始于嵌入式电路物理的MAC运算,它通过基于ANN的阈值逻辑概念为逻辑门奠定了基础,而逻辑门又是通过向量运算实现的。并行MAC或逻辑门都可以沿着存储器阵列中的一列进行,尽管前者是后者的基础。在这种方法中,并行MAC和复合逻辑门都用于执行矩阵计算,例如神经网络。

与CMOS逻辑门相比,CIM逻辑门的优势在于能将计算融合到存储器阵列中,以及交叉点RAM架构提供的大规模计算并行性。 由于CIM逻辑门依赖于物理定律的模拟计算,任何线性可分离的逻辑功能都可以在一次操作中完成。因此,复杂的逻辑功能可以通过减少运算次数和降低硬件成本来轻松实现。

六类存内计算技术

全方位的CIM技术可抽象为一个等式Z = X¤Y,其中符号¤代表逻辑门或点乘运算。对于点乘,X和Y分别代表权重向量和输入向量,Z是标量输出;对于逻辑门,X和Y是两个输入操作数,Z是逻辑输出。

根据X和Y是否由存储单元提供,以及计算结束时输出Z是否重新存储在存储单元中, CIM被分为六类:XYZ-CIM、XZ-CIM、Z-CIM、XY-CIM、X-CIM和O-CIM 

全方位的CIM技术。每种类型的CIM都标明了候选存储器、计算基元和主要应用。频谱是在将并行MAC(点积)和逻辑门抽象为Z = X¤Y的基础上建立的,其中X和Y可以是标量或向量,Z是标量,¤是表示CIM操作的符号。所有CIM技术分为六种类型,从全部在内存中到不在内存中,每种类型都有若干NVM和/或VM种类,进而针对通用或特定应用

1)XYZ-CIM

X和Y均由阵列中的存储单元提供,输出Z也重新存储在一个存储单元中。计算依赖于X和Y的隐式读出,从而修改BL电位,最终改写输出单元。XYZ-CIM是典型的布尔逻辑运算,已通过单位非易失性RRAM、PCM、MRAM和易失性DRAM实现。

2)XZ-CIM

在计算过程中,只有一个输入操作数驻留在内存单元中。另一个输入由外部施加的电压编码,输出Z在计算结束时重新存储为单位单元状态。XZ-CIM仅适用于基于NVM的逻辑运算,典型的存储器技术包括RRAM和MRAM。

3)Z-CIM

存储单元中只存储输出Z,输入通过BL和WL提供。考虑到BL和WL电压的所有可能组合,由此产生的单比特单元状态构成一个逻辑门。Z-CIM已在RRAM、MRAM和PCM等NVM上实现。


4)XY-CIM

输入操作数X和Y均由存储单元提供,而输出Z则通过BL检测放大器 (SA) 获得。它也适用于逻辑运算,存储器技术可以是电阻式NVM或SRAM。它的工作原理是并行读出两个单比特存储单元,并将读出结果感应和离散化为二进制输出。


5)X-CIM

只有输入X由阵列中沿一列的存储单元提供,Y由施加到WL的外部电压表示,输出Z则在BL外围获得。与上述类型的CIM不同,X-CIM通常旨在以高度并行的方式执行两个向量的点乘。所有存内技术,包括单比特或多比特NVM和单比特VM都已实现了X-CIM,这为进一步鼓励其研究提供了积极反馈。

6)O-CIM

这里没有存储单元之间的交互,而是将传统逻辑门或计算模块置于存储单元或阵列附近进行计算。O-CIM通常采用成熟的存储器技术进行设计,包括SRAM和DRAM。它类似于早期的近存储器计算概念,但其进步在于进一步缩短了存储器与处理器之间的距离。
由于全面识别了输入的来源和输出的方向,基于该分类法的频谱应涵盖所有CIM技术。在频谱的末端,它与传统的冯-诺依曼范式相联系。在这一范围内,特定的存储技术可能被用于多种类型的CIM,但原理各不相同。另一方面,某些类型的CIM在技术上可能只适用于特定的内存设备,或只值得关注。此外,计算基元与CIM类型相关,并最终与存储器载体相关。

除O-CIM外,所有其他CIM类型都依赖于模拟乘法、加法和电路中物理定律的非线性激活。将前两种运算结合起来,就可以得到用于并行MAC运算的点乘,而将所有三种运算结合起来,就可以得到布尔逻辑门。

各种CIM技术的原理

XYZ-CIM、XZ-CIM和Z-CIM的共同点是将输出Z原位存储在存储单元中。它们都主要使用新兴的NVM进行逻辑运算。由于新兴NVM通常是基于电阻的存储器,因此可将其视为一般的两端电阻开关 (RS) 器件。通常情况下,当器件两端的电压足够大且具有正负极性时,就会通过“设置”切换到高导状态(HCS),或通过“复位”切换到低导状态(LCS)。

这种描述适用于RRAM、MRAM和FTJ。由于CIM通常只使用一种开关极性,因此单极性开关PCM也可包含在此模型中。两种电导状态编码二进制1和0,与传统存储器应用相同。对于逻辑门,计算依赖于器件的条件开关,这是其他器件状态和外加电压的函数。这种非线性特性可视为 ANN中的激活函数。

因此,任何基于RS的NVM器件都有可能用于这三种类型的CIM。

XYZ-CIM、XZ-CIM和Z-CIM。a)电阻式存储器件示意图及其RS行为;b)XYZ-CIM的状态IMP逻辑;c)XYZ-CIM的SFNN;d)DRAM位向逻辑;e)XZ-CIM 的逻辑运算;f)Z-CIM 的逻辑运算

1)XYZ-CIM:NVM有状态逻辑

在XYZ-CIM建议中,一种突出的方法是基于所谓的有状态逻辑,利用NVM器件(通常是RRAM)实现。蕴含(IMP)门最初是为有状态逻辑运算而提出的,一个RRAM单元的电导状态编码输入操作数X,而另一个单元则代表操作前和操作后的输入Y和输出Z。电阻的电导值大致设定在LCS和HCS的对数值中间。

Vp(例如,Vw/2)和Vw分别施加到两个WL中的一个不同的WL上,其中Vw足够大以实现设定的转换,而Vp则不然,同时BL电阻器接地。激活后,单元Y的最终状态,即输出Z,根据IMP函数确定。具体来说,如果Y单元最初处于HCS (1),则施加的电压极性不会触发开关;如果Y最初处于LCS (0),则其开关取决于X:如果X处于LCS,由于两个LCS设备的隔离,BL电位将接近于0。

因此,器件Y上的压降足以将其切换到HCS;但如果X位于HCS中,Vp将大大提高BL电位,从而阻止Y的切换。

2)XYZ-CIM:DRAM位向逻辑

DRAM位向逻辑是另一项重要的XYZ-CIM提议,它依赖于计算期间的锁存型SA同步重写。商用DRAM产品只需少量修改甚至无需修改即可实现该功能。

图(d)显示了由三个DRAM单元组成的一列,在BL的末端有一个锁存型SA。SA是一个双稳态电路,由两个CMOS反相器组成,形成一个正反馈回路。与BL相连的终端既是输入节点,也是输出节点,通过它来检测和修改BL电压。当BL电压高于(或低于)VDD/2时,SA迅速做出反应,将输出稳定在VDD(或0)。在逻辑运算中,多行同时被激活。因此,电路自然会执行三个输入单元的多数逻辑功能,逻辑结果最终会重新存储在所有三个单元中。

第一步,将BL预充电至VDD/2,以实现位向逻辑。然后,用VDD同时激活三个WL,而SA尚未激活。存储在DRAM单元X、Y和Q中的电荷由所有DRAM电容(电容CC)和寄生BL电容(电容CB)共享,从而使BL电位达到VDD/2。

多数逻辑函数是线性可分离的,DRAM电路可视为单层感知器,类似于SFNN。在该模型中,输入是存储的电压电平,网络权重由电容给出,非线性激活神经元由阈值为VDD/2的锁存型SA激活。在多数门的基础上,可以方便地实现更复杂的功能,例如全加法器。为了实现一套完整的逻辑门,可以利用SA中的互补位设计NOT门,通过另一个选择晶体管将互补位写入双触点单元。与保留所有输入的SFNN不同,DRAM位逻辑对逻辑输入具有破坏性。为解决这一问题,可在阵列中专门设计三行用于逻辑运算。

此外,在逻辑运算之前和之后,应执行RowClone操作,即利用相同的电荷共享原理将源行中的数据复制到目的行,以便在阵列内传输输入和输出。

4)XZ-CIM

XZ-CIM还依赖于RRAM和MRAM等NVM器件的条件切换。有状态逻辑以两个输入存储单元的电导状态为条件,而XZ-CIM中用于调节的两个输入则分别用电导状态和电压表示。

这种编码方法为逻辑门的构建提供了更多便利,并使XOR等线性不可分割函数的一步操作成为可能,但却增加了级联时转换输入和输出异质属性的成本。基于两个RRAM单元的典型XZ-CIM逻辑门如图(e)所示。一个输入操作数X由RRAM器件的电导状态提供,而另一个输入操作数Y则由外加电压编码。

输出重新存储在第二个单元中,该单元初始化为LCS(0)。BL负载电阻的电导值设置在LCS和HCS之间,以便进行适当的分压。输出存储单元采用恒定的Vp,条件是Vset/2 < Vp < Vset,然后WL1和BL的电压决定逻辑门的类型。在XOR的情况下,WL1和BL的电压分别为 (Y - 1)Vp 和 (-Y)Vp 。

通过改变所加电压的编码方案,该电路可以实现所有16个双输入布尔逻辑门,从而简化复杂函数的逻辑合成,进而缩短CIM的延迟时间。

5)Z-CIM

基于NVM的逻辑可扩展到Z-CIM,其中输入操作数X和Y均通过施加电压来提供。输出Z作为存储单元的电导状态就地存储(图f)。除了MRAM和PCM之外,RRAM一直是Z-CIM研究最活跃的对象。

它基本上基于NVM的传统写入操作,但对传统上被认为无效的其他输入组合进行了逻辑扩展。RRAM的切换取决于压降的极性和初始电导状态。当存储单元最初处于LCS状态(Z0 = 0)时,只有X = 1 (Vw)和Y = 0的输入组合才能将设备切换到HCS,即Z = 1,而在其他输入情况下,设备仍处于LCS状态(Z = 0)。当存储单元最初处于HCS状态(Z0 = 1)时,只有X = 0和Y = 1 (Vw) 的组合才会关闭设备并存储 Z = 0,而在其他情况下,设备仍处于Z = 1状态。这两种情况分别对应于非蕴涵函数(NIMP)和互补蕴涵函数(CIMP)。

通过将一个输入固定为1或0,或通过交换应用于WL和BL的操作数以及级联此类操作,所有14个线性可分离逻辑门都可以用存储单元来实现。

线性不可分离的XOR/XNOR是例外。为使其可行,应采用基于堆叠两个极性相反的电阻开关的互补RRAM概念,利用其非对称读出过程。另外,1T1R单元可以更有效地执行Z-CIM的XOR逻辑,这要归功于该结构的终端数量较多,便于对输入操作数进行编码。

6)XY-CIM

基于NVM或SRAM的逻辑运算也提出了XY-CIM。

就NVM而言,两个输入操作数是存储单元的二进制电导状态(LCS或HCS)。基本上,任何具有两种不同电阻状态的NVM器件都可用于XY-CIM,包括本征三端器件,如 FeFET。在同时激活两个WL时,存储单元的状态被读出到BL,其中的电流(ILCS或IHCS)被累加,并由电流模式SA感测。可以将SA视为二元神经元电路,以参考电流作为激活阈值,产生逻辑输出。

两个输入的四种组合会产生以2ILCS、ILCS + IHCS和2IHCS为中心的三种BL电流分布。因此,在2ILCS和ILCS + IHCS之间(或ILCS + IHCS和2IHCS之间)设置SA的阈值,就能得到线性可分离的OR(或AND)逻辑函数。

鉴于神经元激活是通过CMOS电路实现的,因此很容易得到两个逻辑门的倒数,即NOR和NAND。OR和NAND的组合将产生线性不可分割的XOR逻辑,通过连续施加两个参考电流来实现。

XY-CIM和X-CIM。a)XY-CIM基于电阻式NVM的逻辑运算。b)基于SRAM的XY-CIM逻辑运算。c-f)基于被动1R NVM(c)、基于1T1R NVM(d)、基于NOR闪存(也基于FeFET)(e)和基于SRAM(f)的点积运算

就SRAM而言,XY-CIM的两个输入操作数由存储在SRAM单元中的电压电平提供。

SRAM单元的核心是双稳态电路,其两个内部节点存储二进制电压电平及其补码。在标准6T SRAM结构中,两个选择晶体管控制BL和互补BLB,以访问两个节点。在进行逻辑运算时,BL和BLB首先被预充电到VDD,如同SRAM的读出过程。

同时激活两个WL时,BL和BLB 可能会放电,这取决于两个SRAM单元的状态。具体来说,只有当输入X和Y均为1时,BL才会保持在VDD位置。如果有一个单元处于0状态,则BL放电至较低电压;在两个单元都处于0状态的情况下,BL电压的降低会加剧。

通过为SA设置参考电压,以区分VDD和其他降低的BL电压,SA输出被识别为AND逻辑结果。当BLB访问输入位X和Y的补码时,SA采用相同的参考电压提供NOR逻辑。

同样,AND和NOR的组合也有助于XOR逻辑。传统6T SRAM的位逻辑运算会受到存储单元的干扰,这是由于通过同一端口的写入和读取路径耦合所致。当多个WL同时开启时,BL/BLB可能会放电,进而导致存储单元状态翻转。为解决这一问题,主要策略是通过增加存取晶体管或修改其配置来解耦写入和读取路径,从而形成4 + 2T/8T/10T SRAM结构。此外,WL的欠驱动或异步激活也有助于解决干扰问题。

7)X-CIM

X-CIM的基本物理原理与XY-CIM基本相同,只是输入操作数的定义不同。

通常,X-CIM以实现并行MAC运算为目标,其中一个输入操作数由表示权重向量x的存储单元列提供,另一个输入则是外部施加到WL或其他线路上的电压向量y。因此,这两个向量的点积在BL上以电流或放电累积的形式产生,然后由BL外围电路感应。人们对ANN加速器的浓厚兴趣促使所有存储器技术都被用于X-CIM,该技术正在积极研究中,并努力实现模拟-数字混合浮点精度方案。

X-CIM也可能意味着基于非易失性存储器(如MRAM和FeFET)的逻辑运算。然而,人工智能加速器在并行MAC运算方面的大量工作使这方面的努力黯然失色。

在虚拟机方面,SRAM凭借其独特的优势和工业成熟度,包括快速读/写速度、低功耗、无限耐久性以及与最先进逻辑工艺的兼容性,在利用X-CIM进行并行MAC加速方面备受关注,尽管其代价是单元占用空间较大。值得注意的是,在锁存器电路中,还包括x的补码二进制向量,这对带符号计算非常有用。

SRAM结构具有丰富的灵活性,可用于可靠、高效的X-CIM优化,但4T锁存器电路始终是权重存储的核心。一种策略是通过采用8T/10T/12T结构来解耦读出路径,以保护SRAM单元免受干扰,但这会进一步加剧单元占用空间的问题。在一些基于标准6T SRAM阵列的方案中,加入了专门设计的局部计算单元和全局BL,以平衡电路功能和面积开销之间的权衡。

根据存储器技术的不同,存储在存储器单元中的权重向量x可以是单位或多位的。虽然VM通常是单比特器件,但许多NVM显示多比特甚至模拟状态,这是提高X-CIM吞吐量的关键因素,而机器学习加速非常需要这种吞吐量。闪存、FeFET、PCM、RRAM和FTJ是出色的模拟电导器件,这要归功于它们的基本物理特性,允许对电荷存储、铁电极性比、晶体体积和导电丝直径等状态变量进行持续调整。

因此,这些非易失性存储器件的存储窗口很大,从10到10^6不等,这使它们能够在单个单元中存储多比特信息。由于电导开关比小,MRAM被认为是单比特存储器,尽管目前正在努力开发多比特器件。为了最大限度地提高计算效率,输入矢量y通常编码为多比特值,如具有模拟幅度或宽度的WL电压脉冲,不过也可能采用串行二进制脉冲以节省数据转换成本。

因此,CIM操作是在电流域、时域或电荷域进行的。鉴于x和y都可能是二进制值、模拟值或由差分运算实现的双极值,两个元素的乘法运算可能采用AND逻辑、双极XNOR或纯模拟结果的形式。由于多位输入和同时激活的多个WL(通常为≫2),点乘的检测需要一个能量化多个离散输出电平的转换电路,这通常通过多级SA或模数转换器 (ADC) 来实现。与存储单元相比,SA和ADC通常要大得多,耗电量也更大。因此,除了原位计算和X-CIM固有的并行性,SA或ADC已成为另一个效率瓶颈,需要进行设计优化,以保持CIM带来的性能提升。

8)O-CIM

最近,基于SRAM的CIM通过在存储单元附近加入传统逻辑门,逐步转向全数字领域。由于在计算过程中不需要融合存储单元,因此被合理地称为O-CIM。

在这种方法中,一个输入操作数通过一条专门设计的线路从外部提供,另一个输入操作数从SRAM单元读出并输入到邻近的逻辑门,由逻辑门执行两个操作数的乘法运算。为了对乘法结果进行求和,必须在附近部署分层加法器树,在数字域中产生部分和。

就DRAM而言,传统的计算模块不是将单个逻辑门嵌入存储单元周围,而是靠近阵列构建,从而利用阵列级并行性实现MAC加速。O-CIM通常采用成熟的易失性存储器进行设计,以寻求与当代商业产品的工业兼容性。通过采用标准数字计算单元,O-CIM比其他基于模拟计算的CIM更为可靠。

CIM技术发展的挑战与展望

不同CIM方案的主要特点和挑战,以及这些方法在器件可靠性和计算效率方面面临的挑战

CIM技术可用于融合内存和计算,并为加速计算提供空间并行性。 它们还可以通过使用非常规但功能强大的逻辑门(例如多数函数),以及将算术运算直接映射到硬件电路,来提供高效计算。

CIM可通过同时激活多个WL来实现,从而通过阵列中的物理规律启动存储单元之间的交互。目前已开发出一系列CIM技术,其中许多技术都基于交叉点阵列架构——该架构可容纳几乎所有存储器技术。

新兴的NVM已成为CIM的重要候选技术,并被用于探索一系列超越内存的应用。相反,DRAM和SRAM等成熟内存技术的修改较少:DRAM已针对存储密度和减少漏电进行了优化,因此不利于工艺修改,尽管CIM在阵列中造成的开销不到1%;SRAM的优势在于其在现代逻辑制造工艺中的灵活性,允许定制存储器阵列设计,尽管标准的6T SRAM仍受到重视。

在CIM中,逻辑门的开发旨在为通用计算提供功能完整的逻辑集,所有XYZ/XZ/Z/XY-CIM类型都能通过众所周知的逻辑集(如AND + OR + NOT 门或单一NAND或NOR门)或非常规逻辑集(如IMP + FALSE门)提供这种功能。相比之下,并行MAC是为加速神经网络等特定应用而开发的。

在不同的逻辑门CIM方案中,有两个因素可用来区分不同的方法:计算(即非线性激活)是否由被动RS单元执行,以及输入和输出操作数的物理属性是否相同。在前一种情况下,使用RS单元作为神经元的NVM有状态逻辑、XZ-CIM和Z-CIM实现非常紧凑,但DRAM比特逻辑和XY-CIM方案需要额外的有源SA进行计算,因此牺牲了部分面积效率。在后一种情况下,XYZ-CIM被认为是一种真正的CIM方法,因为所有输入/输出操作数都由阵列中的存储单元就地表示;它没有转换过程,因此可以轻松实现级联,并有利于顺序处理的整体延迟。

相反,NVM的XZ-CIM、Z-CIM和XY-CIM则需要额外的操作来将输出读出为电压(或将输出写入为电导),以便级联下一个逻辑门,从而造成延迟,阻碍吞吐量的提高。就SRAM而言,可能需要设计一个特殊单元,将逻辑输出写入单元,以便后续访问。

X-CIM和O-CIM均用于并行MAC,但使用方式不同:即模拟与数字。X-CIM可以提供很高的能量/面积效率,这要归功于将计算基元直接映射到存储器阵列的高效方法。然而,由于计算过程的模拟性质,它的精度会因设备(如电阻单元、电容器或晶体管)、阵列和电路的非理想性而下降。在一次操作中,还可以提高输入的分辨率、NVM的存储容量和CIM单元的并行性,从而提高计算吞吐量。然而,这种优势也带来了输入数模转换和输出模数转换的开销。

在NVM的X-CIM应用中,神经网络已被提出,由于每两层神经元之间的权重矩阵是固定的,因此MVM可以自然级联。对于通用应用,由于存储单元中一个向量的隔离,可能需要像逻辑门一样的属性转换过程来进行级联操作。

O-CIM在数字域中使用传统的CMOS逻辑门。因此,它的计算稳健性更高。此外,由于省去了ADC和数模转换器 (DAC),数据转换的负担也得以克服。模拟X-CIM的硬件映射是固定的,与之相比,数字O-CIM具有更高的灵活性,可以适应更广泛的问题。不过,由于每个处理元件都包括一个乘法器和一个用于MAC运算的加法器,因此它在面积和能效之间进行了权衡,类似于其他数字加速器,如基于收缩阵列的设计。

在用于逻辑运算的CIM类型中,NVM状态逻辑、XZ-CIM和Z-CIM依赖于存储器单元的动态RS,因此要求器件具有较高的耐用性,以支持频繁的逻辑门操作。因此,PCM(据报道其耐用性超过10^10)似乎更适合(尽管还不够)这些类型的CIM。RRAM的最新耐用性相当有限(超过10^6),必须加以改进才能达到要求。MRAM的表现甚至更好,一般显示出10^12的耐用性。然而,MRAM本身受限于较小的内存窗口,这对可靠的模拟计算,尤其是多输入逻辑门构成了障碍。

由于XY-CIM和X-CIM基本上是两个或多个单元的并行读出过程,因此可以采用任何具有两个或多个不同状态的存储器件。因此,NVM器件的时间保持特性和状态变化应足以保证可靠的读出、求和和离散化,分别由用于逻辑运算或并行MAC的SA或ADC完成。虽然NVM器件在传统的二进制存储器应用中一般都能保持足够的存储时间(85°C时超过10年),但在逻辑运算中,两个或多个单元状态的线性叠加会对存储性能造成更严格的限制。特别是在用于并行MAC的X-CIM中,最好有一个多比特单元,通常会同时激活多个单元以提高吞吐量。

在这种情况下,除MRAM外,所有NVM设备都显示出较大的存储窗口,从而实现了多位存储。然而,由于受到状态变化的严重限制,最先进的NVM只能提供可靠的两比特容量。因此,要实现更大容量的存储单元,仍有很大的器件优化空间,成熟的多级NAND闪存可以作为很好的参考。

非易失性存储器的模拟电导经常被用于计算,通常是为了在人工智能加速器等典型应用中实现较高的等效吞吐量和能效。然而,必须注意的是,传统的存储器模式应始终保持,在这种模式下,应能以足够的读出余量区分多种状态。为了开发可靠的基于电阻式NVM的CIM技术,在算法和系统层面已经做出了许多努力,但这些努力通常仅限于特定应用。

位切片、分而治之和补偿等策略已被用于扩展大规模问题的计算精度。虽然这些解决方案可方便地应用于正向矩阵乘法,但对于X-CIM的矩阵反演而言,这些问题变得难以解决,从而为基于电阻式NVM的通用矩阵计算留下了探索空间。

NVM设备的耐用性不足是有状态逻辑、XZ-CIM和Z-CIM所面临的关键问题,阻碍了它们在实际应用中的发展。对于有状态逻辑和XZ-CIM而言,由于两者都依赖于模拟乘法、求和及非线性激活,因此必须保证设置/复位电压以及LCS和HCS在周期与周期之间以及设备与设备之间的低变化,以限制逻辑运算的误码率。

Z-CIM不需要模拟乘法和求和。因此,它只需要较低的设定/复位电压变化。相比之下,XY-CIM和X-CIM则需要较低的LCS和HCS变化,以实现可靠的CIM操作。特别是在使用多位NVM器件的并行MAC中,输入存储单元的电导分布和点乘结果会变得更加复杂,因此需要设计精细的读出电路(SA/ADC)。此外,X-CIM还可能涉及神经网络训练。因此,电导更新在电导范围的最小或最大边界具有良好的线性非常重要。

要克服NVM器件的耐久性、时空一致性和更新线性等挑战,从根本上说,这些都是由器件物理特性控制的,因此必须对器件材料和结构进行优化,从源头上解决这些问题。所有这些CIM方案都依赖于模拟计算,而模拟计算很容易受到工艺-电压-温度(PVT)变化的干扰。不过,对于使用新兴NVM的CIM的PVT问题,目前仅有偶尔的研究,但这是实际应用过程中的一个重要挑战。

要最大限度地提高CIM的能效,需要解决几个问题:

1)在基于RS的CIM方案中,每个事件都会导致相当大的功耗。因此,需要优化设置/复位电压和电流。

在使用静态存储单元状态的XY-CIM和X-CIM中,NVM器件较低的绝对电导率应有助于降低能耗。尽管如此,这种优化并不容易,因为低电导通常伴随着非线性电流-电压特性,这会带来额外的计算误差。

2)在合成具有完整功能逻辑集的复杂逻辑运算时,可选择的方法多种多样。

它可以由许多双输入门电路或少数几个多输入门电路组成,从而导致硬件和延迟成本的巨大差异,以及对模拟非理想性的不同敏感性。因此,要实现可靠而高效的逻辑合成,就必须权衡利弊。X-CIM一直在努力解决ADC和DAC的开销问题,而这正是提高能效的主要挑战。在O-CIM中,虽然使用单逻辑门(例如NOR门)可以方便地实现乘法器,但加法器树一直是公认的瓶颈。因此,需要在这方面进一步努力,以提高能效和面积效率。

3)此外,虽然X-CIM的并行MAC已被证明在加速计算方面具有相当大的潜力,但它本质上无法提供通用计算系统。在这种情况下,CIM方法中逻辑门与并行MAC运算的结合值得进一步探索。

总结:存内计算开辟数据处理新范式

目前,存内计算提供了多种技术,但迄今为止最重要的是存内数据库(以下简称IMDB),市场上已有相关软件及其应用。

早在1984年,市场上就出现了存内数据库,最早的产品之一是IBM TM1 - OLAP数据库。然而,由于操作系统和可用硬件的限制,这些系统无法发挥其优势。近年来,这些限制逐渐被淘汰,市场上出现了几种来自主要供应商的IMDB解决方案。

2008年,IBM推出了SolidDB作为IMDB,它通过两个独立但永久同步的数据库副本以及硬盘上的永久日志来提供数据的完整性。一旦发生数据丢失,整个数据库可在几秒钟内恢复而不会丢失数据。Oracle于2009年推出了 TimesTen作为IMDB,可用作传统RDBMS的缓存或独立数据库。TimesTen使用事务日志和数据库检查点作为数据完整性措施。2010年,SAP推出了HANA数据库技术,这是一种高性能分析设备。

SQLite是一个包含关系型数据库系统的程序库,由于具有许多数据库接口,是世界上使用最广泛的SQL数据库。要在主内存中使用SQLite数据库,可以在数据库连接中使用:“存内”选项。一旦关闭数据库连接,数据库就会被写入磁盘。

随着技术不断发展,内存数据库正变得越来越流行,主要用于时间紧迫的应用程序、实时数据输出以及海量数据分析等领域。例如,谷歌、Twitter和Facebook使用的都是定制的存内数据库,以确保对不断增加的数据量做出快速反应。

事实上, 关于存内计算的话题,IT专家们认为这是一种范式转变,是数据处理或实时业务的新时代 

在进行研究和实验的过程中,可以证明这些说法并不那么笼统。存内计算的高效使用为大数据和实时分析领域提供了全新的可能性,但大型企业在硬件和软件领域的转换和购置成本仍然很高。

在不太复杂的领域,如软件开发中的单元测试,中小型企业已经开始使用存内数据库。在不久的将来,由于数据量的稳步增长和硬件价格的下降, 存内计算技术将变得越来越重要 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/294838.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS 应用开发之LifecycleForm接口切换LifecycleApp接口切换 LifecycleApp接口切换

LifecycleForm接口切换 FA模型接口Stage模型接口对应d.ts文件Stage模型对应接口onCreate?(want: Want): formBindingData.FormBindingData;ohos.app.form.FormExtensionAbility.d.tsonAddForm(want: Want): formBindingData.FormBindingData;onCastToNormal?(formId: string…

百度网站收录提交入口

百度网站收录提交入口 在网站刚建立或者更新内容后&#xff0c;及时将网站提交给搜索引擎是提高网站曝光和获取流量的重要步骤之一。百度作为中国最大的搜索引擎之一&#xff0c;网站在百度中的收录情况尤为重要。下面介绍一下如何通过百度的网站收录提交入口提交网站。 1. 百…

Pygame基础9-射击

简介 玩家用鼠标控制飞机&#xff08;白色方块&#xff09;移动&#xff0c;按下鼠标后&#xff0c;玩家所在位置出现子弹&#xff0c;子弹匀速向右飞行。 代码 没有什么新的东西&#xff0c;使用两个精灵类表示玩家和子弹。 有一个细节需要注意&#xff0c;当子弹飞出屏幕…

视觉里程计之对极几何

视觉里程计之对极几何 前言 上一个章节介绍了视觉里程计关于特征点的一些内容&#xff0c;相信大家对视觉里程计关于特征的描述已经有了一定的认识。本章节给大家介绍视觉里程计另外一个概念&#xff0c;对极几何。 对极几何 对极几何是立体视觉中的几何关系&#xff0c;描…

从学习海底捞到学习巴奴,中国餐饮带洋快餐重归“产品主义”

俗话说“民以食为天”&#xff0c;吃饭一向是国人的头等大事&#xff0c;餐饮业也是经济的强劲助推力。新世纪以来&#xff0c;餐饮业不断讲述着热辣滚烫的商业故事。 2006年&#xff0c;拥有“必胜客”、“肯德基”等品牌的餐饮巨头百胜集团&#xff0c;组织两百多名区域经理…

Effective-C++阅读解析条款(条款二:尽量以const,enum,inline替换#define)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 书中说这个条款或许改为“宁可以编译器替换预处理器”比较好&#xff0c;这句话在我看来原因是这样的&#xff1a; 如果我们有这样一个宏(假设写这个宏的人比较粗心)&#xff1a;#define Add(x, y) x y 我们本意是想得到…

全栈的自我修养 ———— redux入门(看这么一篇就够了!!!)

redux时react中负责状态管理的工具 一、下载二、配置1、目录2、store配置3、redux中index.js配置4、启动类中index.js配置 三、使用1、调用store的数据2、调用store里面的方法3、改变store里面的值 一、下载 npm I reduxjs/toolkit react-redux二、配置 1、目录 modules里面…

uniapp-打包IOS的APP流程

打包前所需配置 在manifest文件内配置 1. APP图标 2. 启动界面 有三种启动界面配置 第一种是 HBuilderX 官方给的通用启动界面&#xff0c;页面单一&#xff0c;屏幕中间就一个圆框图标 第二种是自定义的启动图&#xff0c;无法通过AppStore的审核 第三种是自定义storyboard启动…

ios应用内支付

用uniapp开发iOS应用内支付 准备前端代码服务器端处理如果iOS支付遇到问题实在解决不了&#xff0c;可以联系我帮忙解决&#xff0c;前端后端都可以解决&#xff08;添加的时候一定要备注咨询iOS支付问题&#xff09; 准备前端代码 获取支付通道 (uni.getProvider) uni.getPr…

240330-大模型资源-使用教程-部署方式-部分笔记

A. 大模型资源 Models - Hugging FaceHF-Mirror - Huggingface 镜像站模型库首页 魔搭社区 B. 使用教程 HuggingFace HuggingFace 10分钟快速入门&#xff08;一&#xff09;&#xff0c;利用Transformers&#xff0c;Pipeline探索AI。_哔哩哔哩_bilibiliHuggingFace快速入…

CA根证书——https安全保障的基石

HTTPS通信中&#xff0c;服务器端使用数字证书来证明自己的身份。客户端需要验证服务器发送的证书的真实性。这就需要一个可信的第三方机构&#xff0c;即CA&#xff0c;来颁发和管理证书。CA根证书是证书颁发机构层次结构的顶级证书&#xff0c;客户端信任的所有证书都可以追溯…

提质增效|大型汽车制造业运维精细化管理建设实战

项目背景 某大型汽车制造企业随着数字化技术的深入应用&#xff0c;对运维在“质量与效率”方面的精细化管理有了更高的要求。借助云智慧运维指标体系实现了 IT 架构的智能化与可视化&#xff0c;高效解决系统显性问题&#xff0c;积极处理系统隐性问题&#xff0c;提升系统稳…

差分与前缀和

目录 差分法 例题&#xff1a;大学里的树木要打药 前缀和 例题&#xff1a;大学里的树木要维护 差分法 差分法的应用主要是用于处理区间问题&#xff0c;当一个数组要在很多不确定的区间&#xff0c;加上相同的一个数&#xff0c;我们如果每个数都进行加法操作的话&#x…

C++初学者:如何优雅地写程序

我喜欢C语言的功能强大&#xff0c;简洁&#xff0c;我也喜欢C#的语法简单&#xff0c;清晰&#xff0c;写起来又方便好用。 一、为什么不用C语言写程序。 C语言用来做题目&#xff0c;考试研究是很方便的&#xff0c;但是用来写程序做软件&#xff0c;你就会发现&#xff0c…

低噪声、轨至轨运算放大器芯片—— D721、D722、D724,适合用于音频领域

应用领域 D721、D722、D724是我们推荐的三款低噪声、轨至轨运算放大器芯片&#xff0c;其中D721为单运放&#xff0c;D722为双运放&#xff0c;D724为四运放。适合用于音频领域、传感器等的信号放大处理&#xff0c;比如K歌宝、音响、测距、滤波器、AD转换器前级信号处理等等。…

MES系统主要功能有哪些?

本文将为大家讲解&#xff1a;1、MES系统是什么&#xff1f;2、MES系统主要功能有哪些&#xff1f;3、MES系统的价值何在&#xff1f;4、使用MES系统的案例。 一、MES系统是什么&#xff1f; 正所谓“磨刀不误砍柴工”&#xff0c;咱们先来了解一下什么是MES系统。MES系统&am…

蓝桥杯第1593题——二进制问题

题目描述 小蓝最近在学习二进制。他想知道 1 到 N 中有多少个数满足其二进制表示中恰好有 K 个 1。你能帮助他吗&#xff1f; 输入描述 输入一行包含两个整数 N 和 K。 输出描述 输出一个整数表示答案。 输入输出样例 示例 输入 7 2输出 3评测用例规模与约定 对于 30% …

OpenAI官宣,ChatGPT免登录使用

昨天&#xff0c;就在愚人节当天&#xff0c;OpenAI突然宣布ChatGPT3.5向所有人开放&#xff0c;意思是即使没有注册OpenAI的账号&#xff0c;也能体验ChatGPT&#xff0c;就像浏览器一样&#xff0c;联接即可使用。 消息一出&#xff0c;OpenAI的官网直接被大量的用户挤挂了。…

Python中的全栈开发前端与后端的完美融合【第160篇—全栈开发】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python中的全栈开发&#xff1a;前端与后端的完美融合 全栈开发已成为当今软件开发领域中的…

c语言:预处理详解

1. 预定义符号 C语⾔设置了⼀些预定义符号&#xff0c;可以直接使⽤&#xff0c;预定义符号也是在预处理期间处理的。 __FILE__ //进⾏编译的源⽂件 __LINE__ //⽂件当前的⾏号 __DATE__ //⽂件被编译的⽇期 __TIME__ //⽂件被编译的时间 __STDC__ //如果编译器遵循ANSI …