CN113778520B - 偏移预取方法、执行偏移预取的装置、计算设备和介质 - Google Patents
偏移预取方法、执行偏移预取的装置、计算设备和介质 Download PDFInfo
- Publication number
- CN113778520B CN113778520B CN202111054692.4A CN202111054692A CN113778520B CN 113778520 B CN113778520 B CN 113778520B CN 202111054692 A CN202111054692 A CN 202111054692A CN 113778520 B CN113778520 B CN 113778520B
- Authority
- CN
- China
- Prior art keywords
- offset
- value
- values
- prefetch
- recent
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本公开提供了一种偏移预取方法、执行偏移预取的装置、计算设备和介质。该偏移预取方法包括:利用偏移预取器从预置偏移值表格中选择用于生成预取请求的K个偏移预取值,其中,预置偏移值表格包括预先设置的N个偏移值,K个偏移预取值为偏移预取器从预置偏移值表格中在时间上最新选择的偏移预取值,其中,N和K为正整数,N大于K;记录K个偏移预取值,用于形成包括K个偏移预取值的近期偏移值表格;以及利用偏移预取器从近期偏移值表格中选择第一偏移预取值,用于基于第一偏移预取值进行数据预取。
Description
技术领域
本公开的实施例涉及一种偏移预取方法、执行偏移预取的装置、计算设备和介质。
背景技术
在中央处理器(Central Processing Unit,CPU)架构中,程序指令与数据一般存储在诸如动态随机存取存储器(Dynamic Random Access Memory,DRAM)的内存中。通常,CPU核心(Core)的运行频率远远高于内存的运行频率,因此,CPU从内存直接获取程序指令与数据需要CPU等待上百个CPU时钟周期,这将会造成CPU由于无法继续运行相关指令而产生空转,造成性能损失。因此,现代高性能CPU设置有多级缓存架构,以存储最近被访问的数据。同时,针对多级缓存架构,还利用数据预取器来识别CPU访问数据的规律,以提前地将可能被访问的数据预取到缓存中,以便于CPU能快速地从缓存中读取数据。
发明内容
本公开的一些实施例提供了一种偏移预取方法、执行偏移预取的装置、计算设备和介质,用于通过降低偏移预取器生成偏移预取值所需的时间来提高偏移预取器的效率,从而能够快速地响应CPU对于数据预取的需求,进一步提升CPU系统的运行效率。
根据本公开的一方面,提供了一种偏移预取方法,该方法包括:利用偏移预取器从预置偏移值表格中选择用于生成预取请求的K个偏移预取值,其中,预置偏移值表格包括预先设置的N个偏移值,K个偏移预取值为偏移预取器从预置偏移值表格中在时间上最新选择的偏移预取值,其中,N和K为正整数,N大于K;记录K个偏移预取值,用于形成包括K个偏移预取值的近期偏移值表格;以及利用偏移预取器从近期偏移值表格中选择第一偏移预取值,用于基于第一偏移预取值进行数据预取。
根据本公开的一些实施例,将选择第一偏移预取值的过程表示为第一训练阶段,该方法还包括:对于选择第二偏移预取值的第二训练阶段,基于规则确定是采用预置偏移值表格还是采用近期偏移值表格来选择第二偏移预取值,其中,第二偏移预取值用于进行数据预取。
根据本公开的一些实施例,规则包括:确定第一偏移预取值的训练分数是否大于分数阈值,在训练分数大于分数阈值的情况下,确定采用近期偏移值表格来选择第二偏移预取值。
根据本公开的一些实施例,规则包括:按照交替方式来采用预置偏移值表格和近期偏移值表格来选择第二偏移预取值,其中,交替方式表示在第一训练阶段采用近期偏移值表格的情况下,在第二训练阶段采用预置偏移值表格来选择第二偏移预取值。
根据本公开的一些实施例,该方法还包括:在确定采用预置偏移值表格来选择第二偏移预取值的情况下,利用偏移预取器来从预置偏移值表格中选择第二偏移预取值,并基于第二偏移预取值来进行数据预取;或者在确定采用近期偏移值表格来选择第二偏移预取值的情况下,利用偏移预取器来从近期偏移值表格中选择第二偏移预取值,并基于第二偏移预取值来进行数据预取。
根据本公开的一些实施例,该方法还包括:利用第二偏移预取值来更新近期偏移值表格。
根据本公开的一些实施例,更新近期偏移值表格包括:确定第二偏移预取值是否存在于近期偏移值表格之中;以及在确定第二偏移预取值不存在于近期偏移值表格之中的情况下,按照先入先出算法、最近最少使用算法或伪最近最少使用算法中的其中一种来更新近期偏移值表格。
根据本公开的一些实施例,偏移预取器为最佳偏移预取器,K个偏移预取值为K个最佳偏移预取值。
根据本公开的一些实施例,在偏移预取器为用于第L级缓存的偏移预取器的情况下,基于第一偏移预取值进行数据预取包括:确定由第一偏移预取值与请求的地址组成的预取请求地址;确定与预取请求地址对应的数据是否存在于第L级缓存中;以及在确定与预取请求地址对应的数据不存在于第L级缓存中的情况下,触发与预取请求地址对应的预取请求,其中,L为大于1的整数。
根据本公开的另一方面,还提供了一种执行偏移预取的装置,其特征在于,执行偏移预取的装置包括偏移预取单元,偏移预取单元配置成:利用偏移预取器从预置偏移值表格中选择用于生成预取请求的K个偏移预取值,其中,预置偏移值表格包括预先设置的N个偏移值,K个偏移预取值为偏移预取器从预置偏移值表格中在时间上最新选择的偏移预取值,其中,N和K为正整数,N大于K;记录K个偏移预取值,用于形成包括K个偏移预取值的近期偏移值表格;以及利用偏移预取器从近期偏移值表格中选择第一偏移预取值,用于基于第一偏移预取值进行数据预取。
根据本公开的一些实施例,将选择第一偏移预取值的过程表示为第一训练阶段,偏移预取单元还配置成:对于选择第二偏移预取值的第二训练阶段,基于规则确定是采用预置偏移值表格还是采用近期偏移值表格来选择第二偏移预取值,其中,第二偏移预取值用于进行数据预取。
根据本公开的一些实施例,规则包括:确定第一偏移预取值的训练分数是否大于分数阈值,在训练分数大于分数阈值的情况下,确定采用近期偏移值表格来选择第二偏移预取值。
根据本公开的一些实施例,规则包括:按照交替方式来采用预置偏移值表格和近期偏移值表格来选择第二偏移预取值,其中,交替方式表示在第一训练阶段采用近期偏移值表格的情况下,在第二训练阶段采用预置偏移值表格来选择第二偏移预取值。
根据本公开的一些实施例,偏移预取单元还配置成:在确定采用预置偏移值表格来选择第二偏移预取值的情况下,利用偏移预取器来从预置偏移值表格中选择第二偏移预取值,并基于第二偏移预取值来进行数据预取;或者在确定采用近期偏移值表格来选择第二偏移预取值的情况下,利用偏移预取器来从近期偏移值表格中选择第二偏移预取值,并基于第二偏移预取值来进行数据预取。
根据本公开的一些实施例,偏移预取单元还配置成:利用第二偏移预取值来更新近期偏移值表格。
根据本公开的一些实施例,为更新近期偏移值表格,偏移预取单元还配置为:确定第二偏移预取值是否存在于近期偏移值表格之中;以及在确定第二偏移预取值不存在于近期偏移值表格之中的情况下,按照先入先出算法、最近最少使用算法或伪最近最少使用算法中的其中一种来更新近期偏移值表格。
根据本公开的一些实施例,偏移预取器为最佳偏移预取器,K个偏移预取值为K个最佳偏移预取值。
根据本公开的一些实施例,在偏移预取器为用于第L级缓存的偏移预取器的情况下,为基于第一偏移预取值进行数据预取,偏移预取单元还配置为:确定由第一偏移预取值与请求的地址组成的预取请求地址;确定与预取请求地址对应的数据是否存在于第L级缓存中;以及在确定与预取请求地址对应的数据不存在于第L级缓存中的情况下,触发与预取请求地址对应的预取请求,其中,L为大于1的整数。
根据本公开的又一方面,还提供了一种计算设备,包括:处理器;和存储器,其中,存储器中存储有计算机可读代码,计算机可读代码在由处理器运行时,执行如上所述的偏移预取方法。
根据本公开的又一方面,还提供了一种非暂时性计算机可读存储介质,其上存储有指令,指令在被处理器执行时,使得处理器执行如上所述的偏移预取方法。
利用本公开实施例提供的偏移预取方法、执行偏移预取的装置、计算设备和介质,通过记录偏移预取器基于预置偏移值表格在时间上最新选择的K个偏移预取值来构建近期偏移值表格,以使得偏移预取器能够利用构建的近期偏移值表格来生成偏移预取值,从而降低偏移预取器生成偏移预取值所需的时间,由此实现提高偏移预取器的效率以及进一步提升CPU系统的运行效率。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了包括预取器的多级缓存架构的示意图;
图2示出了根据本公开实施例的偏移预取方法的示意性流程图;
图3示出了根据本公开实施例的利用偏移预取器从预置偏移值表格中选择偏移预取值的整体示意图;
图4示出了根据本公开实施例的利用偏移预取器从预置偏移值表格中选择偏移预取值的示意性框图;
图5示出了根据本公开实施例的利用偏移预取器从预置偏移值表格中选择偏移预取值的另一流程示意图;
图6示出了根据本公开实施例的利用偏移预取器基于预置偏移值表格和近期偏移值表格交替进行数据预取的整体示意图;
图7示出了根据本公开实施例的利用偏移预取器基于预置偏移值表格和近期偏移值表格交替进行数据预取的执行流程图;
图8示出了示出了根据本公开实施例的利用偏移预取器基于预置偏移值表格和近期偏移值表格进行数据预取的另一执行流程图;
图9示出了根据本公开实施例的执行偏移预取的装置的示意性框图;
图10示出了根据本公开实施例的计算设备的示意性框图;
图11示出了根据本公开实施例的非暂时性计算机可读存储介质的示意图。
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本公开一部分的实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
此外,如本公开和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。
由于CPU核心(Core)的运行频率远远高于DRAM内存的运行频率,因此,CPU从内存直接获取数据与程序指令需要等待上百个CPU的时钟周期,为了避免CPU直接地从内存访问数据所带来的时间延迟,通常配置有缓存(Cache)。缓存可以是指数据访问速度较快的高速存储器,其先于内存与CPU进行数据交换,缓存的设置使得计算机系统能够发挥出更高的性能。
当CPU需要读取数据时,首先在缓存中进行查找,如果数据存在于缓存中,则立即读取并发送给CPU进行处理,如果数据并未存在于缓存中,则从访问速率相对较慢的内存中读取数据并发送给CPU进行处理,同时把这个数据所在的数据块调入缓存,从而使得在后续阶段CPU对整块数据的读取都从缓存中进行,而不必再调用内存。这样的读取机制使得CPU读取缓存的命中率比较高,也就是说CPU下一次要读取的数据较大概率都存在于缓存中,只有少部分需要从内存中读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。
图1示出了包括预取器的多级缓存架构的示意图,如图1所示,在多级缓存架构中,CPU首先访问一级(L1)缓存,其访问速度最快,但是数据容量最小,二级(L2)缓存的速度低于L1缓存但是数据容量大于L1缓存,还可以包括三级或者更高级的缓存,一般地,最高级别的缓存(LLC)的数据容量最大,但是访问速度也最慢。例如,在图1示出的的三级缓存架构中,LLC缓存即为L3缓存,CPU首先从L1缓存中查找数据,如果未找到则逐级地向下查找直至内存,然后再将访问到的数据逐级地返回至CPU。
此外,在多级缓存架构中还设置有预取器,以利用预取器发现CPU访问数据的规律,从而预取即将被访问的数据、程序指令到缓存中。如果预取的内容是程序指令,则称为指令预取器,如果预取的内容是数据,则称为数据预取器。根据数据的目标缓存位置,数据预取器还可以进一步被细分为L1预取器(即,将数据预取到L1缓存)、L2预取器(即,将数据预取到L2缓存)、LLC预取器(即,将数据预取到最后一级缓存,LLC缓存)等。如图1中所示的L2缓存具有L2预取器,该L2预取器通过生成预取请求来将数据预取至L2缓存。此外,L2缓存还可以对预取请求进行校验,等同于非预取数据请求,如果预取请求所对应的数据已经存在于L2缓存中,则L2缓存将丢弃该预取请求,即不从下一级缓存/内存中进行预取,如果预取请求所对应的数据并未存在于L2缓存中,则将该预取请求发送至下级缓存/内存以将数据预取至L2缓存。
数据预取是提升CPU运行效率的关键技术之一。由于缓存只能保存最近被访问过的数据,当CPU需要读取从未被访问的数据或是由于缓存大小限制而被替换出缓存的数据时,CPU仍然需要等待数十甚至上百个时钟周期以从内存读取数据,这将造成性能损失。数据预取器正是通过分析以往数据访问规律来提前预取即将被使用的数据到缓存中,从而减少CPU等待数据的时钟周期,并提升CPU整体性能。
偏移预取器是一类应用较为广泛的数据预取器,根据整体数据预取规律,发现用于组成预取地址的偏移预取值,并基于发现的偏移预取值来生成预取请求。预取请求的预取地址等于该偏移预取值加上触发该预取的程序地址。偏移预取器发现偏移预取值的过程可以称为训练过程。相对于L2或LLC预取器只能使用物理地址进行训练(即基于物理地址来触发预取并得到偏移预取值),L1预取器往往使用虚拟地址进行训练,并发送由虚拟地址组成的预取请求。
然而,当前偏移预取器一般是从预先设置的一组数据中尝试寻找最合适的偏移预取值,为了覆盖较完整的偏移值范围,这组数据的数据量通常较大,这使得降低了得到偏移预取值的效率,无法满足CPU高速运行的需求。
为了解决上述技术问题,本公开的一些实施例提供了一种偏移预取方法,用于通过降低偏移预取器获取偏移预取值所需的时间来提高偏移预取器的效率,从而能够快速地响应CPU对于数据预取的需求,进一步提升CPU系统的运行效率。
具体的,图2示出了根据本公开实施例的偏移预取方法的示意性流程图,以下将结合图2描述根据本公开一些实施例的偏移预取方法。可以的理解的是,在本文中涉及的应用场景中,除了CPU,还可以应用于其他类型的处理器,诸如图形处理器(GraphicsProcessing Unit,GPU)等各类处理器,只要其中具有缓存架构并且能够实施偏移预取器,在此不作限制。除非另有定义,本文中使用的所有术语具有与本公开所属领域的普通技术人员共同理解的相同含义。
如图2所示,首先,在步骤S101,利用偏移预取器从预置偏移值表格中选择用于生成预取请求的K个偏移预取值。根据本公开的一些实施例,该偏移预取器可以是将数据预取至多级缓存架构中的任意一级缓存的偏移预取器,例如可以是图1中示出的L2预取器,或者也可以是诸如L1预取器或LLC预取器等,在此不作限制,针对不同级别的预取器,其选择偏移预取值的过程是类似的,本文中将以偏移预取器为L2预取器作为具体示例进行描述。
根据本公开的一些实施例,预置偏移值表格可以包括预先设置的N个偏移值。如上所述,为了覆盖较完整的偏移值范围,预置偏移值表格中包括的偏移值的数目一般较多,例如,N=52个偏移值,偏移预取器从这52个偏移值中选择当前最合适的偏移值作为偏移预取值,该选择的偏移预取值用于生成预取请求从而将数据预取至诸如L2缓存。
根据本公开的一些实施例,利用偏移预取器得到的K个偏移预取值为偏移预取器从预置偏移值表格中在时间上最新选择的偏移预取值,并且N大于K。可以将偏移预取器得到一个偏移预取值的过程称为一个训练阶段,例如,可以将产生第一个偏移预取值的过程称为第一个训练阶段,类似地,将产生第K个偏移预取值的过程称为第K个训练阶段。在偏移预取器中,训练过程与预取过程是持续、并行地进行的,一次训练阶段的结束就是下一次训练阶段的开始。一个训练阶段的结束将会选择一个偏移预取值,例如,在产生第一偏移预取值之后,该第一偏移预取值被用来生成接下来一段时间的预取请求,同步地,偏移预取器将进行第二训练阶段,并在第二训练阶段结束选择出第二偏移预取值,此后一段时间内,该第二偏移预取值将被用来生成预取请求,直至第三训练阶段选出新的偏移预取值。其中,各个阶段选出的偏移预取值可以相同,也可能不相同。关于偏移预取器从预置偏移值表格中选择用于生成预取请求的偏移预取值的具体过程将在下文详细描述。
接着如图2所示,在步骤S102,记录K个偏移预取值,用于形成包括K个偏移预取值的近期偏移值表格。以及,在步骤S103,利用偏移预取器从近期偏移值表格中选择第一偏移预取值,用于基于第一偏移预取值进行数据预取。
在根据本公开的一些实施例中,利用偏移预取器从预置偏移值表格中最近选择的K个偏移预取值来组成近期偏移值表格,并基于该近期偏移值表格来产出下一阶段的偏移预取值。由于K小于N,也就是说,近期偏移值表格中偏移值的数目小于预置偏移值表格中偏移值的数目,使得偏移预取器从近期偏移值表格选择偏移预取值的时间将被缩短。在K明显小于N的情况下,这一时间优势将更加明显,作为示例,K可以诸如等于4或8,相比于从N=52个偏移值中选择偏移预取值所需的时间,从K=4个偏移值中选择偏移预取值所需的时间将明显降低,由此能够实现通过降低偏移预取器生成偏移预取值所需的时间来提高偏移预取器的效率,从而能够快速地响应CPU对于数据预取的需求,进一步提升CPU系统的运行效率。
进一步地,大多数程序的某一个运行阶段往往仅用到很少的几个偏移预取值。因此,最新产生K个偏移预取值往往针对某一个运行阶段普遍适用。由此,通过将在时间上最新产生的K个偏移预取值形成为近期偏移值表格(Recent Offsets Table,ROT)并从中训练选出下一阶段的偏移预取值,往往预取结果也会比较准确,并且由于ROT中包括的偏移值的数目远远小于预置偏移值表格(Preset Offsets Table,POT)中包括的偏移的数目,由此使得利用ROT进行的训练阶段将会比利用POT进行的训练阶段快很多。
在根据本公开一些实施例的偏移预取方法中,通过提供简便、易实现的近期偏移值表格来实现数据预取,能够在保证数据预取的准确性的同时有效降低训练阶段的时间消耗,从而进一步提升相应CPU的整体性能。并且,提出的方案避免对现有预取器及CPU的架构产生影响,便于广泛应用实现。
以下将描述利用偏移预取器从预置偏移值表格中选择偏移预取值的具体实现过程,可以理解的是,利用偏移预取器从预置偏移值表格中选择近期偏移值表格的过程是类似的。
图3示出了根据本公开实施例的利用偏移预取器从预置偏移值表格中选择偏移预取值的整体示意图。如图3所示,在偏移预取器中,训练过程与预取过程是持续、并行地进行的,例如,在训练阶段1的结束将产生偏移预取值D1,以用于进行数据预取,在利用D1进行数据预取的过程中。偏移预取器同步进入训练阶段2,并产生新的偏移预取值D2,以用于接下来一段时间的数据预取,以此类推。
在每个训练阶段中,将包括多个训练轮次,例如轮次1、轮次2直至最大数目轮次(Round Max,RMax)。RMax的具体数值是可以设置的,例如,RMax=100。在每个训练轮次中,偏移预取器都将对所使用的表格中包括的每个偏移值进行测试,若测试通过,则该被测偏移值的分数增加,例如分数加1,以根据每个偏移值各自的分数来从中选择出最优的偏移值,例如分数最高的偏移值。例如,在所使用的表格为预置偏移值表格的情况下,其中将包括N个预置偏移值,例如,N=52。
在训练阶段1的结束,也就是完成第RMax轮次的测试,或者某一偏移值的分数值大于或等于预先设置的最大分数值之后,将分数最高的偏移值或者该具有最大分数值的相应偏移值确定为最佳偏移值,即,作为进行数据预取的偏移预取值D1。此外,如果测试得到的偏移值的分数过小,例如小于或等于预先设置的最小分数值,则还可以将产生的最佳偏移值设置为零,也就意味着此训练阶段将不会发送预取请求。换句话说,如果测试产生的偏移预取值的分数较低,则表示其预取准确性也很可能较低,则该数据被用到的可能性也较低,由此不产生预取请求,避免不必要的数据占用缓存空间。由此,图3中示出的通过测试分数来产生最佳偏移值(例如,分数最高的偏移值)的偏移预取器也可以称为最佳偏移预取器。在根据本公开的实施例中,例如步骤S101中提及的偏移预取器可以是以上基于分数选择最佳偏移值的最佳偏移预取器,在此种情况下,上述K个偏移预取值可以表示为K个最佳偏移预取值。然而,可以理解的是,本公开中涉及的偏移预取器还可以是其他类的预取器,在此不作限制,根据本公开实施例的方法对其他的偏移预取器设计同样适用。
图4示出了根据本公开实施例的利用偏移预取器从预置偏移值表格中选择偏移预取值的示意性框图。在图4的示例中,偏移预取器为L2预取器,即,接收来自L1缓存的请求以进行预取训练,然后产生将数据预取至L2缓存的预取请求。
在缓存架构中,如果请求的数据在缓存中,则表示为命中(Hit),如果未存在于缓存中,则表示为未命中(Miss)。如图4所示,首先,L2缓存接收来自L1缓存的数据请求,其中包括地址X,由于图4中示出的为L2预取器,则地址X为物理地址。对于用于进行训练的物理地址X可以是来自L1缓存的任意地址,即,L2缓存访问的所有地址,也可以是仅L2缓存未命中地址(例如,表示为L2 Miss),即,该物理地址X对应的数据未存在于L2缓存中,判断地址X对应的数据是否存在于L2缓存在图4中示出为“X?”。在本文中,将以进行训练的地址为L2缓存未命中地址(即,L2 Miss)作为示例进行描述,但是并不对其进行限制。
接着,如图4所示,对于偏移值表格中的各个偏移值逐个的进行测试,该偏移值表格中包括若干个偏移值,例如可以是上述预置偏移值表格也可以上述近期偏移值表格。对于当前进行测试的偏移值d,将与测试地址X进行减法,并判断X-d是否命中最近请求表(Recent Request table,RRT),如果命中则偏移值d的分数加1,例如可以通过设置相应的计数器来累计各个偏移值在训练阶段的分数。其中,RRT可以是一个单列的表格,用于保存最近返回的来自L3应答的物理地址的哈希值(例如,可以用哈希函数H2生成该哈希值H2(Y-D))。此外,该表格使用该物理地址的另一个哈希值(例如,可以用哈希函数H1生成该哈希值H1(Y-D))进行索引。此外,在被存储在RRT表格之前,L3缓存返回的物理地址Y还可以先填充在队列中,这是为了使得最近返回的物理地址不会立即被推送到RRT中,而是需要在队列中等待,通过这种方式可以使得RRT中存储近期而又不是特别近被访问的地址。
如上所述的,在经过RMaxx轮次或者某一偏移值的分数达到预设的最大分数的情况下,将产生最佳偏移值D。以预置偏移值表格中包括N=52个偏移值为例,在进行了RMax=100个轮次的测试的情况下,将需要N*RMax=5200个L2 Miss地址来完成测试过程,并从中确定出分数最高的偏移值作为最佳偏移值D。
对于得到的地址X+D,将首先去往L2缓存进行判断,地址X+D对应的数据是否已经存在在L2缓存中,如果不存在,则基于地址X+D生成去往L3缓存的预取请求,以将数据预取值L2缓存。
由此可以看出,在偏移值表格中包括的偏移值数量较多的情况下,测试时间也明显增加,这会造成训练时间过长,对程序行为改变响应不及时。但是在预置偏移值的数目较少的情况下,也会由于实际的最佳偏移值不在预置偏移值表格中,造成只能选出次优或者不佳的偏移值,例如选出的最佳偏移值的分数较低。相比较地,在偏移值表格为根据本公开一些实施例生成的近期偏移值表格的情况下,测试时间由于待测偏移值数目降低而将明显减少,并且,由于其中包括的偏移值为在时间上最新选出的偏移预取值,保证了尤其中选出的偏移预取值的准确性,在节省训练时间的同时保证预取准确性。
为了更详细的介绍偏移预取器基于偏移值表格选择最佳偏移值的过程,提供图5,图5示出了根据本公开实施例的利用偏移预取器从预置偏移值表格中选择偏移预取值的另一流程示意图。作为示例,图5中示出的偏移预取器可以是图1中的L2预取器,其可以基于L2Miss地址进行训练,并将数据预取至L2缓存。
首先,对在图5中涉及的常量进行描述。
ScoreMax(SMax):最大分数值,当一个偏移值的分数值达到SMax,则直接结束当前训练阶段,并选择该偏移值为最佳偏移值;
ScoreMin(SMin):最小分数值,当训练阶段结束后,例如,完成了100轮测试,如果确定的最佳偏移值D的分数小于SMin,则可以将D设置为等于0,并且不会发送预取请求;
Round Max(RMax):最大测试轮数;
Offsets:预置的多个偏移值,最佳偏移值将这其中选出。
Number of Offsets(NO),偏移值表格中包括的偏移值的总数目,例如,在训练阶段使用的表格为预置偏移值表格的情况下,NO=N,例如52。在训练阶段使用的表格为近期偏移值表格的情况下,NO=K,例如4或8。
可以理解的是,以上列出的常量可以是由系统配置的值,例如,最大测试轮次RMax可以设置为等于100或者其他合适的值,在此不作限制。
接着,对在图5中涉及的变量进行描述,这些变量用于存储训练阶段的相关信息。
D:选出的最佳偏移值;
S:D对应的训练分数值;
Round(R):记录当前测试轮数;
Scores:当前测试的偏移值的分数;
P:Offsets及Scores的指针,其中,Offsets[P]表示当前测试的偏移值,Scores[P]表示该当前测试的偏移值所对应的分数;
BestScore(BS):目前最高的测试分数;
BestOffset(BO):BS所对应的偏移值。
如图5示出,其中示出的流程可以对应于一个训练阶段。训练阶段的开始将对变量进行初始化,例如,设置为R=1,BS=0以及P=1。
从R=1轮次开始,对于表格中的偏移值,以L2 Miss地址X进行测试。首先,在S501,得到测试地址Z=X-Offsets[P],然后,在S502,判断Offsets[P]是否命中RRT,如果命中RRT,则进行S503,该偏移值Offsets[P]的对应分数Scores[P]增加,例如加1,即,Scores[P]++。如果Offsets[P]未命中RRT,则进入S507。
接着,在S504,判断Scores[P]是否大于目前最高的测试分数BS,如果确定大于BS,则进入S505,即,将当前偏移值Offsets[P]的分数Scores[P]确定为新的BS,即,BS=Scores[P],并且,将该当前偏移值Offsets[P]确定为新的当前最佳偏移值,即,BO=Offsets[P]。否则,将进入S507。
在S506,判断BS是否大于等于预先设置的最大分数值SMax,如果是,则表明该偏移值Offsets[P]已经完成测试,也就是说其符合分数要求,可以直接结束当前测试阶段,并将该偏移值Offsets[P]确定为最佳偏移值,即进入S5013。
如果BS小于预先设置的最大分数值SMax,则进入S507,判断指针P是否对应于偏移值的总数目NO,如果否,则表示当前偏移值不是表格中的最后一个偏移值,这意味着当前轮次(例如,R=1)的测试并未结束,则进入S508,对指针P加1,然后返回S501,针对表格中的下一个偏移值进行测试。否则,即,P=NO,则表示当前偏移值为表格中的最后一个偏移值,意味着完成了当前轮次的测试,即,进入S509,判断当前轮次R是否小于最大轮次RMax,如果是,则进入S5010,对当前轮次R加1并且对指针P加1,以返回S501,进入新一轮次的测试。
接着,如图5所示,如果R不小于RMax,则表示当前轮次为最大轮次,即完成当前训练阶段。在S5011,判断得到的BS是否大于预先设置的最小分数值SMin,作为示例,SMin可以设置为等于1。如果BS不大于SMin,则进入S5012,可以将D设置为等于0,并且不会发送预取请求,即禁止基于分数值较低的偏移值进行数据预取,避免不必要的数据占用缓存空间。
如果BS大于SMin,则进入S5013,将偏移值BO确定为当前训练阶段选出的最佳偏移值D,并将该偏移值BO的分数BS赋值给D的分数S。
由此,经过以上步骤S501-S5013,能够产生最佳偏移值D。该最佳偏移值D将在接下来一段时间内用于数据预取,预取地址等于该偏移值D加上触发该预取的物理地址X。
根据本公开的一些实施例,在偏移预取器为用于第L级缓存的偏移预取器的情况下,基于第一偏移预取值进行数据预取包括:确定由第一偏移预取值与请求的地址组成的预取请求地址;确定与预取请求地址对应的数据是否存在于第L级缓存中;以及在确定与预取请求地址对应的数据不存在于第L级缓存中的情况下,触发与预取请求地址对应的预取请求,其中,L为大于1的整数。以偏移预取器为用于第2级缓存的偏移预取器,即L2预取器为例,在产生最佳偏移值D1之后,L2缓存还可以对基于该偏移值D的预取请求进行校验,即,如果基于偏移值D的预取请求所对应的数据已经存在于L2缓存中,则L2缓存将丢弃该预取请求,即不对下一级缓存/内存进行预取,如果预取请求所对应的数据并未存在于L2缓存中,则将该预取请求发送至下级缓存/内存以将数据预取至L2缓存。在基于当前最佳偏移值D(例如,表示为D1)进行预取的过程中,L2预取器将按照图5所示的过程进行下一训练阶段,以产生新的最佳偏移值(例如表示为D2)。该新的最佳偏移值D2也将用于后续一段时间内的数据预取,直到产生下一个新的最佳偏移值D3,以此类推。
此外,可以理解的是,由于L2预取器是基于物理地址进行训练,由此,系统还需要检验触发预取请求的地址X与X+D是否在同一内存页面中,如果不在同一页面中,则不发送基于X+D的预取请求,也就是说,请求的地址超出了地址访问的范围。
以上以L2预取器为例,结合图3-图5详细描述了L2预取器进行数据预取的实现过程,可以理解的是,L2预取器基于预置偏移值表格或者近期偏移值表格进行数据预取的过程是类似的。
根据本公开的一些实施例,偏移预取方法还可以包括:利用第二偏移预取值来更新近期偏移值表格。其中,更新近期偏移值表格包括:确定第二偏移预取值是否存在于近期偏移值表格之中;以及在确定第二偏移预取值不存在于近期偏移值表格之中的情况下,按照先入先出算法、最近最少使用算法或伪最近最少使用算法中的其中一种来更新近期偏移值表格。
为了维护近期偏移值表格,在确定得到第二偏移预取值D2之后,还可以基于该偏移值D2对表格ROT进行更新,如果偏移值D2不在ROT中,则可以将D2插入到ROT中。此外,如果ROT中包括的偏移值数目已达到K个,则可以根据替换策略替换掉ROT中的某个偏移值。替换策略可以是先入先出规则,或者也可以是基于其他的替换规则,例如最近使用(LeastRecently Used,RLU)规则或者伪最近使用(Pseudo Least Recently Used,PRLU)规则等。作为示例,在替换策略为RLU规则的情况下,对于包括偏移值D的ROT,还可以更新与偏移值D对应的LRU信息,LRU信息用于执行针对偏移值的更新,例如,可以是偏移值的使用次数等。
在根据本公开的一些实施例中,为了平衡预取器训练阶段所需的时间以及预取准确性,能够根据规则来选择表格,并基于选择的表格进行训练。
根据本公开的一些实施例,可以将步骤S101中选择第一偏移预取值D1的过程表示为第一训练阶段,由此,对于选择第二偏移预取值D2的第二训练阶段,可以基于预定规则来确定是采用预置偏移值表格还是采用近期偏移值表格来选择该第二偏移预取值D2。
根据本公开的一些实施例,偏移预取方法还可以包括:在确定采用预置偏移值表格来选择第二偏移预取值的情况下,利用偏移预取器来从预置偏移值表格中选择第二偏移预取值,并基于第二偏移预取值来进行数据预取;或者在确定采用近期偏移值表格来选择第二偏移预取值的情况下,利用偏移预取器来从近期偏移值表格中选择第二偏移预取值,并基于第二偏移预取值来进行数据预取。基于预置偏移值表格或者近期偏移值表格来选择第二偏移预取值的过程可以参照以上结合图3-图5进行的描述。
根据本公开的一些实施例,上述规则可以是指按照交替地方式来采用预置偏移值表格和近期偏移值表格来选择第二偏移预取值。该交替方式可以是指预置偏移值表格和近期偏移值表格逐个地交替被使用,也就是说,在第一训练阶段采用近期偏移值表格选择第一偏移预取值D1的情况下,则在第二训练阶段采用预置偏移值表格来选择第二偏移预取值D2,而后,将在第三训练阶段再次采用近期偏移值表格选择第三移预取值D3,依次类推。
图6示出了根据本公开实施例的利用偏移预取器基于预置偏移值表格和近期偏移值表格交替进行数据预取的整体示意图。在图6所示出的场景中,已经基于预置偏移值表格至少进行了K次训练阶段,即,已经形成了包括预定数目K个偏移预取值的近期偏移值表格。在图6中示意性地示出了交替使用预置偏移值表格和近期偏移值表格的过程。
作为示例,在图6中将基于预置偏移值表格进行的训练阶段称为全训练阶段,并将基于近期偏移值表格进行的训练阶段称为快训练阶段,在图6中,首先基于预置偏移值表格进行全训练阶段,例如,依次进行RMax个轮次,并且每个轮次逐个对预置偏移值表格中的N个偏移值进行测试,以得到各个偏移值的累计分数,并基于分数确定最佳偏移值D1。接着,进入快训练阶段,即基于近期偏移值表格来进行测试,并在每个轮次逐个对近期偏移值表格中的K个偏移值进行测试,以得到各个偏移值的累计分数,然后基于分数确定最佳偏移值D2。下一步将再次进入全训练阶段,即,全训练阶段与快训练阶段交替进行。
图7示出了根据本公开实施例的利用偏移预取器基于预置偏移值表格和近期偏移值表格交替进行数据预取的执行流程图。如图7所示,首先进行初始化,例如,可以将表示全训练阶段(Full Training,FT)的变量FT设置为真,作为FT的初始值。在S701,判断近期偏移值表格ROT中包括的偏移值数目是否大于等于K,如果否,则表示还未形成近期偏移值表格ROT,则可以直接将FT设置为等于真(即,S707)。如果ROT>=K,则进入S702,确定FT是否为真,如果FT为真则指示选择预置偏移值表格POT进行训练(S708)。否则,进入S703,即,F为假,则选择近期偏移值表格ROT进行训练。
在S704,预取器按照选择的表格进行训练,并产生最佳偏移值D。在S705,对ROT进行更新,例如,如果产生的最佳偏移D不在ROT中,则将该偏移值D插入ROT中。若ROT中包括的偏移值数目已达到K个,则可以根据替换策略(例如,LRU)替换掉ROT中的某个偏移值。此外,如果D已经存在于ROT中,根据替换策略,也有可能更新与偏移值D对应的LRU信息,LRU信息用于执行针对偏移值的更新。
接着,在S706,对FT进行翻转,例如,在当前FT为真(例如表示为“0”),则在此步骤,FT翻转为假(例如表示为“1”),然后返回至S701,重新确定用于进行训练的表格。
除了以上基于图6和图7描述的交替方法,在根据本公开的另一些实施例中,上述规则也可以是确定第一偏移预取值D1的训练分数S1是否大于分数阈值,在训练分数大于分数阈值的情况下,确定采用近期偏移值表格来选择第二偏移预取值。在这些实施例中,上述表格并非逐个交替进行的,而是基于产生的偏移预取值的分数来进行判断,如果D1的训练分数S1大于分数阈值,这说明基于近期偏移值表格产生的偏移值比较准确,符合预取要求,由此,可以继续基于该近期偏移值表格来进行训练。关于分数阈值可以由系统预先设置,作为示例,例如可以将分数阈值(Score Threshold,ST)设置为最高分数值SMax乘以一个系数,例如ST=SMax*0.8,或者可以将ST设置为其他数值。
图8示出了示出了根据本公开实施例的利用偏移预取器基于预置偏移值表格和近期偏移值表格进行数据预取的另一执行流程图。在图8所示的执行流程中,步骤S801-S808与图7中示出的步骤S701-S708的过程类似,不再重复描述。对于图8中的执行流程,增加了步骤S809,在更新了ROT之后,进行判断,FT是否为假并且满足特定条件,其中,特定条件例如可以是基于D1的训练分数S1是否大于分数阈值,即,BS>ST。如果FT为假,则意味着当前训练阶段为快训练阶段,特定条件目的是判断是否继续使用快训练,例如判断BS是否大于分数阈值ST,如果满足这两个条件,则可以返回至S801,此时在S802的判断中由于FT为假则进入S803,即选择ROT进行训练。此外,在S809中,还可以设置连续进行快训练的最多次数,在达到该次数的情况下则强制进入S806,以使得FT翻转为真。
在根据本公开一些实施例中,由于大多数程序的某一个运行阶段往往仅有很少的几个最佳偏移值,因此最近产生的最佳偏移往往是最近使用过的这些最佳偏移值之一,这使得能够保证,即使近期偏移值表格中包括的偏移值数目较少,从中选择出偏移值也可以保证准确性。本公开一些实施例提供方法正是基于对于CPU程序运行以及数据规律的这一洞见。利用根据本公开一些实施例的偏移预取方法,能够形成具有较少偏移值的近期偏移值表格,以基于预置偏移值表格和近期偏移值表格进行偏移预取器的训练阶段,由此,通过降低偏移预取器生成偏移预取值所需的时间来提高偏移预取器的效率,能够快速地响应CPU对于数据预取的需求,进一步提升CPU系统的运行效率。
根据本公开的另一方面,还提供了一种执行偏移预取的装置。图9示出了根据本公开实施例的执行偏移预取的装置的示意性框图。
如图9所示,执行偏移预取的装置1000可以包括偏移预取单元1010。
根据本公开的一些实施例,执行偏移预取的装置1000中的偏移预取单元1010可以配置成执行以下步骤:利用偏移预取器从预置偏移值表格中选择用于生成预取请求的K个偏移预取值,其中,预置偏移值表格包括预先设置的N个偏移值,K个偏移预取值为偏移预取器从预置偏移值表格中在时间上最新选择的偏移预取值,其中,N和K为正整数,N大于K;记录K个偏移预取值,用于形成包括K个偏移预取值的近期偏移值表格;以及利用偏移预取器从近期偏移值表格中选择第一偏移预取值,用于基于第一偏移预取值进行数据预取。
根据本公开的一些实施例,该偏移预取器可以是将数据预取至多级缓存架构中的任意一级缓存的偏移预取器,例如可以是图1中示出的L2预取器,或者也可以是诸如L1预取器或LLC预取器等,在此不作限制,针对不同级别的预取器,其选择偏移预取值的过程是类似的。
根据本公开的一些实施例,预置偏移值表格可以包括预先设置的N个偏移值。如上所述,为了覆盖较完整的偏移值范围,预置偏移值表格中包括的偏移值的数目一般较多,例如,N=52个偏移值,偏移预取器从这52个偏移值中选择当前最合适的偏移值作为偏移预取值,该选择的偏移预取值用于生成预取请求从而将数据预取至诸如L2缓存。
根据本公开的一些实施例,利用偏移预取器得到的K个偏移预取值为偏移预取器从预置偏移值表格中在时间上最新选择的偏移预取值,并且N大于K。可以将偏移预取器得到一个偏移预取值的过程称为一个训练阶段,例如,可以将产生第一个偏移预取值的过程称为第一个训练阶段,类似地,将产生第K个偏移预取值的过程称为第K个训练阶段。在偏移预取器中,训练过程与预取过程是持续、并行地进行的,一次训练阶段的结束就是下一次训练阶段的开始。一个训练阶段的结束将会选择一个偏移预取值,例如,在产生第一偏移预取值之后,该第一偏移预取值被用来生成接下来一段时间的预取请求,同步地,偏移预取器将进行第二训练阶段,并在第二训练阶段结束选择出第二偏移预取值,此后一段时间内,该第二偏移预取值将被用来生成预取请求,直至第三训练阶段选出新的偏移预取值。其中,各个阶段选出的偏移预取值可以相同,也可能不相同。
在根据本公开的一些实施例中,利用偏移预取器从预置偏移值表格中最近选择的K个偏移预取值来组成近期偏移值表格,并基于该近期偏移值表格来产出下一阶段的偏移预取值。由于K小于N,也就是说,近期偏移值表格中偏移值的数目小于预置偏移值表格中偏移值的数目,使得偏移预取器从近期偏移值表格选择偏移预取值的时间将被缩短。在K明显小于N的情况下,这一时间优势将更加明显,作为示例,K可以诸如等于4或8,相比于从N=52个偏移值中选择偏移预取值所需的时间,从K=4个偏移值中选择偏移预取值所需的时间将明显降低,由此能够实现通过降低偏移预取器生成偏移预取值所需的时间来提高偏移预取器的效率,从而能够快速地响应CPU对于数据预取的需求,进一步提升CPU系统的运行效率。
进一步地,大多数程序的某一个运行阶段往往仅用到很少的几个偏移预取值。因此,最新产生K个偏移预取值往往针对某一个运行阶段普遍适用。由此,通过将在时间上最新产生的K个偏移预取值形成为近期偏移值表格(Recent Offsets Table,ROT)并从中训练选出下一阶段的偏移预取值,往往预取结果也会比较准确,并且由于ROT中包括的偏移值的数目远远小于预置偏移值表格(Preset Offsets Table,POT)中包括的偏移的数目,由此使得利用ROT进行的训练阶段将会比利用POT进行的训练阶段快很多。
在根据本公开一些实施例的偏移预取的装置中,通过提供简便、易实现的近期偏移值表格来实现数据预取,能够在保证数据预取的准确性的同时有效降低训练阶段的时间消耗,从而进一步提升相应CPU的整体性能。并且,提出的方案避免对现有预取器及CPU的架构产生影响,便于广泛应用实现。
在根据本公开的一些实施例中,为便于描述,可以将选择第一偏移预取值的过程表示为第一训练阶段。偏移预取单元1010还可以配置成:对于选择第二偏移预取值的第二训练阶段,基于规则确定是采用预置偏移值表格还是采用近期偏移值表格来选择第二偏移预取值,其中,第二偏移预取值用于进行数据预取。
在偏移预取器中,训练过程与预取过程是持续、并行地进行的,例如,在第一训练阶段的结束将产生第一偏移预取值,以用于进行数据预取,在利用第一偏移预取值进行数据预取的过程中。偏移预取器同步进入第二训练阶段,并产生第二偏移预取值,以用于接下来一段时间的数据预取,以此类推。数据预取器通过多个轮次进行训练得到偏移预取值的过程可以参照上文结合附图的描述。
根据本公开的一些实施例,上述规则包括:按照交替方式来采用预置偏移值表格和近期偏移值表格来选择第二偏移预取值,其中,交替方式表示在第一训练阶段采用近期偏移值表格的情况下,在第二训练阶段采用预置偏移值表格来选择第二偏移预取值。
该交替方式可以是指预置偏移值表格和近期偏移值表格逐个地交替被使用,也就是说,在第一训练阶段采用近期偏移值表格选择第一偏移预取值D1的情况下,则在第二训练阶段采用预置偏移值表格来选择第二偏移预取值D2,而后,将在第三训练阶段再次采用近期偏移值表格选择第三移预取值D3,依次类推。
根据本公开的一些实施例,上述规则包括:确定第一偏移预取值的训练分数是否大于分数阈值,在训练分数大于分数阈值的情况下,确定采用近期偏移值表格来选择第二偏移预取值。在这些实施例中,近期偏移值表格和预置偏移值表格并非交替进行的,而是基于产生的偏移预取值的分数来进行判断,例如,如果D1的训练分数S1大于分数阈值,这说明基于近期偏移值表格产生的偏移值比较准确,符合预取要求,由此,可以继续基于该近期偏移值表格来进行训练。关于分数阈值可以由系统预先设置,作为示例,例如可以将分数阈值(Score Threshold,ST)设置为最高分数值SMax乘以一个系数,例如ST=SMax*0.8,或者可以将ST设置为其他数值。
根据本公开的一些实施例,偏移预取单元1010还可以配置成:在确定采用预置偏移值表格来选择第二偏移预取值的情况下,利用偏移预取器来从预置偏移值表格中选择第二偏移预取值,并基于第二偏移预取值来进行数据预取;或者在确定采用近期偏移值表格来选择第二偏移预取值的情况下,利用偏移预取器来从近期偏移值表格中选择第二偏移预取值,并基于第二偏移预取值来进行数据预取。
根据本公开的一些实施例,偏移预取单元1010还可以配置成:利用第二偏移预取值来更新近期偏移值表格。根据本公开的一些实施例,为更新近期偏移值表格,偏移预取单元1010还配置成:确定第二偏移预取值是否存在于近期偏移值表格之中;以及在确定第二偏移预取值不存在于近期偏移值表格之中的情况下,按照先入先出算法、最近最少使用算法或伪最近最少使用算法中的其中一种来更新近期偏移值表格。
根据本公开的一些实施例,偏移预取器为最佳偏移预取器,K个偏移预取值为K个最佳偏移预取值。
根据本公开的一些实施例,在偏移预取器为用于第L级缓存的偏移预取器的情况下,为基于第一偏移预取值进行数据预取,偏移预取单元1010还配置为:确定由第一偏移预取值与请求的地址组成的预取请求地址;确定与预取请求地址对应的数据是否存在于第L级缓存中;以及在确定与预取请求地址对应的数据不存在于第L级缓存中的情况下,触发与预取请求地址对应的预取请求,其中,L为大于1的整数。
关于执行偏移预取的装置1000执行的步骤的具体实现过程可以参照以上结合附图描述的根据本公开的偏移预取方法,在此不再重复描述。
根据本公开的又一方面,还提供了一种计算设备。图10示出了根据本公开实施例的计算设备的示意性框图。
如图10所示,计算设备2000可以包括处理器2010以及存储器2020。根据本公开实施例,存储器2020中存储有计算机可读代码,该计算机可读代码当由处理器2010运行时,可以执行如上所述的偏移预取方法。
处理器2010可以根据存储在存储器2020中的程序执行各种动作和处理。具体地,处理器2010可以是一种集成电路,具有信号处理能力。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,可以是X86架构或者是ARM架构等。例如,此处的处理器可以是指具有多级缓存架构的CPU,并且,针对其中的多级缓存架构还设置有偏移预取器,该偏移预取器配置成能够执行根据本公开的一些实施例的偏移预取方法,以通过降低发现偏移预取值所需的时间来提高偏移预取器的效率,从而能够快速响应数据预取需求,进一步提升CPU的运行效率。
存储器2020存储有计算机可执行指令代码,该指令代码在被处理器2010执行时用于实现根据本公开实施例的偏移预取方法。存储器2020可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。应注意,本文描述的存储器可以是任何适合类型的存储器。作为示例,通过执行存储器2020中的计算机可执行指令代码,诸如CPU的处理器能够实现快速地数据预取,其中的偏移预取器能够基于保持的预置偏移值表格以及近期偏移值表格来快速地产生用于生成数据预取请求的偏移预取值,以使得CPU能够更高效地处理数据、运行程序指令,从而提高CPU的系统性能。
根据本公开的又一方面,还提供了一种非暂时性计算机可读存储介质。图11示出了根据本公开实施例的非暂时性计算机可读存储介质的示意图。
如图11所示,计算机可读存储介质3020上存储有指令,指令例如是计算机可读指令3010。当计算机可读指令3010由处理器运行时,可以执行参照以上附图描述的偏移预取方法。计算机可读存储介质包括但不限于例如易失性存储器和/或非易失性存储器。
根据本公开的又一方面,还提供了一种计算机程序产品或计算机程序,该计算机程序产品或者计算机程序包括计算机可读指令,该计算机可读指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机可读指令,处理器执行该计算机可读指令,使得该计算机设备执行上述各个实施例中描述的偏移预取方法。
利用本公开实施例提供的偏移预取方法、执行偏移预取的装置、计算设备和介质,通过记录偏移预取器基于预置偏移值表格在时间上最新选择的偏移预取值来构建近期偏移值表格,以使得偏移预取器能够利用构建的近期偏移值表格来生成偏移预取值,从而降低偏移预取器生成偏移预取值所需的时间,由此实现提高偏移预取器的效率以及进一步提升CPU系统的运行效率。
本领域技术人员能够理解,本公开所披露的内容可以出现多种变型和改进。例如,以上所描述的各种设备或组件可以通过硬件实现,也可以通过软件、固件、或者三者中的一些或全部的组合实现。
此外,虽然本公开对根据本公开的实施例的系统中的某些单元做出了各种引用,然而,任何数量的不同单元可以被使用并运行在客户端和/或服务器上。单元仅是说明性的,并且系统和方法的不同方面可以使用不同单元。
本公开中使用了流程图用来说明根据本公开的实施例的方法的步骤。应当理解的是,前面或后面的步骤不一定按照顺序来精确的进行。相反,可以按照倒序或同时处理各种步骤。同时,也可以将其他操作添加到这些过程中。
本领域普通技术人员可以理解上述方法中的全部或部分的步骤可通过计算机程序来指令相关硬件完成,程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本公开并不限制于任何特定形式的硬件和软件的结合。
除非另有定义,这里使用的所有术语具有与本公开所属领域的普通技术人员共同理解的相同含义。还应当理解,诸如在通常字典里定义的那些术语应当被解释为具有与它们在相关技术的上下文中的含义相一致的含义,而不应用理想化或极度形式化的意义来解释,除非这里明确地这样定义。
以上是对本公开的说明,而不应被认为是对其的限制。尽管描述了本公开的若干示例性实施例,但本领域技术人员将容易地理解,在不背离本公开的新颖教学和优点的前提下可以对示例性实施例进行许多修改。因此,所有这些修改都意图包含在权利要求书所限定的本公开范围内。应当理解,上面是对本公开的说明,而不应被认为是限于所公开的特定实施例,并且对所公开的实施例以及其他实施例的修改意图包含在所附权利要求书的范围内。本公开由权利要求书及其等效物限定。
Claims (18)
1.一种偏移预取方法,其特征在于,所述方法包括:
利用偏移预取器从预置偏移值表格中选择用于生成预取请求的K个偏移预取值,其中,所述预置偏移值表格包括预先设置的N个偏移值,所述K个偏移预取值为所述偏移预取器从所述预置偏移值表格中在时间上最新选择的偏移预取值,其中,N和K为正整数,N大于K;
记录所述K个偏移预取值,用于形成包括所述K个偏移预取值的近期偏移值表格;以及
利用所述偏移预取器从所述近期偏移值表格中选择第一偏移预取值,用于基于所述第一偏移预取值进行数据预取,
其中,将选择所述第一偏移预取值的过程表示为第一训练阶段,所述方法还包括:
对于选择第二偏移预取值的第二训练阶段,基于规则确定是采用所述预置偏移值表格还是采用所述近期偏移值表格来选择所述第二偏移预取值,其中,所述第二偏移预取值用于进行数据预取。
2.根据权利要求1所述的方法,其特征在于,所述规则包括:
确定所述第一偏移预取值的训练分数是否大于分数阈值,在所述训练分数大于所述分数阈值的情况下,确定采用所述近期偏移值表格来选择所述第二偏移预取值。
3.根据权利要求1所述的方法,其特征在于,所述规则包括:
按照交替方式来采用所述预置偏移值表格和所述近期偏移值表格来选择所述第二偏移预取值,其中,所述交替方式表示在所述第一训练阶段采用所述近期偏移值表格的情况下,在所述第二训练阶段采用所述预置偏移值表格来选择所述第二偏移预取值。
4.根据权利要求1-3中的任一项所述的方法,其特征在于,所述方法还包括:
在确定采用所述预置偏移值表格来选择所述第二偏移预取值的情况下,利用所述偏移预取器来从所述预置偏移值表格中选择所述第二偏移预取值,并基于所述第二偏移预取值来进行数据预取;或者
在确定采用所述近期偏移值表格来选择所述第二偏移预取值的情况下,利用所述偏移预取器来从所述近期偏移值表格中选择所述第二偏移预取值,并基于所述第二偏移预取值来进行数据预取。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
利用所述第二偏移预取值来更新所述近期偏移值表格。
6.根据权利要求5所述的方法,其特征在于,所述更新所述近期偏移值表格包括:
确定所述第二偏移预取值是否存在于所述近期偏移值表格之中;以及
在确定所述第二偏移预取值不存在于所述近期偏移值表格之中的情况下,按照先入先出算法、最近最少使用算法或伪最近最少使用算法中的其中一种来更新所述近期偏移值表格。
7.根据权利要求1所述的方法,其特征在于,所述偏移预取器为最佳偏移预取器,所述K个偏移预取值为K个最佳偏移预取值。
8.根据权利要求1所述的方法,其特征在于,在所述偏移预取器为用于第L级缓存的偏移预取器的情况下,所述基于所述第一偏移预取值进行数据预取包括:
确定由所述第一偏移预取值与请求的地址组成的预取请求地址;
确定与所述预取请求地址对应的数据是否存在于所述第L级缓存中;以及
在确定与所述预取请求地址对应的数据不存在于所述第L级缓存中的情况下,触发与所述预取请求地址对应的预取请求,
其中,L为大于1的整数。
9.一种执行偏移预取的装置,其特征在于,所述执行偏移预取的装置包括偏移预取单元,所述偏移预取单元配置成:
利用偏移预取器从预置偏移值表格中选择用于生成预取请求的K个偏移预取值,其中,所述预置偏移值表格包括预先设置的N个偏移值,所述K个偏移预取值为所述偏移预取器从所述预置偏移值表格中在时间上最新选择的偏移预取值,其中,N和K为正整数,N大于K;
记录所述K个偏移预取值,用于形成包括所述K个偏移预取值的近期偏移值表格;以及
利用所述偏移预取器从所述近期偏移值表格中选择第一偏移预取值,用于基于所述第一偏移预取值进行数据预取,
其中,将选择所述第一偏移预取值的过程表示为第一训练阶段,所述偏移预取单元还配置成:
对于选择第二偏移预取值的第二训练阶段,基于规则确定是采用所述预置偏移值表格还是采用所述近期偏移值表格来选择所述第二偏移预取值,其中,所述第二偏移预取值用于进行数据预取。
10.根据权利要求9所述的装置,其特征在于,所述规则包括:
确定所述第一偏移预取值的训练分数是否大于分数阈值,在所述训练分数大于所述分数阈值的情况下,确定采用所述近期偏移值表格来选择所述第二偏移预取值。
11.根据权利要求9所述的装置,其特征在于,所述规则包括:
按照交替方式来采用所述预置偏移值表格和所述近期偏移值表格来选择所述第二偏移预取值,其中,所述交替方式表示在所述第一训练阶段采用所述近期偏移值表格的情况下,在所述第二训练阶段采用所述预置偏移值表格来选择所述第二偏移预取值。
12.根据权利要求9-11中的任一项所述的装置,其特征在于,所述偏移预取单元还配置成:
在确定采用所述预置偏移值表格来选择所述第二偏移预取值的情况下,利用所述偏移预取器来从所述预置偏移值表格中选择所述第二偏移预取值,并基于所述第二偏移预取值来进行数据预取;或者
在确定采用所述近期偏移值表格来选择所述第二偏移预取值的情况下,利用所述偏移预取器来从所述近期偏移值表格中选择所述第二偏移预取值,并基于所述第二偏移预取值来进行数据预取。
13.根据权利要求9所述的装置,其特征在于,所述偏移预取单元还配置成:
利用所述第二偏移预取值来更新所述近期偏移值表格。
14.根据权利要求13所述的装置,其特征在于,为更新所述近期偏移值表格包括,所述偏移预取单元还配置为:
确定所述第二偏移预取值是否存在于所述近期偏移值表格之中;以及
在确定所述第二偏移预取值不存在于所述近期偏移值表格之中的情况下,按照先入先出算法、最近最少使用算法或伪最近最少使用算法中的其中一种来更新所述近期偏移值表格。
15.根据权利要求9所述的装置,其特征在于,所述偏移预取器为最佳偏移预取器,所述K个偏移预取值为K个最佳偏移预取值。
16.根据权利要求9所述的装置,其特征在于,在所述偏移预取器为用于第L级缓存的偏移预取器的情况下,为基于所述第一偏移预取值进行数据预取,所述偏移预取单元还包括:
确定由所述第一偏移预取值与请求的地址组成的预取请求地址;
确定与所述预取请求地址对应的数据是否存在于所述第L级缓存中;以及
在确定与所述预取请求地址对应的数据不存在于所述第L级缓存中的情况下,触发与所述预取请求地址对应的预取请求,
其中,L为大于1的整数。
17.一种计算设备,包括:
处理器;和
存储器,其中,所述存储器中存储有计算机可读代码,所述计算机可读代码在由所述处理器运行时,执行如权利要求1-8中任一项所述的偏移预取方法。
18.一种非暂时性计算机可读存储介质,其上存储有指令,所述指令在被处理器执行时,使得所述处理器执行如权利要求1-8中任一项所述的偏移预取方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111054692.4A CN113778520B (zh) | 2021-09-09 | 2021-09-09 | 偏移预取方法、执行偏移预取的装置、计算设备和介质 |
PCT/CN2022/093310 WO2023035654A1 (zh) | 2021-09-09 | 2022-05-17 | 偏移预取方法、执行偏移预取的装置、计算设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111054692.4A CN113778520B (zh) | 2021-09-09 | 2021-09-09 | 偏移预取方法、执行偏移预取的装置、计算设备和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113778520A CN113778520A (zh) | 2021-12-10 |
CN113778520B true CN113778520B (zh) | 2022-09-30 |
Family
ID=78841970
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111054692.4A Active CN113778520B (zh) | 2021-09-09 | 2021-09-09 | 偏移预取方法、执行偏移预取的装置、计算设备和介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113778520B (zh) |
WO (1) | WO2023035654A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113778520B (zh) * | 2021-09-09 | 2022-09-30 | 海光信息技术股份有限公司 | 偏移预取方法、执行偏移预取的装置、计算设备和介质 |
US11940921B2 (en) * | 2022-01-07 | 2024-03-26 | Centaur Technology, Inc. | Bounding box prefetcher |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013401A (zh) * | 2006-02-03 | 2007-08-08 | 国际商业机器公司 | 用于预取数据线的方法和处理器 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW436690B (en) * | 1995-05-23 | 2001-05-28 | Winbond Electronics Corp | Modulo address generating device and method for accessing a ring buffer |
US10248569B2 (en) * | 2016-08-11 | 2019-04-02 | Futurewei Technologies, Inc. | Pattern based preload engine |
CN106528450B (zh) * | 2016-10-27 | 2019-09-17 | 上海兆芯集成电路有限公司 | 数据预先提取方法及使用此方法的装置 |
US11106596B2 (en) * | 2016-12-23 | 2021-08-31 | Advanced Micro Devices, Inc. | Configurable skewed associativity in a translation lookaside buffer |
US10769069B2 (en) * | 2018-03-02 | 2020-09-08 | Arm Limited | Prefetching in data processing circuitry |
US10776274B2 (en) * | 2018-03-02 | 2020-09-15 | Arm Limited | Prefetching in data processing circuitry |
US11157281B2 (en) * | 2018-05-24 | 2021-10-26 | International Business Machines Corporation | Prefetching data based on register-activity patterns |
CN109783399B (zh) * | 2018-11-19 | 2021-01-19 | 西安交通大学 | 一种动态可重构处理器的数据缓存预取方法 |
CN110704107B (zh) * | 2019-09-30 | 2022-03-22 | 上海兆芯集成电路有限公司 | 预取器、预取器的运作方法及处理器 |
CN113190499A (zh) * | 2021-05-26 | 2021-07-30 | 北京算能科技有限公司 | 一种面向大容量片上缓存的协同预取器及其控制方法 |
CN113778520B (zh) * | 2021-09-09 | 2022-09-30 | 海光信息技术股份有限公司 | 偏移预取方法、执行偏移预取的装置、计算设备和介质 |
-
2021
- 2021-09-09 CN CN202111054692.4A patent/CN113778520B/zh active Active
-
2022
- 2022-05-17 WO PCT/CN2022/093310 patent/WO2023035654A1/zh active Application Filing
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013401A (zh) * | 2006-02-03 | 2007-08-08 | 国际商业机器公司 | 用于预取数据线的方法和处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN113778520A (zh) | 2021-12-10 |
WO2023035654A1 (zh) | 2023-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107479860B (zh) | 一种处理器芯片以及指令缓存的预取方法 | |
US9026739B2 (en) | Multimode prefetcher | |
CN113778520B (zh) | 偏移预取方法、执行偏移预取的装置、计算设备和介质 | |
US6219760B1 (en) | Cache including a prefetch way for storing cache lines and configured to move a prefetched cache line to a non-prefetch way upon access to the prefetched cache line | |
US9582282B2 (en) | Prefetching using a prefetch lookup table identifying previously accessed cache lines | |
KR102470184B1 (ko) | 캐시 테스트 영역을 기반으로 하는 프리페치를 위한 캐시 에이징 정책 선택 | |
US8683136B2 (en) | Apparatus and method for improving data prefetching efficiency using history based prefetching | |
US20110072218A1 (en) | Prefetch promotion mechanism to reduce cache pollution | |
US9418019B2 (en) | Cache replacement policy methods and systems | |
KR930002945A (ko) | 프리페치버퍼 및 프리페치버퍼를 적용한 정보처리장치 | |
CN112416817B (zh) | 预取方法、信息处理装置、设备以及存储介质 | |
WO2005088455A2 (en) | Cache memory prefetcher | |
US20170168957A1 (en) | Aware Cache Replacement Policy | |
WO2021263156A1 (en) | Instruction address translation and instruction prefetch engine | |
CN108874691B (zh) | 数据预取方法和内存控制器 | |
US20180173535A1 (en) | Determining a predicted behaviour for processing of instructions | |
US11429529B2 (en) | Prefetching based on detection of interleaved constant stride sequences of addresses within a sequence of demand target addresses | |
US11249762B2 (en) | Apparatus and method for handling incorrect branch direction predictions | |
US8635406B2 (en) | Data processing apparatus and method for providing target address information for branch instructions | |
US11243884B2 (en) | Control flow guided lock address prefetch and filtering | |
CN113760783B (zh) | 联合偏移预取方法、装置、计算设备和可读存储介质 | |
US10810126B2 (en) | Cache storage techniques | |
US10380034B2 (en) | Cache return order optimization | |
US11442863B2 (en) | Data processing apparatus and method for generating prefetches | |
US20050021912A1 (en) | Line cache controller with lookahead |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |