CN115715391A - 用于页面-局部基于增量的预取器的方法和装置 - Google Patents

用于页面-局部基于增量的预取器的方法和装置 Download PDF

Info

Publication number
CN115715391A
CN115715391A CN202180045404.0A CN202180045404A CN115715391A CN 115715391 A CN115715391 A CN 115715391A CN 202180045404 A CN202180045404 A CN 202180045404A CN 115715391 A CN115715391 A CN 115715391A
Authority
CN
China
Prior art keywords
memory access
prefetch
increments
memory
value
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
CN202180045404.0A
Other languages
English (en)
Inventor
真下进
约翰·卡拉马丁纳斯
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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of CN115715391A publication Critical patent/CN115715391A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • 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/0877Cache access modes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/214Generating training patterns; Bootstrap methods, e.g. bagging or boosting
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • 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
    • G06F9/3832Value prediction for operands; operand history buffers
    • 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/6024History based prefetching
    • 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/6026Prefetching based on access pattern detection, e.g. stride based prefetch

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Evolutionary Computation (AREA)
  • Mathematical Physics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了一种方法,该方法包括:记录第一组连续存储器访问增量,其中这些连续存储器访问增量中的每个连续存储器访问增量表示由应用程序访问的两个存储器地址之间的差;基于该第一组存储器访问增量来更新预取训练表中的值;以及响应于第二组连续存储器访问增量并且基于该预取训练表中的值来预测用于预取的一个或多个存储器地址。

Description

