首页> 中国专利> 指令高速缓存中的预取终止和恢复

指令高速缓存中的预取终止和恢复

摘要

一种系统,其包括CPU核心(102)、第一存储器高速缓存(130)和第二存储器高速缓存(155)以及存储控制器子系统(101)。存储控制器子系统(101)推测地确定第一存储器高速缓存(130)中的虚拟地址的命中或未命中状况,并且推测地将虚拟地址转换为物理地址。与命中或未命中状况以及物理地址相关联,存储控制器子系统(101)将状态配置为有效状态。响应于从CPU核心(102)接收到不需要与虚拟地址相关联的程序指令的第一指示,存储控制器子系统(101)将状态重新配置为无效状态,并且响应于从CPU核心(102)接收到需要与虚拟地址相关联的程序指令的第二指示,存储控制器子系统(101)将状态重新配置回有效状态。

著录项

说明书

背景技术

一些存储器系统包括多级高速缓存系统。当存储控制器从处理器核心接收到对特定存储器地址的请求时,存储控制器确定与该存储器地址相关联的数据是否存在于第一级高速缓存(L1)中。如果L1高速缓存中存在该数据,则从L1高速缓存返回该数据。如果与该存储器地址相关联的数据不存在于L1高速缓存中,则存储控制器访问第二级高速缓存(L2),第二级高速缓存可能更大,因此比L1高速缓存保存更多的数据。如果数据存在于L2高速缓存中,则将数据从L2高速缓存返回到处理器核心,并且在相同数据被再次请求的情况下,副本也存储在L1高速缓存中。层次结构的附加存储级别是可能的。

发明内容

在一个示例中,系统包括具有CPU核心的处理器、第一存储器高速缓存和第二存储器高速缓存以及存储控制器子系统。存储控制器子系统推测地确定第一存储器高速缓存中虚拟地址的命中或未命中状况,并且推测地将虚拟地址转换为物理地址。与命中或未命中状况以及物理地址相关联,存储控制器子系统将状态配置为有效状态。响应于从CPU核心接收到不需要与虚拟地址相关联的程序指令的第一指示,存储控制器子系统将状态重新配置为无效状态,并且响应于从CPU核心接收到需要与第一虚拟地址相关联的程序指令的第二指示,存储控制器子系统将状态重新配置回有效状态,而不需要额外访问TAGRAM或地址转换逻辑。

附图说明

图1说明了根据示例的处理器。

图2说明了根据示例的将L1存储器高速缓存访问提升为完整的L2高速缓存行访问。

图3是根据示例说明性能改进的流程图。

图4是根据示例说明另一性能改进的另一流程图。

图5示出了包括图1的处理器的系统。

具体实施方式

图1示出了包括分层缓存子系统的处理器100的示例。在该示例中的处理器100包括中央处理单元(CPU)核心102、存储控制器子系统101、L1数据高速缓存(L1D)115、L1程序高速缓存(L1P)130和L2存储器高速缓存155。在该示例中,存储控制器子系统101包括数据存储控制器(DMC)110、程序存储控制器(PMC)120和统一存储控制器(UMC)150。在该示例中,在L1高速缓存级别,将数据和程序指令分为单独的高速缓存。将由CPU核心102执行的指令存储在L1P 130中,然后将其提供给CPU核心102供执行。另一方面,数据存储在L1D 115中。CPU核心102可以从L1D 115读取数据或向L1D 115写入数据,但具有对L1P 130的读取访问权限(无写入访问权限)。L2存储器高速缓存155可以存储数据指令和程序指令两者。

尽管L1D 115、L1P 130和L2存储器高速缓存155的大小可以因实施方式而异,但是在一个示例中,L2存储器高速缓存155的大小大于L1D 115或L1P 130的大小。例如,L1D 115的大小为32KB且L1P的大小也为32KB,而L2存储器高速缓存的大小可以在64KB至4MB之间。此外,L1D 115的高速缓存行大小与L2存储器高速缓存155的高速缓存行大小相同(例如128字节),并且L1P 130的高速缓存行大小更小(例如64字节)。

在CPU核心102需要数据时,DMC 110从CPU核心102接收对目标数据的访问请求。该访问请求可以包括来自CPU核心102的地址(例如,虚拟地址)。DMC 110确定目标数据是否存在于L1D 115中。如果数据存在于L1D 115中,则将数据返回给CPU核心102。但是,如果在L1D115中不存在CPU核心102请求的数据,则DMC 110向UMC 150提供访问请求。该访问请求可以包括DMC 110基于CPU核心102提供的虚拟地址(VA)生成的物理地址。UMC 150确定L2存储器高速缓存155中是否存在DMC 110提供的物理地址。如果数据存在于L2存储器高速缓存155中,则将数据从L2存储器高速缓存155返回到CPU核心102,其中副本存储在L1D 115中。高速缓存子系统的附加层次结构也可能存在。例如,L3存储器高速缓存或系统存储器可能可供访问。这样,如果在L1D 115或L2存储器高速缓存155中都不存在CPU核心102所请求的数据,则可以在附加的高速缓存级别中访问该数据。

关于程序指令,当CPU核心102需要附加指令来执行时,CPU核心102将VA 103提供给PMC 120。PMC通过启动工作流来响应CPU核心102提供的VA 103,以将程序指令的预取数据包105返回给CPU核心102供执行。尽管预取数据包的大小可能因实施方式而异,但在一个示例中,预取数据包的大小等于L1P 130的高速缓存行的大小。如果L1P高速缓存行大小为例如64字节,则返回到CPU核心102的预取数据包还将包含64字节的程序指令。

CPU核心102还向PMC 120提供预取计数104。在一些实施方式中,在CPU核心102提供VA 103之后,预取计数104被提供给PMC120。预取计数104指示在VA 103处开始的预取单元之后的程序指令的预取单元的数量。例如,CPU核心102可以提供200h的VA。该VA与在虚拟地址200h开始的64字节预取单元相关联。如果CPU核心102希望存储控制器子系统101在与虚拟地址200h关联的预取单元之后发送附加指令供执行,则CPU核心102提交值大于0的预取计数。预取计数为0表示CPU核心102不再需要任何预取单元。例如,预取计数为6表示CPU核心102请求值得获取指令并发送回CPU核心102供执行的附加6个预取单元。返回预取单元在图1中示为预取数据包105。

仍然参考图1的示例,PMC 120包括TAGRAM(标记随机访问存储器)121、地址转换器122和寄存器123。TAGRAM 121包括虚拟地址的列表,虚拟地址的内容(程序指令)已被缓存到L1P 130。地址转换器122将虚拟地址转换为物理地址(PA)。在一个示例中,地址转换器122直接从虚拟地址生成物理地址。例如,可以将VA的低12位用作PA的最低有效12位,其中PA的最高有效位(位于低12位之上)则是在执行程序之前基于在主存储器中配置的一组表生成的。在该示例中,可以使用物理地址而不是虚拟地址来对L2存储器高速缓存155进行寻址。寄存器123存储来自TAGRAM 121查找的命中/未命中指示符124、由地址转换器122生成的物理地址125和有效位126(本文也称为状态位),以指示相应的命中/未命中指示符124和物理地址125是有效还是无效。

在从CPU 102接收到VA 103之后,PMC 120执行TAGRAM 121查找,以确定L1P 130是否包括与该虚拟地址相关联的程序指令。TAGRAM查找的结果是命中或未命中指示符124。命中意味着在L1P 130中存在VA,而未命中意味着在L1P 130中不存在VA。对于L1P 130命中,PMC 120从L1P 130检索目标预取单元,并将其作为预取数据包105返回给CPU核心102。

对于L1P 130未命中,(基于VA生成的)PA由PMC 120提供给UMC 150,如142所示。字节计数140也从PMC 120提供给UMC 150。字节计数指示从PA 142开始要被检索(如果存在)的L2存储器高速缓存155的字节数。在一个示例中,字节计数140是多位信号,它对从L2存储器高速缓存155所需的字节数进行编码。在示例中,L2存储器高速缓存的行大小是128字节,并且每行被分为上半部分(64字节)和下半部分(64字节)。字节计数140因此可以编码数字64(如果给定的L2存储器高速缓存行仅需要上半部分或下半部分64字节)或128(如果需要整个L2存储器高速缓存行)。在另一示例中,字节计数可以是单个位信号,其中一个状态(例如,1)隐式地编码整个L2存储器高速缓存行,而另一状态(例如0)隐式地编码L2存储器高速缓存行的一半。

UMC 150还包括TAGRAM 152。由UMC 150从PMC 120接收的PA 142用于对TAGRAM152进行查找,以确定目标PA在L2存储器高速缓存155中是命中还是未命中。如果L2存储器高速缓存155中有命中,则取决于字节计数140,目标信息可以是高速缓存行的一半或整个高速缓存行,该目标信息被返回到CPU核心102,副本存储在L1P 130中,下次CPU核心102尝试提取相同的程序指令时,将从L1P 130将相同的程序指令提供给CPU核心102。

在图1的示例中,CPU核心102向PMC 120提供VA 103和预取计数104。如上所述,PMC120启动工作流以从L1P 130或L2存储器高速缓存155检索预取数据包。使用预取计数104和原始VA 103,PMC 120计算附加虚拟地址,并且继续从L1P 130或L2存储器高速缓存155中检索与那些计算出的VA对应的预取数据包。例如,如果预取计数为2,并且来自CPU核心102的VA 103为200h,PMC 120将接下来的两个VA计算为240h和280h,而不是CPU核心102将每个这样的VA提供给PMC 120。

图2说明了特定示例,其中优化导致处理器100的性能改善。如上所述,L2存储器高速缓存155的行宽大于L1P的行宽。在一个示例中,如图2所示,L1P的宽度是64字节,L2存储器高速缓存155的行宽是128字节。L2存储器高速缓存155被组织为上半部分220和下半部分225。UMC 150可以从L2存储器高速缓存155中读取整个128字节的高速缓存行,或者仅读取L2存储器高速缓存行的一半(上半部分220或下半部分225)。

给定的VA可以转换为特定的PA,如果特定的PA存在于L2存储器高速缓存155中,则映射到L2存储器高速缓存的给定行的下半部分225或映射到上半部分220。基于用于表示VA和PA的寻址方案,PMC 120可以确定给定的VA是将映射到下半部分225还是上半部分220。例如,VA内的特定位(例如,位6)可以用于确定相应的PA是否将映射到L2存储器高速缓存行的上半部分或下半部分。例如,位6为0可以指示下半部分,而位6为1可以指示上半部分。

附图标记202示出由CPU核心102提供给PMC 120的VA为200h和对应的预取计数为6的示例。附图标记210说明了通过上述高速缓存管道的VA列表包括(从CPU核心102接收的)200h和(由PMC 120计算的)接下来的6个连续虚拟地址240h、280h、2c0h、300h、340h和380h。

如上所述,处理从200h到380h的每个地址。任何或所有VA可能是L1P 130中的未命中。PMC 120可以将L1P 130中未命中的两个连续的VA打包到单个L2高速缓存行访问尝试中。因此,如果200h和240h两者都在L1P 130中未命中,并且对应于200h的物理地址对应于L2存储器高速缓存155的特定高速缓存行的下半部分225,并且对应于240h的物理地址对应于L2存储器高速缓存的同一高速缓存行中的上半部分225,则PMC 120可以向UMC 150发布单个PA 142以及字节计数140,字节计数140指定来自L2存储器高速缓存的整个高速缓存行。因此,L1P 130中的两个连续的VA未命中可以被提升为单个全行L2存储器高速缓存查找。

如果由CPU核心102发起的一系列VA中的最后VA(例如一系列VA 210中的VA 380h)映射到L2存储器高速缓存155的高速缓存行的下半部分225,则根据所描述的示例,即使仅需要下半部分225,也检索L2存储器高速缓存155的整个高速缓存行。如果CPU以预取计数0将VA 103提供给PMC 120,这意味着CPU 102仅需要单个预取单元,则发生相同的响应。检索整个高速缓存行并将整个高速缓存行提供给L1P 130所花费的任何额外开销、时间或功耗(如果有的话)非常小。由于程序指令通常以线性顺序执行,因此上半部分220中的程序指令无论如何都将在下半部分225中的指令执行之后执行的概率通常很高。因此,下一指令集以非常少的成本被接收,并且无论如何可能都需要这样的指令。

图2通过箭头213说明了VA 380h映射到L2存储器高速缓存155中的高速缓存行260的下半部分225。PMC 120通过例如检查VA的一个或多个位或通过地址转换器122进行转换后的其对应物理地址来确定该映射。PMC 120通过提交与VA 380h关联的PA以及指定整个高速缓存行的字节计数104,将UMC 150的查找过程提升为完整的高速缓存行读取。然后,检索整个128字节的高速缓存行(如果存在于L2存储器高速缓存155中),并将其写入在两条单独的64字节的高速缓存行中的L1P 130,如265所示。

但是,如果一系列VA中的最后VA(或者如果预取计数为0的情况下只有一个VA)映射到L2存储器高速缓存155的高速缓存行的上半部分220,则PMC 120请求UMC 150在其TAGRAM 152中查找,并且仅将高速缓存行的上半部分返回给CPU核心102和L1P 130。下一个PA将位于L2存储器高速缓存155的下一个高速缓存行的下半部分225中,并且将花费额外的时间、开销和功耗来推测性地检索下一个高速缓存行,并且不确定CPU核心102是否会需要执行那些指令。

图3示出了用于上述方法的流程图300的示例。可以按照所示顺序或以不同顺序执行操作。此外,可以顺序地执行操作,或者可以同时执行两个或更多个操作。

在302处,该方法包括由存储控制器子系统101接收对程序指令的N个预取单元的访问请求。在一个实施方式中,该操作通过CPU核心102向PMC 120提供地址和计数值来执行。地址可以是虚拟地址或物理地址,并且计数值可以指示CPU核心102需要的附加的预取单元的数量。

在304处,将索引值I初始化为值1。该索引值用于确定PMC 120何时要处理连续虚拟地址系列中的最后虚拟地址。在306处,该方法确定预取单元I是L1P 130的命中还是未命中。在一些示例中,通过确定虚拟地址是否存在于PMC的TAGRAM 121中来进行此确定。确定306可能有两种结果—命中还是未命中。

如果虚拟地址是到L1P 130中的命中,则在308处,从L1P 130返回包含期望的预取单元的L1P 130的对应行,并将其作为预取数据包105提供给CPU核心102。然后索引在310处递增(I=I+1)。如果I尚未达到N+1(如在决策操作312处确定的),则尚未评估预取单元的最后VA用于命中/未命中确定,并且控制循环回到306以针对L1P 130中的命中或未命中评估下面第I个预取单元。如果I已达到N+1,则已评估所有N个预取单元,并且相应的程序指令已提供给CPU核心102,并且过程停止。

对于给定的第I个预取单元,如果PMC 120在306处确定L1P 130中存在未命中,则在314处确定I是否已达到N的值。如果I不等于N(指示尚未达到一系列VA中的最后VA),然后在316处,该方法包括存储控制器子系统101从L2存储器高速缓存155(如果存在的话或如果不存在的话从第三级高速缓存或系统存储器)获得程序指令。然后在318处将索引值I递增,并且控制循环回到确定306。

如果在314处,I已经达到N(指示已经到达一系列VA中的最后VA),则在320处,该方法包括确定第I个预取单元的VA是映射到L2存储器高速缓存155的高速缓存行的下半部分还是映射到上半部分。以上描述了如何进行该确定的示例。如果第I个预取单元的VA映射到上半部分,则在322处,该方法包括仅从L2存储器高速缓存的高速缓存行的上半部分获得程序指令。

然而,如果第I个预取单元的VA映射到下半部分,则在324处,该方法包括:将L2存储器高速缓存访问提升为完整的高速缓存行访问,并且在326处,从L2存储器高速缓存的完整的高速缓存行获得程序指令。

返回参考图1,如上所述,在从CPU核心102向VA 103的PMC 120提交之后,CPU核心102还可以向PMC 120提供预取计数104。预取计数可以是0,意味着CPU核心102除了从VA103开始的预取单元中包含的那些指令外,不需要其他任何指令。但是,在接收到VA 103和后续的预取计数之间,PMC 120做了如下所述的一些工作。

在接收到VA 103时,PMC 120在TAGRAM 121中执行查找,以确定(由CPU核心102提供的)第一VA在L1P中是命中还是未命中,并且还使用地址转换器122执行VA到PA的转换。在接收到预取计数104之前,PMC 120还计算第二VA(在CPU核心提供的VA之后的下一个连续VA)。PMC 120推测性地访问TAGRAM 121,并使用地址转换器122来确定第二VA的命中/未命中状态,并用命中/未命中指示124和PA 125填充寄存器123。寄存器123中的有效位126被设置为有效状态,从而允许第二VA的进一步处理,如上所述(例如,如果存在,则从L1P 130检索相应的高速缓存行,或者如果需要,则从L2存储器高速缓存155检索相应的高速缓存行)。

