Cache的压缩方法和装置转让专利

申请号 : CN201610282162.8

文献号 : CN107341113B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 蒲宇宁章隆兵

申请人 : 龙芯中科技术有限公司

摘要 :

本发明提供一种Cache的压缩方法和装置,其中,该方法包括:获取待压缩的Cache块;分别采用至少两种压缩算法对待压缩的Cache块进行压缩,生成至少两种压缩算法的压缩结果,并根据至少两种压缩算法的压缩结果确定至少两种压缩算法的压缩率;根据至少两种压缩算法的压缩率确定最优压缩率,并确定与最优压缩率对应的压缩算法;将与最优压缩率对应的压缩算法的压缩结果,写入至写回缓存区。将压缩算法进行组合,对多个压缩算法的压缩率和压缩结果进行仲裁,在压缩率和解压延迟之间进行平衡,提供了一种具有较好压缩率,且较小的解压延迟的压缩方法。

权利要求 :

1.一种Cache的压缩方法,其特征在于,包括:

获取待压缩的缓存Cache块;

分别采用至少两种压缩算法对所述待压缩的Cache块进行压缩,生成所述至少两种压缩算法的压缩结果,并根据所述至少两种各压缩算法的压缩结果确定所述至少两种压缩算法的压缩率;

根据所述至少两种压缩算法的压缩率确定最优压缩率,并确定与所述最优压缩率对应的压缩算法;

将与所述最优压缩率对应的压缩算法的压缩结果,写入至写回缓存区;其中,所述写回缓存区位于一级Cache与最后一级高速缓存LLC之间;

所述至少两种压缩算法包括:第一压缩算法和第二压缩算法;

所述根据至少两种压缩算法的压缩率确定最优压缩率,并确定与所述最优压缩率对应的压缩算法,包括:若所述第一压缩算法的压缩率小于等于所述第二压缩算法的压缩率,或者所述第一压缩算法的压缩率大于所述第二压缩算法的压缩率、且第一压缩算法的压缩率与第二压缩算法的压缩率之间的压缩率差值小于等于预设字节数,则确定最优压缩率为所述第一压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第一压缩算法;否则,确定最优压缩率为所述第二压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第二压缩算法;或者若所述第一压缩算法的压缩率小于第一值,则确定最优压缩率为所述第一压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第一压缩算法;若所述第一压缩算法的压缩率大于所述第一值,所述第一压缩算法的压缩率在预设区间中,且所述第一压缩算法的压缩率大于所述第二压缩算法的压缩率,则确定最优压缩率为所述第二压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第二压缩算法。

2.根据权利要求1所述的方法,其特征在于,所述至少两种压缩算法包括:第一压缩算法和第二压缩算法;

所述将与所述最优压缩率对应的压缩算法的压缩结果,写入至写回缓存区,包括:

将所述第一压缩算法的压缩结果写入至所述写回缓存区;

若确定与最优压缩率对应的压缩算法为所述第一压缩算法,则保留所述写回缓存区中的所述第一压缩算法的压缩结果;

若确定与最优压缩率对应的压缩算法为所述第二压缩算法,则将所述写回缓存区中的所述第一压缩算法的压缩结果替换为所述第二压缩算法的压缩结果。

3.根据权利要求1或2所述的方法,其特征在于,所述至少两种压缩算法包括:第一压缩算法和第二压缩算法,所述第一压缩算法为FVC压缩算法,所述第二压缩算法为C-Pack压缩算法;

所述采用第一压缩算法对所述待压缩的Cache块进行压缩,生成第一压缩算法的压缩结果,并确定所述第一压缩算法的压缩率,包括:将FVC压缩算法中的掩码组合中的每一个掩码的掩码位,修改为5位掩码位;

采用预设字典对所述待压缩的Cache块进行压缩,生成5位掩码位的掩码以及压缩数据,以构成FVC压缩算法的压缩结果,并计算FVC压缩算法的压缩率。

4.一种Cache的压缩装置,其特征在于,包括:

获取模块,用于获取待压缩的Cache块;

压缩模块,用于分别采用至少两种压缩算法对所述待压缩的Cache块进行压缩,生成所述至少两种压缩算法的压缩结果,并根据所述至少两种压缩算法的压缩结果确定所述至少两种压缩算法的压缩率;

仲裁模块,用于根据所述至少两种压缩算法的压缩率确定最优压缩率,并确定与所述最优压缩率对应的压缩算法;

写入模块,用于将与所述最优压缩率对应的压缩算法的压缩结果,写入至写回缓存区;

其中,所述写回缓存区位于一级Cache与LLC之间;

所述至少两种压缩算法包括:第一压缩算法和第二压缩算法;

所述仲裁模块,包括:第一仲裁子模块,用于若所述第一压缩算法的压缩率小于等于所述第二压缩算法的压缩率,或者所述第一压缩算法的压缩率大于所述第二压缩算法的压缩率、且第一压缩算法的压缩率与第二压缩算法的压缩率之间的压缩率差值小于等于预设字节数,则确定最优压缩率为所述第一压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第一压缩算法;第二仲裁子模块,用于所述第一压缩算法的压缩率与所述第二压缩算法的压缩率不符合所述第一仲裁子模块的条件时,确定最优压缩率为所述第二压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第二压缩算法;或者所述仲裁模块,包括:第三仲裁子模块,用于若所述第一压缩算法的压缩率小于第一值,则确定最优压缩率为所述第一压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第一压缩算法;第四仲裁子模块,用于若所述第一压缩算法的压缩率大于所述第一值,所述第一压缩算法的压缩率在预设区间中,且所述第一压缩算法的压缩率大于所述第二压缩算法的压缩率,则确定最优压缩率为所述第二压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第二压缩算法。

5.根据权利要求4所述的装置,其特征在于,所述写入模块,包括:

写入子模块,用于将所述第一压缩算法的压缩结果写入至所述写回缓存区;

保留子模块,用于若确定与最优压缩率对应的压缩算法为所述第一压缩算法,则保留所述写回缓存区中的所述第一压缩算法的压缩结果;

替换子模块,用于若确定与最优压缩率对应的压缩算法为所述第二压缩算法,则将所述写回缓存区中的所述第一压缩算法的压缩结果替换为所述第二压缩算法的压缩结果。

6.根据权利要求4或5所述的装置,其特征在于,所述至少两种压缩算法包括:第一压缩算法和第二压缩算法,所述第一压缩算法为FVC压缩算法,所述第二压缩算法为C-Pack压缩算法;

所述压缩模块,具体用于:

将FVC压缩算法中的掩码组合中的每一个掩码的掩码位,修改为5位掩码位;采用预设字典对所述待压缩的Cache块进行压缩,生成5位掩码位的掩码以及压缩数据,以构成FVC压缩算法的压缩结果,并计算FVC压缩算法的压缩率;并采用第二压缩算法对所述待压缩的Cache块进行压缩,生成第二压缩结果,并确定所述第二压缩算法的压缩率。

说明书 :

Cache的压缩方法和装置

技术领域

[0001] 本发明涉及计算机技术领域,尤其涉及一种Cache的压缩方法和装置。

背景技术