用于页面-局部基于增量的预取器的方法和装置
相关申请
本申请要求2020年6月26日提交的美国临时申请第63/044,468号的优先权,该申请全文以引用方式并入本文。
政府权利
本发明是在政府的支持下基于具有由DOE授予的劳伦斯利弗莫尔国家安全的PathForward项目(基本合同No.DE-AC52-07NA27344,分包合同No.B620717)完成的。政府享有本发明的某些权利。
背景技术
现代计算系统中的处理器通常可比存储处理器所使用的指令或其他数据的主存储器快得多地操作。因此,在许多情况下,将更小且更快的高速缓存存储器与主存储器结合使用以提供对指令或数据的快速访问。当处理器在实际需要数据之前请求将数据存储在高速缓存中时,发生将数据预取到高速缓存。然后,当需要数据时,可从高速缓存中检索该数据,而不会招致从主存储器请求该数据而引起的附加延迟。
由于大多数程序是按顺序执行的或者表现出其他规则的执行模式,因此可按程序顺序或者根据存储器访问流中的其他识别模式来获取指令或其他数据。然而,预取了不正确的数据或在不适当的时间预取数据可减少通过预取具体实施提供的总体益处。
附图说明
在附图的各图中以示例而非限制的方式示出了本公开。
图1示出了根据实施方案的计算系统。
图2示出了根据实施方案的计算系统中的存储器分级结构。
图3示出了根据实施方案的基于增量(delta)的预取器的部件。
图4A示出了根据实施方案的在基于增量的预取器的训练过程中使用的数据结构。
图4B示出了根据实施方案的用于训练基于增量的预取器的过程。
图5A示出了根据实施方案的在基于增量的预取器的预取预测过程中使用的数据结构。
图5B示出了根据实施方案的由基于增量的预取器执行的预取预测过程。
图6A示出了根据实施方案的在基于增量的预取器的训练过程中使用的数据结构。
图6B示出了根据实施方案的用于训练基于增量的预取器的过程。
图6C示出了根据实施方案的相关性权重表中的递增权重。
图7A示出了根据实施方案的在基于增量的预取器的预取预测过程中使用的数据结构。
图7B示出了根据实施方案的由基于增量的预取器执行的预取预测过程。
具体实施方式
以下描述阐述了众多具体细节诸如特定系统、部件、方法等的示例,以便提供对实施方案的良好理解。然而,对于本领域技术人员将显而易见的是,可在没有这些具体细节的情况下实践至少一些实施方案。在其他情况下,未详细描述众所周知的部件或方法,或者以简单的框图格式呈现众所周知的部件或方法,以便避免不必要地混淆实施方案。因此,所阐述的具体细节仅是示例性的。特定具体实施可因这些示例性细节而异,并且仍设想在实施方案的范围内。
存储器延迟难以降低,并因此表示对计算机系统性能的缩放的显著阻碍。数据预取通过推测性地发出存储器请求使得数据在被使用之前移动到更快的高速缓存存储器来隐藏存储器延迟。然而,不准确的预取可能导致计算资源被低效地消耗,同时仍然无法隐藏针对实际使用的数据的存储器延迟。
在一个实施方案中,基于增量的预取器利用可重复的存储器访问模式与程序元数据(诸如存储器指令的程序计数器(PC))之间的相关性来准确地预测未来存储器访问模式并及时地将数据预取到高速缓存存储器中。存储器访问模式被表示为增量序列,其中增量为到同一存储器区域(例如,存储器页面)的两个连续生成的存储器地址之间的差。预取器独立于生成存储器访问的指令而跟踪每存储器区域(例如,4KB存储器页面)的存储器访问模式。
在一个实施方案中,预取器跟踪每存储器页面的存储器访问模式,并因此被称为页面-局部基于增量的预取器(Page-Local Delta-based Prefetcher,PLDP)。记录每存储器区域的增量序列,因为当搜索存储器业务中的模式时划分该地址提供了对跨各种工作负载的存储器业务的最高覆盖。虽然以下描述中的实施方案以4KB存储器页面进行操作,但另选实施方案以物理或虚拟存储器地址空间中的其他区域大小进行操作。
在一个实施方案中,多距离相关性数据预取器(MDCP)是基于增量的预取器,其记录每存储器区域的多个存储器访问增量模式,并且通过针对每个当前增量值递增与观察到的多个先前增量值中的每个先前增量值对应的权重值以及该多个先前增量值距增量序列中的当前增量值的距离来预测未来访问模式。给定当前的一组增量值,通过累加多个可能的下一增量值中的每个增量值的权重来预测用于预取的地址,其中基于当前增量值及其在增量序列中距所预测的增量值的相应距离来选择要累加的权重。
图1示出了实施基于增量的预取机制的计算系统100的实施方案。一般而言,计算系统100被体现为多种不同类型的设备中的任一个设备,包括但不限于膝上型计算机或台式计算机、移动设备、服务器、网络交换机或路由器等。计算系统100包括通过总线101彼此通信的多个硬件资源,包括部件102-108。在计算系统100中,部件102-108中的每个部件能够直接通过总线101或者经由其他部件102-108中的一个或多个部件与其他部件102-108中的任一个部件进行通信。计算系统100中的部件101-108包含在单个物理壳体内,诸如膝上型计算机或台式计算机主机机箱或移动电话外壳。在另选实施方案中,计算系统100的部件中的一些被体现为外部外围设备,使得整个计算系统100不驻留在单个物理壳体内。
计算系统100还包括用于从用户接收信息或向用户提供信息的用户接口设备。具体地,计算系统100包括输入设备102,诸如键盘、鼠标、触摸屏或用于从用户接收信息的其他设备。计算系统100经由显示器105诸如监视器、发光二极管(LED)显示器、液晶显示器或其他输出设备向用户显示信息。
计算系统100还包括用于通过有线或无线网络传输和接收数据的网络适配器107。计算系统100还包括一个或多个外围设备108。外围设备108可包括海量存储设备、位置检测设备、传感器、输入设备或计算系统100所使用的其他类型的设备。存储器系统106包括计算系统100所使用的存储器设备,诸如随机访问存储器(RAM)模块、只读存储器(ROM)模块、硬盘和其他非瞬态计算机可读介质。
计算系统100包括处理单元104。在一个实施方案中,处理单元104包括驻留在公共集成电路衬底上的多个处理内核。处理单元104接收并执行存储在存储器系统106中的指令109。指令109的至少一部分限定包括可由处理单元104执行的指令的应用程序。
计算系统100的一些实施方案可包括比图1所示的实施方案更少或更多的部件。例如,某些实施方案在没有任何显示器105或输入设备102的情况下实施。其他实施方案具有多于一种特定部件;例如,计算系统100的实施方案可具有多个处理单元104、总线101、网络适配器107、存储器系统106等。
图2示出了根据实施方案的计算系统100中的存储器分级结构。处理单元104包括高速缓存分级结构,该高速缓存分级结构包括L1高速缓存201、L2高速缓存202和L3高速缓存203。其他设备诸如处理器内核230经由分别控制高速缓存201-203的高速缓存控制器211-213与这些高速缓存201-203对接。处理器内核230通过执行指令109来运行操作系统231和用户应用程序232。在高速缓存分级结构中,最高的L1高速缓存201是分级结构中的最快且容量最小的高速缓存。接下来的更低高速缓存L2202和L3203越来越慢(即,更高的延迟)并且/或者容量越来越大。
硬件预取器221-223分别与高速缓存级别201-203相关联,并且针对其相关联的高速缓存级别或低于其相关联的高速缓存级别的高速缓存级别生成预取请求。预取请求支持通过在需要之前加载具有应用程序232将使用的数据或指令的目标高速缓存来执行应用程序232。在各种实施方案中,预取器221-223中的一些或全部被实施为基于增量的预取器,其基于所记录的过去增量模式或根据过去增量模式生成的权重值来预测用于预取的未来存储器地址。在各种实施方案中,还将基于增量的预取器与其他类型的预取机制(诸如分支预测或显式预取指令)结合使用。
图3示出了基于增量的预取器300的实施方案。预取器300表示如图2所示的预取器221-223中的任何一个或多个预取器。预取训练和预测的计算由预取逻辑301和散列引擎302执行。局部模式缓冲器303、相关性表304、预取训练表305和总和寄存器向量306包含在训练和预测阶段中使用的数据结构。在一个实施方案中,局部模式缓冲器303、相关性表304、预取训练表305和总和寄存器向量306在主存储器106中实施,另选地,这些结构中的一些或全部可在预取器300内或计算系统100中的其他部件内的一个或多个专用存储器设备中实施。预取训练表305存储预取训练数据,该预取训练数据基于传入增量值的模式来更新,并且在预取预测阶段期间访问该预取训练数据以基于增量模式历史来预测未来增量值。
在预取训练期间,预取逻辑301接收由处理器内核230在执行应用程序232时生成的虚拟或物理存储器地址。预取逻辑301计算存储器访问增量的序列,并将该序列存储在局部模式缓冲器303中。预取逻辑301将记录在局部模式缓冲器303中的增量的数量与在预取训练过程之前预先确定的量进行比较。当足够数量的增量已被记录在局部模式缓冲器303中时,预取逻辑301基于所记录的序列来更新预取训练表305中的值。
在预取训练表305包括模式历史表的一个实施方案中,预取逻辑301还更新相关性表304以将当前程序计数器的散列值和多个增量值与模式历史表中的条目相关联。散列引擎302基于程序计数器和增量值来计算散列值。
在一个实施方案中,预取训练表305包括存储权重值的相关性权重表。预取逻辑301基于记录在局部模式缓冲器303中的增量序列来识别在相关性权重表中递增哪些权重值。
预取逻辑301基于已记录在局部模式缓冲器303内的增量的数量来确定何时预测预取地址。当足够数量的增量已被记录在局部模式缓冲器303中时,预取逻辑301基于局部模式缓冲器303中的当前记录的增量序列来选择预取训练表305中的条目。使用来自表305的所选择条目,预取逻辑301预测将预取数据的一个或多个存储器地址。在预取训练表305包括模式历史表(例如,PLDP)的实施方案中,所选择值是与当前在局部模式缓冲器303中的增量值对应的一组先前记录的增量值。
在预取训练表305包括相关性权重表(例如,MDCP)的实施方案中,所选择值是基于当前记录在局部模式缓冲器303中的增量值来选择的权重值。对于所预测的下一增量值(即,在局部模式缓冲器303中的最近记录的增量值之后的增量值),预取逻辑301从相关性权重表304的一行中选择权重值,该相关性权重表跟踪最近记录的增量值与在距该最近记录的增量值的预定义距离范围内的所预测的任何可能的未来增量值之间的相关性。
预取逻辑301通过将总和寄存器向量306的相应寄存器中的增量值的所选择的权重值相加来累加总和寄存器向量306中的权重。根据观察到的增量值的历史,具有最高累加权重值的寄存器的索引表示最可能的下一增量。该预测增量由预取逻辑301用于计算用于预取的下一存储器地址。
图4A示出了根据实施方案的基于增量的预取器所使用的数据结构。这些数据结构包括局部模式缓冲器(LPB)303、模式历史表(PHT)410和相关性表(COT)304。在一个实施方案中,这些结构在预取器300中的存储器中实施;在另选实施方案中,结构303、304和410中的一些或全部驻留在预取器300外部的一个或多个其他存储器设备中。
LPB 303中的每个条目包括存储器区域标识401(例如,标识4KB存储器页面)、程序计数器字段402、最近在该区域中访问的存储器地址403,以及在该区域中捕获的从0至n-1编索引的n个存储器访问增量值404-407的序列。在一个实施方案中,区域标识401标识4KB存储器页面。
PHT 410中的每个条目包括n-m个存储器访问增量值的序列和年龄字段416,并且通过PHT条目标识411(例如,n-m个增量值的索引值或散列值)来引用。PHT 410保存由LPB303捕获的增量模式。
使用来自局部模式缓冲器303的程序计数器402和m个增量值的散列值来引用COT304中的每个条目,该散列值是由散列引擎302计算的。COT 304条目还包括PHT条目标识422,以用于将程序计数器值402和m个增量值与PHT 410的条目中的增量序列相关联。将年龄字段423与由PHT条目ID 422标识的PHT条目中的年龄字段416进行比较,以确定PHT条目中的增量序列是否仍然对应于包含PHT条目ID 422的相关性表条目。
图4B是示出根据实施方案的由基于增量的预取器300执行的预取训练过程450的流程图。过程450中的操作由预取器300的部件执行,包括预取逻辑301、散列引擎302、LPB303、COT 304和预取训练表305。
预取器300单独地针对每个存储器区域(例如,4KB存储器页面或其他区域大小)跟踪存储器访问模式。在另选实施方案中,预取器300全局地或根据PC局部分类跟踪存储器访问模式。执行全局分类的预取器以整个存储器地址空间为目标,跟踪由所有指令生成的存储器访问模式。执行PC局部分类的预取器跟踪从同一静态指令(即,具有同一程序计数器)生成的存储器访问模式。这种预取器的示例是跟踪每个静态负载或存储指令的步幅的步幅预取器。
在框451处,预取逻辑301接收由处理器内核230在执行应用程序232时生成的虚拟存储器地址(例如,L1数据高速缓存未命中需求地址)。在另选实施方案中,使用物理存储器地址而不是虚拟存储器地址。预取器300执行区域-局部分类;因此,使用区域标识401在LPB303中执行查找。由于区域是4KB存储器页面,所以区域ID 401是所接收的存储器地址的页码地址。区域ID 401用于在LPB 303中执行查找,如在框453处所提供的。
在框453处,如果在LPB 303中区域ID 401查找的结果为未命中,则为区域ID 401在LPB 303中创建条目,如在框455处所提供的。如果LPB 303是满的,则根据替换策略从LPB303逐出现有条目。LPB 303中的新条目包括区域ID 401、发起访问的存储器指令的程序计数器402和在所标识的存储器区域中访问的地址。LPB 303中的新条目还为当未来存储器访问在所标识的区域中发生时计算并存储的增量值404-407分配空间。
在已为区域ID 401创建条目之后,在LPB 303中查找区域ID 401的结果为命中。当在框453处发生命中时,接着在框457处,预取逻辑301根据新的最后访问存储器地址(在451处接收的)与在同一区域中访问的先前最后存储器地址(先前记录在LPB 303的字段403中)之间的差来计算增量值。字段403被更新以存储新的最后访问存储器地址,并且所计算的增量值作为n个增量值404-407中的一个增量值存储在该区域的LPB 303条目中。如果已经记录了n个增量值,则覆写最旧的增量值,因为n表示记录在LPB 303的每个条目中的增量的最大数量。因此,LPB 303中的增量值404-407表示由应用程序232进行的在同一区域(例如,存储器页面)中连续发生的存储器访问之间的差。
在不同存储器区域中发生的存储器访问被存储在LPB 303中的不同条目中。即,第二4KB存储器页面中的存储器访问序列使得预取逻辑301(使用第二存储器页面的页码地址)为不同区域ID在LPB 303中创建条目,并且随后用根据第二页面中发生的存储器访问序列计算的一组存储器访问增量来填充该条目中的增量字段。
在框459处,预取逻辑301确定记录在LPB 303中的增量的数量是否等于m+(n-m)×i,其中i是对n个增量已被记录在LPB 303条目中的次数进行计数的整数,并且m是小于n的整数并且表示将连同指令程序计数器402一起被用来预测剩余n-m个增量值的增量值的数量。如果记录在LPB 303中的增量的数量不等于m+(n-m)×i(框461),则过程450返回到框451。过程450因此继续接收正被访问的存储器地址,从而为所访问的每个新存储器页面在LPB 303中创建条目,并且根据框451-457记录每个存储器页面中的连续访问之间的增量值。当在用于存储器页面的LPB条目中记录的增量的数量等于m+(n-m)×i时,过程450从框459继续到框460。
在框460处,预取逻辑301将存储器指令程序计数器402存储在LPB303中。因此,每当记录在LPB条目中的增量的数量等于m+(n-m)×i时,将存储器指令PC 402保存在该条目中。因此,每当我们记录了m个增量(第一次,当i=0时)或n个增量(i>0)时,使i递增并且i对应于PC 402已被保存的次数。作为示例,当i=0时,如果n=5并且m=2,则当已记录前两个增量时,保存第一存储器指令PC 402。当i=1时,下一次记录存储器指令PC 402是在记录了接下来的3个增量之后,依此类推。
在框461处,预取逻辑301确定已存储在LPB条目中的增量的数量是否等于n+(n-m)×i,其中i对n个增量已被记录在LPB 303条目中的次数进行计数。如果已记录在LPB条目中的增量值的数量不等于n+(n-m)×i,则过程450返回到框451。在一个实施方案中,在预取训练过程450之前预先确定n和m的值。
当已记录在LPB条目中的增量值的数量等于n+(n-m)×i时,过程450从框461继续到框463。在框463处,散列引擎302计算来自LPB 303的存储器指令PC 402和m个最近记录的增量的散列值421,并且预取逻辑301使用该散列值在COT 304中执行查找。为了预测未来存储器访问,预取器300连续地观察传入增量值序列以识别匹配先前检测到的模式的唯一标志;PC 402和m个增量的散列值用作这样的标志。将m个增量值的子模式与存储器指令的PC耦合实现了比单独的PC或子模式更高的准确性。如果查找的结果为未命中,则过程450在框465处继续,并且在COT 304中添加新条目。如果COT 304是满的,则基于替换策略来逐出条目。散列值、PHT年龄416和PHT条目ID 411分别被存储在COT 304中的散列值421字段、PHT条目ID 422字段和年龄423字段中。过程450从框465返回到框451。
在框463处,如果在COT 304中查找散列值的结果为命中,则过程450在框467处继续。在框467处,散列引擎302计算LPB 303中的最近保存的n-m个增量值的散列值,并且预取逻辑301执行在预取训练表305(其被实施为PHT 410)中查找散列值。如果查找的结果为未命中,则在框469处,预取逻辑301将新条目添加到PHT 410。如果PHT 410是满的,则基于替换策略来逐出条目。在框471处,将LPB 303中的最近保存的n-m个增量值复制到PHT 410中的新条目中。全局PHT年龄值(例如,整数计数器值)被存储在条目的年龄字段416中,并且全局PHT年龄递增。如果在框467处的查找的结果为命中,则过程450在框471处继续而不执行框469的操作。
在框473处,检查COT 304中的匹配条目的PHT条目ID 422和年龄423值以确定它们是否分别与PHT 410中的条目的PHT条目ID 411和年龄416匹配。如果值不匹配,则在框475处,预取逻辑301更新COT 304条目中的值422和423以使它们与其在PHT 410条目中的对应值411和416匹配。过程450从框475返回到框451。如果COT 304条目和PHT 410条目中的值已经匹配,则过程450从框473返回到框451,而不改变COT 304中的条目。因此,框451-475重复以在应用程序232正被执行时基于传入存储器访问增量用预取训练数据来更新LPB 303、PHT 410和COT 304。
在示出训练过程450的示例中,根据同一存储器页面中的存储器访问序列计算增量A、B、C、D、E、F和G的序列。在该示例中,n=5并且m=2。因此,当A和B(按照框457)被记录在LPB 303中时,框459评估为真并且存储器指令x的PC被保存在LPB 303的PC字段402中,使得(A,B,x)可最终与要保存在LPB 303中的n个增量中的剩余3个增量(C,D,E)相关。在已将增量(C,D,E)记录在LPB 303中之后,保存下一存储器指令PC y。因此,(D,E,y)可与接下来的3个增量(F,G,H)相关。记录存储器指令PC x和y减少了预取流中的冗余,因为下次记录相同的增量时,预取器300能够在观察到(A,B,x)时预测(C,D,E),并且在观察到(D,E,y)时预测(F,G,H)。
图5A是示出根据实施方案的当执行预取预测时在LPB 303、COT 304和PHT 410之间的信息流的框图。传入区域ID 401(例如,页面地址)用于查找LPB 303中的条目,并且如果已记录足够的模式信息,则从PHT410获得预测增量值440的序列,该序列继而用于计算用于预取的一个或多个地址。
参考图5B进一步详细描述该预取预测过程的实施方案。预取预测过程500中的操作由预取器300的部件执行,包括预取逻辑301、散列引擎302、LPB 303、COT 304和预取训练表305。过程500与过程450同时执行;因此,相同编号的操作是类似的或者在过程450与500之间共享。
在框451处,当处理器内核230根据应用程序232的存储器指令访问存储器地址时,预取逻辑301接收所访问的虚拟或物理存储器地址。在框453处,预取逻辑301执行在LPB303中查找区域ID 401(例如,所接收的存储器地址的页面地址)。在框453处,如果查找的结果为未命中,则过程500返回到框451。如果查找的结果为命中,则过程500在框501处继续。
在框501处,如果LPB 303中的匹配条目不具有至少m个增量值,则过程500返回到框451。如果条目具有至少m个增量,则过程500在框503处继续。根据m=2的先前示例,当LPB303中的增量的数量为至少2时,过程500在框503处继续。
在框503处,散列引擎302计算与最近存储器访问相关联的存储器指令的PC 402和m个增量值的散列值。预取逻辑301执行在COT 304中查找散列值。如果查找的结果为未命中,则过程500返回到框451。如果查找的结果为命中,则从COT 304的匹配条目获得PHT条目ID 422和年龄423。
在框505处,预取逻辑301执行在PHT 410中查找PHT条目ID 422。如果查找的结果为未命中,则过程500返回到框451。如果查找的结果为命中,则过程500在框507处继续。在框507处,预取逻辑301将来自COT 304条目的年龄值423与来自匹配PHT 410条目的年龄值416进行比较。如果年龄条目423与416不匹配,则过程500返回到框451。不同的年龄值423和416指示PHT条目不再与COT 304条目相关联(例如,如果PHT 410条目随后被用更新的增量序列覆写并且与COT 304中的不同条目相关联)。如果年龄条目423与416匹配,则过程500在框509处继续。
在框509处,使用PHT 410条目中的n-m个增量412-415和最近存储器访问的地址来计算用于预取的n-m个地址。然后针对所计算的地址向存储器系统发出n-m个预取请求。按顺序计算用于预取的n-m个地址,因为增量值中的每个增量值是基于先前的存储器地址计算的。过程500从框509返回到框451。因此,过程500在应用程序232的执行期间重复,以针对每次存储器访问确定增量值的最近模式是否与先前记录的模式匹配,并且基于匹配模式来预测用于预取的地址。
图6A示出了根据实施方案的基于增量的预取器300所使用的数据结构,其中预取训练表305被实施为存储观察到的增量模式的权重的相关性权重表(CWT)605。在一个实施方案中,这些结构在预取器300中的存储器中实施;在另选实施方案中,结构303、306和605中的一些或全部驻留在预取器300外部的一个或多个其他存储器设备中。
预取器300使用CWT 605跟踪区域(例如,存储器页面)中的未来存储器访问增量候选与最近观察到的区域-局部增量模式之间的相关性。该相关性被表示为权重,每个权重表示区域-局部增量模式下的每个增量与每个未来访问增量候选相关的程度。
如前所述,LPB 303包含多个条目,每个条目包括区域标识401、在所标识的区域中访问的最后存储器地址402和在区域中捕获的一组n+1个存储器访问增量值。使用区域ID401(诸如,高速缓存未命中需求请求地址的页面标识)来执行在LPB 303中查找。
如图6A所示的CWT 605以64B高速缓存行并且使用4KB存储器页面作为区域大小来进行操作。每个区域因此包含4096/64=64个高速缓存行,因此该区域中的可能增量值的范围为-63至+63。因此,在区域中存在126个未来访问增量候选。使用n个增量区域-局部模式来预测未来存储器访问增量。针对n=3示出CWT 605。给定LPB 303中的3个增量A、B和C的模式,预取器300读取3x126个权重,其中这些权重中的每个权重表示增量A、B和C中的一者与126个未来增量候选中的一者之间的相关性。选择与A、B和C具有最强相关性的增量候选作为预测的未来增量,以用于计算用于预取的地址。
存储在CWT 605中的权重被组织成126行,每一行由被组织成126列的n×126个权重组成。每个CWT条目由n个权重组成。当捕获到比未来增量前j个增量的当前增量时,一组n个权重捕获未来增量候选(由列索引表示)与当前增量(由行索引表示)之间的相关性,其中1≤j≤n。每行权重被指定为{Wi,j|-63≤i≤+63,并且i≠0,并且1≤j≤n},其中i是未来增量(CWT列索引),j是当前增量(CWT行索引)与未来增量之间的距离。例如,W-5,2表示指示增量-5与所捕获到的比增量-5前两个增量的所有增量之间的相关性程度的权重行。SRV 306包括126个寄存器,其被指定为{Si|-63≤i≤+63and i≠0}。SRV 306的每个寄存器对126个可能的未来增量候选中的一个未来增量候选的权重值进行累加。
图6B是示出根据实施方案的由基于增量的预取器300执行的预取训练过程650的流程图。过程650中的操作由预取器300的部件执行,包括预取逻辑301、LPB 303、预取训练表305和总和寄存器向量306。
在框451处,预取逻辑301接收由处理器内核230进行的存储器访问的地址,并且在LPB 303中查找所接收的存储器地址的区域ID 401(例如,页面地址),如在框453处所提供的。如果查找的结果为未命中,则在LPB 303中分配新条目,如在框455处所提供的,并且将所接收的地址作为最后地址402保存在LPB 303中。过程650从框455返回到框451以接收下一所访问存储器地址。在框453处,如果查找的结果为命中,则过程650在框457处继续。在框457处,预取逻辑301计算所接收的存储器地址与LPB 303中的先前记录的最后地址402之间的增量。新的增量值被记录在LPB 303条目中、增量字段403-406中未使用的一个增量字段中,或者覆写403-406中的最旧增量。在框451处接收的地址被记录为最后地址402。
在框651处,如果LPB 303条目中的所保存的增量值的数量不大于或等于n+1,则过程650返回到框451。参数n表示用以为每个未来访问增量候选更新权重的增量模式的长度。在一个实施方案中,在预取训练过程650之前预先确定n的值。如图6A所示,n的值为3;然而,n在另选实施方案中可具有不同值。LPB 303条目包括用于存储增量值的n+1个字段403-406。在框651处,如果LPB 303条目中的所保存的增量值的数量大于或等于n+1,则足够数量的增量值已被记录在LPB 303中,并且过程650在框653处继续。
针对在最近增量值(例如,增量3)之前记录在LPB 303中的n个增量值(例如,增量A-C)的子集中的每个增量值执行框653-657,以更新与最近增量值以及与先前增量值中的每个增量值对应的权重Wi,j。在Wi,j中,i表示最近增量值,j表示先前增量值与最近增量值的顺序距离。在框653处,如果尚未更新所有这些权重,则过程650在框655处继续。在框655处,预取逻辑300在CWT 605中执行查找以找到与下一先前增量(例如,增量A、B或C)对应的行。
在与先前增量对应的行中,权重Wi,j位于列i的子列j中并且以1递增,如在框657处所提供的。列i包含与最近增量值相关联的权重,并且子列j与距增量序列中的最近增量值的距离j相关联。在另选实施方案中,权重以除1之外的整数或非整数量递增。过程650从框657返回到框653以继续更新剩余先前增量值的权重。尽管框653-657中的操作被示出为按顺序的,但这些操作在另选实施方案中并行执行。
作为示例,如果n=3并且LPB 303条目中的增量值是A、B、C和D(其中D是最近保存的增量),则在CWT 605中查找与A、B和C对应的行。在与A对应的CWT 605行中,权重WD,3在列D和子列3中递增(因为A是D之前的第三个增量)。在与B对应的行中,权重WD,2在列D和子列2中递增。在与C对应的行中,权重WD,1在列D和子列1中递增。每个权重值由c位计数器实施。如果要递增的权重饱和,则同一行中的所有其他列的同一子列中的权重递减。例如,在与上述示例中的C对应的行中,如果权重WD,3饱和,则该行中的所有权重Wi,3(-63≤i≤+63,i≠0,并且i≠D)递减。当已更新所有权重时,过程650从框653返回到框451。因此,过程650重复以基于其先前的n个增量值来更新每个传入增量值的权重。
图6C示出了根据实施方案的根据框653-657使增量的权重递增。如图6C所示,增量值A、B、C和D按相应顺序存储在LPB 303中,其中D是最近记录的增量值。这些增量值分别为+1、+63、-62和-63。
第三先前增量值为A,其值为+1;因此,在CWT 605中查找与+1对应的行。在″+1″行中,要递增的权重WA,D位于与″-63″对应的列中,″-63″为D的值。权重WA,D位于第三子列中,因为A是序列中D之前的第三增量值。
第二先前增量值是B,其值为+63;因此,在″+63″行(与B对应)和″-63″列(与D对应)中找到对应权重WB,D。权重WB,D在第二子列中,因为B是序列中D之前的第二增量值。类似地,第一先前增量是C,其值为-62;因此,在″-62″行、″-63″列和第一子列中找到对应权重WC,D,因为C是序列中D之前的第一增量值。
为了进一步说明,图6C还示出了先前在C是最近增量值并且A和B是三个先前增量值中的最后两个先前增量值时递增的权重WB,C和WA,C。对于在A之前记录的增量,列″-62″和子列3中的第三权重(未示出)也将递增。
当B为最近增量值并且A为三个先前增量值中的第一个先前增量值时,权重值WA,B递增。与第二先前增量值和第三先前增量值对应的权重(未示出)也分别在″+63″列和子列2和3中递增。
图7A示出了根据实施方案的由基于增量的预取器300使用LPB 303、CWT 605和SRV306来确定用于预取的未来访问增量701。在预取预测过程750中,使用传入区域ID 401(例如,页面地址)来查找LPB 303中的条目,并且如果已在该条目中记录足够的模式信息,则基于从CWT 605获得的权重来计算每个可能的未来增量候选的累加权重值。使用具有最高累加权重(指示与最近记录的增量值的最强相关性)的未来增量候选者701来计算用于预取的下一存储器地址。
图7B示出了根据实施方案的预取预测过程750。过程750在框451处开始。在框451处,将正被访问的新物理或虚拟存储器地址发送到预取器300。在框453处,使用区域ID 401(例如,所接收的存储器地址的页面地址)来执行在LPB 303中查找。如果查找的结果为未命中,则不执行预测并且过程750返回到框451。如果查找的结果为命中,则过程750在框751处继续。在框751处,如果LPB 303不包含至少n个增量值,则不执行预测并且过程750返回到框451。然而,如果LPB 303已包含至少n个增量值,则SRV 306中的所有值{Si|-63≤i≤+63,并且i≠0}被重置为0,如在框753处所提供的。
重复框755-759以针对n个先前增量值中的每个先前增量值在CWT 605中查找一组权重值。在框755处,如果尚未在CWT 605中查找到所有n个先前增量值,则预取逻辑301查找下一先前增量(例如,增量A 403)以识别先前增量的一组权重值,如在框757处所提供的。从与先前增量值相关联的CWT 605行和与增量序列中先前增量值与所预测的未来增量值之间的距离对应的子列读取该组权重值。例如,在CWT 605中查找到增量A识别出跨与A对应的行中的所有列的子列3中的一组126个权重。
在框759处,将所识别组中的126个权重中的每个权重与SRV 306中的126个寄存器中的对应寄存器中的值相加。从框759起,过程750返回到框755以继续识别并累加下一先前增量值的权重。
作为示例,如果n=3并且增量值A、B和C保存在LPB 303条目中,其中C是最近保存的增量值,则在CWT 605中查找A、B和C中的每一者以预测下一未来增量值701。当依据A查找CWT 605时,如下更新SRV:{Si=Si+Wi,3|-63≤i≤+63,并且i≠0}。将寄存器Si增加Wi,3,因为Wi,3表示A与未来访问增量候选i之间的相关性,该未来访问增量候选比A后三个增量值。
当依据B查找CWT 605时,如下更新SRV 306值:{Si=Si+Wi,2|-63≤i≤+63,并且i≠0},因为B比所预测的未来增量值701前两个增量值。当依据C查找CWT 605时,如下更新SRV306值:{Si=Si+Wi,1|-63≤i≤+63,并且i≠0},因为C是在紧接在未来增量701之前的增量值。当已在SRV 306中累加n个先前增量值中的每个先前增量值的所有一组权重值时,过程755从框755继续到框761。
在框761处,预取逻辑301识别SRV 306中具有最高累加值的寄存器。该最高值寄存器的索引被选择作为最可能的未来访问增量701。例如,如果SRV 306中的寄存器S+10具有跨{Si|-63≤i≤+63,并且i≠0}的最高值,则+10是所预测的下一增量值701。如果SRV 306中的最高累加权重值不超过最小累加权重阈值,则在763处,不执行预取并且过程750返回到框451。如果最高累加权重值确实超过最小累加权重阈值,则在框765处,预取逻辑301通过将最可能的未来访问增量701(即,SRV 306中的最高值寄存器的索引)添加到最近访问的存储器地址402来计算用于预取的地址。针对所计算的预取地址发出预取请求。
在一个实施方案中,预取逻辑301通过以下操作来生成多于一个预取请求:根据过程750使用接下来的预测增量值代替LPB 303中的最近增量值来递归地访问CWT 605一次或多次。例如,如果n=3并且保存在LPB303条目中的先前增量值是A、B和C(其中C是最近增量),则首先依据这些增量A、B和C访问CWT,以预测未来访问增量X。然后,B、C和X用于通过预测X之后的未来增量值来继续预取请求生成。该过程继续生成用于预取的多个地址,并且针对所预测地址中的每个所预测地址生成预取请求。
在一个实施方案中,预取逻辑301基于权重是否成功地预测用于预取的地址来更新CWT 605中的权重。如果预取数据在被使用之前被从高速缓存中逐出,则使用于生成预取的每组权重在CWT 605中递减。在一个实施方案中,预取逻辑301使用来自LPB 303的反馈来验证先前预测并重新训练CWT 605。LPB 303中的条目被扩展为包括用于存储先前针对与LPB条目对应的页面预测的增量的附加缓冲器。当LPB条目接收到新的虚拟或物理存储器地址时,计算新地址与LPB条目中的地址之间的增量,并将其与先前保存的增量进行比较。如果增量失配,则依据用于预测误预测增量并使与误预测增量对应的权重递减的增量访问CWT 605。
例如,如果假设n=3,则保存在LPB条目中的增量是A、B和C(其中C是最近保存的增量),并且先前预测的增量是X。如果新地址被发送到LPB条目并且所计算的增量是Y,则依据A、B和C访问CWT 605,并且使表示这些增量与X之间的相关性的权重递减。
在一个实施方案中,最小累加权重阈值(如框763所示)在设计时固定;另选地,基于上述误预测反馈机制,在执行时动态地改变该阈值。如果检测到误预测,则使阈值递增以使预取器不那么进取。否则,使阈值递减以使预取器更进取。
一种方法包括:在局部模式缓冲器中记录第一组连续存储器访问增量,其中这些连续存储器访问增量中的每个连续存储器访问增量表示由应用程序访问的两个存储器地址之间的差;响应于确定第一组存储器访问增量包括预先确定量的存储器访问增量,基于第一组存储器访问增量来更新预取训练表中的值,以及基于接收在该局部模式缓冲器中的第二组连续存储器访问增量来从该预取训练表中选择值;以及基于所选择值来预测用于预取的一个或多个存储器地址。
该方法还包括:在相关性表中,响应于确定局部模式缓冲器的第一条目包含至少m+(n-m)×i个存储器访问增量,将程序计数器与这些连续增量的第一子集相关联,其中m<n并且i是大于或等于0的整数。
在该方法中,预取训练表是模式历史表,并且更新该预取训练表中的值包括将这些连续存储器访问增量的第一子集从局部模式缓冲器复制到该模式历史表。
该方法还包括:基于位于第一存储器页面中的存储器地址来计算第一组存储器访问增量中的每个存储器访问增量;基于位于第二存储器页面中的存储器地址来计算第二组存储器访问增量中的每个存储器访问增量;以及将第一组存储器访问增量和第二组存储器访问增量存储在局部模式缓冲器的不同条目中。
该方法还包括:响应于确定局部模式缓冲器的第一条目包含至少m个存储器访问增量,通过以下操作从预取训练表中选择值:基于与最近存储器访问相关联的程序计数器值和第二组连续存储器访问增量来计算散列值,以及执行在相关性表中查找散列值,以识别预取训练表中包含这些值的条目,其中m是大于或等于2的整数。
在该方法中,从预取训练表中选择的值包括第一组连续存储器访问增量中的一个或多个连续存储器访问增量。该方法还包括基于所选择值和应用程序最近存储器访问的存储器地址来预测一个或多个预取地址。
在该方法中,预取训练表包括相关性权重表,并且来自该预取训练表的值表示该相关性权重表中的权重。更新预取训练表中的值还包括:对于来自第一组存储器访问增量的存储器访问增量子集中的每个存储器访问增量,在相关性权重表中,使与以下项相关联的权重中的一个权重递增:存储器访问增量、记录在局部模式缓冲器中的在该子集之后的最近存储器访问增量,以及该存储器访问增量距该最近存储器访问增量的序列距离。
在该方法中,预取训练表包括相关性权重表。该方法还包括:响应于确定局部模式缓冲器包含至少n个存储器访问增量,对于n个存储器访问增量中的每个存储器访问增量:从相关性权重表中选择与存储器访问增量对应并与该存储器访问增量相对于未来存储器访问增量的序列位置的序列位置对应的一组权重值,以及将所选择的权重值与总和寄存器向量中的相应累加权重值相加。预测用于预取的一个或多个存储器地址基于在已针对所有n个存储器访问增量执行将所选择的权重值相加之后总和寄存器向量中的最高累加权重值的索引。
该方法还包括:响应于确定最高累加权重值超过阈值,基于所预测的一个或多个存储器地址来执行预取。
在该方法中,预取训练表包括相关性权重表,最高累加权重值的索引表示预测的未来存储器访问增量,并且通过执行在相关性权重表中查找来预测用于预取的一个或多个附加存储器地址基于该预测的未来存储器访问增量和最近存储器访问增量。
在该方法中,预取训练表包括相关性权重表。该方法还包括:响应于检测到未使用的预取数据被从高速缓存中逐出,使与逐出的预取数据相关联的一组权重中的每个权重在相关性权重表中递减。
一种计算设备包括:局部模式缓冲器,该局部模式缓冲器用于存储第一组连续存储器访问增量,其中这些连续存储器访问增量中的每个连续存储器访问增量表示由应用程序访问的两个存储器地址之间的差;预取训练表,该预取训练表用于存储预取训练数据;和预取逻辑,该预取逻辑与该局部模式缓冲器和该预取训练表耦接。预取逻辑进行以下操作:响应于确定第一组连续存储器访问增量包括预先确定量的存储器访问增量,基于第一组存储器访问增量来更新预取训练表中的值;基于接收在该局部模式缓冲器中的第二组连续存储器访问增量来从该预取训练表中选择值;以及基于所选择值来预测用于预取的一个或多个存储器地址。
该计算设备还包括:散列引擎,该散列引擎与预取逻辑耦接以计算程序计数器和连续增量的第一子集的散列值;和相关性表,该相关性表与预取逻辑耦接。预取逻辑用于响应于确定局部模式缓冲器的第一条目包含至少m+(n-m)×i个存储器访问增量而将散列值存储在相关性表中,其中m<n并且i是大于或等于0的整数。
在该计算设备中,预取训练表包括模式历史表,并且预取逻辑通过将这些连续存储器访问增量的第一子集从局部模式缓冲器复制到该模式历史表来更新该预取训练表中的值。
在该计算设备中,散列引擎基于与最近存储器访问相关联的程序计数器值和第二组连续存储器访问增量来计算散列值。预取逻辑进行以下操作:响应于确定局部模式缓冲器的第一条目包含至少m个存储器访问增量,通过以下操作从预取训练表中选择值:执行在相关性表中查找散列值,以识别预取训练表中包含这些值的条目,其中m是大于或等于2的整数。
在该计算设备中,从预取训练表中选择的值包括第一组连续存储器访问增量中的一个或多个连续存储器访问增量,并且预取逻辑基于所选择值和应用程序最近存储器访问的存储器地址来预测一个或多个预取地址。
在该计算设备中,预取训练表包括相关性权重表,并且来自该预取训练表的值表示该相关性权重表中的权重。预取逻辑通过以下操作更新预取训练表中的值:对于来自第一组存储器访问增量的存储器访问增量子集中的每个存储器访问增量,在相关性权重表中,使与以下项相关联的权重中的一个权重递增:存储器访问增量、记录在局部模式缓冲器中的在该子集之后的最近存储器访问增量,以及该存储器访问增量距该最近存储器访问增量的序列距离。
在该计算设备中,该预取训练表包括相关性权重表,并且预取逻辑进行以下操作:响应于确定局部模式缓冲器包含至少n个存储器访问增量,对于n个存储器访问增量中的每个存储器访问增量:从相关性权重表中选择与存储器访问增量对应并与该存储器访问增量相对于未来存储器访问增量的序列位置的序列位置对应的一组权重值,以及将所选择的权重值与总和寄存器向量中的相应累加权重值相加。预测用于预取的一个或多个存储器地址基于在已针对所有n个存储器访问增量执行将所选择的权重值相加之后总和寄存器向量中的最高累加权重值的索引。
一种计算系统包括主存储器、高速缓存存储器和与该主存储器和该高速缓存存储器耦接的预取器。预取器在局部模式缓冲器中记录第一组连续存储器访问增量,其中这些连续存储器访问增量中的每个连续存储器访问增量表示由应用程序访问的主存储器中的两个存储器地址之间的差。预取器还进行以下操作:响应于确定第一组存储器访问增量包括预先确定量的存储器访问增量,基于第一组存储器访问增量来更新预取训练表中的值;基于接收在该局部模式缓冲器中的第二组连续存储器访问增量来从该预取训练表中选择值;以及基于所选择值来将数据从主存储器的一个或多个预取存储器地址预取到高速缓存存储器。
该计算系统还包括散列引擎,该散列引擎用于基于与最近存储器访问相关联的程序计数器值和第二组连续存储器访问增量来计算散列值。预取逻辑进行以下操作:响应于确定局部模式缓冲器的第一条目包含至少m个存储器访问增量,通过以下操作从预取训练表中选择值:执行在相关性表中查找散列值,以识别预取训练表中包含这些值的条目,其中m是大于或等于2的整数,其中这些值包括第一组连续存储器访问增量中的一个或多个连续存储器访问增量;以及基于所选择值和应用程序最近存储器访问的存储器地址来预测一个或多个预取存储器地址。
在计算系统中,预取训练表包括相关性权重表。预取器进行以下操作:响应于确定局部模式缓冲器包含至少n个存储器访问增量,对于n个存储器访问增量中的每个存储器访问增量:从相关性权重表中选择与存储器访问增量对应并与该存储器访问增量相对于未来存储器访问增量的序列位置的序列位置对应的一组权重值,以及将所选择的权重值与总和寄存器向量中的相应累加权重值相加。预测用于预取的一个或多个存储器地址基于在已针对所有n个存储器访问增量执行将所选择的权重值相加之后总和寄存器向量中的最高累加权重值的索引。
如本文所使用,术语″耦接到″可意指直接耦接或通过一个或多个居间部件间接耦接。在本文所述的各种总线上提供的任何信号可与其他信号时分复用,并且在一个或多个公共总线上提供。另外,电路部件或块之间的互连可被示出为总线或单信号线。总线中的每个总线可另选地是一个或多个单信号线,并且单信号线中的每个单信号线可另选地是总线。
某些实施方案可被实施为计算机程序产品,该计算机程序产品可包括存储在非暂态计算机可读介质上的指令。这些指令可用于对通用或专用处理器编程以执行所描述的操作。计算机可读介质包括用于以机器(例如,计算机)可读的形式(例如,软件、处理应用程序)存储或传输信息的任何机制。非暂态计算机可读存储介质可包括但不限于:磁存储介质(例如,软盘);光学存储介质(例如,CD-ROM);磁光存储介质;只读存储器(ROM);随机存取存储器(RAM);可擦除可编程存储器(例如,EPROM和EEPROM);闪存存储器或适于存储电子指令的另一类型的介质。
另外,一些实施方案可在其中计算机可读介质被存储在多于一个计算机系统上并且/或者由多于一个计算机系统执行的分布式计算环境中实践。另外,在计算机系统之间传送的信息可跨连接计算机系统的传输介质进行推送或拉取。
通常,在计算机可读存储介质上承载的表示计算系统100和/或其部分的数据结构可以是能够由程序读取并且直接或间接用于制造包括计算系统100的硬件的数据库或其他数据结构。例如,数据结构可以是高级设计语言(HDL)诸如Verilog或VHDL中的硬件功能的行为级描述或寄存器传送级(RTL)描述。描述可由合成工具读取,合成工具可合成描述以产生包括来自合成馆的门列表的网表。网表包括门集,其也表示包括计算系统100的硬件的功能。然后可以放置和路由网表以产生描述待应用于掩模的几何形状的数据集。然后可将掩码用于各种半导体制造步骤中以产生对应于计算系统100的半导体电路或电路。另选地,计算机可读存储介质上的数据库可以是网表(具有或不具有合成库)或数据集(根据需要)或图形数据系统(GDS)II数据。
尽管按特定顺序示出并描述了本文的方法的操作,但是可改变每个方法的操作的顺序,使得可按相反顺序执行某些操作,或者使得某些操作可至少部分地与其他操作同时执行。在另一实施方案中,不同操作的指令或子操作可以间歇性和/或交替方式进行。
在前述说明书中,已参考其具体示例性实施方案对实施方案进行了描述。然而,将显而易见的是,可在不脱离如在所附权利要求中阐述的实施方案的更宽范围的情况下对这些实施方案进行各种修改和改变。因此,应将该说明书和附图视为例示性的而非限制性的。

Claims (23)

1.一种方法,包括:
记录第一组连续存储器访问增量,其中所述连续存储器访问增量中的每个连续存储器访问增量表示由应用程序访问的两个存储器地址之间的差;
基于所述第一组存储器访问增量来更新预取训练表中的值;以及
响应于第二组连续存储器访问增量并且基于所述预取训练表中的值来预测用于预取的一个或多个存储器地址。
2.根据权利要求1所述的方法,其中响应于确定所述第一组存储器访问增量包括预先确定量的存储器访问增量,执行所述更新预取训练表中的值。
3.根据权利要求1所述的方法,还包括:
在相关性表中,响应于确定局部模式缓冲器的第一条目包含至少m+(n-m)×i个存储器访问增量,将程序计数器与所述连续增量的第一子集相关联,其中m<n并且i是大于或等于0的整数。
4.根据权利要求1所述的方法,其中:
所述预取训练表是模式历史表;并且
更新所述预取训练表中的所述值包括将所述连续存储器访问增量的第一子集从局部模式缓冲器复制到所述模式历史表。
5.根据权利要求1所述的方法,还包括:
基于位于第一存储器页面中的存储器地址来计算所述第一组存储器访问增量中的每个存储器访问增量;
基于位于第二存储器页面中的存储器地址来计算第二组存储器访问增量中的每个存储器访问增量;以及
将所述第一组存储器访问增量和所述第二组存储器访问增量存储在所述局部模式缓冲器的不同条目中。
6.根据权利要求1所述的方法,还包括:
响应于确定所述局部模式缓冲器的第一条目包含至少m个存储器访问增量,通过以下操作从所述预取训练表中选择所述值,其中m是大于或等于2的整数:
基于与最近存储器访问相关联的程序计数器值和所述第二组连续存储器访问增量来计算散列值,以及
执行在相关性表中查找所述散列值,以识别所述预取训练表中包含所述值的条目。
7.根据权利要求1所述的方法,其中:
从所述预取训练表中选择的所述值包括所述第一组连续存储器访问增量中的一个或多个连续存储器访问增量;并且
所述方法还包括基于所选择值和所述应用程序最近存储器访问的存储器地址来预测一个或多个预取地址。
8.根据权利要求1所述的方法,其中:
所述预取训练表包括相关性权重表;
来自所述预取训练表的所述值表示所述相关性权重表中的权重;并且
所述更新所述预取训练表中的所述值还包括:对于来自所述第一组存储器访问增量的存储器访问增量子集中的每个存储器访问增量:
在所述相关性权重表中,使与以下项相关联的所述权重中的一个权重递增:
所述存储器访问增量、
记录在所述局部模式缓冲器中的在所述子集之后的最近存储器访问增量,以及
所述存储器访问增量距所述最近存储器访问增量的序列距离。
9.根据权利要求1所述的方法,其中:
所述预取训练表包括相关性权重表;并且
所述方法还包括:响应于确定所述局部模式缓冲器包含至少n个存储器访问增量:
对于所述n个存储器访问增量中的每个存储器访问增量,
从所述相关性权重表中选择与所述存储器访问增量对应并与所述存储器访问增量相对于未来存储器访问增量的序列位置的序列位置对应的一组权重值,以及
将所选择的权重值与总和寄存器向量中的相应累加权重值相加,
其中所述预测用于预取的一个或多个存储器地址基于在已针对所有所述n个存储器访问增量执行所述将所选择的权重值相加之后所述总和寄存器向量中的最高累加权重值的索引。
10.根据权利要求9所述的方法,还包括:
响应于确定所述最高累加权重值超过阈值,基于所预测的一个或多个存储器地址来执行预取。
11.根据权利要求1所述的方法,其中:
所述预取训练表包括相关性权重表;
所述最高累加权重值的所述索引表示预测的未来存储器访问增量;并且
通过执行在所述相关性权重表中查找来预测用于预取的一个或多个附加存储器地址基于所述预测的未来存储器访问增量和最近存储器访问增量。
12.根据权利要求1所述的方法,其中:
所述预取训练表包括相关性权重表;并且
所述方法还包括:响应于检测到未使用的预取数据被从高速缓存中逐出,使与所述逐出的预取数据相关联的一组权重中的每个权重在所述相关性权重表中递减。
13.一种计算设备,包括:
局部模式缓冲器,所述局部模式缓冲器被配置为存储第一组连续存储器访问增量,其中所述连续存储器访问增量中的每个连续存储器访问增量表示由应用程序访问的两个存储器地址之间的差;
存储器,所述存储器适于将预取训练数据存储在预取训练表中;和
预取逻辑,所述预取逻辑与所述局部模式缓冲器和所述预取训练表耦接,并且被配置为:
基于所述第一组存储器访问增量来更新所述预取训练表中的值,以及
响应于接收在所述局部模式缓冲器中的第二组连续存储器访问增量并且基于所述预取训练表中的值来预测用于预取的一个或多个存储器地址。
14.根据权利要求13所述的计算设备,其中所述预取逻辑被配置为:响应于确定所述第一组连续存储器访问增量包括预先确定量的存储器访问增量,更新所述预取训练表中的所述值。
15.根据权利要求13所述的计算设备,还包括:
散列引擎,所述散列引擎与所述预取逻辑耦接,并且被配置为计算程序计数器和所述连续增量的第一子集的散列值;和
相关性表,所述相关性表与所述预取逻辑耦接,其中所述预取逻辑被进一步配置为:响应于确定所述局部模式缓冲器的第一条目包含至少m+(n-m)×i个存储器访问增量,将所述散列值存储在所述相关性表中,其中m<n并且i是大于或等于0的整数。
16.根据权利要求13所述的计算设备,其中:
所述预取训练表包括模式历史表;并且
所述预取逻辑被配置为通过将所述连续存储器访问增量的第一子集从所述局部模式缓冲器复制到所述模式历史表来更新所述预取训练表中的所述值。
17.根据权利要求13所述的计算设备,还包括:
散列引擎,所述散列引擎被配置为基于与最近存储器访问相关联的程序计数器值和所述第二组连续存储器访问增量来计算散列值,
其中所述预取逻辑被进一步配置为:
响应于确定所述局部模式缓冲器的第一条目包含至少m个存储器访问增量,通过以下操作从所述预取训练表中选择所述值:执行在相关性表中查找所述散列值,以识别所述预取训练表中包含所述值的条目,其中m是大于或等于2的整数。
18.根据权利要求13所述的计算设备,其中:
从所述预取训练表中选择的所述值包括所述第一组连续存储器访问增量中的一个或多个连续存储器访问增量;并且
所述预取逻辑被进一步配置为基于所选择值和所述应用程序最近存储器访问的存储器地址来预测一个或多个预取地址。
19.根据权利要求13所述的计算设备,其中:
所述预取训练表包括相关性权重表;
来自所述预取训练表的所述值表示所述相关性权重表中的权重;并且
所述预取逻辑被配置为通过以下操作更新所述预取训练表中的所述值:对于来自所述第一组存储器访问增量的存储器访问增量子集中的每个存储器访问增量,在所述相关性权重表中,使与以下项相关联的所述权重中的一个权重递增:
所述存储器访问增量、
记录在所述局部模式缓冲器中的在所述子集之后的最近存储器访问增量,以及
所述存储器访问增量距所述最近存储器访问增量的序列距离。
20.根据权利要求13所述的计算设备,其中:
所述预取训练表包括相关性权重表;并且
所述预取逻辑被进一步配置为:响应于确定所述局部模式缓冲器包含至少n个存储器访问增量,对于所述n个存储器访问增量中的每个存储器访问增量:
从所述相关性权重表中选择与所述存储器访问增量对应并与所述存储器访问增量相对于未来存储器访问增量的序列位置的序列位置对应的一组权重值,以及
将所选择的权重值与总和寄存器向量中的相应累加权重值相加,其中所述预测用于预取的一个或多个存储器地址基于在已针对所有所述n个存储器访问增量执行所述将所选择的权重值相加之后所述总和寄存器向量中的最高累加权重值的索引。
21.一种计算系统,包括:
主存储器;
高速缓存存储器;和
预取器,所述预取器与所述主存储器和所述高速缓存存储器耦接,其中所述预取器被配置为:
在局部模式缓冲器中记录第一组连续存储器访问增量,其中所述连续存储器访问增量中的每个连续存储器访问增量表示由应用程序访问的所述主存储器中的两个存储器地址之间的差;
基于所述第一组存储器访问增量来更新预取训练表中的值;以及
响应于接收在所述局部模式缓冲器中的第二组连续存储器访问增量并且基于所述预取训练表中的值来将数据从所述主存储器的一个或多个预取存储器地址预取到所述高速缓存存储器。
22.根据权利要求21所述的计算系统,还包括:
散列引擎,所述散列引擎被配置为基于与最近存储器访问相关联的程序计数器值和所述第二组连续存储器访问增量来计算散列值,
其中所述预取逻辑被进一步配置为:
响应于确定所述局部模式缓冲器的第一条目包含至少m个存储器访问增量,通过以下操作从所述预取训练表中选择所述值:执行在相关性表中查找所述散列值,以识别所述预取训练表中包含所述值的条目,其中m是大于或等于2的整数,其中所述值包括所述第一组连续存储器访问增量中的一个或多个连续存储器访问增量;以及
基于所选择值和所述应用程序最近存储器访问的存储器地址来预测所述一个或多个预取存储器地址。
23.根据权利要求21所述的计算系统,其中:
所述预取训练表包括相关性权重表;并且
所述预取器被进一步配置为:响应于确定所述局部模式缓冲器包含至少n个存储器访问增量,对于所述n个存储器访问增量中的每个存储器访问增量:
从所述相关性权重表中选择与所述存储器访问增量对应并与所述存储器访问增量相对于未来存储器访问增量的序列位置的序列位置对应的一组权重值,以及
将所选择的权重值与总和寄存器向量中的相应累加权重值相加,其中所述预测用于预取的一个或多个存储器地址基于在已针对所有所述n个存储器访问增量执行所述将所选择的权重值相加之后所述总和寄存器向量中的最高累加权重值的索引。
CN202180045404.0A 2020-06-26 2021-03-01 用于页面-局部基于增量的预取器的方法和装置 Pending CN115715391A (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US202063044468P 2020-06-26 2020-06-26
US63/044,468 2020-06-26
US16/927,786 2020-07-13
US16/927,786 US11726917B2 (en) 2020-06-26 2020-07-13 Method and apparatus for a page-local delta-based prefetcher
PCT/US2021/020287 WO2021262262A1 (en) 2020-06-26 2021-03-01 Method and apparatus for a page-local delta-based prefetcher

Publications (1)

Publication Number Publication Date
CN115715391A true CN115715391A (zh) 2023-02-24

Family

ID=79030959

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180045404.0A Pending CN115715391A (zh) 2020-06-26 2021-03-01 用于页面-局部基于增量的预取器的方法和装置

Country Status (6)

Country Link
US (2) US11726917B2 (zh)
EP (1) EP4172787A1 (zh)
JP (1) JP2023531618A (zh)
KR (1) KR20230025802A (zh)
CN (1) CN115715391A (zh)
WO (1) WO2021262262A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220197657A1 (en) * 2020-12-22 2022-06-23 Intel Corporation Segmented branch target buffer based on branch instruction type
US20230100328A1 (en) * 2021-09-30 2023-03-30 Micron Technology, Inc. Delta predictions for page scheduling
US11675702B1 (en) * 2022-02-16 2023-06-13 Arm Limited Replacement policy information for training table used by prefetch circuitry
US11868644B1 (en) * 2022-07-21 2024-01-09 Vmware, Inc. Techinques for tracking frequently accessed memory

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7430650B1 (en) 2004-06-17 2008-09-30 Richard Ross Generating a set of pre-fetch address candidates based on popular sets of address and data offset counters
US7774578B2 (en) * 2006-06-07 2010-08-10 Advanced Micro Devices, Inc. Apparatus and method of prefetching data in response to a cache miss
US11080196B2 (en) * 2013-09-30 2021-08-03 EMC IP Holding Company LLC Pattern-aware prefetching using parallel log-structured file system
US11249909B2 (en) * 2018-12-28 2022-02-15 Intel Corporation Systems and methods for adaptive multipath probability (AMP) prefetcher

Also Published As

Publication number Publication date
EP4172787A1 (en) 2023-05-03
US20230376420A1 (en) 2023-11-23
US20210406183A1 (en) 2021-12-30
US11726917B2 (en) 2023-08-15
KR20230025802A (ko) 2023-02-23
WO2021262262A1 (en) 2021-12-30
JP2023531618A (ja) 2023-07-25

Similar Documents

Publication Publication Date Title
US11726917B2 (en) Method and apparatus for a page-local delta-based prefetcher
TWI791505B (zh) 空間記憶體串流預取引擎的設備與方法、製造及測試方法
US10353819B2 (en) Next line prefetchers employing initial high prefetch prediction confidence states for throttling next line prefetches in a processor-based system
US7584327B2 (en) Method and system for proximity caching in a multiple-core system
TWI506434B (zh) 預取單元、資料預取方法、電腦程式產品以及微處理器
US7739477B2 (en) Multiple page size address translation incorporating page size prediction
US6571318B1 (en) Stride based prefetcher with confidence counter and dynamic prefetch-ahead mechanism
US10671535B2 (en) Stride prefetching across memory pages
EP1573555B1 (en) Page descriptors for prefetching and memory management
US20210182214A1 (en) Prefetch level demotion
Das et al. Reuse distance-based probabilistic cache replacement
US11687343B2 (en) Data processing apparatus and method for providing candidate prediction entries
US20110010506A1 (en) Data prefetcher with multi-level table for predicting stride patterns
US11429529B2 (en) Prefetching based on detection of interleaved constant stride sequences of addresses within a sequence of demand target addresses
US20170046278A1 (en) Method and apparatus for updating replacement policy information for a fully associative buffer cache
CN113227989A (zh) 为虚拟页面分配非邻接备份物理子页面的方法
CN115964309A (zh) 预取
US11714652B2 (en) Zero operand instruction conversion for accelerating sparse computations in a central processing unit pipeline
Lakhdar et al. Toward Modeling Cache-Miss Ratio for Dense-Data-Access-Based Optimization
Lotfi-Kamran et al. 2.1 Example
Wang Research on the Realization of LRU Algorithm

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