近存计算与内存计算

本文详细解析了近存计算和存内计算的区别,介绍了各自的分类和挑战,包括存内处理的发展历程,以及这两种计算方式在内存层次中的独立加速器和集成设计。着重讨论了如何克服内存墙问题并提升内存带宽效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       近存计算 (near memory computing) 和存内计算 (in-memory computing) 有时可以互换使用并且容易混淆。本章旨在阐明各种近存和存内计算方法的分类,并对每类内存驱动方法的显著特征进行比较。另外,可计算内存设备可以被实现为独立加速器设备或替换当前内存层次中的内存模块。我们将探讨每种方法带来的好处和挑战。

1 存内 VS. 近存

       在本节中,将介绍各种存内和近存计算方法的分类。存内计算和近存计算的界限有时是模糊的。此外,它们可以在不同的上下文中使用(例如存内数据库)。在本书中,我们重点关注先前的研究工作,这些工作改变了计算内存架构、计算方案、数据访问方案、以及数据处理与内存的邻近程度,以对其进行分类。我们的分类(见图 2.1)采用了 [13] 的见解,它建议根据计算结果的产生位置进行分类。

1.1 存内处理和近存计算

     近存计算实际上是在靠近内存的逻辑中执行计算。近存计算架构最初被称为存内处理 (processing in memory, PIM)。

    打破内存墙一直是这些以内存为中心的架构的主要目标。自 20 世纪 90 年代以来(最初的建议可以追溯到 20 世纪 70 年代),PIM 作为克服 Von Neumann 架构内存带宽限制的替代方法引起了研究人员的关注。关键思想是通过将计算单元放置在主存 (DRAM) 内,将计算单元和内存单元物理耦合在一起。

    传统的 PIM 方法在将计算单元集成到 DRAM 芯片中时面临着几个关键的挑战。然而,自 2010 年代以来,商用 3D 堆叠内存 (3D stacked memories) 的出现重新引起了人们对 PIM 的兴趣。例如,Micron 的 Hybrid Memory Cube (HMC) 在一个多 DRAM 层的堆叠下面合入了一个逻辑层,并有望在这个逻辑层内实现自定义逻辑。

    如今,PIM 通常被称为近存计算 (in-memory computing),以避免与存内计算混淆,后者是一种以内存为中心的计算的新范式,我们将在下一节中对其进行定义。近存架构与传统 Von Neumann 架构的关键区别如下。

  1. 计算逻辑靠近内存放置,通常使用高带宽电路集成技术(例如 2.5D 和 3D 集成)来充分利用内存内部可用的巨大内存带宽。
  2. 内存元件 (memory cells)、内存阵列、以及内存元件中提供基础读写功能的外围电路通常是原封不动的。
  3. 此处内存可以指指SRAM、DRAM、NVMe等

  

1.2 存内计算

    存内计算是一种以内存为中心的计算新范式,它继承了 PIM 和近存计算的精神。近存计算中,逻辑电路的实现独立于内存结构。而存内计算中,在计算这一方面密切地涉及了内存元件、内存阵列和外围电路。通常需要对它们进行结构修改或附加特殊电路来支持计算。

     历史上,存内计算被认为是一种经济上不可行的设计。修改内存元件 (memory cells) 给内存设计增加了不小的再投资成本,内存设计的技术针对当前内存架构的统一元件结构 (uniform cell structure) 进行了深度优化。此外,修改后的元件会导致存储密度大大降低,这可能使以内存为中心的架构难以证明其性能与面积(或性能与成本)权衡的合理性。

    随着非易失性内存 (non-volatile memories, NVMs) 的出现,存内计算的概念被重新审视。某些 NVM 具有在模拟域 (analog domain) 中执行计算所需的物理特性,因此只需对内存阵列进行最小的设计更改即可实现存内计算。此外,内存元件的非易失性特性解决了 DRAM 元件的破坏性读取访问问题,而后者迫使 DRAM 存内计算要求在计算之前执行一次复制。另一方面,模拟域的存内计算仍然是一种推测性 (speculative) 技术。例如,由于工艺变化和扩展的电流路径而存在的非理想性可能会损害计算结果。此外,随着模拟信号转换需要处理更多的位数,数模转换 (DAC) 和模数转换 (ADC) 的成本将变得令人望而却步。

