CN103324585B - 分级缓存的处理器中的协作预取处理 - Google Patents
分级缓存的处理器中的协作预取处理 Download PDFInfo
- Publication number
- CN103324585B CN103324585B CN201310088699.7A CN201310088699A CN103324585B CN 103324585 B CN103324585 B CN 103324585B CN 201310088699 A CN201310088699 A CN 201310088699A CN 103324585 B CN103324585 B CN 103324585B
- Authority
- CN
- China
- Prior art keywords
- caching
- fetch unit
- stream
- training
- request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing the number of cache misses; Data prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6024—History based prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6026—Prefetching based on access pattern detection, e.g. stride based prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6028—Prefetching based on hints or prefetch instructions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明涉及分级缓存的处理器中的协作预取处理。涉及用于协调多个缓存等级的预取单元的处理器和方法。在这里使用单个的统一训练装置来训练处理器核心产生的流。预取请求从核心发送到低等级缓存,并且与每一个预取请求一起发送的还有一个数据包。所述数据包标识预取请求的流ID,并且包含特定流ID的相关训练信息。低等级缓存则基于接收到的训练信息来产生预取请求。
Description
技术领域
本发明一般涉及缓存性能,尤其涉及用于在具有多级缓存的处理器中预取数据的方法和装置。
背景技术
在确定所给出的系统中的处理器的性能(例如每秒执行的指令)的过程中,存储器等待时间往往是一个很重要的因素。随着时间的过去,处理器工作频率急剧提升,与此同时,在典型的系统中,用于访问动态随机存取存储器(DRAM)的等待时间却没有以相同速率减小。相应地,访问外部存储器的处理器时钟的数量却有所增加。由此开发了用于补偿速度相对较慢的存储设备的技术。一种技术是将数据缓存在与处理器位置接近的一个或多个缓存中。所述缓存是被引入到处理器中或是耦合在其附近的相对较小的低等待时间存储器。
通常,处理器会使用缓存来应对存储器等待时间对处理器性能的影响。一种用于缓解增长的存储器访问等待时间的方法是将数据预取到缓存中。术语“预取”可以泛指在程序指令实际需要计算数据之前从存储器中取出数据的处理。一种可以有效使用存储器带宽的方法是对不久之后将被访问的信息进行预测,然后将所述信息从存储器系统预取到缓存中。如果预测正确,则所述信息在实际请求时可以是缓存命中(cache hit),由此可以减小用于实际请求的有效存储器等待时间。另一方面,如果预测错误,那么预取信息有可能替换缓存中的有用信息,从而遭遇到比未使用预取处理时更多的缓存未命中(cachemiss),并且由此增加有效存储器等待时间。
某些类型的计算机程序处理其中序列中每个元素都只被访问一次的长数据序列。由于所需要的数据在其被需要时并未处于缓存中,因此所述访问模式往往会导致缓存未命中。这种类型的访问可被称为“数据流”或“流”,其在某些多媒体应用中是非常普遍的。基于流预测来预取数据可有助于防止缓存未命中,并且可以提高处理器效率。
最简单的预取预测类型是单位步长预测(unit stride prediction)。举例来说,训练装置可以检测到对于缓存行L和L+1的访问。由此,训练装置可以检测出步长是1,并且预取单元由此可以开始预取缓存行L+2、L+3......。在其他实施例中,可检测到其他的非单位步长,并且所述步长还有可能是递减地址而不是递增地址。
现代的超级标量处理器使用包含对存储器访问进行重排序的非常积极的推测技术来实现更高的性能。随着来自机器前端的操作的进一步的进行,对存储器访问进行重排序会混淆存储器流中的任何可辨别模式。此外,较低等级的缓存必须应对同时来自多个核心的请求流,而这进一步增大了这些访问模式的熵值。一些程序设计者会使用术语“低级缓存”来指代更接近核心的缓存,而其他程序设计者则会使用该术语来指代离核心较远的缓存。这里使用的术语“低级缓存”指的是离核心较远的缓存(例如L2缓存、L3缓存),而术语“高级缓存”则可以指更接近核心的缓存(例如L1缓存)。
存储器访问到达的存储器越是接近,则与初始顺序相关的存储器访问就越是混乱。结果,由于在机器的每一个等级都会对存储器访问进行重排序,因此更加难以检测到处于低级缓存的连续存储器访问之间的共同步长。由此,处于低级缓存的预取单元必须应对混乱的存储器流,并且往往无法识别这些流的共同模式。而这极大降低了缓存层级中的低等级的预取处理的有效性。
发明内容
设想用于在分级缓存的处理器中执行协作预取的系统、处理器和方法。在一个实施例中,每一个核心都可以使用一个集中式预取训练装置,以便对流进行训练。训练装置产生的训练信息可以用于在缓存层级中的多个等级产生预取请求。处于单独缓存等级的两个或更多预取单元可以使用共享的训练装置获取的信息来协调。在一个实施例中,训练装置可以位于核心的预取单元内部,并且所述预取单元与L1缓存耦合。
在一个实施例中,训练装置可以被配置成同时训练由处理器核心产生的多个流。对于某个指定流,所述训练装置可以监视所述流的存储器访问,并且可以检测所述流的步长。然后,训练装置可以为所述流指定一个标识符(ID),并且可以指示所述流是为预取处理而存在的。在一些实施例中,处理器可以包括多个核心,并且每个核心都可以在其相应的L1预取单元内部保持一个集中式训练装置。低等级的预取单元可以接收来自每一个L1预取单元的训练信息。
在一个实施例中,处理器可以至少包括L1和L2缓存以及L1和L2预取单元。L1预取单元可以向L2缓存发送预取请求,并且所述L1预取单元可以将数据包连同每一个预取请求一起发送。所述数据包可以包括流标识符(ID)以及与预取请求及相应的流相关联的属性。所述属性可以包括步长、页面大小、时间/非时间状态、负载/存储指示符、需求和预取地址以及其他信息。L2预取单元可以使用源自数据包的属性来产生预取请求。此外,L2预取单元还可以使用源自数据包的属性来确定如何处理和存储检索到的预取数据。
在一个实施例中,L1预取单元可以保持具有关于被训练的流的信息的表格。此外,L2预取单元也可以保持具有关于被训练的流的信息的表格。所述L2预取单元保持的表格可以是L1预取单元所用表格的镜像版本。当L2预取单元接收到来自核心的预取请求以及附带的数据包时,来自数据包的属性可被保存在表格的相应条目中。此外,任何附加的低等级缓存(例如L3)也可以保持与高等级缓存的表格同步的表格。
在一个实施例中,对于具有一个核心以及一个L1缓存的处理器来说,L2预取表格可以与一一映射的L1预取表格具有相同大小。在另一个实施例中,对于具有两个核心和两个L1缓存的处理器来说,L2表格可以与L1表格的组合一样大,并且这两个单独的L1表格中的所有条目都可以保存在L2表格中。在其他实施例中,对于附加数量的核心来说,可以调整L2表格的大小以存储来自所有L1表格的所有条目。
鉴于这里给出的方法的后续详细描述,本领域普通技术人员很容易了解这些以及其他特征和优点。
附图说明
通过参考以下结合附图的描述,可以更好地理解这些方法和装置的上述及其他优点,其中:
图1是示出了IC的一部分的一个实施例的框图。
图2是示出了处理器核心的一个实施例的框图。
图3是L1和L2预取单元的一个实施例的框图。
图4示出的是预取训练表格的一个实施例。
图5是单独等级的缓存的预取表格之间的映射的一个实施例的框图。
图6是L2和L3预取单元的一个实施例的框图。
图7是示出了用于产生预取请求的方法的一个实施例的概括性流程图。
图8是系统的一个实施例的框图。
图9是计算机可读介质的一个实施例的框图。
具体实施方式
在以下描述中阐述了很多的具体细节,以便提供关于这里给出的方法和装置的全面理解。然而,本领域技术人员应该认识到,在没有这些具体细节的情况下,不同的实施例同样是可以实施的。在一些实例中,并未显示众所周知的结构、组件、信号、计算机程序指令和技术,以免与这里描述的方法相混淆。应该了解的是,为使例证简单明了,图中显示的部件未必是按比例绘制的。例如,一些部件的尺寸相对于其他部件而言可被夸大。
本说明书包含对于“一个实施例”的引用。在不同上下文中出现的短语“在一个实施例中”未必指的是相同实施例。特定的特征、结构或特性可以采用与本公开相符的任何适当方式组合。此外,本申请中使用的单词“可以”是以一种宽松的意义使用的(也就是指代有可能),而不具有强制意义(也就是指代必须)。同样,单词“包括”、“包含”以及“由......组成”指的是包括但不限于。
术语。以下段落提供可以在本公开(包括附加权利要求)中找到的术语的定义和/或上下文。
“包含”。该术语是开放式的。在附加权利要求中使用的这个术语并未排除附加的结构或步骤。设想这样一个叙述“一种设备,包括预取单元,......”的权利要求。这种权利要求不排除在所述设备中包含附加组件(例如缓存、存储器控制器、总线接口单元)。
“被配置成”。不同的单元、电路或其他组件都可以被描述或请求保护成“被配置成”执行一个或多个任务。在这样的上下文中,“被配置成”可以通过指示所述单元/电路/组件包含在操作过程中执行一个或多个任务的结构(例如电路)而被用于暗示所述结构。就此而论,即便在指定的单元/电路/组件当前未工作的时候(例如没有开启),也可以声称所述单元/电路/组件被配置成执行所述任务。例如,与“被配置成”这种措词一起使用的单元/电路/组件包含硬件——例如电路、用于存储实施操作的可执行程序指令的存储器等等。关于单元/电路/组件“被配置成”执行一个或多个任务的叙述并未明确为该单元/电路/组件援引35U.S.C.112章第六段的规定。此外,“被配置成”还可以包括由软件和/或固件(例如FPGA或执行软件的通用处理器)操作、以便以能够执行所讨论的一个或多个任务的方式工作的通用结构(例如通用电路)。“被配置成”还可以包括将制造过程(例如半导体加工设施)适配成制造那些适于实施或执行一个或多个任务的设备(例如集成电路)。
“基于”。这里使用的这个术语被用于描述影响某个决定的一个或多个因素。所述术语并不排除可能影响该决定的附加因素。换言之,一个决定既有可能仅仅基于这些因素,也有可能至少部分基于这些因素。设想短语“基于B来确定A”。虽然B可以是一个影响关于A的决定的因素,但是该短语并未排除关于A的决定还基于C。在其他实例中,A可以完全是基于B而被决定的。
现在参考图1,示出了集成电路(IC)的一部分的一个实施例的框图。在所示出的实施例中,IC 10包括处理器复合体20、存储器控制器34以及存储器物理接口电路(PHY)36和38。应该指出的是,IC 10还可以包含图1未显示的其他众多组件。在不同的实施例中,IC10也可称为片上系统(SoC)、专用集成电路(ASIC)或设备。
处理器复合体20可以包括中央处理器(CPU)22和26、二级(L2)缓存30以及总线接口单元(BIU)32。在其他实施例中,处理器复合体20可以包括其他数量的CPU。CPU 22和26也可称为处理器或核心。CPU 22和26可以分别包括一级(L1)缓存24和L1缓存28。L1缓存24和28可以与L2缓存30耦合,并且L2缓存30可以与BIU32耦合,所述BIU 32则可以与存储器控制器34耦合。其他实施例可以包括附加等级的缓存(例如三级(L3)缓存)。应该指出的是,处理器复合体20以及CPU 22和26可以包含图1中未显示的其他组件。
CPU 22和26可以包括用于执行在指令集架构中定义的指令的电路。特别地,包含这些指令的一个或多个程序可以由CPU 22和26执行。在不同的实施例中,可以实施任何指令集架构。举例来说,在一个实施例中,可以实施PowerPCTM指令集架构。其他的例示指令集架构可以包括ARMTM指令集、MIPSTM指令集、SPARCTM指令集、x86指令集(也被称为IA-32)、IA-64指令集等等。
在一个实施例中,L2缓存30可以被配置成缓存指令和数据,以便由CPU 22和26执行低等待时间访问。L2缓存30可以包括任何的容量和配置(例如直接映射、组关联)。在一个实施例中,L2缓存30可以被配置成是组关联的写回缓存,其中所述缓存完全包含分别处于CPU 22和26中的L1缓存24和28。在不同的实施例中,L2缓存30可以包括被配置成支持缓存功能和性能的多种结构。例如,L2缓存30可以包括被配置成存储要求错过L2的请求的失效缓冲(missbuffer),被配置成临时存储数据的填充缓冲,被配置成临时存储脏逐出数据以及侦听回写数据(snoop copyback data)的写回缓冲,和/或被配置成存储侦听请求的侦听缓冲。在一些实施例中,L2缓存30可以包括用于管理L2缓存30与BIU 32之间以及L2缓存30与CPU22和26之间的数据流的交叉开关(未显示)。在不同的实施例中,L2缓存30可以通过实施仲裁逻辑而在不同的缓存读写请求者中区分缓存访问的优先级。关于L2缓存30的配置的其他变体同样是可能的,并且是可以考虑的。L2缓存30可以经由BIU 32而与存储器控制器34耦合。所述BIU 32还可以包含其他不同的逻辑结构,以便将CPU 22和26以及L2缓存30耦合至其他不同的设备和部件。
存储器控制器34可以包括任何数量的存储器端口,并且可以包括被配置成与存储器对接的电路。例如,存储器控制器34可以被配置成与动态随机存取存储器(DRAM)对接,其中所述存储器可以是同步DRAM(SDRAM)、双倍数据速率(DDR)SDRAM、DDR2SDRAM、Rambus DRAM(RDRAM)等等。此外,存储器控制器34还可以耦合至存储器物理接口电路(PHY)36和38。存储器PHY36和38代表可以与存储器控制器34耦合的任何数量的存储器PHY。存储器PHY 36和38可以被配置成与存储设备(未显示)对接。
应该指出的是,其他实施例可以包括其他组件组合、包括图1所示的组件和/或其他组件的子集或超集。虽然图1显示了指定组件的一个实例,但是其他实施例可以包括指定组件的两个或更多实例。同样,在本详细描述中,即便在本详细描述中只显示了指定组件的一个实例,也可以包含指定组件的两个或更多实例,和/或即便显示了多个实例,也可以使用只包含一个实例的实施例。
现在转到图2,示出了处理器核心的一个实施例。核心40是处理器核心的一个示例,并且所述核心40可以在处理器复合体内部使用,例如图1的处理器复合体20。在一个实施例中,图1的CPU 22和26中的每一个都可以包括核心40的组件和功能。核心40可以包括取回和解码(FED)单元42、映射和分派单元46、运行单元48、负载/存储单元(LSU)50、存储器管理单元(MMU)60以及核心接口单元(CIF)62。应该指出的是,核心40也可以包含图2未显示的其他组件。
包含L1指令缓存44的FED单元42可以被配置成从存储器(或L2缓存)中取回指令以及解码所取回的指令。经过解码的指令可被传递至映射和分派单元46。所述映射和分派单元46可以被配置成将解码的指令映射到物理寄存器。此外,映射和分派单元46还可以被配置成将指令分派到运行单元48以及LSU 50。所述运行单元48可以包含任意数量和类型的运行单元(例如整数、浮点、矢量)。
CIF 62可以与L1数据缓存52、FED单元42以及MMU 60耦合。所述CIF 62可以被配置成管理核心40与L2缓存之间的接口。MMU60可以被配置成执行地址转换及存储器管理功能。LSU 50可以包括与预取单元54耦合的L1数据缓存52。所述预取单元54可以包括预取训练装置56以及预取训练表格58。此外,LSU50还可以经由CIF62与L2缓存(未显示)耦合。应该指出的是,LSU 50还可以包括图2未显示的其他组件(例如负载队列、存储队列)。
预取单元54可以被配置成产生预取请求,以便将数据预取到L1数据缓存52中。在一个实施例中,预取单元54可以被配置成同时保持多个分离的独立预取流。所述“预取流”可以是由于检测到的预取模式而被预取到缓存中的地址相关联的地址和组块流。预取模式可以描述预取流中的连续存储器访问之间的差别。连续存储器访问之间的这种差别可被称为预取流的“步长”。
训练装置56可以监视通过L1数据缓存52和/或处于核心40中的其他点上的负载/存储业务量。所述训练装置56可以检测负载/存储业务量中的访问模式,并且可以识别出用于预取处理的流。对于每一个单独的流,训练装置56可以检测用于地址递增或地址递减方向上的预取处理的单位步长模式,例如对于存储器中的连续组块的预取。其他实施例可以检测更复杂的预取模式,包括存储器访问之间的非单个固定距离的更大步长及重复模式。
在一个实施例中,由核心40执行的指令可以继续前进,直至所述指令到达运行单元48,这时可以对这些指令进行重排序。但在此时有可能会出现错乱,从而难以对指令流进行训练。训练装置56可以在对指令执行重排序之前在核心40中对指令进行训练。然后,训练信息可被传播至缓存层级中的较低等级。
预取训练装置56可以对核心40产生的流进行训练。所述训练可以包括检测和分析与不同的流相关联的存储器访问,以便确定与存储器访问相关联的信息。在预取训练装置56对某个流进行训练时,它有可能会为所述流指定一个流标识符(ID),并且可以在表格58中和所述流ID一起存储条目。所述条目可以包括与所述流相关联的属性,例如数据的时间性或非时间性、页面大小、存储器访问类型、需求地址、预取地址以及其他信息。
预取单元54可以包括具有多个条目的表格58,以便存储关于多个流的训练信息。所给出的预取流可被指定到表格58的某一个条目,并且可以基于所述条目的内容来为所述预取流执行预取生成处理。例如,预取请求的地址可以与表格条目中的当前地址和/或下一个预期地址相比较。在一个实施例中,预取单元54可以保持表格58中的条目的最近最少使用(LRU)状态,以便进行替换。
一个流可以与一个唯一的流标识符(ID)相关联,并且表格58的每一个条目都可以包括一个流ID以及与所给出的流相关联的属性。所述流ID和属性可从核心向下传播到L2以及更低等级的缓存。当核心40将预取请求外发到L2缓存时,它可以使用(或是结合)所述请求来发送包含流ID以及其他属性的数据。所传递的ID和属性可以采用元组形式或其他形式,并且可以包含在一个或多个相关联的数据包中。这里使用的术语“数据包”旨在方便讨论,其并不限于具有特定的数据大小或配置。相反,这里描述的方法和装置可以采用多种不同的方式来传达“数据包”相关数据。传达训练数据和其他属性可以采用任何形式或格式。
在一个实施例中,元组可以包含预取地址、流ID、步长(例如2行)以及其他属性。当L2缓存和L2预取单元(未显示)接收到所述元组时,L2预取单元可以将该元组的属性保存在L2预取表格(未显示)的相应条目中。然后,L2预取单元可以将新元组与核心发送的最后一个请求相比较,以便确定其领先于L1预取单元取回的地址。如果元组中的流ID是新的流ID,那么L2预取单元可以为这个特定的流ID创建新的条目。
对于缓存层级中的较低等级来说,预取处理可以前向扩展,以使预取处理进一步深入所述流的预测存储器位置。在一个实施例中,每一个流都有可能与一个起始距离相关联。L1预取单元可以在第一预取请求中添加第一起始距离,并且L2预取单元可以在第一起始距离的顶部添加第二起始距离。较低等级的预取单元(例如L3预取单元)可以在预取请求上添加附加距离。在一个实施例中,起始距离可以在每一个预取单元中被本地编程。在其他实施例中,起始距离可以作为属性之一而在元组内部发送。
在一个实施例中,L2预取单元本身未必执行任何训练。L2预取单元可以获取L1预取单元的设置,然后,与L1预取单元相比,L2预取单元可以进一步在所述流中产生更多预取请求。一般来说,L2预取单元可以是L1预取单元的扩展。这种方法可以扩展到第三等级、第四等级等等,其中无论缓存层次等级的数量是多少,都可以只使用单个的统一训练装置。在这样的实施例中,L3预取单元将会从属于更高的两个预取单元。
现在参考图3,示出了L1和L2预取单元的一个实施例的框图。核心72被显示成与L2缓存78耦合,并且核心72可以包含L1预取单元74。应该指出的是,核心72还可以包含在图3中为了清楚起见而未被显示的其他众多组件。L1预取单元74可以包含用于存储与已被训练的流相关联的数据的预取表格76。L2缓存78可以包含L2预取单元80,所述L2预取单元则可以包含预取训练表格82。虽然在图3中并未显示,但是预取请求以及附带的训练数据可以经过L1预取单元74与L2缓存88之间的一个或多个组件(例如MMU,CIF)。
在一个实施例中,核心72可以向L2缓存78发布预取请求。所述预取请求可以包括所要访问的行的存储器地址。此外,训练数据可以与预取请求一起发送。所述训练数据可以标识预取请求的流ID,并且可以包括与特定流ID相关联的其他属性(保存在表格76中)。
响应于接收到预取请求以及训练数据,L2预取单元80可以将训练数据与表格中对应于特定流ID的条目相比较。对于图3所示的示例而言,流ID可以是‘2’,并且L2预取单元80可以在表格82中使用这个流ID来定位相应的条目。L2预取单元80可以检索一个或多个属性(例如步长),并且所述L2预取单元80可以使用这些属性来产生针对存储器(或是更低等级的缓存)的预取请求。实际上,与预取请求一起发送的训练数据可以允许表格78和82的条目同步。
应该理解的是,表格76和82未必包含完全相同的信息,然而表格76和82通常是可以同步的。例如,表格76可以是为特定流ID更新的,并且在为所述特定流ID更新表格82之前有可能会存在一个时滞。此外,表格76和82中的条目的一个或多个字段可以包含不同的信息和/或可以具有不同的格式。例如与最后产生的预取请求相对应的地址字段可以在表格76的条目中包含与表格82的条目相比不同的地址。然而一般来说,表格82中包含的数据可以反映出表格76中的数据,从这个意义上讲,表格82中包含的数据是与表格76中的数据同步的。
在一个实施例中,从核心72发送到L2缓存78的每一个数据包都可以包括一个表明所述流是否是新的流的比特。如果如所述比特所示,所述流是一个新的流,那么L2预取单元80可以在表格82中找出相应条目并清除所述条目。然后,L2预取单元80可以使用该数据包中包含的信息来填充被清除的条目的属性。如果所述流是已有的流,那么该数据包至少可以包含流ID,并且L2预取单元80可以在表格82中检索与这个流ID相对应的相应条目。如果预取请求在L2缓存78中命中,则可以将所述数据返回给核心72,然而如果预取请求落空,则L2缓存78可以从存储器中请求数据。然后,L2预取单元80可以基于表格82的相应条目中存储的属性来产生新的预取请求。对于这个特定的流来说,L2预取单元80发布的新的预取请求可以允许其领先于核心72,由此,以后的请求会在L2缓存78中命中。
在另一个实施例中,L2预取单元80可以假设接收到的每一个数据包以及预取请求都是针对新的流的。由此,在这个实施例中,在L2缓存78每次接收到预取请求的时候都可以更新表格82。举例来说,L2预取单元80可以使用接收到的数据包中的信息来改写表格82的相应条目中的数据。在不同的实施例中,除非预取请求包含与已有的流相同的流信息,否则L2预取单元80可以假设所接收的任何预取请求全都针对的是新的流。
在一个实施例中,数据包可以包含对L2缓存78中的数据布置以及替换规则进行控制的信息。如果某个流具有时间或非时间属性,那么L1预取单元74可以将该信息传达给L2预取单元80。在一个实施例中,L2预取单元80以及更低等级的缓存可以使用所述信息来确定可供缓存保存用于这个特定的流的相应数据的方式。
在一个实施例中,L2缓存78可以使用来自从核心72发送的预取请求和数据包的地址及信息,以便确定L2预取单元80比预取请求包含的地址领先预定数量的行。如果L2预取单元80确定其滞后,那么L2预取单元80可以向前跳转,以便领先于L1预取单元74。所述L2预取单元80可以被配置成在所述流中比L1预取单元74领先某个距离。
现在转到图4,示出了预取训练表格的一个实施例。预取训练表格90可以用于存储与经过训练的不同的流相关联的信息。表格90代表可供整个缓存层级中的任何等级的预取单元使用的表格。表格90中的条目的数量可以依照实施例、表格90所在的缓存层级的等级、同时出现的流的最大数量以及其他信息而改变。在其他实施例中,预取训练表格90可以包括其他信息,和/或在该表格中未必包含表格90中显示的一些属性。作为替换,表格90所示的一个或多个属性可以保存在相应预取单元的其它位置。
表格90的每一个条目都可以包括多个属性。在每一个条目中都可以包含流ID 92,并且可以使用所述流ID 92来识别所述条目。流ID 92可以与核心中的训练装置所训练的相应流ID相对应。步长94可以是为所述流检测到的步长,并且在一个实施例中,所述步长可以是多个行。时间指示符96可以是表明所述流对应的是时间还是非时间数据的比特。L2缓存以及更低等级的缓存可以使用时间指示符96来偏向其LRU装置中的方式选择。此外,时间指示符96的值还可以影响缓存内部的替换规则。
保存在表格90的条目中的另一个属性可以是页面大小属性(例如64KB、128KB、1MB)。在一个实施例中,L2预取单元(以及更低等级的预取单元)可以使用该属性来确定页面边界。在遭遇到页面边界时,L2预取单元可以停止预取处理。所述L2预取单元还可以使用预取计数来确定何时停止预取处理,由此,一旦达到预取计数,则L2预取单元可以停止预取处理,直至其接收到另一个预取请求。预取计数可以是与预取请求所附带的数据包一起接收的属性分开编程或设置的。在一个实施例中,预取计数未必保存在表格90中,但在其他实施例中,预取计数可以保存在表格90中。
在不同的实施例中,不同的预取单元可以使用一种“turbo”模式。在任何缓存等级,如果所给出的流存活并且仍以相同的属性前进,那么可以递增预取计数,以便进一步领先于所给出的流。所给出的流的状态可以由一个单独的计数器来追踪,并且这个单独的计数器可以对从上方到达每一个缓存等级的预取请求的数量进行计数。例如,在L2预取单元中可以计数在L2等级接收的用于特定的流的L1预取请求的数量。如果L1预取请求的数量达到某个阈值,那么L2预取单元可以进入turbo模式,所述模式将会递增预取计数,并且增加L2预取单元在尝试领先于所述流的过程中产生的预取请求的数量。所述阈值是可以编程的,并且是可以随实施例而改变的。同样,L1预取单元可以实现类似的技术,以便基于对在L1缓存等级上针对不同的流接收到的需求请求的数量进行跟踪来应用turbo模式。单独计数器的值既可以保存在表格90中,也可以不保存在表格90中,这取决于实施例。包括上述各项的组合的不同实施例都是可行且可以考虑的。
当较低等级的缓存预取单元到达页面边界时,所述预取单元未必确保物理地址空间中的下一个页面对应的是程序虚拟地址空间中的下一个页面。因此,在一个实施例中,当L2预取单元之类的较低等级的预取单元到达页面边界时,所述L2预取单元可以停在页面边界上。当更高等级的预取单元、即本范例中的L1预取单元穿过页面边界时,它可以向L2预取单元发送具有下一个页面地址的新的预取请求。
表格90的每一个条目还可以包括流类型属性100,以便指示所述流是负载流还是存储流。举例来说,如果所述流是负载流,那么L2预取单元可以检索处于共享状态的数据行。如果所述流是存储流,那么L2预取单元可以在互斥状态中将数据带入核心,以使所述核心可以修改数据。
在一个实施例中,L1预取单元可以将负载流与存储流之间的信息合并到L1预取训练表格的单个条目中。举例来说,如果负载流和存储流全都是以相同的存储器区域为目标的,那么L1预取单元可以将负载流和存储流合并成一个流。由此,L1预取单元可以在L1表格中创建一个流条目,而不是创建两个不同的流条目。举例来说,在一个实施例中,如果首先产生的是负载流,那么L1预取单元会对负载流进行训练,并且会用负载流的属性来填充L1表格中的相应条目。然后,在检测到存储流时,如果L1预取单元确定存储请求与未决的负载请求针对的是相同的地址,那么存储请求可以被合并到负载流中,然后,所述负载流可别转换成存储流。之后,在L1向L2送出相应的预取请求时,附带的数据包可以是与“存储”属性一起送出的,这意味着L2将会负责在互斥状态而不是共享状态中检索数据。
表格90中的每一个条目还可以包括需求地址属性102以及预取地址属性104。当L1接收到需求请求时,它可以将需求请求的地址保存在相应流条目的需求地址102属性中。当L2(或更低等级的)预取单元接收到来自较高等级的缓存的预取请求时,所述L2预取单元可以将该预取请求的地址保存在需求地址102属性中。L1预取单元和更低等级的预取单元可以将正在预取的当前地址保存在相应条目的预取地址104属性中。当L2预取单元接收到预取请求和数据包时,L2预取单元可以将预取请求地址与表格90中为所述特定流ID存储的需求地址102相比较。如果到来的预取请求领先于该条目中存储的物理地址,那么L2预取单元可以使用新地址来改写该条目的需求地址102属性。
在一个实施例中,当L2预取单元接收到预取请求和数据包时,所述L2预取单元可以通过检查来了解该预取请求是否对应于L2表格中的已有条目,如果是的话,则可以将所述预取请求提前。否则,L2预取单元可以刷新来自该表格的旧条目,然后,L2预取单元可以使用预取请求中包含的新数据以及附带的数据包来填充所述条目。
现在参考图5,示出了缓存的单独等级的预取表格之间的映射的一个实施例的框图。在一个实施例中,IC或SoC可以包含两个核心,即核心106和核心108。在其他实施例中,在IC或SoC中可以包含其他数量的核心(例如四个、八个)。表格112和114中的每一个都被显示成包含四个条目。在其他实施例中,表格112和114可以包含其他数量的条目(例如八个、十六个)。在表格112、114和116中可以存储任何数量及类型的属性。例如,表格90(图4)中显示的一个或多个属性可被保存在表格112、114和116中。此外,现在在表格90中显示的其他属性也可以保存在表格112、114和116中。
如所示,L2缓存110的表格116中的前四个条目可以与表格112的条目同步。L2缓存110的表格116的底部的四个条目可以与表格114的条目同步。表格114中的条目可被指定流ID 1-4,并且这些流ID可被映射到表格116中的流ID 5-8。在一个实施例中,在将预取请求和附带数据包从核心发送到L2缓存110时,表格116中的条目可以与表格112和表格114中的条目同步。
表格116可以包括足以存储与L2缓存110相耦合的L1缓存中的所有条目以及作为其镜像的条目。在图5所示的实施例中,表格116包括八个条目。在其他实施例中,表格116可以包括其他数量的条目。举例来说,在具有八个核心并且每一个核心都在核心预取训练表格中存储有用于16个单独流ID的16个条目的处理器中,表格116可以包括用于存储来自所有核心的所有条目的128个条目。与L2缓存相耦合的其他数量的核心也是可能的,并且是可以考虑的。
现在转到图6,示出了L2和L3预取单元的一个实施例的框图。图6示出的是图3所示的框图的延续。L2缓存78可以接收来自核心(例如图3的核心72)的预取请求和训练信息,然后,L2预取单元80可以将训练数据保存在表格82中。L2预取单元80可以基于接收到的预取请求、训练数据和/或表格82中的数据来产生预取请求。L2预取单元80可以将预取请求传达给L3缓存120,并且L2预取单元80还可以产生和传达训练数据以及预取请求。所述训练数据可以包括来自表格82且关于与预取请求相关联的特定流ID的属性。
L3预取单元122可以接收预取请求和训练数据,并且可以将训练数据保存在表格124的相应条目中。通常,L3预取单元122可以响应于接收到预取请求以及附带训练数据而以与L2预取单元80相似的方式运作。所述L3预取单元122可以使用训练数据和/或相应表格124的条目来领先于L2预取单元80产生的预取请求。在一些实施例中,训练信息可以是从核心并行发送到L2缓存78以及L3缓存120的。这样一来,L2表格82以及L3表格124可以用训练信息同时更新。
其他实施例可以包括附加等级的缓存,并且任何低等级的缓存都可以将其预取表格与高等级缓存的表格同步。低等级缓存和预取单元可以采用与高等级缓存及预取单元在接收到预取请求和数据包时的响应相类似的方式来对预取请求和数据包做出响应。此外,低等级预取表格可以包含足以存储高等级预取表格的所有条目的条目。举例来说,如果L3缓存120与L2缓存79以及另一个L2缓存(未显示)相耦合,那么L3预取表格124可以包含与这两个L2预取表格的组合一样多的条目。
现在参考图7,示出了用于在多个缓存等级产生预取请求的方法的一个实施例。出于论述目的,本实施例中的步骤是按顺序显示的。但是应该指出,在以下描述的方法的不同实施例中,所描述的一个或多个要素既可以同时执行,也可以采用与所显示的顺序不同的顺序执行,还可以完全被忽略。此外,根据需要,还可以执行其他的附加要素。
在一个实施例中,与第一缓存等级相耦合的训练装置可以对所给出的流进行训练(方框130)。所述训练装置可以位于处理器核心内部的预取单元中。处理器可以包括多个核心,并且每一个核心可以具有单个训练装置。所述训练装置产生的训练信息可以保存在处于第一缓存等级的第一表格的相应条目中(方框132)。第一表格中的条目可以包括用于所训练的流的流ID。在一个实施例中,第一缓存等级可以是L1缓存,并且第一表格可以保存在与L1缓存相耦合的预取单元中。
接下来,训练信息可从第一缓存等级传递到第二缓存等级(方框134)。在一个实施例中,预取请求可以由处于第一缓存等级的预取单元产生并被发送到第二缓存等级,并且训练信息可被包含在伴随所述预取请求的数据包内部。处于第二缓存等级的预取单元可以接收训练信息(方框136),然后,所述预取单元可以基于接收到的训练信息来发布预取请求(方框138)。处于第二缓存等级的预取单元可以发布比在第一缓存等级发布的预取请求领先某个距离的预取请求。在初始迟滞之后,来自第一缓存等级的预取请求应该开始命中用于所给出的流的第二缓存等级。处于第二缓存等级的预取单元还可以将接收到的训练信息保存在第二表格的相应条目中(方框140)。应该指出的是,依照实施例,方框138和140是可以同时进行的,或者方框140是可以在方框138之前执行的。在一个实施例中,第二缓存等级可以是L2缓存。
在方框140之后,处于第二缓存等级的预取单元可以将训练信息传达都给第三缓存等级(方框142)。在一个实施例中,该训练信息可以包含在伴随发送至第三缓存等级的预取请求的数据包的内部。处于第三缓存等级的预取单元可以接收该训练信息(方框144),然后,处于第三缓存等级的预取单元可以基于接收到的训练信息来发布预取请求(方框146)。此外,接收到的训练信息还可以保存在第三表格的相应条目中(方框148)。在一个实施例中,第三缓存等级可以是L3缓存。在方框148之后,该方法可以返回方框130,以便训练新的流。应该指出的是,可以并行训练多个流,并且多个流在任何指定时间可以处于图7的框图内部的不同点上。其他实施例可以包括其他数量的缓存。一般来说,处于最高缓存等级的训练装置可以与低等级的缓存共享训练信息。
现在转到图8,示出了系统150的一个实施例的框图。如所示,系统150可以代表台式计算机160、膝上型计算机170、平板计算机180、蜂窝电话190或是别的设备的芯片、电路、组件等等。在所示出的实施例中,系统150包括与外部存储器152相耦合的IC 10(图1)的至少一个实例。
IC 10与一个或多个外设154以及外部存储器152相耦合。此外,在这里还提供了为IC 10供应供电电压以及为存储器152和/或外设154供应一个或多个供电电压的电源156。在不同的示例中,电源156可以代表电池(例如智能电话、膝上型或平板计算机的可再充电电池)。在一些实施例中,可以包括IC 10的一个以上的实例(并且可以包含一个以上的外部存储器152)。
存储器152可以是任何类型的存储器,例如动态随机存取存储器(DRAM)、同步DRAM(SDRAM)、双倍数据速率(DDR、DDR2、DDR3等等)SDRAM(包括SDRAM的移动版本,例如mDDR3等等,和/或SDRAM的低功率版本,例如LPDDR2等等)、RAMBUS DRAM(RDRAM)、静态RAM(SRAM)等等。一个或多个存储设备可以与电路板耦合,以便形成存储器模块,所述存储器模块可以是单列直插存储器模块(SMIMM)、双列直插存储器模块(DIMM)等等。作为替换,该设备可以通过采用片中片配置、封装叠加配置或多芯片模块配置与IC固定在一起。
取决于系统150的类型,外设154可以包括任何预期的电路。例如,在一个实施例中,外设154可以包括用于不同类型的无线通信的设备,例如wifi、Bluetooth、蜂窝、全球定位系统等等。外设154还可以包括附加存储器,包括RAM存储器、固态存储器或磁盘存储器。此外,外设154可以包括用户接口设备,例如包括触摸显示屏或多点触摸显示屏的显示屏、键盘或其他输入设备、麦克风、扬声器等等。
现在参考图9,示出了计算机可读介质200的框图的一个实施例,所述计算机可读介质包含代表IC10(图1)中包含的电路的一个或多个数据结构。一般来说,计算机可读介质200可以包括诸如磁性或光学媒体之类的任何非暂时性存储媒体,例如磁盘、CD-ROM或DVD-ROM、诸如RAM(例如SDRAM、RDRAM、SRAM等等)、ROM等易失或非易失性存储媒体,以及可以借助传输媒体或信号访问的媒体,例如借助网络和/或无线链路之类的通信介质传递的电子、电磁或数字信号。
通常,计算机可读介质200上的电路的一个或多个数据结构可以由程序读取,并且可以直接或间接地用于制造包含电路的硬件。举例来说,所述一个或多个数据结构可以包括一个或多个使用Verilog或VHD之类的高级设计语言(HDL)的关于硬件功能的行为级描述或寄存器转送级(RTL)描述。所述一个或多个描述可以由合成工具读取,所述合成工具可以合成这些描述,以便产生包含来自合成库的门电路列表的一个或多个网表(netlist)。所述一个或多个网表包含一组门电路,这些门电路同样代表包含电路的硬件的功能。然后,所述一个或多个网表可被放置并布线,以便产生描述应用于掩模的几何形状的一个或多个数据集。然后,所述掩模可以在不同的半导体制造步骤中使用,以便产生与该电路相对应的一个或多个半导体电路。作为替换,处于计算机可读介质200上的一个或多个数据结构根据需要可以是一个或多个网表(具有或不具有合成库)或是一个或多个数据集。在另一个替换方案中,数据结构可以包含原理程序的输出,或是从中推导的一个或多个网表或数据集合。虽然计算机可读介质200包含关于IC 10的表示,但是其他实施例也可以包含关于IC 10的任何部分或是某些部分的组合的表示(例如处理器复合体20、CPU 22、L2缓存30)。
应该强调的是,上述实施例只是非限制性的实施示例。对本领域技术人员来说,一旦充分了解以上公开,那么众多的变体和修改将会是显而易见的。后续的权利要求应该被解释成包含所有这些变体和修改。
Claims (20)
1.一种处理器,包括:
包含被排列在两个等级中的至少两个缓存的缓存层级;以及
与所述至少两个缓存中的第一缓存相关联的第一预取单元,其中第一预取单元被配置成保持包括多个条目的第一预取表格,其中每个条目包括流标识符(ID)和与相应流相关联的属性;
与所述至少两个缓存中的第二缓存相关联的第二预取单元,第二预取单元与第一预取单元不同,其中第二预取单元被配置成保持带有用于第一预取表格中包括流标识符(ID)和与相应流相关联的属性的每个条目的条目的第二预取表格;以及
与第一缓存相关联的预取训练装置;
其中所述预取训练装置被配置成为多个流中的每一个产生训练信息,其中所述训练信息被用于确定第一预取单元是否要向第一缓存发布针对相应于多个流的数据的预取请求;
其中第一预取单元被配置成将所述训练信息传递到第二预取单元;以及
其中所述第二预取单元被配置成基于存储在第二预取表格中的属性向第二缓存发布针对相应于多个流的数据的预取请求。
2.根据权利要求1所述的处理器,其中所述第二预取单元不执行用于预取的任何训练。
3.根据权利要求1所述的处理器,其中所述训练信息包括被第二缓存用作缓存替换规则的一部分的时间数据。
4.根据权利要求3所述的处理器,其中预取单元被配置成:
基于保存在第一预取表格中的相应条目中的属性来产生用于指定流的预取请求;以及
将预取请求和数据包传递到第二缓存,其中所述数据包包括来自第一预取表格中的相应条目的一个或多个属性。
5.根据权利要求4所述的处理器,其中第二预取单元被进一步配置成:
检测指定流的页面边界;以及
响应于检测到所述页面边界,停止预取。
6.根据权利要求1所述的处理器,其中第二预取表格中的训练信息与第一预取表格中的训练信息同步。
7.根据权利要求1所述的处理器,其中第二预取单元被配置成:计数由第一预取单元发布的预取请求数量;以及
响应于确定所述数量超过阈值,增加由第二预取单元生成的预取请求数量。
8.一种用于在分级缓存的处理器中执行协作预取的设备,包括:
预取训练装置;以及
多个缓存等级;
与所述多个缓存等级中的第一缓存相关联的第一预取单元,其中第一预取单元被配置成保持包括多个条目的第一预取表格,其中每个条目包括流标识符(ID)和与相应流相关联的属性;以及
与所述多个缓存等级中的第二缓存相关联的第二预取单元,第二预取单元与第一预取单元不同,其中第二预取单元被配置成保持带有用于第一预取表格中包括流标识符(ID)和与相应流相关联的属性的每个条目的条目的第二预取表格;以及
其中所述预取训练装置与所述多个缓存等级中的最高缓存等级耦合,并且为多个流产生训练数据,其中所述训练数据被用于确定第一预取单元是否要向第一缓存发布针对相应于所述多个流的数据的预取请求;
其中第一预取单元被配置成将所述训练信息传达到第二预取单元;以及
其中所述第二预取单元被配置成基于存储在第二预取表格中的属性向第二缓存发布针对相应于多个流的数据的预取请求。
9.根据权利要求8所述的设备,第一预取表格中的所述属性包括相应的流是负载流还是存储流的指示。
10.根据权利要求8所述的设备,还包括与最高缓存等级耦合的预取单元,其中所述预取单元被配置成:
基于训练数据产生多个预取请求;
为每一个预取请求产生一个数据包,其中所述数据包包括与预取请求以及相应的流相关联的属性;以及
将预取请求和所述数据包传递给较低等级的缓存。
11.根据权利要求8所述的设备,其中所述训练信息还包括被第二缓存用来在缓存替换规则中偏向方式选择的数据。
12.根据权利要求11所述的设备,其中所述属性还包括相应的流的步长。
13.根据权利要求11所述的设备,其中预取单元被进一步配置成响应于检测到负载流和存储流对相同地址的访问,为所述负载流和存储流指定单个流ID。
14.一种用于在分级缓存的处理器中执行协作预取的方法,包括:
在多个流上生成训练信息,其中训练由在第一缓存等级耦合到第一缓存的预取训练装置执行,其中所述训练信息被用于确定预取请求是否要被相应于所述多个流的第一预取单元向第一缓存发布;以及
将训练信息存储在第一缓存等级的第一表格中,其中第一表格包括多个条目,每个条目包括流标识符(ID)和与相应流相关联的属性;
将训练信息传递给第二缓存等级;
将训练信息存储在第二缓存等级的第二表格中,其中第二表格包括多个条目,每个条目包括流标识符(ID)和与相应流相关联的属性;以及
在所述第二缓存等级耦合到所述第二缓存的不同于第一预取单元的第二预取单元基于存储在第二预取表格中的属性向第二缓存发布针对多个流的预取请求。
15.根据权利要求14所述的方法,其中所述第二预取单元不执行用于预取的任何训练。
16.根据权利要求15所述的方法,其中第二表格与第一表格同步。
17.根据权利要求16所述的方法,还包括:
第二预取单元计数由第一预取单元发布的预取请求数量;以及
响应于确定所述数量超过阈值,增加由第二预取单元生成的预取请求数量。
18.根据权利要求17所述的方法,其中所述训练信息包括被第二缓存用作缓存替换规则的一部分的时间数据。
19.根据权利要求16所述的方法,还包括:将训练信息保存在处于第三缓存等级的第三表格中,其中所述第三表格与第二表格同步。
20.根据权利要求19所述的方法,其中第一缓存等级是一级(L1)缓存,其中第二缓存等级是二级(L2)缓存,以及其中第三缓存等级是三级(L3)缓存。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/425,123 | 2012-03-20 | ||
US13/425,123 US9098418B2 (en) | 2012-03-20 | 2012-03-20 | Coordinated prefetching based on training in hierarchically cached processors |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103324585A CN103324585A (zh) | 2013-09-25 |
CN103324585B true CN103324585B (zh) | 2016-08-10 |
Family
ID=47900909
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310088699.7A Active CN103324585B (zh) | 2012-03-20 | 2013-03-20 | 分级缓存的处理器中的协作预取处理 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9098418B2 (zh) |
EP (1) | EP2642398B1 (zh) |
KR (1) | KR101483849B1 (zh) |
CN (1) | CN103324585B (zh) |
TW (1) | TWI545435B (zh) |
WO (1) | WO2013142148A2 (zh) |
Families Citing this family (51)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150334016A1 (en) * | 2009-11-26 | 2015-11-19 | Nec Corporation | Relay device |
US8966185B2 (en) | 2012-06-14 | 2015-02-24 | International Business Machines Corporation | Cache memory prefetching |
US9424046B2 (en) | 2012-10-11 | 2016-08-23 | Soft Machines Inc. | Systems and methods for load canceling in a processor that is connected to an external interconnect fabric |
US9348754B2 (en) | 2012-10-11 | 2016-05-24 | Soft Machines Inc. | Systems and methods for implementing weak stream software data and instruction prefetching using a hardware data prefetcher |
US9483406B2 (en) * | 2013-03-11 | 2016-11-01 | Via Technologies, Inc. | Communicating prefetchers that throttle one another |
US20150095586A1 (en) * | 2013-09-30 | 2015-04-02 | Advanced Micro Devices , Inc. | Storing non-temporal cache data |
US9569361B2 (en) | 2014-01-10 | 2017-02-14 | Samsung Electronics Co., Ltd. | Pre-fetch chaining |
CN103747105A (zh) * | 2014-01-26 | 2014-04-23 | 深圳市远行科技有限公司 | 一种网络文件的缓存方法及系统 |
US9811467B2 (en) * | 2014-02-03 | 2017-11-07 | Cavium, Inc. | Method and an apparatus for pre-fetching and processing work for procesor cores in a network processor |
US9436786B1 (en) * | 2014-02-12 | 2016-09-06 | Xilinx, Inc. | Method and circuits for superclocking |
CN104809080B (zh) * | 2014-05-27 | 2019-09-17 | 威盛电子股份有限公司 | 相互节流的通信预取器 |
US9612970B2 (en) * | 2014-07-17 | 2017-04-04 | Qualcomm Incorporated | Method and apparatus for flexible cache partitioning by sets and ways into component caches |
US20160041914A1 (en) * | 2014-08-05 | 2016-02-11 | Advanced Micro Devices, Inc. | Cache Bypassing Policy Based on Prefetch Streams |
CN107079044A (zh) * | 2014-09-25 | 2017-08-18 | 交互数字专利控股公司 | 用于内容感知缓存的过程和用于多点协作传输的无线电资源管理 |
US10514920B2 (en) | 2014-10-20 | 2019-12-24 | Via Technologies, Inc. | Dynamically updating hardware prefetch trait to exclusive or shared at program detection |
CN104378420B (zh) * | 2014-11-12 | 2017-12-29 | 东软集团股份有限公司 | 基于环境感知的数据传输方法及装置 |
EP3049915B1 (en) * | 2014-12-14 | 2020-02-12 | VIA Alliance Semiconductor Co., Ltd. | Prefetching with level of aggressiveness based on effectiveness by memory access type |
WO2016097809A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Multiple data prefetchers that defer to one another based on prefetch effectiveness by memory access type |
US9734072B2 (en) * | 2015-03-24 | 2017-08-15 | Macom Connectivity Solutions, Llc | Main memory prefetch operation and multiple prefetch operation |
US9600417B2 (en) * | 2015-04-29 | 2017-03-21 | Google Inc. | Data caching |
US9971694B1 (en) | 2015-06-24 | 2018-05-15 | Apple Inc. | Prefetch circuit for a processor with pointer optimization |
US11169925B2 (en) * | 2015-08-25 | 2021-11-09 | Samsung Electronics Co., Ltd. | Capturing temporal store streams into CPU caches by dynamically varying store streaming thresholds |
US11061853B2 (en) | 2015-12-08 | 2021-07-13 | Via Alliance Semiconductor Co., Ltd. | Processor with memory controller including dynamically programmable functional unit |
US10642617B2 (en) | 2015-12-08 | 2020-05-05 | Via Alliance Semiconductor Co., Ltd. | Processor with an expandable instruction set architecture for dynamically configuring execution resources |
US10268586B2 (en) | 2015-12-08 | 2019-04-23 | Via Alliance Semiconductor Co., Ltd. | Processor with programmable prefetcher operable to generate at least one prefetch address based on load requests |
US9934149B2 (en) | 2016-03-31 | 2018-04-03 | Qualcomm Incorporated | Prefetch mechanism for servicing demand miss |
US10180905B1 (en) | 2016-04-07 | 2019-01-15 | Apple Inc. | Unified prefetch circuit for multi-level caches |
US9904624B1 (en) | 2016-04-07 | 2018-02-27 | Apple Inc. | Prefetch throttling in a multi-core system |
US10013357B2 (en) | 2016-05-09 | 2018-07-03 | Cavium, Inc. | Managing memory access requests with prefetch for streams |
US10452551B2 (en) * | 2016-12-12 | 2019-10-22 | Intel Corporation | Programmable memory prefetcher for prefetching multiple cache lines based on data in a prefetch engine control register |
US9978118B1 (en) * | 2017-01-25 | 2018-05-22 | Microsoft Technology Licensing, Llc | No miss cache structure for real-time image transformations with data compression |
US10242654B2 (en) | 2017-01-25 | 2019-03-26 | Microsoft Technology Licensing, Llc | No miss cache structure for real-time image transformations |
US10331567B1 (en) | 2017-02-17 | 2019-06-25 | Apple Inc. | Prefetch circuit with global quality factor to reduce aggressiveness in low power modes |
US10514753B2 (en) | 2017-03-27 | 2019-12-24 | Microsoft Technology Licensing, Llc | Selectively applying reprojection processing to multi-layer scenes for optimizing late stage reprojection power |
US10410349B2 (en) | 2017-03-27 | 2019-09-10 | Microsoft Technology Licensing, Llc | Selective application of reprojection processing on layer sub-regions for optimizing late stage reprojection power |
US10255891B2 (en) | 2017-04-12 | 2019-04-09 | Microsoft Technology Licensing, Llc | No miss cache structure for real-time image transformations with multiple LSR processing engines |
US10387320B2 (en) | 2017-05-12 | 2019-08-20 | Samsung Electronics Co., Ltd. | Integrated confirmation queues |
US10613983B2 (en) * | 2018-03-20 | 2020-04-07 | Advanced Micro Devices, Inc. | Prefetcher based speculative dynamic random-access memory read request technique |
CN109446111B (zh) * | 2018-10-15 | 2021-01-26 | 上海兆芯集成电路有限公司 | 存储器集成电路及其预取地址决定方法 |
CN110232030B (zh) * | 2019-06-12 | 2021-08-10 | 上海兆芯集成电路有限公司 | 多芯片系统及缓存处理方法 |
US11126556B1 (en) | 2019-07-19 | 2021-09-21 | Marvell Asia Pte, Ltd. | History table management for a correlated prefetcher |
CN110865947B (zh) * | 2019-11-14 | 2022-02-08 | 中国人民解放军国防科技大学 | 一种面向预取数据的高速缓存管理方法 |
CN113128531B (zh) * | 2019-12-30 | 2024-03-26 | 上海商汤智能科技有限公司 | 一种数据处理方法及装置 |
CN113435601A (zh) * | 2020-03-23 | 2021-09-24 | 华为技术有限公司 | 数据预取方法、装置以及存储设备 |
US11442864B2 (en) | 2020-06-29 | 2022-09-13 | Marvell Asia Pte, Ltd. | Managing prefetch requests based on stream information for previously recognized streams |
CN113568848B (zh) * | 2020-07-29 | 2023-07-11 | 华为技术有限公司 | 处理器、信号调整方法及计算机系统 |
KR20220127504A (ko) * | 2021-03-11 | 2022-09-20 | 삼성전자주식회사 | 블록 장치 이미지에 대한 런타임 체크섬 검증을 수행하는 전자 장치 및 이의 동작 방법 |
EP4152174A4 (en) * | 2021-06-23 | 2023-11-29 | Beijing Baidu Netcom Science Technology Co., Ltd. | DATA PROCESSING METHOD AND APPARATUS, AND COMPUTER DEVICE AND MEDIUM |
US11630670B2 (en) | 2021-07-21 | 2023-04-18 | Apple Inc. | Multi-table signature prefetch |
CN114358179B (zh) * | 2021-12-31 | 2024-09-17 | 海光信息技术股份有限公司 | 处理器的预取训练方法、处理装置、处理器和计算设备 |
US11940921B2 (en) * | 2022-01-07 | 2024-03-26 | Centaur Technology, Inc. | Bounding box prefetcher |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1414467A (zh) * | 2002-06-18 | 2003-04-30 | 智慧第一公司 | 选择性执行预取指令的微处理器与方法 |
TW200821925A (en) * | 2006-06-07 | 2008-05-16 | Advanced Micro Devices Inc | Apparatus and method of prefetching data |
TW200901027A (en) * | 2007-03-30 | 2009-01-01 | Intel Corp | Method and apparatus for speculative prefetching in a multi-processor/multi-core message-passing machine |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6381678B2 (en) | 1998-10-30 | 2002-04-30 | Intel Corporation | Processing ordered data requests to a memory |
US6519682B2 (en) | 1998-12-04 | 2003-02-11 | Stmicroelectronics, Inc. | Pipelined non-blocking level two cache system with inherent transaction collision-avoidance |
US6317811B1 (en) | 1999-08-26 | 2001-11-13 | International Business Machines Corporation | Method and system for reissuing load requests in a multi-stream prefetch design |
US6446167B1 (en) * | 1999-11-08 | 2002-09-03 | International Business Machines Corporation | Cache prefetching of L2 and L3 |
US6578130B2 (en) | 2001-10-18 | 2003-06-10 | International Business Machines Corporation | Programmable data prefetch pacing |
US7836259B1 (en) | 2004-04-02 | 2010-11-16 | Advanced Micro Devices, Inc. | Prefetch unit for use with a cache memory subsystem of a cache memory hierarchy |
US8490065B2 (en) * | 2005-10-13 | 2013-07-16 | International Business Machines Corporation | Method and apparatus for software-assisted data cache and prefetch control |
US8255631B2 (en) * | 2008-02-01 | 2012-08-28 | International Business Machines Corporation | Priority-based prefetch requests scheduling and throttling |
US8266393B2 (en) | 2008-06-04 | 2012-09-11 | Microsoft Corporation | Coordination among multiple memory controllers |
US8140769B2 (en) | 2009-04-20 | 2012-03-20 | Oracle America, Inc. | Data prefetcher |
US8667225B2 (en) * | 2009-09-11 | 2014-03-04 | Advanced Micro Devices, Inc. | Store aware prefetching for a datastream |
US8769209B2 (en) * | 2010-12-20 | 2014-07-01 | Intel Corporation | Method and apparatus for achieving non-inclusive cache performance with inclusive caches |
US9026739B2 (en) * | 2012-03-07 | 2015-05-05 | Advanced Micro Devices, Inc. | Multimode prefetcher |
-
2012
- 2012-03-20 US US13/425,123 patent/US9098418B2/en active Active
-
2013
- 2013-03-12 WO PCT/US2013/030497 patent/WO2013142148A2/en active Application Filing
- 2013-03-18 EP EP20130159754 patent/EP2642398B1/en active Active
- 2013-03-19 KR KR20130029235A patent/KR101483849B1/ko active IP Right Grant
- 2013-03-19 TW TW102109728A patent/TWI545435B/zh active
- 2013-03-20 CN CN201310088699.7A patent/CN103324585B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1414467A (zh) * | 2002-06-18 | 2003-04-30 | 智慧第一公司 | 选择性执行预取指令的微处理器与方法 |
TW200821925A (en) * | 2006-06-07 | 2008-05-16 | Advanced Micro Devices Inc | Apparatus and method of prefetching data |
TW200901027A (en) * | 2007-03-30 | 2009-01-01 | Intel Corp | Method and apparatus for speculative prefetching in a multi-processor/multi-core message-passing machine |
Also Published As
Publication number | Publication date |
---|---|
CN103324585A (zh) | 2013-09-25 |
KR101483849B1 (ko) | 2015-01-16 |
TWI545435B (zh) | 2016-08-11 |
KR20130106789A (ko) | 2013-09-30 |
TW201346556A (zh) | 2013-11-16 |
WO2013142148A3 (en) | 2015-07-02 |
EP2642398A1 (en) | 2013-09-25 |
US9098418B2 (en) | 2015-08-04 |
US20130254485A1 (en) | 2013-09-26 |
EP2642398B1 (en) | 2015-05-20 |
WO2013142148A2 (en) | 2013-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103324585B (zh) | 分级缓存的处理器中的协作预取处理 | |
US11803486B2 (en) | Write merging on stores with different privilege levels | |
US10133675B2 (en) | Data processing apparatus, and a method of handling address translation within a data processing apparatus | |
KR101893544B1 (ko) | 물리적 로우에 함께 저장된 태그 및 데이터를 구비한 dram 캐시 | |
US9047198B2 (en) | Prefetching across page boundaries in hierarchically cached processors | |
US8868843B2 (en) | Hardware filter for tracking block presence in large caches | |
US8335908B2 (en) | Data processing apparatus for storing address translations | |
CN111684427A (zh) | 高速缓存控制感知的存储器控制器 | |
US20180336143A1 (en) | Concurrent cache memory access | |
US9058283B2 (en) | Cache arrangement | |
US9229866B2 (en) | Delaying cache data array updates | |
US20110225369A1 (en) | Multiport data cache apparatus and method of controlling the same | |
EP2901287B1 (en) | System cache with sticky removal engine | |
US20060143400A1 (en) | Replacement in non-uniform access cache structure | |
EP2562652B1 (en) | System and method for locking data in a cache memory | |
US11893251B2 (en) | Allocation of a buffer located in system memory into a cache memory | |
US7870342B2 (en) | Line cache controller with lookahead | |
US20150095583A1 (en) | Data processing system with cache linefill buffer and method of operation | |
US9760488B2 (en) | Cache controlling method for memory system and cache system thereof | |
US12032479B2 (en) | Metadata-caching integrated circuit device | |
US9454482B2 (en) | Duplicate tag structure employing single-port tag RAM and dual-port state RAM | |
US20120151150A1 (en) | Cache Line Fetching and Fetch Ahead Control Using Post Modification Information |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |