CN116954718A - 数据预取方法、装置、电子设备及可读介质 - Google Patents

数据预取方法、装置、电子设备及可读介质 Download PDF

Info

Publication number
CN116954718A
CN116954718A CN202310833848.1A CN202310833848A CN116954718A CN 116954718 A CN116954718 A CN 116954718A CN 202310833848 A CN202310833848 A CN 202310833848A CN 116954718 A CN116954718 A CN 116954718A
Authority
CN
China
Prior art keywords
memory
access instruction
access
instruction
type
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
CN202310833848.1A
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.)
Loongson Technology Corp Ltd
Original Assignee
Loongson Technology Corp Ltd
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 Loongson Technology Corp Ltd filed Critical Loongson Technology Corp Ltd
Priority to CN202310833848.1A priority Critical patent/CN116954718A/zh
Publication of CN116954718A publication Critical patent/CN116954718A/zh
Pending legal-status Critical Current

Links

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/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/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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/602Details relating to cache prefetching

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

数据预取方法、装置、电子设备及可读介质
技术领域
本发明实施例涉及计算机技术领域,特别是涉及一种数据预取方法、装置、电子设备及可读介质。
背景技术
目前,随着处理器工艺的提升以及处理器结构设计的优化,处理器的性能有了巨大的提升。然而,内存性能的提升却远远落后于处理器核,这使得处理器核和内存之间产生了巨大的性能差异,即产生内存墙问题。为缓解内存墙问题,处理器设计者在内存和处理器核之间加入高速缓存(Cache),通过将可能用到的数据提前取到高速缓存中,从而降低高速缓存的缺失率(Miss率),进而提高处理器性能。
对于程序中广泛存在的访存指令(load指令),访存指令用于将访存地址的数据加载至目的寄存器中,访存指令可以形成多种访存行为,例如,访存指令的访存地址可能会以固定的值增加/减少,形成固定步长的访存流。进一步地,固定步长的访存指令可以作为指针,其加载的数据可以作为其他访存指令的访存地址或者访存地址的基址,形成固定步长的指针数据结构。目前,如何针对访存指令进行数据预取,以降低访存延迟成为亟需解决的技术问题。
发明内容
本发明实施例提供一种数据预取方法、装置、电子设备及可读介质,可以解决如何针对访存指令进行数据预取,以降低访存延迟问题。
为了解决上述问题,本发明实施例公开了一种数据预取方法,所述方法包括:
识别访存地址按照固定步长变化的访存指令作为第一类访存指令;
基于所述第一类访存指令的访存地址以及所述固定步长,将第一待访存数据预取至高速缓存中;所述第一访存数据为所述第一类访存指令所需加载的数据;
基于第一类访存指令的目的寄存器以及其他访存指令的源寄存器,识别访存地址依赖于所述第一类访存指令的目的寄存器的其他访存指令作为第二类访存指令;
基于预取的所述第一待访存数据以及所述第二类访存指令的固定偏移,将第二待访存数据预取至高速缓存中;所述第二访存数据为所述第二类访存指令所需加载的数据。
可选的,所述识别访存地址按照固定步长变化的访存指令作为第一类访存指令,包括:
针对目标程序中的任一访存指令,在第一存储表中存在所述访存指令对应表项的情况下,基于所述访存指令当前的访存地址以及所述访存指令对应表项中的上次访存地址确定当前步长;
在出现当前步长与所述历史步长一致的次数大于预设次数阈值的情况下,将所述访存指令确定为所述第一类访存指令。
可选的,所述方法还包括:
在所述第一存储表中不存在所述访存指令对应表项的情况下,为所述访存指令创建对应表项,并在所创建表项中设置所述访存指令的上次访存地址以及置信度;
在出现所述当前步长与所述访存指令对应表项中的历史步长一致的情况下,将所述访存指令对应表项中的置信度加1;
所述在出现当前步长与所述历史步长一致的次数大于预设次数阈值的情况下,将所述访存指令确定为所述第一类访存指令,包括:
在所述访存指令对应表项中的置信度大于所述预设次数阈值的情况下,将所述访存指令确定为第一类访存指令。
可选的,所述方法还包括:
对于任一所述第一类访存指令,将所述第一类访存指令的目的寄存器在第二存储表中对应的状态位设置为第一标识;所述第二存储表包含多个表项,一个所述表项对应一个寄存器;
所述基于第一类访存指令的目的寄存器以及其他访存指令的源寄存器,识别访存地址依赖于所述第一类访存指令的目的寄存器的其他访存指令作为第二类访存指令,包括:
从所述第一类访存指令之外的其他访存指令中,识别目标状态位为第一标识的其他访存指令作为所述第二类访存指令;所述目标状态位是所述其他访存指令的源寄存器在所述第二存储表中对应的状态位。
可选的,所述方法还包括:
将各所述第二类访存指令对应的第一类访存指令在第一存储表中对应表项的索引值记录至第三存储表,以及,将各所述第二类访存指令的固定偏移记录至第三存储表;
所述基于预取的所述第一待访存数据以及所述第二类访存指令的固定偏移,将第二待访存数据预取至高速缓存中,包括:
从所述第三存储表中查找索引值与所述第一类访存指令在所述第一存储表中对应表项的索引值一致的第二类访存指令对应的固定偏移;
基于查找到的固定偏移以及所述第一待访存数据生成所述第二类访存指令的预取地址,并基于所述第二类访存指令的预取地址将所述第二待访存数据预取至高速缓存中。
可选的,所述第一存储表、所述第二存储表以及所述第三存储表属于内容可寻址存储器表。
另一方面,本发明实施例公开了一种数据预取装置,所述装置包括:
第一识别模块,用于识别访存地址按照固定步长变化的访存指令作为第一类访存指令;
第一预取模块,用于基于所述第一类访存指令的访存地址以及所述固定步长,将第一待访存数据预取至高速缓存中;所述第一访存数据为所述第一类访存指令所需加载的数据;
第二识别模块,用于基于第一类访存指令的目的寄存器以及其他访存指令的源寄存器,识别访存地址依赖于所述第一类访存指令的目的寄存器的其他访存指令作为第二类访存指令;
第二预取模块,用于基于预取的所述第一待访存数据以及所述第二类访存指令的固定偏移,将第二待访存数据预取至高速缓存中;所述第二访存数据为所述第二类访存指令所需加载的数据。
可选的,所述第一识别模块,具体用于:
针对目标程序中的任一访存指令,在第一存储表中存在所述访存指令对应表项的情况下,基于所述访存指令当前的访存地址以及所述访存指令对应表项中的上次访存地址确定当前步长;
在出现当前步长与所述历史步长一致的次数大于预设次数阈值的情况下,将所述访存指令确定为所述第一类访存指令。
可选的,所述装置还包括:
创建模块,用于在所述第一存储表中不存在所述访存指令对应表项的情况下,为所述访存指令创建对应表项,并在所创建表项中设置所述访存指令的上次访存地址以及置信度;
处理模块,用于在出现所述当前步长与所述访存指令对应表项中的历史步长一致的情况下,将所述访存指令对应表项中的置信度加1;
所述第一识别模块,具体还用于:
在所述访存指令对应表项中的置信度大于所述预设次数阈值的情况下,将所述访存指令确定为第一类访存指令。
可选的,所述装置还包括:
设置模块,用于对于任一所述第一类访存指令,将所述第一类访存指令的目的寄存器在第二存储表中对应的状态位设置为第一标识;所述第二存储表包含多个表项,一个所述表项对应一个寄存器;
所述第二识别模块,具体用于:
从所述第一类访存指令之外的其他访存指令中,识别目标状态位为第一标识的其他访存指令作为所述第二类访存指令;所述目标状态位是所述其他访存指令的源寄存器在所述第二存储表中对应的状态位。
可选的,所述装置还包括:
记录模块,用于将各所述第二类访存指令对应的第一类访存指令在第一存储表中对应表项的索引值记录至第三存储表,以及,将各所述第二类访存指令的固定偏移记录至第三存储表;
所述第二预取模块,具体用于:
从所述第三存储表中查找索引值与所述第一类访存指令在所述第一存储表中对应表项的索引值一致的第二类访存指令对应的固定偏移;
基于查找到的固定偏移以及所述第一待访存数据生成所述第二类访存指令的预取地址,并基于所述第二类访存指令的预取地址将所述第二待访存数据预取至高速缓存中。
可选的,所述第一存储表、所述第二存储表以及所述第三存储表属于内容可寻址存储器表。
又一方面,本发明实施例公开了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行前述的方法。
本发明实施例还公开了一种机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如上述所述的方法。
本发明实施例包括以下优点:本发明实施例提供的数据预取方法,通过先识别访存地址按照固定步长变化的访存指令作为第一类访存指令,并基于第一类访存指令的访存地址以及固定步长,先将第一待访存数据预取至高速缓存中。接着,进一步识别访存地址依赖于第一类访存指令的目的寄存器的其他访存指令作为第二类访存指令,并基于预取的第一待访存数据以及第二类访存指令的固定偏移,将第二类访存指令所需加载的第二待访存数据预取至高速缓存中。这样,可以在实现针对固定步长的第一类访存指令进行数据预取的同时,进一步实现对依赖于该第一类访存指令的其他访存指令进行数据预取,进而一定程度上可以在实现针对访存指令进行数据预取,以降低访存延迟的同时,提高数据预取效率。
同时,在对第一类访存指令进行预取的基础上,以预取的第一待访存数据作为基础,直接基于预取的第一待访存数据以及第二类访存指令的固定偏移,将第二待访存数据预取至高速缓存中,一定程度上可以降低针对固定步长的指针数据结构的访存指令的预取成本。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种数据预取方法的步骤流程图;
图2是本发明实施例提供的一种处理流程示意图;
图3是本发明实施例提供的另一种处理流程示意图;
图4是本发明实施例提供的一种表项结构示意图;
图5是本发明实施例提供的一种数据预取装置的框图;
图6是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图1,示出了本发明实施例提供的一种数据预取方法的步骤流程图,如图1所示,该数据预取方法具体包括以下步骤:
步骤101、识别访存地址按照固定步长变化的访存指令作为第一类访存指令。
步骤102、基于所述第一类访存指令的访存地址以及所述固定步长,将第一待访存数据预取至高速缓存中;所述第一访存数据为所述第一类访存指令所需加载的数据。
步骤103、基于第一类访存指令的目的寄存器以及其他访存指令的源寄存器,识别访存地址依赖于所述第一类访存指令的目的寄存器的其他访存指令作为第二类访存指令。
步骤104、基于预取的所述第一待访存数据以及所述第二类访存指令的固定偏移,将第二待访存数据预取至高速缓存中;所述第二访存数据为所述第二类访存指令所需加载的数据。
针对上述步骤101~步骤104,本发明实施例中可以是从目标程序中识别第一类访存指令,目标程序可以是需要执行的任一程序,目标程序中可以包括访存指令,目标程序中的访存指令可以是在编写目标程序时根据实际需求写入的。访存指令可以用于指示将数据从存储器中加载至处理器核中的目的寄存器。
访存地址按照固定步长(stride)变化的访存指令可以形成固定步长访存行为,具体的,固定步长访存指的是某一访存指令的访存地址以某一固定的值增加/减少,进而形成有规律的访存地址序列。例如,访存地址序列可以为:0x0,0x2,0x4,0x6...。其中,访存地址指的是该条访存指令所要访问的内存地址。由于访存指令可能被循环执行,且每次循环执行时该访存指令的源寄存器的值会以固定步长变化,进而使得访存地址与上一次执行时的访存地址相差固定步长,因此,存在访存地址按照固定步长变化的访存指令。示例性地,访存指令的访存地址可以基于源寄存器的值确定,访存指令的访存地址可以由该访存指令的源寄存器的值加上该访存指令的固定偏移(Constant offset)组成。其中,访存指令的固定偏移可以是预先定义的。或者,访存地址也可以来自两个源寄存器相加之后的和,例如,针对访存指令ldx$1,$2,$3,其访存地址=$2+$3,本发明实施例对访存地址的生成方式不作限制。
示例性地,假设目标程序中包括如下指令:
a:
add.d$r3,$r3,8;
ld.d$r4,$r3,0;
ld.d$r5,$r4,32;
bne$r3,$r6,a
其中,add表示加法指令,ld表示load指令,bne表示跳转指令,.d表示操作的位宽为64bits。指令:add.d$r3,$r3,8指示将r3寄存器的值加8后存入r3寄存器。指令:ld.d$r4,$r3,0指示将r3寄存器的值加上该指令的固定偏移:0作为访存地址进行访存,并将该访存地址对应的值存入r4寄存器中,即$r4=MEM[$r3+0],其中MEM表示内存,该load指令的源寄存器即为r3寄存器。指令:ld.d$r5,$r4,32指示将r4寄存器的值加上该指令的固定偏移即(32)作为访存地址进行访存,并将该访存地址对应的值存入r5寄存器中,即$r5=MEM[$r4+32]。其中,该load指令的源寄存器即为r4寄存器。指令:bne$r3,$r6,a指示判断r3寄存器的值和r6寄存器的值是否不相等,如果不相等则跳转到标号a处,即跳回到指令“add.d$r3,$r3,8”处开始执行。若相等,则继续往后执行。将第一条load指令:ld.d$r4,$r3,0记为LD1指令,将第二条load指令:ld.d$r5,$r4,32记为LD2指令,对于LD1指令,该指令使用r3寄存器+0作为访存地址。每次循环,LD1指令的上一条加法指令,都为r3寄存器加8。因此,LD1指令的访存地址每次循环都相差8。即,每次执行LD1指令时,LD1指令的访存地址按照固定步长变化,因此,可以将LD1指令确定为第一类访存指令。
进一步地,在识别出第一类访存指令之后,可以将该第一类访存指令的访存地址加上固定步长作为第一预取地址,并基于第一预取地址对第一待访存数据进行数据预取。以上述LD1指令为例,对LD1进行预取时,可以将当前记录的访存地址加固定步长,即r3寄存器的当前值+8作为第一预取地址。
示例性地,假设目标程序中包括如下指令:
a:
add.d$r3,$r3,8;
ld.d$r4,$r3,4;
ld.d$r5,$r4,32;
bne$r3,$r6,a
那么固定步长为8,固定步长的具体值源自于其源寄存器周期性+8。假设r3初始值是400,那么访存地址序列可以是404,412,420...其固定步长是根据其访存地址序列前后相减得到的。由于访存地址为“r3的值+4”,因为r3的值每周期固定+8,所以其访存地址每周期也是固定+8。
具体的,可以将第一预取地址对应的Cache行提前取回到Cache中,在执行该第一类访存指令时,可以直接从Cache中获取到该第一类访存指令所需加载的数据。第一访存数据具体可以为后续执行该第一类访存指令时该第一类访存指令的访存地址处的数据。这样,通过根据已观测到的访存行为,提前从内存读取将来可能使用的第一访存数据至高速缓存中,可以降低内存时延对处理器执行的影响,进而可以便捷快速的将所需加载的数据写入第一类访存指令的目的寄存器中,从而减小访存延迟。实际应用场景中,数据预取的原理本质上是猜测后续所需执行的Load指令的访存地址。本发明实施例中,基于第一类访存指令的访存地址以及固定步长确定第一预取地址。并提前将第一预取地址对应的Cache行取到Cache中。对第一类访存指令进行数据预取,就是预测后续执行时,其所需访存的数据的地址,对于固定步长的第一类访存指令(例如LD1)而言,其后续执行时所需访存的数据的地址即为第一类访存指令的访存地址+固定步长,其中,第一类访存指令当前的访存地址+固定步长可以表示后续实际执行第一类访存指令时访存地址。如果后续所需执行的指令的访存地址与第一预取地址确实相等,那么则可以降低后续的访存延迟。其中,目的寄存器可以位于处理器核。示例性地,可以从预期模块向下级Cache发送携带第一预取地址的预取请求,以便于下级Cache对第一待访存数据进行预取。例如,如果预取模块在L1 Cache,那么预取请求可以直接发往L2 Cache。
进一步地,固定步长的访存指令可以作为指针,其加载的数据可以作为其他访存指令的访存地址或者访存地址的基址,形成固定步长的指针数据结构。也就是说,第一类访存指令的目的寄存器的值可能被作为其他访存指令的访存地址或者访存地址的基址,即,其他访存指令的访存地址可能会由该第一类访存指令的目的寄存器的值,进而在程序中形成固定步长的指针数据结构。本发明实施例中,第一访存数据即为后续会被加载至第一类访存指令的目的寄存器的值,因此,本发明实施例中,可以进一步再基于第一类访存指令的目的寄存器以及其他访存指令的源寄存器,识别访存地址依赖于该第一类访存指令的目的寄存器的其他访存指令作为第二类访存指令,并基于预取的第一待访存数据以及第二类访存指令的固定偏移,将第二待访存数据预取至高速缓存中。其中,第二待访存数据可以具体为后续执行第二类访存指令时所需加载的数据,即,后续执行第二类访存指令时该第二类访存指令的访存地址处的数据。其他访存指令的访存地址可以由该其他访存指令的源寄存器的值加上该其他访存指令的固定偏移组成。其中,其他访存指令的固定偏移可以是预先定义的。
示例性地,针对上述目标程序中包括的指令示例,LD2指令使用r4寄存器+32作为其访存地址,其源寄存器r4寄存器的值依赖于LD1指令,r4寄存器的值为LD1指令load的值加上32得到。其中,Load指令load的值指的是这条Load指令的返回值,即这条指令的执行结果。以“ld.d$r5,$r4,32”为例,Load的值就是执行完这条指令后,寄存器r5的值。
具体的,可以将该第一待访存数据加上第二类访存指令的固定偏移作为第二预取地址,并基于第二预取地址对第二待访存数据进行数据预取。具体的,可以将第二预取地址对应的Cache行提前取回到Cache中,在后续执行该第二类访存指令时,可以直接从Cache中获取到该第二类访存指令所需加载的数据。在固定偏移为0的情况下,第一访存数据相当于直接作为第二类访存指令的访存地址,在固定偏移不为0的情况下,第一访存数据相当于作为第二类访存指令的访存地址的基址。
综上所述,本发明实施例提供的数据预取方法,通过先识别访存地址按照固定步长变化的访存指令作为第一类访存指令,并基于第一类访存指令的访存地址以及固定步长,先将第一待访存数据预取至高速缓存中。接着,进一步识别访存地址依赖于第一类访存指令的目的寄存器的其他访存指令作为第二类访存指令,并基于预取的第一待访存数据以及第二类访存指令的固定偏移,将第二类访存指令所需加载的第二待访存数据预取至高速缓存中。这样,可以在实现针对固定步长的第一类访存指令进行数据预取的同时,进一步实现对依赖于该第一类访存指令的其他访存指令进行数据预取,进而一定程度上可以在实现针对访存指令进行数据预取,以降低访存延迟的同时,提高数据预取效率。
同时,在对第一类访存指令进行预取的基础上,以预取的第一待访存数据作为基础,直接基于预取的第一待访存数据以及第二类访存指令的固定偏移,将第二待访存数据预取至高速缓存中,一定程度上可以降低针对固定步长的指针数据结构的访存指令的预取成本。
可选的,上述识别访存地址按照固定步长变化的访存指令作为第一类访存指令的步骤,具体可以包括:
步骤1011、针对目标程序中的任一访存指令,在第一存储表中存在所述访存指令对应表项的情况下,基于所述访存指令当前的访存地址以及所述访存指令对应表项中的上次访存地址确定当前步长。
步骤1012、在出现当前步长与所述历史步长一致的次数大于预设次数阈值的情况下,将所述访存指令确定为所述第一类访存指令。
本发明实施例中,第一存储表可以是基于内容可寻址存储器(ContentAddressable Memory,CAM)创建的,第一存储表也可以称为第一CAM表、固定步长表(Constant Stride Table,CST)。
CST表可以包括4个域:PC、上次访存地址(Last_vaddr)、步长(stride)以及置信度(Confidence)。其中,CST表中的PC可以为访存指令的程序计数器(Program Counter,PC),或者部分PC,又或者折叠hash之后的PC。可以使用PC索引CST,以确定第一存储表中是否存在访存指令对应表项。其中,访存指令对应表项可以包括该访存指令的PC、上次访存地址、步长以及置信度。具体的,可以使用访存指令的PC去查找CST表,如果CST表中某一项的PC域与该访存指令的PC相等,那么可以确定命中,确定第一存储表中存在访存指令对应表项,该访存指令对应表项即为PC域与该访存指令的PC相等的表项。反之,则可以确定未命中,第一存储表中不存在该访存指令的对应表项。需要说明的是,本发明实施例中可以在计算出访存指令的虚拟地址后,用其PC索引CST,以判断第一存储表中是否存在访存指令对应表项。具体的,地址有虚拟地址和物理地址,只有先计算出地址才能进行访存,而计算虚拟地址是执行访存指令的第一步,计算出虚拟地址后,处理器会进行虚拟地址与物理地址的转换,将虚拟地址转换成物理地址。本发明实施例中,可以使用虚拟地址进行操作,基于虚拟地址进行后续的计算,例如,计算步长。
进一步地,在命中的情况下,可以从该访存指令对应表项的上次访存地址域中,读取该访存指令对应表项中的上次访存地址。上次访存地址可以是上次检测到该访存指令时,该访存指令的访存地址。然后,用访存指令当前的访存地址和读取到的上次访存地址相减,作为当前步长。接着,将当前步长与历史步长进行比对,以确定两者是否一致。其中,历史步长可以是该访存指令对应表项的步长域中存储的步长。如果两者一致,则可以确定当前累计出现当前步长与所述历史步长一致的次数,并在该次数大于预设次数阈值的情况下,将该访存指令确定为第一类访存指令。
其中,预设次数阈值可以根据实际需求设置,例如,预设次数阈值可以为2。假设当前步长与历史步长一致,且之前已经出现过两次当前步长与历史步长一致的情况下,即当前累计出现当前步长与历史步长一致的次数为3,那么可以将该访存指令确定为第一类访存指令。
本发明实施例中,通过设置第一存储表,在第一存储表中存在访存指令对应表项的情况下,基于访存指令当前的访存地址以及访存指令对应表项中的上次访存地址确定当前步长。相应地,在出现当前步长与历史步长一致的次数大于预设次数阈值的情况下,即可确定出固定步长的第一类访存指令,进而一定程度上可以提高第一类访存指令的确定效率。
在应用程序中,数据常常会连续摆放或间隔固定长度连续摆放,当顺序遍历这些数据时,访存地址之间的间隔便是固定大小的。然而,在实际的应用程序中,往往会出现多个访存流交替的情况,例如矩阵乘法。在这种情况下,如果预取器对不同的流不加以区分,就无法捕捉到固定步长的访存流。本发明实施例中,针对各第一类访存指令创建对应表项,可以方便进行区分。
可选的,本发明实施例中还可以包括下述步骤:
步骤S21、在所述第一存储表中不存在所述访存指令对应表项的情况下,为所述访存指令创建对应表项,并在所创建表项中设置所述访存指令的上次访存地址以及置信度。
步骤S22、在出现所述当前步长与所述访存指令对应表项中的历史步长一致的情况下,将所述访存指令对应表项中的置信度加1。
相应地,上述在出现当前步长与所述历史步长一致的次数大于预设次数阈值的情况下,将所述访存指令确定为所述第一类访存指令的步骤,具体可以包括:步骤1012a、在所述访存指令对应表项中的置信度大于所述预设次数阈值的情况下,将所述访存指令确定为第一类访存指令。
本发明实施例中,在第一存储表中不存在访存指令对应表项的情况下,可以为该访存指令在CST表中分配新项,即为该访存指令创建对应表项。对于为该访存指令新创建的对应表项,可以将新创建的对应表项中的置信度以及步长设置为默认值0,将新创建的对应表项中的上次访存地址设置为该访存指令当前对应的访存地址,也就是,将该访存指令当前对应的访存地址写入至新创建的对应表项中的上次访存地址域中。
进一步地,可以继续对目标程序中的访存指令进行处理,在后续再次处理到该访存指令时,如果出现当前步长与该访存指令对应表项中的历史步长一致的情况下,将该访存指令对应表项中的置信度加1,以通过置信度的具体值表征出现当前步长与历史步长一致的次数。这样,基于置信度是否大于预设次数阈值,即可识别出当前步长与历史步长一致的次数是否大于预设次数阈值。其中,历史步长即为该访存指令对应表项中的步长。反之,如果出现当前步长与该访存指令对应表项中的历史步长不一致,则可以将该访存指令对应表项中的置信度减1。如果置信度被减为0,则可以将该访存指令对应表项中的步长更新为当前步长。
如果PC在CST中命中,即第一存储表中存在访存指令对应表项,并且本次计算的当前步长与该访存指令对应表项中的步长相等,且当前Confidence大于预设次数阈值,则可以将该访存指令确定为第一类访存指令,以在后续步骤中触发预取请求。示例性地,以预设次数阈值等于2为例,针对一个访存指令a,在访存指令a第一次命中CST表的时候,此时Confidence为0,访存指令a对应表项中的步长为0,可以将访存指令a对应表项中的步长更新为本次计算得到的步长;第二次命中的时候,如果计算的步长与访存指令a对应表项中的步长一致,则Confidence更新为1。第三次命中的时候,如果计算的步长与访存指令a对应表项中的步长一致,则Confidence更新为2,第四次命中的时候,如果计算的步长与访存指令a对应表项中的步长一致,则Confidence更新为3。相应地,可以确定该访存指令是固定步长访存流,可以将该访存指令确定为第一类访存指令。示例性地,图2是本发明实施例提供的一种处理流程示意图,如图2所示,对于一个访存指令,如果该访存指令的PC在CST中命中,则可以确定当前步长(cur_stride)。如果cur_stride等于对应表项中的步长,则为conf(置信度)加1,最终在conf大于2的情况下,将该访存指令作为第一类访存指令,并进行数据预取。
本发明实施例中,在第一存储表中不存在访存指令对应表项的情况下,为访存指令创建对应表项,并在所创建表项中设置访存指令的上次访存地址以及置信度。在出现当前步长与访存指令对应表项中的历史步长一致的情况下,将访存指令对应表项中的置信度加1。相应的,在访存指令对应表项中的置信度不小于预设次数阈值的情况下,将访存指令确定为第一类访存指令。这样,通过维护置信度,基于置信度即可便捷的识别出现当前步长与历史步长一致的次数大于预设次数阈值的情况,进而一定程度上提高确定效率。
可选的,本发明实施例中还可以包括下述步骤:
步骤S31、对于任一所述第一类访存指令,将所述第一类访存指令的目的寄存器在第二存储表中对应的状态位设置为第一标识;所述第二存储表包含多个表项,一个所述表项对应一个寄存器。
相应地,上述基于第一类访存指令的目的寄存器以及其他访存指令的源寄存器,识别访存地址依赖于所述第一类访存指令的目的寄存器的其他访存指令作为第二类访存指令的步骤,具体可以包括:
步骤1031、从所述第一类访存指令之外的其他访存指令中,识别目标状态位为第一标识的其他访存指令作为所述第二类访存指令;所述目标状态位是所述其他访存指令的源寄存器在所述第二存储表中对应的状态位。
本发明实施例中,第二存储表可以是基于内容可寻址存储器(ContentAddressable Memory,CAM)创建的,第二存储表也可以称为第二CAM表、寄存器标记表(Register Flag Table,RFT)。RFT表可以包括多个表项,一个表项对应一个寄存器,第二存储表中的表项和寄存器是一一对应的关系。即假如有32个寄存器,那么就有32个表项,每个表项唯一对应一个寄存器,每个寄存器也唯一对应一个表项。即RFT表的大小可以与逻辑寄存器数相同,每一项对应逻辑寄存器的每一项。逻辑寄存器数可以指的是指令集的逻辑寄存器数量,例如,可以为32,相应地,RFT可以包括分别对应这32个寄存器的32个表项。
具体的,第二存储表中每个表项中可以包含状态(valid)位以及索引位(cst-idx)。在为第一类访存指令设置RFT表时,具体可以是将第二存储表中所对应寄存器与该第一类访存指令的目的寄存器一致的表项中的状态位设置为第一标识,以方便后续进行识别。即,将第二存储表中第一类访存指令的目的寄存器对应的状态位设置为第一标识。以及,将该表项中的索引位设置为该第一类访存指令对应表项的索引值。反之,对于在第一存储表中不存在对应表项的访存指令,或者存在对应表项但是未被确定为第一类访存指令的访存指令,可以将第二存储表中所对应寄存器与该访存指令的目的寄存器一致的表项中的状态位设置为第二标识。即,将第二存储表中该访存指令的目的寄存器对应的状态位设置为第二标识。其中,第一标识以及第二标识可以根据实际需求设置,例如,第一标识可以为1,第二标识可以为0。示例性地,图3是本发明实施例提供的另一种处理流程示意图,如图3所示,可以在检测到固定步长的第一类访存指令,可以将其目的寄存器在RFT中的对应项的valid设置为1,并设置cst_idx。反之,则可以将其目的寄存器在RFT中的对应项的valid设置为0。
进一步地,目的寄存器指的是访存指令要写的寄存器。例如,对于指令“ld.d$r4,$r3,0”,其目的寄存器为r4.。访存指令对应表项的索引值指的是第一存储表中该访存指令对应表项的序号。例如,访存指令的PC命中CST表的第6项,那么cst_idx可以设置为6。
进一步地,对于其他访存指令而言,如果所对应的寄存器与该其他访存指令的源寄存器一致的表项中的状态位为第一标识,即,如果其他访存指令的源寄存器在第二存储表中对应的状态位为第一标识,则可以确定该其他访存指令的访存地址依赖于以该寄存器表项所对应寄存器为目的寄存器的第一类访存指令,即该其他访存指令的访存地址依赖于第一类访存指令的目的寄存器,因此,可以将其确定为第二类访存指令。
示例性地,针对上述LD1指令,会将r4寄存器的表项中的状态位设置为1。对于LD2指令,其源寄存器为r4寄存器,而r4寄存器的表项中的状态位被设置为1,说明LD2的访存地址依赖于LD1指令。因此,可是将LD2指令确定为第二类访存指令。
本发明实施例中,对于任一第一类访存指令,将第一类访存指令的目的寄存器在第二存储表中对应的状态位设置为第一标识。从第一类访存指令之外的其他访存指令中,识别目标状态位为第一标识的其他访存指令作为第二类访存指令,目标状态位是其他访存指令的源寄存器在第二存储表中对应的状态位。这样,通过设置第二存储表,基于第二存储表即可便捷的识别出第二类访存指令,进而一定程度上可以确保第二类访存指令的识别效率。
可选的,本发明实施例中还可以包括:
步骤S41、将各所述第二类访存指令对应的第一类访存指令在第一存储表中对应表项的索引值记录至第三存储表,以及,将各所述第二类访存指令的固定偏移记录至第三存储表。
相应地,上述基于预取的所述第一待访存数据以及所述第二类访存指令的固定偏移,将第二待访存数据预取至高速缓存中的步骤,具体可以包括:
步骤1041、从所述第三存储表中查找索引值与所述第一类访存指令在所述第一存储表中对应表项的索引值一致的第二类访存指令对应的固定偏移。
步骤1042、基于查找到的固定偏移以及所述第一待访存数据生成所述第二类访存指令的预取地址,并基于所述第二类访存指令的预取地址将所述第二待访存数据预取至高速缓存中。
本发明实施例中,第三存储表可以是基于内容可寻址存储器(ContentAddressable Memory,CAM)创建的,第三存储表也可以称为第三CAM表、指针表(PointerTarget Table,PTT)组成。具体的,由于第二类访存指令的访存地址依赖于固定步长的第一类访存指令,因此,可以将第二类访存指令记录至PTT表中,以方便查找。具体的,对于任一第二类访存指令,可以在PTT表中记录该第二类访存指令对应的第一类访存指令在第一存储表中对应表项的索引值、该第二类访存指令的固定偏移以及记录状态位(valid位)为1,以通过记录的valid位表明该项有效,通过记录的索引值标识这一项依赖于CST表中的哪一项。其中,第二类访存指令对应的第一类访存指令,指的是目的寄存器与该第二类访存指令的访存地址所依赖的目的寄存器一致的第一类访存指令。示例性地,假设LD1指令在第一存储表中的对应表项的cst_idx为6,那么PPT表中会有对应LD2指令的一项,且其cst_idx为6,offset为32。示例性地,图4是本发明实施例提供的一种表项结构示意图,如图4所示,其中PTT表可以包括valid、offset以及cst_idx域。
进一步地,第二类访存指令的访存地址往往由源寄存器和固定偏移组成。因此,在对某一第一类访存指令进行数据预取之后,可以先从第三存储表中查找记录的索引值与该第一类访存指令在第一存储表中对应表项的索引值一致的第二类访存指令对应的固定偏移,具体的,可以是查找记录的索引值与本次预取的第一类访存指令在第一存储表中对应表项的索引值一致的第二类访存指令对应的固定偏移。也就是说,可以对CST表中的某一项i触发固定步长预取时,同时查找PTT中cst_idx指向i的第二类访存指令的固定偏移。
相应地,则当预取数据返回时,将返回的第一访存数据加上查找到的固定偏移作为PTT的预取地址,即第二类访存指令的预取地址。示例性地,假设索引值与该第一类访存指令在第一存储表中对应表项的索引值一致的第二类访存指令为LD2指令,因为LD2指令的访存地址由r4寄存器+立即数32得到,其中r4寄存器对应的RFT中的valid为1,并且固定偏移32是立即数。在对LD1指令进行预取得到第一访存数据,该第一访存数据即为r4寄存器的值,因此可以将返回的第一访存数据加上查找到的固定偏移32作为第二类访存指令的预取地址。需要说明的是,预取数据具体返回到哪里可以根据实际实现而定。假设Cache系统有三级Cache(L1,L2,L3),通常情况下,可以在L1Cache中实现本方法。相应地,预取回的数据可以直接返回L1 Cache,或者,也可以不返回到L1Cache,而返回到L2Cache或L3Cache。
本发明实施例中,将各第二类访存指令对应的第一类访存指令在第一存储表中对应表项的索引值记录至第三存储表,以及,将各第二类访存指令的固定偏移记录至第三存储表。从第三存储表中查找索引值与第一类访存指令在第一存储表中对应表项的索引值一致的第二类访存指令对应的固定偏移。基于查找到的固定偏移以及第一待访存数据生成第二类访存指令的预取地址,并基于第二类访存指令的预取地址将第二待访存数据预取至高速缓存中。这样,基于设置的第三存储表,可以较为便捷的确定第二类访存指令的预取地址,进而一定程度上可以提高预取效率。
本发明实施例中,第一存储表、第二存储表以及第三存储表均属于内容可寻址存储器表,即这3个表均是基于内容可寻址存储器实现的。这样,一定程度上可以方便对存储表进行搜索。
对于固定步长的指针数据结构,普通数据预取方法往往很难进行预取。在一种现有实现方式中,是通过添加新加载指令(如用LD_PCHS表示),将指针的Load指令替换为LD_PCHS指令。在译码阶段如果检测出LD_PCHS指令,则将这条指令打上标记,送到访存单元中。但是,这种方式中需要对用户程序进行修改,需要将普通的Load指令替换成LD_PCHS指令,实现成本较高。
本发明实施例提出一种硬件预取的方案,在微处理器中访存部件的结构设计中,本发明实施例中可以基于预取器执行上述数据预取方法,该预取器的主体可以由CAM中的第一存储表、第二存储表以及第三存储表这三个CAM表和一个预取队列(PQ)组成。其中,可以将发出的预取请求在预取队列中进行存储,并发送给下一级端口。由于取数据端口是有限的,会存在不同的模块进行竞争,因此,本发明实施例中,可以基于预取队列对预取请求进行管理,以避免造成冲突。本发明实施例中,先从目标程序中识别出特定的访存行为,即识别出第一类访存指令,并将相关信息(例如,PC、上次访存地址、步长等)记录在CAM表中。对第一类访存指令进行数据预取之后,基于预取到的第一访存数据进一步对第二类访存指令进行数据预取。这样,通过提前将数据取到高速缓存中,降低了特定程序行为的访存延迟,达到了提高处理器性能的技术效果。同时,在对固定步长的第一类访存指令进行数据预取的基础上实现对第二类访存指令进行数据预取,使得基于很小的开销即可实现针对固定步长的指针数据结构进行预取,进而降低实现成本。
参照图5,示出了本发明实施例提供的一种数据预取装置的框图,如图5所示,该数据预取装置具体包括:
第一识别模块201,用于识别访存地址按照固定步长变化的访存指令作为第一类访存指令;
第一预取模块202,用于基于所述第一类访存指令的访存地址以及所述固定步长,将第一待访存数据预取至高速缓存中;所述第一访存数据为所述第一类访存指令所需加载的数据;
第二识别模块203,用于基于第一类访存指令的目的寄存器以及其他访存指令的源寄存器,识别访存地址依赖于所述第一类访存指令的目的寄存器的其他访存指令作为第二类访存指令;
第二预取模块204,用于基于预取的所述第一待访存数据以及所述第二类访存指令的固定偏移,将第二待访存数据预取至高速缓存中;所述第二访存数据为所述第二类访存指令所需加载的数据。
可选的,所述第一识别模块201,具体用于:
针对目标程序中的任一访存指令,在第一存储表中存在所述访存指令对应表项的情况下,基于所述访存指令当前的访存地址以及所述访存指令对应表项中的上次访存地址确定当前步长;
在出现当前步长与所述历史步长一致的次数大于预设次数阈值的情况下,将所述访存指令确定为所述第一类访存指令。
可选的,所述装置还包括:
创建模块,用于在所述第一存储表中不存在所述访存指令对应表项的情况下,为所述访存指令创建对应表项,并在所创建表项中设置所述访存指令的上次访存地址以及置信度;
处理模块,用于在出现所述当前步长与所述访存指令对应表项中的历史步长一致的情况下,将所述访存指令对应表项中的置信度加1;
所述第一识别模块201,具体还用于:
在所述访存指令对应表项中的置信度大于所述预设次数阈值的情况下,将所述访存指令确定为第一类访存指令。
可选的,所述装置还包括:
设置模块,用于对于任一所述第一类访存指令,将所述第一类访存指令的目的寄存器在第二存储表中对应的状态位设置为第一标识;所述第二存储表包含多个表项,一个所述表项对应一个寄存器;
所述第二识别模块203,具体用于:
从所述第一类访存指令之外的其他访存指令中,识别目标状态位为第一标识的其他访存指令作为所述第二类访存指令;所述目标状态位是所述其他访存指令的源寄存器在所述第二存储表中对应的状态位。
可选的,所述装置还包括:
记录模块,用于将各所述第二类访存指令对应的第一类访存指令在第一存储表中对应表项的索引值记录至第三存储表,以及,将各所述第二类访存指令的固定偏移记录至第三存储表;
所述第二预取模块204,具体用于:
从所述第三存储表中查找索引值与所述第一类访存指令在所述第一存储表中对应表项的索引值一致的第二类访存指令对应的固定偏移;
基于查找到的固定偏移以及所述第一待访存数据生成所述第二类访存指令的预取地址,并基于所述第二类访存指令的预取地址将所述第二待访存数据预取至高速缓存中。
可选的,所述第一存储表、所述第二存储表以及所述第三存储表属于内容可寻址存储器表。
综上所述,本发明实施例提供的数据预取装置,通过先识别访存地址按照固定步长变化的访存指令作为第一类访存指令,并基于第一类访存指令的访存地址以及固定步长,先将第一待访存数据预取至高速缓存中。接着,进一步识别访存地址依赖于第一类访存指令的目的寄存器的其他访存指令作为第二类访存指令,并基于预取的第一待访存数据以及第二类访存指令的固定偏移,将第二类访存指令所需加载的第二待访存数据预取至高速缓存中。这样,可以在实现针对固定步长的第一类访存指令进行数据预取的同时,进一步实现对依赖于该第一类访存指令的其他访存指令进行数据预取,进而一定程度上可以在实现针对访存指令进行数据预取,以降低访存延迟的同时,提高数据预取效率。
同时,在对第一类访存指令进行预取的基础上,以预取的第一待访存数据作为基础,直接基于预取的第一待访存数据以及第二类访存指令的固定偏移,将第二待访存数据预取至高速缓存中,一定程度上可以降低针对固定步长的指针数据结构的访存指令的预取成本。
参照图6,是本发明实施例提供的电子设备的结构示意图。如图6所示,所述电子设备包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行前述实施例的数据预取方法。
本发明实施例提供了一种机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器能够执行前述实施例的数据预取方法。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
需要指出的是,本申请中所有获取信号、信息或数据的动作都是在遵照所在地国家相应的数据保护法规政策的前提下,并获得由相应装置所有者给予授权的情况下进行的。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以预测方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种数据预取方法、一种数据预取装置、一种电子设备及一个或多个机器可读介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (14)

1.一种数据预取方法,其特征在于,所述方法包括:
识别访存地址按照固定步长变化的访存指令作为第一类访存指令;
基于所述第一类访存指令的访存地址以及所述固定步长,将第一待访存数据预取至高速缓存中;所述第一访存数据为所述第一类访存指令所需加载的数据;
基于第一类访存指令的目的寄存器以及其他访存指令的源寄存器,识别访存地址依赖于所述第一类访存指令的目的寄存器的其他访存指令作为第二类访存指令;
基于预取的所述第一待访存数据以及所述第二类访存指令的固定偏移,将第二待访存数据预取至高速缓存中;所述第二访存数据为所述第二类访存指令所需加载的数据。
2.根据权利要求1所述的方法,其特征在于,所述识别访存地址按照固定步长变化的访存指令作为第一类访存指令,包括:
针对目标程序中的任一访存指令,在第一存储表中存在所述访存指令对应表项的情况下,基于所述访存指令当前的访存地址以及所述访存指令对应表项中的上次访存地址确定当前步长;
在出现当前步长与所述历史步长一致的次数大于预设次数阈值的情况下,将所述访存指令确定为所述第一类访存指令。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在所述第一存储表中不存在所述访存指令对应表项的情况下,为所述访存指令创建对应表项,并在所创建表项中设置所述访存指令的上次访存地址以及置信度;
在出现所述当前步长与所述访存指令对应表项中的历史步长一致的情况下,将所述访存指令对应表项中的置信度加1;
所述在出现当前步长与所述历史步长一致的次数大于预设次数阈值的情况下,将所述访存指令确定为所述第一类访存指令,包括:
在所述访存指令对应表项中的置信度大于所述预设次数阈值的情况下,将所述访存指令确定为第一类访存指令。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:
对于任一所述第一类访存指令,将所述第一类访存指令的目的寄存器在第二存储表中对应的状态位设置为第一标识;所述第二存储表包含多个表项,一个所述表项对应一个寄存器;
所述基于第一类访存指令的目的寄存器以及其他访存指令的源寄存器,识别访存地址依赖于所述第一类访存指令的目的寄存器的其他访存指令作为第二类访存指令,包括:
从所述第一类访存指令之外的其他访存指令中,识别目标状态位为第一标识的其他访存指令作为所述第二类访存指令;所述目标状态位是所述其他访存指令的源寄存器在所述第二存储表中对应的状态位。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
将各所述第二类访存指令对应的第一类访存指令在第一存储表中对应表项的索引值记录至第三存储表,以及,将各所述第二类访存指令的固定偏移记录至第三存储表;
所述基于预取的所述第一待访存数据以及所述第二类访存指令的固定偏移,将第二待访存数据预取至高速缓存中,包括:
从所述第三存储表中查找索引值与所述第一类访存指令在所述第一存储表中对应表项的索引值一致的第二类访存指令对应的固定偏移;
基于查找到的固定偏移以及所述第一待访存数据生成所述第二类访存指令的预取地址,并基于所述第二类访存指令的预取地址将所述第二待访存数据预取至高速缓存中。
6.根据权利要求5所述的方法,其特征在于,所述第一存储表、所述第二存储表以及所述第三存储表属于内容可寻址存储器表。
7.一种数据预取装置,其特征在于,所述装置包括:
第一识别模块,用于识别访存地址按照固定步长变化的访存指令作为第一类访存指令;
第一预取模块,用于基于所述第一类访存指令的访存地址以及所述固定步长,将第一待访存数据预取至高速缓存中;所述第一访存数据为所述第一类访存指令所需加载的数据;
第二识别模块,用于基于第一类访存指令的目的寄存器以及其他访存指令的源寄存器,识别访存地址依赖于所述第一类访存指令的目的寄存器的其他访存指令作为第二类访存指令;
第二预取模块,用于基于预取的所述第一待访存数据以及所述第二类访存指令的固定偏移,将第二待访存数据预取至高速缓存中;所述第二访存数据为所述第二类访存指令所需加载的数据。
8.根据权利要求7所述的装置,其特征在于,所述第一识别模块,具体用于:
针对目标程序中的任一访存指令,在第一存储表中存在所述访存指令对应表项的情况下,基于所述访存指令当前的访存地址以及所述访存指令对应表项中的上次访存地址确定当前步长;
在出现当前步长与所述历史步长一致的次数大于预设次数阈值的情况下,将所述访存指令确定为所述第一类访存指令。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
创建模块,用于在所述第一存储表中不存在所述访存指令对应表项的情况下,为所述访存指令创建对应表项,并在所创建表项中设置所述访存指令的上次访存地址以及置信度;
处理模块,用于在出现所述当前步长与所述访存指令对应表项中的历史步长一致的情况下,将所述访存指令对应表项中的置信度加1;
所述第一识别模块,具体还用于:
在所述访存指令对应表项中的置信度大于所述预设次数阈值的情况下,将所述访存指令确定为第一类访存指令。
10.根据权利要求7-9所述的装置,其特征在于,所述装置还包括:
设置模块,用于对于任一所述第一类访存指令,将所述第一类访存指令的目的寄存器在第二存储表中对应的状态位设置为第一标识;所述第二存储表包含多个表项,一个所述表项对应一个寄存器;
所述第二识别模块,具体用于:
从所述第一类访存指令之外的其他访存指令中,识别目标状态位为第一标识的其他访存指令作为所述第二类访存指令;所述目标状态位是所述其他访存指令的源寄存器在所述第二存储表中对应的状态位。
11.根据权利要求10所述的装置,其特征在于,所述装置还包括:
记录模块,用于将各所述第二类访存指令对应的第一类访存指令在第一存储表中对应表项的索引值记录至第三存储表,以及,将各所述第二类访存指令的固定偏移记录至第三存储表;
所述第二预取模块,具体用于:
从所述第三存储表中查找索引值与所述第一类访存指令在所述第一存储表中对应表项的索引值一致的第二类访存指令对应的固定偏移;
基于查找到的固定偏移以及所述第一待访存数据生成所述第二类访存指令的预取地址,并基于所述第二类访存指令的预取地址将所述第二待访存数据预取至高速缓存中。
12.根据权利要求11所述的装置,其特征在于,所述第一存储表、所述第二存储表以及所述第三存储表属于内容可寻址存储器表。
13.一种电子设备,其特征在于,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放可执行指令,所述可执行指令使所述处理器执行如权利要求1至6中任一项所述的方法。
14.一个或多个机器可读介质,其特征在于,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如权利要求1-6任一项所述的方法。
CN202310833848.1A 2023-07-07 2023-07-07 数据预取方法、装置、电子设备及可读介质 Pending CN116954718A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310833848.1A CN116954718A (zh) 2023-07-07 2023-07-07 数据预取方法、装置、电子设备及可读介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310833848.1A CN116954718A (zh) 2023-07-07 2023-07-07 数据预取方法、装置、电子设备及可读介质

