华中科技大学冯丹教授:基于STT-MRAM的近似存储

7月28日,以“闪耀数字经济新引擎”为主题的2022全球闪存峰会(Flash Memory World)在线上盛大召开。华中科技大学计算机学院冯丹院长以“基于STT-MRAM的近似存储”为题发表了主旨演讲。

华中科技大学计算机学院院长冯丹报告的主要内容分为四个部分,主要分享我们利用新型非易失存储器件在近似存储方面做的一点工作,包括STT-MRAM和近似存储的相关背景,以及在STT-MRAM近似存储领域的一些探索工作。

背景介绍

目前,神经网络、图像、视频处理、图处理等日益增长的应用,产生了大量的非结构化数据。据统计,2025年全球的数据量将达到175ZB,届时将对整个计算存储系统带来巨大的压力。

大规模的数据访问,会大幅增加系统能耗,并降低性能。例如单次访问DRAM的延迟能耗为640pJ,是一次32bit加法运算开销的6400倍。因此如何减少片外访问,对于提高当前系统的性能和能效是一个重要的问题。为了解决数据量爆增这个问题,我们可以增加硬件资源,如存储容量等等。在理想情况下,随着硬件资源的增加,系统的整体性能将会得到大量提升,大致会是一个线性关系。然而CMOS发展会受到摩尔定律的限制。

硬件规模不能无限扩大,目前在10纳米以下进行扩展已经很难,因此随着硬件资源的增加,性能的提升将会遇到瓶颈,不会有显著的提升。另一方面,我们发现目前很多应用,如神经网络、图像处理等等,他们是具有较强的错误容忍能力。

一是应用本身具有较强的鲁棒性,少量错误不会产生大的输出损失。二者用户对输出质量的感知是有限度的。这些性质为性能和能效提升提供了新的机遇。因此可以考虑通过适当地降低对输出精度的要求换性能和能效的提升。也就是这个硬件资源和性能的曲线,多了一个维度。通过对精度调控,可以换来性能和能效的提升。

如图展示了不同输出结果下的能耗,可以看到,前三张图的输出质量相差不大,人眼很难区分出差别,但是却可以大大降低能耗。对于近似技术,我们可以在编程语言、编译器、操作系统、架构和硬件设备这些不同层级进行近似。在软件层面,可以通过跳过部分迭代计算机设计相应的近似算法,来减少对结果影响不大的这种计算。

在架构层面,可以将32bit浮点数的计算转化为10bit的定点计算,减少能耗和计算开销。在设备层,可以近似存储数据,利用数据容错能力减少不必要数据的读写,从而提升性能和能效。除了采用近似技术来提升性能和能效,另一个有效的方式,就是在介质层面采用更优性能的非易失内存介质优化性能和能效。

传统的易失性SRAM缓存,由于具有高静态功耗,会大大增加系统的片上能耗,同时SRAM的6晶体管结构会大大增加面积开销,限制了缓存的这种规模。而新型非易失介质如RRAM、PCM、STT-MRAM等具有非易失性,可以大大降低静态功耗。此外,这些非易失介质都具有更高的密度,其中STT-MRAM具有和SRAM最为接近的性能,最有希望替代传统的缓存。

相较于SRAM,STT-MRAM这种的1T1M也就是一个晶体管和一个磁隧道结构,可以大大减少单元面积,提高4倍密度,同时STT-MRAM具有接近于SRAM的这种读性能以及低静态的功耗,这些特性促使我们发展STT-MRAM技术。当然了,它也有读写不对称,擦写次数有限的问题,需要在应用中加以解决。

目前国内外已经有相应的MRAM产品,国外以Everspin为主,已经发布了40纳米的256Mb DDR3芯片和28纳米的1GB DDR4芯片。另外还有一系列的串口MRAM产品,主要用于传感器和嵌入式的应用。国内的海康驰拓已经有了相应的串口MRAM产品,1GB的这种STT-MRAM也已经推出了样片。

基于STT-MRAM的GPU近似缓存架构

近似计算应用,如神经网络、图计算等,由于产生了大量的读写操作,对于缓存的性能和能耗有较高的需求。但是传统的SRAM缓存,由于高的静态功耗,无法满足需求。从谷歌数据中心的功耗分解可以看出CPU消耗了42%的能耗,因此急需改善片上缓存的这种功耗问题。

目前针对于近似计算或者是近似存储的研究可以分为三种:第一种是基于介质特性,也就是非易失存储介质都存在可靠性的问题,因此需要相应的ECC来保证数据的正确性。但是近似应用可以适当地放松对数据正确性的要求。因此与之相应的近似存储,可以通过适当的放松,对不重要数据可靠性的保障,从而减少ECC开销,而且最终无明显损失。

第二种则是基于数据模式进行近似。即有些应用中的数据表现出数据相似性或者是冗余性。通过利用数据相似特性,当数据满足同一个错误阈值时,被认为是相似的,即通过减少相似数据的写提升能效和性能。第三是在架构层面进行近似,是在存储和计算之间添加相应的精度转化模块,使得数据在计算的时候,采用全精度,存储的时候采用低精度,从而降低存储设备的能耗。我们的工作正是利用了近似数据应用的计算模式,通过消除缓存中的冗余数据写,从而减少能耗和提高性能。并保证数据质量无明显下降。

我们在全系统模拟器Gem5中,对近似计算应用进行测试,其中负载主要来源于近似计算负载AxBench测试发现近似计算中60.3%的数据bit写都来源于对可近似数据的写。因此减少这部分数据的写,对于提升缓存的能效至关重要。近似数据在缓存行内部也存在数据冗余。我们发现最大值和最小值的差值在2倍错误阈值范围内,因此可以将基准值用max和min的几何均值来表示。采用这种方式,所有元素都与第一个基准值相似,即得到一个base一个run,这里给出了一个简单的证明,证明采用这种方式,所有判断为近似的元素的值,都在错误范围之内,这里最大错误值即为最大值或者是最小值与基准值的差值。通过证明可以发现,最大差值都在错误阈值范围内,我们测试发现这种寻找基准值的方法,相比于现有的方案,能够更好地消除数字冗余。并且采用我们的方法后,整行相似地缓存行的比例明显增高。

也就是可以采用一个基准值表示所有元素,这将会大大减少写入的数据量,提升能效,有效地节省缓存的空间。APPcache架构我们设计的基于STT-MRAM的近似缓存的架构——APPcache,采用STT-MRAM作为L2的cache,利用大容量的特性提升能耗,并减少静态功耗。

其中近似编码逻辑对可近似写入的数据进行近似编码。当读操作读到被近似编码的数据,相应的译码逻辑则读出近似的值。对于近似STT-MRAM缓存的读写流程,当缓存控制器发送读写请求之后,首先判断读写的缓存块是否是近似块,如果不是,则进行正常的缓存块的访问,如果是则进行近似操作。同时在进行近似编码或者译码的时候,根据质量映射表中,对应的错误阈值进行编解码操作。软件层面,还提供了一个API可以指定近似的范围,以及允许的质量损失。基于前面的分析测试,我们采用几何均值的方案。当最大值与最小值的差值小于等于2倍错误阈值的时候,则这段数据被认为是近似的。

其中对于多通道方案,我们对其进行了分组。如图中的例子,实际上是一个图像的RGB的数据,也就是将含有连续的三个数据分为一组元素,当一个元素内每个通道的数据都满足这个关系的时候,我们才能认为该元素是满足近似关系的,否则则认为是不相似的,对于某种元素与图中的元素6在该缓存行上,可能只有一个通道的数据。我们只需要该通道满足近似关系也就可以了。

此外还定义了run_tag用来标记哪些数据是近似的,当run_tag为1的时候,表示该位置存储的值为基准值,为0则表示它是和之前的基准值相似。当一个缓存行中如果后续数据与当前基准值不相似,则开启一个新的基准值。那所有的元素均与基准值相似,则只有一个基准值。

这个时候,用一个bit表示为全相似的缓存行。从而避免run _tag元数据写开销。除此之外对于图像数据的这种信息,与通道数据类型等也进行记录,以便编译器译出数据。对于译码过程,译码器根据存储的基准值和run_tag的原数据,将相似原数据按照对应的这种基准值进行译码。对于图中的这个例子,所有原数据均与基准值相似,则译码出的这个元素均为该基准值。在相似形编码之后,我们发现部分基准值没有相似元素。也就是它在方案1编码之后,仍然是精确值。因此我们继续采用贪心策略,也将其进行近似。

由于STT-MRAM采用读比较写的策略,也就是比较写入数据与旧数据是否相同,如果相同则不写,来减少这种写能耗。译码过程是将该基准值直接译码出来,不做改动。相似的元素则以基准值译码出来。近似缓存系统提供了相应的功能性软件接口,可以用来控制对哪些数据的近似,只需要指明近似范围就可以了。同时可以指明输出的质量,在硬件层面,根据设定的质量损失,在硬件中读取预设的错误阈值,之后则根据该错误阈值进行编码和译码。实验评估部分,我们采用全系统模拟器Gem5实现我们的方案。方案与对比方案的近似阈值均相同以保证公平性。测试结果表明,相比于state of the art在1%的错误率下,我们的方案可以减少写能耗23.4%。

基于STT-MRAM缓存的GPU近似存储架构

GPU由于其强大的算力广泛应用于各种复杂计算应用中。但由于GPU片上缓存的容量是有限的,如当前的NVIDIA V100的GPU其末期缓存的容量仅为6MB,这和服务器级别的CPU相比,差距是相当大的。目前CPU的末期缓存容量可以达到256MB,有限的LLC容量将会造成GPU中大量的片外缓存。

然而访问DRAM开销巨大,GPU中急需更大的片上缓存,以减少片外开销。除此之外,许多GPU应用程序,还表现出较强的错误容忍能力。也有一些研究工作,是通过适当放松数据的正确性,来达到减少能耗和提升性能的目的。

第一个工作测试发现,许多应用中存在值的相似性,也就是许多值的差别很小。通过测试,发现46%的数据差值小于4。因此在GPU的L2 cache中设置了基于相似性的这样一个读写逻辑,减少冗余数据的写入。从而减少L2缓存的空间占用和能耗。此外,在ISCA 20中,JPEG-ACT提出在GPU中采用JPEG算法,压缩在DNN训练过程中的特征图数据。我们知道DNN训练会消耗大量的内存资源,并且需要在GPU和CPU之间进行数据迁移。

而JPEG-ACT利用特征图频率上的这种数据相似性,采用适当的量化方法,将JPEG图像压缩算法,运用到特征图的这种压缩。从而减少特征图数据的传输量,来提升整体的性能。它可以提升2.4倍的性能,仅带来0.2%的准确率的下降。这些研究激发了我们将STT-MRAM和近似技术应用到GPU中,并且基于此提出了基于STT-MRAM缓存的GPU近似存储架构。

首先,更大的STT-MRAM L2 cache可以显著减少片外的缓存。之后在DRAM这一级,当数据被写回到DRAM时,采用相应的量化方法,对数据做近似处理,来减少它的写入的数据量,从而减少数据传输开销和能耗。

此外,也给出了一个软件接口,用来指定近似范围以及近似程度。接下来,我们来分析一下为什么STT-MRAM适用于做GPU L2 cache,首先是它相较于SRAM来讲容量更大,相比于SRAM在相同面积和工艺节点下,STT-MRAM可以将缓存的容量提升4倍。另外GPU本身是对带宽敏感的,对延迟不敏感,而且写操作并不在关键路径上。

因此STT-MRAM的高写延迟并不会明显地影响GPU的整体性能。最后还有一个特点,STT-MRAM的整体能效,优于SRAM,主要是它的非易失特性使得它的静态功耗很低。实验评估部分,我们采用GPGPU-sim4.0实现,模拟的这个GPU配置是RTX 2060,负载来源于Darknet神经网络架构和ispass-2009,相比于这个传统的用SRAM做L2 cache,可以提升性能的14.85%。在两种神经网络识别准确率方面,4bit及以上量化长度,没有明显的质量损失,并且有部分结果还会有也许的丧生。这是由于负载本身具有较强的鲁棒性。

总结

针对当前CPU缓存高能耗的问题,采用STT-MRAM作为CPU的L2 cache并提出了相应的近似的编解码算法,来减少近似计算应用,在系统中的能耗。针对于GPU片上资源有限,会产生大量片外访问的问题,使用STT-MRAM进行二级缓存的这种扩容。在数据写入到DRAM时提出相应的量化方案,减少对DRAM读写的数据量,从而提升性能和能效。    

【以上内容根据速记整理而成,未经过本人审阅】