译者注:由于早期中文翻译的不统一,"memory" 在不同语境下可能被翻译为 “内存” 或是 “存储器”,而后者一般属于传统意义上的 “外存”。此处我们为了简单起见,将 "memory" 统一翻译为 “内存”,但同时包含了传统意义上 “内存” 和 “外存” 的范畴,读者需要注意区分。

    与此同时,研究人员重新审视了为当前内存 (i.e., SRAM, DRAM, and NAND flash memory) 基板 (substrates) 设计的存内计算。他们解决了上述挑战并利用了这些内存的成熟技术。一些研究工作提出了 NVM 中的数字化计算以提高可靠性。

    存内计算方法可以进一步细分为两类:in-memory (array) 和 in-memory (periphery)。

  • In-memory (array) 或 IM-A 使用特殊的计算操作(例如,MAGIC [17] 和 Imply [18],第 5 章中解释)进行计算,在内存阵列中生成计算结果。IM-A 架构可以提供最大的带宽和能效,因为操作发生在内存阵列内部。IM-A 还可以为简单的操作提供最大的吞吐率。另一方面,复杂的功能可能会导致高延迟。此外,IM-A 通常需要为此类特殊计算操作重新设计内存元件,扩展正常的位线和字线结构。由于元件 (cells) 和阵列 (arrays) 的设计和布局针对特定电压和电流进行了大量优化,因此元件和阵列访问方法的任何变化都会导致大量的重新设计和表征工作。此外,有时需要修改外围电路(即执行读取和写入操作所需的逻辑电路,例如 word-line drivers 和 sense-amplifiers)以支持 IM-A 计算。因此,IM-A 包括 (a) 内存阵列发生较大变化的 IM-A,以及 (b) 内存阵列发生较大变化且外围电路发生较小变化的 IM-A。
  • In-memory (periphery) 或 IM-P 在外围电路内产生计算结果。IM-P 可以进一步分为数字 IM-P 方法(仅处理数字信号)和模拟 IM-P 或 IM-P (analog) 方法(在模拟域中执行计算)。修改后的外围电路可实现正常读写以外的操作,例如与不同元件交互或是加权读取电压 (weighting read voltages)。此类修改包括支持 wordline driver 中的多行激活以及用于多级激活和感测的 DAC/ADC。它们被设计用于逻辑操作以及算术操作(例如向量矩阵乘法中的点积)的计算。虽然结果是在外围电路中产生的,但内存阵列也执行了大量的计算。外围电路的改变可能导致需要采用与传统内存阵列中不同的电流/电压。因此,为了稳健性,IM-P 可能会使用稍微不同的元件设计。用于支持复杂功能的外围设备的附加电路可能会导致更高的成本。

    与近存方法相比,存内计算支持对数据进行大带宽访问。它不仅用于解决内存墙问题,还用于大规模并行处理。

1.3 存内和近存计算的比较

     在表 2.1 中提供了传统 Von Neumann 架构 (baseline)、近存计算 (NM)、IM-A 和 IM-P 架构的比较。

2 独立加速器 VS. 集成存内层次

      以内存为中心的架构将内存和计算的角色结合在内存模块中。也就是说,NM 或 IM 内存模块可以设计为独立加速器,也可以设计为集成到现有内存层次中的内存模块中的加速器,如图 2.2 所示。

      独立加速器 (discrete accelerator) 可以不受限制地完全访问其内存空间,类似于暂存器内存 (scratchpad memory)。独立内存空间将加速器与操作系统分页策略、一致性协议、数据加扰 (data scrambling) 和地址加扰 (address scrambling) 解耦。它还提供了灵活数据排列的控制。特别地,大多数 IM 架构需要在一个特定 array 的特定 columns 内对齐操作数,或是需要转置输入使得可以以 bit-serial 的方式对其进行处理。独立加速器可以支持这些特定于架构的数据布局,而不需要太复杂。用户界面可以作为与其驱动程序链接的库函数调用来提供,类似于 ASIC 加速器。独立加速器的重要缺点之一是它们仍然需要通过 PCIe 等外部链路从内存层次加载数据,这很可能成为瓶颈。这个问题在商用加速器中也同样存在:GPU 花费大量时间、通过 PCIe 总线将数据在主机内存和设备内存之间来回拷贝。该数据加载成本可以通过数据重用 (reuse) 来平摊。因此,能够实现高性能的应用程序、通常仅限于那些呈现高重用性或高 GOPs (giga-ops) 者。

     集成加速器 (integrated accelerator) 非常适合绕过内存墙。然而,内存层次每一层中的许多现有方案和约束都是为了访问性能和安全性而实现的,这使得设计成熟的集成 NM/IM 系统具有挑战性。例如,为了在计算之前对齐 SRAM subarray 中的操作数,仅为它们分配足够的地址是不够的;它们还需要以特定的方式关联起来。DRAM 使用了各种加扰技术 (scrambling techniques),并且获取操作数访问的虚拟地址也需要通过操作系统的页表。NAND flash 则使用了闪存翻译层 (flash translation layer, FTL),它增加了另一层地址转换并封装在闪存设备中。许多 NVM 的写入耐久性有限,这些转换层有助于磨损均衡 (wear-leveling)。对它们的干扰 (interference) 最终会缩短内存元件的寿命。一个集成系统需要与这些现有的框架磨合,包括操作系统和编程模型,但我们还没有一个完整的解决方案。

     独立加速器和集成加速器并不是互斥的选择。可以采用两者混合的方法。例如,我们可以在现有的内存层次中创建暂存器内存。它仍然需要从相同或较低层次的内存中拷贝数据,但与使用共享总线(例如 PCIe)导入和导出数据相比,可以期望前者达到更高的内存带宽。驱动程序还可以在计算后随时释放指定的暂存器内存,以便将其用作标准内存空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YoungerChina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值