自适应预取的制作方法

文档序号:6609068阅读:162来源:国知局
专利名称:自适应预取的制作方法
技术领域
本发明的实施例涉及微处理器和微处理器系统。更特别地,本发明的实施例属于管理由微处理器从存储器预取数据的技术。
背景技术
在现代计算系统中,可以在微处理器执行使用数据的指令之前,从存储器检索该数据并将其存储在位于微处理器内或者位于其外的高速缓存中。这种称为“预取”的技术通过使用从存储器将数据取入相应的高速缓存行的历史(例如启发式)来预测未来如何取数据,从而使得处理器能够避免与从存储器源(例如DRAM)检索(“取”)数据相关的延迟。
如果由为其预取了数据的处理器执行的指令从未使用预取的数据,则会导致过度预取。这可能由例如不准确地预测或者不合时的预取而引起。不准确地预测或者不合时的预取是指,按照行来取数据并且在由常规的分配策略从高速缓存中清除一数据行之前未使用该数据行的预取。此外,在多处理器系统中或在多核处理器中,过度预取会导致将仍然由另一个处理器或者处理器核当前使用的数据取入一个处理器。这会妨碍被剥夺了数据的处理器的性能。此外,如果被剥夺了数据的处理器最初预取或者再次使用该数据,则预取处理器不能受益于该数据。另外,过度预取会引起或者导致在指令使用先前的预取数据之前,该预取数据被后来的预取替换。
过度预取会以多种方式降低系统的性能。例如,预取使用从处理器到存储器的总线资源和带宽。因此,过度预取会增加总线通信量,并且由于无益于数据取的效率,从而会增加其他指令经历的延迟。另外,因为预取的数据会替换已在相应的高速缓存行中的数据,所以过度预取会使高速缓存中有用的数据被不常使用的或者在某些情况下根本不使用的数据替换。最后,通过强制处理器或者处理器核在其对高速缓存行执行数据更新之前放弃它对高速缓存行的独占所有权,过度预取会导致可以共享高速缓存行的许多处理器、或者处理器核之间的预取的高速缓存行的所有权的过早的转移。


