CN101751246B - 预取数据的系统和方法 - Google Patents
预取数据的系统和方法 Download PDFInfo
- Publication number
- CN101751246B CN101751246B CN200910208364.8A CN200910208364A CN101751246B CN 101751246 B CN101751246 B CN 101751246B CN 200910208364 A CN200910208364 A CN 200910208364A CN 101751246 B CN101751246 B CN 101751246B
- Authority
- CN
- China
- Prior art keywords
- tuple
- prefetch
- instruction
- address
- sequence
- 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
- 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)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
Abstract
本发明涉及一种预取数据的系统和方法。提供了一种与预取高速缓存通信以提高系统性能的预取控制器。在某些实施例中,所述预取控制器可包括指令查找表ILT,其配置为接收包含第一指令ID和第一未命中数据地址的第一元组。所述预取控制器还可包括元组历史队列THQ,其配置为接收指令/步长元组,通过从第一未命中数据地址减去最后数据存取地址生成所述指令/步长元组。所述预取控制器还可包括序列预测表SPT,其与所述元组历史队列和所述指令查找表通信。所述预取控制器还可包括加法器,其与所述指令查找表和所述序列预测表通信并被配置为生成预测的预取地址和将所述预测的预取地址提供给预取高速缓存。许多其他实施例也在本发明的范围之内。
Description
技术领域
本发明涉及一种预取数据的系统和方法。具体地说,本发明提供了一种被配置为动态地学习并在以后预测即将到来的处理器请求的预取控制器。
背景技术
在现有系统中,高速计算机的性能受存储器延迟的限制,因为存储器存取时间远大于处理器周期时间。存储器和处理器延迟以指数速率分化,从而造成了声名狼藉的存储器-处理器差距。这种不断增加的差距已成为潜在的性能瓶颈,严重限制了当前和未来计算机系统中的最大理论性能。另外,当前的主流多核处理器加大了存储器竞争,进一步影响了每个核的实际存储器延迟。
具体而言,诸如多媒体应用和流应用之类的存储器密集型应用倾向于在更大程度上受到不断增加的存储器-处理器性能差距的影响。此类应用通常需要实时或高速计算。
存储器和处理带宽非常类似且相对易于更好地共同成比例增加。例如,现有的多核处理器具有使用通道和存储体的高存储器带宽。对延迟差距的已知解决方案依赖于使用存储器带宽来“隐藏”存储器延迟以及利用局部性原理。
某些解决方案可包括使用高速缓存,或更一般地使用存储器层级结构,来利用指令和数据存取中固有的局部性原理。高速缓存过滤大量存储器存取,从而导致较小的实际存储器延迟。
其他解决方案涉及通过将上下文切换到另一线程来使用硬件多线程隐藏存储器延迟,从而使执行带宽与存储器带宽重叠。这有效减小了存储器延迟对总体系统性能的显著影响。
另一解决方案可包括使用数据预取。在此情况下,可以远在需要数据之前预取数据。一些现有的预取技术可包括依赖于预取数据流(使用固定步长(stride))的硬件方法。实例包括用于预取高速缓存线的“提前一块(one-block-ahead)”以及流缓冲器[Zucker,D.F;Lee,R.B;Flynn,M.J.所著的“HardwareandsoftwarecacheprefetchingtechniquesforMPEGbenchmarks”,CircuitsandSystemsforVideoTechnology,IEEE学报,2000年8月,vol10,no.5,782-796页]。其他预取技术可包括使用步长预测表。一般而言,这指一种硬件方法,其中最后指令及其关联的数据引用地址存储在表中;对同一指令的后续存取将触发预取;当前和最后数据存取地址预测预取地址[Zucker,D.F;Lee,R.B;Flynn,M.J.所著的“HardwareandsoftwarecacheprefetchingtechniquesforMPEGbenchmarks”,CircuitsandSystemsforVideoTechnology,IEEE学报,2000年8月,vol10,no.5,782-796页]。[HOOGERBRUGGEJAN[美国];VANDEWAERDTJAN-WILLEM[美国]的“COUNTERBASEDSTRIDEPREDICTIONFORDATAPREFETCH”,EP1576465(Al)]。另一预取技术可包括模式驱动预取。在此,硬件可检测数据引用序列中的步长模式。所获取的模式可引导下一预取地址[Sbeyti,H.、Niar,S.和Eeckhout,L.所著的“Pattern-drivenprefetchingformultimediaapplicationsonembeddedprocessors”,J.Syst.Archit.,第4期,第52卷,2006年4月。199-212.DOI=http://dx.doi.org/10.1016/j.sysarc.2005.05.002]。其他预取技术可包括使用显式存储器管理。在此技术中,程序设计者通过软件管理存储器,调度数据缓冲器的填充/外溢(例如,CellBE处理器中的DMA传输)。
但是,上述预取技术都不允许通用模式匹配。某些技术仅允许只对一组有限应用有效的简单步长预测。其他技术只能匹配长度很小的序列(例如,最多为3)。因此,需要进一步工作来改进现有的预取技术,使其可应用于更多的应用种类,并且能够使用大量可用带宽(尤其是在多核处理器中)来隐藏存储器延迟。
发明内容
在第一实施方式中,一种系统包括:数据高速缓存,其配置为存储至少一个指令;以及处理器,其在操作上与所述数据高速缓存相连,所述处理器被配置为执行所述至少一个指令。所述系统还可包括:预取控制器,其在操作上与所述数据高速缓存相连,所述预取控制器被配置为接收包括第一指令ID和第一未命中数据地址的第一元组。所述预取控制器还可被配置为检索最后数据存取地址以及从所述第一未命中数据地址减去所述最后数据存取地址以生成指令/步长元组。所述预取控制器还可以被配置为使用所述指令/步长元组来生成预测的预取地址。所述系统还可包括预取高速缓存,其配置为从所述预取控制器接收所述预测的预取地址以及将所述预测的预取地址提供给所述数据高速缓存。
可以包括以下一项或多项特性。在某些实施例中,所述预取控制器可包括被配置为接收和存储所述指令/步长元组的元组历史队列(THQ)。
所述预取控制器还可包括被配置为从所述元组历史队列(THQ)接收当前元组和当前序列中的至少一个的序列预测表(SPT)。
所述预取控制器还可包括被配置为存储针对每个元组所存取的最后数据地址的指令查找表,并且所述指令查找表可与所述序列预测表通信。在某些实施例中,所述序列预测表可被配置为搜索所述当前序列的匹配项。如果找到所述当前序列的匹配项,则所述序列预测表可被配置为递增后续元组计数。可通过每个元组的指令ID来索引所述指令查找表。
在某些实施例中,可通过将具有来自所述序列预测表的步长数据地址的预测的元组与从所述指令查找表获得的最后数据地址相加来生成所述预测的预取地址。
在另一实施方式中,提供了一种预取控制器。所述预取控制器可包括指令查找表(ILT),其配置为接收包括第一指令ID和第一未命中数据地址的第一元组。所述预取控制器还可包括元组历史队列(THQ),其配置为接收指令/步长元组,通过从所述第一未命中数据地址减去最后数据存取地址来生成所述指令/步长元组。所述预取控制器还可包括序列预测表(SPT),其与所述元组历史队列(THQ)和所述指令查找表通信。所述预取控制器可包括加法器,其与所述指令查找表(ILT)和所述序列预测表(SPT)通信,所述加法器被配置为生成预测的预取地址并将所述预测的预取地址提供给预取高速缓存。
在某些实施例中,所述元组历史队列(THQ)可以被配置为接收和存储所述指令/步长元组以及为所述序列预测表(SPT)提供存取。所述序列预测表(SPT)可被配置为从所述元组历史队列(THQ)接收当前元组和当前序列中的至少一个。所述指令查找表可被配置为存储针对每个元组所存取的最后数据地址,并且所述指令查找表可与所述序列预测表通信。可通过每个元组的指令ID来索引所述指令查找表。
在某些实施例中,所述序列预测表还可被配置为搜索所述当前序列的匹配项以及在找到所述当前序列的所述匹配项时递增后续元组计数。
在某些实施例中,可通过将具有来自所述序列预测表的步长数据地址的预测的元组与从所述指令查找表获得的最后数据地址相加来生成所述预测的预取地址。
在另一实施方式中,包括一种预取数据的方法。所述方法可包括从数据高速缓存接收第一元组,所述第一元组包括指令查找表(ILT)处的第一指令ID和第一未命中数据地址。所述方法还可包括通过从所述第一未命中数据地址减去最后数据存取地址来生成指令/步长元组。所述方法还可包括接收元组历史队列(THQ)处的指令/步长元组并将来自所述元组历史队列的至少一个元组与序列预测表(SPT)中包括的信息相比较。所述方法还可包括生成预测的预取地址并将所述预测的预取地址提供给预取高速缓存。
在所述方法的某些实施例中,所述序列预测表(SPT)可被配置为从所述元组历史队列(THQ)接收当前元组和当前序列中的至少一个。所述序列预测表还可被配置为在找到所述当前序列的匹配项时递增后续元组计数。所述方法还可包括通过将具有来自所述序列预测表的步长数据地址的预测的元组与从所述指令查找表获得的最后数据地址相加来生成所述预测的预取地址。
下面的附图和说明列出了一个或多个实施方式的详细描述。从说明、附图和权利要求,其他特性和优点将变得显而易见。
附图说明
图1是根据本发明的实施例的系统的方块图;
图2是示出根据本发明的实施例的序列预测表的示意图;
图3是示出根据本发明的实施例的预取控制器的学习阶段的流程图;
图4是示出根据本发明的实施例的预取控制器的预测阶段的流程图;
图5是示出与本发明的某些实施例中描述的预取关联的可能执行和延迟时间的示意图;
图6是示出根据本发明的实施例的关联搜索方法的示意图;以及
图7是示出根据本发明的实施例的序列预测表的两路集合关联组织的示意图。
具体实施方式
一般而言,本发明涉及学习系统行为并预测未来处理器请求的系统和方法。更具体地说,本发明描述了如何将特定数据存取建模为具有指令地址及其当前数据步长的元组。这样,可以将此处所述的动态数据存取序列建模为一系列指令/步长元组。这些序列可用于记录元组中的转变计数。如下文进一步所述,然后可以在给出最后“n”个元组的历史的情况下,通过选择最可能出现的元组来预测未来的请求。
此处所用的术语“元组”可以指“值序列”。在某些实施例中,元组可以是一系列长度为2的值(例如,指令地址和数据步长)。
现在参考图1,其中示出了根据本发明的预取系统10。系统10包括,除其他组件外,处理器102、L1数据高速缓存104和存储器106。处理器102可被配置为执行指令和根据需要存取LI数据高速缓存104和/或存储器106。
处理器102可以包括任意种类的处理器,包括但不限于具有多个核心的处理器,例如双核处理器。但是,提供该处理器仅作为示例,此处所述的工作电路可以在其他处理器设计和/或其他多线程集成电路中使用。
L1数据高速缓存104和存储器106可包括以下一类或多类存储器:半导体固件存储器、可编程存储器、非易失性存储器、只读存储器、电可编程存储器、随机存取存储器、闪存(可以包括,例如,NAND或NOR类型的存储结构)、磁盘存储器和/或光盘存储器。附加地或备选地,存储器可包括其他和/或未来开发的计算机可读存储器类型。当然,许多其他存储器类型也在本发明的范围之内。
系统10还可包括预取控制器108和预取高速缓存110。为实现本发明的目的,预取控制器108和预取高速缓存110统称为预取系统112。预取系统112可被配置为动态地学习并在以后预测来自处理器102的下一请求。
在某些实施例中,预取控制器108可包括指令查找表(ILT)114、元组历史队列(THQ)116和序列预测表(SPT)118。预取控制器可包括各种附加组件,其中包括但不限于加法器120和减法器122。
在运行中,系统10可根据处理器102所需的信息是否位于L1数据高速缓存104中来执行各种不同的操作。例如,如果不存在L1数据高速缓存未命中,系统10将在不使用预取控制器108和/或预取高速缓存110的情况下运行。但是,如果发生数据高速缓存未命中,则L1数据高速缓存104可在预取高速缓存110中查找未命中的数据。如果数据位于预取高速缓存110中,则其被提供给L1数据高速缓存104,后者又将所请求的信息提供给处理器102。这可显著减低任何关联的L1数据高速缓存未命中损失。如果数据不在预取高速缓存110中,则继续正常的L1数据高速缓存未命中周期,并且不向预取高速缓存提供未命中的数据。
因此,可由L1数据高速缓存未命中触发预取控制器108的激活。即使L1未命中已命中预取高速缓存110,也将触发该激活。所以,可将预取子系统112配置为在不更改数据高速缓存行为的情况下学习并预测正常的L1数据高速缓存未命中。
一旦被激活,预取控制器108就可被配置为沿预取高速缓存总线124窥探来自L1数据高速缓存104的未命中数据地址。另外,预取控制器108还可被配置为窥探对此未命中负责的指令ID(或地址)。应指出的是,在现有系统中,指令ID不能包括在从处理器到存储器的总线内。但是,根据本发明,预取控制器108可与处理器102以及L1数据高速缓存104高度耦合。这样,可通过修改处理器-L1高速缓存总线来容易地提供此类信息。在某些实施例中,系统10可包括被配置为提供与各种不同总线体系结构的兼容性的总线电路,所述总线体系结构包括但不限于通用串行总线(USB)、串行高级技术附件(SATA)、外围组件接口(PCI)、PCI-Express以及系统管理总线(SMBus)。
通过上述窥探操作获取的第一元组126的收集的指令ID125然后被提供给指令查找表(ILT)114以获取指令的最后数据存取地址128。指令查找表114可以此方式操作来记录针对所见的每个元组存取的最后数据地址。在某些实施例中,可根据指令ID索引指令查找表114,但是,也可以使用许多其他索引方法。此时,可使用当前数据地址127更新查找的表项。通过使用减法器122从当前数据地址127减去最后数据存取地址128来得到步长。此处定义的术语“步长”可指两个数据地址间的相对差距。计算出的步长然后可用于生成指令/步长元组130,后者在此被称为“当前元组”。
预取子系统112现在可继续两个阶段,即未命中学习阶段和未命中预测阶段。系统10在这两个阶段中可使用大量不同的组件,例如元组历史队列(THQ)116和序列预测表(SPT)118。在某些实施例中,元组历史队列116可被配置为保存最后“n”个所见的元组。为了实现本发明的目的,这些元组被称为“序列”。所述序列与指令/步长元组130耦合;指令/步长元组130可被视为在出现最后“n”个元组(序列)时将发生的“后续”元组。此类条件频率由序列预测表118记录。
现在参考图2,其中更详细地示出了序列预测表118的一个实施例。序列预测表118可包含多个表项,其中每个表项都保存一个序列和一个指向后续元组的指针。后续元组的数目是一个参数(合理值为2)。每个后续元组都保存计数字段,记录在运行时元组跟随序列的次数。
现在参考图3,其中示出了有关预取控制器108的学习阶段的操作。如此处使用的,术语“学习”可以指“动态地更新的学习”这一概念。可以动态地使用此类渐进的学习,直到达到饱和点。也就是说,一旦获取足够的信息,便可停用此学习阶段。此时,只需将在下面参考图4介绍的预测阶段。
如上所述,预取控制器108能够在学习阶段获取有关系统10操作的信息。在学习阶段,可在序列预测表118中记录序列与指令/步长元组130的关联(并且对其计数)。来自元组历史队列116的指令/步长元组130和序列可被提供给序列预测表118(202)。此时,可在序列预测表118中搜索与输入序列匹配的表项。如果未找到表项(204),则创建包含输入序列的新表项,并创建一个后续元组(计数=1)(208)。然后以先进/先出(FIFO)方式将该表项插入序列预测表118(206)。如果找到表项(212),则递增相应的后续元组计数(214)。如果后续元组不存在,则可创建计数为1的新元组(216、218)。如果超过最大后续元组数,则可丢弃一个元组,例如计数值最低的元组。
现在参考图4,预取控制器108能够在预测阶段预测来自处理器102的未来请求,将在下文进一步详细描述此过程。在预测阶段,预取控制器108可被配置为更新元组历史队列116,即,将当前元组排队到元组历史队列116中,同时移除最早的元组(302)。然后在序列预测表118中搜索新的序列(304)。如果表项匹配(306),则返回相应的具有最高计数的后续元组(308)。为了实现本发明的目的,返回的元组被称为“预测的元组”。
预取控制器108然后将预测的元组的步长数据地址转换为绝对地址。此转换可通过以下方式实现:在指令查找表(ILT)114中查找元组的指令ID(310),获取最后数据地址(用于该指令)(314),最后使用加法器120将其与元组的步长相加(316)。预测的预取地址然后可被发送到预取高速缓存110(318)。此时,L1数据高速缓存104能够从预取高速缓存110获取数据。
在某些实施例中,预取高速缓存110可将预取请求视为正常的高速缓存读取请求并且不返回数据。如果数据未命中,则可继续预取高速缓存填充循环。备选地,如果数据命中,则不执行任何预取。预取子系统112可用于降低L1数据高速缓存104的写入未命中损失。在某些实施例中,写入未命中一般包括(取决于L1高速缓存写入策略)从存储器106取回未命中的高速缓存线。预取子系统112可观察读取操作并学习存取行为。在后续的写入未命中时,预取高速缓存110将保留未命中的块,及时将其提供给L1数据高速缓存104,从而避免任何可能的存储器存取损失。
在某些实施例中,序列预测表(SPT)118可使用各种不同的搜索方法,因此,可以根据本发明使用任何搜索方法。能够支持一组速度约束的搜索方法具有特殊的益处。图5A-5C列出了各种预取操作的执行时间。
现在参考图5A,提供了示出两个连续的L1数据高速缓存未命中之间的执行时间的示意图。在该实例中,当出现未命中时,处理器平均会停止TL个周期来等待存储器106,然后执行TE个周期。如图5B所示,完美的预取则会消除TL,其方式为:从预取高速缓存110提供未命中的数据并预取下一次未命中。但是,预取的数据需要在下一次未命中之前到达预取高速缓存110。因此,如果搜索时间为To,则:
2To+TL<TE(等式1)
其中,To为开销时间,TL为延迟时间,并且TE为执行时间。在此,需要2To,因为可针对每个未命中执行两次搜索。一次搜索用于学习,另一次搜索用于预测。2To之后,用于下一未命中的预取地址可准备就绪。当发出预取时,存储器可在TL周期之后做出响应。
这样,TE时间(以周期表示)可表示为:
TE=CPI无未命中x未命中之间的平均指令数(等式2)
其中,CPI无未命中是假设没有高速缓存未命中时每个指令的平均周期数。将观察到:
(等式3)
并且:
未命中数=指令总数x存储器存取指令比率x高速缓存未命中率
(等式4)
因此,
(等式5)
因此需要:
(等式6)
例如,如果存储器存取指令比率和未命中率分别为0.5和0.01,存储器延迟为100个周期并且CPI无未命中为1,则对于最佳加速,To应该小于50个周期。要指出的是,将To设为大于50个周期仍可提高性能(但不是最佳),前提是整体预取过程所需的时间小于不执行预取的情况下下一未命中到达的时间,换言之:
2To+TL<TE+TL(等式7)
这意味着:
即
(等式9)
图5C是示出发生高速缓存未命中时的计时行为的实例。在该实例中,处理器可平均停止感知的延迟(TPL),从而允许较早调度的预取数据到达。
更概括地说,预取系统的加速可设为:
(等式10)
其中,不使用预取时未命中之间的时间=TE+TL
如果预取很完美,则使用预取时未命中之间的时间=TE,并且存储器延迟可被完全隐藏。但是,如果预取不完美,则使用预取时未命中之间的时间=2To+TL。因此:
使用预取时未命中之间的时间=max(TE,2To+TL)(等式11)
因此,通过以下公式计算整体加速:
(等式12)
在某些实施例中,不是只预取预测的元组,而是还可取回两个最热门的元组(即,具有最高计数值的元组)。对于每个最热门的元组,取回它们之后的两个最热门的元组。这可显著提高性能。使用此方法的实验结果显示,速度增加了177%。这假设存储器延迟为100个周期,具有完全关联的序列预测表搜索,并且L1数据高速缓存未命中减少达99%。
在某些实施例中,可使用序列预测表的备选搜索实施方式。例如,可使用组关联技术,诸如高速缓存硬件实施方式中使用的技术。该特定实施例可使用按照类似于传统的两路组关联高速缓存的方式组织的序列预测表。参见JohnL.Hennessy、DavidPatterson所著的“ComputerOrganizationandDesign:TheHardware/SoftwareInterface”,第3版,MorganKaufmann,2007。高速缓存可分两步执行搜索:将所查找的序列直接映射到相应的组,以及搜索该特定组中的所有表项,与所查找的序列进行匹配(关联搜索)。
可根据本发明通过定义元组的索引来实现此操作。对于所查找序列的最早元组;可以将元组的指令地址与元组步长的最低有效位连接在一起。此类映射布置可在高速缓存组上产生统一映射。可按照类似于组关联高速缓存步骤的方式执行关联搜索步骤。
现在参考图6,其中更详细地示出了这些操作。操作可包括定义:Inst=最早的所查找序列对的指令地址,以及Stride=最早的所查找序列对的步长值(502)。操作还可包括定义:Index=inst*步长大小+(步长mod步长大小),以及Index=IndexmodSPT表项数(504)。操作还可包括,在每路内部,组编号等于索引,以及判定当前路的序列是否等于所查找序列(506、508)。如果是,则可在SPT中在当前序列处找到序列(510)。如果否,则可获取下一序列(512),确定序列的位置(514)。实验结果显示,整体加速达到133%(假设存储器延迟为100个周期),并且对于两路实施方式,未命中减少达97%。
现在参考图7,示出了SPT118的两路组织的一个可能实施例。在该实施例中,当前元组可用于构建索引(组编号)。然后这可用于单独地索引每路SPT。指令地址和步长的较低位602可分别被插入SPT路1604和SPT路2606。可以将每个SPT的相应表项与元组历史队列116中包含的表项相比较608。然后可以如上所述使用匹配的表项610。此方法可节省搜索时间并提高系统10的整体速度。
例如,假设THQ116包含以下序列:
(100,3)(130,0)(150,1)(100,2)
假设具有两路SPT表。并且假设步长大小=32,以及SPT表项数=1024。为了查找上述序列,将定义:
1.inst=100
2.stride=3mod32=3
3.index=100*32+3=3203
4.index=3203mod1024=131
现在,假设在表项131处,在所述两路具有以下两个序列:
1:(4,3)(10,0)(40,2)(6,1)
2:(100,3)(130,0)(150,1)(100,2)
可以将第一序列与所查找的序列相比较,即,序列(4,3)(10,0)(40,2)(6,1)是否等于(100,3)(130,0)(150,1)(100,2)?如果答案为否,则比较下一序列。因此,比较序列(100,3)(130,0)(150,1)(100,2)是否等于(100,3)(130,0)(150,1)(100,2)。答案为是,所以搜索成功。
在某些实施例中,预取控制器108能够反转学习阶段和预测阶段的顺序。在该实施例中,预取控制器108可执行预测阶段并将预测的数据地址发送到预取高速缓存110,后者可以以与预取控制器108异步的方式继续执行学习阶段。
由于上述每个阶段都执行SPT搜索作为其主要操作,因此,这种重新排序可以减少一半的搜索开销(即,执行一次搜索而非两次搜索)。当存储器延迟时间(TL)大于搜索时间(To)时(由于不断增加的存储器/处理器延迟差距,经常出现这种情况),便可实现这种改进。
如本文描述的任意实施例中所用的,“电路”可以包括,例如,以单独或任何组合方式出现的硬连线电路、可编程电路、状态机电路和/或存储由可编程电路执行的指令的固件。在最初就应理解,此处任意实施例中描述的任何操作和/或操作组件都可在软件、固件、硬连线电路和/或它们的任意组合中实现。
上述方法的实施例可以在存储于存储介质上的计算机程序中实现,所述存储介质具有将系统编程为执行所述方法的指令。所述存储介质包括但不限于包括软盘、光盘、光盘-只读存储器(CD-ROM)、可重写光盘(CR-RW)以及磁光盘在内的任意类型的盘,诸如只读存储器(ROM)、包括动态和静态RAM在内的随机存取存储器(RAM)、可擦写可编程只读存储器(EPROM)、电可擦写可编程只读存储器(EEPROM)之类的半导体器件,闪存、磁卡或光卡,或任意类型的适于存储电子指令的介质。其他实施例可被实现为由可编程控制装置执行的软件模块。
较之现有方法,本发明可提供多种优点。例如,此处所述的系统和方法可用于将指令与数据步长关联,并且可提供维护最后“n”个元组的历史以允许更精确地预测未来的数据引用的能力。通过这种方式,此关联可过滤来自其他指令的不规则连续引用,并且基本上将控制流与数据预测耦合在一起。此外,此处所述的实施例提供了较低的维护开销。换言之,本发明可记录步长而非绝对数据地址,这会显著减少要记录的转变计数的数目。此外,本发明依赖于学习“通用”未命中模式的新颖而健壮的学习模型。实验结果显示,此处所述的实施例可用于消除各种应用踪迹的近97%的未命中,从而导致速度增加达177%。本发明不更改原始系统的未命中行为,这可允许静态未命中学习。
应指出的是,预取子系统112可在硬件或软件中实现。例如,可在具有软件管理的高速缓存的系统中使用本发明。尽管本发明在应用中具有通用性,但是其可特别适合于多核处理器,这是由于后者具有大量片上和片外带宽。此类配置可有效地转换为较大预取带宽,从而进一步隐藏存储器存取延迟。
已描述了多种实施方式。然而,将理解可以做出各种修改。因此,其他实施方式也在以下权利要求的范围之内。
Claims (16)
1.一种用于数据预取的系统,包括:
数据高速缓存,其配置为存储至少一个指令;
处理器,其在操作上与所述数据高速缓存相连,所述处理器被配置为执行所述至少一个指令;
预取控制器,其在操作上与所述数据高速缓存相连,所述预取控制器被配置为接收包括第一指令ID和第一未命中数据地址的第一元组,所述预取控制器还被配置为检索最后数据存取地址以及从所述第一未命中数据地址减去所述最后数据存取地址以生成指令/步长元组,所述预取控制器被配置为使用所述指令/步长元组来生成预测的预取地址;以及
预取高速缓存,其配置为从所述预取控制器接收所述预测的预取地址以及将所述预测的预取地址提供给所述数据高速缓存。
2.如权利要求1中所述的系统,其中所述预取控制器还包括被配置为接收和存储所述指令/步长元组的元组历史队列THQ。
3.如权利要求2中所述的系统,其中所述预取控制器还包括被配置为从所述元组历史队列THQ接收当前元组和当前序列中的至少一个的序列预测表SPT。
4.如权利要求3中所述的系统,其中所述预取控制器还包括被配置为存储针对每个元组所存取的最后数据地址的指令查找表,所述指令查找表与所述序列预测表通信。
5.如权利要求4中所述的系统,其中所述序列预测表还被配置为搜索所述当前序列的匹配项。
6.如权利要求5中所述的系统,其中所述序列预测表还被配置为在找到所述当前序列的所述匹配项时递增后续元组计数。
7.如权利要求6中所述的系统,其中通过将具有来自所述序列预测表的步长数据地址的预测的元组与从所述指令查找表获得的最后数据地址相加来生成所述预测的预取地址。
8.如权利要求4中所述的系统,其中通过每个元组的指令ID来索引所述指令查找表。
9.一种预取数据的系统,包括:
一装置,被配置为从数据高速缓存接收第一元组,所述第一元组包括指令查找表ILT处的第一指令ID和第一未命中数据地址;
一装置,被配置为通过从所述第一未命中数据地址减去最后数据存取地址来生成指令/步长元组;
一装置,被配置为接收元组历史队列THQ处的所述指令/步长元组;
一装置,被配置为将来自所述元组历史队列的至少一个元组与序列预测表SPT中包括的信息相比较;以及
一装置,被配置为生成预测的预取地址并将所述预测的预取地址提供给预取高速缓存。
10.如权利要求9中所述的系统,其中所述序列预测表SPT被配置为从所述元组历史队列THQ接收当前元组和当前序列中的至少一个。
11.如权利要求10中所述的系统,其中所述序列预测表还被配置为在找到所述当前序列的匹配项时递增后续元组计数。
12.如权利要求11中所述的系统,其中被配置为生成预测的预取地址并将所述预测的预取地址提供给预取高速缓存的装置被进一步配置为:通过将具有来自所述序列预测表的步长数据地址的预测的元组与从所述指令查找表获得的最后数据地址相加来生成所述预测的预取地址。
13.一种预取数据的方法,包括:
从数据高速缓存接收第一元组,所述第一元组包括指令查找表ILT处的第一指令ID和第一未命中数据地址;
通过从所述第一未命中数据地址减去最后数据存取地址来生成指令/步长元组;
接收元组历史队列THQ处的所述指令/步长元组;
将来自所述元组历史队列的至少一个元组与序列预测表SPT中包括的信息相比较;以及
生成预测的预取地址并将所述预测的预取地址提供给预取高速缓存。
14.如权利要求13中所述的方法,其中所述序列预测表SPT被配置为从所述元组历史队列THQ接收当前元组和当前序列中的至少一个。
15.如权利要求14中所述的方法,其中所述序列预测表还被配置为在找到所述当前序列的匹配项时递增后续元组计数。
16.如权利要求15中所述的方法,其中通过将具有来自所述序列预测表的步长数据地址的预测的元组与从所述指令查找表获得的最后数据地址相加来生成所述预测的预取地址。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/335,077 | 2008-12-15 | ||
US12/335,077 US9274965B2 (en) | 2008-12-15 | 2008-12-15 | Prefetching data |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101751246A CN101751246A (zh) | 2010-06-23 |
CN101751246B true CN101751246B (zh) | 2015-12-09 |
Family
ID=42241953
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910208364.8A Active CN101751246B (zh) | 2008-12-15 | 2009-11-12 | 预取数据的系统和方法 |
Country Status (3)
Country | Link |
---|---|
US (2) | US9274965B2 (zh) |
CN (1) | CN101751246B (zh) |
TW (1) | TWI453663B (zh) |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9274965B2 (en) | 2008-12-15 | 2016-03-01 | International Business Machines Corporation | Prefetching data |
AU2010201718B2 (en) * | 2010-04-29 | 2012-08-23 | Canon Kabushiki Kaisha | Method, system and apparatus for identifying a cache line |
US8856452B2 (en) * | 2011-05-31 | 2014-10-07 | Illinois Institute Of Technology | Timing-aware data prefetching for microprocessors |
US8949522B1 (en) * | 2011-06-21 | 2015-02-03 | Netlogic Microsystems, Inc. | Performance of a stride-based prefetcher on an out-of-order processing unit (CPU) |
JP2013008094A (ja) * | 2011-06-22 | 2013-01-10 | Sony Corp | メモリ管理装置、メモリ管理方法、制御プログラム、および、記録媒体 |
US9110810B2 (en) * | 2011-12-06 | 2015-08-18 | Nvidia Corporation | Multi-level instruction cache prefetching |
CN102662862B (zh) * | 2012-03-22 | 2015-01-21 | 北京北大众志微系统科技有限责任公司 | 实现混合预取的方法及相应的装置 |
US9032159B2 (en) * | 2012-06-27 | 2015-05-12 | Via Technologies, Inc. | Data prefetcher with complex stride predictor |
US10137376B2 (en) * | 2012-12-31 | 2018-11-27 | Activision Publishing, Inc. | System and method for creating and streaming augmented game sessions |
US9235511B2 (en) * | 2013-05-01 | 2016-01-12 | Globalfoundries Inc. | Software performance by identifying and pre-loading data pages |
US20160054997A1 (en) * | 2014-08-22 | 2016-02-25 | Samsung Electronics Co., Ltd. | Computing system with stride prefetch mechanism and method of operation thereof |
CN105512024B (zh) * | 2014-09-30 | 2018-03-23 | 龙芯中科技术有限公司 | 生成检测指令序列的方法和装置 |
US11351466B2 (en) | 2014-12-05 | 2022-06-07 | Activision Publishing, Ing. | System and method for customizing a replay of one or more game events in a video game |
CN104657298A (zh) * | 2015-02-11 | 2015-05-27 | 昆腾微电子股份有限公司 | 读控制装置和方法 |
US10232272B2 (en) | 2015-10-21 | 2019-03-19 | Activision Publishing, Inc. | System and method for replaying video game streams |
US10376781B2 (en) | 2015-10-21 | 2019-08-13 | Activision Publishing, Inc. | System and method of generating and distributing video game streams |
US9747189B2 (en) | 2015-11-12 | 2017-08-29 | International Business Machines Corporation | Breakpoint for predicted tuple processing time in a streaming environment |
US10226703B2 (en) | 2016-04-01 | 2019-03-12 | Activision Publishing, Inc. | System and method of generating and providing interactive annotation items based on triggering events in a video game |
CN105955709B (zh) * | 2016-04-16 | 2018-02-27 | 浙江大学 | 基于机器学习的预取能效优化自适应装置及方法 |
CN106021128B (zh) * | 2016-05-31 | 2018-10-30 | 东南大学—无锡集成电路技术研究所 | 一种基于步幅和数据相关性的数据预取器及其预取方法 |
US20180052779A1 (en) * | 2016-08-19 | 2018-02-22 | Advanced Micro Devices, Inc. | Data cache region prefetcher |
US10229060B2 (en) * | 2016-12-05 | 2019-03-12 | Intel Corporation | Instruction and logic for software hints to improve hardware prefetcher effectiveness |
US10713053B2 (en) * | 2018-04-06 | 2020-07-14 | Intel Corporation | Adaptive spatial access prefetcher apparatus and method |
US10754578B2 (en) | 2018-05-09 | 2020-08-25 | Micron Technology, Inc. | Memory buffer management and bypass |
US11010092B2 (en) | 2018-05-09 | 2021-05-18 | Micron Technology, Inc. | Prefetch signaling in memory system or sub-system |
US10942854B2 (en) | 2018-05-09 | 2021-03-09 | Micron Technology, Inc. | Prefetch management for memory |
US10714159B2 (en) | 2018-05-09 | 2020-07-14 | Micron Technology, Inc. | Indication in memory system or sub-system of latency associated with performing an access command |
CN110765034B (zh) * | 2018-07-27 | 2022-06-14 | 华为技术有限公司 | 一种数据预取方法及终端设备 |
CN109408412B (zh) * | 2018-10-24 | 2021-04-30 | 龙芯中科技术股份有限公司 | 内存预取控制方法、装置及设备 |
US10915451B2 (en) | 2019-05-10 | 2021-02-09 | Samsung Electronics Co., Ltd. | Bandwidth boosted stacked memory |
CN110427332B (zh) * | 2019-08-05 | 2021-08-20 | 上海兆芯集成电路有限公司 | 数据预取装置、数据预取方法及微处理器 |
CN112527395B (zh) * | 2020-11-20 | 2023-03-07 | 海光信息技术股份有限公司 | 数据预取方法和数据处理装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5790823A (en) * | 1995-07-13 | 1998-08-04 | International Business Machines Corporation | Operand prefetch table |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5537573A (en) * | 1993-05-28 | 1996-07-16 | Rambus, Inc. | Cache system and method for prefetching of data |
US6138213A (en) * | 1997-06-27 | 2000-10-24 | Advanced Micro Devices, Inc. | Cache including a prefetch way for storing prefetch cache lines and configured to move a prefetched cache line to a non-prefetch way upon access to the prefetched cache line |
US5941981A (en) * | 1997-11-03 | 1999-08-24 | Advanced Micro Devices, Inc. | System for using a data history table to select among multiple data prefetch algorithms |
US6134643A (en) * | 1997-11-26 | 2000-10-17 | Intel Corporation | Method and apparatus for cache line prediction and prefetching using a prefetch controller and buffer and access history |
US6134632A (en) | 1998-01-26 | 2000-10-17 | Intel Corporation | Controller that supports data merging utilizing a slice addressable memory array |
US6963959B2 (en) * | 2002-10-31 | 2005-11-08 | International Business Machines Corporation | Storage system and method for reorganizing data to improve prefetch effectiveness and reduce seek distance |
CN1726459A (zh) | 2002-12-12 | 2006-01-25 | 皇家飞利浦电子股份有限公司 | 基于用于数据预取的步距预测的计数器 |
US7200719B2 (en) * | 2003-07-31 | 2007-04-03 | Freescale Semiconductor, Inc. | Prefetch control in a data processing system |
TWI258078B (en) | 2003-10-07 | 2006-07-11 | Via Tech Inc | Pre-fetch controller and method thereof |
JP2006047886A (ja) * | 2004-08-06 | 2006-02-16 | Canon Inc | 現像装置、カートリッジ及び画像形成装置 |
TWI285839B (en) | 2005-06-22 | 2007-08-21 | Via Tech Inc | Selectively prefetch method and bridge module |
US7774578B2 (en) | 2006-06-07 | 2010-08-10 | Advanced Micro Devices, Inc. | Apparatus and method of prefetching data in response to a cache miss |
US9274965B2 (en) | 2008-12-15 | 2016-03-01 | International Business Machines Corporation | Prefetching data |
-
2008
- 2008-12-15 US US12/335,077 patent/US9274965B2/en active Active
-
2009
- 2009-11-12 CN CN200910208364.8A patent/CN101751246B/zh active Active
- 2009-11-23 TW TW098139798A patent/TWI453663B/zh active
-
2016
- 2016-02-22 US US15/049,830 patent/US10810125B2/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5790823A (en) * | 1995-07-13 | 1998-08-04 | International Business Machines Corporation | Operand prefetch table |
Also Published As
Publication number | Publication date |
---|---|
US20100153653A1 (en) | 2010-06-17 |
TW201032130A (en) | 2010-09-01 |
US20160246725A1 (en) | 2016-08-25 |
CN101751246A (zh) | 2010-06-23 |
US10810125B2 (en) | 2020-10-20 |
US9274965B2 (en) | 2016-03-01 |
TWI453663B (zh) | 2014-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101751246B (zh) | 预取数据的系统和方法 | |
US11789872B2 (en) | Slot/sub-slot prefetch architecture for multiple memory requestors | |
JP6205418B2 (ja) | データキャッシュプリフェッチのヒント | |
JP5090047B2 (ja) | ロックされたキャッシュ内のセットの置換を管理するための方法、コンピュータ・プログラム、キャッシング・システムおよびプロセッサ | |
US10671535B2 (en) | Stride prefetching across memory pages | |
CN104133780B (zh) | 一种跨页预取方法、装置及系统 | |
US7657729B2 (en) | Efficient multiple-table reference prediction mechanism | |
US9886385B1 (en) | Content-directed prefetch circuit with quality filtering | |
US10019381B2 (en) | Cache control to reduce transaction roll back | |
CN105677580A (zh) | 访问缓存的方法和装置 | |
US20120166733A1 (en) | Apparatus and method for improving data prefetching efficiency using history based prefetching | |
JP2000242558A (ja) | キャッシュシステム及びその操作方法 | |
CN101918925B (zh) | 用于处理器的高关联性高速缓存的第二次机会取代机制 | |
CN102169429A (zh) | 预取单元、数据预取方法以及微处理器 | |
US8880847B2 (en) | Multistream prefetch buffer | |
US20110010506A1 (en) | Data prefetcher with multi-level table for predicting stride patterns | |
CN115563027A (zh) | 存数指令的执行方法、系统及装置 | |
CN108874690A (zh) | 数据预取的实现方法和处理器 | |
CN108874691A (zh) | 数据预取方法和内存控制器 | |
US20140013054A1 (en) | Storing data structures in cache | |
KR20060052788A (ko) | 인덱스 검사를 사용하는 저장-로드 포워딩 버퍼 | |
US20040078544A1 (en) | Memory address remapping method | |
CN109478163B (zh) | 用于在高速缓存条目处标识存储器访问请求的待决的系统和方法 | |
CN106569961B (zh) | 一种基于访存地址连续性的cache模块及其访存方法 | |
Woo et al. | Reducing energy of virtual cache synonym lookup using bloom filters |
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 |