一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于压缩的高速缓存的弹性字典共享的制作方法

2022-04-14 05:13:44 来源:中国专利 TAG:

用于压缩的高速缓存的弹性字典共享


背景技术:

1.相关技术说明
2.微处理器可以耦合到高速缓存层次结构的一个或多个层级以便减少微处理器请求存储器中的数据以进行读取或写入操作的等待时间。计算系统中的高速缓存子系统包括存储数据块的高速的高速缓存存储器。通常,高速缓存可以存储一个或多个块,其中每个块是存储在系统存储器中的对应地址处的数据的副本。如本文所使用,“高速缓存行”或“高速缓存块”是存储在连续存储器位置中的字节集合,所述字节集合出于一致性目的而被视为单元。在一些实施方案中,高速缓存行也可以是高速缓存中的分配和解除分配的单元。高速缓存行中的字节数根据设计选项而变化并且可以具有任何大小。
3.高速缓存容量是任何高性能架构设计中的关键资源。可以使用较大的高速缓存来获得更多容量,但是这种方法导致较高的访问等待时间并消耗更多功率和面积。高速缓存压缩技术降低了每兆字节(mb)高速缓存的面积成本,由此允许减少面积或增加高速缓存容量。
附图说明
4.通过结合附图参考以下描述,可更好地理解本文描述的方法和机制的优点,在附图中:
5.图1是计算系统的一种实现方式的框图。
6.图2是计算系统的一种实现方式的框图。
7.图3是使用字典来压缩高速缓存行的现有技术实现方式的图式。
8.图4是采用集合之间的弹性映射的压缩的高速缓存的一种实现方式的框图。
9.图5是压缩的高速缓存的一种实现方式的框图。
10.图6是压缩的高速缓存的一种实现方式的框图。
11.图7是压缩的高速缓存的一种实现方式的框图。
12.图8是示出用于在压缩的高速缓存中进行弹性字典共享的方法的一种实现方式的一般化流程图。
13.图9是示出用于实现用于压缩的高速缓存的字典选择器单元的方法的一种实现方式的一般化流程图。
14.图10是示出用于处理从压缩的高速缓存的收回的方法的一种实现方式的一般化流程图。
15.图11是示出用于将标签条目位置映射到对应数据条目位置的方法的一种实现方式的一般化流程图。
16.图12是示出用于从压缩的高速缓存收回压缩的高速缓存行的方法的一种实现方式的一般化流程图。
17.图13是示出用于执行反向地址转译的方法的一种实现方式的一般化流程图。
18.图14是示出用于在压缩的高速缓存中使用字典偏移字段的方法的一种实现方式
的一般化流程图。
具体实施方式
19.在以下描述中,阐述了众多特定细节以提供对本文呈现的方法和机制的透彻理解。然而,本领域普通技术人员应认识到,可以在没有这些具体细节的情况下实践各种实现方式。在一些情况下,并未详细示出众所周知的结构、部件、信号、计算机程序指令和技术,以避免混淆本文所述的方法。应了解,出于说明简明和清楚起见,在图中示出的元件不一定按比例绘制。例如,一些元件的尺寸可能相对于其他元件被放大。
20.本文公开了对压缩的高速缓存子系统实现弹性字典共享技术的系统、设备和方法。压缩的高速缓存至少包括高速缓存控制器、字典选择器单元、标签阵列和数据阵列。在一种实现方式中,标签阵列中的每个条目除了元数据字段和标签字段之外还具有偏移字段。当要在压缩的高速缓存中分配高速缓存行时,使用高速缓存行地址的基本索引将高速缓存行映射到标签阵列的对应条目。在一种实现方式中,数据阵列的每个集合潜在地存储可以用于压缩所述集合的高速缓存行的字典。通常仅当字典可以充分压缩足够的高速缓存行以抵消其成本时才分配字典。如果集合中没有一个高速缓存行是可压缩的,则在一种实现方式中,字典将不会被分配。
21.如本文所使用,术语“字典”被定义为一组不同的参考数据块条目,其中每个参考数据块是高速缓存行大小的一小部分(即,一部分)。通常,参考数据块中的字节数是高速缓存行中的字节数的因子,从而允许将高速缓存行划分为某个整数的数据块。参考数据块条目的数量和参考数据块的大小可能因字典而异。参考数据块条目包括有可能在由压缩的高速缓存存储的高速缓存行内检测到的常见数据模式。例如,全0或全1是常见数据模式,并且这些可以是给定字典中的参考数据块中的两者。当使用字典压缩高速缓存行时,指针字段代替高速缓存行的原始数据被存储,其中每个指针字段指向与高速缓存行的原始数据的特定部分匹配的参考数据块条目(在字典内)。在一种实现方式中,字典与压缩的高速缓存行一起存储在数据阵列中,而在另一种实现方式中,字典存储在字典表中,所述字典表是与数据阵列分离的结构。
22.在一种实现方式中,如果存储在相应集合中的高速缓存行是可压缩的,则集合关联高速缓存的每个集合潜在地包括用于压缩存储在相应集合中的高速缓存行的字典。在该实现方式中,当为要存储在压缩高速缓存中的新数据分配空间时,诸如当为高速缓存未命中后的高速缓存行填充分配空间时,控制逻辑修改高速缓存行的集合映射以导致高速缓存行被映射到包含字典的给定集合,所述字典能够为新数据实现阈值压缩量。在一种实现方式中,通过将偏移添加到与高速缓存行相对应的地址的集合索引部分(即,基本索引)来修改高速缓存行的集合映射。在一种示例性场景中,地址的原始集合索引部分将导致高速缓存行被映射到第一集合,其中第一字典无法实现阈值压缩量。不是在第一集合中分配该高速缓存行,而是将偏移添加到地址的集合索引部分,从而导致高速缓存行被映射到具有能够实现阈值压缩量的第二字典的第二集合。在这种场景下,使用第二字典对高速缓存行进行压缩,将压缩的高速缓存行存储在第二集合中,并且将偏移存储在与压缩的高速缓存行相对应的标签阵列条目中。
23.在一种实现方式中,为了确定将哪个偏移添加到集合索引部分(即,基本索引),字
典选择器单元基于使用潜在候选字典子集的不同字典压缩高速缓存行来检查高速缓存行的可压缩性。选择器单元确定潜在候选字典子集中的哪个潜在候选字典对于压缩高速缓存行将实现至少阈值压缩率。然后,高速缓存行用选定字典进行压缩并且集合映射被修改以导致高速缓存行被映射到存储选定字典的集合。
24.标签阵列条目的偏移字段允许修改高速缓存行到数据阵列集合的映射,其中相关联的字典可以产生更好的压缩比。这种方法旨在凭借通过修改高速缓存行到集合的映射改善集合内的数据值局部性来改善高速缓存行的可压缩性。与利用数据值局部性的能力有限的先前方法相反,这种方法通过查看大量高速缓存行创造更大的机会来找到冗余而起作用。高速缓存行的集合映射被修改,使得通常映射到相邻高速缓存集合的具有共享数据值局部性的高速缓存行替代地映射到同一集合,因此可以使用同一字典。如果没有这种字典共享方法,则预期集合中的高速缓存行具有较少的行间数据值局部性,这导致预期的可压缩性较低和有效高速缓存大小较小。
25.在另一种实现方式中,压缩的高速缓存维护用于压缩高速缓存行的字典阵列,其中来自阵列的每个字典能够由压缩的高速缓存中的任何高速缓存行使用。字典阵列在本文中也可以被称为“字典表”。在该实现方式中,字典表中的每个条目都是可以在来自不同集合的多个高速缓存行之间共享的字典。而且,字典表中的每个条目都包括引用计数,以跟踪有多少不同的高速缓存行正在使用该字典(即,已利用该字典压缩)。在该实现方式中,每个标签条目都包括字典标识符(id)字段,所述字典id字段指向字典表中用于对高速缓存行进行压缩和解压缩的字典。在该实现方式中,当将要在压缩的高速缓存中分配高速缓存行时,选择器逻辑基于高速缓存行的数据来确定要评估字典表中的哪些字典潜在地压缩高速缓存行。在一种实现方式中,选择导致压缩率最高的字典来压缩高速缓存行,然后将该字典的id存储在对应的标签阵列条目的字典id字段中。
26.这种方法背后的基本原理是压缩的高速缓存中有许多高速缓存行具有类似数据值。不是仅在集合水平下共享字典,而是压缩的高速缓存维护字典阵列用于一般用途。这允许在压缩的高速缓存的切片内的许多高速缓存行之间共享字典。然后每个标签阵列条目存储字典id,所述字典id指定应当使用哪个字典来对相关联数据进行解压缩。另外,在一种实现方式中,压缩的高速缓存包括在字典的引用计数变为零时释放和重新分配字典条目的逻辑。一般而言,与现有技术相比,本文描述的技术允许高速缓存行的可压缩性增加。
27.现在参考图1,示出了计算系统100的一种实现方式的框图。在一种实现方式中,计算系统100至少包括处理器110、输入/输出(i/o)接口120、存储器子系统130和外围装置135。在其他实现方式中,计算系统100可以包括其他部件,计算系统100可以省略所示部件,和/或计算系统100可以被不同地布置。在一种实现方式中,每个处理器110包括高速缓存子系统115。高速缓存子系统115具有带有可以根据实现方式而变化的任何类型的高速缓存的任何数量的高速缓存层级。在一些情况下,高速缓存子系统115的高速缓存层次结构中的一个或多个高速缓存可以位于处理器110外部的其他位置中。在一种实现方式中,高速缓存子系统115的一个或多个高速缓存是压缩的高速缓存,其中这些压缩的高速缓存包括用于压缩存储在压缩的高速缓存中的高速缓存行的高速缓存字典。将在本公开的剩余部分中提供关于用于以弹性方式采用高速缓存字典的技术的更多细节。
28.处理器110表示任何数量和类型的处理单元(例如,中央处理单元(cpu)、图形处理
单元(gpu)、数字信号处理器(dsp)、现场可编程门阵列(fpga)、专用集成电路(asic))。存储器子系统130包括任何数量和类型的存储器装置。例如,存储器子系统130中的存储器类型可包括高带宽存储器(hbm)、非易失性存储器(nvm)、动态随机存取存储器(dram)、静态随机存取存储器(sram)、nand闪存存储器、nor闪存存储器、铁电随机存取存储器(feram)等。i/o接口120表示任何数量和类型的i/o接口(例如,外围部件互连(pci)总线、pci扩展(pci-x)、pcie(pci express)总线、千兆以太网(gbe)总线、通用串行总线(usb))。各种类型的外围装置135可以耦合到i/o接口120。此类外围装置135包括(但不限于)显示器、键盘、鼠标、打印机、扫描仪、操纵杆或其他类型的游戏控制器、媒体录制装置、外部存储装置、网络接口卡,等等。
29.在各种实现方式中,计算系统100是计算机、膝上型计算机、移动装置、游戏机、服务器、流式传输装置、可穿戴装置或各种其他类型的计算系统或装置中的任一种。应注意,计算系统100的部件的数量因实现方式而异。例如,在其他实现方式中,存在与图1所示的数量相比更多或更少的每种部件。还应注意,在其他实现方式中,计算系统100包括图1中未示出的其他部件。另外,在其他实现方式中,计算系统100以与图1中所示不同的方式进行结构化。
30.现在转到图2,示出了计算系统200的一种实现方式的框图。如图所示,系统200表示台式计算机210、膝上型计算机220、服务器230、移动装置240等的芯片、电路、部件等。然而,其他部件是可能的并且被设想在内。在所示实现方式中,系统200包括高速缓存子系统115(图1)的至少一个实例。尽管图2中未示出,但是系统200还可以包括任何数量和类型的其他部件,诸如一个或多个处理器、一个或多个存储器装置、一个或多个外围装置等等。高速缓存子系统115包括具有弹性共享字典的任何数量的高速缓存层级,所述弹性共享字典用于压缩存储在其中的数据中的常用数据模式。将在本公开的剩余部分中提供关于在压缩的高速缓存中弹性共享字典的更多细节。
31.现在参考图3,示出了示出使用字典来压缩高速缓存行的图式。图3的顶部示出了示例性高速缓存行305。应当理解,高速缓存行305的大小和高速缓存行305的实际数据指示一种特定实现方式。在其他实现方式中,可以采用其他大小的高速缓存行和/或其他数据将存储在高速缓存行中。对于图3中所示的实现方式,高速缓存行305具有64个字节的数据,其中16个单独的四字节块被标记为0至15。
32.在一种实现方式中,为了对于给定高速缓存行减少存储在高速缓存中的数据量,使用字典压缩高速缓存行。图3中间示出了字典格式310的一个示例。字典格式310具有字典字段310a和指针字段310b,所述指针字段指向高速缓存行的各个块的字典条目。在一种实现方式中,字典格式310包括八个单独的四字节条目,这八个条目中的每一者均具有有效位。
33.对于高速缓存行305的大小的高速缓存行,指针字段310b具有用于高速缓存行的16个四字节块的16个三位指针。每个三位指针指向八个字典条目中的一者。应当理解,在其他实现方式中,对于具有其他数量的条目的其他字典,每个指针的位数将不同。例如,对于具有四个条目的字典,每个指针将具有两个位。应注意,字典中的条目数量可以根据实现方式而改变。
34.在图3的底部,针对高速缓存行305的数据,压缩的高速缓存行315被示出为具有实
际字典315a和指针字段315b的实际指针值。典型字典包括用于有可能在计算系统的高速缓存数据中找到的常见模式的条目。实际字典315a的条目中所示的模式是高速缓存行305的常见模式的示例。高速缓存行305的数据是高度可压缩的,因为原始数据块的16个四字节块能够被映射到字典315a的八个四字节条目。然而,对于一些高速缓存行,数据可能无法压缩,并且这些高速缓存行可以以未压缩方式存储。在以未压缩方式存储高速缓存行的情况下,不分配字典。
35.现在转到图4,示出了采用集合之间的弹性映射的压缩高速缓存400的一种实现方式的框图。在各种实现方式中,压缩的高速缓存400是与系统存储器分离的低等待时间、高带宽存储器。在一些实现方式中,压缩的高速缓存400用作高速缓存存储器子系统(例如,图1的高速缓存子系统115)中的最后一级高速缓存。在其他实现方式中,压缩的高速缓存400是高速缓存子系统内的另一个层级。尽管图3示出了使用字典来压缩单个高速缓存行的示例,但是图4的压缩的高速缓存400能够使用单个字典压缩多个高速缓存行。而且,压缩的高速缓存400包括多个字典,并且在压缩的高速缓存400是集合关联高速缓存的至少一种实现方式中,压缩的高速缓存400包括用于每个集合的字典。在一些情况下,如果集合的数据是不可压缩的,则该集合可以将高速缓存行存储为未压缩状态,并且不存储字典。
36.在一种实现方式中,数据阵列404中的每个集合包括用于对存储在集合的路径中的高速缓存行进行压缩和解压缩的字典。在一些情况下,字典在一组高速缓存行之间共享,其中该组小于全集何。共享字典允许字典更大,这通常导致改善每个高速缓存行的压缩率并压缩更多高速缓存行。这种共享还分摊了将字典存储在更多高速缓存行上的成本。该方案的缺点是在集合的高速缓存行之间共享字典是基于集合内的高速缓存行之间存在数据值局部性。如果数据阵列404的集合之间存在不足的数据值局部性,则所述方案无效。
37.因此,为了增加实现数据值局部性的概率,针对压缩的高速缓存400示出的方案允许在压缩每个高速缓存行时从多个候选字典中选择最佳字典。从多个字典中选择候选字典的这种方法与仅使用高速缓存行基于其地址的原始集合索引部分映射的集合的字典的方法相比,通常产生改善的数据值局部性。图4所示的方案将通常能够改善压缩的高速缓存400的压缩比(与传统方法相比),因为所述方案允许有效地利用更大量高速缓存行之间的数据局部性。如本文所使用,术语“数据值局部性”被定义为应用程序内具有相同、类似或数字聚类的数据值的多条数据。通过检查用于压缩给定高速缓存行的更大量字典,找到冗余的可能性更大。
38.如图4所示,标签阵列402的条目406除了元数据和标签字段之外还具有偏移字段。在一种实现方式中,条目406中的偏移字段存储集合偏移和路径偏移。在一种实现方式中,将集合偏移添加到基本索引以生成完整索引。在另一种实现方式中,在基本索引与集合偏移之间执行逻辑异或(xor)运算以生成完整索引。如本文所使用,术语“基本索引”被定义为来自虚拟或物理存储器地址的位的一部分。如果压缩的高速缓存400是带虚拟索引、物理标签(vipt)的高速缓存,则基本索引是指虚拟存储器地址,或者如果压缩的高速缓存400是带物理索引、物理标签(pipt)的高速缓存,则基本索引是指物理存储器地址。完整索引用于将高速缓存行映射到数据阵列404中的集合。偏移允许将高速缓存行映射到相邻集合,其中相关联字典可以产生更好的压缩比。另外,路径偏移允许将高速缓存行映射到集合内的不同路径。
39.图4的右下角示出了数据阵列404中的集合408的一个示例,其中集合408包括字典、压缩的高速缓存块以及每个压缩的高速缓存块的集合(s)偏移和路径(w)偏移。当标签存储在标签阵列402中的路径与相关联高速缓存行在数据阵列404中的路径不同时,在实现方式中使用路径偏移。在从数据阵列404收回时,通过应用集合偏移和路径偏移来计算相关联标签的集合信息和地址信息。例如,在一种实现方式中,执行集合偏移与数据阵列集合的xor运算以确定相关联标签的集合。而且,在该实现方式中,执行路径偏移与数据阵列路径的xor运算以确定相关联标签的路径。在其他实现方式中,可以使用集合偏移和路径偏移来执行其他类型的操作,以便分别计算相关联标签的集合和路径。应注意,术语“高速缓存块”和“高速缓存行”在本文中可互换使用。尽管在集合408中示出了四个压缩高速缓存块,但是应当理解,这仅仅作为根据一种实现方式的示例而示出。在其他实现方式中,其他数量的压缩的高速缓存块可以存储在集合408中。在一种实现方式中,集合408中的每个压缩的高速缓存块包括指向对应字典中的条目的多个指针字段(例如,图3的指针字段315b)。
40.在一种实现方式中,当将要在压缩的高速缓存400中分配给定高速缓存行时,控制逻辑(未示出)检查来自相邻集合的用于压缩给定的高速缓存行的多个不同高速缓存字典。如本文所使用,术语“邻居”或“相邻”被定义为基于包括基本索引和偏移的完整高速缓存行索引的偏移的值能够将给定高速缓存行映射到的集合。换言之,集合的邻居包括可通过改变偏移的值来寻址的那些集合。例如,通过将给定高速缓存行的基本索引与偏移相加、连接或xor,所得地址的给定数量是可能的,这取决于偏移的值。这些地址标识给定的集合邻域。“邻域”的大小由偏移中的位数确定。例如,一位偏移将创建具有两个集合的邻域(即,与两个不同集合相对应的两个不同地址),两位偏移将创建具有四个集合的邻域,三位偏移将创建具有八个集合的邻域,以此类推。给定高速缓存行的数据的可压缩性是针对来自相邻集合的这些多个不同高速缓存字典而确定的。然后,从给定高速缓存行的这些多个字典中选择实现最大压缩的高速缓存字典。替代地,为给定的高速缓存行选择实现超过阈值压缩量的高速缓存字典。在一些情况下,多个字典可能实现超过阈值压缩量,并且控制逻辑可以选择这些多个字典中的任一者。应注意,在一些情况下,如果高速缓存行的数据与可用字典中的任一者都不能充分匹配,则控制逻辑选择不压缩高速缓存行。在这些情况下,高速缓存行以未压缩状态存储。在一种实现方式中,控制逻辑基于使用该字典的高速缓存行的压缩版本的大小是否小于阈值来确定高速缓存行是否与字典匹配。
41.当控制逻辑确定字典中的一者与高速缓存行充分匹配时,控制逻辑用该特定字典压缩高速缓存行。而且,计算集合偏移,使得当集合偏移被添加到基本索引(或与其进行xor)以创建完整索引时,完整索引是具有该特定字典的集合的高速缓存索引。集合偏移可以具有任何数量的位,其中位的数量根据实现方式而变化。增加集合偏移中的位数允许测试更多数量的字典并映射到更广泛的集合邻域。然而,在一些实现方式中,基于执行比较的高速缓存阵列和选择器单元的功耗限制、区域预算和等待时间约束,可以针对每个高速缓存行测试的字典数量可能存在实际限制。
42.现在参考图5,示出了压缩的高速缓存500的一种实现方式的框图。压缩的高速缓存500示出了以弹性方式使用字典以实现比传统非弹性方法更大的压缩的另一个示例。在一种实现方式中,压缩高速缓存500的部件包括在高速缓存子系统115(图1)的一个或多个层级内。应注意,在一些情况下,仅高速缓存层次结构的层级的一部分被压缩。例如,混合高
速缓存可以包括使用压缩针对容量优化的第一部分和针对等待时间优化的第二部分。出于讨论目的,假设高速缓存块506将被分配到压缩高速缓存500中。因此,多个压缩引擎508和510压缩高速缓存块506的数据并将压缩的高速缓存块(例如,cbi)和大小指示符(例如,sizei)传送到选择器单元504。应当理解,尽管图5示出了两个压缩引擎508和510,但是在其他实现方式中,其他数量的压缩引擎可以压缩高速缓存块506以找出哪个压缩引擎对高速缓存块506实现最多压缩。
43.在一种实现方式中,选择器单元504确定压缩引擎508或510使用的字典中的哪个字典对高速缓存块506实现最大压缩。然后,选择器单元504生成偏移,所述偏移在被添加到基本索引时导致高速缓存块506被映射到存储选定字典的数据阵列512中的适当集合。该偏移存储在标签阵列502中的高速缓存块506的标签条目中。而且,高速缓存块506的压缩版本被写入数据阵列512的集合中存储选定字典的路径。图5顶部的函数h()表示使用哈希函数来执行基本索引和偏移到数据阵列512中的适当集合的映射的一种实现方式。其他实现方式可以使用其他技术来修改高速缓存块的集合映射。从选择器单元504到数据阵列512的“j”集合的虚线指示这是用于存储高速缓存块506的压缩版本(cbj)的选定集合。出于讨论目的,假设集合“j”中的字典比集合“i”中的其他字典实现更多压缩。
44.在一些实现方式中,可以在集合内另外修改高速缓存行的布局。例如,标签可以出现在标签阵列502的路径1中,而高速缓存行出现在数据阵列512的路径2中。可以将与偏移字段类似的附加元数据字段添加到与标签关联的元数据以跟踪这种修改。在一些情况下,高速缓存行在安装后不跨集合移动。在其他情况下,当在某些写入时更新高速缓存行时,有附加的线路和逻辑使得高速缓存行能够在相邻集合之间迁移。当高速缓存行迁移时,与其标签相关联的偏移字段被更新使得可以在后续访问时检索高速缓存行。当对高速缓存行的写入在使用其现有字典时影响其可压缩性时,可能发生在集合之间重新映射行。在这种情况下,高速缓存逻辑不是从当前集合中收回数据来处理容量的增加,而是基于成本效益分析来检查来自相邻集合的字典是否更适合压缩更新的高速缓存行。如果分析确定来自相邻集的字典在压缩更新的高速缓存行方面是比原始字典更好的选项,则更新的高速缓存行被重新映射到相邻集合。在一种实现方式中,这些重新映射被约束到小的邻域(即,被约束到阈值数量的集合),以便简化压缩的高速缓存500的逻辑和复杂性。
45.在一种实现方式中,当对压缩的高速缓存500执行读取时,首先执行对标签阵列502的查找以找到与目标高速缓存行相对应的标签条目。如果对标签阵列502的查找成功,则从匹配条目中检索偏移。接下来,将偏移添加到基本索引以创建完整索引,并使用完整索引来定位数据阵列512中的对应集合。从集合中检索字典,并且从对应路径定位和检索压缩块。然后使用字典将压缩块解压缩为返回给请求者的原始数据。
46.在一些场景中,压缩的高速缓存500中的大量高速缓存行将不适合压缩。在这些场景中,压缩的高速缓存500能够使用数据阵列504内的相同区域来存储多种格式的数据。如果压缩是不可能的,则数据阵列512存储未压缩的高速缓存行。当可进行压缩时,相同空间存储字典,然后存储多个压缩块。因此,当压缩不可行时,存储字典是没有成本的。
47.现在转到图6,示出了压缩的高速缓存600的一种实现方式的框图。图6示出了在压缩的高速缓存600中使用字典的另一种方式。在一种实现方式中,压缩高速缓存600的部件包括在高速缓存子系统115(图1)的一个或多个层级内。在压缩的高速缓存600中,地址的高
速缓存集合索引部分用于索引到标签阵列610和数据阵列620中。因此,标签阵列610与数据阵列620之间的高速缓存集合和路径与在标准高速缓存中发现的相同。标签阵列条目630的示例被示出为具有标签字段、元数据字段和任选的字典偏移字段。应注意,即使在标签阵列条目630不包括字典偏移字段的那些实现方式中,对数据阵列620的访问仍然可以被串行化。
48.标签阵列610中的匹配标签的路径用于定位数据阵列620中的路径。示例性高速缓存块条目640被示出为具有压缩块字段和字典偏移字段。来自匹配条目的压缩块被提供给解压缩器660。字典偏移字段与高速缓存集合索引组合以定位数据阵列620中的集合,所述数据阵列存储用于对压缩块进行压缩的字典。在一种实现方式中,字典偏移字段与高速缓存集合索引进行xor以定位数据阵列620的适当集合。在其他实现方式中,将字典偏移字段应用到高速缓存集合索引以索引到数据阵列620中的其他方式是可能的并且被设想在内。示例性字典条目650被示出为具有字典字段和引用计数字段。所述字典被提供给解压缩器660以对压缩块进行解压缩。引用计数字段跟踪使用对应字典压缩的压缩块的数量。
49.在针对高速缓存600所示的示例中,允许使用数据阵列620中的相邻集合中的字典来压缩本地集合中的高速缓存块。在该示例中,高速缓存集合索引在标签阵列610与数据阵列620之间共享。针对使用所述字典进行数据压缩的每个高速缓存块对所述字典进行引用计数。当执行高速缓存访问时,高速缓存集合索引用于索引到标签阵列610和数据阵列620中。当对标签阵列610的查找导致匹配时,将匹配标签的路径转发到数据阵列610并且访问相关联压缩的高速缓存块。与压缩的高速缓存块共位的数据阵列610中的字典偏移指定存储用于压缩所述高速缓存块的字典的相对集合。在适当的集合中访问相关字典。然后,将字典(或其子集)结合压缩块一起提供给解压缩器660。接下来,解压缩器660输出相关联的解压缩高速缓存块。作为一种优化,字典偏移的冗余副本可以存储在标签阵列610中。该冗余副本允许并行访问包含字典的集合和包含压缩高速缓存块的另一集合。在另一种实现方式中,字典偏移的单个副本可以存储在标签阵列610中并且数据阵列620中的字典偏移的冗余副本将不存在。在收回时,该选项可能会通过导致对标签阵列610的序列化后续访问来延迟与字典相关联的引用计数的递减。
50.现在转到图7,示出了压缩的高速缓存700的一种实现方式的框图。压缩的高速缓存700示出了以弹性方式使用字典以实现比传统非弹性方法更大的压缩的另一个示例。在一种实现方式中,压缩高速缓存700的部件包括在高速缓存子系统115(图1)的一个或多个层级内。在压缩的高速缓存700中,字典表704存储用于对存储在数据阵列706中的高速缓存行进行压缩和解压缩的字典。应注意,在压缩的高速缓存700中,字典表704不存储在数据阵列706中,而是与数据阵列706分开存储。
51.字典表704包括任何数量的条目,其中条目的数量随实现方式而变化。条目710包括字典和引用计数以跟踪存储在数据阵列706中的已经使用该字典压缩的高速缓存行的数量。条目710是根据一种实现方式的字典表条目的格式的一个示例。条目710还任选地包括总计数字段以跟踪已用该字典压缩的高速缓存行的总数的历史。例如,尽管当用该字典压缩的高速缓存行从压缩的高速缓存700中收回或失效时引用计数减少,但是总计数不会减少。在一种实现方式中,当多个字典条目的引用计数为零时,在确定要替换哪个字典条目时使用总计数字段。例如,在所有可用字典条目中具有最低总计数的字典条目是在一种实现
方式中被替换的条目。因此,根据总计数字段对字典条目进行排序以确定哪些字典具有过去经常遇到的数据模式。在另一种实现方式中,字典的各个条目根据它们被压缩的高速缓存行中的指针字段引用的次数来排序。在该实现方式中,通过组合要被替换的多个不同字典(即,引用计数为零的那些字典)中排名最高的各个条目来创建新字典。应注意,一些实现方式可以存储总计数的有损近似值以节省面积和功率。
52.当执行对压缩高速缓存700的查找时,来自目标地址的地址位子集(即,索引)用于定位标签阵列702中的对应条目和数据阵列706中的对应集合。条目708是根据一种实现方式的标签阵列条目的格式的一个示例。如图7所示,条目708包括标签字段、元数据字段和字典id字段。集合712表示数据阵列706的集合的一个示例,其中集合712包括任何数量的压缩的高速缓存块。
53.当对标签阵列702的查找导致所查询的标签与存储在条目中的标签之间有标签匹配时,从匹配条目中检索字典id。然后,字典id用于从字典表704中检索对应字典。而且,对标签阵列702的匹配路径的标识被传送到数据阵列706以指示从中检索压缩的高速缓存块的路径。该压缩的高速缓存块和检索到的字典被提供给解压缩器707。解压缩器707使用该字典对压缩的高速缓存块进行解压缩并生成原始数据。在另一种实现方式中,标签阵列702内的标签组共享单个字典id字段,而不是每个标签具有一个此类字段。在该实现方式中,不同字段存储在单独的阵列中。例如,字典id与标签和元数据分开存储。
54.在一种实现方式中,当在压缩的高速缓存700中分配高速缓存行时,控制逻辑(未示出)确定使用哪个字典来压缩高速缓存行。控制逻辑(例如,选择器单元)从字典表704中选择用于将针对高速缓存行实现的压缩量进行比较的任何数量的字典。为了进行比较而选择的字典的数量可能因实现方式而异。当选择器单元选择用于压缩高速缓存行的字典时,该字典的字典id存储在标签阵列702中的对应条目的字典id字段中。而且,在与选定字典相对应的字典表704的条目中将引用计数递增。
55.在一种实现方式中,当给定的高速缓存行从压缩高速缓存700中收回或失效时,定位用于压缩给定的高速缓存行的字典的条目。然后,该字典表条目的引用计数递减。如果该字典表条目的引用计数现在等于零,则可以回收该字典表条目。在一种实现方式中,将新字典存储在表中以替换引用计数刚刚递减为零的字典。在一种实现方式中,新字典基于其包含的数据模式将与被写入压缩的高速缓存700的高速缓存行中的数据模式匹配的可能性来生成或选择。在一些实现方式中,引用计数等于零的字典表条目在稍后的时间点被延迟回收。
56.在另一种实现方式中,压缩的高速缓存700包括用于压缩的高速缓存700的子区域或切片的多个字典阵列,以改善可扩展性并减少等待时间。另外,可以采用以不同粒度执行压缩的多个字典。例如,一个字典阵列可以存储用代码字替换高速缓存行的两字节序列的字典,而另一个字典阵列可以用代码字替换高速缓存行的十六字节序列。在一些变体中,多个字典阵列将具有可变长度的引用计数字段。在一些情况下,实际数据通常是高度偏斜的(例如,遵循zipf分布),因此一些字典有可能比其他字典更常被采用。因此,预计将比其他字典更频繁地使用的那些字典被布局在具有更广泛参考计数器字段的条目中。
57.在另一种实现方式中,压缩的高速缓存700存储字典条目阵列而不是字典阵列。在该实现方式中,可以用字典条目的任何组合而不是字典条目的几个固定组合来压缩单个高
速缓存行。对于该实现方式,每个字典条目包括引用计数,该引用计数指示有多少高速缓存行块用该条目压缩。
58.由于来自字典表704的字典可以在多个高速缓存行之间共享,因此不属于同一地址空间的线程可能潜在地读取或修改另一个线程的状态。因此,在一种实现方式中,在字典访问之前或期间,高速缓存逻辑防止来自不同地址空间的线程读取或修改其他线程的字典,除非线程已被授予足够的权限。在一些实现方式中,拥有线程或地址空间标识符与给定字典相关联。在此类实现方式中,拥有方指定与字典相关联的权限。拥有方可以启用或禁用其他线程能够共享字典,并且拥有方可以指定共享的性质。高速缓存逻辑确保代表任何线程对字典的更新在对相关联的高速缓存行进行解压缩时不会破坏或禁止恢复数据。
59.在一些实现方式中,一个或多个地址空间标识符与硬件线程及其相关联的字典相关联。两个或多个硬件线程可以具有完全、部分或完整重叠的地址空间标识符集合。对于由高速缓存逻辑代表线程执行的每个操作,高速缓存逻辑检查地址空间标识符和权限集合足以允许访问。在一些实现方式中,来自不同地址空间的线程将能够共享一个或多个字典。在其他实现方式中,可以严格禁止地址空间之间的共享以减少信息泄漏。在一种实现方式中,高速缓存分区用于将线程从不同地址空间映射到不同分区并且禁止跨分区边界共享字典。在一些实现方式中,可以通过使用页面着色或通过使用基于路径或基于集合的高速缓存分区来将该分区委托给操作系统或特权软件。
60.在一种实现方式中,字典表704的内容形成一个或多个线程的硬件上下文的一部分。在没有地址空间标识符的实现方式中,字典表740在上下文切换时被刷新并写回存储器或非瞬态硬件结构(例如,专用高速缓存或暂存器)。当线程的上下文切换回时,线程的字典被重新安装在字典表704中。在另一种实现方式中,一个或多个地址空间标识符与字典表704中的字典中的每一者相关联。在该实现方式中,在上下文切换时,不再需要刷新字典状态。在另一种实现方式中,一个或多个地址空间标识符与存储在压缩的高速缓存500(图5)的数据阵列512中的每个字典相关联。在该实现方式中,这些一个或多个地址空间标识符用于防止在上下文切换时刷新压缩的高速缓存的需要。其他实现方式可以在上下文切换时完全或选择性地刷新压缩的高速缓存500的字典。
61.现在参考图8,示出了用于在压缩的高速缓存中弹性地共享字典的方法800的一种实现方式。出于讨论目的,该实现方式中的步骤和图9至图14中的那些步骤按顺序示出。然而,应注意在所述方法的各种实现方式中,所描述的一个或多个元件同时、以不同于所示顺序的顺序执行或者完全被省略。也可以根据需要执行其他附加元件。本文所述的各种系统或设备中的任一者都被配置为实现方法800。
62.压缩的高速缓存发起对高速缓存行的分配(框805)。响应于发起对高速缓存行的分配,压缩的高速缓存将对应标签映射并存储在标签阵列条目中在基于高速缓存行的地址位的一部分的位置中(框810)。地址位的这个部分可以被称为“基本索引”。然后,如果没有将偏移添加到基本索引,则压缩的高速缓存确定高速缓存行将映射到哪个数据阵列集合(框815)。接下来,压缩的高速缓存针对与该基本集合紧密接近的集合评估一组字典中的每个字典的高速缓存行的可压缩性(框820)。该组中紧密接近的字典的数量可能因实现方式而异。在一种实现方式中,构成紧密接近的集合的边界是基于用于调整高速缓存行到数据阵列的映射的偏移的位数来确定的。
63.然后,压缩的高速缓存从字典组中选择用于压缩高速缓存行的优选字典(框825)。在一种实现方式中,优选字典是在受到一个或多个约束的字典组中为高速缓存行实现最大压缩的字典。应注意,在一些实施方案中,优选字典可能不是为高速缓存行实现最大压缩的字典。例如,在一些情况下,可以基于执行压缩所需的开销与当前工作负荷之间的期望平衡来选择优选字典。例如,如果鉴于系统的当前工作负荷,当前不希望采用更激进的压缩算法,则可以选择为高速缓存行实现第二最大压缩的字典而不是为高速缓存行实现最大压缩的字典作为优选字典。在其他情况下,在选择优选词典时可能会考虑不同的和/或附加的因素。例如,如果字典中的一者实现了较低水平的(例如,第二最大)压缩,而且也改善另一个度量(例如,高速缓存命中率),则在各种实施方案中选择该字典作为优选字典。这些和其他实施方案是可能的并且被设想在内。在另一种实现方式中,优选字典是为高速缓存行实现至少阈值压缩量的字典。阈值的值可以因实现方式而异。应注意,在一些情况下,没有一个字典将为高速缓存行实现至少阈值压缩量。在这些情况下,方法800可以结束并且高速缓存行以未压缩状态存储。
64.在框825之后,压缩的高速缓存确定应当将何种偏移添加到基本索引以便将该高速缓存行映射到包含优选字典的数据阵列集合(框830)。然后,压缩的高速缓存将该偏移存储在与高速缓存行相对应的标签阵列条目中(框835)。接下来,压缩的高速缓存使用优选字典压缩高速缓存行并将压缩的高速缓存行存储在包含优选字典的数据阵列集合中(框840)。在框840之后,方法800结束。
65.现在转到图9,示出了用于实现用于压缩的高速缓存的字典选择器单元的方法900的一种实现方式。压缩的高速缓存发起对高速缓存行的分配(框905)。在一种实现方式中,压缩的高速缓存包括标签阵列、数据阵列和用于实现字典选择器单元的控制逻辑(例如,高速缓存控制器)。接下来,压缩的高速缓存在标签阵列中为高速缓存行分配条目(框910)。然后,字典选择器单元基于每个字典能够压缩高速缓存行的程度来评估来自字典表的多个字典(框915)。在一种实现方式中,字典选择器单元确定哪个字典为高速缓存行实现最大压缩,然后字典选择器单元选择该字典用于压缩高速缓存行。接下来,字典选择器单元选择为高速缓存行实现至少阈值压缩量的字典(框920)。如果高速缓存行不能被字典中的任一者压缩到特定大小,则压缩的高速缓存可以选择不压缩高速缓存行并且方法900结束。
66.在框920之后,压缩的高速缓存使用选定字典压缩高速缓存行并将压缩的高速缓存行存储在数据阵列中(框925)。在一种实现方式中,压缩的高速缓存将压缩的高速缓存行存储在数据阵列中在集合中,所述集合对应于高速缓存行的条目在标签阵列中的位置。而且,压缩的高速缓存将选定字典的id存储在高速缓存行的标签阵列条目中(框930)。更进一步地,压缩的高速缓存将字典表中的选定字典的对应条目中的引用计数字段递增(框935)。在框935之后,方法900结束。
67.现在转到图10,示出了用于处理从压缩的高速缓存进行的收回的方法1000的一种实现方式。发起从压缩的高速缓存中收回压缩的高速缓存行(框1005)。响应于发起从压缩的高速缓存中收回高速缓存行,压缩的高速缓存检索用于压缩高速缓存行的字典的id(框1010)。在一种实现方式中,压缩的高速缓存从对应的标签阵列条目中检索用于压缩高速缓存行的字典的id。接下来,压缩的高速缓存为标识的字典定位字典表条目(框1015)。然后,从条目中检索字典(框1020)。接下来,压缩的高速缓存使用检索到的字典对压缩的高速缓
存行的数据进行解压缩(框1025)。然后可以将解压缩的数据写回较低层级的高速缓存或存储器。在一些情况下,如果要丢弃数据,则可以跳过框1025。
68.而且,高速缓存控制器将所标识的字典的字典表条目中的引用计数递减(框1030)。如果在递减之后,所标识的字典的字典表条目的引用计数现在等于零(条件框1035,“是”分支),则将字典表条目标记为能够被替换(框1040)。接下来,高速缓存控制器用新字典替换所标识的字典(框1045)。应注意,框1040与1045之间经过的时间量可以根据实现方式而变化。而且,应注意,“新”词典实际上可以是以前使用过的词典。在框1045之后,方法1000结束。在一些情况下,如果在执行框1040之后但在执行框1045之前用所标识的字典压缩新的高速缓存行,则字典表条目将不会被替换,因为它的引用计数再次为非零。如果在递减之后,所标识的字典的字典表条目的引用计数仍然大于零(条件框1035,“否”支路),则字典表条目保持有效(框1050)。在框1050之后,方法1000结束。
69.现在参考图11,示出了用于将标签条目位置映射到对应的数据条目位置的方法1100的一种实现方式。当在压缩的高速缓存中分配压缩的高速缓存行时,控制逻辑使用集合偏移和路径偏移来将标签阵列中的标签条目映射到数据阵列中的数据条目(框1105)。控制逻辑将集合偏移和路径偏移存储在标签条目和数据条目中(框1110)。随后,控制逻辑在访问压缩的高速缓存行时使用存储在标签条目中的集合偏移和路径偏移来定位数据条目(框1115)。而且,控制逻辑在收回压缩的高速缓存行或使其失效时使用存储在数据条目中的集合偏移和路径偏移来定位标签条目(框1120)。在框1120之后,方法1100结束。通过使用方法1100,控制逻辑在寻找用于压缩高速缓存行的合适字典方面具有更大的弹性。
70.现在转到图12,示出了用于从压缩的高速缓存中收回压缩高速缓存行的方法1200的一种实现方式。发起从给定的数据阵列条目收回压缩的高速缓存行(或使其失效)(框1205)。使用存储在给定的数据阵列条目中的字典对压缩的高速缓存行进行解压缩(框1210)。在一些情况下,如果正在丢弃数据,则可以跳过框1210。而且,从给定的数据阵列条目中检索集合偏移和路径偏移(框1215)。接下来,使用集合偏移和路径偏移执行反向地址转译以定位与压缩的高速缓存行相对应的标签阵列条目(框1220)。在方法1300(图13)中描述了使用集合偏移和路径偏移执行反向地址转译的一个示例。然后,使所定位的标签阵列条目失效(框1225)。在框1225之后,方法1200结束。
71.现在参考图13,示出了用于执行反向地址转译的方法1300的一种实现方式。将集合偏移与完整索引进行xor以创建基本索引,其中从被收回(或失效)的压缩的高速缓存行的数据阵列条目中检索集合偏移(框1305)。完整索引是被收回(或失效)的压缩的高速缓存行的数据阵列集合的索引。将路径偏移与被收回的压缩的高速缓存行的路径进行xor以创建标签阵列路径定位器(框1310)。控制逻辑使用基本索引而索引到标签阵列中以定位给定的标签阵列集合(框1315)。接下来,控制逻辑使用标签阵列路径定位器选择给定标签阵列集合的路径(框1320)。然后,控制逻辑使标签在选定路径处失效(框1325)。在框1325之后,方法1300结束。
72.现在转到图14,示出了用于在压缩的高速缓存中使用字典偏移字段的方法1400的一种实现方式。使用标签阵列中的匹配标签的路径来定位数据阵列中与匹配标签相对应的路径(框1405)。从数据阵列中的路径检索字典偏移字段(框1410)。结合高速缓存集合索引使用字典偏移字段以定位存储用于对压缩块进行压缩的字典的数据阵列集合(框1415)。在
一种实现方式中,字典偏移字段与高速缓存集合索引进行xor以索引到数据阵列中。接下来,从定位的数据阵列集合中检索字典并用字典对压缩块进行解压缩(框1420)。而且,为字典维护引用计数以跟踪有多少高速缓存块已用字典压缩(框1425)。在框1425之后,方法1400结束。
73.在各种实现方式中,使用软件应用程序的程序指令来实现本文描述的方法和/或机制。例如,设想到可由通用处理器或专用处理器执行的程序指令。在各种实现方式中,此类程序指令可以由高级编程语言表示。在其他实现方式中,程序指令可从高级编程语言编译成二进制形式、中间形式或其他形式。替代地,可以写入描述硬件的行为或设计的程序指令。此类程序指令可以由诸如c的高级编程语言表示。替代地,可以使用诸如verilog的硬件设计语言(hdl)。在各种实现方式中,程序指令存储在多种非暂时性计算机可读存储介质中的任一种上。在使用期间,计算系统可访问存储介质,以将程序指令提供到计算系统以用于程序执行。一般来讲,此类计算系统至少包括一个或多个存储器和被配置为执行程序指令的一个或多个处理器。
74.应强调,上述实现方式仅是实现方式的非限制性示例。一旦充分了解上述公开内容,许多变型和修改将对本领域技术人员显而易见。所附权利要求意图被解释为涵盖所有此类变型和修改。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献