DFPC论文解读

写在前面

本文是cache压缩系列的第九篇,也是目前阶段的最后一篇了

背景知识

随着大量待处理数据的快速增长,

部署大型主存储器的需求越来越大。然而,作为主存储器的传统DRAM技术在单元可扩展性方面面临着巨大的挑战

还有电力泄漏。非易失性存储器(nvm),例如相变存储器(PCM)和电阻随机存取内存(ReRAM),具有构建未来内存的潜力。由于系统具有比DRAM更低的待机功耗和更好的可扩展性等显著特点。然而,与DRAM相比,nvm在性能上有许多缺点。在实践中,我们需要仔细处理。
为了提高NVMs的写入性能和持久性,现有的方案主要考虑减少写入单元的数量。

与传统的基于电荷的存储器(如DRAM和SRAM)不同,新兴的非易失性存储器使用电阻存储器存储数据,电阻存储器具有更高的密度和可扩展性。因此,NVMs具有广泛应用于主存的潜力。
由于所有的nvm都是通过改变物理状态来存储信息的,所以写操作比读操作消耗的时间和能量要长,这就导致了读写的不对称性。此外,写入操作会损耗NVM单元,特别是在高频情况下,这导致NVM的持久性受到限制。因此,基于NVM的系统需要在写操作中减少写位数。

已有方案

  1. Flip-N-Write(FNW)
    将新旧数据进行比较,以将更改的位数减少至少一半。FNW的效率取决于在每个缓存线中新旧数据之间的差异,这无法利用不同的缓存线。

  2. 频繁模式压缩(sFPC)
    减少通过压缩每个32位字而写入的位数。具体来说,sFPC在内存控制器中维护一个模式表,该表包含多个常见的字模式,例如全零字模式。如果与表中的任何模式匹配,则缓存线中的每个字都将编码为压缩格式,从而减少写入的位数。模式表中的字模式是预先设置的,不能修改,称为“𝑠𝑡𝑎𝑡𝑖𝑐𝑢𝑡𝑡𝑒𝑟𝑛𝑠”。

动态pattern

现在对于一个32bits的数据,我们进行压缩,以下"X"表示不可压缩的4个bits
在这里插入图片描述

动态模式可以提高压缩在各种应用中的适应性。然而,由于数据模式的固定格式,压缩中数据模式的可伸缩性很低。在我们的观察中,请求总是一次访问一个64字节的缓存线,但是FPC只压缩32位格式的单词。当一个所有零位的写请求访问数据数组时,它将被分成16个字进行压缩,这将导致3×16=48个写位才被写入。为了进一步减少高效率的位写入,我们扩展了动态模式的大小。我们改进了传统的提取算法来检测更复杂的模式,例如利用缓存线的值局部性的BDI模式。

DFPC核心思想

其思想是从零字符分布中提取动态模式,同时使用静态模式和动态模式压缩更多的数据。该方案在内存控制器中实现。对于常见模式的压缩,该方案将64字节缓存线划分为16个32位字。检查单词的内容,以确定是否匹配任何高频模式。每个数据模式包含8位,表示8个4位字符的状态(可压缩或不可压缩)。对于扩展模式的压缩,该方案可以选择合适的匹配算法。为了支持NVMs中的压缩,缓存线被修改为包含标记位。每个字需要2个标记位作为可压缩标记和浮动标记,因此32个附加标记位被添加到64字节缓存线中。图4显示了使用DFPC的基于NVM的主存系统的体系结构。我们在压缩架构中增加了一个称为采样引擎的组件,它由一组计数器组成,用于采样应用程序的零字符分布和提取动态模式。获取动态模式后,采样引擎将这些模式添加到动态模式表中。对于写访问,该方案分为三个阶段,即采样阶段、分析阶段和双模式压缩阶段。
在这里插入图片描述

采样阶段

采样阶段:动态模式需要足够数量的单词通过提取算法获得。为了便于在采样阶段进行压缩操作,在模式表中预先定义了一些静态模式。在我们的实验中,我们使用4个静态模式和3位pre-fix来维护总共8个数据模式。
因此,适当的动态模式的数量应该不超过4个。在写访问过程中,如果一个字是可压缩的,并且与一个模式匹配,则它将与pre fix一起编码。可压缩标记设置为启用。在通过NVMs的缓存线写入之前,将每个字的位与现有位进行比较。如果超过一半的位是不同的,则整个字将翻转(flip),flip标记设置为启用。
对于采样,我们设计了一个采样引擎来记录最频繁的模式。采样引擎使用两组计数器。一组用于计算缓存线中零个字符的数目。计数器的数目设置为128。另一组用于计算扩展模式的缩减位(不包括所有零缓存线)。为了减少额外的采样开销,我们使用一个match操作,它读取每个字符的值,同时支持采样操作。因此,采样引擎中的采样信息来自压缩引擎,而不是写入缓冲区。

分析阶段

当采样量达到采样粒度𝑁时,通过分析零特征分布得到动态模式。在某些应用中,分布可能非常复杂。因此,我们设计了一种简单有效的高效模式提取算法。在分析阶段,通过提取算法分析计数器(如算法1所示)。首先,检查计数器是否获得上限(𝑈𝐵)和下限(𝐿𝐵)。阈值𝑇的值通过使用算法1第5行中的方程计算。

阈值因子(𝑇𝐹)和采样粒度通过第IV-A节中的实验验证预先确定。
在这里插入图片描述

动态模式可以通过比较计数器的计数值和阈值来提取。当计数值大于或等于阈值时,模式代码设置为“0”,这意味着此字符是可压缩的。否则,模式代码设置为“1”(“X”)。在检查所有计数器后,该算法提取16个模式。然而,一些提取的模式是重复的或无用的,比如“xxxxxxx”。应去除重复模式和不可压缩模式。为了充分利用有限的预加密数目,DFPC根据这些提取的模式和扩展模式的压缩比来选择前4个模式。压缩比由压缩性和出现频率决定。最后,剩下的4个动态模式被添加到模式表中。样式表稍后不会修改。

双模式压缩阶段

在双模式压缩阶段,压缩引擎可以分别从动态模式表和静态模式表中获取两种数据模式。一个词的内容是基于静态和动态模式同时压缩的。然后,压缩引擎比较两种数据模式中可压缩比特的数目,并选择具有更多可压缩比特的模式作为匹配结果来执行压缩操作。

在读取访问期间,可压缩标记位的状态确定数据是否被压缩。flipping标记位的状态表示flipping数据。解压引擎对这些标签进行解析后,可以快速解码。如果数据被刷新,解压引擎将首先刷新数据。然后,如果数据被压缩,解压引擎将读取前3位以获得pre fix,该pre fix在压缩字和匹配模式之间建立匹配,并找到匹配模式。最后,解压引擎对压缩数据进行解码,并根据模式填充零个字符。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章