近日,在2019全球闪存峰会上,国内外闪存、存储领域的重磅专家、学者从闪存技术、方案、实际应用等角度,围绕“闪存加速数字经济”这一命题探索闪存及存储现状与趋势,为全球闪存蓬勃产业注入源源不断的新动力。中国计算机学会信息存储专委会主任委员、华中科技大学计算机学院院长冯丹,作为重磅嘉宾出席峰会并发表题为《支持近数据处理的存储技术》的精彩演讲。
冯丹表示,支持近数据处理的固态盘技术以及存算一体的忆阻器技术为解决“存储墙”问题提供了全新的路径,并从三个方面进行了阐述。
以下为演讲实录:
谢谢,我给大家分享一下我们做的一些工作,这是近数据处理存储技术,主要从三个方面给大家分享。
应该说,大数据时代第一个对存储有挑战,第二个对数据处理也存在挑战,存储方面据统计增长率已经达到了36%,2018年全球的数据总量是33ZB,预计到2025年将达到175ZB。但是大量的数据实际上除了要存之外,更多的要做处理,比如说大数据的5V特征——Volume(体量)、Velocity(速度)、Variety(多样性)、Veracity(准确性)、Value(价值), 要求在大量的数据中间能够找到有价值的数据或者说发现有价值的数据做处理。
处理和存储之间实际上发展的是不平衡的,处理器核每两年翻一倍,内存容量每三年才翻一倍。也就是说,每个核的内存容量每两年是减少30%,它分配到的内存带宽也大为减少,从而导致处理和存储之间的差距越来越大。
而存储性能的提升非常有限,从1999年到2017年访问延迟基本上没有什么变化,尽管带宽提升了20倍,容量提升了128倍,这样就导致处理和存储之间的发展非常不平衡。从性能的角度来看,据分析大约50%处理器流水线中的停顿是由数据访问造成的,有的是数据的冲突,有的是因为内存没有命中,所以导致存储流水停顿问题。这就是我们所有说的内存强的问题。还有一个功耗强的问题,据统计移动设备中浏览网页41%的能量花费在数据访问上,LOAD操作能耗约为ADD指令的115倍。因此,内耗强的问题也非常突出。
从闪存内部讲,16个通道的闪存构成的SSD,理论上来讲内部的数据的速率可以达到8.5GB/S,但是把它封装成为SSD盘之后,就是SATA接口或者PCIe接口就达不到这么高的速度,就是2G/S的速度。如果是64个SSD理论上是可以达到545个GB/S的速度,但是挂载在PCIe的总线上,被Host来访问的话16个通道的SSD变成了16GB/S的速度。
也就是说,设备内部速度理论上是非常高的,但是通过层层衰减,性能非常低了,这样就导致了CPU访问的时候差距非常大,怎么样解决这个问题呢?分析一下就是由传统的冯诺依曼体系结构限制了它。
传统的冯诺依曼体系结构导致数据一定是要存储里搬到计算里,然后算完之后再回去。我们反过来想一下,能不能把处理推送到存储中间去,充分发挥内部带宽作用呢?
这个是传统的冯诺依曼体系结构数据流向存在的问题,从而使得过分的以计算为中心导致性能差、能耗低,所以新的理念我们能不能实现以数据为中心的体系结构,也就是说在尽量靠近数据的地方来处理数据或者尽量减少数据的访问来完成计算,也就是所说的将处理推送到数据中间去或者推送到存储中间去。
现在的一些解决方案,为了提高访存的带宽也有CPU+GPU+FPGA+TPU,来使得能够更多的并行访存。我们也做了一点工作,在SSD控制器里做了支持近数据处理的可重构的存储控制器。
主要的思路基于可重构的FPGA来实现硬件的加速,也就是说把一些频繁操作的处理推送到SSD控制器里。第二个方面围绕RRAM做了存算融合,也就是CIM方面做了探索,我们做了优化的工作今天跟大家分享一下。
第一个工作支持可重构的近数据处理的固态盘,我们开发了PCIe原形系统,用FPGA做,像内存条是flash的直卡或者PCM的直卡,我们用来做实验的。在控制器中间我们除了做传统的闪存FTL这些操作之外以及闪存的控制,我们还加了可重构的处理的模块,很多可重构的单元,还加上重构配置模块。
可重构的处理单元可以配置成为要加速处理的一些操作,比如说来做数据的过滤操作,要去查询一个数据,或者操作的一些音节码,以及加密的操作等等,可以用可重构的单元,通过FPGA的编程之后用硬件直接实现加速。将处理推送到存储,离数据最近的地方来做,具体的来做基于近数据处理,我们实现AES加密的模块,接收到的数据经过可重构的近数据处理模块之后再通过flash的控制器到真正的Facebook中间去。
具体的实现包括密钥的扩展模块,替换模块等等,也实现了做压缩硬件实现,实现数据输出的数据缓存模块,压缩运算模块,还有哈希表的模块,整个压缩硬件的实现。我们实现之后发现效果还是不错的。本来规划是1,我们最后搞了0.5,如果用软件来加密、解密或者压缩的,这个操作用可重构的硬件实现之后的效果,我们可以看到大大地提升了性能,这是我们在控制器里头做这些操作可以提升性能。
真正要实现可重构还有一个问题,我要频繁的更换FPGA的配置,这个配置信息传输的延迟,还有配置的延迟也会影响性能,我怎么样加速这个配置,不至于硬件是加速了,但是配置在那儿搞了半天才把它电路换过来,也会影响整个性能,我们也做了相应的工作,比如说加了一个缓存,并且对缓存的调度算法也进行了一定的修改,采用MLFU(配置信息缓存替换算法)进行修改之后来使用,包括加上配置信息的面积到底有多大。
如果面积小的模块剔除去,面积大的尽量保留在缓存里头这样加快速度。这样就使得整个性能比不加改进要更好一些,不至于说因为做配置,用可重构提高了性能,因为配置又把性能降下去了,所以使得整个不至于出现瓶颈问题,这是第一个工作,可重构的近数据处理的固态盘。
第二个工作做存算融合存储器探索的研究,主编存储器第一个方面可以做存储,通过高组、低组,以及不同的组织状态做存储,同时也可以做逻辑计算,另外做模拟计算,我们也把它叫做近似的计算,主要就可以做矩阵的向量乘法。
实际上忆阻器的发展主要从2008年开始,正式了忆阻器之后得到了研究界广泛的关注。这是近十年来相应的研究,包括把它用做大容量存储,逻辑计算,还有近似计算,也就是做矩阵的计算,做AI的加速研究的是非常多的。
这是做AI的加速,既可以做存储,又可以做计算,阵列的控制模块通过变化来使得达到是做存储,还是做计算的目的。比如说当他做存储的时候,他就排除掉一些逻辑。而当他做计算模式的时候才发挥作用,同时也提供编程接口或者是优化接口。
这是在探索怎么样基于忆阻既做存储,又做计算这样的体系结构。未来我们认为除了专用的探索之外,能够做高性能计算的加速,也可以做神经网络计算的加速,或者是做图像处理的加速等等这些专用的加速之外,我们也希望探索一些通用的架构,能够满足不同的应用需求。也就是说,通过可配置的方式能够满足只要是我希望能够在存储器里头做计算的,做存算一体化或者融合的,都可以用这样的架构,这是在探索方面。
另一方面从它真正实现来看,研究界非常热,但很多基于理想的假设之后做了研究。
比如说器件级就有这种非线性导致存储可靠性降低的问题,当做成阵列形势的时候就有电阻、电流,导致存储能效下降的问题。还有当他做大规模计算的时候,多个阵列之间要做一些直连,会有误差的传递、累计,从而导致计算的准确度下降的问题。
尽管好处是说我要做计算,实际上很简单,我先写,把电阻值子放到相应的数字,做矩阵的成价运算,就是加一个电压读过程就完了,非常快。但是真正实现起来就不那么简单了。要克服这样非理想因素的影响,比如说单元级的,非线性组织的变化,还有D2D和C2C变化系,是很理想的直线。
还有电流、电压的特性,尽管本身是一个组织,但实际上电压是线性的特点。当他作为阵列的时候,因为是共享,就有电容的问题,还有连线电阻的问题,本来是一个小的组织,但是连线上也有电阻,也会影响他。当他做成下面第二个图的结构时候,绿色的线本身是希望加一个电压电流走这个线,结果发现电流会像红色的线到处跑,原因是共享导致。
还有操作的问题,哪些是不能并线操作的,哪些是能并线操作的,这些都是我们在底层要解决的,我们就做了一点这样的工作,尽管上层可以做的很好,可以做各种各样的运算,但真正要实现起来首先要解决底层非理想因素的影响。
我们解决具体的对象就多机存储单元,以及3D的模型,也就是说共享的模型。在这个过程中间我们发现做计算首先要写一个值,再就是读一次就出来了,实际上我要做大容量的存储也要解决这样的问题,写的可靠问题,以及写的低能耗的问题。我们发现有效电压在左边加进来会有一个逐渐的衰减,到右上角的时候衰减是最厉害的,也就是多单不对称的现象,所以就要做偏压的操作对他进行补偿。
我们发现组织变化的时候高组态变化线是比较大的,低组态的变化是小的。如果是传统的不同高组、低组只是均匀划分进行采样情况下准确度会降低,所以我们就根据变化线高组态划宽,低组态划窄,也就是变化性感知状态划分的方式,来提高可靠性。最差的情况下变化性降低了40%,提高了可靠性。
另外大家都知道我们要去写的时候都是写一个高组或者低组,传统的方式是采用脉冲的迭代写,写到中间这个态。我们提出来比例控制的状态调整,也就是说第一次调的时候幅度大一点调到附近,然后再做准确的控制反馈,这样就使得写入速度加快,平均的迭代次数减少31%,降低了写入延迟。
另外还有并行线的问题,我们也写出了相应的并行调度的方法。这里有一个例子,当前的状态是1213,目标状态是3125,哪些是可以并行的?第一个和第三个都要并行做两次操作就可以完成的,中间实际上就可以把第三位同时写掉了,就相应的提出了并行的算法来提高并行性。
当他用做大容量存储的时候,我们用内存的对它进行测试,平均的内存访问延迟降低了67.6%,IPC提高了2.94倍。这个是新写进去,当做存储的时候读要准确,我们发现这样的问题,这是一个阵列的示意图,由于有电压降的问题,左边还是加电压到最右端的红点的时候电压就衰减,衰减之后导致理想读的状态应该是右边的绿线,就变成橙色的线。也就是说,读出来的值会出错,测量的电流值由于电压下降之后测量的电流肯定也是减少,减少之后如果还用理想状态读出来肯定是错的,所以我们也是做了相应的表,就可以准确来读取出来。
当他做运算的时候,我们就不利用这种查表的方式,因为是加一个电压就有电流出来。由于有电压降的问题存在,就会导致整个电流肯定都是会减少了,我们就采用片压,之前未先感知的互联电压降补偿的方法,来使得每一个测量都是准确的,从而提升结果的准确度提升15%,这就是我们在底层做了一些工作,怎么样能够真正支持大容量存储;第二个在这种结构怎么样支持高速存算一体化,首先存,然后再计算。
当然,在体系结构方面我们也在做一些,今天由于时间限制就不给大家分享了。总的来说,今天给大家分享了两个工作,第一个在SSD里头做了近数据处理的,基于可重构的FPGA近数据处理的硬件的加速,来减少数据的传输。
第二个基于SRAM做了一体化的探索,基本上大容量的探索,首先是做大容量的存储,其次是能够做存算一体化,克服非理想因素我们做了相应的工作。未来我们也在做体系结构设计,支持神经网络、图像处理等等这样的体系结构的设计,下次有机会再给大家分享。
(内容基于速记整理,如有纰漏,欢迎指正。)