目前,所有类型存储器都已被报道用来实现存内计算,包括易失性存储器(如成熟的 SRAM、DRAM 技术)和非易失性存储器(如成熟的 Flash 技术,以及新兴的阻变存储器 RRAM、PCM 等)。在传统冯·诺依曼计算机中,CMOS 晶体管构成的逻辑门完备集是基础,它们被用来构建处理核进行标量MAC运算等算术操作,再通过串行处理或多核并行处理实现向量/矩阵运算,进而实现各种算法(如神经网络)。存内计算架构则采用截然不同的路径,它的基础是基于物理定律的 MAC 运算,利用存储器阵列的并行化进行向量/矩阵算术操作,并同样用于实现各种算法,再通过神经网络的阈值逻辑概念来执行逻辑门。可以看到,在两种计算架构中,各种计算原语形成了一种“衔尾蛇(Ouroboros)”的结构(图1)。
图 1. 存内计算架构与计算原语
逻辑门和 MAC 运算是存内计算架构中两个基本的计算原语,它们在不同类型存内计算技术中的实现方式存在原理性不同,具体取决于:(1)输入操作数是否由存储单元原位提供;(2)计算输出是否原位回存至存储单元;(3)输入/输出数据是易失性的还是非易失性的;(4)输入/输出数据是否以相同的物理变量表示。这些差异使得人们很难对不同存内计算技术形成包容性的全面了解,也阻碍了学术界和工业界不同领域(如半导体器件、IC 设计、计算机体系结构等)之间的理解与沟通。本论文以此为出发点,提出了一个存内计算技术全谱,对其进行了全面的分类与评估。
作者将计算原语抽象为 Z=X¤Y 的形式,其中 X 和 Y 可以是标量或矢量的输入,Z 是标量的输出,¤ 为表示存内计算操作的符号。根据输入 X 和 Y 是否由存储单元提供,以及完成计算时输出Z是否重新存储在存储单元中,将所有的存内计算技术分类为六种(XYZ-CIM 、XZ-CIM 、Z-CIM 、XY-CIM 、X-CIM 和 O-CIM),且每种类型都可以用几种常见的易失性或非易失性存储器实现,并用于执行逻辑门操作或并行MAC运算(图2)。作者还进一步阐述了各种存内计算技术的实现方式,总结了其主要特点、优缺点和部分应用,以及这些技术在器件可靠性、计算复杂性、延迟和能源效率等多个方面所面临的挑战。