[0002] 在微处理器的设计中,为了提升处理器的性能,需要克服访存速度与处理器计算速度之间的巨大差距。由于数据或指令从是从主存中获取的,而主存的访问速度远小于处理器的计算速度,从而每次访问主存时均需要数百拍的访问延迟,从而造成访问数据的速度较慢。可以在主存和处理器之间加入了多级高速缓存(Cache,简称Cache),一般的多级高速缓存为二到三级,最后一级高速缓存简称为LLC(Last Level Cache,LLC),最后一级高速缓存的访问延迟一般为几十拍。可以将经常使用的数据或指令放入最后一级高速缓存中,从而可以通过访问最后一级高级缓存中数据或指令,进而加快访问数据的速度。现有技术中,具有多种压缩算法可以对数据或指令进行压缩。
[0003] 然而现有技术中,现有的压缩算法可以将数据或指令压缩为字节较小的数据或指令,然后将压缩结果放入LLC中,在对LLC中的数据或指令进行访问的时候,需要在从LLC将数据或指令取出时对数据或指令进行解压缩;当现有的压缩算法将数据或指令压缩为较小的数据或指令的时候,此时压缩率较好,往往压缩算法比较复杂,从而造成解压缩的过程复杂,解压缩的时间较长,进而造成过高的解压延迟,而由于解压的过程放在LLC访问的关键路径上执行,会造成存储器的访问延迟增加;当现有的压缩算法的压缩率较差时,往往压缩算法较为简单,造成的解压延迟较小,但是此时压缩率较差,使得LLC无法得到有效利用。
[0004] 从而如何选择压缩算法,在压缩率和解压延迟之间进行平衡成为一个亟待解决的问题,亟需提供出一种具有较好压缩率,且较小的解压延迟的压缩方法。

发明内容

[0005] 本发明提供一种Cache的压缩方法和装置,用以解决现有技术中如何选择压缩算法,在压缩率和解压延迟之间进行平衡成为一个亟待解决的问题,亟需提供出一种具有较好压缩率,且较小的解压延迟的压缩方法的问题。
[0006] 本发明的一方面是提供一种Cache的压缩方法,包括:
[0007] 获取待压缩的缓存Cache块;
[0008] 分别采用至少两种压缩算法对所述待压缩的Cache块进行压缩,生成所述至少两种压缩算法的压缩结果,并根据所述至少两种各压缩算法的压缩结果确定所述至少两种压缩算法的压缩率;
[0009] 根据所述至少两种压缩算法的压缩率确定最优压缩率,并确定与所述最优压缩率对应的压缩算法;
[0010] 将与所述最优压缩率对应的压缩算法的压缩结果,写入至写回缓存区。
[0011] 如所述的方法中,所述至少两种压缩算法包括:第一压缩算法和第二压缩算法;
[0012] 所述根据至少两种压缩算法的压缩率确定最优压缩率,并确定与所述最优压缩率对应的压缩算法,包括:
[0013] 若所述第一压缩算法的压缩率小于等于所述第二压缩算法的压缩率,或者所述第一压缩算法的压缩率大于所述第二压缩算法的压缩率、且第一压缩算法的压缩率与第二压缩算法的压缩率之间的压缩率差值小于等于预设字节数,则确定最优压缩率为所述第一压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第一压缩算法;
[0014] 否则,确定最优压缩率为所述第二压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第二压缩算法。
[0015] 如所述的方法中,所述至少两种压缩算法包括:第一压缩算法和第二压缩算法;
[0016] 所述根据至少两种压缩算法的压缩率确定最优压缩率,并确定与所述最优压缩率对应的压缩算法,包括:
[0017] 若所述第一压缩算法的压缩率小于第一值,则确定最优压缩率为所述第一压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第一压缩算法;
[0018] 若所述第一压缩算法的压缩率大于所述第一值,所述第一压缩算法的压缩率在预设区间中,且所述第一压缩算法的压缩率大于所述第二压缩算法的压缩率,则确定最优压缩率为所述第二压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第二压缩算法。
[0019] 如所述的方法中,至少两种压缩算法包括:第一压缩算法和第二压缩算法;
[0020] 所述将与所述最优压缩率对应的压缩算法的压缩结果,写入至写回缓存区,包括:
[0021] 将所述第一压缩算法的压缩结果写入至所述写回缓存区;
[0022] 若确定与最优压缩率对应的压缩算法为所述第一压缩算法,则保留所述写回缓存区中的所述第一压缩算法的压缩结果;
[0023] 若确定与最优压缩率对应的压缩算法为所述第二压缩算法,则将所述写回缓存区中的所述第一压缩算法的压缩结果替换为所述第二压缩算法的压缩结果。
[0024] 如所述的方法中,至少两种压缩算法包括:第一压缩算法和第二压缩算法,所述第一压缩算法为FVC压缩算法,所述第二压缩算法为C-Pack压缩算法;
[0025] 所述采用第一压缩算法对所述待压缩的Cache块进行压缩,生成第一压缩算法的压缩结果,并确定所述第一压缩算法的压缩率,包括:
[0026] 将FVC压缩算法中的掩码组合中的每一个掩码的掩码位,修改为5位掩码位;
[0027] 采用预设字典对所述待压缩的Cache块进行压缩,生成5位掩码位的掩码以及压缩数据,以构成FVC压缩算法的压缩结果,并计算FVC压缩算法的压缩率。
[0028] 本发明的另一方面是提供一种Cache的压缩装置,包括:
[0029] 获取模块,用于获取待压缩的Cache块;
[0030] 压缩模块,用于分别采用至少两种压缩算法对所述待压缩的Cache块进行压缩,生成所述至少两种压缩算法的压缩结果,并根据所述至少两种压缩算法的压缩结果确定所述至少两种压缩算法的压缩率;
[0031] 仲裁模块,用于根据所述至少两种压缩算法的压缩率确定最优压缩率,并确定与所述最优压缩率对应的压缩算法;
[0032] 写入模块,用于将与所述最优压缩率对应的压缩算法的压缩结果,写入至写回缓存区。
[0033] 如上所述的装置中,所述至少两种压缩算法包括:第一压缩算法和第二压缩算法;
[0034] 所述仲裁模块,包括:
[0035] 第一仲裁子模块,用于若所述第一压缩算法的压缩率小于等于所述第二压缩算法的压缩率,或者所述第一压缩算法的压缩率大于所述第二压缩算法的压缩率、且第一压缩算法的压缩率与第二压缩算法的压缩率之间的压缩率差值小于等于预设字节数,则确定最优压缩率为所述第一压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第一压缩算法;
[0036] 第二仲裁子模块,用于所述第一压缩算法的压缩率与所述第二压缩算法的压缩率不符合所述第一仲裁子模块的条件时,确定最优压缩率为所述第二压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第二压缩算法。
[0037] 如上所述的装置中,所述至少两种压缩算法包括:第一压缩算法和第二压缩算法;
[0038] 所述仲裁模块,包括:
[0039] 第三仲裁子模块,用于若所述第一压缩算法的压缩率小于第一值,则确定最优压缩率为所述第一压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第一压缩算法;
[0040] 第四仲裁子模块,用于若所述第一压缩算法的压缩率大于所述第一值,所述第一压缩算法的压缩率在预设区间中,且所述第一压缩算法的压缩率大于所述第二压缩算法的压缩率,则确定最优压缩率为所述第二压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为所述第二压缩算法。
[0041] 如上所述的装置中,所述至少两种压缩算法包括:第一压缩算法和第二压缩算法;
[0042] 所述写入模块,包括:
[0043] 写入子模块,用于将所述第一压缩算法的压缩结果写入至所述写回缓存区;
[0044] 保留子模块,用于若确定与最优压缩率对应的压缩算法为所述第一压缩算法,则保留所述写回缓存区中的所述第一压缩算法的压缩结果;
[0045] 替换子模块,用于若确定与最优压缩率对应的压缩算法为所述第二压缩算法,则将所述写回缓存区中的所述第一压缩算法的压缩结果替换为所述第二压缩算法的压缩结果。
[0046] 如上所述的装置中,所述至少两种压缩算法包括:第一压缩算法和第二压缩算法,所述第一压缩算法为FVC压缩算法,所述第二压缩算法为C-Pack压缩算法;
[0047] 所述压缩模块,具体用于:
[0048] 将FVC压缩算法中的掩码组合中的每一个掩码的掩码位,修改为5位掩码位;采用预设字典对所述待压缩的Cache块进行压缩,生成5位掩码位的掩码以及压缩数据,以构成FVC压缩算法的压缩结果,并计算FVC压缩算法的压缩率;并采用第二压缩算法对所述待压缩的Cache块进行压缩,生成第二压缩结果,并确定所述第二压缩算法的压缩率。
[0049] 本实施例分别通过采用至少两种压缩算法对待压缩的Cache块进行压缩,生成与采用的压缩算法分别对应的压缩结果,同时根据至少两种压缩算法的压缩结果分别确定至少两种压缩算法的压缩率,压缩率表征采用压缩算法对Cache块压缩后生成的压缩结果的字节大小;然后将多种压缩算法各自压缩率进行比较,确定出最优压缩率,并确定与最优压缩率对应的压缩算法;最终将与最优压缩率对应的压缩算法的压缩结果,写入至写回缓存区。从而提供了一种Cache的压缩方法,将压缩算法进行组合,对多种压缩算法的压缩率以及多种压缩算法生成的压缩结果进行仲裁,进而比较出最优的压缩率,进而确定出与最优压缩率对应的压缩算法的压缩结果;从而在压缩率和解压延迟之间进行平衡,提供了一种具有较好压缩率,且较小的解压延迟的压缩方法。