通过示例而非限制附图中的图形的方式来说明本发明的实施例,其中,相同的标记表示类似的部分,其中图1表示根据本发明一个实施例的高速缓冲存储器,其中,各个高速缓存行与一个或者多个属性位相关联;图2表示其中会使用本发明的至少一个实施例的计算机系统存储器层次;图3是根据一个实施例的流程图,其表示与检查关联于一个或者多个高速缓存行的属性相关联的操作;图4表示其中会使用本发明的至少一个实施例的共享总线计算机系统;图5表示其中会使用本发明的至少一个实施例的点到点总线计算机系统;图6表示根据本发明的一个实施例的预取设置(prefetch_set)指令的操作。
具体实施例方式
本发明的实施例涉及微处理器和微处理器系统。更特别地,本发明的实施例涉及使用存储器属性位来修改由处理器执行的预取的量。
在本发明的一个实施例中,装满预取数据的高速缓存行可以被标记为已经由预取装满。在本发明的一个实施例中,当对于常规的存储器操作访问高速缓存行时,装满预取数据的高速缓存行使它们的属性被清除。这使得系统能够知道哪个高速缓存行已经被预取并且还没有被指令使用。在一个实施例中,与存储器的特定段、或者“块”相关联的存储器属性可以被用于指示该存储块的各种性质,包括是否已经预取了存储在该存储块中的数据并且还未使用,或者已经预取并且随后由指令使用,或者是否没有通过预取取入块。
如果预取的高速缓存行被清除或无效,而未被指令使用,那么在一个实施例中,类故障生成(fault-like yield)会导致执行一个或多个结构化编程情节(architecturally-programmed scenarios)。类故障生成会用于调用程序中的软件例程,其被执行以调整导致类故障生成的数据预取的策略。在另一个实施例中,预取硬件可以追踪在使用之前被清除或无效的预取的行的数量,以便于动态地调整预取策略而无需程序的干涉。通过监控未使用数据的预取并适合于过度预取,至少一个实施例允许动态调整预取以提高效率,减少无用的总线通信量,并帮助防止过早清除或者无效高速缓存行数据。
在一个实施例中,存储器的每个块可以对应于特定的高速缓存行,例如1级(L1)或2级(L2)高速缓冲存储器中的高速缓存行,并且可以使用位于高速缓冲存储器的行内的或者与其相关联的位存储位置来表示预取属性。在其他实施例中,对于其可以关联预取属性的存储器的块可以包括一个以上的高速缓存存储器行或者可以与另一种类型的存储器相关联,例如DRAM。
图1表示根据本发明的一个实施例的一部分高速缓冲存储器,其中的每个行都具有相关联的一组属性位存储位置。图1表示包括高速缓存行105的高速缓冲存储器100,所述高速缓存行105对应于存储器(未示出)的特定块。高速缓存行105具有与其相关联的,将以存储位置110中的位的形式存储的多个属性。在一个实施例中,该存储位置是相应的高速缓存行的扩展,而在其他实施例中,可以使用另一种类型的存储区域。在存储位置110中是与高速缓存行105相关联的一组属性位115,其可以存储表示该高速缓存行的各种性质的位,其可以由访问高速缓存行的软件程序来使用。
在图1所示的实施例中,一组属性位包含四个位,其可以根据如何分配属性位来表示高速缓存行的一个或多个性质。在一个实施例中,该属性位指示相应的预取高速缓存行是否已被指令使用。例如,在一个实施例中,预取到图1的一个高速缓存行中的数据可以具有其相应的属性位,该属性位设置为值“1”,直到并且除非该数据后来被由处理器或处理器核执行的指令使用,在这种情况下,使用过的数据的属性位被设置为值“0”。在另一个实施例中,属性位可以指示其他权限、性质等等。
除了该属性位外,高速缓存的每个行还具有与其相关联的、存储在状态存储位置120中的状态值。例如,在一个实施例中,状态存储位置120包含与高速缓存行105相关联的状态位矢量、或者状态域125,其指示该高速缓存行是否处于修改状态(M)、独占状态(E)、共享状态(S)、或者无效状态(I)。所述MESI状态能够控制各种软件线程、核、或者处理器是否可以使用和/或修改存储在特定高速缓存行中的信息。在一些实施例中,所述MESI状态属性包括在高速缓存行105的属性位115中。
通过预测预取什么行的硬件装置,或者通过软件或预取指令形式的软件命令在其预测中指导,或者通过硬件装置和软件命令的任意组合来引发预取。可以通过改变用于预测预取什么行的硬件装置来控制预取。如果硬件预取预测器或者软件预取命令指示可以潜在地进行预取,则还可以通过增加不预取什么行的某些启发式规则来控制预取。可以为所有预取处理关于预取和预取的过滤的策略,或者根据预取地址落入什么地址范围或者应用程序位于程序的什么部分来单独地为每个预取处理策略。对预取的控制将特定于给定的实现并且可选地能结构化地可视为一组机器寄存器。
例如,在本发明的一个实施例中,清除或者无效仍未使用的预取的高速缓存行会导致关于将预取什么行的策略的改变。在其它实施例中,未使用预取(例如,由预取的高速缓存行的清除所指示)的数量(“n”)和/或预取高速缓存行的无效或清除的数量(“m”)可以使预取算法改变,以减少高速缓存行的预取的数量,直到属性位和高速缓存行状态指示所预取的高速缓存行被指令更加频繁地使用。
图2是从在计算机系统中处理器核上执行的软件线程的角度,对本发明的实施例如何可以简化高速缓冲存储器的组织结构进行的概念说明。例如,在图2中,每个线程都可以概念化为具有相关联的高速缓冲存储器205-20m的单个线程核201-20n,所述高速缓冲存储器205-20m由高速缓存行组成,所述高速缓存行被指定为仅由在概念化的单线程核上运行的特定的相应线程来控制。例如,在一个实施例中,概念化的高速缓冲存储器205-20m可以只具有其MESI状态,该状态由线程改变,所述线程用单线程核201-20n表示。虽然事实上每个高速缓冲存储器205-20m都可以由分布在一个或多个高速缓冲存储器上的高速缓存行组成,但是以图2中所示的方式来概念化设置对理解本发明的特定实施例是有用的。
在本发明的一个实施例中,可以通过特定操作,例如指令或者从指令解码的微操作来访问、改变和控制与存储块相关联的属性。例如,在一个实施例中,可以使用一指令(例如,“load_set”指令),其从高速缓存行加载信息并且设置相应的属性位。在其它实施例中,除了load_set指令外,还可以使用一指令(例如,“load_check”指令),其从高速缓存行加载信息并检查相应的属性位。
在一个实施例中,可以使用从存储器向高速缓存行预取数据并且设置相应的属性位以指示数据已被指令使用的指令。在其他实施例中,可以意味着所有由软件执行的预取都为预取的高速缓存行设置了属性位。甚至在其他实施例中,由硬件预取装置执行的预取也可能为预取的高速缓存行设置属性。
图6表示根据一个实施例的prefetch_set指令的操作。在一个实施例中,高速缓存行601可以包含预取的数据、属性位和相干性状态变量(coherency state variable)。在其他实施例中,高速缓存行可以包含其它信息,例如标志域。此外,在其它实施例中,可以有更少或者更多的属性位。例如,在一个实施例中,prefetch_set指令使预取的数据存储在高速缓存行的数据域603中,并将属性位域605中的属性位更新为值“1”。该高速缓存行可以在“共享”状态,从而其他指令或者指令线程可以使用该数据,直到该高速缓存行被清除或者无效,在这种情况下,可以触发结构化定义情节(architecturally definedscenario),例如存储器行无效(MLI)情节,以使预取由此调整。
如果经由例如load_check指令检查属性位或者高速缓存行状态,那么可以定义一个或者多个处理核中的一个或者多个结构化情节,以根据所检查的属性执行特定事件。可能还有其他类型的事件,可以响应于该属性检查来执行。例如,在一个实施例中,可以定义结构化情节以比较该属性位和数据的特定设置,并根据比较结果调用轻量生成(light-weight yield)事件。在其他情形中,该轻量生成会调用服务例程,该例程在将控制返回给系统中运行的线程或者其它处理之前,响应于情节结果执行各种操作。在另一个实施例中,可以设置标志或寄存器以指示结果。在另一个实施例中,可以用特定值写寄存器。可以包括其他事件作为适当的响应。
例如,可以定义的一个情节是,当检测到n次预取并且未使用的高速缓存行的清除,和/或m次预取并且未使用的高速缓存行的无效(在一个实施例中用MESI状态指示)时,调用轻量生成和相应的处理程序(handler),其中m和n可以是不同或者相同的值。这种结构化定义的情节可用于将预取算法调整为更接近地对应于使用来自存储器的特定预取数据。
图3a表示根据一个实施例的,通过利用属性位和高速缓存行状态来导致类故障生成,其能够调整数据的预取。在图3a中,预取的高速缓存行301包含相应于特定存储器地址的预取数据303、属性位305和状态变量307。如果清除该高速缓存行,则用新数据304替换数据303,并且属性位和状态变量不相关。在n次这种或者其他相似的预取和清除的高速缓存行的清除之后,可以触发结构化定义的情节(例如,存储器行无效(MLI)情节)以使预取算法调整替换数据的预取,以便于避免或者至少减少随后的数据的无用预取。如果该高速缓存行实际被指令使用,例如“加载”指令或者微指令(uop),则数据保持在该高速缓存行中,属性位306改变状态(例如“1”到“0”),且状态变量保持在“共享”状态,从而该数据可以继续由随后的指令使用。如果该高速缓存行无效,因此防止其他线程使用该数据,然后由状态变量308指示该数据无效。在出现m次预取但未使用数据的无效之后,接着触发MLI情节以使预取算法调整数据的预取,以便避免或者至少减少高速缓存行的无效的次数。
在一个实施例中,MLI情节可以调用处理程序,该处理程序能使软件例程被调用以为全部预取或者仅为与数据的特定范围或者程序的特定区域相关的预取子集调整预取算法。可以使用各种实施例中的各种算法调整预取。在一个实施例中,可以使用硬件逻辑来实现该预取调整算法,而在另一个实施例中,可以使用软件和逻辑的一些组合。在本发明的实施例中,用于响应于属性位和状态变量来调整数据预取的特定算法是任意的。
图3b是流程图,表示本发明至少一个实施例的操作,其中,prefetch_set指令和高速缓存行状态变量用于设置与特定高速缓存行相关的预取属性位,以便于动态地将数据的预取调整为对应于它的使用。在其它实施例中,可以使用其它指令以执行图3b中所示的操作。在操作310,数据被从存储器地址预取到高速缓存行中,并在操作313设置相应的属性。在一个实施例中,这是通过执行prefetch_set指令或者uop来完成的。在操作315,如果清除该高速缓存行或者其他高速缓存行,则在操作316增大清除计数器,直到在操作317达到数据的n次清除,在这种情况下,在操作319,触发结构化定义情节(例如MLI)以调整预取算法。如果在操作315,随后由指令(例如加载指令/uop)使用预取的数据,则在操作325更新属性位以反映其。如果在操作315,该数据随后被无效,则更新状态变量以反映该无效状态,在操作330,增大无效计数器,直到在操作335反映数据或者其它预取数据的m次无效,在这种情况下,在操作319,触发结构化定义情节(例如MLI)以调整预取算法。在其它实施例中,在从操作317、325或者335返回到操作310之前可以出现其他操作,其可以影响操作是否返回到操作310。
可以以各种方式执行预取。例如,在一个实施例中,通过执行指令(例如“prefetch_set”指令)来执行预取,如上所述(“软件”预取或者“明确”预取)。在其他实施例中,可以通过硬件逻辑(“硬件”预取或者“隐含”预取)来执行预取。在一个实施例中,硬件预取可以通过配置预取逻辑(例如,面对面(vis-à-vis)软件使用程序)来执行,以为每个预取的高速缓存行设置属性位,以指示该高速缓存行中的预取数据未被使用。在某些实施例中,可以配置与该预取逻辑相关的控制信息,以确定将使用哪个(哪些)属性位来指示是否已使用预取数据。
图4表示一前端总线(FSB)计算机系统,其中使用本发明的一个实施例。处理器405从一级(L1)高速缓冲存储器410和主存储器415访问数据。在本发明的其他实施例中,高速缓冲存储器可以是二级(L2)高速缓存或计算机系统存储器层次中的其它存储器。此外,在某些实施例中,图4的计算机系统可以包含L1高速缓存和L2高速缓存。
在图4的处理器中说明了用于机器状态的存储区域406。在一个实施例中,存储区域可以是一系列寄存器,而在其他实施例中,该存储区域可以是其他存储器结构。同样在图4中说明了根据一个实施例的用于保存区域段的存储区域407。在其它实施例中,该保存区域段可以在其它设备或存储器结构中。该处理器可以具有任何数量的处理核。但是本发明的其它实施例可以在该系统的其它设备中实现,例如分离的总线代理,或者以硬件、软件、或者其组合分布于整个系统。
该主存储器可以实施为各种存储器源,例如动态随机存取存储器(DRAM)、硬盘驱动器(HDD)420、或者经由网络接口430远离计算机系统的存储器源,所述网络接口430包含各种存储设备和技术。该高速缓冲存储器可以位于处理器内或者非常接近该处理器,例如在处理器的本地总线407上。
而且,该高速缓冲存储器可以包含相对快速的存储器单元,例如六晶体管(6T)单元,或者具有近似相等或者更快存取速度的其它存储器单元。图4的计算机系统可以是总线代理的点到点(PtP)网络,例如微处理器,其经由针对该PtP网络上的每个代理的总线信号通信。图5表示布置为点到点(PtP)结构的计算机系统。特别地,图5示出了其中处理器、存储器和输入/输出设备通过多个点到点接口互连的系统。
图5的系统同样可以包括多个处理器,为了清楚,仅示出其中的两个处理器570、580。处理器570、580每个都可以包括本地存储器控制器集线器(MCH)572、582以与存储器22、24连接。处理器570、580可以经由使用PtP接口电路578、588的点到点(PtP)接口550交换数据。处理器570、580每个都可以经由使用点到点接口电路576、594、586、598的专用PtP接口552、554与芯片组590交换数据。芯片组590还可以经由高性能图形接口539与高性能图形电路538交换数据。本发明的实施例可以位于任何具有任意数量的处理核的处理器中,或者位于图5的每个PtP总线代理中。
但是,本发明的其它实施例可以存在于图5的系统中的其它电路、逻辑单元或者设备中。此外,在本发明的其它实施例中,可以分布于图5所示的多个电路、逻辑单元或者设备。
这里所述的本发明的实施例可以用使用互补金属氧化物半导体设备的电路或“硬件”来实现,或者使用存储在介质中的一组指令或“软件”,当由例如处理器的机器执行时,执行与本发明实施例相关的操作。或者,本发明的实施例可以使用硬件和软件的组合来实现。
虽然已经参照示例性实施例描述了本发明,但是本描述并不应被解释为限制意义。该示例性实施例以及其他实施例的各种变形,对于本发明所属领域的技术人员而言是显而易见的,它们属于本发明的精神和范围内。
权利要求
1.一种装置,包括高速缓存行,其具有存储属性位的属性字段,在由指令使用所述高速缓存行中存储的第一数据之后,所述属性位将改变状态。
2.如权利要求1所述的装置,其中,所述高速缓存行与存储块中的高速缓存行相关联。
3.如权利要求1所述的装置,其中,所述高速缓存行还包括状态变量域,用于指示所述第一数据是否已经由于所述第一数据的清除或者由于所述第一数据被第二数据更新而被无效。
4.如权利要求3所述的装置,其中,如果所述第一数据已经在没有被使用的情况下清除了第一次数,则将调整数据被预取到所述高速缓存行中的速率。
5.如权利要求4所述的装置,其中,如果所述第一数据在未被使用的情况下已经被另一个数据更新了第二次数,则将调整数据被预取到所述高速缓存行中的速率。
6.如权利要求5所述的装置,其中,结构化定义的情节将触发处理程序以使数据被预取到所述高速缓存行中的速率被调整。
7.如权利要求1所述的装置,其中,通过执行与预取所述第一数据相同的指令来更新所述属性位。
8.如权利要求7所述的装置,其中,所述高速缓存行在一级(L1)高速缓冲存储器中。
9.一种机器可读介质,其具有存储在其上的一组指令,当由机器执行所述指令时,使所述机器执行包括下列步骤的方法读取与高速缓存行相关联的属性位,所述属性位用于指示预取的数据是否已被第一指令使用;计算与所述高速缓存行相关联的相干性状态变量的连续出现的次数;如果所述相干性状态变量的连续出现的次数至少是第一数量,则执行轻量生成事件。
10.如权利要求9所述的机器可读介质,其中,所述相干性状态变量指示所述高速缓存行是无效的。
11.如权利要求9所述的机器可读介质,还包括如果所述预取的数据被所述第一指令使用,则更新所述属性位。
12.如权利要求9所述的机器可读介质,其中,作为执行预取的结果,所述属性位被设置。
13.如权利要求12所述的机器可读介质,其中,所述第一指令是加载指令。
14.如权利要求12所述的机器可读介质,其中,通过执行预取设置指令来设置所述属性。
15.如权利要求10所述的机器可读介质,其中,类故障生成将触发结构化定义情节,以使所述预取的数据不被频繁地预取。
16.一种系统,包括存储器,用于存储第一指令,以使第一数据被预取并且更新与所述第一数据相关的属性位,所述属性指示所述第一数据是否已经被指令使用过;至少一个处理器,用于取所述第一指令并且响应于其而预取所述第一数据。
17.如权利要求16所述的系统,其中,所述属性将被存储在高速缓存行中,所述第一数据将被预取到所述高速缓存行中。
18.如权利要求17所述的系统,还包括清除计数器,用于计算从所述高速缓存行连续清除所述第一数据的次数。
19.如权利要求18所述的系统,还包括无效计数器,用于计算在所述高速缓存行中无效所述第一数据的连续次数。
20.如权利要求19所述的系统,其中,如果所述连续清除的次数等于第一值或者所述连续无效的次数等于第二值,则发生轻量生成事件。
21.如权利要求20所述的系统,其中,所述轻量生成事件将使所述预取速率被调整。
22.如权利要求16所述的系统,其中,所述第一指令是预取设置指令。
23.如权利要求16所述的系统,其中,所述属性位是多个与所述高速缓存行相关联的属性位中的一个。
24.如权利要求23所述的系统,其中,所述多个属性位是用户定义的。
25.一种处理器,包括取单元,用于取第一指令,所述第一指令用于将第一数据预取到高速缓存行中并设置属性位以指示所述第一数据是否被加载指令使用;逻辑电路,用于如果所述第一数据在其被预取之后被所述加载指令使用,则更新所述属性位。
26.如权利要求25所述的处理器,还包括多个处理核,每个处理核都能执行多个软件线程。
27.如权利要求26所述的处理器,还包括用于执行结构化定义情节的逻辑电路,以检测所述第一数据是否被无效了连续次数或者是否被从所述高速缓存行中清除了连续次数。
28.如权利要求27所述的处理器,其中,所述高速缓存行可以处于多个状态中的一个,所述多个状态包括已修改状态、独占状态、共享状态和无效状态。
29.如权利要求28所述的处理器,还包括高速缓冲存储器,其中包括所述高速缓存行。
30.如权利要求25所述的处理器,其中,所述第一指令是预取设置指令。
31.一种装置,包括检测模块,用于检测预取的高速缓存行在被使用之前是否已经被清除或者无效。
32.如权利要求31所述的装置,还包括生成模块,用于响应于所述检测模块检测到预取的高速缓存行在被使用前已经被清除或者无效来执行类故障生成。
33.如权利要求32所述的装置,其中,所述生成模块将导致相应于至少一个预取的高速缓存行的至少一个存储器地址的预取策略的改变。
34.如权利要求33所述的装置,其中,所述预取策略将由具有至少一个控制模块的逻辑电路来控制,所述至少一个控制模块用于控制一个范围的存储器地址的预取。
35.如权利要求33所述的装置,还包括计数器模块,用于计算在使用前被清除或者无效的预取数据的数量。
36.如权利要求35所述的装置,其中,如果所述计数器模块计算了第一数量的未使用的预取数据,那么所述生成模块将产生类故障生成。
37.如权利要求33所述的装置,其中,所述预取策略将由具有至少一个控制模块的软件来控制,所述至少一个控制模块用于控制一个范围的存储器地址的预取。
全文摘要
一种用于调整预取速率的技术。更特别地,本发明的实施例涉及一种根据预取数据的有效性来调整预取的技术。
文档编号G06F12/08GK101082861SQ20071010359
公开日2007年12月5日 申请日期2007年4月2日 优先权日2006年3月31日
发明者K·多什, Q·雅克布森, A·布雷西, H·王, P·哈马隆德 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1