但是,在对第二VA的任何进一步处理发生之前,CPU核心102可能会将预取计数0发送给PMC 120,这意味着CPU核心除了从原始VA 103开始的预取单元之外不需要任何预取单元。此时,向PMC 120提供预取计数0,因此不需要与第二VA相关联的预取单元。但是,PMC也已经确定了第二VA的命中/未命中状态,并已生成了相应的PA。在PMC 120已经接收到零预取计数时,命中/未命中指示符124和PA 125都已存储在寄存器123中。PMC 120将有效位126的状态更改为指示无效状态,从而排除了第二VA的任何进一步处理。该状况(将有效位设置为无效状态)被称为“终止”(kill),因此PMC 120终止第二VA的处理。

然而,在一些情况下,尽管有先前的终止,CPU核心102仍可以确定确实应从L1P130或L2存储器高速缓存155中获得与第二VA相关联的预取单元,如上所述。例如,如果CPU核心102没有进一步的内部预测信息来通知下一个所需的指令地址,则CPU核心102将向PMC120发信号通知它应该从最后所请求的地址开始继续线性地预取。例如,由于CPU核心102中的分支预测逻辑中的错误预测,可能发生这种状况。因此,CPU核心102为此目的向PMC 120发出恢复信号106。PMC 120通过将有效位126变回到有效状态来响应恢复信号,从而允许通过存储器子系统管道对第二VA的继续处理,如上所述。这样,CPU 102不需要将第二VA直接提交给PMC 120。相反,PMC 120将第二VA保留在例如寄存器123及其命中/未命中指示符124中,从而避免了再次确定第二VA的命中/未命中状态并将第二VA转换为PA所花费的功耗和时间。

图4示出了流程图400的示例,该流程图400用于发起、然后终止、再然后恢复存储器地址查找。可以按照所示顺序或以不同顺序执行操作。此外,可以顺序地执行操作,或者可以同时执行两个或更多个操作。

在402处,该方法包括由存储控制器子系统101在第一VA处接收访问请求。在一个实施方式中,该操作由将第一VA提供给PMC 120的CPU核心102执行。在404处,该方法包括确定第一VA在L1P 30中是命中还是未命中。在一个示例中,通过访问PMC的TAGRAM 121来执行该操作,以确定第一VA的命中/未命中状况。通过使用例如地址转换器122,在406处将第一VA转换为第一PA。

在408处,该方法包括基于第一VA来计算第二VA。可以通过将第一VA递增一个值来计算第二VA,以生成在与第一VA相关联的字节之后64字节的字节的地址。在410处,该方法包括确定第二VA在L1P 30中是命中还是未命中。在一个示例中,通过访问PMC的TAGRAM 121来执行该操作,以确定第二VA的命中/未命中状况。如上所述,在412处通过使用地址转换器122将第二VA转换为第二PA。在414处,该方法包括利用命中/未命中指示符124和第二PA来更新寄存器(例如,寄存器123)。此外,有效位126被配置为有效状态。

然后在416处,PMC 120接收预取计数。然后在418处,如果预取计数大于零,则在420处,检索来自L1P 130或L2存储器高速缓存155(或一个或多个附加级别)的程序指令,如上所述。然而,如果预取计数为零,则在422处,有效位126被改变为无效状态。尽管已经向PMC 120提供了零的预取计数,但是CPU核心102然后可以向PMC 120提供恢复指示(424处)。在426处,PMC 120将有效位126改变回有效状态,并且存储控制器子系统101然后适当地从L1P、L2存储器高速缓存等中获得与第二PA相关联的程序指令。

图5示出了本文描述的处理器100的示例使用。在该示例中,处理器100是片上系统(SoC)500的一部分,该片上系统500包括处理器100和一个或多个外围端口或设备。在该示例中,外围设备包括通用异步接收器发送器(UART)502、通用串行总线(USB)端口504和以太网控制器506。SoC 500可以执行各种功能中的任何功能,例如通过由处理器100执行的程序指令实现的。可以提供多于一个的处理器100,并且在给定的处理器100内,可以包括多于一个的CPU核心102。

在本说明书中,术语“耦合”是指间接或直接的有线或无线连接。因此,如果第一设备耦合到第二设备,则该连接可以是通过直接连接或通过经由其他设备和连接的间接连接。另外,在本说明书中,“基于”的表述是指“至少部分基于”。因此,如果X基于Y,则X可能是Y和任何数量的其他因素的函数。

在权利要求的范围内,在所描述的实施例中可以进行修改,而且在其他实施例中也可以。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号