高速缓存存储器及其中实现的方法与流程

文档序号:18939999发布日期:2019-10-23 01:04阅读:423来源:国知局
高速缓存存储器及其中实现的方法与流程

本发明一般涉及高速缓存存储器电路,更特别地涉及用于将数据预拾取(prefetch)到处理器高速缓存中的系统和方法。



背景技术:

大多数现代计算机系统包括用于进行执行软件程序所必需的计算的微处理器。计算机系统还包括连接至微处理器(或者位于微处理器内部)的其它装置,诸如存储器。存储器存储微处理器所要执行的软件程序指令。存储器还存储程序指令进行操作以实现程序的期望功能的数据。

计算机系统中的位于微处理器外部(或者位于处理器核心外部)的装置(诸如存储器)通过处理器总线而直接或间接地连接至微处理器(或核心)。处理器总线是使得微处理器能够以相对大的数据块传送数据的信号集合。当微处理器执行用于对存储器中所存储的数据进行计算的程序指令时,微处理器必须使用处理器总线将数据从存储器拾取到微处理器中。类似地,微处理器使用处理器总线来将计算结果写回存储器。

从存储器拾取数据或将数据写入存储器所需的时间比微处理器对数据进行计算所需的时间大许多倍。因此,微处理器必须低效地空闲等待从存储器拾取到数据。为了减少这个问题,现代微处理器包括至少一个高速缓存存储器。高速缓存存储器或高速缓存是微处理器(或处理器核心)内部的存储系统存储器中的数据的子集的存储器(通常比系统存储器小得多)。当微处理器执行引用数据的指令时,该微处理器首先检查以查看数据是否存在于高速缓存中并且是否有效。如果是,则由于数据已经存在于高速缓存中,因此相比于必须要从系统存储器检索数据的情况可以更快速地执行指令。也就是说,微处理器不必在使用处理器总线将数据从存储器拾取到高速缓存中时等待。微处理器检测到数据存在于高速缓存中并且有效的情况通常被称为高速缓存命中。所引用的数据不存在于高速缓存中的情况通常被称为高速缓存未命中。在所引用的数据已经存在于高速缓存存储器中的情况下,通过避免从外部存储器检索数据所需的额外时钟周期,实现了显著的时间节省。

高速缓存预拾取是计算机处理器所使用的、通过在该处理器实际需要数据或指令之前将指令或数据从外部存储器拾取到高速缓存存储器中来进一步提高执行性能的技术。成功预拾取数据避免了在必须从外部存储器检索数据时遇到的延时。

预拾取存在基本的权衡。如上所述,预拾取可以通过(通过在实际需要数据之前已经将数据拾取到高速缓存存储器中来)减少延时来提高性能。另一方面,如果预拾取了太多信息(例如,太多高速缓存行),则预拾取器的效率将降低,并且其它系统资源和带宽可能负担过重。此外,如果高速缓存已满,则将新的高速缓存行预拾取到该高速缓存中将导致另一高速缓存行从该高速缓存被驱逐。因此,高速缓存中的由于先前需要而在该高速缓存中的行可能被仅可能在将来需要的行驱逐。

在一些微处理器中,高速缓存实际上由多个高速缓存组成。多个高速缓存被布置为多级的阶层结构。例如,微处理器可以具有两个高速缓存,称为第一级(l1)高速缓存和第二级(l2)高速缓存。l1高速缓存比l2高速缓存更接近微处理器的计算元件。也就是说,l1高速缓存能够比l2高速缓存更快地向计算元件提供数据。l2高速缓存通常比l1高速缓存大,但是不必须如此。

多级高速缓存布置对预拾取指令的一个影响是,由预拾取指令指定的高速缓存行可能在l2高速缓存中命中而不是在l1高速缓存中命中。在这种情况下,微处理器可以将高速缓存行从l2高速缓存传送至l1高速缓存,而不是使用处理器总线从存储器拾取该行,这是因为从l2到l1的传送比通过处理器总线拾取高速缓存行快得多。也就是说,l1高速缓存分配高速缓存行(即高速缓存行的存储位置),并且l2高速缓存向l1高速缓存提供高速缓存行以存储在l1高速缓存中。

虽然预拾取器是已知的,但是期望改进预拾取器的性能。



技术实现要素:

根据一个实施例,一种高速缓存存储器,其包括:存储器区域,用于存储所述高速缓存存储器所请求的数据,所述存储器区域被配置为具有n路组关联;预拾取逻辑,其被配置为执行用于评估所述高速缓存存储器在不久的将来是否将请求该高速缓存存储器外部的目标数据的算法;存储位置阵列,其一般被组织为k(其中k是大于1的整数值)个一维阵列的形式,k个阵列中的各阵列具有n个位置,其中每个这样的阵列位置标识所述存储器区域的n路中的用于所述k个阵列中的给定的一个阵列的唯一1路,以及其中各阵列被组织为使得多个阵列位置的序列顺序一般按照所述多个阵列位置要被替换的顺序标识所述n路;针对多个一维阵列中的各一维阵列,还包括:与所述预拾取逻辑相关联的置信度逻辑,其被配置为计算置信度测度,其中所述置信度测度反映相关处理器在不久的将来将请求所述目标数据的所确定的可能性;以及控制逻辑,其被配置为管理各阵列位置中的数据的内容,所述控制逻辑还被配置为:基于所计算出的置信度测度来分配特定的一个阵列位置以与要存储所述目标数据的路相对应;使各阵列位置中的值从所分配的阵列位置朝向与下一次替换的位置相对应的阵列位置移动;以及将与下一次替换位置相对应的阵列位置中先前所保持的值写入所分配的阵列位置。根据另一实施例,一种n路组关联高速缓存存储器,包括:预拾取逻辑,其被配置为执行用于评估所述高速缓存存储器在不久的将来是否将请求该高速缓存存储器外部的目标数据的算法;k组阵列,所述k组中的各组具有n个阵列位置,其中所述n个阵列位置中的各阵列位置标识高速缓存存储器的给定的一组的n路中的唯一1路;置信度逻辑,其被配置为计算置信度测度,其中所述置信度测度反映相关处理器在不久的将来将请求所述目标数据的所确定的可能性;以及控制逻辑,其被配置为通过基于置信度测度将来自与最近最少使用位置即lru位置相对应的阵列位置的值写入在所述k组中选择的一组中的中间位置、并且使各阵列位置中的值从该中间位置朝向倒数第二个lru位置移动一个位置,来调整所选择的一组中的值。

根据又一实施例,一种在n路组关联高速缓存存储器中实现的方法,所述方法包括:确定生成预拾取请求;获得与所述预拾取请求相关联的目标数据的置信度值;将所述目标数据写入n路组关联高速缓存存储器的组;修改所述高速缓存存储器的n位置阵列,使得n个阵列位置中的特定的一个阵列位置标识所述n路中的1路,其中n个lru阵列位置中的特定的一个lru阵列位置由所述置信度值确定。

通过审查以下附图和详细描述,本发明的其它系统、方法、特征和优点对于本领域技术人员将是或者将变得明显。所有这些附加系统、方法、特征和优点旨在包括在本说明书内,在本发明的范围内,并且受到所附权利要求的保护。

附图说明

参考以下附图,可以更好地理解本发明的各个方面。不必按比例绘制附图中的组件,而是将重点放在清楚地说明本发明的原理。此外,在附图中,相同的附图标记在若干视图中表示相应部件。

图1是示出实现本发明的处理器的某些特征的框图;

图2是示出主要用于与其它系统组件的通信的高速缓存存储器的某些特征的框图;

图3是高速缓存存储器的框图,其示出本发明的实施例的主要特征;

图4a~4d是一组lru阵列的图,其示出假设示例中的一组传统lru阵列的内容的排序;

图5是示出用于生成预拾取操作的置信度值的示例算法的流程图;

图6a~6b是示出一般被组织为lru阵列的一组阵列、并且示出根据本发明的优选实施例的该阵列中的内容的排序的图;以及

图7是示出根据本发明的实施例的预拾取操作中的基本操作的流程图。

图8a~8b示出反映在利用伪lru实现时本发明的实现的二叉树和表。

具体实施方式

尽管本发明易于进行各种修改和替代形式,但是其特定实施例在附图中通过示例的方式示出,并且这里将被详细描述成足以使本领域技术人员理解。然而,应该理解,附图及其详细描述不意在将本发明限制于所公开的特定形式。相反,意图是覆盖落入所附权利要求所限定的本发明的精神和范围内的所有修改、等同项和替代。这里所使用的标题仅为了组织目的,并不意味着用于限制说明书的范围。如在本申请中所使用的,单词“可以”以允许的意义(即,意味着有可能)、而不是强制的意义(即,意味着必须)使用。类似地,词语“包括”(“include”、“including”和“includes”)意味着包括但不限于。

各种单元、模块、电路、逻辑或其它组件可被描述为“被配置为”进行一个或多个任务。在这样的上下文中,“被配置为”是对结构的广泛叙述,其一般意味着“具有在操作期间进行或能够进行一个或多个任务的电路或其它物理结构”。电路可以是专用电路、或在编码指令的控制下操作的更通用处理电路。也就是说,在描述本发明的各种实现的某些方面或特征时,这里可以使用诸如“单元”、“模块”、“电路”、“逻辑”和“组件”等的术语。本领域技术人员将理解,利用电路实现相应的特征,无论该电路是专用电路还是在微编码指令控制下操作的更通用电路。

此外,单元/模块/电路/逻辑/组件可被配置为即使在单元/模块/电路/逻辑/组件当前不处于操作中的情况下也进行任务。叙述被配置为进行一个或多个任务的单元/模块/电路/逻辑/组件明确旨在针对该单元/模块/电路/逻辑/组件不引发35u.s.c.§112(f)。在这方面,本领域技术人员将理解,电路元件的特定结构或互连通常将由设计自动化工具的编译器(诸如寄存器传送语言(rtl)编译器)确定。rtl编译器在与汇编语言代码非常相似的脚本上运行,以将该脚本编译成用于最终电路的布局或制造的形式。

也就是说,使用更高级的软件工具来设计(诸如本发明的那些)集成电路以对电路的期望功能操作进行建模。众所周知,“电子设计自动化”(或eda)是一类用于设计诸如集成电路等的电子系统的软件工具。eda工具还用于将设计功能编程到现场可编程门阵列(fpga)中。使用诸如verilog和超高速集成电路(vhdl)等的硬件描述符语言(hdl)来创建电路的高级表示,其中根据该高级表示可以推断出较低级表示和最终实际布线。实际上,由于现代半导体芯片可以具有数十亿个组件,因此eda工具被认为是对于其设计而言必不可少的。在实践中,电路设计者使用诸如c/c++等的编程语言来指定操作功能。eda软件工具将该指定功能转换为rtl。然后,硬件描述符语言(例如verilog)将rtl转换为门的离散网表。该网表定义了由例如代工厂等生产的实际电路。实际上,这些工具因其在促进电子和数字系统的设计过程中的作用和用途而被众所周知并理解,因此这里无需描述。

如这里将描述的,本发明涉及用于将数据预拾取到高速缓存存储器中的改进机制。然而,在描述该预拾取机制之前,描述了一种示例性架构,其中可以利用本发明的预拾取器。在这方面,现参考图1,图1是示出多核处理器100的图。如本领域普通技术人员根据这里提供的描述将理解的,本发明可以在各种各样的电路配置和架构中实现,并且图1所示的架构仅仅是许多合适架构中的一种。具体地,在图1所示的实施例中,处理器100是八核处理器,其中核被列举为核0110_0~核7110_7。

在所示实施例中,省略了许多电路组件和细节,而这些组件和细节与理解本发明没有密切关系。如本领域技术人员将理解的,各处理核心(110_0~110_7)包括在整个处理器100中复制的特定的相关或伴随电路。每个这样的相关子电路在所示实施例中表示为片。对于八个处理核心110_0~110_7,相应地存在八个片102_0~102_7。这里未描述的其它电路仅表示为“其它片逻辑”140_0~140_7。

在所示实施例中,采用三级高速缓存系统,其包括1级(l1)高速缓存、2级(l2)高速缓存和3级(l3)高速缓存。l1高速缓存被分成数据高速缓存和指令高速缓存,其分别表示为l1d和l1i(例如,l1d114_0和l1i116_0)。l2高速缓存也位于核心上,这意味着1级高速缓存和2级高速缓存处于与各片的核心相同的电路中。也就是说,各片的各核心具有其自己的专用l1d、l1i和l2高速缓存。l3高速缓存在核心之外,但是在各片内。在优选实施方式中,l3高速缓存130_0~130_7(这里统称为130)是分布式高速缓存,这意味着该l3高速缓存的1/8位于片0102_0中,l3高速缓存的1/8位于片1102_1中,等等。在优选实施例中,各l1高速缓存的大小是32k,各l2高速缓存的大小是256k,并且l3高速缓存的各片的大小是2兆字节。因此,l3高速缓存的总大小为16兆字节。

在各片中设置总线接口逻辑120_0~120_7,以管理来自不同片中的各种电路组件的通信。如图1所示,利用通信总线190以允许各种电路片之间以及电路片与非核心电路160的通信。非核心电路仅表示位于处理器芯片上、但是并非与各片相关联的核心电路的一部分的附加电路。与所示的各片一样,非核心电路160包括总线接口电路162。还示出了用于与处理器外存储器180相配合的存储器控制器164。最后,其它非核心逻辑166广泛地用方框表示,其表示可被包括为非核心处理器电路的一部分的其它电路(并且也不需要为了理解本发明而描述)。

为了更好地说明一些电路组件的某些相互通信和内部通信,将呈现以下示例。该示例示出与核心6高速缓存中的假设加载未命中相关联的通信。也就是说,该假设假定处理核心6110_6正在执行用于请求加载假设地址1000处的数据的代码。在遇到这种加载请求的情况下,系统首先在l1d114_6进行查找,以查看该数据是否存在于l1d高速缓存中。假定该数据不在l1d高速缓存中,则在l2高速缓存112_6中进行查找。再次地,假定该数据不在l2高速缓存中,则进行查找以查看该数据是否存在于l3高速缓存中。如上所述,l3高速缓存是分布式高速缓存,因此系统首先需要确定数据应当位于l3高速缓存的哪个片中(如果该数据实际上位于l3高速缓存中的话)。众所周知,可以使用散列函数来进行仅是位的异或操作的该过程以得到三位地址(足以标识数据将被存储在片0~片7中的哪个片)。