Publications (1)

Publication Number Publication Date
CN116954718A true CN116954718A (zh) 2023-10-27

Family

ID=88461228

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310833848.1A Pending CN116954718A (zh) 2023-07-07 2023-07-07 数据预取方法、装置、电子设备及可读介质

Country Status (1)

Country Link
CN (1) CN116954718A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117573574A (zh) * 2024-01-15 2024-02-20 北京开源芯片研究院 一种预取方法、装置、电子设备及可读存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117573574A (zh) * 2024-01-15 2024-02-20 北京开源芯片研究院 一种预取方法、装置、电子设备及可读存储介质
CN117573574B (zh) * 2024-01-15 2024-04-05 北京开源芯片研究院 一种预取方法、装置、电子设备及可读存储介质

Similar Documents

Publication Publication Date Title
US10013357B2 (en) Managing memory access requests with prefetch for streams
US6584549B2 (en) System and method for prefetching data into a cache based on miss distance
US7506105B2 (en) Prefetching using hashed program counter
CN107479860B (zh) 一种处理器芯片以及指令缓存的预取方法
US7284096B2 (en) Systems and methods for data caching
US9519588B2 (en) Bounded cache searches
US20180300258A1 (en) Access rank aware cache replacement policy
CN111367831B (zh) 翻译页表的深度预取方法、部件、微处理器及计算机设备
US20140149668A1 (en) Prefetching according to attributes of access requests
CN116954718A (zh) 数据预取方法、装置、电子设备及可读介质
US20230376420A1 (en) Method And Apparatus For a Page-Local Delta-Based Prefetcher
US10684857B2 (en) Data prefetching that stores memory addresses in a first table and responsive to the occurrence of loads corresponding to the memory addresses stores the memory addresses in a second table
US9697136B2 (en) Descriptor ring management
US9069683B2 (en) Systems and methods for destaging storage tracks from cache
US6687807B1 (en) Method for apparatus for prefetching linked data structures
CN111506604A (zh) 访问数据的方法、装置和计算机程序产品
JP2014115851A (ja) データ処理装置及びその制御方法
CN108874691B (zh) 数据预取方法和内存控制器
US9250913B2 (en) Collision-based alternate hashing
CN114637700A (zh) 针对目标虚拟地址的地址转换方法、处理器及电子设备
CN106649143B (zh) 一种访问缓存的方法、装置及电子设备
US20150193348A1 (en) High-performance data cache system and method
CN107967306B (zh) 一种存储系统中关联块的快速挖掘方法
CN113760783B (zh) 联合偏移预取方法、装置、计算设备和可读存储介质
CN113391974B (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