CN106776371B - 跨距参考预取器、处理器和将数据预取到处理器的方法 - Google Patents
跨距参考预取器、处理器和将数据预取到处理器的方法 Download PDFInfo
- Publication number
- CN106776371B CN106776371B CN201611122755.4A CN201611122755A CN106776371B CN 106776371 B CN106776371 B CN 106776371B CN 201611122755 A CN201611122755 A CN 201611122755A CN 106776371 B CN106776371 B CN 106776371B
- Authority
- CN
- China
- Prior art keywords
- access
- value
- logic
- span
- address
- 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
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)
Abstract
本发明涉及一种跨距参考预取器、处理器和将数据预取到处理器的方法。处理器包括:高速缓冲存储器、处理逻辑、访问逻辑、跨距掩码逻辑、计数逻辑、仲裁逻辑和预取器。处理逻辑提交用以访问存储页的高速缓存行的加载请求。访问逻辑更新针对存储页的访问向量,其中访问逻辑确定连续加载请求之间的最小跨距值。跨距掩码逻辑基于最小跨距值来提供掩码向量。计数逻辑将掩码向量与访问向量相结合以提供访问计数。在访问计数达到预定计数阈值的情况下,仲裁逻辑触发预取操作。预取器使用通过将最小跨距值与加载请求中的最后一个加载请求的地址相结合所确定的预取地址来进行预取操作。可以确定跨距的方向,并且描述了稳定模式。
Description
技术领域
本发明通常涉及将信息预取到高速缓冲存储器中,并且更特别地涉及确定连续加载访问之间的最小跨距值和跨距方向以识别至少一个预取地址的跨距参考预取器。
背景技术
存储器访问延迟是降低处理性能和效率的重要原因。处理电路经常经由多层电路和关联的访问协议与主存储器分开。例如,处理器可以连接至存储该处理器所需的信息(诸如计算机系统要处理的指令和数据和其它信息等)的外部系统存储器。由于信息经常必须跨多级电路(诸如总线接口单元和/或存储器控制器等)、并且外部装置经常按照较慢的系统时钟进行工作,因此向外部系统存储器的访问可能相对较慢。处理器通常包括用于本地存储从外部系统存储器所撷取到的信息以供该处理器内的处理电路进行更快访问的至少一级高速缓冲存储器。由于高速缓存器从物理上更近、具有更少的中间电路级、并且经常按更快的时钟速度进行工作,因此向内部高速缓存器的访问快得多。
预取是预先从主存储器撷取信息块并将该信息块存储到本地高速缓存器中、以在需要时供处理电路进行更快地访问的常用技术。尽管高速缓冲存储器可能明显变快,但仅在高速缓存器及时地撷取到处理电路随后所请求的信息的情况下,性能和效率才有所提高。未能撷取到目标信息或者撷取到过多的错误信息的预取算法可能不会明显提高、并且甚至可能会降低整体性能和效率。
发明内容
根据一个实施例的一种用于处理器的跨距参考预取器,包括访问逻辑、跨距掩码逻辑、计数逻辑、仲裁逻辑和预取单元。所述访问逻辑检测向存储页的高速缓存行的连续加载请求,确定所述连续加载请求中的各加载请求之间的跨距值并确定最小跨距值,并且更新用于对所述存储页中的已被访问的各高速缓存行进行标识的访问历史向量。所述跨距掩码逻辑基于所述最小跨距值来提供跨距掩码向量。所述计数逻辑利用所述跨距掩码向量来过滤所述访问历史向量,以确定正访问计数和负访问计数。所述仲裁逻辑在所述正访问计数和所述负访问计数中的任一个满足触发阈值的情况下触发预取操作。所述仲裁逻辑还基于所述正访问计数和所述负访问计数的相对大小来指示存储器访问的方向。所述预取单元在被所述仲裁逻辑触发的情况下使用预取地址来进行所述预取操作。所述预取单元通过在所述仲裁逻辑所指示的方向上将加载请求地址与所述最小跨距值相结合来确定所述预取地址。
根据一个实施例的一种处理器,包括高速缓冲存储器、处理逻辑、访问逻辑、跨距掩码逻辑、计数逻辑、仲裁逻辑和预取器。所述处理逻辑提交用以访问存储页的高速缓存行的多个加载请求。所述访问逻辑接收所述加载请求,并且更新针对所述存储页的访问向量,其中所述访问逻辑确定连续加载请求之间的最小跨距值。所述跨距掩码逻辑基于所述最小跨距值来提供掩码向量。所述计数逻辑将所述掩码向量与所述访问向量相结合以提供访问计数。所述仲裁逻辑在所述访问计数达到预定计数阈值的情况下触发预取操作。所述预取器使用通过将所述最小跨距值与所述多个加载请求中的最后一个加载请求的地址相结合所确定的预取地址来进行所述预取操作。
所述访问逻辑可以包括参考表,所述参考表用于存储所述存储页的页地址、所述最小跨距值、用于对利用所述加载请求地址所访问的高速缓存行进行标识的先前访问值、以及所述访问历史向量。所述访问逻辑可以包括加法器、比较器、解码器和用以确定各跨距值的其它逻辑,从而确定并更新连续加载请求访问之间的最小跨距值,并且更新所述访问历史向量。所述访问历史向量可以包括多个位,其中各个位与所述存储页的高速缓存行相对应。所述计数逻辑可以包括用以区分正方向和负方向的移位寄存器等、以及用于将正访问历史值和负访问历史值与跨距掩码向量相结合以确定正访问计数和负访问计数的布尔(Boolean)逻辑等。所述仲裁逻辑包括加法器和比较器等,以判断是否满足触发阈值并判断跨距的方向。在正访问计数和负访问计数的总和达到稳定启用阈值的情况下,仲裁逻辑还可以确定操作的稳定模式。在操作的稳定模式中,预取器多次相加最小跨距值以进行连续预取操作,而不会相对于实际加载访问过于提前。在正访问计数和负访问计数的总和降为稳定禁用阈值的情况下,仲裁逻辑还可以终止操作的稳定模式。
根据一个实施例的一种用于将数据从存储器预取到处理器中的方法,包括以下步骤:检测向存储页的高速缓存行的连续加载请求;确定所述连续加载请求中的各加载请求之间的跨距值;确定最小跨距值;更新用于对所述存储页中的已被访问的各高速缓存行进行标识的访问历史向量;基于所述最小跨距值来确定跨距掩码向量;利用所述跨距掩码向量来过滤所述访问历史向量,并且确定访问计数;以及在所述访问计数达到预定计数阈值的情况下进行预取操作。
所述方法可以包括:针对各连续加载请求更新所存储的先前访问值;以及将下一访问值与所存储的先前访问值进行比较。所述方法可以包括:针对各连续加载请求确定跨距值;将下一跨距值与当前所存储的最小跨距值进行比较;以及在所述下一跨距值小于当前所存储的最小跨距值的情况下,利用所述下一跨距值更新该最小跨距值。所述方法可以包括选择多个跨距掩码向量其中之一,其中所述多个跨距掩码向量中的各跨距掩码向量与多个可能跨距值中的相应可能跨距值相对应。
所述方法还可以包括:使所述访问历史向量在第一方向上移位,以提供正访问历史向量;使所述访问历史向量在相反的第二方向上移位,以提供负访问历史向量;利用所述跨距掩码向量来过滤所述正访问历史向量以提供正计数,并且利用所述跨距掩码向量来过滤所述负访问历史向量以提供负计数;在所述正计数和所述负计数中的任一个实现所述预定计数阈值的情况下,进行所述预取操作;以及基于所述正计数和所述负计数的比较来确定所述预取操作的方向。所述方法可以包括:将所述正计数和所述负计数相加,以确定总和计数;将所述总和计数与稳定启用阈值进行比较;以及在所述总和计数达到所述稳定启用阈值的情况下,以稳定模式进行工作。所述方法可以包括:重复地相加所述最小跨距值以确定连续预取地址,并且针对所述连续预取地址中的各预取地址进行所述预取操作。所述方法可以包括:将所述总和计数与稳定禁用阈值进行比较;以及在所述总和计数降为所述稳定禁用阈值的情况下,终止以所述稳定模式进行工作。
附图说明
将针对以下的说明和附图来更好地理解本发明的益处、特征和优点,其中:
图1是包括包含有根据一个实施例所实现的跨距参考预取器的处理器的处理系统的简化框图;
图2是根据一个实施例的图1的简化框图;
图3是根据一个实施例的图2的跨距参考表和决策逻辑的更详细框图;
图4是示出根据一个实施例的访问历史向量AHV的形式的简化框图;
图5是根据一个实施例的图2的更新逻辑的简化框图;
图6是图3的用于根据访问历史向量AHV和跨距掩码向量SMV来确定计数值P和N的计数逻辑的更详细框图;
图7是根据一个实施例的图3的仲裁逻辑的简化框图;
图8是示出根据一个实施例的图3的跨距掩码逻辑的表格图;
图9是示出根据一个实施例的图3的计数逻辑的操作的图形描述;
图10是图3的跨距参考表中的给定行的一个条目的图,其示出针对同一页的给定系列访问如何更新字段;
图11是示出根据一个实施例的图2的更新逻辑的操作流程图;
图12是示出根据一个实施例的图3的控制逻辑的操作流程图;
图13是示出根据一个实施例的图3的仲裁逻辑的操作流程图;以及
图14是示出根据一个实施例的图2的预取器的操作流程图。
具体实施方式
本发明人已意识到针对处理器的更为高效且精确的存储器预取器的需求。因此,本发明人开发了识别连续加载访问之间的最小跨距值和跨距方向以识别至少一个预取地址的跨距参考预取器。如这里所述的存储器预取器的跨距参考实现保持了用在乱序处理器中的特殊优势,其中在该乱序处理器中,可以按与原始应用程序或软件程序所规定的顺序不同的顺序将加载指令提交至存储器单元。
如这里使用的术语“处理器”是指包括微处理器、中央处理单元(CPU)、处理核、微控制器等的任何类型的处理单元。如这里使用的术语“处理器”还包括任何类型的处理器结构,诸如集成在芯片或集成电路(IC)上的处理单元(包括被包含在系统级芯片(SOC)等内的处理单元)等。处理器的处理逻辑最大程度地利用内部高速缓存器进行工作是有利的。
图1是包括包含有根据一个实施例所实现的跨距参考预取器(SRP)112的处理器102的处理系统100的简化框图。处理器102连接至外部系统存储器104,其中该外部系统存储器104存储供处理器102消耗的指令和数据。处理器102包括处理引擎106、高速缓冲存储器108和总线接口单元109,其中该总线接口单元109经由一个或多个总线111和113等与用于连接系统存储器104的外部存储器控制器110进行通信。在可选结构中,存储器控制器110可以被包含在处理器102中。处理引擎106可以以任何适当方式被配置成执行软件程序或应用程序等。例如,处理器102的标准指令集架构(ISA)可以是x86宏架构,其中在该x86宏架构中,处理器102可以正确地执行被设计为在x86处理器上执行的应用程序中的大部分。在获得了应用程序的预期结果的情况下,正确地执行了该应用程序。然而,本发明不限于x86架构,其中处理器102可以根据如本领域普通技术人员已知的任何可选ISA而定。处理引擎执行被称为宏指令的所选择的ISA的指令,并且处理引擎106包括关联的用户可见寄存器组。
尽管未示出,但处理引擎106可以包括:提取单元,用于将宏指令取回到指令高速缓存器中;转译器,用于将宏指令转换成处理器102的原生指令集的相应微指令或“微操作(micro-ops)”;调度器等,用于对微指令的执行进行调度;以及一个或多个执行单元,用于执行微指令。处理器102可以是乱序处理器,其中只要最终实现了相同结果,就可以不按原始程序顺序执行宏指令或微指令(以下简称为“指令”),以改善性能。执行单元可以包括一个或多个整数执行单元、一个或多个浮点(FP)或媒体执行单元、包含一个或多个加载流水线和一个或多个存储流水线的存储子系统、等等。还可以包括诸如重排序缓冲器(ROB)、物理寄存器重命名单元、或确保指令按程序顺序退出的相关硬件结构等单元,从而实现根据原始程序指令的适当操作。
高速缓冲存储器108包含或表示指令高速缓存器(instruction cache或icache)、数据高速缓存器(data cache或dcache)或不同高速缓存器类型的组合。指令高速缓存器可以存储从系统存储器104内存储的应用程序中所撷取的宏指令。高速缓冲存储器108还表示可以被包含在处理器102中的一个或多个高速缓存器级。例如,根据特定结构,高速缓冲存储器108可以包括更小且更快的1级(L1)高速缓存器、略大的2级(L2)高速缓存器以及可能的附加高速缓存器级。L1高速缓存器可以被包含在处理引擎106的存储器子系统内。在一个实施例中,高速缓冲存储器108至少包括处理器102的L2数据高速缓存器。
在工作中,处理引擎106执行参考最终位于系统存储器104中的数据值的、包括操作数等的指令。在一个实施例中,微指令包括提交至具有用以访问在所定址的位置处所存储的所请求数据的相应地址的缓冲存储器108的加载指令。可以定义许多不同类型的加载指令,但各加载指令在这里被简称为加载指令。如果所请求的数据存储在高速缓冲存储器108内,则从高速缓冲存储器108撷取数据并将该数据提供至处理引擎106,而不必访问系统存储器104。向高速缓冲存储器108的访问与向系统存储器104的访问相比快得多,由此改善了性能。然而,如果所请求的数据不是存储在高速缓冲存储器108内,则高速缓冲存储器108将该请求经由总线接口单元109转送至任何附加高速缓存器级(未示出)和/或转送到存储器控制器110。存储器控制器110从系统存储器104撷取所请求的数据并将该所请求的数据转送至高速缓冲存储器108以供存储。一旦存储在高速缓冲存储器108中,则处理引擎106响应于加载指令而可利用该数据。诸如通过执行存储指令等将数据存储到系统存储器104中按相反方向进行操作,但这里不进行进一步说明。
应当理解,高速缓冲存储器108在处理引擎106需要时存储数据方面,改善了性能和效率。SRP 112进行工作,以检测来自处理引擎106的加载指令、然后预期处理引擎106的未来加载请求。所预期的数据在被处理引擎106实际请求之前被预取到高速缓冲存储器108中。如果SRP 112正确地预期了未来加载指令,则性能得以显著改善。
图2是根据一个实施例的SRP 112的简化框图。利用SRP 112的访问逻辑206的更新逻辑202检测来自处理引擎106的各加载指令。各加载指令包括如这里进一步所述可能是全(或完整)地址的相应地址ADDR,其中ADDR的上部是页地址PA。更新逻辑202使用页地址PA来访问并更新访问逻辑206的跨距参考表(SRT)204。如果在SRT 204中没有找到页地址PA,则利用相应页的新条目来更新SRT 204,并且操作完成。如果在SRT 204中找到了页地址PA,则首先更新相应的页条目,然后更新逻辑202向决策逻辑208设置(assert)决策信号DEC,其中该决策逻辑208访问来自SRT 204中的利用PA(由更新逻辑202提供)定址的相应条目的信息以作出预取决策。如果决定进行预取操作,则决策逻辑208向预取器210设置信号TRIGGER(触发),并且还设置方向信号DIR。更新逻辑202还利用加载信号LD表示各加载指令,并且将当前加载指令的地址ADDR提供至预取器210。如这里进一步所述,预取器210使用ADDR来针对一个或多个预取操作中的各预取操作确定预取地址。决策逻辑208还读取与ADDR相加或从ADDR中减去的STRIDE(跨距)值,以确定预取地址。DIR信号表示加上还是减去STRIDE值。
在一个实施例中,DIR信号是表示正或负方向的二进制类型信号等。在一个实施例中,正方向表示不断增加的存储器地址,其中向ADDR加上STRIDE值,而负方向表示不断减少的存储器地址,其中从ADDR中减去STRIDE值。这样,STRIDE值表示连续的加载访问之间的相对偏移,并且DIR信号表示连续的访问在存储器中是正在向上还是向下移动。将DIR信号提供回至更新逻辑202,其中如这里进一步所述,在还设置了TRIGGER的情况下,该更新逻辑202更新SRT 204中的相应条目。
在决策逻辑208从SRT 204中在由值SIGN(符号)表示的方向上使用STRIDE检测到大量连续的加载访问的情况下,决策逻辑208向预取器210设置信号STABLE(稳定)。在决策逻辑208设置了STABLE的情况下,预取器210使用STRIDE值和SIGN值来进行多个连续预取操作。如果SIGN表示正方向,则向当前加载地址多次加上STRIDE以确定正方向上的多个预取地址。否则,如果SIGN表示负方向,则从当前加载地址中多次减去STRIDE以确定负方向上的多个预取地址。操作的稳定模式持续,直到不再设置STABLE信号为止,其中在这种情况下,操作返回至通过TRIGGER信号的设置所表示的正常触发模式。注意,在操作的稳定模式中,尽管预取器210可能忽视TRIGGER信号的设置,访问逻辑206和决策逻辑208也继续正常进行工作。
图3是根据一个实施例的SRT 204和决策逻辑208的更详细框图。SRT 204可以是全相联或组相联的。图示的SRT 204针对多行条目中的各行条目包括八个字段(列),其中各条目存储与存储器104的页相关联的相应值。这些字段包括物理页地址(PPA)字段、稳定字段(STABLE)、表示连续的存储器访问之间的最小偏移的跨距字段(STRIDE)、表示稳定模式期间的存储器访问方向的符号字段(SIGN)、提供正方向上的计数的正字段(POS)、提供负方向上的计数的负字段(NEG)、提供表示所访问的最后一个高速缓存行的部分地址的先前访问字段(PREVIOUS ACCESS)、以及表示随时间的经过而已访问了页的哪些高速缓存行的访问历史字段(ACCESS HISTORY)。在第一次访问系统存储器104中的物理页的情况下,针对该页分配新的页条目以追踪向该页的附加访问。如果SRT 204未满,则分配下一可用的未使用行并且利用初始值对该行进行初始化。如果SRT 204已满,则选择当前条目其中之一作为被具有新的页地址的新条目替换的牺牲者(victim),并且利用初始值替换该条目行中的各字段。根据例如最近最少使用(LRU)替换策略等的任何适当的替换策略来选择SRT 204中的被替换的牺牲者。
PPA字段存储能够足以唯一地标识页的页地址的高位(表示为PA1、PA2等)。如这里进一步所述,将存储器104的各页细分为高速缓存行(或块),并且各高速缓存行存储多个字节的数据。在设置了表示针对该页已调用了操作的稳定模式的情况下,稳定字段存储被设定为真(例如,逻辑“1”)的至少一位(表示为STB1、STB2等)。跨距字段存储具有表示相对于当前页地址的高速缓存行偏移的高速缓存行属性的无符号值(表示为STR1、STR2等),其中该高速缓存行偏移表示诸如在加载访问针对每个高速高速缓存行、每隔一个高速缓存行、每隔两个高速缓存行等的情况下的存储器访问模式。POS字段和NEG字段存储正计数值和负计数值(分别表示为P1、P2等和N1、N2等),其中这些正计数值和负计数值表示诸如正方向(不断增加的存储器地址)或负方向(不断减少的存储器地址)等的存储器访问模式的普遍方向。SIGN字段可以是表示页的相应POS字段和NEG字段中的较大字段的单个位(表示为S1、S2等)。在POS和NEG相等的情况下,符号值表示正方向(其中,正方向更为常见,因此被视为相对于负方向占主导)。先前访问字段存储具有高速缓存行属性并且标识最后页访问的页内的特定高速缓存行的值(表示为PRA1、PRA2等)。访问历史字段存储位数等于存储器的页的高速缓存行的数量的访问历史向量(AHV)(单独表示为AHV1、AHV2等),并且用于追踪页内的高速缓存行访问。
各字段的大小取决于物理页大小和高速缓存行(或块)大小。在一个实施例中,系统存储器104的页大小可以是4千字节(KB或4096字节)、其高速缓存行大小可以是64字节(B)、并且其物理地址可以是48位或ADDR[47:0]。在这种情况下,PPA是36位或ADDR[47:12](是唯一标识各物理页的页地址的高36位),先前访问字段是6位或ADDR[11:6](足够唯一标识给定页内的64个高速缓存行中的各行),并且访问历史字段是(每个高速缓存行1位)64位。尽管跨距字段可以是6位,但作为代替,选择跨距字段具有4位以将要检测的最大跨距限制为15。在一个实施例中,如果跨距大于15,则到检测到该跨距时,预取地址可能跨越页边界。本结构用于检测页内的跨距、而非跨越页边界的跨距。POS字段和NEG字段各自也为4位。稳定字段和符号字段各自为1位。应当理解,字段针对不同的结构、特别是针对不同的页地址长度、页大小和缓存行大小可以具有不同的大小。
PPA=PA0的条目表示在第一次访问具有页地址PA0的页时的初始值。初始稳定值是0b(其中,末尾所添加的“b”表示二进制值),这表示操作的稳定模式最初为假。初始跨距值是作为针对4位值的最大可能跨距的1111b。针对向同一页的各附加访问确定新的跨距值,并且如果新的跨距值小于先前跨距值,则利用较小的跨距值来更新跨距值。这样,SRT204保持追踪各页的最可能是实际跨距值的最小跨距。在乱序处理器中,加载访问可能是以模糊了实际跨距值的乱序方式执行的。然而,确定真跨距或实际跨距不大于任何特定加载访问的任何个体跨距值。这样,存储最小跨距偏移作为各页的跨距值。POS计数值和NEG计数值各自初始被设定为0000b,并且符号位是最初表示正方向的0b。
最初的访问历史向量AHV的64位中的1位被设定为1,以表示哪个高速缓存行被当前加载访问命中。在例示实施例中,由于迄今为止仅进行了一次访问,因此将第61位设定为逻辑“1”,并且将其余各位设定为逻辑“0”。先前访问值是采用二进制格式的、等于十进制数61的111101b。如这里进一步所述,PF0条目的值中的多个值随着各新访问而改变。例如,假定下一加载访问是页0的第59个高速缓存行。计算出新跨距值作为高速缓存行的数量方面的差,即2(61-59=2)。将页PF0的STRIDE字段更新为表示跨距2的0010b。先前访问字段改变为表示最后访问了页PF0的高速缓存行59的111011b,并且由于此时已访问了第61个高速缓存行和第59个高速缓存行,因此将访问历史向量更新为00010100…0b。除非如这里进一步所述、更新其它字段,否则针对向页PF0的各新加载访问以这种方式持续进行操作。
决策逻辑208包括控制逻辑302、跨距掩码逻辑304、计数逻辑306和仲裁逻辑308。控制逻辑302通常控制决策逻辑208中的其它逻辑块的定时和启动。计数逻辑306包括正移位寄存器310和负移位寄存器312、正与(AND)逻辑314和负与(AND)逻辑316、正1计数逻辑318和负1计数逻辑320。如前面所述,响应新加载请求,更新逻辑202使用从访问中的页的物理页地址ADDR中所撷取的页地址PA来更新SRT 204中的条目,然后设置DEC信号以启动决策。控制逻辑302检测到所设置的DEC信号,访问SRT 204中的与PA相对应的条目的字段,然后向移位寄存器310和312设置加载(L)指示和移位(S)指示。移位寄存器310和312从SRT204加载相应的AHV向量,然后如这里进一步所述,使所加载的值移位了基于所访问的高速缓存行的量。正移位寄存器310使所加载的AHV在与正方向相对应的一个方向上移位并且输出正访问历史值(PH),并且负移位寄存器312使所加载的AHV在与负方向相对应的相反方向上移位并且输出负访问历史值(NH)。如这里进一步所述,各情况下的移位数量取决于当前所访问的高速缓存行的位置。将PH值提供至正与逻辑314的相应输入,并且将NH值提供至负与逻辑316的相应输入。
控制块302向跨距掩码逻辑304设置过滤指示F,其中该过滤指示F访问SRT 204中的与页地址PA相对应的跨距值,并且生成相应的跨距掩码向量(SMV)、或者将该跨距掩码向量(SMV)提供或选择至正与逻辑314和负与逻辑316的相应输入。正与逻辑314和负与逻辑316各自在历史值PH和NH与SMV之间进行逐位布尔与逻辑函数,并且将这些结果分别输出至正1计数逻辑318和负1计数逻辑320的相应输入。正1计数逻辑318对正与逻辑314的输出所提供的逻辑“1”的数量进行计数并输出正计数P,并且负1计数逻辑320对负与逻辑316的输出所提供的逻辑“0”的数量进行计数并输出负计数N。
然后,控制块302向仲裁逻辑308设置仲裁指示ARB。仲裁逻辑308包括或访问多个阈值TTH、SETH和SDTH以控制跨距判断操作。这些阈值中的任一个或多个可以是固定的或可编程的。在一个实施例中,各阈值具有在启动顺序期间所设定的、随后可以由处理器102经由内部配置寄存器等改变的默认值。在可编程的情况下,阈值可以由用户进行编程。TTH是判断何时要设置TRIGGER信号的针对P计数和N计数的触发阈值。在由控制逻辑302提示的情况下,如果P或N达到TTH,则仲裁逻辑308设置TRIGGER信号。连同TRIGGER一起设置DIR信号以表示所检测到的跨距的方向,并且DIR信号是基于P计数值和N计数值中的较大计数值的。如果P=N,则由于判断为正的跨距更为常见因而占主导、因此判断为方向为正。因而,如果P≥N,则DIR是表示正方向的“0”,否则在N>P的情况下,DIR是表示负方向的“1”。SETH是判断操作的稳定模式何时有效的稳定启用阈值。在P+N≥SETH的情况下,仲裁逻辑308设置STABLE信号以启动操作的稳定模式。SDTH是判断操作的稳定模式何时无效以返回至正常触发操作的稳定禁用阈值。在P+N≤SDTH的情况下,仲裁逻辑308取消设置(de-assert)或取消STABLE信号以终止操作的稳定模式。
在一个实施例中,TTH具有诸如2等的相对较低的默认值,其中在P或N达到TTH时,设置TRIGGER。在一个实施例中,SETH的默认值为7,使得在P+N≥7的情况下,设置STABLE。在一个实施例中,SDTH的默认值为4,使得在P+N≤4的情况下,在操作的稳定模式期间,取消设置STABLE。然而,如上所述,可以将默认值修改为不同的默认值,并且可以针对不同的结构对不同的阈值进行编程。
图4是示出根据一个实施例的访问历史向量AHV的形式的简化框图。将系统存储器104划分为一系列的Q+1页P0~PQ,其中Q是任何适当的正整数。页数和各页的大小取决于特定操作参数。如前面所述,常见的页大小为4KB。在402中以分解图示出页地址PFX处的仲裁页PX,其中该仲裁页PX进一步细分为Z+1个高速缓存行CL0~CLZ,其中Z是任何适当的正整数。在页大小为4KB的一个实施例中,可能存在64个高速缓存行(Z=63),其中各高速缓存行包括64字节。然而,应当理解,可以使用不同的页和高速缓存行大小。示出与页PX 402相对应的访问历史向量AHV_X 404。访问历史向量AHV_X 404针对各页PX402的各个高速缓存行包括1位。访问历史向量AHV_X 404的各位最初被编程为表示尚未被访问的逻辑“0”。
响应于来自处理引擎106的加载指令,将已被访问的几个高速缓存行表示为“HIT(命中)”。对于已被访问的并利用HIT指示进行了标记的各高速缓存行,利用更新逻辑202将访问历史向量AHV_X 404中的相应位设定为逻辑“1”。应当理解,访问历史向量AHV中的逻辑“1”表示已被访问了至少一次的高速缓存行。逻辑“1”的总数表示页已被命中了至少该总数多的次数,尽管可能已不只一次访问了高速缓存行中的任一个或多个高速缓存行。如这里进一步所述,使用SRT 204和决策逻辑208来检测跨距访问模式和相应的方向。
图5是根据一个实施例的更新逻辑202的简化框图。在顶部示出当前加载指令访问的全地址ADDR,其中该全地址ADDR可被细分为页地址PA、高速缓存行地址CLA和字节地址BA。全地址的高位标识正在访问的页,高速缓存行地址CLA标识所标识的页内的正在访问的高速缓存行,并且字节地址BA标识所标识的高速缓存行内的正在定址或参考的特定字节。将PA应用于比较器502的一个输入,其中该比较器502将PA与SRT 204中的各个页值PA1~PAN进行比较。如果不存在匹配的条目,则调用添加/替换逻辑504以替换现有条目或使用新的PA向SRT 204添加新条目。将新条目插入空白或未使用条目中、或者根据适用的替换策略替换现有条目。如前面所述的示例条目PA0所示,将条目中的除先前访问字段和访问历史字段以外的各个字节设定为预定初始值。如果存在匹配的条目,则如这里所述,利用更新匹配条目逻辑505来更新先前访问字段和访问历史字段。
在利用更新匹配条目逻辑505正在更新现有条目的情况下,利用加法器506从CLA中减去相应的先前访问字段中的表示为PRA的先前地址值,并且差是508所示的偏移值OFF。OFF值表示页内的连续访问之间的高速缓存行的数量。利用比较器510将相应的跨距字段中所存储的当前跨距值STR与OFF进行比较,并且如“MIN SELECT”所示,选择这两者中的较小一个作为更新后的STR。因而,如果OFF小于STR,则如虚线512所示,OFF变为新的跨距值STR。然而,如果STR≤OFF,则STR保持不变。应当理解,通过连续的更新,STR变为作为多个连续访问之间的最小差的最小跨距值。对于新的更新后的条目,如514所示,将来自全地址ADDR的CLA作为先前访问值PRA存储到相应页条目的先前访问字段中。
CLA还被提供至解码器516,其中该解码器516输出用于标识加载访问当前正在访问的高速缓存行的当前访问向量(CAV)。CAV的形式类似于相应页条目的访问历史字段中所存储的当前访问历史值AHV,其中除表示当前正在访问的高速缓存行的一个逻辑“1”位以外,CAV全部具有逻辑“0”。来自解码器516的CAV由或(OR)逻辑518以逐位方式进行逻辑或,并且将结果返回存储到访问历史字段的更新后的AHV中。
尽管在图5中未示出,但更新逻辑202还更新SRT 204的POS字段、NEG字段和STABLE字段。如果设置了TRIGGER,则更新逻辑202在DIR是逻辑“0”的情况下使POS增加、或者在DIR是逻辑“1”的情况下更新NEG。更新逻辑202更新相应的符号字段的SIGN值,以反映POS值和NEG值中的较大值、或者在POS和NEG相等的情况下反映正方向。POS值和NEG值链接至跨距值,使得每次针对给定条目更新跨距值时,将相应的POS值和NEG值重置回为初始值(即,0000b)。在针对给定页设置了STABLE的情况下,更新逻辑202还将STABLE位设定在相应的页条目中。
图6是用于根据访问历史向量AHV和跨距掩码向量SMV确定计数值P和N的计数逻辑306的更详细框图。示出CAL所标识的当前访问位置,从而标识AHV内的用于标识当前正在访问的高速缓存行的位。在第一步骤中,控制逻辑302向移位寄存器310和312设置加载指示L。移位寄存器310和312都通过加载AHV的当前值来进行响应。
在第二步骤中,控制逻辑302向移位控制逻辑602设置移位指示S,其中该移位指示S使用全地址中的CAL值以针对移位寄存器310和312各自确定要进行的移位的数量。移位寄存器310使所存储的AHV的副本左移,直到CAL所标识的位被移出到移位寄存器310的左侧外为止。移位控制逻辑602在移位操作期间将逻辑“0”移位到移位寄存器310的右侧(或者逻辑“0”在右侧被硬线连接)。以类似方式,移位寄存器312使所存储的AHV的副本右移,直到CAL所标识的位被移出到移位寄存器312的右侧外为止。移位控制逻辑602在移位操作期间将逻辑“0”移位到移位寄存器312的左侧(或者逻辑“0”在左侧被硬线连接)。
值得注意的是,移位寄存器310和312可以与访问历史字段物理并联连接,使得可以并行地将AHV的各位加载到移位寄存器中。一旦加载,则进行移位操作,以使正访问模式和负访问模式隔离。可选地,AHV可被同时或顺次移位到移位寄存器310和312中。在后面实施例中,移位控制逻辑602可被配置为将针对移位寄存器310和312各自的加载和移位操作组合为一个移位操作(全体或针对各移位寄存器),以节约时钟周期。
在第三步骤中,控制逻辑302向跨距掩码逻辑304设置过滤指示F,其中该过滤指示F从SRT 204中撷取相应的跨距值STR并输出相应的跨距掩码向量SMV。在一个实施例中,跨距掩码逻辑304是查找表等,其中在该查找表中,使用跨距值STR作为用以访问相应SMV的地址。在替代实施例中,跨距掩码逻辑304可以计算SMV、或者使用适当的转换逻辑等来对STR进行转换。
示出与逻辑314作为一系列的2输入与门,其中各2输入与门具有接收移位寄存器310的相应位的一个输入和接收SMV的相应位的另一输入。示出SMV作为从跨距掩码逻辑304输出的一系列的64位S63、S62、……、S0。对于正计数逻辑,对SMV进行反向,使得SMV的位S0由第一与门606与移位寄存器310的最左位进行逻辑与,并且该输出被提供至正1计数逻辑318的第一输入。由第二与门608将SMV的下一位S1与从移位寄存器310的左侧起的第二位进行逻辑与,并且该输出被提供至正1计数逻辑318的第二输入。针对所有位进行逐位与操作,直到移位寄存器310的最右位为止,其中由另一与门610将该最右位与SMV的S63进行逻辑与,并且该输出被提供至正1计数逻辑318的最后一个输入。
除针对负计数逻辑、SMV没有反向以外,与逻辑316以相似方式被配置为一系列的2输入与门。在这种情况下,将SMV的位S63与移位寄存器312最左位进行逻辑与,直到将SMV的位S0与移位寄存器312的最右位进行逻辑与。这些结果被提供至负1计数逻辑320的相应输入。
在第四步骤中,控制逻辑302向计数逻辑318和320设置CNT指示。正1计数逻辑318对作为移位寄存器310中的移位值和反向的SMV之间的逐位与操作的结果的逻辑“1”的数量进行计数,以提供P计数。负1计数逻辑320对作为移位寄存器312中的移位值和SMV之间的逐位与操作的结果的逻辑“1”的数量进行计数,以提供N计数。
在第五步骤中,控制逻辑302向仲裁逻辑308设置ARB指示,以判断是否设置TRIGGER信号、DIR信号和/或STABLE信号。
图7是根据一个实施例的仲裁逻辑308的简化框图。将P计数提供至比较器702的一个输入,其中该比较器702在其它输入处接收TTH,并且在输出处提供表示P≥TTH的信号。将N计数提供至比较器704的一个输入,其中该比较器704在其它输入处接收TTH,并且在输出处提供表示N≥TTH的信号。将比较器702和704的输出提供至或逻辑706的各个输入,其中该或逻辑706响应于ARB指示而在输出处设置TRIGGER信号。这样,在P≥TTH的情况下或者在N≥TTH的情况下,设置了TRIGGER。
还将P和N提供至另一比较器708的各个输入,该比较器708响应于ARB指示而在输出处提供表示P<N的信号,其中比较器708的输出还可以是DIR信号。DIR对于正方向是逻辑“0”,并且对于负方向是逻辑“1”。因此,如果P<N,则DIR是表示负方向的逻辑“1”。否则,DIR是表示正方向的逻辑“0”。
还将P和N提供至加法器710的各个输入,其中该加法器710响应ARB指示,将P和N相加以生成SUM值或者SUM=P+N。将SUM提供至比较器712的一个输入,该比较器712在其它输入处接收SETH,其中比较器712在其输出处提供稳定启用信号SS,该稳定启用信号在SUM≥SETH的情况下变高。将SUM提供到另一比较器714的一个输入,该比较器714在其它输入处接收SDTH,其中比较器714提供稳定禁用信号RS,该稳定禁用信号在SUM≤SDTH的情况下变高。将SS提供至置位复位(SR)锁存器716的置位(S)输入,将RS提供至SR锁存器716的复位(R)输入,并且在RS锁存器716的Q输出处设置STABLE信号。在操作中,STABLE在P+N≥SETH的情况下被设置得高(启用稳定操作),并且在P+N≤SDTH的情况下被复位回低(禁用稳定操作)。
图8是示出根据一个实施例的跨距掩码逻辑304的表格图。在这样情况下,跨距掩码逻辑304可以被配置为包含如下查找表的存储器,其中该查找表在输入处接收跨距值并且在输出处提供相应的跨距掩码向量SMV。在例示实施例中,跨距值是在1(0001b)~15(1111b)的范围内4位数,用于选择逻辑1和逻辑0的总共多达64位的相应重复模式。跨距值表示处理引擎106所进行的各个连续存储器访问的最小高速缓存行偏移。
在跨距值为1(0001b)的情况下,SMV全部为1(111,…,1b),从而表示连续地加载访问各高速缓存行,而没有跳过任何高速缓存行。在乱序处理器中,实际的加载访问在操作中可能跳过一个或多个高速缓存行,但在两次连续的加载访问是针对页中的邻接高速缓存行的情况下,跨距值变为1(最小跨距),从而表示实际加载操作是针对各高速缓存行的可能性。在跨距值为2(0010b)的情况下,SMV的每隔一个位置是逻辑1、或10101,…,0b。在跨距值为3(0011b)的情况下,SMV的每隔两个位置是逻辑1、或1001001,…,0b。该模式针对每个连续跨距值重复,使得在跨距值是15(1111b)的情况下,SMV的每隔15个位置是逻辑1、或1000000000000001,…,0b。
图9是示出根据一个实施例的计数逻辑306的操作的图形描述。在顶部示出具有表示给定页的高速缓存行的加载访问的一系列逻辑1和0的访问历史向量AHV。低地址在AHV的右侧。如图所示,加载访问针对从低地址开始的高速缓存行中的每隔一个缓存行,并在页的正方向上增加,使得跨距值为2。在从最右位置起的第12个高速缓存行示出表示为CAL的当前访问位置。尽管先前加载访问是在第14个高速缓存行和第16个高速缓存行发生的,但考虑到乱序操作,这是有可能的。响应于来自控制逻辑302的加载指示,将AHV复制到移位寄存器310和312中,这以缩写形式示出。响应于来自控制逻辑302的移位指示,移位寄存器310中的位发生左移,其中逻辑0从右侧移入,直到CAL处的位从移位寄存器310的左侧移出为止。类似地,移位寄存器312中的位发生右移,其中逻辑0从左侧移入,直到CAL处的位从移位寄存器312的右侧移出为止。
如902所示,选择跨距值为2的SMV值,即如图8所示的SMV=10101,...,0b,除非针对正方向、SMV值发生反向而使得S63的MSB在最右位置外。进行逐位逻辑与操作的结果如904所示。控制逻辑302设置计数指示CNT,并且正1计数逻辑318对904处所示的逻辑“1”的数量进行计数,这样得到906所示的正方向计数5。
以类似方式,如908所示,选择跨距值为2的SMV值,即SMV=10101,...,0b。在这种情况下,值没有反向,使得S63的MSB在最左位置。进行逐位逻辑与操作的结果如910所示。控制逻辑302设置计数指示CNT,并且负1计数逻辑320对910所示的逻辑“1”的数量进行计数,这样得到912所示的负方向计数2。
图9示出计数逻辑306实现两个主要功能。第一个功能是用以使通过移位操作针对当前访问值CAL所进行的正方向和负方向上的访问隔离。第一方向上的移位使正方向上的访问隔离,并且相反方向上的移位使负方向上的访问隔离。第二个功能是用以利用基于多次访问的最小跨距的SMV来过滤移位后的访问值。通常,过滤掉与根据最小跨距值的跨距模式不匹配的访问,从而仅留下与跨距访问模式相匹配的访问。然后,对如此隔离并过滤后的值进行计数,以判断是否识别出跨距访问模式,如果识别出了跨距访问模式,则判断所识别出的跨距模式的相应方向。
返回参考图7,对于TTH=2的P=5和N=2,P≥TTH和N≥TTH这两者都为真,使得或逻辑706设置了TRIGGER信号。比较器708判断为方向为正,使得DIR=0b。如果SETH为7,则加法器710所判断出的SUM值至少为SETH,使得SR锁存器716将STABLE设置为高,以启动操作的稳定模式。
图10是SRT 204中的给定行的一个条目的示意图,其示出针对向同一页的给定系列的访问如何更新字段。将第一个加载访问的全ADDR以简化十六进制格式示出为“0X4000”,其中该“0X4000”对被标识为相应页地址“0X4”的页的第一个高速缓存行进行定址。在1002示出条目的字段中的初始值。在1004和1006分别示出向同一页0X4的地址0X4100和0X4080的连续访问。由于访问第一页,因此初始条目1002的先前访问字段被示出为000000b,并且示出最右位被设定为逻辑“1”的访问历史字段,其中该逻辑“1”表示访问了页的第一个高速缓存行。1004所示的第二个加载访问是针对高速缓存行偏移为4的第五个高速缓存行的,使得将先前访问字段更新为000100b,将访问历史字段更新为0,…,0010001b,并且将跨距值更新为0100b(偏移4)。1006所示的第三个加载访问是针对高速缓存行偏移为2的第三个缓存行,使得将先前访问字段更新为000010b,将访问历史字段更新为0,…,0010101b,并且跨距值更新为0010b(偏移2)。应注意的是,利用被设置为表示正方向的0b的DIR来更新TRIGGER。POS字段和NEG字段自随着跨距值的各变化进行复位以来,各自保持为0000b。假定跨距值实际为2,则连续的访问继续以相似的方式更新字段,并且使POS增加以表示正方向。一旦检测到跨距相同的足够数量的连续加载访问,则设置STABLE信号。
图11是示出根据一个实施例的更新逻辑202的操作的流程图。更新逻辑202在第一方块1102中检测来自处理引擎106的指令,并且在下一方块1104中询问该指令是否是访问存储器位置的加载指令。如果不是,则操作循环回至方块1102,并且操作保持在方块1102和1104之间循环,直到检测到加载指令为止。在实际实现中,评价各指令的一位或多位以检测加载指令。在检测到加载指令的情况下,操作进入方块1106,其中在方块1106中,使用从加载指令的地址ADDR所撷取到的页地址PA来访问SRT 204。如图5所示,PA包括ADDR的用于标识正在访问的页的高位,并且比较器502将所提供的PA与SRT204中的各个页地址进行比较。如果没有找到PA的匹配条目,则如在下一方块1108中所判断出的,加载指令正在访问新的页。如果没有找到匹配条目,则操作进入方块1110,其中在该方块1110中,如前面针对加法/替换逻辑504所述,将新的条目添加到SRT 204,并且操作返回至方块1102以检测任何后续的加载指令。如图3所示的具有页地址PA0的条目所示,利用初始值填充新条目的字段。
相反,如果如方块1108中所判断出的是找到了匹配,则操作进入方块1112以更新匹配条目。如图5所示,将地址ADDR的高速缓存行地址CLA部分与匹配条目的当前先前访问值PRA进行比较,以确定向页的当前访问和上次访问之间的高速缓存行偏移OFF。如果OFF小于匹配条目的当前跨距值STR,则如虚线512所示,利用OFF更新跨距值。否则,条目的STR值保持不变。然后,如514所示,使用ADDR的CLA来替换先前访问字段的PRA值。此外,通过设定与当前正在访问的高速缓存行相关联的位来更新访问历史向量AHV。
一旦在方块1112中更新了条目,则操作进入方块1114,其中在该方块1114中,更新逻辑202向决策逻辑208设置DEC以进行计数,并且进一步决定是否设置TRIGGER以进行预取操作。此外,将加载信号LD和ADDR提供至预取器210。根据操作的模式以及是否设置了TRIGGER,预取器210使用ADDR来计算一个或多个预取地址。在下一方块1116中,更新逻辑202检测是否设置了TRIGGER,并且如果设置了TRIGGER,则更新匹配条目的POS字段、NEG字段和SIGN字段。特别地,评价DIR值并且使POS或NEG增加,并且可以基于更新后的POS值和NEG值来更新匹配条目的SIGN值。在下一方块1118中,如果检测到决策逻辑208所设置的、表示操作的稳定模式的STABLE信号,则更新逻辑202对匹配条目的稳定字段进行设定。然后,操作返回至方块1102以检测任何后续的加载指令。
图12是示出根据一个实施例的决策逻辑208的控制逻辑302的操作的流程图。参考图6所示的逻辑操作。操作在方块1202中循环,直到检测到更新逻辑202所设置的决策信号DEC为止。在设置了DEC的情况下,操作进入方块1204,其中在该方块1204中,控制逻辑302设置L指示,以向移位寄存器310和312加载与页地址PA相对应的条目的AHV。在下一方块1206,控制逻辑302设置S指示,以基于当前访问位置CAL使移位寄存器310和312各自分别使AHV的加载值左移和右移。然后,操作进入方块1208,其中在该方块1208中,控制逻辑302向跨距掩码逻辑304设置F指示,以基于相应的跨距值选择SMV。将SMV提供至正与逻辑314和负与逻辑316以有效地过滤发生移位的历史值,从而将过滤后的值分别提供至正1计数逻辑318和负1计数逻辑320。然后,操作进入方块1210,其中在该方块1210中,控制逻辑302向正1计数逻辑318和负1计数逻辑320设置CNT指示,以分别生成正计数值P和负计数值N,其中该正计数值P和负计数值N被提供至仲裁逻辑308。然后,操作进入方块1212,其中在该方块1212中,控制逻辑302向仲裁逻辑308设置ARB指示以评价P和N,从而如前面所述进行预取决策。然后,操作循环回至方块1202,以检测DEC的任何后续设置,并且重复进行操作。
图13是示出根据一个实施例的决策逻辑208的仲裁逻辑308的操作的流程图。参考图7所示的逻辑操作。操作在方块1302中循环,直到控制逻辑302检测到ARB指示为止。在提供ARB的情况下,操作进入方块1304,其中在该方块1304中,如果正计数P和负计数N中的任一个至少为TTH,则设置TRIGGER信号。在方块1306中,在负计数N大于正计数P的情况下,DIR被设置为逻辑“1”,否则DIR为逻辑“0”。在下一方块1308中,如果P和N的总和至少为SETH,则设置STABLE信号。在下一方块1310中,如果P和N的总和降至SDTH以下,则取消STABLE信号。操作返回至方块1302以检测下一ARB指示,并且重复进行操作。
图14是示出根据一个实施例的预取器210的操作的流程图。在第一方块1402中,询问是否设置了STABLE信号。如果没有设置STABLE信号,则操作进入方块1404以询问是否设置了TRIGGER信号。如果没有设置TRIGGER信号,则操作循环回至块1402,并且在STABLE和TRIGGER未被设置的情况下,操作在方块1402和1404之间循环。如果设置了TRIGGER而没有设置STABLE,则操作进入方块1406,其中在该方块1406中,使用ADDR值、STRIDE值和DIR值来计算预取地址。DIR值判断是将STRIDE与ADDR相加还是从ADDR中减去STRIDE来确定预取地址。在下一方块1408中,预取器210通过将来自系统存储器104的高速缓存行加载到高速缓冲存储器108中,来使用所计算出的预取地址进行预取操作。这样,处理引擎106尚未请求的、但根据所检测到的跨距模式而有可能请求的高速缓存行地址被预加载到高速缓冲存储器108中。如果被处理引擎106请求,则与系统存储器104相比,从高速缓冲存储器108中更快地撷取到该预加载的高速缓存行。然后,操作循环回至方块1402。每次设置了TRIGGER而没有设置STABLE时,将来自系统存储器104的高速缓存行预取到高速缓冲存储器108中以提高性能。
如果如在方块1402中所检测到的、设置了STABLE,则操作进入方块1410以询问是否设置了LD信号。尽管设置了STABE,也仅响应于处理引擎106的加载请求来进行稳定操作期间的预取。如果没有设置LD,则操作循环回至方块1402,并且操作在1402和1410之间循环,直到设置了LD或没有设置STABLE为止。应注意的是,在第一次设置STABLE时,有可能还设置了LD。在如方块1410中所检测到的、在设置了LD的情况下,操作进入方块1412,其中在该方块1412中,使用ADDR、STRIDE和SIGN来计算接下来的“X”个预取地址。SIGN表示跨距操作的方向,使得将STRIDE与ADDR相加X次或者从ADDR减去STRIDE X次,以确定接下来的X个预取地址。数字“X”是正整数,并且可以是默认值或者可以是以与TTH值、SETH值和SDTH值类似的方式可编程的。
在一个实施例中,X的默认值为3。例如,假定SIGN表示正方向并且X=3,则将STRIDE与ADDR相加以确定第一个预取地址,将STRIDE与第一个预取地址相加以确定第二个预取地址,然后将STRIDE与第二个预取地址相加以确定第三个预取地址。当然,以类似方式X次减去STRIDE,以确定表示负方向的SIGN的该负方向上的X个预取地址。
一旦计算出预取地址,则操作进入方块1414,以询问预取相对于处理引擎106的实际加载请求是否提前了“Y”次。数字“Y”是大于X的正整数,并且可以是默认值或者可以是与TTH值、SETH值和SDTH值类似的方式可编程的。在一个实施例中,Y与X乘以适当的倍数有关,诸如Y=2X等。应当理解,稳定操作可能是积极的,因而相对于处理引擎106所提交的实际加载请求太过提前的预取操作可能并不有利。这样,Y值比较提供了防止预取操作太过提前的机制。当然,可以根据特定实现来调整Y,并且在有需要的情况下可以使Y变大。如果操作的稳定模式期间的预取提前了Y次预取以上,则操作返回至方块1402,并且操作在操作的稳定模式期间循环,直到再次设置LD为止。操作从方块1414循环返回,直到预取操作没有提前Y次以上的预取操作为止。
如果如方块1414中所判断出的、稳定模式期间的预取操作没有提前Y次,则操作进入方块1416,其中在该方块1416中,使用所计算出的下一预取地址来进行预取操作。然后,操作进入方块1418,以判断是否进行了使用所计算出的X个预取地址的X次预取。如果没有,则操作循环回至方块1414,以进行多达X次预取,只要没有提前Y次即可。操作在方块1414、1416和1418之间循环,直到X次预取操作为止或者直到提前了Y次为止。一旦完成了X次预取,则操作返回至方块1402并且重复进行操作。在操作的稳定模式中,处理引擎106尚未请求的、但根据所检测到的被视为稳定的跨距模式而有可能请求的多达X个高速缓存行地址被预加载到高速缓冲存储器108中。如果被处理引擎106请求,则从高速缓冲存储器108中更快地撷取到预加载的高速缓存行,而不必访问系统存储器104。在操作的稳定模式中,将来自系统存储器104的多个高速缓存行预取到高速缓冲存储器108中以显著提高性能。
已呈现了前述说明,以使得本领域普通技术人员能够如在特定应用及其要求的上下文内所提供的那样实行和使用本发明。尽管已参考本发明的特定优选版本相当详细地说明了本发明,但还可进行并考虑其它版本和变化。针对优选实施例的各种变形对于本领域技术人员而言将是显而易见的,并且这里所定义的一般原理还可应用于其它实施例。例如,可以以包括逻辑装置或电路等的任何适当方式实现这里所述的电路。
本领域技术人员应当理解,在没有背离本发明的精神和范围的情况下,可以容易地使用所公开的概念和具体实施例作为用于设计或修改用于执行本发明的相同目的的其它结构的基础。因此,本发明并不意图局限于这里所示和所述的特定实施例,而是应当符合与这里所公开的原理和新颖特征一致的最宽范围。
相关申请的交叉引用
本申请要求2015年12月14日递交的美国临时申请62/266,855的优先权,在此通过引用包含其全部内容以用于所有的目的和用途。
Claims (31)
1.一种用于处理器的跨距参考预取器,包括:
访问逻辑,用于检测向存储页的高速缓存行的连续加载请求,确定所述连续加载请求中的各加载请求之间的跨距值并确定最小跨距值,并且更新用于对所述存储页中的已被访问的各高速缓存行进行标识的访问历史向量,其中,所述跨距值表示相对于当前页地址的高速缓存行偏移;
跨距掩码逻辑,用于基于所述最小跨距值来提供跨距掩码向量;
计数逻辑,用于利用所述跨距掩码向量来过滤所述访问历史向量,以确定正访问计数和负访问计数;
仲裁逻辑,用于在所述正访问计数和所述负访问计数中的任一个满足触发阈值的情况下触发预取操作,并且基于所述正访问计数和所述负访问计数的相对大小来指示存储器访问的方向;以及
预取单元,用于在被所述仲裁逻辑触发的情况下使用预取地址来进行所述预取操作,其中所述预取单元通过在所述仲裁逻辑所指示的方向上将加载请求地址与所述最小跨距值相结合来确定所述预取地址。
2.根据权利要求1所述的跨距参考预取器,其中,所述访问逻辑包括参考表,所述参考表用于存储所述存储页的页地址,其存储所述最小跨距值,用于存储用于对利用所述加载请求地址所访问的高速缓存行进行标识的先前访问值,并且存储所述访问历史向量。
3.根据权利要求2所述的跨距参考预取器,其中,所述访问逻辑还包括:
加法器,用于确定下一访问值和所述先前访问值之间的差,以确定下一跨距值;以及
比较器,用于将所述最小跨距值和所述下一跨距值进行比较,并且在所述下一跨距值小于所述最小跨距值的情况下,在所述参考表中利用所述下一跨距值替换所述最小跨距值作为更新后的最小跨距值,
其中,在所述参考表中,利用所述下一访问值替换所述先前访问值作为更新后的先前访问值。
4.根据权利要求2所述的跨距参考预取器,其中,所述访问逻辑还包括:
解码器,用于对所述加载请求地址的下一访问值进行解码,以提供用于对正在访问的下一高速缓存行进行标识的解码后的访问值;以及
或逻辑,用于对所述解码后的访问值与所述访问历史向量进行逻辑或,以更新所述访问历史向量。
5.根据权利要求1所述的跨距参考预取器,其中,所述访问逻辑包括参考表,所述参考表包括页地址条目的列、相应最小跨距值条目的列、用于对针对相应页地址最后访问的高速缓存行进行标识的相应先前访问值的列、以及相应访问历史向量的列。
6.根据权利要求5所述的跨距参考预取器,其中,所述访问逻辑还包括:
比较器,用于将下一页地址与所述参考表的所述页地址条目的列中所存储的各有效页地址进行比较;
更新逻辑,用于更新与同所述下一页地址相匹配的页地址相对应的条目行;以及
替换逻辑,用于在所述下一页地址不与所述参考表的所述页地址条目的列中所存储的任何有效页地址相匹配的情况下,向所述参考表添加新的条目行。
7.根据权利要求6所述的跨距参考预取器,其中,所述替换逻辑使用最近最少使用的替换策略来替换所述参考表中的包括所述下一页地址和相应初始值的有效条目行。
8.根据权利要求1所述的跨距参考预取器,其中,所述仲裁逻辑包括:
第一比较器,用于将所述正访问计数与所述触发阈值进行比较,并且设置表示该比较的第一值;
第二比较器,用于将所述负访问计数与所述触发阈值进行比较,并且设置表示该比较的第二值;以及
或逻辑,用于对所述第一值与所述第二值进行逻辑或,以提供用于触发所述预取操作的触发信号。
9.根据权利要求8所述的跨距参考预取器,其中,所述仲裁逻辑还包括第三比较器,所述第三比较器用于将所述正访问计数与所述负访问计数进行比较并且提供方向信号,其中所述方向信号在所述正访问计数小于所述负访问计数的情况下表示存储器访问的负方向,否则表示存储器访问的正方向。
10.根据权利要求1所述的跨距参考预取器,其中,
所述仲裁逻辑设置用以触发预取操作的触发信号,并且设置表示所述预取操作的方向的方向信号,
所述访问逻辑在每次设置所述方向信号时,仅使所述正访问计数和所述负访问计数中的一个值增加,并且基于所述正访问计数和所述负访问计数中的较大值来确定符号值,
所述仲裁逻辑包括:
加法器,用于将所述正访问计数和所述负访问计数相加,以提供访问总和;以及
比较器电路,用于将所述访问总和与稳定启用阈值进行比较,并且在满足所述稳定启用阈值的情况下设置稳定启用信号,以及
所述预取单元响应于所述稳定启用信号的设置,使用多个连续预取地址来进行相应的多个连续预取操作,其中,所述多个连续预取地址是通过在所述符号值所指示的方向上重复地将多个所述最小跨距值与所述加载请求地址相结合而确定的。
11.根据权利要求10所述的跨距参考预取器,其中,所述比较器电路包括:
第一比较器,用于将所述访问总和与所述稳定启用阈值进行比较,并且在满足所述稳定启用阈值的情况下设置稳定启用信号;
第二比较器,用于将所述访问总和与稳定禁用阈值进行比较,并且在满足所述稳定禁用阈值的情况下设置稳定禁用信号;以及
锁存电路,用于接收所述稳定启用信号和所述稳定禁用信号,并且设置表示操作的稳定模式的稳定信号。
12.根据权利要求10所述的跨距参考预取器,其中,所述访问逻辑包括参考表,所述参考表用于存储所述存储页的页地址、稳定值、所述最小跨距值、所述符号值、所述正访问计数、所述负访问计数、用于对利用所述加载请求地址所访问的高速缓存行进行标识的先前访问值、以及所述访问历史向量。
13.根据权利要求12所述的跨距参考预取器,其中,所述访问逻辑还包括更新逻辑,所述更新逻辑用于在设置所述稳定启用信号时切换所述稳定值,响应于所述方向信号的设置来使所述正访问计数和所述负访问计数中的一个值增加,并且更新所述符号值以仅反映所述正访问计数和所述负访问计数中的一个值。
14.根据权利要求10所述的跨距参考预取器,其中,所述预取单元对所述多个连续预取操作进行限制,以相对于所述连续加载请求提前不大于预定最大数量的量。
15.一种处理器,包括:
高速缓冲存储器;
处理逻辑,用于提交用以访问存储页的高速缓存行的多个加载请求;
访问逻辑,用于接收所述处理逻辑的所述多个加载请求,并且更新针对所述存储页的访问向量,其中所述访问逻辑确定所述多个加载请求的连续加载请求之间的最小跨距值,其中,所述跨距值表示相对于当前页地址的高速缓存行偏移;
跨距掩码逻辑,用于基于所述最小跨距值来提供掩码向量;
计数逻辑,用于将所述掩码向量与所述访问向量相结合以提供访问计数;
仲裁逻辑,用于在所述访问计数达到预定计数阈值的情况下触发预取操作;以及
预取器,用于使用通过将所述最小跨距值与所述多个加载请求中的最后一个加载请求的地址相结合所确定的预取地址来进行所述预取操作。
16.根据权利要求15所述的处理器,其中,所述访问逻辑包括:
参考表,用于存储用于对所述存储页内的第一个高速缓存行进行标识的先前访问值,并且存储所述最小跨距值;
加法器,用于确定所述先前访问值和用于对所述存储页内的第二个高速缓存行进行标识的下一访问值之间的差,以确定跨距偏移;以及
比较器,用于将当前最小跨距值与所述跨距偏移进行比较,以更新所述最小跨距值,
其中,针对所述多个加载请求中的各加载请求,利用所述下一访问值替换所述参考表中的所述先前访问值。
17.根据权利要求15所述的处理器,其中,所述访问向量包括用于对所述存储页中的相应多个高速缓存行的加载请求访问进行标识的多个位。
18.根据权利要求15所述的处理器,其中,所述跨距掩码逻辑包括查找表,所述查找表用于针对多个可能跨距值中的各可能跨距值,提供多个掩码向量其中之一。
19.根据权利要求15所述的处理器,其中,所述计数逻辑包括:
第一移位寄存器,用于使所述访问计数在第一方向上移位基于所述多个加载请求中的所述最后一个加载请求的相对位置的量,以提供正访问历史值;
第二移位寄存器,用于使所述访问计数在相反的第二方向上移位基于所述多个加载请求中的所述最后一个加载请求的所述相对位置的量,以提供负访问历史值;
与逻辑,用于对所述掩码向量与所述正访问历史值和所述负访问历史值进行逻辑与;以及
计数逻辑单元,用于对所述与逻辑的输出进行计数,以提供正访问计数和负访问计数。
20.根据权利要求15所述的处理器,其中,
所述计数逻辑确定正访问计数和负访问计数,以及
所述仲裁逻辑包括:
第一比较器,用于将所述正访问计数与所述预定计数阈值进行比较,并且设置表示该比较的第一值;
第二比较器,用于将所述负访问计数与所述预定计数阈值进行比较,并且设置表示该比较的第二值;
或逻辑,用于对所述第一值和所述第二值进行逻辑或,以提供表示触发所述预取操作的触发信号;以及
第三比较器,用于将所述正访问计数与所述负访问计数进行比较,并且提供表示正方向和负方向其中之一的方向信号。
21.根据权利要求15所述的处理器,其中,
所述计数逻辑确定正访问向量值和负访问向量值,将所述掩码向量与所述正访问向量值和所述负访问向量值各自相结合,并且提供正访问计数和负访问计数,
所述仲裁逻辑基于所述正访问计数和所述负访问计数来确定所述预取操作的方向,
所述仲裁逻辑基于所述正访问计数和所述负访问计数来指示所述加载请求的稳定条件,以及
在指示了所述稳定条件的情况下,所述预取器通过将多个所述最小跨距值与最后一个加载请求的地址相结合,来使用连续预取地址进行连续预取操作。
22.根据权利要求21所述的处理器,其中,所述仲裁逻辑包括:
加法器,用于将所述正访问计数和所述负访问计数相加,以提供访问总和;
第一比较器,用于将所述访问总和与稳定启用阈值进行比较,并且在满足所述稳定启用阈值的情况下设置稳定启用信号;
第二比较器,用于将所述访问总和与稳定禁用阈值进行比较,并且在满足所述稳定禁用阈值的情况下设置稳定禁用信号;以及
锁存电路,用于接收所述稳定启用信号和所述稳定禁用信号,并且设置表示操作的稳定模式的稳定信号。
23.一种用于将数据从存储器预取到处理器中的方法,包括以下步骤:
检测向存储页的高速缓存行的连续加载请求;
确定所述连续加载请求中的各加载请求之间的跨距值,其中,所述跨距值表示相对于当前页地址的高速缓存行偏移;
确定最小跨距值;
更新用于对所述存储页中的已被访问的各高速缓存行进行标识的访问历史向量;
基于所述最小跨距值来确定跨距掩码向量;
利用所述跨距掩码向量来过滤所述访问历史向量,并且确定访问计数;以及
在所述访问计数达到预定计数阈值的情况下进行预取操作。
24.根据权利要求23所述的方法,其中,确定跨距值的步骤包括:
针对各连续加载请求更新所存储的先前访问值;以及
将下一访问值与所存储的先前访问值进行比较。
25.根据权利要求23所述的方法,其中,确定最小跨距值的步骤包括:
针对各连续加载请求确定下一 跨距值;
将下一跨距值与当前所存储的最小跨距值进行比较;以及
在所述下一跨距值小于当前所存储的最小跨距值的情况下,利用所述下一跨距值更新该最小跨距值。
26.根据权利要求23所述的方法,其中,更新访问历史向量的步骤包括设定与所述存储页中的当前所访问的高速缓存行相对应的位。
27.根据权利要求23所述的方法,其中,确定跨距掩码向量的步骤包括选择多个跨距掩码向量其中之一,其中所述多个跨距掩码向量中的各跨距掩码向量与多个可能跨距值中的一个相应可能跨距值相对应。
28.根据权利要求23所述的方法,其中,还包括以下步骤:
使所述访问历史向量在第一方向上移位,以提供正访问历史向量;以及
使所述访问历史向量在相反的第二方向上移位,以提供负访问历史向量,
其中,过滤的步骤包括:利用所述跨距掩码向量来过滤所述正访问历史向量以提供正计数,并且利用所述跨距掩码向量来过滤所述负访问历史向量以提供负计数,
进行预取操作的步骤包括:在所述正计数和所述负计数中的任一个达到所述预定计数阈值的情况下,进行所述预取操作,以及
基于所述正计数和所述负计数的比较来确定所述预取操作的方向。
29.根据权利要求28所述的方法,其中,还包括以下步骤:
将所述正计数和所述负计数相加,以确定总和计数;
将所述总和计数与稳定启用阈值进行比较;以及
在所述总和计数达到所述稳定启用阈值的情况下,以稳定模式进行工作。
30.根据权利要求29所述的方法,其中,以稳定模式进行工作的步骤包括:重复地相加所述最小跨距值以确定连续预取地址,并且针对所述连续预取地址中的各预取地址进行预取操作。
31.根据权利要求29所述的方法,其中,还包括以下步骤:
将所述总和计数与稳定禁用阈值进行比较;以及
在所述总和计数降为所述稳定禁用阈值的情况下,终止以稳定模式进行工作。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562266855P | 2015-12-14 | 2015-12-14 | |
US62/266,855 | 2015-12-14 | ||
US15/003,050 | 2016-01-21 | ||
US15/003,050 US9747215B2 (en) | 2015-12-14 | 2016-01-21 | Stride reference prefetcher |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106776371A CN106776371A (zh) | 2017-05-31 |
CN106776371B true CN106776371B (zh) | 2019-11-26 |
Family
ID=58877406
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611122755.4A Active CN106776371B (zh) | 2015-12-14 | 2016-12-08 | 跨距参考预取器、处理器和将数据预取到处理器的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106776371B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10642742B2 (en) * | 2018-08-14 | 2020-05-05 | Texas Instruments Incorporated | Prefetch management in a hierarchical cache system |
CN109284240B (zh) * | 2018-10-15 | 2020-06-16 | 上海兆芯集成电路有限公司 | 存储器集成电路及其预取方法 |
CN109446111B (zh) * | 2018-10-15 | 2021-01-26 | 上海兆芯集成电路有限公司 | 存储器集成电路及其预取地址决定方法 |
CN111143242B (zh) * | 2018-11-02 | 2022-05-10 | 华为技术有限公司 | 一种缓存预取方法和装置 |
CN111651120B (zh) * | 2020-04-28 | 2023-08-08 | 中国科学院微电子研究所 | 预取数据的方法及装置 |
CN112256205A (zh) * | 2020-10-28 | 2021-01-22 | 中国科学院微电子研究所 | 非易失缓存数据预取方法、装置、电子设备及存储介质 |
CN115858430B (zh) * | 2023-02-02 | 2023-05-09 | 摩尔线程智能科技(北京)有限责任公司 | 图形处理器的访存优化方法、设备及计算机可读介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6606688B1 (en) * | 1999-08-24 | 2003-08-12 | Hitachi, Ltd. | Cache control method and cache controller |
CN1484788A (zh) * | 2000-12-29 | 2004-03-24 | 英特尔公司 | 根据未命中距离将数据预取到高速缓存器中的系统和方法 |
CN1849591A (zh) * | 2002-11-22 | 2006-10-18 | 皇家飞利浦电子股份有限公司 | 使用高速缓存未命中模式来寻址跨距预测表 |
CN101882063A (zh) * | 2009-08-07 | 2010-11-10 | 威盛电子股份有限公司 | 微处理器以及预取数据至微处理器的方法 |
CN102156633A (zh) * | 2011-04-18 | 2011-08-17 | 北京北大众志微系统科技有限责任公司 | 预执行指导的数据预取方法及系统 |
CN102662638A (zh) * | 2012-03-31 | 2012-09-12 | 北京理工大学 | 一种支持帮助线程预取距离参数的阈值边界选取方法 |
CN104636270A (zh) * | 2013-11-14 | 2015-05-20 | Arm有限公司 | 数据处理装置中的自适应预取 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7099999B2 (en) * | 2003-09-30 | 2006-08-29 | International Business Machines Corporation | Apparatus and method for pre-fetching data to cached memory using persistent historical page table data |
FR2860896A1 (fr) * | 2003-10-14 | 2005-04-15 | St Microelectronics Sa | Procede d'arbitrage de l'acces a une ressource partagee |
US20130013867A1 (en) * | 2011-07-06 | 2013-01-10 | Advanced Micro Devices, Inc. | Data prefetcher mechanism with intelligent disabling and enabling of a prefetching function |
-
2016
- 2016-12-08 CN CN201611122755.4A patent/CN106776371B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6606688B1 (en) * | 1999-08-24 | 2003-08-12 | Hitachi, Ltd. | Cache control method and cache controller |
CN1484788A (zh) * | 2000-12-29 | 2004-03-24 | 英特尔公司 | 根据未命中距离将数据预取到高速缓存器中的系统和方法 |
CN1849591A (zh) * | 2002-11-22 | 2006-10-18 | 皇家飞利浦电子股份有限公司 | 使用高速缓存未命中模式来寻址跨距预测表 |
CN101882063A (zh) * | 2009-08-07 | 2010-11-10 | 威盛电子股份有限公司 | 微处理器以及预取数据至微处理器的方法 |
CN102156633A (zh) * | 2011-04-18 | 2011-08-17 | 北京北大众志微系统科技有限责任公司 | 预执行指导的数据预取方法及系统 |
CN102662638A (zh) * | 2012-03-31 | 2012-09-12 | 北京理工大学 | 一种支持帮助线程预取距离参数的阈值边界选取方法 |
CN104636270A (zh) * | 2013-11-14 | 2015-05-20 | Arm有限公司 | 数据处理装置中的自适应预取 |
Also Published As
Publication number | Publication date |
---|---|
CN106776371A (zh) | 2017-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106776371B (zh) | 跨距参考预取器、处理器和将数据预取到处理器的方法 | |
CN100517274C (zh) | 高速缓冲存储器及其控制方法 | |
TWI506434B (zh) | 預取單元、資料預取方法、電腦程式產品以及微處理器 | |
CN102498477B (zh) | Tlb预取 | |
US7899993B2 (en) | Microprocessor having a power-saving instruction cache way predictor and instruction replacement scheme | |
US7996624B2 (en) | Prefetch unit | |
US20080052488A1 (en) | Method for a Hash Table Lookup and Processor Cache | |
JP4829191B2 (ja) | キャッシュシステム | |
US9747215B2 (en) | Stride reference prefetcher | |
KR20210019584A (ko) | 다중 테이블 분기 타겟 버퍼 | |
WO2006051513A2 (en) | Cache with prefetch | |
US11301250B2 (en) | Data prefetching auxiliary circuit, data prefetching method, and microprocessor | |
JP4009306B2 (ja) | キャッシュメモリおよびその制御方法 | |
US8266381B2 (en) | Varying an amount of data retrieved from memory based upon an instruction hint | |
US6859860B2 (en) | Control circuits comparing index offset and way for cache system and method of controlling cache system | |
US10719327B1 (en) | Branch prediction system | |
JP2003140965A (ja) | 分散共有メモリ型並列計算機および命令スケジューリング方法 | |
JP2006031710A (ja) | データ処理システム、方法およびキャッシュシステム | |
US7900019B2 (en) | Data access target predictions in a data processing system | |
US20060026360A1 (en) | Purging without write-back of cache lines containing spent data | |
KR20230052821A (ko) | 프리페칭 | |
CN112699058B (zh) | 适用于循环神经网络的寻址方法、装置、加速器以及介质 | |
US8255632B2 (en) | Pre-fetch control apparatus | |
JP2008009857A (ja) | キャッシュ制御回路およびプロセッサシステム | |
CN101887360A (zh) | 微处理器的数据预先撷取器及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203 Patentee after: Shanghai Zhaoxin Semiconductor Co.,Ltd. Address before: Room 301, 2537 Jinke Road, Zhangjiang hi tech park, Pudong New Area, Shanghai 201203 Patentee before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd. |