与该示例一致,假定该散列函数得到如下的指示:数据如果存在于l3高速缓存中,则将存在于位于片7中的l3高速缓存的一部分中。然后通过总线接口120_6和120_7进行从片6102_6的l2高速缓存向片7102_7中所存在的l3片的通信。该通信在图中由数字1表示。如果数据存在于l3高速缓存中,则该数据将从l3130_7通信回l2高速缓存112_6。然而,在该示例中,假定数据也不在l3高速缓存中,从而导致高速缓存未命中。因此,进行从l3高速缓存130_7通过总线接口7120_7、通过非核心总线接口162、通过存储器控制器164到芯片外存储器180的通信。然后,包括位于地址1000处的数据的高速缓存行从芯片外存储器180通过存储器控制器164和非核心总线接口162通信回l3高速缓存130_7。在该数据被写入l3高速缓存之后,该数据然后通过总线接口120_7和120_6被通信至请求核心、即核心6110_6。再次地,这些通信由图中编号为1、2、3和4的箭头示出。

此时,一旦加载请求已经完成,该数据将位于高速缓存l3、l2和l1d的每一个中。本发明涉及一种优选位于l2高速缓存112_0~112_7中的每一个中的改进的预拾取器。然而,应该理解,与本发明的范围和精神一致地,如果系统架构和设计约束允许,本发明的预拾取器可以并入不同级高速缓存的每一个中。然而,在所示实施例中,如上所述,l1高速缓存是相对小尺寸的高速缓存。因此,在l1高速缓存级中过于激进地预拾取可能会存在性能和带宽后果。在这方面,更复杂或更激进的预拾取器一般在芯片中消耗更多的硅片空间、以及更多的电力和其它资源。而且,根据上述示例,过度预拾取到l1高速缓存中通常将导致更多的未命中和驱逐。这将消耗额外的电路资源、以及用于将数据预拾取到相应l1高速缓存中所需通信用的带宽资源。更具体地,由于所示实施例共享虚线190所表示的片上通信总线,因此过度的通信将消耗额外的带宽,从而可能不必要地延迟处理器100的其它部分所需的其它通信或资源。

在优选实施例中,l1i和l1d高速缓存都比l2小,并且需要能够更快地满足数据请求。因此,在各片的l1i和l1d高速缓存中实现的预拾取器优选为相对简单的预拾取器。同样,l1d高速缓存需要能够使请求流水线化。因此,在l1d中放置额外的预拾取电路可能相对费力。更甚者,复杂的预拾取器可能会阻碍其它必要电路。关于各l1高速缓存的高速缓存行,在优选实施例中,高速缓存行是64字节。因此,针对各时钟周期可以加载64字节的加载数据。

如以上所提到的,l2预拾取器的大小优选为256kb。由于具有更大的数据区,l2高速缓存中所实现的预拾取器可以更复杂且更激进。一般地,可以推测,在l2高速缓存中实现更复杂的预拾取器对于引入数据导致较小的性能损失。因此,在优选架构中,本发明的预拾取器在l2高速缓存中实现。

在描述本发明的预拾取器的细节之前,首先参考图2,图2是示出各l2高速缓存的各种电路组件的框图。具体地,图2所示的组件描绘了基本特征——促进l2高速缓存内的通信以及l2高速缓存与图1所示的系统中的其它组件的通信的结构。首先,存在四个方框210、220、230和240,其示出l1d接口210、l1i接口220、预拾取接口230和外部接口240。总体地,这些方框表示通过l2高速缓存112对事务(transaction)或请求进行排队和跟踪的电路。如图1所示,在各核心中,存在l1d和l1i高速缓存这两者、以及更高级的l2高速缓存。l1d接口210和l1i接口220连接l2高速缓存与l1高速缓存。这些接口例如实现加载队列、驱逐队列和查询队列,作为用以促进该通信的机制。预拾取接口230是用于促进与本发明的预拾取器相关联的通信的电路,这将在以下进行更详细描述。在优选实施例中,预拾取器实现边界框预拾取算法和流预拾取算法这两者,并且最终进行作为这两种算法的结果的组合结果的预拾取判断。边界框预拾取算法可以与通过引用而并入于此的u.s.8,880,807中所描述的算法类似。存在本发明可以利用的许多已知流预拾取算法,并且本发明不限于任何特别预拾取算法。

如本领域技术人员将理解的,预拾取算法的执行中有部分是监视从相应核心到相关l1i和l1d高速缓存的加载请求。因此,这些加载请求作为预拾取接口230的输入而被示出。预拾取接口230的输出采用标记管道250的仲裁请求的形式,其中本领域技术人员将理解这里简要描述的标记管道250的相关功能。最后,外部接口240向位于l2高速缓存之外、实际位于处理器核心之外的组件提供接口。如结合图1所述,这样的通信(特别是片外通信)通过总线接口120而路由。

如图2所示,电路框210、220、230和240各自具有被表示为标记管道仲裁(tagpipearb)请求的输出。提供标记管道250作为几乎所有l2高速缓存流量都遍历的中心点。在所示实施例中,存在表示为a和b的两个标记管道。两个这样的标记管道仅被提供用于负载平衡,因此,从电路210、220、230和240(各种接口电路)输出的标记管道请求可以也基于负载平衡被引导至标记管道a或标记管道b。在优选实施例中,标记管道是四阶段管道,其各阶段由字母a、b、c和d表示。访问高速缓存的事务(这里有时称为“标记管道仲裁”)通过标记管道250的各阶段前进。在a阶段期间,事务仲裁进入标记管道。在b阶段期间,标记被发送至阵列(标记阵列260和数据阵列270)。在c阶段期间,从阵列接收mesi信息以及标记在llc中命中还是未命中的指示,并且考虑从阵列接收到的信息来判断采取什么动作。在d阶段期间,动作决策(完成/重放,推入填充队列(fillq)等)被分阶段返回至请求队列。

最后,图2示出标记阵列260和数据阵列270。标记阵列260有效地或实质上包括元数据,而数据阵列是包括数据的实际高速缓存行的存储器空间。标记阵列260中的元数据包括mesi状态以及l1i和l1d有效位。众所周知,mesi状态定义数据阵列中所存储的数据是否处于修改(“m”)、排他(“e”)、共享(“s”)或无效(“i”)状态其中之一。

该架构的类似但先前的版本在u.s.2016/0350215中进行描述,上述文献通过引用而并入于此。因为关于电路内组件通信的细节的理解不是理解本发明所必需的,并且实际上在本领域普通技术人员的水平之内,因此这里无需进行任何进一步的描述。

现参考图3,图3是示出与l2高速缓存112中的预拾取器相关联的某些功能组件的图。如上所述,虽然该图中的方框表示功能单元,但是应当理解,这些单元中的各单元通过电路实现,无论该电路是专用电路、还是在微编码指令控制下工作的更通用电路。在这方面,预拾取器310被配置为进行用以评估是否从存储器预拾取到l2高速缓存中以及将哪些数据从存储器预拾取到l2高速缓存中的预拾取算法。在这方面,预拾取逻辑310被配置为执行用于评估高速缓存存储器在不久的将来是否将请求该高速缓存存储器外部的目标数据的算法。如本领域技术人员将理解的,“不久的将来”是基于诸如高速缓存大小、高速缓存的类型(例如,数据高速缓存相对于指令高速缓存)、代码结构等因素的相对评估。

在优选实施例中,实现了边界框预拾取器312和流预拾取器314这两者,并且最终预拾取评估基于这两种预拾取算法的结果的总体组合。如上所述,流预拾取器是众所周知的,并且一般基于对存储引用序列的检测而工作,其中存储引用序列以单调增加或减小的方式引用连续的一组高速缓存块。在流检测时,流预拾取器将开始预拾取数据,直到预定深度(即,处理系统当前正在加载的数据之前的预定数量的高速缓存块)为止。可以与本发明的范围和精神一致地利用不同的预拾取算法。尽管未具体示出,但是还可以包括与预拾取器相关的学习模块,并且该学习模块进行操作以基于观察到的性能来修改预拾取算法。

对于本发明特别独特的一个方面涉及与所生成的各预拾取请求相关联的置信度测度的利用。用于实现该置信度测度的逻辑或电路由附图标记320表示。在这方面,本发明采用lru替换方案的修改版本。如本领域中已知的,可以与从最近最少使用的高速缓存行中驱逐数据相关地利用lru阵列330。如上所述,各l2高速缓存的存储器区域350是256k。优选实施例中的l2高速缓存被组织成16路。具体地,在16路高速缓存中存在256组64字节高速缓存行。因此,lru阵列330具有表示为0~15的16个位置。lru阵列330的各位置指向l2高速缓存的特定路。在所示实施例中,这些位置编号为0~15,其中位置0一般指向最近最常使用的路,而位置15一般指向最近最少使用的路。在所示实施例中,高速缓存存储器是16路组关联存储器。因此,lru阵列的各位置指向这16路中的一路,因此lru阵列的各位置是4位值。

控制逻辑270包括被配置为管理lru阵列的内容的电路。同样,传统的高速缓存管理逻辑(例如,用于控制来自高速缓存的数据的引入和驱逐的逻辑)体现在数据替换逻辑360中。数据替换逻辑360除了实现高速缓存存储器区域350的传统管理操作之外,还结合控制逻辑和lru阵列330的新颖管理操作来管理高速缓存存储器区域350的内容,以实现这里所述的具有创造性的特征。

再次地,如本领域技术人员将理解的,lru阵列330被组织为移位队列。参考图4a~4d,将描述以下示例操作,以说明lru阵列的传统操作。图4a示出具有编号为0~15的十六个位置的一组lru阵列。如上所述,lru阵列的各位置指向或标识高速缓存存储器中的、目标数据所在的特定路。图4a~4d的图示中所使用的命名法被呈现为使得各单元(cell)的右下部分中的较小数字指定lru阵列内的位置标识符,其中数字0指定mru(最近最常使用)位置,而数字15指定lru位置。各单元的左上部分中所呈现的较大数字表示高速缓存存储器内的路。由于在所示实施例中,高速缓存存储器是16路组关联高速缓存、并且lru阵列是16位置阵列,因此阵列位置和路标识符均是4位值。因此,lru阵列中的各单元位置将包含高速缓存存储器内的16个唯一路中的各路的标识符。然而,应当理解,可以实现高速缓存的不同组关联,这将导致相应不同的lru阵列大小。

如将理解的,在启动时,阵列的内容将处于指定或默认的原始状态。当通过例如核心加载访问新数据时,数据将移动到高速缓存中。当数据移动到高速缓存中时,对于各个这样的加载,lru阵列将更新。为了该示例的目的,图4a示出lru阵列在初始启动时可能的状态。具体地,在该图示中,假定所示的一组lru阵列循序标识各个高速缓存存储器区域路。也就是说,在初始启动时,给定的一组lru阵列将表现为如图4a所示,其中lru阵列中的第15个位置(lru位置)将指向高速缓存存储器中的第0路,而lru阵列的第0个位置(mru位置)将指向高速缓存存储器内的第15路。

现假定,与假设示例一致,核心对确定存在于高速缓存的第8路中的数据进行请求。响应于这样的加载,更新lru阵列以将第8路的位置从第7个lru阵列位置重定位到第0个lru阵列位置(因为第8路的位置将变为最近最常使用)。第0个lru位置~第6个lru位置的内容或指针将被分别移动到第1个lru位置~第7个lru阵列位置。这些操作总体地在图4b和4c中示出。由于所请求的数据已经在高速缓存内,因此不需要进行驱逐操作,但是所请求的数据将移动到lru阵列中的最近最常使用单元位置。

现假定下一个数据访问是对当前不在高速缓存内的数据的新加载。这时,最老数据(lru位置指向的数据)将被从高速缓存中驱逐,并且新数据被读入该被驱逐的高速缓存行。如图4c中所示,lru阵列的第15个位置指向高速缓存的第0路。因此,新加载数据将被读入高速缓存的第0路中。然后,将更新lru阵列以将lru阵列的位置0~14的内容移动至第1个~第15个位置,并且第0个位置将被更新为指向高速缓存的第0路(现包含新数据的一路)。

再次地,图4a~4d所示的示例是传统的,因此无需在这里进行进一步描述。然而,这里呈现这些示例是为了更好地说明本发明所实现的变化和进步。在这方面,本发明修改了lru阵列管理的这种传统方法。具体地,不是将每个加载请求分配给lru阵列的最近最常使用位置(即lru位置0),而是基于与给定加载请求相关联的置信度值来将加载请求直接写入lru阵列330的特定位置(包括中间位置(或甚至最后位置))。以下将描述用于生成置信度值的一种机制。然而,通过示例的方式,考虑对被认为具有中级置信度值的数据的加载请求。不是将该数据的路位置分配给lru阵列0位置,而是可以将其分配给lru阵列7位置(例如,在lru阵列的中心附近)。作为结果,该数据一般将在先前加载并由lru位置1~6所指向的数据之前被从高速缓存中驱逐。

现参考图5,图5是示出用于生成与本发明结合使用的置信度值的优选方法的流程图。在步骤510处,系统设置初始置信度值。在一个实施例中,该初始置信度值被设置为8,这是中级(或中等)置信度值。与本发明的范围和精神一致地,其它初始置信度值可被设置为初始值。实际上,在另一实施例中,初始置信度值可以基于存储器访问类型(mat)。为了获得与mat有关的附加信息,参考u.s.9,910,785,该文献通过引用而并入于此。

一旦从核心接收到新加载请求,系统就判断该加载是否是到流的新加载(步骤520)。如果是,则系统检查是否已经预拾取了该新加载(步骤530)。如果是,则置信度值递增1(步骤540)。在优选实施例中,置信度值在15处饱和。因此,如果置信度值在进入步骤540时为15,则置信度值仅保持在15处。然而,如果步骤530判断为该新加载未被预拾取,则置信度值递减1(步骤550)。在该步骤中,置信度值的下限为0。因此,如果置信度值在进入步骤550时为0,则该置信度值将仅保持在0处。与本发明的范围和精神一致,可以利用其它算法来生成置信度值,并且上述算法仅仅是一个例示。

