CN115098166A - 边界框预取指单元及其方法 - Google Patents

边界框预取指单元及其方法 Download PDF

Info

Publication number
CN115098166A
CN115098166A CN202210690729.0A CN202210690729A CN115098166A CN 115098166 A CN115098166 A CN 115098166A CN 202210690729 A CN202210690729 A CN 202210690729A CN 115098166 A CN115098166 A CN 115098166A
Authority
CN
China
Prior art keywords
prefetch
state
pointer
cache
entry
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.)
Pending
Application number
CN202210690729.0A
Other languages
English (en)
Inventor
道格拉斯·R·瑞德
阿卡什·多拉塔·赫巴尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
St Tour Technology
Original Assignee
St Tour Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by St Tour Technology filed Critical St Tour Technology
Publication of CN115098166A publication Critical patent/CN115098166A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1021Hit rate improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请公开了边界框预取指单元及其方法。一种微处理器中的边界框预取指单元,所述边界框预取指单元包括:存储,其包括用于存储与加载请求相关联的相应多个访问流的状态信息的多个活跃预取指器状态条目,以及相应多个预测逻辑;以及预取指器状态高速缓存,其包括与活跃预取指器状态条目中的任一个都不匹配的多个预取指器状态条目。

Description

边界框预取指单元及其方法
技术领域
本发明一般涉及微处理器,尤其涉及微处理器中的预取指。
背景技术
大多数现代计算机系统包括进行执行软件程序所需的计算的微处理器。计算机系统还包括连接到微处理器(或在微处理器内部)的其他装置,诸如存储器等。存储器存储要由微处理器执行的软件程序指令。存储器还存储程序指令操纵以实现程序的期望功能的数据。
计算机系统中在微处理器外部(或在处理器核外部)的装置(诸如存储器等)通过处理器总线直接或间接地连接到微处理器(或核)。处理器总线包括使得微处理器能够以相对大的块传输数据的信号集合。当微处理器执行对存储在存储器中的数据进行计算的程序指令时,微处理器使用处理器总线将数据从存储器取指到微处理器中。类似地,微处理器使用处理器总线将计算结果写回到存储器。
从存储器取指数据或将数据写入存储器所需的时间比微处理器对数据进行计算所需的时间大许多倍。因此,微处理器无效地等待从存储器中取指数据。为了减少这个问题,现代微处理器包括至少一个高速缓存存储器。高速缓存存储器或高速缓存是微处理器(或处理器核)内部的存储器--通常比系统存储器小得多--其将数据的子集存储在系统存储器中。当微处理器执行引用数据的指令时,微处理器检查数据是否存在于高速缓存中并且是有效的。如果是,则可以比必须从系统存储器检索数据的情况更快地执行指令,这是因为数据已经存在于高速缓存中。也就是说,当使用处理器总线将数据从存储器取指到高速缓存时,微处理器不必等待。微处理器检测到数据存在于高速缓存中并且有效的情况通常被称为高速缓存命中。所引用的数据不存在于高速缓存中的情况通常被称为高速缓存未命中。当所引用的数据已经在高速缓存存储器中时,通过避免从外部存储器检索数据所需的额外时钟周期,实现了显著的时间节省。
经由预取指单元(也称为预取指器)的高速缓存预取指是由微处理器使用以通过在处理器实际需要数据或指令之前将指令或数据从外部存储器取指到高速缓存存储器中来进一步提升运行性能的技术。成功地预取指数据避免了当必须从外部存储器检索数据时遇到的等待时间。
在预取指中存在基本的折衷。如上所述,预取指可以通过减少等待时间(通过在实际需要数据之前已经将数据取指到高速缓存存储器中)来改善性能。另一方面,如果预取指太多信息(例如,太多高速缓存行),则预取指单元的效率降低,并且其他系统资源和带宽可能负担过重。此外,如果高速缓存已满,则将新的高速缓存行预取指到该高速缓存中将导致从高速缓存中驱逐另一高速缓存行。因此,高速缓存中的因为先前需要而在高速缓存中的行可能被仅将来可能需要的行驱逐。
在一些微处理器中,高速缓存实际上由多个高速缓存组成。多个高速缓存被布置在多个级的层级结构中。例如,微处理器可以具有两个高速缓存,称为第一级(L1)高速缓存和第二级(L2)高速缓存。L1高速缓存比L2高速缓存更靠近微处理器的计算元件。也就是说,L1高速缓存能够比L2高速缓存更快地向计算元件提供数据。L2高速缓存通常比L1高速缓存更大并且具有更多的存储资源。一些微处理器可以具有第三高速缓存(L3),其可以大于L2高速缓存。
基于高速缓存未命中,取指时间随着从L1、L2、L3高速缓存和系统存储器进行取指而增加(例如,来自L2的10-20个时钟周期,来自L3的20-30个时钟周期),因此从等待时间的角度来看,期望不仅智能地将数据存储在适当的高速缓存中,而且智能地预取指数据。
发明内容
在一个实施例中,一种微处理器中的边界框预取指单元,所述边界框预取指单元包括:存储,其包括多个活跃预取指器状态条目和相应的多个预测逻辑,其中所述多个活跃预取指器状态条目用于存储与加载请求相关联的相应多个访问流的状态信息;以及预取指器状态高速缓存,其包括与活跃预取指器状态条目中的任何活跃预取指器状态条目都不匹配的多个预取指器状态条目。
通过审查以下附图和详细描述,本发明的其它系统、方法、特征和优点对于本领域技术人员将是或者将变得明显。所有这些附加系统、方法、特征和优点旨在包括在本说明书内、在本发明的范围内,并且受到所附权利要求的保护。
附图说明
参考以下附图,可以更好地理解本发明的各个方面。不必按比例绘制附图中的组件,而是将重点放在清楚地例示本发明的原理上。此外,在附图中,相同的附图标记在多个视图中表示相应部件。
图1是示出实现预取指器状态高速缓存(PSC)的实施例的示例微处理器的框图。
图2是示出实现具有PSC的边界框预取指单元的实施例的示例L2高速缓存的框图。
图3A-3B是示出边界框预取指的绘图。
图4是示出根据具有PSC的边界框预取指单元的实施例的用于跟踪访问流的状态信息以实现预取指的预取指器状态条目和相关联的预测逻辑以及预取指器状态高速缓存的实施例的框图。
图5是示出具有PSC的边界框预取指单元的一般操作方法的流程图。
图6是根据具有PSC的边界框预取指单元的实施例进一步示出包括多个活跃预取指器状态条目和相应预测逻辑的边界框预取指单元以及包括多个预取指器状态条目而没有相应预测逻辑的PSC的示意图。
图7是示出具有PSC的边界框预取指单元的实施例的用于管理与加载请求相关联的多个访问流的预取指器状态条目的示例方法的实施例的流程图。
图8是示出具有PSC的边界框预取指单元的实施例的用于管理预取指器状态条目的另一示例方法的实施例的流程图。
具体实施方式
公开了微处理器的具有预取指器状态高速缓存(PSC)的边界框预取指单元和相关联的方法的某些实施例,其增加存储并因此跟踪包括由边界框预取指单元接收的加载请求的访问流的状态信息的容量,与预测逻辑的任何伴随增加解耦。在一个实施例中,边界框预取指单元包括具有多个预取指器状态条目的存储,各个预取指器状态条目用于主动跟踪与对相应页或存储器区域(诸如4千字节(KB)存储器区域)的加载请求相关联的访问流。这样的预取指器状态条目在本文中也被称为活跃预取指器状态条目。预取指器状态条目也可被称为流条目(例如,相应访问流的状态信息)。边界框预取指单元还包括在预取指器状态高速缓存的方式中的附加存储。预取指器状态高速缓存包括多个预取指器状态条目(区别于活跃预取指器状态条目),其用于当与任何活跃预取指器状态条目都不匹配的加载进入具有PSC的边界框预取指单元并且利用了所有活跃预取指器状态条目时存储访问流的状态信息。预取指器状态高速缓存不具有相应的预测逻辑,并且至少部分地用于保留被驱逐的活跃预取指器状态条目(例如,由于陈旧或置信度不足)的状态信息以及还未建立置信度以有资格作为活跃预取指器状态条目的访问流的状态信息。
简而言之,边界框预取指单元包括具有多个预取指器状态条目(例如,用于存储状态信息)和用于跟踪相应的多个页的访问流并生成预取指的相应多个控制逻辑(例如,预测逻辑)的存储,各个页与相应的存储器区域相关联。例如,预取指器状态条目和相应的逻辑各自用于各个相应页(例如,物理存储器的一个4千字节(KB)页)的模式匹配和预取指生成。如下面进一步描述的,一般地,边界框预取指单元接收第一级高速缓存数据和指令(例如,L1D和L1I)加载请求作为进入第二级高速缓存的访问流的一部分,各个加载请求被解码成4KB对齐的页地址区域,以使得边界框预取指单元能够确定多个存储中的预取指器状态条目是否已经跟踪传入的访问流。如果预取指器状态条目之一已经跟踪该访问流(即,活跃的预取指器状态条目),则加载请求更新该匹配的预取指器状态条目中的状态信息,并且相应的预测逻辑可以决定生成一些预取指作为结果,其中相应的预取指请求通过仲裁器进入队列,然后进入标签流水线,如下面进一步描述的。
常规预取指器的一个问题围绕以下事实:要跟踪的不同访问流的数量与由边界框预取指单元维持的多个存储中的活跃预取指器状态条目的数量成正比,这是因为使用包括流访问的方向或趋势、已经请求了哪些高速缓存行、已经要求请求了哪些高速缓存行、已经预取指了哪些高速缓存行、模式、最大和最小指针以及其他状态信息的状态信息来生成预取指。如果多个存储仅包含例如四个预取指器状态条目,则这意味着边界框预取指单元被限制在每次可以生成预取指时跟踪四个访问流(例如,每个4KB页)。超过四个访问流,例如五个访问流,最好的情况下,边界框预取指单元不会生成1/5的预取指(因为1/5的流访问将与对应于该页的活跃预取指器状态条目不匹配)。出现最坏的情况,其中边界框预取指单元试图针对例如四个访问流建立置信度,然后在引入第五访问流的情况下,驱逐预取指器状态条目之一以有利于第五访问流,从而需要在引入需要驱逐的又一个流之前建立置信度和状态信息,或者需要重新引入被驱逐的预取指器状态条目,并且再次需要建立状态信息和置信度。在一些情况下,新访问流相对于其他活跃访问流可能没有表现出局部性,并且实际上,可能已经驱逐了预取指器状态条目,其为增加置信度的预取指提供了基础。实际上,这种周转的一个可能结果是没有生成任何预取指或令人满意的置信度的预取指。
在软件级别看到类似的问题,其中逻辑试图优化的软件具有比预取指器状态条目更多的活跃流。例如,如果处理器正在运行四个应用,并且操作系统在四个应用之间以循环方式调度,则应用之间的切换可能导致预取指的质量和/或量目的差异。切换导致状态信息的驱逐,并且因此需要针对被驱逐的条目再次建立状态信息和置信度。
解决容量问题(并跟踪尽可能多的访问流)的一种机制是增加预取指器状态条目的量。然而,在过去,这种增加的存储容量伴随着与各个预取指器状态条目相关联的预测逻辑的复杂性和数量的增加。换句话说,改进用于跟踪访问流的容量的增长涉及在预取指器状态条目的数量和相应的预测逻辑方面的二维增长。相比之下,具有预取指器状态高速缓存的边界框预取指单元的某些实施例提供增加数量的预取指器状态条目以跟踪更多访问流,而不添加预测逻辑。
已经总结了本发明的具有PSC的边界框预取指单元的某些特征,现在将详细参考如附图中所例示的具有PSC的边界框预取指单元的描述。虽然将结合这些附图来描述具有PSC的边界框预取指单元,但并不意在将其限制于这里所公开的实施例。也就是说,虽然本发明易于进行各种修改和替代形式,但是其特定实施例在附图中通过示例的方式示出,并且这里将被详细描述成足以使本领域技术人员理解。然而,应该理解,附图及其详细描述不意在将本发明限制于所公开的特定形式。相反,意图是覆盖落入如所附权利要求所限定的本发明的精神和范围内的所有修改、等同项和替代。如在本申请中所使用的,单词“可以”以允许的意义(即,意味着有可能)而不是强制的意义(即,意味着必须)被使用。类似地,单词“包括”意味着包括但不限于。
各种单元、模块、电路、逻辑或其它组件可被描述为“被配置为”进行一个或多个任务。在这样的上下文中,“被配置为”是对结构的广泛叙述,其一般意味着“具有在操作期间进行或能够进行一个或多个任务的电路或其它物理结构”。电路可以是专用电路、或在编码指令的控制下操作的更通用处理电路。也就是说,在描述本发明的各种实现的某些方面或特征时,这里可以使用诸如“单元”、“模块”、“电路”、“逻辑”和“组件”等的术语。本领域技术人员将理解,利用电路实现相应的特征,无论该电路是专用电路还是在微编码指令控制下操作的更通用电路。
另外,单元/模块/电路/逻辑/组件可被配置为即使在单元/模块/电路/逻辑/组件当前不处于操作中的情况下也进行任务。叙述被配置为进行一个或多于一个任务的单元/模块/电路/逻辑/组件明确不旨在针对该单元/模块/电路/逻辑/组件进行功能性限定。在这方面,本领域技术人员将理解,电路元件的特定结构或互连通常将由设计自动化工具的编译器(诸如寄存器传送语言(RTL)编译器)确定。RTL编译器在与汇编语言代码非常相似的脚本上运行,以将该脚本编译成用于最终电路的布局或制造的形式。
也就是说,使用更高级的软件工具来设计(诸如本发明的那些)集成电路以对电路的期望功能操作进行建模。众所周知,“电子设计自动化”(或EDA)是一类用于设计诸如集成电路等的电子系统的软件工具。EDA工具还用于将设计功能编程到现场可编程门阵列(FPGA)中。使用诸如Verilog和超高速集成电路(例如VHDL)等的硬件描述符语言(HDL)来创建电路的高级表示,其中根据该高级表示可以推断出较低级表示和最终实际布线。实际上,由于现代半导体芯片可以具有数十亿个组件,因此EDA工具被认为是对于其设计而言必不可少的。在实践中,电路设计者使用诸如C/C++等的编程语言来指定操作功能。EDA软件工具将该指定功能转换为RTL。然后,硬件描述符语言(例如Verilog)将RTL转换为门的离散网表。该网表定义了由例如代工厂等生产的实际电路。实际上,这些工具因其在促进电子和数字系统的设计过程中的作用和用途而被众所周知并理解,因此这里无需描述。
图1是示出实现具有PSC的边界框预取指单元的实施例的示例微处理器的框图。如本文将描述的,本发明涉及一种经由状态信息的增加存储而不添加预测逻辑来实现多个访问流的跟踪的改进机制。下面描述一个示例架构,其中可以利用本发明的具有PSC的边界框预取指单元。就此而言,现在参考图1,图1是示出多核微处理器100的图。如本领域普通技术人员从本文提供的描述将理解的,本发明可以以各种电路配置和架构来实现,并且图1所示的架构仅仅是许多合适的架构中的一种。具体地,在图1所示的实施例中,微处理器100是八核处理器,其中核被枚举为核0 110_0至核7 110_7。在所示实施例中,省略了许多电路组件和细节,这些组件和细节与理解本发明没有密切关系。如本领域普通技术人员将理解的,各个处理核(110_0至110_7)包括在整个微处理器100中复制的某些相关或伴随电路。各个这样的相关子电路在所示实施例中表示为片。在八个处理核110_0至110_7的情况下,相应地存在八个片102_0至102_7。本文未描述的其他电路仅表示为“其他片逻辑”140_0至140_7。
在所示实施例中,采用三级高速缓存系统,其包括一级(L1)高速缓存、二级(L2)高速缓存和三级(L3)高速缓存。L1高速缓存被分成数据高速缓存和指令高速缓存这两者,分别表示为L1D和L1I。L2高速缓存也驻留在核上,这意味着L1高速缓存和L2高速缓存这两者都与各个片的核在相同的电路中。也就是说,各个片的各个核具有其自己的专用L1D、L1I和L2高速缓存。在核外部,但在各个片内是L3高速缓存。在一个实施例中,L3高速缓存130_0至130_7(在本文中也统称为130)是分布式高速缓存,这意味着L3高速缓存的1/8驻留在片0102_0中,L3高速缓存的1/8驻留在片1 102_1中,等等。在一个实施例中,各个L1高速缓存的大小为32k,各个L2高速缓存的大小为256k,并且L3高速缓存的各个片的大小为2兆字节。因此,L3高速缓存的总大小是16兆字节。注意,在一些实施例中可以使用其他单独或聚合高速缓存大小。
在各个片中提供总线接口逻辑120_0至120_7,以管理来自不同片之间的各种电路组件的通信。如图1所示,通信总线190用于允许各种电路片之间以及与非核电路160的通信。非核电路160仅表示在处理器芯片上的附加电路,但不是与各个片相关联的核电路的一部分。与各个所示的片一样,非核电路160包括总线接口电路162。还示出了用于与处理器外(芯片外)存储器180交互的存储器控制器164。最后,其他非核逻辑166由块广义地表示,其表示可以被包括作为非核处理器电路的一部分的其他电路(并且再次,为了理解本发明,不需要对其进行描述)。
为了更好地说明一些电路组件的某些内部和外部通信,将呈现以下示例。该示例示出了与核6高速缓存中的假设的加载未命中相关联的通信。也就是说,该假设假定处理核6 110_6正在执行请求在假设地址1000处加载数据的代码。当遇到这样的加载请求时,系统首先在L1D 114_6中进行查找以查看该数据是否存在于L1D高速缓存中。假定数据不在L1D高速缓存中,则在L2高速缓存112_6中进行查找。再次,假定数据不在L2高速缓存中,则进行查找以查看数据是否存在于L3高速缓存中。如上所述,L3高速缓存是分布式高速缓存,因此如果数据实际上驻留在L3高速缓存中,则系统首先需要确定数据应该驻留在L3高速缓存的哪个片中。如已知的,可以使用散列函数(其仅仅是位的异或)来进行该处理,以获得三位地址(足以识别数据存储在哪个片-片0至片7中)。
与该示例一致,假定该散列函数导致指示为数据(如果存在于L3高速缓存中)将存在于L3高速缓存的驻留在片7中的该部分中。然后,通过总线接口120_6和120_7从片6 102_6的L2高速缓存到存在于片7 102_7中的L3高速缓存进行通信。该通信在图中由带圆圈的数字1表示。如果数据存在于L3高速缓存中,则其将从L3高速缓存130_7通信回L2高速缓存112_6。然而,并且在该示例中,假定数据也不在L3高速缓存中,从而导致高速缓存未命中。因此,通过存储器控制器164,从L3高速缓存130_7通过总线接口7 120_7通过非核总线接口162到芯片外存储器180进行通信。该通信在图中由带圆圈的数字2表示。然后,将包括驻留在地址1000处的数据的高速缓存行从芯片外存储器180通过存储器控制器164和非核总线接口162通信回L3高速缓存130_7中。该通信在图中由带圆圈的数字3表示。在将该数据写入L3高速缓存之后,然后通过总线接口120_7和120_6将其通信到请求核,即核6 110_6。该通信在图中由带圆圈的数字4表示。
在这一点上,一旦加载请求已经完成,该数据将驻留在高速缓存L3、L2和L1D各自中。本发明涉及一种改进的边界框预取指单元,其驻留在L2高速缓存112_0至112_7各自中。在所示实施例中,如上所述,L1高速缓存是相对小的大小的高速缓存。因此,对于过于激进地预取指到L1高速缓存中可能存在性能和带宽后果。在这方面,更复杂或激进的预取指器通常消耗芯片中更多的硅基板面,以及更多的功率和其他资源。此外,从上述示例中,过度预取指到L1高速缓存中通常将导致更多的未命中和驱逐。这将消耗附加的电路资源,以及用于将数据预取指到相应的L1高速缓存中所需的通信的带宽资源。更具体地,由于所示实施例共用由虚线190表示的片上通信总线,因此过多的通信将消耗附加的带宽,潜在地不必要地延迟微处理器100的其他部分所需的其他通信或资源。
在一个实施例中,L1I和L1D高速缓存这两者都小于L2高速缓存,并且需要能够更快地满足数据请求。因此,在各个片的L1I和L1D高速缓存中实现的预取指器优选地是相对简单的预取指器。此外,L1D高速缓存需要能够流水线化请求。因此,在L1D中放置附加的预取指电路可能是相对繁重的。此外,复杂的预取指器可能会妨碍其他必要的电路。关于各个L1高速缓存的高速缓存行,在一个实施例中,高速缓存行是64字节。因此,每个时钟周期可以加载64字节的加载数据。
如上所述,在一个实施例中,L2高速缓存的大小优选地为256KB。具有比在L1高速缓存中实现的预取指单元更大的面积,在L2高速缓存中实现的边界框预取指单元可能更复杂和激进。通常,在L2高速缓存中实现更复杂的预取指器导致针对推测性地引入数据的较少的性能损失(例如,与L1预取指器相比)。因此,本发明的具有PSC的边界框预取指单元在L2高速缓存中实现。
在描述本发明的具有PSC的边界框预取指单元的细节之前,首先参考图2,图2是示出实现具有PSC的边界框预取指单元232的实施例的示例L2高速缓存112的框图。具体地,图2中所示的组件描绘了具有PSC的边界框预取指单元232和促进L2高速缓存112内以及与图1中所示的系统中的其他组件的通信的结构的其他基本特征。如图所示,存在四个主框210、220、230和240,其示出了L1D接口210、L1I接口220、预取指接口230和外部接口240。总的来说,这些框表示通过L2高速缓存112对事务或请求进行排队和跟踪的电路。如图1所示,在各个核中,存在L1D和L1I高速缓存这两者,以及更高级的L2高速缓存。L1D接口210和L1I接口220使L2高速缓存与L1高速缓存交互。例如,这些接口将加载队列、驱逐队列和查询队列实现为促进该通信的机制。预取指接口230是促进与本发明的具有PSC的边界框预取指单元232相关联的通信的电路,这将在下面更详细地描述。在一个实施例中,预取指接口230实现具有PSC的边界框预取指单元232和流预取指器这两者,并且可以基于它们的相关联算法的结果进行预取指确定。如已知的,预取指器的设计通常涉及预取指器可以多快地预热(例如,在生成预取指之前需要建立多少状态)与预取指器多么激进地做出请求之间的折衷。作为说明,边界框预取指器在模式被建立之前可能花费相对长的时间来预热(例如,5-8个请求),然而一旦模式被建立,就存在关于模式是预取指所基于的良好模式的相对良好的置信度,并且因此可以相对激进地进行预取指。另一方面,流预取指器的复杂程度低得多,由此在生成预取指之前可能仅需要三个访问来预热(例如,建立状态)。实际上,流预取指器基本上寻找顺序访问之间的重复步幅,并根据该步幅生成预取指。此外,在新请求进入当前未被跟踪的新页的情况下,流预取指器可以进行下一行预取指。总的来说,这样的特征使得流预取指器能够在开始新页时非常早地开始预取指,尽管预取指具有较低的置信度,并且因此不那么激进地发出。存在可用于流预取指单元的许多已知的流预取指算法,在此省略对其的讨论,因为对于描述作为本公开的主题的具有PSC的边界框预取指单元是不必要的。在U.S.8,880,807中描述了边界框预取指器的一般结构和操作,其通过引用整体并入本文,并且下面描述了边界框预取指器的选择特征的一般描述。
如本领域普通技术人员将理解的,由具有PSC的边界框预取指单元232(和流预取指单元)使用的预取指算法部分地通过监视来自与给定核相关联的L1I和L1D高速缓存的加载请求来进行。因此,这些被示出为预取指接口230的输入。预取指接口230的输出是仲裁请求的形式,之后进入队列,然后向标签流水线250提供预取指请求,本领域普通技术人员将理解在此简要描述的其相关功能。最后,外部接口240提供到L2高速缓存外部并且实际上在处理器核外部的组件的接口,并且包括如下所述的L2填充队列242和外部监听队列。如结合图1所描述的,这样的通信(特别是片外通信)通过总线接口120来路由。
如图2所示,电路块210、220、230和240各自具有表示为标签流水线仲裁(arb)请求的输出。标签流水线250被提供为中心点,几乎所有L2高速缓存业务都通过该中心点行进。在所示的实施例中,存在两个标签流水线,表示为A和B。提供两个这样的标签流水线仅仅用于负载平衡,并且再次基于负载平衡,从电路210、220、230和240(各种接口电路)输出的标签流水线请求可以被引导到标签流水线A或标签流水线B。在一个实施例中,标签流水线是四阶段流水线,其中阶段由字母A、B、C和D表示,但是在一些实施例中,可以使用其他数量的阶段。访问高速缓存的事务(在本文中有时被称为“标签流水线arb”)前进通过标签流水线250的阶段。在A阶段期间,事务请求进入标签流水线。在B阶段期间,标签被发送到阵列(标签阵列260和数据阵列270)。在C阶段期间,从阵列接收MESI信息和LLC中的标签命中还是未命中的指示,并且鉴于从阵列接收的信息做出关于采取什么动作的确定。在D阶段期间,动作决策(完成/重放、分配填充队列条目等)的阶段回到请求队列。
外部接口240包括外部填充队列242(或在本文中也简称为填充队列或L2填充队列)和外部监听队列。每当L2高速缓存中存在未命中时,就将条目分配给填充队列242。填充队列限制未完成的L2到L3的未命中的总数。填充队列242包括跟踪诸如物理地址、存储器树、操作码的某些特征(例如,其是否被读取、验证、高速缓存行刷新、常规加载请求、I/O请求、其是否针对加速器等)等的信息的状态寄存器集合。此外,填充队列242包括控制逻辑(例如,每个条目的有限状态机),其跟踪诸如是否存在要驱逐的高速缓存行等的信息、以及本领域普通技术人员应当理解的其他功能。
最后,图2示出了标签阵列260和数据阵列270。标签阵列260有效地或基本上包括元数据,而数据阵列270是包括数据的实际高速缓存行的存储器空间。标签阵列260中的元数据包括MESI状态以及L1I和L1D有效位。如已知的,MESI状态定义存储在数据阵列270中的数据是否处于修改(“M”)、独占(“E”)、共用(“S”)或无效(“I”)状态之一。
已经描述了可以实现具有PSC的边界框预取指单元的某些实施例的示例环境,注意图3A-3B,其是一般地示出边界框预取指的绘图。广义地说,边界框预取指可以解释如下。如果在图形上表示了对存储器块的所有访问,则所有访问的集合可以由边界框包围(例如,在图3A-3B中用虚线框示意性地示出)。如果在同一图上表示附加请求,则还可以通过调整边界框的大小来包围这些请求。在图3A所示的第一示意图300A中,表示了对存储器块的两个访问。x轴反映访问的时间顺序。y轴表示访问的4千字节(KB)块内的64字节高速缓存行索引。最初,绘制前两个访问:第一个是针对高速缓存行5,第二个是针对高速缓存行6。绘制了包围这两个点的框,并且在示意图300A的右手侧示出了指示最小(例如,min=5)和最大(例如,max=6)访问位置的指针。
现在,针对高速缓存行7进行第三个(新)访问,如图3B的示意图300B所示,并且框被增长以包围新点。当总是具有新数据点时,框沿x轴增长。然而,框的上边缘也沿y轴(在这种情况下向上)生长。方方向和对指向最小和最大访问的指针反映的这种改变反映在示意图300B的右手侧。框的下边缘和上边缘的移动用于确定访问模式是向上趋势、向下趋势还是两者都不是。
除了跟踪边界框的下边缘和上边缘的趋势以确定方向趋势之外,还跟踪各个访问,这是因为通常情况是访问模式跳过一个或多于一个高速缓存行。因此,为了防止浪费对可能被跳过的高速缓存行的预取指,一旦检测到向上或向下趋势,边界框预取指器(包括本公开的具有PSC的边界框预取指单元)就使用附加标准来确定要预取指哪些高速缓存行。由于访问趋势被重新排序,边界框预取指器表示时间排序方面被剥离的访问历史。这是通过标记访问位掩码中的位来完成的,其中各个位对应于存储器块内的一个高速缓存行。对于到达特定存储器块的各个访问,设置访问位掩码中的相应位。一旦已经对存储器块进行了足够数量的访问,预取指器就使用访问位掩码(其不具有访问的时间顺序的指示)基于对整个块的访问的大视图来做出预取指决策(例如,预测),而不是像常规预取指器那样基于访问的非常小的视图并且严格地根据发生的时间来做出预取指决策。
一般地通过对边界框预取指器的这种一般描述,现在将注意力转到图4,图4是示出用于具有PSC的边界框预取指单元的实施例的存储和控制逻辑(例如预测逻辑)的框图。如上所述,图4中描绘的大部分硬件和控制逻辑的描述至少部分地基于美国专利8,880,807(下文称为‘807专利),其全部内容通过引用并入本文,其中进一步描述了增强以跟踪附加访问流。参考图4,示出了边界框预取指单元400,其包括针对(由具有PSC的边界框预取指单元维持的多个预取指器状态条目中的)各个预取指器状态条目的存储402(例如,多个寄存器)和控制逻辑404(例如,其可被实施为控制单元,包括有限状态机)。换句话说,边界框预取指单元400维持多个预取指器状态条目,以使得能够跟踪对多个存储器块的访问(经由状态信息,或简单地,状态)、以及通常对多个存储器块或页的模式匹配,其中存储包括各个预取指器页(例如,4KB页)的活跃预取指器状态条目和相应预测逻辑的组合以实现预取指生成。注意,具有PSC的边界框预取指单元232(图2)可以使用结合图4示出和描述的具有PSC的边界框预取指单元400来实现。
存储402包括访问位掩码寄存器406(也称为块位掩码寄存器)。访问位掩码406中的各个位对应于块号存储在块号寄存器408中的存储器块内的一个高速缓存行。也就是说,块号寄存器408存储存储器块的高地址位。访问位掩码406中的位的真值指示相应的高速缓存行已被访问。访问位掩码406被初始化,使得所有位都为假。在一个实施例中,存储器块的大小是4KB(其在一些实例中可以等于物理存储器页的大小),并且高速缓存行的大小是64字节;因此,在访问位掩码406中存在64位。然而,在其他实施例中,高速缓存行的大小可以变化。此外,维持访问位掩码406的存储器区域的大小可以变化,并且不一定对应于物理存储器页的大小。而是,维持访问位掩码406的存储器区域或块的大小可以是任意的(优选地为2的幂),只要其包含足够大数量的高速缓存行以使得能够检测明确的方向和模式以用于有益的预取指目的即可。在下面的描述中,将存储器块描述为对应于页并且具有相应的预取指器状态条目。
存储402还包括最小(min)指针寄存器410和最大(max)指针寄存器412,其被维持为分别指向自具有PSC的边界框预取指单元400开始跟踪对存储器块的访问以来已经被访问的该存储器块内的最低和最高高速缓存行索引。存储402还包括min_change计数器414和max_change计数器416,其分别对自具有PSC的边界框预取指单元400开始跟踪对该存储器块的访问以来对min指针410和max指针412的改变次数进行计数。存储402还包括总计数器418,其对自具有PSC的边界框预取指单元400开始跟踪对该存储器块的访问以来被访问的高速缓存行的总数进行计数。在一些实施例中,可以使用其他机制来对访问进行计数,包括使用访问掩码的总体计数(例如,64位总体计数)。存储402还包括中间指针420,其指向自具有PSC的边界框预取指单元400开始跟踪对存储器块的访问以来已经被访问的该存储器块内的中间高速缓存行索引(即,最小指针410和最大指针412的平均值)。存储402还包括方向寄存器424、模式寄存器426、模式时段寄存器428、模式位置寄存器430和搜索指针寄存器432,下面将更详细地描述其使用。
存储402还包括多个时段匹配计数器422。时段匹配计数器422各自维持针对不同时段的计数。在一个实施例中,时段是3、4和5,但是在一些实施例中可以使用其他时段值。时段是中间指针420的左/右的位数。在每次存储器访问块之后更新时段匹配计数器422。如果访问位掩码406指示在该时段内对中间指针420左侧的访问与在该时段内对中间指针420右侧的访问匹配,则具有PSC的边界框预取指单元400递增与该时段相关联的时段匹配计数器422。下面更详细地描述时段匹配计数器422的操作和使用。
在预取指的上下文中描述上述存储402,如上所述并在图2中示出,预取指接口230由来自L1D和L1I的传入加载请求馈送。L1高速缓存正在向L2高速缓存112发送对L1高速缓存中未命中的访问的加载请求。例如,在L1高速缓存接收到加载或存储指令时,搜索L1D中要加载或存储的地址。更具体地,搜索L1D标签阵列260以查看是否存在高速缓存行,由此直接满足请求,否则在高速缓存未命中时,将请求转发到L2高速缓存112,其大于L1D因此在那里请求更可能命中。然而,L2高速缓存112也更慢并且更远离执行单元,从而导致更高的访问等待时间。如果L2高速缓存112中存在未命中,则将请求转发到L3高速缓存130(或者如果不存在L3高速缓存,则转发到系统存储器)。预取指接口230的具有PSC的边界框预取指单元232(也称为400)监视从L1D(和L1I)进入的加载请求(加载和存储)流或访问流并尝试预测模式。通常,从L1D(和L1I)进入的加载请求被接收到预取指输入队列中,并在后续时钟周期中被移除。存在与被移除的加载相关联的物理地址,并且物理地址被截断以指向4KB地址存储器区域(例如,对应于该请求的4KB页),并且进行比较以确定与对应于具有PSC的边界框预取指单元正在监视的相应4KB存储器区域的任何页的匹配(例如,以确定是否存在针对该页分配的存储和控制逻辑)。假定存在匹配,具有PSC的边界框预取指单元更新与存储器块相关联的状态信息,确定到存储器区域中的偏移,并将其解码成相应的高速缓存行(例如,64位向量)。
在一个实施例中,访问位掩码406对应于存储器区域的页条目,其中针对在监视存储器区域期间访问的各个高速缓存行设置位。如果该位尚未被设置,则这是新的访问,在这种情况下,总计数器418(对应于页内已经被访问的高速缓存行的数量)被递增。被更新的其他状态信息包括相应的4KB页地址或存储器区域的块号408。最小指针410或最大指针412针对每次访问被更新。也就是说,对于每次访问,确定该访问是否低于当前最小值或高于当前最大值,如果是,则相应地调整指针。另外,计数器min_change计数器414和max_change计数器416递增。调整中间指针420,并且基于min_change计数器414与max_change计数器416来调整方向424(例如,以确定流是向上还是向下)。例如,在min_change计数器414与max_change计数器416改变的次数之间进行比较。
简要地说,由于存储器请求可能不按顺序发生(例如,如已知的,在保留站与存储器顺序缓冲器之间重新排序),因此状态信息有助于确定访问模式中的方向。例如,如果min_change计数器414被更新两次,而max_change计数器416被更新比如十次,则流很有可能趋向于向上。注意,在一些实施例中,可以使用其他或附加机制来建立方向。例如,可以使用页访问的子采样(例如,使用页的下四分位数或上四分位数中的前两次访问等)来建立方向。包括时段匹配计数器422、模式426、模式时段428、模式位置430和搜索指针432的存储402由控制逻辑404直接使用以确定访问中的模式,然后使用这些访问模式来预测要预取指的高速缓存行。
存储402还包括预取指请求队列436(输出队列)。预取指请求队列436包括条目的循环队列,各个条目存储由具有PSC的边界框预取指单元400的操作生成的预取指请求。在一个实施例中,选择预取指请求队列436的大小以允许将请求完全流水线化到L2高速缓存标签流水线250(图2)中,使得预取指请求队列436中的条目的数量至少与L2高速缓存标签流水线250中的阶段的数量一样多。预取指请求被维持直到L2高速缓存标签流水线250结束,此时请求具有三种结果之一,即:L2高速缓存112中的命中、重放或者填充队列条目的分配以从系统存储器预取指期望的数据。注意,具有PSC的边界框预取指单元400还包括输入预取指请求队列(未示出),其接收来自L1D的进入L2高速缓存的请求。
具有PSC的边界框预取指单元400还包括控制逻辑404,其控制边界框预取指单元400的元件以进行本文描述的各种功能。实际上,控制逻辑404包括用于基于存储402中的状态信息进行预取指的预测逻辑。
具有PSC的边界框预取指单元400还包括预取指器状态高速缓存(PSC)438,其在下面结合图6进一步描述。一般地,预取指器状态高速缓存438具有比在存储402中维持的更少状态信息类型,还有更多的预取指器状态条目。此外,预取指器状态高速缓存438不具有相关联的预测逻辑,从而允许存储容量的增长的解耦,以跟踪访问流,而常规地将是预测逻辑的数量或复杂性增加。
图5是示出具有PSC的边界框预取指单元(诸如具有PSC的边界框预取指单元400(和232)等)的实施例的操作500的一般方法的流程图。一般方法500涉及使用针对各个活跃存储器块在相应存储402中针对各个活跃预取指器状态条目维持的状态信息基于模式匹配来预测高速缓存行的预取指。在框502处,具有PSC的边界框预取指单元接收对存储器地址的加载/存储存储器访问。在一个实施例中,具有PSC的边界框预取指单元在确定要预取指哪些高速缓存行时在加载和存储之间进行区分;在另一实施例中,具有PSC的边界框预取指单元在确定要预取指哪些高速缓存行时不在加载和存储之间进行区分。在一个实施例中,具有PSC的边界框预取指单元从微处理器中的加载/存储单元接收存储器访问。具有PSC的边界框预取指单元可以从各种源接收存储器访问,各种源包括但不限于加载/存储单元、L1数据高速缓存114(例如,由于在L1数据高速缓存114中未命中的加载/存储单元存储器访问而由L1数据高速缓存114生成的分配请求)和/或其他源,诸如微处理器的采用与具有PSC的边界框预取指单元不同的预取指算法来预取指数据的其他预取指单元(未示出)等。
在决策框504处,控制逻辑404通过将存储器访问地址与各个块号寄存器408值进行比较来确定存储器访问是否是针对活跃块的。换句话说,控制逻辑404确定预取指器状态条目(和控制逻辑)是否已被分配用于由存储器访问指定的存储器地址所涉及的存储器块。如果是,流程进入框508;否则,流程进入框506。
在框506处,现在假定并非所有的预取指器状态条目已经被使用(参见,例如,图7,框708),控制逻辑404针对所涉及的存储器块分配预取指器状态条目。例如,具有PSC的边界框预取指单元接收存储器访问,并且如果不存在针对相应页的活跃条目但存在针对附加条目的容量,则针对新页实例化新预取指器状态条目(包括启动相应的存储和控制逻辑)。注意,预取指器状态条目彼此完全独立,这是因为各个预取指器状态条目对应于唯一的4KB存储器区域。在一个实施例中,以循环方式实现分配。在另一实施例中,维持存储和控制逻辑的最近最少使用的信息,并且基于最近最少使用进行分配。特别地,控制逻辑404通过清除访问位掩码406的所有位,用存储器访问地址的高位填充块号寄存器408,并且将最小指针410、最大指针412、min_change计数器414、max_change计数器416、总计数器418和时段匹配计数器422清除为零来启动。流程进入框508。
在框508处,控制逻辑404基于存储器访问地址来更新存储402。例如,控制逻辑404递增总计数器418,并且确定当前存储器访问地址是否大于最大指针412或小于最小指针410。更具体地,对于最大指针412的确定,控制逻辑404确定当前存储器访问地址(即,当前存储器访问地址所涉及的高速缓存行的在存储器块内的索引)是否大于最大指针412值。如果是,则控制逻辑404用当前存储器访问地址所涉及的高速缓存行的在存储器块内的索引来更新最大指针412,并且递增max_change计数器416,然后进入中间指针420的确定。如果不是,则继续进行最小指针410的比较的确定。也就是说,控制逻辑404确定当前存储器访问地址所涉及的高速缓存行的在存储器块内的索引是否小于最小指针410值。如果是,则控制逻辑404用当前存储器访问地址所涉及的高速缓存行的在存储器块内的索引来更新min指针410,并且递增min_change计数器414。在更新之后,控制逻辑404计算最小指针410和最大指针412的平均值,并且用计算的平均值更新中间指针420。然后,控制逻辑404检查访问位掩码406并且隔离中间指针420的左侧和右侧的N位,其中N是与各个相应的时段匹配计数器422相关联的位数。然后,控制逻辑404确定中间指针420左侧的N位是否与中间指针420右侧的N位匹配。如果是,则控制逻辑404使具有时段N的相关时段匹配计数器422递增,否则更新结束。
在决策框510处,控制逻辑404检查总计数器418以确定程序是否已经对存储器块进行了足够的访问以检测访问模式。在一个实施例中,控制逻辑404确定总计数器418的值是否大于预定量,该预定量在一个实施例中为10,但是预定量可以变化。如果已经进行了足够的访问,则流程进入决策框514;否则,流程完成512。
在决策框514处,控制逻辑404确定在访问位掩码406中指定的访问之间是否存在明确的方向趋势。也就是说,控制逻辑404确定访问是明确呈上升趋势(增加访问地址)还是呈下降趋势(减少访问地址)。在一个实施例中,控制逻辑404通过确定min_change计数器414和max_change计数器416之间的差是否大于预定量来确定是否存在明确的方向趋势,在一个实施例中,该预定量为2,但是预定量可以变化。如果min_change计数器414比max_change计数器416大预定量,则明确的趋势是向下的;然而,如果max_change计数器416比min_change计数器414大预定量,则明确的趋势是向上的。如果存在明确的方向趋势,则流程进入决策框516;否则,流程结束512。
在框516处,控制逻辑404确定在访问位掩码406中指定的访问之中是否存在清除模式时段获胜者。在一个实施例中,控制逻辑404通过确定时段匹配计数器422中的一个与所有其他时段匹配计数器422之间的差是否大于预定量来确定是否存在清除模式时段获胜者,在一个实施例中,该预定量是2,但是预定量可以变化。如果存在清除模式时段获胜者,则流程进入框518;否则,流程结束512。
在框518处,控制逻辑404填充方向寄存器424以指示在决策框514处确定的明确的方向趋势。另外,控制逻辑404用在决策框516处检测到的清除获胜模式时段(N)填充模式时段寄存器428。最后,控制逻辑404用在决策框516处检测到的明确获胜模式填充模式寄存器426。也就是说,控制逻辑404用访问位掩码406的N个位填充模式寄存器426到中间指针420的右侧或左侧(根据上文针对框508中的更新的描述,其将匹配)。流程进入框520。
在框520处,控制逻辑404启动对存储器块内的未取指的高速缓存行的预取指。作为用于对未取指的高速缓存行进行预取指的一种方法的说明,控制逻辑404在一个模式时段428处在检测到的方向上远离中间指针420处初始化搜索指针432和模式位置430。也就是说,控制逻辑404将搜索指针432和模式位置430初始化为中间指针420值和检测到的模式的时段(N)值的和/差。例如,如果中间指针420的值为16且N为5且方向424向上,则控制逻辑404将搜索指针432和模式位置430初始化为21。因此,在该示例中,出于比较的目的,模式426的五个位将被定位成抵靠访问位掩码406的位21至25。控制逻辑404检查搜索指针432处的访问位掩码406中的位和模式426中的相应位(其相对于模式位置430处的访问位掩码406定位),以确定是否预取指存储器块内的相应高速缓存行。控制逻辑404预测是否需要所检查的高速缓存行。如果模式426中的位为真(即,模式预测程序将访问高速缓存行),则控制逻辑404预测需要高速缓存行。如果需要高速缓存行,则流程继续以确定高速缓存行是否已经被取指。否则,控制逻辑404通过确定搜索指针432是否已经到达访问位掩码406的末尾来确定存储器块中是否有更多任何未检查的高速缓存行,并且如果没有更多的高速缓存行,则流程结束,否则,流程以控制逻辑404递增/递减搜索指针432继续。另外,如果搜索指针432已经超过模式426的最后一位,则控制逻辑404用搜索指针432的新值更新模式位置430(即,将模式426移位到新的搜索指针432位置),然后流程返回到如上所述的检查访问位掩码406中的位。
继续,控制逻辑404确定是否已经取指了所需的高速缓存行。如果访问位掩码406中的位为真,则控制逻辑404确定为已经取指了所需的高速缓存行。如果已经取指了所需的高速缓存行,则流程继续如上所述确定存储器块中是否有更多任何未检查的高速缓存行,否则,则控制逻辑404确定所考虑的高速缓存行是否大于相对于最小指针410(如果方向424向下)的预定量(在一个实施例中为十六),或者控制逻辑404确定所考虑的高速缓存行是否大于相对于最大指针412(如果方向424向上)的预定量。如果是,则流程结束;否则,流程继续确定请求队列是否已满。应注意,如果高速缓存行离最小指针410/最大指针412太远而使得流程结束,则这并不意味着具有PSC的边界框预取指单元后续将不预取指块内的附加高速缓存行,这是因为对块内的高速缓存行的后续访问可能触发块内的更多预取指。继续,控制逻辑404确定预取指请求队列436是否已满。如果是,则控制逻辑404停止,直到预取指请求队列436变为非满流为止,然后继续分配如下所述的条目。否则,控制逻辑404将条目分配到预取指请求队列436中以预取指高速缓存行。
注意,可以实现上述操作方法的变型,如‘807专利中部分描述的,并且因此变型预期在本公开的范围内。
在一个实施例中,本文所述的预定量中的一个或多于一个是通过操作系统(诸如经由模型特定寄存器(MSR))或者经由微处理器100的熔丝可编程的,该熔丝在制造微处理器100时可能被熔断。
已经描述了具有预取指器状态高速缓存的边界框预取指单元400(图4)的一般操作,现在将注意力转向图6,图6是进一步示出系统600的示意图,系统600包括具有PSC的边界框预取指单元602,以及L2高速缓存112(图2)的选择部分,其包括仲裁器616、队列618和标签流水线250。具有PSC的边界框预取指单元602具有与(图4的)具有PSC的边界框预取指单元400相同或相似的特征。在一个实施例中,具有PSC的边界框预取指单元602包括存储604和控制(例如,预测)逻辑608,存储604包括多个活跃预取指器状态条目606(例如,在该说明性的非限制性示例中为606A、606B和606C),控制(例如,预测)逻辑608包括用于活跃预取指器状态条目606A的控制逻辑_0 610A、用于活跃预取指器状态条目606B的控制逻辑_1610B和用于活跃预取指器状态条目606C的控制逻辑_2 610C。具有PSC的边界框预取指单元602还包括PSC或预取指器状态高速缓存612,预取指器状态高速缓存612包括预取指器状态条目614(例如,条目_3 614A、条目_4 614B等),而不需要附加的预测逻辑,因此增加了具有PSC的边界框预取指单元602跟踪更多访问流的容量,同时在实现这种增加的跟踪容量时解耦预测逻辑(即,不添加相关联的预测逻辑)。在预取指器状态高速缓存612中针对不匹配任何活跃预取指器状态条目610(例如,其地址区域)的加载,并且当利用了所有活跃预取指器状态条目606时,分配预取指器状态条目614。
各个活跃预取指器状态条目606存储针对与不同存储器区域相关联的页(例如,作为说明性示例的4KB页)的相应访问流的状态信息,如结合图4所描述的。另一方面,预取指器状态高速缓存612的多个预取指器状态条目614各自包括与图4中的存储402(或类似地,图6中的存储604)相关联地示出和描述的状态信息的子集。在一个实施例中,多个预取指器状态条目614各自的状态信息包括第一状态信息,该第一状态信息包括相应存储器区域的完整物理地址(例如,块号)和针对对应于相应存储器区域的页内的高速缓存行偏移的访问的映射(例如,访问位掩码)。在一些实施例中,多个预取指器状态条目614各自的状态信息还包括第二状态信息,该第二状态信息包括方向趋势(例如,如果有)和建立的置信度(例如,如果有)。在一些实施例中,其他和/或附加状态信息可以作为状态信息存储在预取指器状态条目614各自中,或者通常存储在预取指器状态高速缓存612中。此外,预取指器状态高速缓存612中的预取指器状态条目比存储604中的预取指器状态条目更多。尽管与预取指器状态高速缓存612中的N个预取指器状态条目相比,存储604在图6中被描绘为具有三个预取指器状态条目,其中N可以是基于设计和成本约束可行的任何数量(并且通常远大于活跃预取指器状态条目的数量),但是应当理解,其他数量可以用于图6中描绘的所有条目。
一般地,具有PSC的边界框预取指单元602使用存储604和控制逻辑608的状态信息来进行模式匹配(例如,针对物理存储器的4KB页)和预取指生成。预取指请求在仲裁器616处被仲裁,在618被排队,并且被呈现给标签流水线250,如上面结合图2所说明的。
预取指器状态高速缓存612将存储与预测逻辑解耦,并且跟踪预取指所需的选择状态信息。状态信息可以包括第一状态信息和可选的第二状态信息,如上所述,包括4KB页的物理地址、访问次数、方向,并且在一些实施例中,包括诸如最小和最大指针、访问模式等的状态信息,但是没有与预取指器状态条目614相关联的预测逻辑。预取指器状态高速缓存612可以用于保留已经从存储604驱逐的条目的状态信息。预取指器状态高速缓存612以几种方式更新,如结合图7的方法700所描述的,并且通常可以被分类为未分配到存储604中的新加载请求或分配到存储604中的新加载请求。方法700通常由微处理器进行,并且更具体地,可以由边界框预取指单元602(或400或232)进行,并且可以与结合图5描述的方法结合使用。参考图7,方法700在框702处接收加载请求。在框704处,方法700确定加载请求是否对应于活跃预取指器状态条目606。如果是(“是”),则流程根据如上所述的框508(图5)处的方法进入框706,否则(“否”)流程进入框708。在框708处,方法700确定存储604的所有活跃预取指器状态条目606是否被利用。如果是(“是”),则流程根据框506(图5)处的方法进入框710,否则(“是”),流程进入框712。在框712处,方法700确定加载是否分配到存储604的活跃预取指器状态条目606中。
如果否(“否”),则方法700在框714处进一步确定加载是否与任何有效PSC预取指器状态条目614匹配。如果加载不与任何有效PSC预取指器状态条目614匹配,则流程进入框716,在框716处方法700在PSC 612中创建新的预取指器状态条目,并且流程进入框718和720。在框718处,设置一个位以指示加载偏移(例如,在访问位掩码中),并且在框720处,新的预取指器状态高速缓存条目614存储加载(720)的4KB页地址(例如,块号)。
如果加载与有效预取指器状态高速缓存条目614匹配(框714为“是”),则方法700在框722处更新匹配的PSC预取指器状态高速缓存条目614。例如,加载提示在匹配的PSC预取指器状态条目614中设置访问映射位(例如,在访问位掩码中),从而指示新的访问,并且初始化与新的预取指器状态高速缓存条目相关联的任何其他数据(状态信息,包括置信度)。
在框712处再次参考方法700,确定加载分配(“是”)到活跃预取指器状态条目606中,其中流程进入框726到734。简而言之,框712处的决策可以涉及实现陈旧计数器(例如,最近最少使用(LRU)计数器或算法)。例如,各个条目可以具有被初始化为零的陈旧计数器。不匹配的传入加载触发陈旧计数器递增到预定义阈值,并且如果达到(或超过)阈值,则该事件是条目将被驱逐并用新条目替换的指示。分配到存储604的活跃预取指器状态条目606中的加载需要驱逐活跃预取指器状态条目606,并且因此方法700在框726处选择用于驱逐的条目(例如,基于如上所述的陈旧计数器)。在框728处,被驱逐的条目606分配到PSC 612中。在框730处,分配中涉及的处理取决于提示驱逐的传入加载请求是否命中有效预取指器状态条目614。如果不存在匹配的有效预取指器状态条目614(在框730处为“否”),则在框732处用被驱逐的预取指器状态条目的状态信息(例如,页地址、访问映射等)填充新PSC条目614。如果分配到活跃预取指器状态条目606中的加载命中PSC 612的有效预取指器状态条目614(在框730处为“是”),则在框734处使用来自匹配的预取指器状态条目614的状态信息来播种(seed)新的预取指器状态条目606。例如,状态信息可以包括PSC条目访问映射和其他相关联的状态信息。通过将状态保存在PSC 612中,可以针对比常规边界框预取指器中更多的访问流保留状态信息,而无需附加预测逻辑(例如,搜索算法、请求状态等)的附加成本和复杂性。
注意,在一些实施例中,方法700可以被实现为软件管理的或微代码管理的。例如,当操作系统运行多个应用时,一旦应用被抢占回到相同的处理器核上,可能并不总是调度应用,因此例如web浏览器可以在核0上运行并表现出良好的预取指,然后在核1上被抢占和重新调度。核1具有其自己的预取指器和自己的L2高速缓存,因此不具有在核0上建立的任何先前状态信息。在核0上调度的任何内容将在预取指器中具有不良数据,直到建立了状态为止(并且对于核1同样如此)。在一些实施例中,预取指器状态高速缓存可以包括微码接口或软件接口,使得当应用被抢占时与应用相关联的状态信息能够被读出并被保存以用于当其被调度时--即使当其在不同的核上被调度时。因此,接口使得应用或操作系统能够重新加载在上次调度应用时建立的所有预取指器状态信息。
鉴于以上描述,本领域普通技术人员应当理解,针对具有预取指器状态高速缓存的边界框预取指单元的实施例的用于管理预取指器状态条目的示例方法的一个实施例(表示为方法800)包括:使用具有相应多个预测逻辑的多个活跃预取指器状态条目来存储与加载请求相关联的访问流的状态信息(802);以及在预取指器状态高速缓存中存储与活跃预取指器状态条目中的任一个都不匹配的多个预取指器状态条目(804)。
流程图中的任何过程描述或块应理解为表示代码的模块、段、逻辑或部分(其包括用于在过程中实现特定逻辑功能或步骤的一个或多于一个可执行指令),并且替代实现包括在实施例的范围内,其中如本发明领域技术人员将理解的,功能可以不按所示或讨论的顺序地执行(包括基本上同时执行或以不同顺序执行),或者可以省略一个或多于一个块,这取决于所涉及的功能。
虽然在附图和前面的描述中示出并详细描述了本发明,但这样的图和描述应被认为是例示性或示例性的,而不是限制性的;本发明不限于所公开的实施例。通过研究附图、公开内容和所附权利要求,本领域技术人员在实践所要求保护的发明时可以理解并实现所公开的实施例的其它变形。
注意,可以使用所公开的实施例的各种组合,因此参考实施例或一个实施例并不意味着从其它实施例的特征的使用中排除该实施例的特征。在权利要求中,单词“包括”不排除其它元件或步骤。

Claims (20)

1.一种微处理器中的边界框预取指单元,所述边界框预取指单元包括:
存储,其包括多个活跃预取指器状态条目和相应的多个预测逻辑,其中所述多个活跃预取指器状态条目用于存储与加载请求相关联的相应多个访问流的状态信息;以及
预取指器状态高速缓存,其包括与所述活跃预取指器状态条目中的任何活跃预取指器状态条目都不匹配的多个预取指器状态条目。
2.根据权利要求1所述的边界框预取指单元,其中,所述预取指器状态高速缓存被配置为在使用所有所述活跃预取指器状态条目的情况下存储所述多个预取指器状态条目。
3.根据权利要求1所述的边界框预取指单元,其中,所述活跃预取指器状态条目中的各活跃预取指器状态条目包括与不同的存储器区域相对应的相应访问流的状态信息。
4.根据权利要求1所述的边界框预取指单元,其中,所述预取指器状态高速缓存的所述多个预取指器状态条目中的各预取指器状态条目包括在所述多个活跃预取指器状态条目中的各活跃预取指器状态条目中使用的状态信息的子集。
5.根据权利要求4所述的边界框预取指单元,其中,所述预取指器状态高速缓存的所述多个预取指器状态条目中的各预取指器状态条目包括第一状态信息,所述第一状态信息包括相应存储器区域的完整物理地址以及对与相应存储器区域相对应的页内的高速缓存行偏移的访问的映射。
6.根据权利要求5所述的边界框预取指单元,其中,所述预取指器状态高速缓存的所述多个预取指器状态条目中的各预取指器状态条目还包括第二状态信息,所述第二状态信息包括方向和置信度。
7.根据权利要求1所述的边界框预取指单元,其中,基于加载请求未分配到所述存储中并且基于未与所述预取指器状态高速缓存的有效预取指器状态条目匹配,所述加载请求提示在所述预取指器状态高速缓存中创建新条目、在所述新条目中设置访问映射位以指示加载偏移,以及存储所述加载请求的页地址。
8.根据权利要求1所述的边界框预取指单元,其中,基于加载请求未分配到所述存储中并且基于与所述预取指器状态高速缓存的有效预取指器状态条目匹配,所述加载请求提示更新所匹配的有效预取指器状态条目。
9.根据权利要求1所述的边界框预取指单元,其中,基于加载请求分配到所述存储中:
选择所述活跃预取指器状态条目之一以供驱逐;以及
被驱逐的预取指器状态条目分配到所述预取指器状态高速缓存中作为新条目,其中,所述新条目使用所述被驱逐的预取指器状态条目的状态信息,包括页地址和访问映射。
10.根据权利要求1所述的边界框预取指单元,其中,基于加载请求分配到所述存储中:
选择所述活跃预取指器状态条目之一以供驱逐;以及
基于对所述预取指器状态高速缓存的有效预取指器状态条目的命中,使用所述有效预取指器状态条目的状态信息以播种新的活跃预取指器状态条目来代替被驱逐的活跃预取指器状态条目。
11.根据权利要求1所述的边界框预取指单元,其中,所述活跃预取指器状态条目中的被选择以供驱逐的活跃预取指器状态条目是基于置信度或最近最少使用算法来选择的。
12.根据权利要求1所述的边界框预取指单元,还包括到所述预取指器状态高速缓存的接口,其中,所述接口使得应用或操作系统能够将预取指器状态信息从所述微处理器的被抢占的核迁移到新调度的核。
13.一种在微处理器的边界框预取指单元中实现的方法,所述方法包括:
使用具有相应多个预测逻辑的多个活跃预取指器状态条目来存储与加载请求相关联的访问流的状态信息;以及
在预取指器状态高速缓存中存储与所述活跃预取指器状态条目中的任何活跃预取指器状态条目都不匹配的多个预取指器状态条目。
14.根据权利要求13所述的方法,其中,存储所述多个预取指器状态条目还基于所有所述活跃预取指器状态条目都被使用的条件。
15.根据权利要求13所述的方法,其中,存储所述多个预取指器状态条目包括存储在所述存储中使用的所述状态信息的子集。
16.根据权利要求15所述的方法,其中,存储所述多个预取指器状态条目包括存储第一状态信息,所述第一状态信息包括相应存储器区域的完整物理地址以及对与相应存储器区域相对应的页内的高速缓存行偏移的访问的映射。
17.根据权利要求16所述的方法,其中,存储所述多个预取指器状态条目包括存储第二状态信息,所述第二状态信息包括方向和置信度。
18.根据权利要求13所述的方法,其中,基于加载请求未分配到所述存储中:
在所述加载请求与所述预取指器状态高速缓存的任何有效预取指器状态条目都不匹配的情况下,在所述预取指器状态高速缓存中创建新条目,在所述新条目中设置访问映射位以指示加载偏移,并且存储所述加载请求的页地址;以及
在所述加载请求与所述预取指器状态高速缓存的有效预取指器状态条目匹配的情况下,更新所述有效预取指器状态条目。
19.根据权利要求13所述的方法,其中,基于加载请求分配到所述存储中,选择所述活跃预取指器状态条目之一以供驱逐,以及:
将被驱逐的预取指器状态条目分配到所述预取指器状态高速缓存中作为新条目,其中,所述新条目使用所述被驱逐的预取指器状态条目的状态信息,包括页地址和访问映射;或者
基于对所述预取指器状态高速缓存的有效预取指器状态条目的命中,使用有效预取指器状态条目的状态信息以播种新的活跃预取指器状态条目来代替被驱逐的活跃预取指器状态条目。
20.根据权利要求13所述的方法,还包括:经由到所述预取指器状态高速缓存的接口来启用预取指器状态信息从所述微处理器的被抢占的核到新调度的核的迁移。
CN202210690729.0A 2022-01-07 2022-06-17 边界框预取指单元及其方法 Pending CN115098166A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/570,456 2022-01-07
US17/570,456 US20230222065A1 (en) 2022-01-07 2022-01-07 Prefetch state cache (psc)

Publications (1)

Publication Number Publication Date
CN115098166A true CN115098166A (zh) 2022-09-23

Family

ID=83290237

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210690729.0A Pending CN115098166A (zh) 2022-01-07 2022-06-17 边界框预取指单元及其方法

Country Status (3)

Country Link
US (1) US20230222065A1 (zh)
CN (1) CN115098166A (zh)
TW (1) TW202328906A (zh)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7493451B2 (en) * 2006-06-15 2009-02-17 P.A. Semi, Inc. Prefetch unit
US8762649B2 (en) * 2010-03-29 2014-06-24 Via Technologies, Inc. Bounding box prefetcher
US10671535B2 (en) * 2013-07-17 2020-06-02 Advanced Micro Devices, Inc. Stride prefetching across memory pages
US20180089085A1 (en) * 2016-09-23 2018-03-29 Qualcomm Incorporated Reusing trained prefetchers

Also Published As

Publication number Publication date
US20230222065A1 (en) 2023-07-13
TW202328906A (zh) 2023-07-16

Similar Documents

Publication Publication Date Title
KR101614867B1 (ko) 데이터 스트림에 대한 저장 인식 프리페치
KR102244191B1 (ko) 캐시 및 변환 색인 버퍼를 갖는 데이터 처리장치
EP3129886B1 (en) Dynamic cache replacement way selection based on address tag bits
EP1639474B1 (en) System and method of enhancing efficiency and utilization of memory bandwidth in reconfigurable hardware
EP3676712B1 (en) Multi-line data prefetching using dynamic prefetch depth
EP3055774B1 (en) Multi-mode set associative cache memory dynamically configurable to selectively allocate into all or a subset of its ways depending on the mode
US7925865B2 (en) Accuracy of correlation prefetching via block correlation and adaptive prefetch degree selection
US7073030B2 (en) Method and apparatus providing non level one information caching using prefetch to increase a hit ratio
US20120317364A1 (en) Cache prefetching from non-uniform memories
CN110362506B (zh) 高速缓存存储器及其中实现的方法
US20080133844A1 (en) Method and apparatus for extending local caches in a multiprocessor system
US10180905B1 (en) Unified prefetch circuit for multi-level caches
EP3676713B1 (en) Utilization-based throttling of hardware prefetchers
WO2016097810A1 (en) Multi-mode set associative cache memory dynamically configurable to selectively select one or a plurality of its sets depending upon mode
US9367466B2 (en) Conditional prefetching
Das et al. SLIP: reducing wire energy in the memory hierarchy
CN114830100A (zh) 预取级别降级
EP1304619A1 (en) Cache memory operation
US11467972B2 (en) L1D to L2 eviction
EP4020229A1 (en) System, apparatus and method for prefetching physical pages in a processor
US20230222065A1 (en) Prefetch state cache (psc)
US11940921B2 (en) Bounding box prefetcher
TW202219745A (zh) 微處理器和預取指調整方法
Lira et al. The migration prefetcher: Anticipating data promotion in dynamic nuca caches
Michelogiannakis et al. Last-level collective hardware prefetching

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination