来源:内容来自半导体行业观察(ID:icbank)原创,作者:李飞,谢谢!
存内计算是一个由来已久的概念,其主要目的是为了解决内存墙问题。这里首先谈谈什么是内存墙。今天最常见的计算机架构师冯诺依曼架构,而在冯诺伊曼架构中,计算/处理单元与内存是两个完全分离的单元:计算/处理单元根据指令从内存中读取数据,在计算/处理单元中完成计算/处理,并存回内存。
冯诺伊曼架构虽然经典,但是也有内存墙的问题。在过去几十年中,处理器的运行速度随着摩尔定律高速提升,然而计算机中的主存储器DRAM是基于电容充放电实现的高密度存储方案,其性能(速度)取决于电容充放电速度以及DRAM与处理器之间的接口带宽,总体来看其性能提升速度远远慢于处理器速度,目前DRAM的性能已经成为了整体计算机性能的一个重要瓶颈,即所谓阻碍性能提升的“内存墙”。
除了性能之外,内存对于能效比的限制也成了传统冯诺伊曼体系计算机的一个瓶颈,尤其是对于人工智能(神经网络模型)应用来说。神经网络的特点就是计算量大,而且计算过程中涉及到的数据量也很大,使用传统冯诺伊曼架构会频繁读写内存。目前的DRAM一次读写32bit数据消耗的能量比起32bit数据计算消耗的能量要大两到三个数量级,因此成为了总体计算设备中的能效比瓶颈。
存内计算就是为了解决内存墙问题而提出的方案。如前所述,冯诺依曼架构的计算机系统把存储器和处理器分割成了两个部分,而处理器频繁访问存储器的开销就形成了内存墙。存内计算的基本思路就是把计算和存储合二为一,从而实现减少处理器访问存储器的频率(因为计算已经在存储器内完成了大部分)。严格来说,存内计算还可以分为两种思路。第一种思路主要偏向于电路革新,其方法是通过电路革新让存储器本身就具有计算能力,例如在存储器数据读出的decoder等地方做改动来实现计算等。这样的改动通常会针对SRAM或者MRAM等存储器,可以做到非常好的能效比提升,但是其计算精度往往较为受限(例如1-2bit),因此能够支持的神经网络类型也比较有限。另一种思路是在存储器内部集成额外的计算单元,这种思路主要针对的是DRAM这样主处理器访问开销很大的存储器,它可以支持较为高精度的计算(例如浮点计算),但是限制在于DRAM工艺往往对于计算逻辑电路不是很友好,如何确保计算单元能集成到DRAM工艺里而且对存储密度影响可控就是一个挑战。
三星的存内计算技术
今年早些时候,三星正式公布了其存内处理(Processing In Memory,PIM)技术,可谓是正式标志着存内计算技术进入了主流。
三星目前PIM的第一个存储器场景是HBM。根据三星的官网的内容,该技术主要针对高性能计算人工智能相关场景,并且可以将整体计算的性能提升两倍,而能量则可以节省70%。
官网上公布的数据背后的技术又是什么样的呢?今年的ISSCC上,三星也发表了一篇针对HBM-PIM的论文《A 20nm 6GB Function-In-Memory DRAM, Based on HBM2 with a 1.2TFLOPS Programmable Computing Unit Using Bank-Level Parallelism, for Machine Learning Applications》,我们可以从中一探该技术的究竟。
根据该论文,HBM-PIM的存储器设计与传统HBM存储器设计的主要区别在于HBM-PIM中集成了额外的可编程计算单元(如下图),也即我们之前讨论的第二种存内计算的设计思路,把处理器集成到存储器中从而将部分计算负载在存储器中完成,这样就能减少处理器需要访问存储器的频率。
对于其具体的可编程计算单元,三星在论文中显示它是一个以计算为主,且包含一些控制单元的迷你处理器。具体来说,在可编程计算单元中,包含了浮点数计算阵列,流水线解码控制单元以及一个本地寄存器文件单元。其运行方式为,主处理器为可编程计算单元提供一系列需要执行的指令,而可编程计算单元则直接从邻近的DRAM中直接读取相关数据,在浮点数计算阵列中完成计算,并且根据指令进一步把结果存储到寄存器文件中,同时主控制器也可以根据需要把结果从寄存器文件中通过HBM接口读出。在ISSCC的论文中,三星使用20nm DRAM工艺实现了该HBM-PIM存储器,并且实现了1.2TOPS的浮点数算力。
HBM-PIM是三星引入PIM的第一步,三星官方资料暗示在HBM之外,三星还准备将PIM技术应用到桌面/移动端(LPDDR)和显卡(GDDR)存储器上,可见三星对于PIM技术的前景是非常看好。