一、存内计算(CIM)简介
在当今数字化时代,数据量呈爆炸式增长,对计算能力的需求也日益迫切。传统的冯・诺伊曼架构在面对海量数据处理时,逐渐暴露出其固有的局限性,即 “存储墙” 问题。数据在存储器和处理器之间频繁传输,不仅消耗大量的时间和能源,还限制了计算速度的进一步提升。存内计算(Computing in Memory,CIM)应运而生,成为解决这一问题的关键技术之一。
存内计算是一种将计算和存储功能融合在一起的新型计算架构。它打破了传统冯・诺伊曼架构中计算单元和存储单元分离的模式,使得数据在存储位置直接进行计算,大大减少了数据传输开销,提高了计算效率和能源利用率。这种创新的架构理念为未来计算技术的发展开辟了新的道路,有望在人工智能、大数据处理、物联网等众多领域发挥重要作用 。
二、存内计算:算什么?怎么算?
(一)算什么
存内计算主要处理的数据类型与传统计算并无本质区别,但在应用场景上有其独特的优势领域。在人工智能领域,大量的神经网络计算需要处理海量的权重数据和输入数据。例如,在深度学习的卷积神经网络(CNN)和循环神经网络(RNN)中,存内计算可以高效地处理卷积运算、矩阵乘法等核心操作,这些操作涉及到大量的数据点之间的乘法和累加运算。
在大数据处理场景中,数据挖掘、数据分析等任务需要对大规模的数据集合进行复杂的统计计算、关联规则挖掘等操作。存内计算能够直接在存储大数据的设备上进行这些计算,避免了数据在不同存储层次和计算单元之间的频繁搬运,从而显著提升大数据处理的速度和效率。
(二)怎么算
存内计算实现计算的方式主要基于模拟计算和数字计算两种途径。
模拟存内计算利用存储器件的物理特性来模拟数学运算。例如,基于电阻式随机存取存储器(RRAM)的存内计算,通过改变电阻值来表示数据,利用电阻阵列的电学特性直接进行乘法和累加运算。当电流通过电阻阵列时,根据欧姆定律和基尔霍夫定律,不同电阻值对应的数据在电路中自然地进行模拟计算,输出结果通过电路的输出端读取。这种模拟计算方式能够在极短的时间内完成大量的计算操作,具有极高的计算效率。
数字存内计算则是在存储单元中集成数字逻辑电路来实现计算功能。例如,在一些新型的动态随机存取存储器(DRAM)中,通过在存储单元附近集成简单的逻辑门电路,如与门、或门、非门等,实现对存储数据的逻辑运算。在进行复杂计算时,可以通过对这些逻辑门的组合和编程,实现类似于通用处理器中的算术逻辑单元(ALU)的功能。数字存内计算的优势在于其计算精度较高,易于与传统的数字电路和系统集成。
三、存内计算技术分类
存内计算技术根据不同的计算维度和数据处理方式,可以分为多种类型,以下详细介绍 XYZ - CIM、XZ - CIM、Z - CIM、XY - CIM、X - CIM 和 O - CIM。
(一)XYZ - CIM
XYZ - CIM 是一种较为全面的存内计算架构,它在三个维度上进行数据的计算和处理。在这种架构中,X、Y、Z 三个方向分别代表不同的物理维度或数据处理维度。例如,在一个三维的存储阵列中,X 方向可以表示存储单元的行,Y 方向表示列,Z 方向表示存储单元的堆叠层数。通过在这三个维度上对数据进行并行处理,可以实现非常高的计算吞吐量。在进行大规模矩阵运算时,可以利用 XYZ - CIM 架构的并行性,将矩阵的不同元素分配到三维存储阵列的不同位置,同时进行多个乘法和累加运算,大大加速矩阵运算的速度。
(二)XZ - CIM
XZ - CIM 主要关注在 X 和 Z 两个维度上的数据处理。相比于 XYZ - CIM,它减少了一个维度的复杂度,但仍然能够在一定程度上实现高效的存内计算。在这种架构中,X 方向通常用于表示数据的并行处理通道,Z 方向可以表示数据的层次结构或时间序列。例如,在处理时间序列数据时,可以将不同时间点的数据存储在 Z 方向的不同层次中,而在 X 方向上对同一时间点的多个数据进行并行计算。这种架构在一些对时间序列数据处理要求较高的场景,如金融数据分析、气象数据预测等,具有较好的应用前景。
(三)Z - CIM
Z - CIM 仅在 Z 维度上进行数据的计算和处理。它通常适用于数据具有明显层次结构或需要按顺序进行处理的场景。例如,在一些深度学习模型中,神经网络的不同层可以被映射到 Z 方向的不同层次上。数据从底层进入存储阵列,逐层进行计算和处理,最终得到输出结果。这种架构的优点是结构相对简单,易于实现和管理,特别适合处理一些具有明确层次关系的数据处理任务,如递归神经网络(RNN)中的序列数据处理。
(四)XY - CIM
XY - CIM 主要在 X 和 Y 两个维度上进行数据处理,类似于传统的二维平面处理方式。它在二维的存储阵列上实现数据的并行计算,通常适用于处理大规模的二维数据,如图像数据。在图像处理中,图像可以被看作是一个二维的像素矩阵,XY - CIM 可以利用其二维并行性,对图像的不同像素区域同时进行各种图像处理操作,如滤波、边缘检测等。这种架构能够充分利用二维存储阵列的并行性,提高图像处理的速度和效率。
(五)X - CIM
X - CIM 仅在 X 维度上进行数据处理,它是一种相对简单的存内计算架构。在这种架构中,数据通常按照一定的顺序排列在 X 方向的存储单元中,通过对这些存储单元中的数据进行逐一或并行的计算,实现特定的计算任务。例如,在一些简单的数据统计任务中,如计算一组数据的平均值、最大值、最小值等,可以利用 X - CIM 架构,在 X 方向上依次读取数据并进行相应的计算。虽然 X - CIM 的功能相对有限,但在一些对计算资源要求不高、但需要快速处理简单数据的场景中,具有一定的应用价值。
(六)O - CIM
O - CIM 即 One - Dimensional CIM,它是一种一维的存内计算架构。这种架构类似于 X - CIM,但更加侧重于在一维方向上对数据进行高效的串行计算。它通常适用于处理一些需要按顺序进行复杂计算的场景,如密码学中的数据加密和解密算法。在这些算法中,数据需要按照特定的顺序进行一系列的复杂运算,O - CIM 可以通过优化一维存储和计算的方式,实现高效的算法执行。
四、存内计算技术原理
存内计算技术的实现基于多种存储技术和物理原理,以下介绍几种常见的技术原理。
(一)基于电阻式存储器的原理
电阻式随机存取存储器(RRAM)是实现存内计算的重要存储介质之一。RRAM 的基本单元是由两个电极和中间的电阻切换层组成。通过在电极上施加不同的电压脉冲,可以改变电阻切换层的电阻值,从而实现数据的存储。在存内计算中,利用 RRAM 的这种特性,将不同的电阻值表示为不同的数据。当电流通过由多个 RRAM 单元组成的阵列时,根据欧姆定律,不同电阻值对应的电流大小不同,通过对这些电流进行求和等操作,就可以实现数据的乘法和累加运算。例如,在一个简单的矩阵乘法运算中,将矩阵的元素存储在 RRAM 阵列的不同位置,通过控制电流的流向和大小,在阵列中直接完成矩阵乘法的计算过程,避免了数据的读出和传输。
(二)基于闪存的原理
闪存(Flash Memory)作为一种广泛应用的非易失性存储技术,也可以用于存内计算。在闪存中,数据以电荷的形式存储在浮栅晶体管中。通过对浮栅晶体管的编程和读取操作,可以实现数据的存储和读取。在存内计算方面,利用闪存的存储单元可以进行一些简单的逻辑运算。例如,通过对多个闪存单元的电荷状态进行组合和比较,可以实现与、或、非等逻辑操作。此外,在一些特殊设计的闪存架构中,还可以通过对存储单元的并行操作,实现更复杂的计算任务,如多位乘法运算等。
(三)基于相变存储器的原理
相变存储器(Phase - Change Memory,PCM)利用某些材料在不同相态(如晶态和非晶态)下具有不同电阻值的特性来存储数据。在存内计算中,PCM 的这种特性被用于实现高效的计算操作。当对 PCM 单元施加不同的电流脉冲时,可以使其在晶态和非晶态之间转换,从而改变电阻值。类似于 RRAM,通过对 PCM 阵列中不同电阻值的单元进行电流控制和信号处理,可以实现数据的乘法和累加等运算。而且,由于 PCM 的读写速度较快,且具有较好的耐久性,使其在存内计算中具有很大的应用潜力,特别是在需要频繁进行数据更新和计算的场景中。
(四)基于忆阻器的原理
忆阻器(Memristor)是一种具有记忆功能的电阻元件,其电阻值会根据流经的电荷量而发生变化。忆阻器的这一特性使其非常适合用于存内计算。在忆阻器阵列中,通过控制电流的大小和方向,可以改变忆阻器的电阻值,从而实现数据的存储和计算。例如,利用忆阻器的非线性特性,可以实现复杂的神经网络计算中的突触权重更新。在模拟生物神经网络的过程中,忆阻器可以模拟神经元之间的突触连接,通过对忆阻器电阻值的调整来模拟突触权重的变化,从而实现神经网络的学习和计算功能。忆阻器的出现为存内计算在人工智能领域的应用提供了新的技术手段,有望推动神经网络计算的进一步发展。
存内计算作为一种新兴的计算技术,通过创新的架构和原理,为解决传统计算架构的 “存储墙” 问题提供了有效的解决方案。不同类型的存内计算技术和原理各有其特点和优势,适用于不同的应用场景。随着技术的不断发展和完善,存内计算有望在未来的计算领域中发挥越来越重要的作用,为人工智能、大数据处理等众多领域带来革命性的变革。