现参考图6a和图6b,其示出在本发明的上下文中如何使用该置信度值。图6a示出一般被组织为lru阵列的一组阵列的假设状态,其与图4a中所呈现的状态相同。如本领域技术人员将理解的,lru阵列被组织成多个组,其中各组包含多个位置。相应地,多个位置中的各位置指定该组中的唯一“路”。如图6a中所示,k组n路关联高速缓存将具有k个组,其中各组具有多个n(n路)单元位置:每个路一个单元位置。由于本发明的阵列管理针对各队列进行相同的操作,因此将仅讨论lru阵列组中的一组。该组在这里有时可被概括地称为lru阵列,但是任何这样的引用将被理解为适用于一组lru阵列。

现假定,响应于新加载请求,数据将被拾取到高速缓存中,其中该数据的所分配置信度值(在本示例中为置信度计数)为9。通过将结合图7所描述的过程,对该数值置信度计数进行转译操作,以将该计数转译为与lru阵列位置中的特定一个lru阵列位置相对应的数值。如将结合图7所描述的,置信度计数9转译为lru位置7。在lru阵列的传统实现中,任何新加载将被分配给第0个lru阵列位置。然而,通过利用本发明的置信度计数,以上假设示例的新加载将被插入lru阵列组的第7个位置中。如果该组的第15个阵列位置所指向的路(在该示例中为路0)包含有效数据,则必须从高速缓存中驱逐该有效数据。更新lru阵列以将lru阵列位置7~14中的值的内容分别移动到lru阵列位置8~15。阵列位置15先前指向的路现在移动到第7个lru位置,并且位于新数据被写入的路内。

先前结合图3所描述的控制逻辑270和数据替换逻辑360被设计成控制lru阵列和存储器区域350内的信息的管理。图6b中示出置信度计数逻辑610和转译逻辑620,其体现出被配置为生成置信度计数(如图5所述)的电路可以将该置信度计数转译为lru阵列位置(如接着将结合图7所描述的那样)。

最后,参考图7,图7是示出根据本发明的实施例的数据拾取和高速缓存lru阵列更新的基本操作的流程图。首先,由预拾取器进行高级别判断以生成预拾取请求(步骤710)。此后,获得置信度值(步骤720)。一般地,仅检索该值,因为该值已经根据结合图5所描述的操作而计算出。此后,置信度值被转译为lru阵列位置(步骤730)。在一个实施例中,这种转译可以是置信度计数和lru阵列位置之间的直接线性转译。具体地,如结合图5所描述的,置信度值是范围在0~15内的数值。因此,该置信度值可以用于将新加载直接分配到lru阵列位置15~0中。由于置信度值15表示最高置信度,于是相应的数据将被写入高速缓存并且由lru阵列位置0所指向,这是因为lru阵列位置0是最近最常使用位置、并且适合于最高置信度的数据拾取。

然而,在本发明的优选实施例中,已经实现置信度值到lru阵列位置的非线性转译。此外,本发明的优选实施例指定五个置信度等级。也就是说,lru阵列中有五个特定位置可被分配给新加载。如图7的分解表735(与步骤730相关联)所示,进行转译以使得如果置信度值大于或等于14,则将lru阵列位置转译为位置0。将大于或等于10但小于14的置信度值转译为lru阵列位置2。将大于或等于6但小于10的置信度值转译为lru阵列位置7(这与结合图6b呈现的示例一致)。将大于或等于2但小于6的置信度值转译为lru阵列位置10,并将大于或等于0但小于2的置信度值转译为lru阵列位置14。

一旦进行转译并且确定lru阵列位置,就从lru阵列中驱逐适当的数据,并使lru阵列位置中的适当值移动一个位置。具体地,使转译位置到位置14中的值移动一个位置(步骤740)。将lru阵列位置15先前指向的路写入转译后置信度值所标识的位置中。最后,将数据的高速缓存行预拾取到转译后置信度值的lru位置所指向的路中。

鉴于前述讨论,将理解,本发明改进了高速缓存性能。具体地,通过将具有中等到低等置信度值的预拾取行在较接近lru阵列位置的位置处插入该lru阵列中,避免了过早地丢弃很有可能再次使用的mru高速缓存行(从而避免不得不重新预拾取这些行)。以这种方式利用预拾取置信度测度减少了从高速缓存丢弃的“良好”高速缓存行的数量,并增加了所保留的良好高速缓存行的数量。

上述的各阵列已被表征为“一般”组织成lru阵列的形式。在这方面,本发明通过基于置信度测度允许将新加载数据的高速缓存存储器路插入“lru阵列”的中间单元位置而不是mru单元位置,来修改传统(或真实)的lru阵列布置。此外,如下所述,本发明的这种相同特征可以在这里所谓的伪lru阵列中实现。