附图说明

[0050] 图1为本发明实施例一提供的Cache的压缩方法的流程图;
[0051] 图2为本发明实施例二提供的Cache的压缩方法的流程图;
[0052] 图3为本发明实施例三提供的Cache的压缩方法的流程图;
[0053] 图4为本发明实施例四提供的Cache的压缩装置的结构示意图;
[0054] 图5为本发明实施例五提供的Cache的压缩装置的结构示意图;
[0055] 图6为本发明实施例六提供的Cache的压缩装置的结构示意图。

具体实施方式

[0056] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0057] 图1为本发明实施例一提供的Cache的压缩方法的流程图,如图1所示,本实施例的方法包括:
[0058] 步骤101、获取待压缩的Cache块。
[0059] 在本实施例中,具体的,首先在传统的一级Cache与LLC之间设置一个写回缓冲区,在将数据或指令放入写回缓存区之前首先需要将数据或指令进行压缩。
[0060] 获取待压缩的Cache块,待压缩的Cache块中包括至少一个数据或指令。待压缩的Cache块可以具有多种的Cache块组合方式。举例来说,例如,对于一个4路组相联Cache,此时具有4个Cache块,每个Cache块的大小为64Byte,一组Cache块的总容量为256Byte,每组Cache块被以4Byte为单位分割为64个相等的子块;一个未被压缩的Cache块占据原有的64Byte,即占据了16个子块;在理论上来说,一个被压缩的Cache块可以占据1~16个不等的子块。
[0061] 步骤102、分别采用至少两种压缩算法对待压缩的Cache块进行压缩,生成至少两种压缩算法的压缩结果,并根据至少两种压缩算法的压缩结果确定至少两种压缩算法的压缩率。
[0062] 其中,各压缩算法代表上述至少两种压缩算法中的每种压缩算法,也即至少两种压缩算法。
[0063] 在本实施例中,具体的,可以分别采用现有技术中的压缩算法对待压缩的Cache块进行压缩。可以采用多种压缩算法对步骤101中的待压缩Cache块进行压缩,可以设定采用的压缩算法的个数为预设个数,预设个数根据实际的使用情况而设定;可以是两种,也可以采用4种或5种压缩算法对步骤101中的待压缩Cache块进行压缩。
[0064] 分别采用多种压缩算法对步骤101中的待压缩Cache块进行压缩之后,可以生成多种压缩结果;在对待压缩Cache块进行压缩之后,确定出多种压缩结果的字节大小,其中,压缩结果的字节大小为与压缩结果对应的压缩算法的压缩率,进而可以各压缩算法的压缩结果确定各压缩算法的压缩率。
[0065] 多种压缩算法分别对Cache块进行压缩的过程,可以同时进行;也可以先执行前几种压缩算法对Cache块进行压缩的过程,再执行后几种压缩算法对Cache块进行压缩的过程。
[0066] 并且,本实施例中的多种压缩算法可以采用现有技术中的压缩算法,压缩算法的具体原理与现有技术相同。
[0067] 举例来说,采用了两种压缩算法对待压缩的Cache块进行压缩,具体来说,分别采用第一种压缩算法、第二种压缩算法对待压缩的Cache块进行压缩,生成第一压缩结果和第二压缩结果,然后根据各压缩结果分别确定第一种压缩算法的压缩率和第二种压缩算法的压缩率。
[0068] 再举例来说,采用了四种压缩算法对待压缩的Cache块进行压缩,具体来说,分别采用第一种压缩算法、第二种压缩算法、第三种压缩算法、第四种压缩算法对待压缩的Cache块进行压缩,分别生成第一压缩结果、第二压缩结果、第三压缩结果、第四压缩结果,然后根据各压缩结果分别确定第一种压缩算法的压缩率、第二种压缩算法的压缩率、第三种压缩算法的压缩率、第四种压缩算法的压缩率。
[0069] 步骤103、根据至少两种压缩算法的压缩率确定最优压缩率,并确定与最优压缩率对应的压缩算法。
[0070] 在本实施例中,具体的,对步骤102中确定出的至少两种压缩算法的压缩率进行比较,确定出一个最优压缩率,进而确定出与最优压缩率对应的压缩算法。最优压缩率表征了将待压缩的Cache块压缩之后得到的压缩结果的字节较小,或者表征了将待压缩的Cache块压缩之后得到的压缩结果的字节适中且压缩时间较短。
[0071] 例如,采用了两种压缩算法对Cache块进行压缩,此时,对步骤102中确定出的第一种压缩算法的压缩率以及第二种压缩算法的压缩率进行比较,确定出一个最优压缩率,进而确定出与最优压缩率对应的压缩算法。若确定第一种压缩算法的压缩率为最优压缩率,从而确定出与最优压缩率对应的压缩算法为第一种压缩算法;若确定第二种压缩算法的压缩率为最优压缩率,从而确定出与最优压缩率对应的压缩算法为二种压缩算法。此时,确定最优压缩率,以及确定与最优压缩率对应的压缩算法的过程,可以构成一个仲裁器,仲裁器对压缩率和压缩算法进行仲裁之后,再确定写入到写回缓存区中的压缩结果是哪种压缩算法生成的压缩结果。
[0072] 举例来说,可以将压缩率较低的作为最优压缩率,即将压缩结果的字节较小的压缩率作为最优压缩率;也可以将压缩时间较短的压缩算法的压缩率,作为最优压缩率;也可以设定一个压缩率区间,将位于该压缩率区间的压缩率作为最优压缩率。
[0073] 再举例来说,对于一个Cache块A,采用解压延迟较小、压缩率较高的压缩算法M对A进行压缩,进行多次试验之后,得到压缩算法M对于A的任意一个压缩率C(m,a),且1字节<=C(m,a)<=64字节;采用压缩算法N对A进行压缩,进行多次试验之后,得到压缩算法N对于A的任意一个压缩率C(n,a),且1字节<=C(m,a)
[0074] 再例如,采用了四种压缩算法对Cache块进行压缩,此时,对步骤102中确定出的第一种压缩算法的压缩率、第二种压缩算法的压缩率、第三种压缩算法的压缩率、第四种压缩算法的压缩率进行比较,确定出一个最优压缩率,进而确定出与最优压缩率对应的压缩算法。若确定第三种压缩算法的压缩率为最优压缩率,从而确定出与最优压缩率对应的压缩算法为第三种压缩算法;若确定第四种压缩算法的压缩率为最优压缩率,从而确定出与最优压缩率对应的压缩算法为第四种压缩算法。同样的,此时,确定最优压缩率,以及确定与最优压缩率对应的压缩算法的过程,可以构成一个仲裁器,仲裁器对压缩率和压缩算法进行仲裁之后,再确定写入到写回缓存区中的压缩结果是哪种压缩算法生成的压缩结果。
[0075] 步骤104、将与最优压缩率对应的压缩算法的压缩结果,写入至写回缓存区。
[0076] 在本实施例中,具体的,在步骤103确定了与最优压缩率对应的压缩算法的压缩结果之后,将确定好的压缩结果写入到写回缓存区中。
[0077] 例如,采用了两种压缩算法对Cache块进行压缩,此时,若最优压缩率为第一种压缩算法的压缩率,则将第一压缩结果写入到写回缓存区中;若最优压缩率为第二种压缩算法的压缩率,则将第二压缩结果写入到写回缓存区中。
[0078] 举例来说,可以生成第一种压缩算法的第一压缩结果、第二种压缩算法的第二压缩结果,此时不把任何一个压缩结果写入到写回缓存区中,在确定了最优压缩率之后,再将与最优压缩率对应的压缩算法的压缩结果写入至写回缓存区中;若采用第一种压缩算法对Cache块压缩的时间较短,此时会先生成第一压缩结果,可以先将第一压缩结果放入到写回缓存区中,若确定了最优压缩率为第二种压缩算法的压缩率,再将写回缓存区中的第一压缩结果替换为第二压缩结果,若确定了最优压缩率为第一种压缩算法的压缩率,则保留写回缓存区中的第一压缩结果。
[0079] 再例如,采用了四种压缩算法对Cache块进行压缩,此时,若最优压缩率为第三种压缩算法的压缩率,则将第三中压缩算法的压缩结果写入到写回缓存区中;若最优压缩率为第四种压缩算法的压缩率,则将第四种压缩算法的压缩结果写入到写回缓存区中。
[0080] 在本实施例中,对于采用的多种压缩算法,在对Cache块进行压缩的时候,可以进行适应性的压缩,在Cache块中的数据集较小的时候,可以选择完全不压缩数据,以达到无解压延迟的损失。
[0081] 在本实施例中,采用的多种压缩算法,只需采用任何多种具有有解压延迟和压缩能力差异的压缩算法即可,可以通过对多种压缩算法的压缩了的比较,得到最优压缩率,以及与最优压缩率对应的压缩算法,从而得到一种压缩能力较好,且解压延迟较小的组合压缩方法。
[0082] 本实施例分别通过采用至少两种压缩算法对待压缩的Cache块进行压缩,生成与采用的压缩算法分别对应的压缩结果,同时根据至少两种压缩算法的压缩结果分别确定至少两种压缩算法的压缩率,压缩率表征采用压缩算法对Cache块压缩后生成的压缩结果的字节大小;然后将多种压缩算法各自压缩率进行比较,确定出最优压缩率,并确定与最优压缩率对应的压缩算法;最终将与最优压缩率对应的压缩算法的压缩结果,写入至写回缓存区。从而提供了一种Cache的压缩方法,将压缩算法进行组合,对多种压缩算法的压缩率以及多种压缩算法生成的压缩结果进行仲裁,进而比较出最优的压缩率,进而确定出与最优压缩率对应的压缩算法的压缩结果;从而在压缩率和解压延迟之间进行平衡,提供了一种具有较好压缩率,且较小的解压延迟的压缩方法。
[0083] 图2为本发明实施例二提供的Cache的压缩方法的流程图,如图2所示,在实施例一的基础上,至少两种压缩算法包括:第一压缩算法和第二压缩算法,步骤102中采用第一压缩算法对待压缩的Cache块进行压缩,生成第一压缩结果,并确定第一压缩算法的压缩率,具体包括:
[0084] 将FVC压缩算法中的掩码组合中的每一个掩码的掩码位,修改为5位掩码位;
[0085] 采用预设字典对待压缩的Cache块进行压缩,生成5位掩码位的掩码以及压缩数据,以构成FVC压缩算法的压缩结果,并计算FVC压缩算法的压缩率。
[0086] 在本实施例中,具体的,可以采用两种压缩算法,对待压缩的Cache块进行压缩,这两种压缩算法分别为第一压缩算法和第二压缩算法;其中,第一压缩算法采用FVC压缩算法,第二压缩算法采用C-Pack压缩算法。
[0087] C-Pack压缩算法可以参照文章《C-Pack:A High-Performance Microproces-sor Cache Compression Algorithm》中的介绍。C-Pack压缩算法具有较好的压缩率,但是一般情况下C-Pack压缩算法的解压延迟较高。C-Pack压缩方法常被用于LLC的压缩,压缩单位为4Byte,即压缩单位为一个字长,对于1个64Byte的Cache块,可以选择16个字同时压缩的方式、或者两个字同时压缩的方式、或四个字同时压缩的方式。在C-Pack压缩算法中,每个Cache块中后一个字的压缩或者解压缩依赖于前面的字生成的字典编码项,即Cache块中的第一个字一定会被压入字典,以作为压缩或者解压的起点。当同时压缩或者解压缩16个字时,由于需要维护依赖关系,从而C-Pack压缩算法需要很大的逻辑面积。
[0088] 在C-Pack压缩算法中,每次进行压缩或解压缩的时候,需要维护一个16项的动态字典。以两个字同时压缩解压缩为例,采用C-Pack算法进行压缩时,首先匹配该字是否为零(zzzz)或者单字节字(zzzx),若是则输出编码和单字节部分;若不是则匹配字典,看是否能在动态字典中匹配全部或者部分匹配,此时匹配形式为mmmm,mmxx,mmmx,若匹配则输出编码和字典项入口地址和剩余部分,将该字压入字典,若不匹配则说明为xxxx无法压缩,需要输出完整的字,并将该字压入字典,用于后续压缩。相应的,在采用C-Pack压缩算法对C-Pack压缩算法压缩的Cache块进行解压缩时,首先解释编码,若为两位,则输出组合零位或未匹配单字节,若为四位则看是否匹配或部分匹配字典项,若匹配,则查找相应字典项并输出,否则输出未被压缩的字,并压入字典。
[0089] 举例来说,可以提供一个码表,如表1码表所示:
[0090] 表1码表
[0091] Code Pattern Output Length00 zzzz (00) 2
01 xxxx (01)BBBB 34
10 mmmm (10)bbbb 6
1100 mmxx (1100)bbbbBB 24
1101 zzzx (1101)B 12
1110 mmmx (1110)bbbbB 16
[0092] 其中,z为00000000;x代表未匹配,大小为8bit;m代表匹配,大小为8bit。
[0093] 设定动态字典为12345678AAAAAAAA 12340000 3527894E。对于Cache块中一个字,一个字为4Byte,字采用十六进制;若字为000000AB,首先确定该字是否符合匹配模式zzzz或者zzzx,确定符合匹配模式,从而可以在表1码表中进行查找,以确定组合编码1110,然后得到压缩后的组合编码和单字节(1100)AB;若字为BBBB2022,首先确定该字是否符合匹配模式zzzz或zzzx,确定不符合,从而在动态字典中匹配字典,确定在动态字典中也不匹配,从而将该字放入到动态字典中,此时动态字典为12345678 AAAAAAAA 12340000 3527894E BBBB2022,然后输出一个位置编码01以及完整的字,得到压缩后的(01)BBBB2022;若字为123456AA,首先确定该字是否符合匹配模式zzzz或zzzx,确定不符合,从而在动态字典中匹配字典,可以在动态字典中进行部分的匹配,从而得到编码1110,并确定出字典项入口地址
00,确定剩余部分AA,进而得到压缩后的(111000)AA。
[0094] 第一种压缩算法采用FVC压缩算法,同时对FVC压缩算法进行改进。改进后的FVC压缩算法中,将FVC压缩算法中的掩码组合中的每一个掩码的掩码位,修改为5位掩码位;设定预设字典,预设字典为静态字典;从而采用预设字典对待压缩的Cache块进行压缩,生成5位掩码位的掩码以及压缩数据,同时计算出改进后的FVC压缩算法的压缩率。具体来说,将掩码(Mask,简称mask)进行扩充,每个字的mask设定为5位,从而64Byte的Cache块的共需要5bit*16=10Byte的mask。其中,5位的mask中,若第一位为0,此时第一位表示当前字在频率值字典中,后4位表示当前字的字典入口地址;若第一位为1,此时第一位表示为当前字没有出现在频率值字典中,当前字为非压缩字,后四位为当前字在后续的数据阵列中的位置。由于将FVC压缩算法中的掩码组合中的每一个掩码的掩码位,修改为5位掩码位,从而可以保证具有16个子的Cache块可以全部被压缩。
[0095] 并且,在本实施例中,将FVC的mask放在数据阵列中,放在其压缩数据的前面,进而前了10Byte的mask;进而在解压缩的过程中,通过tag中的起始地址字段和压缩长度字段读出压缩数据,通过本实施例中的1位压缩类型位决定数据的解释方式,即用哪种方法进行解压缩。Tag阵列如表28Tag阵列所示:
[0096] 表2 8Tag阵列
[0097]
[0098] 其中,举例来说,Tag2表征了一致性协议位:2,压缩长度位:4,起始地址位:6,压缩状态位:1,压缩类型位:1,物理tag:12。若压缩状态位为1,则表征了当前的Cache块采用了第一种压缩算法进行压缩,若压缩状态位为2,则表征了当前的Cache块采用了第二种压缩算法进行压缩。
[0099] 对于改进后的FVC压缩算法,举例来说,对于一个64Byte的Cache块,对每个字的压缩需要一个5Bit的编码,第一位为0,代表常见值,后面4位是字典项入口地址,第一位为1,代表未压缩,后面3位代表数据阵列中的该未压缩字的位置,共需5Bit*16=10Byte的mask,对于表3中的Cache块:
[0100] 表3 Cache块:
[0101] 0x1 0x0 0xEF 0xAB 0xCD 0xAB 0x0 0x1 0x2 0x0 0xAB 0x1 0x2 0xAB 0xCD 0xAB[0102] 具有预设的预设字典,表4预设字典:
[0103] 表4预设字典
[0104]0x0 0x1 0x2 0xFFFFFFFF
[0105] 可以生成mask,得到表5mask:
[0106] 表5 mask
[0107] 00001 00000 10000 10001 10010 10011 00000 0000100010 00000 10100 00001 00010 10101 10110 10111
[0108] 并得到数据阵列,可得到表6压缩数据:
[0109] 表6压缩数据
[0110] 0xEF 0xAB 0xCD 0xAB 0xAB 0xAB 0xCD 0xAB
[0111] 同时,对于FVC压缩算法中的字典,可以设置为动态字典,但需要限定动态字典的字典项的索引过程拍数在预设拍数范围内,以使动态字典的字典项的索引过程拍数不能过多。
[0112] 在本实施例中,对于C-Pack压缩算法和FVC压缩算法,在对Cache块进行压缩的时候,可以进行适应性的压缩,在Cache块中的数据集较小的时候,可以选择完全不压缩数据,以达到无解压延迟的损失。
[0113] 步骤103,包括:
[0114] 步骤1031、若第一压缩算法的压缩率小于等于第二压缩算法的压缩率,或者第一压缩算法的压缩率大于第二压缩算法的压缩率、且第一压缩算法的压缩率与第二压缩算法的压缩率之间的压缩率差值小于等于预设字节数,则确定最优压缩率为第一压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为第一压缩算法。
[0115] 在本实施例中,具体的,首先将两种压缩方法的压缩率输入仲裁器中,使得仲裁器对两个压缩率进行仲裁。
[0116] 此时,第一压缩算法为FVC压缩算法,第二压缩算法为C-Pack压缩算法,FVC压缩算法为采用5位掩码位的FVC压缩算法。在多次的实现中,发现C-Pack压缩算法和FVC压缩算法,这两种压缩算法的压缩率具有双极性的,具体来说,对于某一种的Cache块,这两种压缩算法均具有较好的压缩性,都可以获得50%以下的压缩率;对于另一种Cache块,C-Pack压缩算法的压缩性能较好,而FVC基本无法压缩,此时,C-Pack压缩算法的压缩率在50%左右,FVC压缩算法的压缩率在80%~90%;对于剩下的种类的Cache块,以上两种压缩算法均无法很好的压缩,都不具有较低的压缩率。
[0117] 若第一压缩算法的压缩率小于等于第二压缩算法的压缩率,此时FVC压缩算法的压缩率小于等于C-Pack压缩算法的压缩率,FVC压缩算法的压缩率较好,由于改进后的FVC压缩算法具有较低的解压延迟,此时确定最优压缩率为第一压缩算法FVC压缩算法的压缩率,确定与最优压缩率对应的压缩算法为第一压缩算法FVC压缩算法。
[0118] 或者,若第一压缩算法的压缩率大于第二压缩算法的压缩率,此时FVC压缩算法的压缩率大于C-Pack压缩算法的压缩率,但是第一压缩算法FVC压缩算法的压缩率与第二压缩算法C-Pack压缩算法的压缩率之间的压缩率差值小于等于预设字节数,预设字节数设定为28Byte,此时确定在压缩率和解压延迟之间进行平衡,还是选择最优压缩率为第一压缩算法FVC压缩算法的压缩率,确定与最优压缩率对应的压缩算法为第一压缩算法FVC压缩算法。举例来说,64Byte的Cache块,具有4Byte的16个子块,从而在FVC压缩算法的压缩率大于C-Pack压缩算法的压缩率时,若两种算法的压缩率之差小于等于7个子块,即小于等于28Byte,则确定最优压缩率为第一压缩算法FVC压缩算法的压缩率,此时两种压缩算法的压缩率平均差在45%左右。
[0119] 步骤1032、否则,确定最优压缩率为第二压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为第二压缩算法。
[0120] 在本实施例中,具体的,若在比较第一压缩算法的压缩率与第二压缩算法的压缩率的时候,两者之间的大小均不符合步骤1031中的条件,则确定最优压缩率为第二压缩算法C-Pack压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为第二压缩算法C-Pack压缩算法。具体来说,若FVC压缩算法的压缩率大于C-Pack压缩算法的压缩率,但是第一压缩算法FVC压缩算法的压缩率与第二压缩算法C-Pack压缩算法的压缩率之间的压缩率差值大于预设字节数28Byte,确定最优压缩率为第二压缩算法C-Pack压缩算法的压缩率。
[0121] 举例来说,64Byte的Cache块,具有4Byte的16个子块,从而在FVC压缩算法的压缩率大于C-Pack压缩算法的压缩率时,若两种算法的压缩率之差大于7个子块,即大于28Byte,则确定最优压缩率为第二压缩算法C-Pack压缩算法的压缩率。
[0122] 步骤104,包括:
[0123] 步骤1041、将第一压缩算法的压缩结果写入至写回缓存区。
[0124] 在本实施例中,具体的,此时,第一压缩算法为FVC压缩算法,第二压缩算法为C-Pack压缩算法,FVC压缩算法为采用5位掩码位的FVC压缩算法。由于改进后的FVC压缩算法比较简单,从而改进后的FVC压缩算法的压缩时间较短,进而其压缩的Cache块在进行解压缩的时候解压延迟较小,从而可以将采用第一压缩算法FVC压缩算法压缩得到的第一压缩算法的压缩结果,先写入至写回缓存区中。
[0125] 一般对于64Byte的Cahe块,采用FVC压缩算法可以在2~3拍之内并行压缩完成。
[0126] 步骤1042、若确定与最优压缩率对应的压缩算法为第一压缩算法,则保留写回缓存区中的第一压缩算法的压缩结果。
[0127] 在本实施例中,具体的,在步骤103对第一压缩算法FVC压缩算法的压缩率、以及第二压缩算法C-Pack压缩算法的压缩率,进行仲裁之后,若确定出与最优压缩率对应的压缩算法为第一压缩算法FVC压缩算法,从而保留写回缓存区中的FVC压缩算法压缩生成的第一压缩算法的压缩结果。
[0128] 步骤1043、若确定与最优压缩率对应的压缩算法为第二压缩算法,则将写回缓存区中的第一压缩算法的压缩结果替换为第二压缩算法的压缩结果。
[0129] 在本实施例中,具体的,在步骤103对第一压缩算法FVC压缩算法的压缩率、以及第二压缩算法C-Pack压缩算法的压缩率,进行仲裁之后,若确定出与最优压缩率对应的压缩算法为第二压缩算法C-Pack压缩算法,从而将写回缓存区中的FVC压缩算法压缩生成的第一压缩算法的压缩结果,替换为C-Pack压缩算法压缩生成的第二压缩算法的压缩结果。
[0130] 并且,通过实验证明,通过本发明的方法,在原始数据集大小通过一般压缩算法能够有效的提升性能的情况下,可以超过原有的两种压缩算法中的任何一种达到整体的提升,和单独使用C-Pack压缩算法比较,本发明的方法可以比C-Pack压缩算法多提升10%到40%的压缩性能。
[0131] 本实施例通过采用第一压缩算法FVC压缩算法对待压缩的Cache块进行压缩,生成第一压缩结果,并确定第一压缩算法的压缩率,在该过程中将FVC压缩算法中的掩码组合中的每一个掩码的掩码位,修改为5位掩码位,从而可以保证采用FVC压缩算法压缩Cache块时,具有16个子的Cache块可以全部被压缩;并采用第二压缩算法C-Pack压缩算法对待压缩的Cache块进行压缩,生成第二压缩结果,并确定第二压缩算法的压缩率;由于改进后的FVC压缩算法的压缩时间较短,先将采用法FVC压缩算法压缩得到的第一压缩结果,写入至写回缓存区中;若FVC压缩算法的压缩率小于等于C-Pack压缩算法的压缩率,或者FVC压缩算法的压缩率大于C-Pack压缩算法的压缩率、且FVC压缩算法的压缩率与C-Pack压缩算法的压缩率之间的压缩率差值小于等于预设字节数,则保留写回缓存区中FVC压缩算法生成的压缩结果;否则,将写回缓存区中的FVC压缩算法生成的压缩结果替换为C-Pack压缩算法生成的压缩结果;从而改进后的FVC压缩算法比较简单,可以先于C-Pack压缩算法将压缩结果写入写回缓存区,同时返回仲裁结果后,决定是否覆盖FVC压缩算法已经写入的压缩结果,减少写入写回缓存区的次数,同时,相比于仲裁后再决定哪种压缩结果写入写回缓存区,可以提高写回缓冲区的效率。提供了一种Cache的压缩方法,将压缩算法进行组合,对各个压缩算法的压缩率以及各个压缩算法生成的压缩结果进行仲裁,通过比较FVC压缩算法与C-Pack压缩算法的压缩率的大小,并设定压缩率差值的预设字节数,进而比较出最优的压缩率,进而确定出与最优压缩率对应的压缩算法的压缩结果;从而在压缩率和解压延迟之间进行平衡,提供了一种具有较好压缩率,且较小的解压延迟的压缩方法。
[0132] 图3为本发明实施例三提供的Cache的压缩方法的流程图,如图3所示,在实施例一、实施例二的基础上,至少两种压缩算法包括:第一压缩算法和第二压缩算法,步骤103,包括:
[0133] 步骤1033、若第一压缩算法的压缩率小于第一值,则确定最优压缩率为第一压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为第一压缩算法。
[0134] 在本实施例中,具体的,可以采用两种压缩算法,对待压缩的Cache块进行压缩,这两种压缩算法分别为第一压缩算法和第二压缩算法。
[0135] 在Cache块的压缩过程中,具有相邻物理地址的Cache块往往具有连续相似的压缩率,即,随着物理地址的递增,Cache块的压缩率趋近于连续函数变化,而非离散性很强的变化。因此,当第一压缩算法M对某个Cache块A的压缩率为X时,可以假设其物理地址邻近的Cache块的压缩率同样近似为X,同样的,第二压缩算法N对Cache块A的压缩率为Y,对其临近的Cache块A的压缩率近似为Y。
[0136] 假设第一压缩算法M对Cache块A的压缩,可以达到压缩率小于50%,即一个Cache块块的物理容量可以占用两个tag,一倍物理容量提供两倍有效容量,此时,若解压延迟长的第二压缩算法N能够替代第一压缩算法M,需要达到压缩率小于33%,占用3个tag,一倍物理容量提供三倍有效容量。
[0137] 以压缩率比值进行设计,其中,压缩率比值代表压缩算法压缩Cache块之前,Cache块的字节大小为p,压缩之后的压缩结果的字节大小为q,可以得到压缩率比值p:q,p:q=1:3、或者p:q=1:3=2:3,等等。
[0138] 从而以此类推,第一压缩算法M的压缩率比值在1:3临界点,第二压缩算法N的压缩率比值需要在1:4临界点;第一压缩算法M的压缩率比值在1:4临界点,第二压缩算法N的压缩率比值需要在1:5临界点;第一压缩算法M的压缩率比值在2:3临界点,第二压缩算法N的压缩率比值需要在2:4临界点;第一压缩算法M的压缩率比值在3:4临界点,第二压缩算法N的压缩率比值需要在3:5临界点;第一压缩算法M的压缩率比值在4:5临界点,第二压缩算法N的压缩率比值需要在4:6临界点,以此类推。
[0139] 若第一压缩算法的压缩率小于第一值,则确定最优压缩率为第一压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为第一压缩算法。具体来说,当第一压缩算法M的压缩率比值在1:3临界点以下,不论第二压缩算法N压缩率为多少,都确定最优压缩率为第一压缩算法M的压缩率,确定与最优压缩率对应的压缩算法为第一压缩算法M。
[0140] 步骤1034、若第一压缩算法的压缩率大于第一值,第一压缩算法的压缩率在预设区间中,且第一压缩算法的压缩率大于第二压缩算法的压缩率,则确定最优压缩率为第二压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为第二压缩算法。
[0141] 在本实施例中,具体的,第一压缩算法M的压缩率大于第一值,第一压缩算法M的压缩率在预设区间中,且第一压缩算法M的压缩率大于第二压缩算法N的压缩率,则确定最优压缩率为第二压缩算法N的压缩率,并确定与最优压缩率对应的压缩算法为第二压缩算法N。
[0142] 具体来说,当第一压缩算法M的压缩率比值在1:2至1:3间,若第二压缩算法N的压缩率比值在1:3临界点下,则确定最优压缩率为第二压缩算法N的压缩率,并确定与最优压缩率对应的压缩算法为第二压缩算法N。
[0143] 当第一压缩算法M的压缩率比值在2:3和1:2间,若第二压缩算法N的压缩率比值在1:2临界点下,则确定最优压缩率为第二压缩算法N的压缩率,并确定与最优压缩率对应的压缩算法为第二压缩算法N。
[0144] 当第一压缩算法M的压缩率比值在3:4和2:3间,若第二压缩算法N的压缩率比值在2:3临界点下,则确定最优压缩率为第二压缩算法N的压缩率,并确定与最优压缩率对应的压缩算法为第二压缩算法N。
[0145] 当第一压缩算法M的压缩率比值在4:5和3:4间,若第二压缩算法N的压缩率比值在3:4临界点下,则确定最优压缩率为第二压缩算法N的压缩率,并确定与最优压缩率对应的压缩算法为第二压缩算法N。
[0146] 当第一压缩算法M的压缩率比值在4:5以上,即采用第一压缩算法M的4倍物理容量,无法压缩5个有效Cache块,此时若第二压缩算法N的压缩率比值在4:5临界点以下,则确定最优压缩率为第二压缩算法N的压缩率,并确定与最优压缩率对应的压缩算法为第二压缩算法N;此时若第二压缩算法N的压缩率比值在4:5临界点以上,则确定最优压缩率为第一压缩算法M的压缩率,确定与最优压缩率对应的压缩算法为第一压缩算法M。
[0147] 在本实施例提供的方法中,采用的仲裁逻辑,需要设置几个并行的比较器,从而可以比较第一压缩算法M的压缩率比值与设定的几个预设区间中的阈值点之间的大小,从而可以确定第一压缩算法M的压缩率比值在哪个预设区间中;然后比较第一压缩算法M的压缩率比值与第二压缩算法N的压缩率比值。几个比较器并行的计算两种压缩算法的压缩率比值之间,确定第一压缩算法M的压缩率比值在一个预设区间中之后,若第一压缩算法M的压缩率比值大于该预设区间的宽度,即第一压缩算法M的压缩率比值大于第二压缩算法N的压缩率比值,且第一压缩算法M的压缩率比值p:q的p与第二压缩算法N的压缩率比值p相同时,而第二压缩算法N的压缩率比值q与第一压缩算法M的压缩率比值p:q的q之差大于1,则确定第二压缩算法N具有更多的有效容量,第二压缩算法N比第一压缩算法M对同一Cache块的压缩率少12%~18%时,此时第二压缩算法N的压缩效果更好,可以确定与最优压缩率对应的压缩算法为第二压缩算法N。
[0148] 在本实施例中,第一压缩算法M采用实施例二中改进后的FVC压缩算法,第二压缩算法N采用C-Pack压缩算法。
[0149] 在本实施例中,其他步骤参照实施例二中的步骤,其他步骤与实施例二中的步骤的原理相同。
[0150] 本实施例通过采用第一压缩算法FVC压缩算法对待压缩的Cache块进行压缩,生成第一压缩结果,并确定第一压缩算法的压缩率,在该过程中将FVC压缩算法中的掩码组合中的每一个掩码的掩码位,修改为5位掩码位,从而可以保证采用FVC压缩算法压缩Cache块时,具有16个子的Cache块可以全部被压缩;并采用第二压缩算法C-Pack压缩算法对待压缩的Cache块进行压缩,生成第二压缩结果,并确定第二压缩算法的压缩率;由于改进后的FVC压缩算法的压缩时间较短,先将采用法FVC压缩算法压缩得到的第一压缩结果,写入至写回缓存区中;若第一压缩算法FVC压缩算法的压缩率小于第一值,则确定最优压缩率为第一压缩算法FVC压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为第一压缩算法FVC压缩算法,则保留写回缓存区中FVC压缩算法生成的压缩结果;若第一压缩算法FVC压缩算法的压缩率大于第一值,第一压缩算法C-Pack压缩算法的压缩率在预设区间中,且第一压缩算法FVC压缩算法的压缩率大于第二压缩算法C-Pack压缩算法的压缩率,则确定与最优压缩率对应的压缩算法为第二压缩算法C-Pack压缩算法,将写回缓存区中的FVC压缩算法生成的压缩结果替换为C-Pack压缩算法生成的压缩结果;从而改进后的FVC压缩算法比较简单,可以先于C-Pack压缩算法将压缩结果写入写回缓存区,同时返回仲裁结果后,决定是否覆盖FVC压缩算法已经写入的压缩结果,减少写入写回缓存区的次数,同时,相比于仲裁后再决定哪种压缩结果写入写回缓存区,可以提高写回缓冲区的效率。提供了一种Cache的压缩方法,将压缩算法进行组合,对各个压缩算法的压缩率以及各个压缩算法生成的压缩结果进行仲裁,通过比较第一压缩算法FVC压缩算法与第一值的大小,并确定第一压缩算法FVC压缩算法是否在预设区间中,比较第一压缩算法FVC压缩算法与第二压缩算法C-Pack压缩算法的压缩率的大小,进而比较出最优的压缩率,进而确定出与最优压缩率对应的压缩算法的压缩结果;从而在压缩率和解压延迟之间进行平衡,提供了一种具有较好压缩率,且较小的解压延迟的压缩方法。
[0151] 图4为本发明实施例四提供的Cache的压缩装置的结构示意图,如图4所示,本实施例提供的Cache的压缩装置,包括:
[0152] 获取模块41,用于获取待压缩的Cache块;
[0153] 压缩模块42,用于分别采用至少两种压缩算法对待压缩的Cache块进行压缩,生成所述至少两种压缩算法的压缩结果,并根据所述至少两种压缩算法的压缩结果确定所述至少两种压缩算法的压缩率;
[0154] 仲裁模块43,用于根据所述至少两种压缩算法的压缩率确定最优压缩率,并确定与最优压缩率对应的压缩算法;
[0155] 写入模块44,用于将与最优压缩率对应的压缩算法的压缩结果,写入至写回缓存区。
[0156] 本实施例提供的Cache的压缩装置可执行本发明实施例一提供的Cache的压缩方法,其实现原理相类似,此处不再赘述。
[0157] 本实施例分别通过采用至少两种压缩算法对待压缩的Cache块进行压缩,生成与采用的压缩算法分别对应的压缩结果,同时根据至少两种压缩算法的压缩结果确定至少两种压缩算法的压缩率,压缩率表征采用压缩算法对Cache块压缩后生成的压缩结果的字节大小;然后将多种压缩算法各自压缩率进行比较,确定出最优压缩率,并确定与最优压缩率对应的压缩算法;最终将与最优压缩率对应的压缩算法的压缩结果,写入至写回缓存区。从而提供了一种Cache的压缩方法,将压缩算法进行组合,对多种压缩算法的压缩率以及多种压缩算法生成的压缩结果进行仲裁,进而比较出最优的压缩率,进而确定出与最优压缩率对应的压缩算法的压缩结果;从而在压缩率和解压延迟之间进行平衡,提供了一种具有较好压缩率,且较小的解压延迟的压缩方法。
[0158] 图5为本发明实施例五提供的Cache的压缩装置的结构示意图,在实施例四的基础上,如图5所示,本实施例提供的Cache的压缩装置,至少两种压缩算法包括:第一压缩算法和第二压缩算法;
[0159] 仲裁模块43,包括:
[0160] 第一仲裁子模块431,用于若第一压缩算法的压缩率小于等于第二压缩算法的压缩率,或者第一压缩算法的压缩率大于第二压缩算法的压缩率、且第一压缩算法的压缩率与第二压缩算法的压缩率之间的压缩率差值小于等于预设字节数,则确定最优压缩率为第一压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为第一压缩算法;
[0161] 第二仲裁子模块432,用于第一压缩算法的压缩率与第二压缩算法的压缩率不符合第一仲裁子模块431的条件时,确定最优压缩率为第二压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为第二压缩算法。
[0162] 写入模块44,包括:
[0163] 写入子模块441,用于将第一压缩算法的压缩结果写入至写回缓存区;
[0164] 保留子模块442,用于若确定与最优压缩率对应的压缩算法为第一压缩算法,则保留写回缓存区中的第一压缩算法的压缩结果;
[0165] 替换子模块443,用于若确定与最优压缩率对应的压缩算法为第二压缩算法,则将写回缓存区中的第一压缩算法的压缩结果替换为第二压缩算法的压缩结果。
[0166] 第一压缩算法为FVC压缩算法,第二压缩算法为C-Pack压缩算法。相应的,压缩模块42,具体用于:
[0167] 将FVC压缩算法中的掩码组合中的每一个掩码的掩码位,修改为5位掩码位;采用预设字典对待压缩的Cache块进行压缩,生成5位掩码位的掩码以及压缩数据,以构成FVC压缩算法的压缩结果,并计算FVC压缩算法的压缩率;并采用第二压缩算法对待压缩的Cache块进行压缩,生成第二压缩结果,并确定第二压缩算法的压缩率。
[0168] 本实施例提供的Cache的压缩装置可执行本发明实施例二提供的Cache的压缩方法,其实现原理相类似,此处不再赘述。
[0169] 本实施例通过采用第一压缩算法FVC压缩算法对待压缩的Cache块进行压缩,生成第一压缩结果,并确定第一压缩算法的压缩率,在该过程中将FVC压缩算法中的掩码组合中的每一个掩码的掩码位,修改为5位掩码位,从而可以保证采用FVC压缩算法压缩Cache块时,具有16个子的Cache块可以全部被压缩;并采用第二压缩算法C-Pack压缩算法对待压缩的Cache块进行压缩,生成第二压缩结果,并确定第二压缩算法的压缩率;由于改进后的FVC压缩算法的压缩时间较短,先将采用法FVC压缩算法压缩得到的第一压缩结果,写入至写回缓存区中;若FVC压缩算法的压缩率小于等于C-Pack压缩算法的压缩率,或者FVC压缩算法的压缩率大于C-Pack压缩算法的压缩率、且FVC压缩算法的压缩率与C-Pack压缩算法的压缩率之间的压缩率差值小于等于预设字节数,则保留写回缓存区中FVC压缩算法生成的压缩结果;否则,将写回缓存区中的FVC压缩算法生成的压缩结果替换为C-Pack压缩算法生成的压缩结果;从而改进后的FVC压缩算法比较简单,可以先于C-Pack压缩算法将压缩结果写入写回缓存区,同时返回仲裁结果后,决定是否覆盖FVC压缩算法已经写入的压缩结果,减少写入写回缓存区的次数,同时,相比于仲裁后再决定哪种压缩结果写入写回缓存区,可以提高写回缓冲区的效率。提供了一种Cache的压缩方法,将压缩算法进行组合,对各个压缩算法的压缩率以及各个压缩算法生成的压缩结果进行仲裁,通过比较FVC压缩算法与C-Pack压缩算法的压缩率的大小,并设定压缩率差值的预设字节数,进而比较出最优的压缩率,进而确定出与最优压缩率对应的压缩算法的压缩结果;从而在压缩率和解压延迟之间进行平衡,提供了一种具有较好压缩率,且较小的解压延迟的压缩方法。
[0170] 图6为本发明实施例六提供的Cache的压缩装置的结构示意图,在实施例四、实施例五的基础上,如图6所示,本实施例提供的Cache的压缩装置,至少两种压缩算法包括:第一压缩算法和第二压缩算法;
[0171] 仲裁模块43,包括:
[0172] 第三仲裁子模块433,用于若第一压缩算法的压缩率小于第一值,则确定最优压缩率为第一压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为第一压缩算法;
[0173] 第四仲裁子模块434,用于若第一压缩算法的压缩率大于第一值,第一压缩算法的压缩率在预设区间中,且第一压缩算法的压缩率大于第二压缩算法的压缩率,则确定最优压缩率为第二压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为第二压缩算法。
[0174] 本实施例的Cache的压缩装置可执行本发明实施例三提供的Cache的压缩方法,其实现原理相类似,此处不再赘述。
[0175] 本实施例通过采用第一压缩算法FVC压缩算法对待压缩的Cache块进行压缩,生成第一压缩结果,并确定第一压缩算法的压缩率,在该过程中将FVC压缩算法中的掩码组合中的每一个掩码的掩码位,修改为5位掩码位,从而可以保证采用FVC压缩算法压缩Cache块时,具有16个子的Cache块可以全部被压缩;并采用第二压缩算法C-Pack压缩算法对待压缩的Cache块进行压缩,生成第二压缩结果,并确定第二压缩算法的压缩率;由于改进后的FVC压缩算法的压缩时间较短,先将采用法FVC压缩算法压缩得到的第一压缩结果,写入至写回缓存区中;若第一压缩算法FVC压缩算法的压缩率小于第一值,则确定最优压缩率为第一压缩算法FVC压缩算法的压缩率,并确定与最优压缩率对应的压缩算法为第一压缩算法FVC压缩算法,则保留写回缓存区中FVC压缩算法生成的压缩结果;若第一压缩算法FVC压缩算法的压缩率大于第一值,第一压缩算法C-Pack压缩算法的压缩率在预设区间中,且第一压缩算法FVC压缩算法的压缩率大于第二压缩算法C-Pack压缩算法的压缩率,则确定与最优压缩率对应的压缩算法为第二压缩算法C-Pack压缩算法,将写回缓存区中的FVC压缩算法生成的压缩结果替换为C-Pack压缩算法生成的压缩结果;从而改进后的FVC压缩算法比较简单,可以先于C-Pack压缩算法将压缩结果写入写回缓存区,同时返回仲裁结果后,决定是否覆盖FVC压缩算法已经写入的压缩结果,减少写入写回缓存区的次数,同时,相比于仲裁后再决定哪种压缩结果写入写回缓存区,可以提高写回缓冲区的效率。提供了一种Cache的压缩方法,将压缩算法进行组合,对各个压缩算法的压缩率以及各个压缩算法生成的压缩结果进行仲裁,通过比较第一压缩算法FVC压缩算法与第一值的大小,并确定第一压缩算法FVC压缩算法是否在预设区间中,比较第一压缩算法FVC压缩算法与第二压缩算法C-Pack压缩算法的压缩率的大小,进而比较出最优的压缩率,进而确定出与最优压缩率对应的压缩算法的压缩结果;从而在压缩率和解压延迟之间进行平衡,提供了一种具有较好压缩率,且较小的解压延迟的压缩方法。
[0176] 本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0177] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。