内存计算技术是一个宏观的概念,是将计算能力集成到内存中的技术统称。集成了内存计算技术的计算机系统不仅能直接在内存中执行部分计算,还能支持传统以CPU为核心的应用程序的执行。区别于内存计算,存算一体芯片将存储与计算相结合,是 一 种 ASIC (application-specific
integrated circuit) 芯片,常用于嵌入式设备中,针对一类特定的应用设计,不能处理其他应用程序。内存计算包括两大类:近数据计算和存内计算。
两者的关系如图4 所示,它们在形式上不同,但是在特定场景下可以融合设计。近数据计算和存内计算的最大区别就是:近数据计算的计算单元和存储单元依然分离,而存内计算直接利用存储单元做计算,计算和存储紧耦合.下面将从硬件结构和所支持的计算操作两个方面具体介绍近数据计算和存内计算相关技术。
近数据计算
为缓解传统冯.诺依曼架构中总线上的数据传输问题,近数据计算在存储周边放置计算单元,这就需要高速通道进行连接。因此,近数据计算通常依赖于3D堆叠的内存结构,如 图2所示,近数据计算系统中通常有一个或多个NDC cube,它们与CPU或者GPU相连接(如 图 5 所示),多个NDC cube之间可能也会存在连接.目前基于3D 堆叠的近数据计算的研究主要集中在:(1) NDC cube模块与现有系统的集成方式;(2) NDC cube和 CPU / GPU 之间,NDC cube之间的连接方式,通信方式以及一致性协议;(3) NDC cube中逻辑层的设计;(4) NDC数据映射方式;(5) NDC的软硬件接口及上层系统软件支持。除了基于3D 堆叠内存结构的NDC,还有基于2D NVM的NDC结构,主要思想是对 NVM中现有外围电路进行改造,以支持特定类型的计算。
(1)通用的近数据计算架构;
(2)针对机器学习的近数据计算架构;
(3)针对图计算的近数据计算架构;
(4)针对垃圾回收的近数据计算架构;
近数据计算中逻辑层的设计较为灵活,可以针对不同系统的需求设计通用的处理器或者专用的加速器。在设计针对通用应用的近数据计算系统时,由于放到内存端的通用处理器一般性能较弱,需要考虑自动化地分割应用程序的计算部分,把能从近数据计算中获益的部分放到内存中处理.在设计针对特定类型应用的近数据计算系统时,需要仔细分析应用特点,抽取算子,设计对应的数据流. 除了逻辑层的设计,近数据计算系统结构设计还需要考虑:各个内存块之间的连接方式,包括通信方式和数据一致性协议、数据映射策略、与现有系统集成方式、软硬件接口设计。
存内计算
和近数据计算不同,存内计算直接使用内存单元做计算,主要利用电阻和电流电压的物理关系表达运算过程.存内计算依赖于新型的非易失性存储器,如 ReRAM和 PCM 等。在所有存内计算操作中,最普遍的是利用基尔霍夫定律(Kirchoff’sLaw) 进行向量乘矩阵操作辦]。原因在于:(1)它能够高效地将计算和存储紧密结合;(2)它的计算效率高(即,在一个读操作延迟内能完成一次向量乘矩阵);(3 ) 目前流行的数据密集型应用中,如机器学习应用和图计算应用,向量乘矩阵的计算占了总计算量的9 0 % 以上。除了向量乘矩阵操作,存内计算还能利用电阻、电流及电压的物理关系实现查询,按比特与/或/非等操作.本小节首先综述基于向量乘矩阵的存内计算研究,然后综述其他存内计算技术。
(1)基于向量乘矩阵的存内计算;
(2)基于逻辑操作的存内计算;
(3)基于搜索操作的存内计算;
存内计算支持的算子较少,设计灵活度不如近数据计算的逻辑层,但是存内计算用于支持特定算
子 (目前主要是向量乘矩阵算子)的性能很高且能耗低.存内计算的核心思路是利用新型存储的物理结构和特性来支持应用程序中频繁出现的算子.同时,存内计算相关研究还关注:存内计算模块互联和数据流的设计;数据映射策略:外围电路的优化和复用;与现有存储系统的融合。
内存计算架构与技术小结
内存计算面向的应用有如下特点:
(1)数据密集,在普通冯.诺依曼结构中有大量的内存访问;
(2)数据局部性差,片上缓存命中率低;
(3)计算密集且计算形式简单,易于并行.
内存计算包含两大类:近数据计算和存内计算。近数据计算通常使用3D 堆叠的内存结构,在内存中集成计算逻辑芯片,并用高速通道将计算单元和内存单元相连接,存算依然分离。存内计算直接使用内存单元做计算,利用电流 、电压、电阻等物理量之间的关系表示某类计算.近数据计算相比于存内计算灵活度更高,能支持较多算子;存内计算虽然能支持的算子较为单一,目前能支持向量乘矩阵算子,按位逻辑操作,或者搜索操作,但是其计算速度快且能耗低.设计内存计算架构时,设计者需要根据应用场景的需求(应用中算子的类型、延迟和能耗的限制等)进行选择,必要时也可结合使用近数据计算和存内计算两种技术,充分利用两者优点。