在一个实现中,伪lru(或plru)阵列使用较少的位来标识阵列的单元位置。如上所述,在“真实”的lru阵列中,16路lru阵列的各单元位置将由4位值标识,总共由64位标识。为了减少该位数,可以利用伪lru实现(用纯lru组织来交换实现中的简化和效率)。参考图8a的二叉树示出一种这样的实现。如图所示,16路阵列实现可以使用每组15位而不是每组64位来实现,其中针对二叉树的各节点分配一位。在图8a中,为了这里参考而将节点编号为0~15,并且各节点具有单独一位值(0或1)。

可以通过评估各节点的位值来遍历图8a的二叉树。在一个实现中,节点值0表示向左遍历该节点,而节点值1表示向右遍历该节点。在启动时,所有位可被重置为零,并且单元位置0(即,路0)将是要更新的下一个路位置。通过简单基于各节点的位值遍历树来到达该位置。具体地,节点1中的初始值0表示向左到节点3。节点3中的初始值0表示向左到节点7。同样,节点7中的初始值0表示向左到节点15。最后,节点15中的初始值0表示向左,这标识了该组阵列的路0。此后,更新定义二叉树中的节点值的15位值以使所遍历的各个位值翻转。因此,节点1、3、7和15的位值将被更新为1。假定初始15位值[节点15:节点1]是000000000000000,在翻转节点1、3、7和15的位值之后,15位值将是100000001000101。

继续该示例,下一个数据加载将如下遍历树。节点1(为1)将表示向右遍历。节点2、5和11(均为其初始值0)将全部向左遍历,并且路8将被标识为plru路。该路现在变为mru路,并且节点1、2、5和11的位值都翻转,由此节点1再次翻转为0,并且节点2、5和11被翻转为值1。因此,表示该节点值的15位值将是:100010001010110。然后,下一加载将如下遍历二叉树。节点1是0,并且向左遍历。节点3是1,并且向右遍历。节点6和13仍然处于其初始值0并且向左遍历,并且单元号4将以加载值的路更新。该路(路4)现在变为mru路。对于随后的数据加载,重复该过程。

根据本发明的实施例,这样的二叉树可以用来实现伪lru算法,其基于置信度值而更新。也就是说,不是翻转所遍历的二叉树的每一位,而是基于置信度值来仅翻转某些位。图8b是示出根据本发明的实现的可以翻转的位的表835。图7图示了示出可以如何将计算出的置信度值转译为lru阵列的阵列位置的表735。表835示出可以如何将相同的置信度值转译为用于实现伪lru实现的二叉树中的翻转后的位。应当理解,这些是示例性值,并且可以基于设计目标与本发明一致地分配不同的值。

为了说明,再次参考图8a的二叉树。在初始启动时,节点的所有位位置都是0值,使得单元位置0成为lru位置。将第一个加载值写入该位置的路中。节点1、3、7和15向左遍历以到达该位置。如果新加载的数据具有非常低的置信度值,则所遍历的节点的所有位都不被翻转。作为结果,下一个数据加载将被写入同一路中。然而,如果新加载的数据被认为具有中等置信度值,则根据表835,翻转3级、2级和1级的遍历节点。因此,节点3、7和15从0翻转为1。因此,下一加载将向左遍历节点1,向右遍历节点3,向左遍历节点6和13(并写入路4中)。继续该示例,假定确定下一加载具有置信度值11(对应于“差”),则只有2级的遍历节点(节点6)的位值将翻转。作为结果,下一加载将向左遍历节点1,向右遍历节点3和6,以及向左遍历节点12(并写入路6中)。

虽然在附图和前面的描述中示出并详细描述了本发明,但这样的图和描述应被认为是说明性或示例性的,而不是限制性的;本发明不限于所公开的实施例。通过研究附图、公开内容和所附权利要求,本领域技术人员在实践所要求保护的发明时可以理解并实现所公开的实施例的其它变形。

注意,可以使用所公开的实施例的各种组合,因此参考实施例或一个实施例并不意味着从其它实施例的特征的使用中排除该实施例的特征。在权利要求中,词语“comprising”不排除其它元件或步骤,并且不定冠词“a”或“an”不排除多个。单个处理器或其它单元可以实现权利要求中所记载的若干项的功能。在相互不同的从属权利要求中记载某些测度的仅有事实并不表示这些测度的组合不能用于获益。计算机程序可以存储/分布在合适的介质(诸如与其它硬件一起提供或者被提供作为其它硬件的一部分的光学介质或固态介质等)上,但也可以以其它形式分布。注意,用于在环境的一个或多个装置中存储指令(例如,应用软件)的存储器也可被称为非暂时性计算机可读介质。权利要求中的任何附图标记不应被解释为限制范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1