CN112527395A - 数据预取方法和数据处理装置 - Google Patents
数据预取方法和数据处理装置 Download PDFInfo
- Publication number
- CN112527395A CN112527395A CN202011307964.2A CN202011307964A CN112527395A CN 112527395 A CN112527395 A CN 112527395A CN 202011307964 A CN202011307964 A CN 202011307964A CN 112527395 A CN112527395 A CN 112527395A
- Authority
- CN
- China
- Prior art keywords
- access
- request
- data
- prefetcher
- prefetch
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 75
- 238000012545 processing Methods 0.000 title claims abstract description 47
- 238000012549 training Methods 0.000 claims abstract description 46
- 230000015654 memory Effects 0.000 claims description 511
- 230000004044 response Effects 0.000 claims description 51
- 230000006870 function Effects 0.000 claims description 35
- 238000011022 operating instruction Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 9
- 238000013519 translation Methods 0.000 description 6
- 230000002411 adverse Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000011160 research Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种数据预取方法和数据处理装置。该数据预取方法包括:接收操作指令,将操作指令的访问请求提供给数据预取器;确定操作指令的访问请求是载入访问请求还是存储访问请求;响应于操作指令的访问请求是载入访问请求,采用载入访问请求对数据预取器中的载入访问预取功能进行训练,输出载入访问预取请求,并基于载入访问预取请求进行载入访问预取;以及响应于操作指令的访问请求是存储访问请求,采用存储访问请求对数据预取器中的存储访问预取功能进行训练,输出存储访问预取请求,并基于存储访问预取请求进行存储访问预取。该数据预取方法可以提升采用该数据预取方法的数据处理装置的性能。
Description
技术领域
本公开的实施例涉及一种数据预取方法和数据处理装置。
背景技术
在相关的中央处理单元(central processing unit,CPU)架构中,程序指令与数据可以保存在动态随机存取存储器(Dynamic Random Access Memory,DRAM,内存的一种)中。
发明内容
本公开的至少一个实施例提供了一种数据预取方法,其包括:接收操作指令,将所述操作指令的访问请求提供给数据预取器;确定所述操作指令的访问请求是载入访问请求还是存储访问请求;响应于所述操作指令的访问请求是所述载入访问请求,采用所述载入访问请求对所述数据预取器中的载入访问预取功能进行训练,输出载入访问预取请求,并基于所述载入访问预取请求进行载入访问预取;以及响应于所述操作指令的访问请求是所述存储访问请求,采用所述存储访问请求对所述数据预取器中的存储访问预取功能进行训练,输出存储访问预取请求,并基于所述存储访问预取请求进行存储访问预取。
例如,在所述数据预取方法的至少一个示例中,所述基于所述存储访问预取请求进行所述存储访问预取,包括:响应于所述存储访问预取请求的目标数据已在一级缓存存储器或者二级缓存存储器中,丢弃所述存储访问预取请求;以及响应于所述存储访问预取请求的目标数据不在一级缓存存储器和二级缓存存储器中,获取所述存储访问预取请求的目标数据,并将所述存储访问预取请求的目标数据写入所述二级缓存存储器中。
例如,在所述数据预取方法的至少一个示例中,所述响应于所述存储访问预取请求的目标数据已在一级缓存存储器或者二级缓存存储器中,丢弃所述存储访问预取请求,包括:响应于所述存储访问预取请求的目标数据已在所述一级缓存存储器中,丢弃所述存储访问预取请求;响应于所述存储访问预取请求的目标数据不在所述一级缓存存储器中,将所述存储访问预取请求提供给所述二级缓存存储器;以及响应于所述存储访问预取请求的目标数据已在所述二级缓存存储器中,丢弃所述存储访问预取请求。
例如,在所述数据预取方法的至少一个示例中,所述响应于所述存储访问预取请求的目标数据不在所述一级缓存存储器中,将所述存储访问预取请求提供给所述二级缓存存储器,包括:响应所述存储访问预取请求的目标数据不在所述一级缓存存储器中,向存储访问预取序列缓冲存储器申请一个第一存储项,并将所述第一存储项分配给所述存储访问预取请求;以及所述存储访问预取序列缓冲存储器将所述存储访问预取请求提供给所述二级缓存存储器。
例如,在所述数据预取方法的至少一个示例中,所述获取所述存储访问预取请求的目标数据,并将所述存储访问预取请求的目标数据写入所述二级缓存存储器中,包括:所述二级缓存存储器向位于所述二级缓存存储器下一级的存储器件请求所述存储访问预取请求的目标数据,并将所述下一级的存储器件提供的所述存储访问预取请求的目标数据存储在所述二级缓存存储器中。
例如,在所述数据预取方法的至少一个示例中,所述基于所述载入访问预取请求进行所述载入访问预取,包括:响应于所述载入访问预取请求的目标数据已在一级缓存存储器中,丢弃所述载入访问预取请求;以及响应于所述载入访问预取请求的目标数据不在一级缓存存储器中,获取所述载入访问预取请求的目标数据,并将所述载入访问预取请求的目标数据写入所述一级缓存存储器中。
例如,在所述数据预取方法的至少一个示例中,所述获取所述载入访问预取请求的目标数据,并将所述载入访问预取请求的目标数据写入所述一级缓存存储器中,包括:向未命中地址缓冲存储器申请一个第二存储项,并将所述第二存储项分配给所述载入访问预取请求;所述未命中地址缓冲存储器向二级缓存存储器请求所述载入访问预取请求的目标数据;所述二级缓存存储器获取所述载入访问预取请求的目标数据,并将所述载入访问预取请求的目标数据提供给所述未命中地址缓冲存储器;以及所述未命中地址缓冲存储器将所述载入访问预取请求的目标数据写入所述一级缓存存储器中。
例如,在所述数据预取方法的至少一个示例中,所述数据预取器包括第一类预取器条目以及不同于所述第一类预取器条目的第二类预取器条目;所述响应于所述操作指令的访问请求是所述载入访问请求,采用所述载入访问请求对所述数据预取器中的载入访问预取功能进行训练,包括:响应于所述操作指令的访问请求是所述载入访问请求,将所述载入访问请求的地址分配给所述第一类预取器条目,并采用所述载入访问请求的地址对所述第一类预取器条目进行训练;以及所述响应于所述第二操作指令的访问请求是所述存储访问请求,采用所述存储访问请求对所述数据预取器中的存储访问预取功能进行训练,包括:响应于所述操作指令的访问请求是所述存储访问请求,将所述存储访问请求的地址分配给所述第二类预取器条目,并采用所述存储访问请求的地址对所述第二类预取器条目进行训练。
例如,在所述数据预取方法的至少一个示例中,所述第一类预取器条目包括多条第一预取器条目,所述第二类预取器条目包括多条第二预取器条目;所述将所述载入访问请求的地址分配给所述第一类预取器条目,包括:基于所述载入访问请求的地址确定所述载入访问请求的地址隶属的第一预取器条目,并将所述载入访问请求的地址分配给所述载入访问请求的地址隶属的第一预取器条目;以及所述将所述存储访问请求的地址分配给所述第二类预取器条目,包括:基于所述存储访问请求的地址确定所述存储访问请求的地址隶属的第二预取器条目,并将所述存储访问请求的地址分配给所述存储访问请求的地址隶属的第二预取器条目。
例如,在所述数据预取方法的至少一个示例中,所述数据预取器包括多个预取器条目。所述数据预取方法还包括:响应于所述多个预取器条目的第一部分跟踪的数据流中首个数据对应的操作指令的访问请求用于载入访问,将所述多个预取器条目的第一部分的每个标记为所述第一类预取器条目;以及响应于所述多个预取器条目的第二部分跟踪的数据流中首个数据对应的操作指令的访问请求用于存储访问,将所述多个预取器条目的第二部分的每个标记为所述第二类预取器条目。
例如,在所述数据预取方法的至少一个示例中,所述将所述多个预取器条目的第一部分的每个标记为所述第一类预取器条目,包括:将所述多个预取器条目的第一部分的每个包括的载入访问标识数据域的值设置为第一值;以及所述将所述多个预取器条目的第二部分的每个标记为所述第二类预取器条目,包括:将所述多个预取器条目的第二部分的每个包括的载入访问标识数据域的值设置为不同于所述第一值的第二值。
例如,在所述数据预取方法的至少一个示例中,所述输出载入访问预取请求,包括:基于所述多个预取器条目的第一部分的每个跟踪的数据流的规律输出第一访问预取地址,并将所述第一访问预取地址对应的访问预取请求标识为所述载入访问预取请求;以及所述输出存储访问预取请求,包括:基于所述多个预取器条目的第二部分的每个跟踪的数据流的规律输出第二访问预取地址,并将所述第二访问预取地址对应的访问预取请求标识为所述存储访问预取请求。
例如,在所述数据预取方法的至少一个示例中,所述载入访问请求的地址、所述存储访问请求的地址、所述第一访问预取地址和所述第二访问预取地址均为虚拟地址:以及所述数据预取方法还包括:将所述第一访问预取地址和所述第二访问预取的地址翻译为物理地址,以分别基于所述第一访问预取地址和所述第二访问预取的物理地址进行所述载入访问预取和所述载入存储预取。
本公开的至少一个实施例提供了一种数据处理装置,其包括数据预取器。所述数据预取器被配置为:接收操作指令,确定所述操作指令的访问请求是载入访问请求还是存储访问请求;响应于所述操作指令的访问请求是所述载入访问请求,采用所述载入访问请求对所述数据预取器中的载入访问预取功能进行训练,输出载入访问预取请求,并基于所述载入访问预取请求进行载入访问预取;以及响应于所述操作指令的访问请求是所述存储访问请求,采用所述存储访问请求对所述数据预取器中的存储访问预取功能进行训练,输出存储访问预取请求,并基于所述存储访问预取请求进行存储访问预取。
例如,在所述数据处理装置的至少一个示例中,所述数据处理装置还包括一级缓存存储器和二级缓存存储器。所述基于所述存储访问预取请求进行所述存储访问预取,包括:响应于所述存储访问预取请求的目标数据已在所述一级缓存存储器或者所述二级缓存存储器中,丢弃所述存储访问预取请求;以及响应于所述存储访问预取请求的目标数据不在所述一级缓存存储器和所述二级缓存存储器中,获取所述存储访问预取请求的目标数据,并将所述存储访问预取请求的目标数据写入所述二级缓存存储器中。
例如,在所述数据处理装置的至少一个示例中,所述响应于所述存储访问预取请求的目标数据已在所述一级缓存存储器或者所述二级缓存存储器中,丢弃所述存储访问预取请求,包括:响应于所述存储访问预取请求的目标数据已在所述一级缓存存储器中,丢弃所述存储访问预取请求;响应于所述存储访问预取请求的目标数据不在所述一级缓存存储器中,将所述存储访问预取请求提供给所述二级缓存存储器;以及响应于所述存储访问预取请求的目标数据已在所述二级缓存存储器中,丢弃所述存储访问预取请求。
例如,在所述数据处理装置的至少一个示例中,所述数据处理装置还包括存储访问预取序列缓冲存储器。所述响应于所述存储访问预取请求的目标数据不在所述一级缓存存储器中,将所述存储访问预取请求提供给所述二级缓存存储器,包括:响应所述存储访问预取请求的目标数据不在所述一级缓存存储器中,向所述存储访问预取序列缓冲存储器申请一个第一存储项,并将所述第一存储项分配给所述存储访问预取请求;以及所述存储访问预取序列缓冲存储器将所述存储访问预取请求提供给所述二级缓存存储器。
例如,在所述数据处理装置的至少一个示例中,所述数据预取器包括第一类预取器条目以及不同于所述第一类预取器条目的第二类预取器条目;所述响应于所述操作指令的访问请求是所述载入访问请求,采用所述载入访问请求对所述数据预取器中的载入访问预取功能进行训练,包括:响应于所述操作指令的访问请求是所述载入访问请求,将所述载入访问请求的地址分配给所述第一类预取器条目,并采用所述载入访问请求的地址对所述第一类预取器条目进行训练;以及所述响应于所述第二操作指令的访问请求是所述存储访问请求,采用所述存储访问请求对所述数据预取器中的存储访问预取功能进行训练,包括:响应于所述操作指令的访问请求是所述存储访问请求,将所述存储访问请求的地址分配给所述第二类预取器条目,并采用所述存储访问请求的地址对所述第二类预取器条目进行训练。
例如,在所述数据处理装置的至少一个示例中,所述数据预取器包括多个预取器条目;所述多个预取器条目的第一部分的每个包括的载入访问标识数据域中的值为第一值;所述多个预取器条目的第二部分的每个包括的载入访问标识数据域中的值为不同于所述第一值的第二值;所述第一值用于标识所述多个预取器条目的第一部分的每个为所述第一类预取器条目;以及所述第二值用于标识所述多个预取器条目的第二部分的每个为所述第二类预取器条目。
例如,在所述数据处理装置的至少一个示例中,所述载入访问标识数据域为载入访问标识数据位。
例如,在所述数据处理装置的至少一个示例中,所述进行所述载入访问预取,包括:基于所述多个预取器条目的第一部分的每个跟踪的数据流的规律输出第一访问预取地址,并将所述第一访问预取地址对应的访问预取请求标识为所述载入访问预取请求;以及所述进行所述存储访问预取,包括:基于所述多个预取器条目的第二部分的每个跟踪的数据流的规律输出第二访问预取地址,并将所述第二访问预取地址对应的访问预取请求标识为所述存储访问预取请求。
例如,在所述数据处理装置的至少一个示例中,所述数据处理装置还包括地址翻译器。所述载入访问请求的地址、所述存储访问请求的地址、所述第一访问预取地址和所述第二访问预取地址均为虚拟地址:以及所述地址翻译器被配置为将所述第一访问预取地址和所述第二访问预取的地址翻译为物理地址,以分别基于所述第一访问预取地址和所述第二访问预取的物理地址进行所述载入访问预取和所述载入存储预取。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1示出了一种CPU核读取数据的流程图;
图2示出了一种数据预取器进行训练与预取的流程图;
图3是本公开至少一个实施例提供的数据预取方法的流程图;
图4示出了本公开的至少一个实施例提供的单个预取器条目的示意图;
图5是本公开的至少一个实施例提供的数据预取方法的一个示例;
图6是本公开的至少一个实施例提供的数据处理装置的示例性框图;以及
图7是图6所示数据处理装置的一个示例的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另作定义,此处使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
本公开的至少一个实施例可能涉及的术语的解释如下。
地址翻译:现代操作***往往同时支持多个进程同时运行。为了简化多进程管理与增强安全性,应用程序使用的是一片完整的虚拟地址,比如32比特应用程序最多有232=4GB的虚拟地址空间可供使用。当程序被运行时,这些虚拟地址会被映射为多个内存页面,每一个页面有自己的物理存储地址。应用程序程序访问指令和数据时,必须先将指令和数据的虚拟地址翻译为物理地址,并检测应用程序对该页面的访问是否合法,然后去内存或者缓存中获得相应数据传递给CPU核。从虚拟地址到物理地址的转换过程称为地址翻译。
载入序列(Load Queue,LDQ):用来保存CPU核中所有已被分发的载入指令(读指令)的队列。数据读写流水线会从LDQ里获取待载入的数据相关信息(例如,地址),并尝试从缓存存储器中获取相应数据。获得该数据后,LDQ的相应的项会被释放掉。
存储序列(Store Queue,STQ):用来保存CPU核中所有已被分发的存储指令(写指令)的队列。STQ会先缓存待写入内存的数据。当该存储指令(写指令)退出(retire)后,并且该存储指令(写指令)是STQ里面最老的指令时,数据读写流水线会从STQ里获取待改动的数据及相关信息,并尝试将待改动的数据写入缓存。写入缓存成功后,STQ的相应的项会被释放掉。
CPU核流水阶段及流水级:为了提高CPU核的性能,现代CPU核使用流水线的方式,也就是一条指令从被提取、解码、执行、结果写入的整个过程被分为多个流水阶段,一个时钟一个指令只能在某一个流水阶段;而CPU核则可以有多条指令运行在不同的流水阶段。每一个流水阶段可以包括多个流水级,每个流水级执行有限的操作,以进一步提高CPU核的性能。
流预取器(stream prefetcher)用于针对一整片数据进行访问。
跨步预取器(stride prefetcher)用于针对固定步幅的数据访问(比如访问地址A,A+2,A+4,A+6,…)。
未命中地址缓冲存储器(Missing Address Buffer,MAB)也被称为MSHR(MissingStatus Handling Register)。当一个读写、预取请求不在第一级缓存中,而需要向下一级缓存读取时,该请求及其相应属性被保存在MAB里,直到下一级缓存返回该请求的数据。
图1示出了一种CPU核读取数据的流程图。如图1所示,CPU核读取数据的流程包括以下的步骤S01-步骤S07。
步骤S01:CPU核输出访问请求的目标数据的虚拟地址至地址翻译器(例如,地址翻译流水线)511,地址翻译器511将上述虚拟地址翻译为物理地址,然后,CPU核查看该访问请求的目标数据是否在一级缓存存储器中。
步骤S02:如果访问请求(例如,读取请求)的目标数据在一级缓存存储器中,则从一级缓存存储器取出访问请求的目标数据,并通过下面的步骤S07将访问请求的目标数据提供给CPU核。
步骤S03:如果访问请求的目标数据不在一级缓存存储器中,则向未命中地址缓冲存储器(Missing Address Buffer,MAB)512申请一个存储项,并将该存储项配给上述访问请求。
步骤S04:未命中地址缓冲存储器512向下一级的缓冲存储器(例如,二级缓存存储器)请求该访问请求的目标数据。
步骤S05:下一级的缓冲存储器获取该访问请求的目标数据,并将该访问请求的目标数据返还给未命中地址缓冲存储器。
例如,如图1所示,在访问请求的目标数据存储在二级缓存存储器中的情况下,二级缓存存储器从二级缓存存储器中获取访问请求的目标数据。例如,在访问请求的目标数据没有存储在二级缓存存储器中的情况下,二级缓存存储器从位于二级缓存存储器下一级的存储器件获取该访问请求的目标数据。例如,位于二级缓存存储器下一级的存储器件可以是三级缓存存储器或者内存(例如,DRAM)。
步骤S06:未命中地址缓冲存储器将该访问请求的目标数据写入至一级缓存存储器中。
步骤S07:一级缓存存储器将访问请求的目标数据提供给CPU核。
缓冲存储器例如只能保存CPU核最近访问过的数据。当读取从未被CPU核访问的数据或是受限于缓冲存储器的尺寸被踢出(驱逐)的数据时,需要从内存(例如,DRAM内存)获取数据。然而,由于CPU核运行频率远远高于DRAM内存的运行频率,例如,从DRAM内存获取数据与指令需要上百个CPU核时钟,因此,当读取从未被CPU核访问的数据或是受限于缓冲存储器的尺寸被踢出(驱逐)的数据时CPU核需要等待数十甚至上百个时钟周期,这往往会造成CPU核由于无法继续运行相关指令而空转,而造成了CPU的性能损失。
对此,可以通过采用多级缓存架构来保存最近被访问的数据,同时利用预取技术分析以往数据,以获取CPU核的数据访问规律,并基于上述数据访问规律来提前预取即将被使用的数据,从而减少CPU核等待数据的时钟周期,提升CPU整体性能。
用于预取指令的预取器被称为指令预取器;用于预取数据的预取器被称为数据预取器。数据预取器可以划分为一级数据预取器(也即,将目标数据预取到第一级缓存存储器中的数据预取器),二级数据预取器(也即,将目标数据预取到第二级缓存存储器中的数据预取器),末级(Last Level)数据预取器(也即,将目标数据预取到最后一级缓存存储器中的数据预取器)等。在多级的缓存架构中,一级(L1)缓存存储器的访问速度最快,但是容量最小,最后一级(LLC,一般为第三级)缓存存储器容量最大,但访问速度最慢,二级(L2)缓存存储器的访问速度和容量都介于L1缓存存储器与LLC缓存存储器之间。
图2示出了一种数据预取器进行训练与预取的流程图。图2所示的预取器为一级数据预取器,也即,将目标数据预取到第一级缓存存储器中的数据预取器。此外,图2所示的预取器使用虚拟地址对数据预取器进行训练。
例如,如图2所示,数据预取器通过以下的步骤S012-步骤S017进行训练与预取。
步骤S012:数据预取器接收所有(或者部分)的访问请求(例如,历史访问请求)的虚拟地址及其他属性,利用上述访问请求(例如,历史访问请求)的虚拟地址进行训练,以获取CPU核的数据访问规律,基于上述数据访问规律输出数据预取请求。并基于上述数据预取请求进行数据预取。
步骤S013:利用地址翻译器将数据预取请求的目标数据的虚拟地址翻译为物理地址,然后,查看(例如,CPU核利用数据预取请求的目标数据的物理地址查看)该数据预取请求的目标数据是否在一级缓存存储器中。
例如,如果该数据预取请求的目标数据在一级缓存存储器中,则丢弃该数据预取请求。对应地,针对该数据预取请求,无需执行下面的步骤S014-步骤S017。
步骤S014:如果数据预取请求的目标数据不在一级缓存存储器,则向未命中地址缓冲存储器(Missing Address Buffer,MAB)512申请一个存储项,并将该存储项配给上述数据预取请求。
步骤S015:未命中地址缓冲存储器512向下一级的缓冲存储器(例如,二级缓存存储器)请求该目标数据。
步骤S016:下一级的缓冲存储器获取该目标数据,并将该目标数据返还给未命中地址缓冲存储器。例如,如图2所示,在数据预取请求的目标数据存储在二级缓存存储器中的情况下,二级缓存存储器从二级缓存存储器中获取数据预取请求的目标数据。例如,在数据预取请求的目标数据没有存储在二级缓存存储器中的情况下,二级缓存存储器从位于二级缓存存储器下一级的存储器件获取该数据预取请求的目标数据。
步骤S017:未命中地址缓冲存储器将该目标数据写入至一级缓存存储器中。
需要说明的是,在数据预取器进行训练与预取的同时,CPU核读取数据,以执行相关操作。对应地,为方便描述,图2还示出了CPU核读取数据的流程的部分。例如,CPU核读取数据的流程包括以下的步骤S011。
步骤S011:CPU核输出访问请求的目标数据的虚拟地址至地址翻译器(例如,地址翻译流水线)511,地址翻译器将上述虚拟地址翻译为物理地址,然后,CPU核查看该访问请求的目标数据是否在一级缓存存储器中。
如果访问请求的目标数据在一级缓存存储器,则CPU核从一级缓存存储器中取出访问请求的目标数据。如果访问请求的目标数据不在一级缓存存储器,则未命中地址缓冲存储器512获取访问请求的目标数据,并将访问请求的目标数据写入至一级缓存存储器中,然后,CPU核从一级缓存存储器中取出访问请求的目标数据。
例如,可以仅使用载入访问请求(例如,历史载入访问请求)的地址对图2所示的数据预取器进行训练。此种情况下,数据预取器获取的访问规律仅为载入访问请求的规律,对应地,数据预取器仅能进行载入访问预取,也即,数据预取器仅能预取载入(load)访问请求的目标数据。然而,由于数据预取器无法预取存储访问请求的目标数据,在存储访问请求的目标数据的数据没有位于缓冲存储器(例如,第一和第二缓冲存储器)中的情况下,需要向内存(DRAM)获取数据,这将导致对CPU性能的不利影响。
例如,为了数据预取器可以预取存储访问请求的目标数据,可以同时使用载入访问请求(例如,历史载入访问请求)的地址以及存储访问请求(例如,历史存储访问请求)的地址对图2所示的数据预取器(单个数据预取器)进行训练,以使得数据预取器输出的访问请求包括载入访问请求和存储访问请求。
然而,本公开的发明人在研究中注意到,对于同时使用载入访问请求的地址以及存储访问请求的地址对单个数据预取器进行训练的示例,预取至一级缓存存储器不仅包括载入访问请求的目标数据(也即,基于载入访问预取请求获取的数据),也包括存储访问请求的目标数据(也即,基于存储访问预取请求获取的数据);由于一级缓存存储器的容量小,将基于载入访问预取请求获取的数据以及基于存储访问预取请求获取的数据均预取到一级缓存存储器将导致已经存储到第一缓冲存储器中的数据(例如,基于载入访问预取请求获取的数据或者其它有用数据)被新预取的基于存储访问预取请求获取的数据替换掉,这可能导致大量的基于存储访问预取请求获取的数据(其中的部分数据可能为无效或者非紧迫的数据)替换掉第一缓冲存储器中有用的数据,由此增加载入访问请求的目标数据不在一级缓存存储器的几率;此外,由于缓存不命中(cache miss)而停顿的载入指令对CPU的性能的影响要大于(例如,远远大于)由于缓存不命中而停顿的存储指令对CPU的性能的影响,因此,将已经存储到第一缓冲存储器中的数据被新预取的存储访问请求的目标数据替换掉,则,由此使得数据预取器对于CPU的性能的提升作用有限,甚至会使得CPU的整体性能降低。
其中,对于支持乱序执行的CPU(高性能CPU),由于缓存不命中而停顿的载入指令对CPU的性能的影响要大于(例如,远远大于)由于缓存不命中而停顿的存储指令对CPU的性能的影响的原因如下。载入指令的停顿将导致该载入指令之后的所有依赖于该载入指令的目标数据的指令均无法执行,并占用CPU核内部的资源(这通常是一个应用程序无法完全利用该CPU核最高性能的一个主要原因)。通常而言,应用程序对存储指令的目标数据的依赖较小,或者上述依赖也可以通过一些优化方法消除,比如存储到载入转发(store to loadforwarding)方法,因此,由于存储不命中而停顿的载入指令对CPU的性能的影响较小。例如,在存储序列没有存储空间的情况(例如,存储序列中的所有存储指令均需要等待从DRAM获取的数据才能执行)下,CPU核停止向存储序列分发新的存储指令,此种情况下,CPU性能将受到不利影响。
尽管研究人员注意到相关数据预取器对CPU性能提升能力受到限制的问题,但研究人员更多的关注于通过数据预取器设计提升数据预取器预取的数据的命中率(例如,通过更准确的发现规律来提升载入预取的性能)来降低预取数据中未被利用的数据的比例,或者通过优化替换算法,来降低新的预取数据替换掉有用的数据的可能性(例如,降低已经存储到第一缓冲存储器中的载入访问请求的目标数据被新预取的未命中数据替换的可能性)。
此外,由于前述的由于缓存不命中而停顿的载入指令对CPU的性能的影响要大于(由于缓存不命中而停顿的存储指令对CPU的性能的影响,研究人员尤其关注于提升载入预取的性能。
然而,本公开的发明人在研究中还注意到,在数据预取器预取的数据的命中率增长到一定程度之后和/或替换算法优化到一定程度之后,进一步的提升和优化将导致数据预取器和/或替换算法的复杂度提升(例如,大幅提升),并且效果有限。
本公开的至少一个实施例提供了一种数据预取方法和数据处理装置。该数据预取方法包括:接收操作指令,将操作指令的访问请求提供给数据预取器;确定操作指令的访问请求是载入访问请求还是存储访问请求;响应于操作指令的访问请求是载入访问请求,采用载入访问请求对数据预取器中的载入访问预取功能进行训练,输出载入访问预取请求,并基于载入访问预取请求进行载入访问预取;以及响应于操作指令的访问请求是存储访问请求,采用存储访问请求对数据预取器中的存储访问预取功能进行训练,输出存储访问预取请求,并基于存储访问预取请求进行存储访问预取。例如,本公开的至少一个实施例提供的数据预取方法和数据处理装置可以提升数据预取器发现的规律的准确性。
例如,在基于存储访问预取请求进行载入访问预取时,基于存储访问预取获取的数据被写入比一级缓存存储器低层级的其它缓存存储器中,可以降低由于缓存不命中而停顿的载入指令出现的可能性,并由此可以提升采用该数据预取方法的数据处理装置的性能。
下面通过几个示例和实施例对根据本公开至少一个实施例提供的数据预取方法进行非限制性的说明,如下面所描述的,在不相互抵触的情况下这些具体示例和实施例中不同特征可以相互组合,从而得到新的示例和实施例,这些新的示例和实施例也都属于本公开保护的范围。
图3是本公开至少一个实施例提供的数据预取方法的流程图。例如,如图3所示,该数据预取方法包括以下的步骤S10-步骤S30。
步骤S10:接收操作指令,将操作指令的访问请求提供给数据预取器。
步骤S20:确定操作指令的访问请求是载入访问请求还是存储访问请求。
步骤S30:响应于操作指令的访问请求是载入访问请求,采用载入访问请求对数据预取器中的载入访问预取功能进行训练,输出载入访问预取请求,并基于载入访问预取请求进行载入访问预取;以及响应于操作指令的访问请求是存储访问请求,采用存储访问请求对数据预取器中的存储访问预取功能进行训练,输出存储访问预取请求,并基于存储访问预取请求进行存储访问预取。
例如,操作指令包括载入指令和存储指令;载入指令对应的访问请求是载入访问请求,存储指令对应的访问请求是存储访问请求。
例如,通过使得数据预取器接收载入访问请求以及存储访问请求,使得数据预取器可以利用更多的访问请求的目标数据的地址进行训练,由此可以增加数据预取器发现更多数据访问规律的可能性。
例如,通过在数据预取器训练时,对数据预取器的载入访问预取功能以及存储访问预取功能进行分别训练,不仅可以将载入访问预取请求以及存储访问预取请求区分,而且还可以提升数据预取器发现的规律的准确性。
例如,通过区分载入访问预取请求以及存储访问预取请求,可以根据实际应用需求对基于载入访问预取获取的数据(也即,载入访问预取请求的目标数据)以及基于存储访问预取获取的数据(也即,存储访问预取请求的目标数据)进行不同的处理,由此使得该数据预取方法具有降低由于缓存不命中出现停顿的载入指令的可能性,并因此具有提升采用该数据预取方法的数据处理装置100(例如,中央处理装置,CPU)的性能的潜力。
例如,在基于载入访问预取请求进行载入访问预取时,基于载入访问预取获取的数据(也即,载入访问预取请求的目标数据)被写入一级缓存存储器。例如,在基于存储访问预取请求进行载入访问预取时,基于存储访问预取获取的数据(也即,存储访问预取请求的目标数据)被写入比一级缓存存储器低层级的其它缓存存储器中。例如,比一级缓存存储器低层级的其它缓存存储器可以是二级缓存存储器。又例如,比一级缓存存储器低层级的其它缓存存储器可以是末级缓存存储器(例如,三级缓存存储器)。
例如,在基于载入访问请求进行数据读取时,CPU核可以直接从一级缓存存储器获取该载入访问请求的目标数据。例如,在基于存储访问请求进行数据读取时,可以经由未命中地址缓冲存储器112向二级缓存存储器请求该存储访问请求的目标数据,二级缓存存储器从自身或者下一级的存储器件获取该存储访问请求的目标数据后将其提供给未命中地址缓冲存储器112,未命中地址缓冲存储器112将该存储访问请求的目标数据写入至一级缓存存储器中,然后,CPU核可以从一级缓存存储器获取该存储访问请求的目标数据。
例如,通过使得基于存储访问预取请求获取的数据写入比一级缓存存储器低层级的其它缓存存储器(二级缓存存储器)中,可以避免已经存储到第一缓冲存储器中的数据(例如,基于载入访问预取获取的数据)被新的基于存储访问预取获取的数据替换掉,以及增加基于载入访问预取获取的数据(也即,载入访问预取请求的目标数据)的存储空间,由此可以降低由于缓存不命中出现停顿的载入指令的可能性,提升采用该数据预取方法的数据处理装置100的性能。
例如,本公开的发明人通过研究发现,相比于采用提升通过提升数据预取器预取的数据(例如,载入预取请求的目标数据)的命中率的方法,采用将数据预取器生成的预取请求区分为载入访问预取请求和存储访问预取请求,并将基于载入访问预取获取的数据(也即,载入访问预取请求的目标数据)写入比一级缓存存储器低层级的其它缓存存储器(例如,二级缓存存储器)的方法,可以更好的提升数据处理装置100的性能。
例如,该数据预取器包括逻辑电路以及缓冲存储器(位于该数据预取器中)。例如,数据预取器包括的逻辑电路可以用于比较地址,计算地址之间的差值、进行哈希操作中的至少一项。例如,数据预取器包括的缓冲存储器可以用于保存已经发现或者正在发现的地址访问规律。
例如,相比于通过采用两个独立的数据预取器(分别用于输出载入访问预取请求和存储访问预取请求)来区分载入访问预取请求和存储访问预取请求的方法,通过使用单个数据预取器区分载入访问预取请求和存储访问预取请求,本公开的至少一个实施例提供的数据预取方法可以在使用更少的硬件资源,对CPU进行更少的改动的情况下区分载入访问预取请求和存储访问预取请求,由此可以降低开发、寄存器转换级电路(RegisterTransfer Level,RTL)实现和验证的工作量和成本。
例如,“使用更少的硬件资源”是指可以共用同一个数据预取器中的逻辑电路和内部缓存分别对数据预取器的载入访问预取功能和存储访问预取功能分别进行训练,而无需使用第一组逻辑电路和内部缓存对数据预取器的载入访问预取功能进行训练,并使用独立于第一组逻辑电路和内部缓存的第二组逻辑电路和内部缓存对数据预取器的存储访问预取功能进行训练。例如,“对CPU进行更少的改动”是指仅需少量改动现有数据预取器配置,而无需额外增加一个用于从CPU向数据预取器的提供载入/存储访问指令的接口。例如,在CPU原本不支持两个单独的数据预取器的情况下,重新实现和优化两个数据预取器所涉及的开发、RTL实现以及验证开销比较大。
例如,在步骤S30中,基于存储访问预取请求进行存储访问预取,包括以下的步骤S31。
步骤S31:响应于存储访问预取请求的目标数据已在一级缓存存储器或者二级缓存存储器中,丢弃存储访问预取请求;响应于存储访问预取请求的目标数据不在一级缓存存储器和二级缓存存储器中,获取存储访问预取请求的目标数据,并将存储访问预取请求的目标数据写入二级缓存存储器中。
例如,二级缓存存储器是位于一级缓存存储器下一级的缓存存储器。
在一个示例中,在步骤S31中,响应于存储访问预取请求的目标数据不在一级缓存存储器中,可以将存储访问预取请求直接提供给二级缓存存储器。
在另一个示例中,在步骤S31中,响应于存储访问预取请求的目标数据不在一级缓存存储器中,将存储访问预取请求提供给二级缓存存储器,包括以下的步骤S311和步骤S312。
步骤S311:响应存储访问预取请求的目标数据不在一级缓存存储器中,向存储访问预取序列(L2 Prefetch Queue)缓冲存储器申请一个第一存储项,并将第一存储项分配给存储访问预取请求。
步骤S312:存储访问预取序列缓冲存储器113将存储访问预取请求提供给二级缓存存储器。
例如,在步骤S312中,在二级缓存存储器可以接收存储访问预取请求之后,存储访问预取序列缓冲存储器113将存储访问预取请求提供给二级缓存存储器。
例如,存储访问预取序列缓冲存储器113用于短暂保存存储访问预取请求(L2Prefetch Queue)。例如,通过向存储访问预取序列缓冲存储器113申请一个第一存储项,并将第一存储项分配给存储访问预取请求,可以降低在二级缓存存储器不能立刻接收该存储访问预取请求的情况下被丢弃以及因存储访问预取请求被丢弃而对数据预取器和数据处理装置100带来的不利影响的可能性。
例如,在该存储访问预取请求被提供给二级缓存存储器之后,该存储访问预取请求即可以被删除,且该存储访问预取请求所在的第一存储项可以被释放,因此,存储访问预取请求可以仅在存储访问预取序列缓冲存储器113短暂停留;对应地,存储访问预取序列缓冲存储器113的条目个数也可以比较少(例如,4-8个),由此可以存储访问预取序列缓冲存储器113的容量可以较小。例如,第一存储项可以仅保存存储访问预取请求的目标数据的地址(例如,物理地址),由此第一存储项所占的存储空间可以较小,进而可以进一步地降低存储访问预取序列缓冲存储器113的容量。
例如,在步骤S31中,获取存储访问预取请求的目标数据,并将存储访问预取请求的目标数据写入二级缓存存储器中,包括:二级缓存存储器向位于二级缓存存储器下一级的存储器件(例如,三级缓存存储器或者DRAM)请求存储访问预取请求的目标数据,并将下一级的存储器件提供的存储访问预取请求的目标数据存储在二级缓存存储器中。
需要说明的是,为描述方便,本公开的至少一个实施例中的示例以基于存储访问预取获取的数据被写入二级缓存存储器为例进行描述,但本领域技术人员可以理解,也可以通过将基于存储访问预取获取的数据写入三级缓存存储器或者比三级缓存存储器低层级的缓存存储器中来提升数据处理装置100的性能;此种情况下,在步骤S30中,基于存储访问预取请求进行存储访问预取,例如包括以下的步骤S32。步骤S32:响应于存储访问预取请求的目标数据已在一级缓存存储器、二级缓存存储器或者三级缓存存储器中,丢弃存储访问预取请求;响应于存储访问预取请求的目标数据不在一级缓存存储器、二级缓存存储器和三级缓存存储器中,获取存储访问预取请求的目标数据,并将存储访问预取请求的目标数据写入三级缓存存储器中。例如,步骤S32的具体实现方式可以参照步骤S31,在此不再赘述。
例如,在步骤S30中,基于载入访问预取请求进行载入访问预取,包括以下的步骤S33。
步骤S33:响应于载入访问预取请求的目标数据已在一级缓存存储器中,丢弃载入访问预取请求;响应于载入访问预取请求的目标数据不在一级缓存存储器中,获取载入访问预取请求的目标数据,并将载入访问预取请求的目标数据写入一级缓存存储器中。
例如,在步骤S33中,获取载入访问预取请求的目标数据,并将载入访问预取请求的目标数据写入一级缓存存储器中,包括以下的步骤S331-步骤S334。
步骤S331:向未命中地址缓冲存储器112申请一个第二存储项,并将第二存储项分配给载入访问预取请求。例如,载入访问预取请求可以包括载入访问预取请求的目标数据的地址。例如,载入访问预取请求还可以包括载入访问预取请求的目标数据在一级缓存存储器中的存储地址。
步骤S332:未命中地址缓冲存储器112向二级缓存存储器请求载入访问预取请求的目标数据。
步骤S333:二级缓存存储器获取载入访问预取请求的目标数据(从自身或者二级缓存存储器下一级的存储器件获取载入访问预取请求的目标数据),并将载入访问预取请求的目标数据提供给未命中地址缓冲存储器112。
步骤S334:未命中地址缓冲存储器112将载入访问预取请求的目标数据写入一级缓存存储器中。例如,在未命中地址缓冲存储器112将载入访问预取请求的目标数据写入一级缓存存储器之后,该载入访问预取请求被删除,该载入访问预取请求所在的第二存储项被释放。
例如,下面对数据预取器以及数据预取器的训练的方法进行示例性说明。
例如,数据预取器包括的缓冲存储器可以存储主表格。例如,主表格可能是单路(direct mapped)或者多路(associative)的。
例如,数据预取器可以包括多个预取器条目,多个预取器条目的每个对应于主表格的一个条目。例如,多个预取器条目的每个(也即,主表格的每个条目)用于跟踪一个数据流(对应地,接收该数据流中数据的地址),以发现该数据流的规律(对应地,保存一个已经发现或者正在发现的规律),并根据该规律来预测接下来会访问的数据地址,从而发出预取请求。
例如,数据预取器包括第一类预取器条目以及不同于第一类预取器条目的第二类预取器条目。例如,第一类预取器条目用于(例如,仅用于)跟踪对应于载入访问请求的数据流,第二类预取器条目用于(例如,仅用于)跟踪对应于存储访问请求的数据流。
例如,可以通过以下的方法将数据预取器包括多个预取器条目进行标记(标记为第一类预取器条目或者第二类预取器条目)。
例如,响应于多个预取器条目的第一部分跟踪的数据流中首个数据对应的操作指令的访问请求用于载入访问,将多个预取器条目的第一部分的每个标记为第一类预取器条目;响应于多个预取器条目的第二部分跟踪的数据流中首个数据对应的操作指令的访问请求用于存储访问,将多个预取器条目的第二部分的每个标记为第二类预取器条目。
图4示出了本公开的至少一个实施例提供的单个预取器条目的示意图。例如,如图4所示,预取器条目包括载入访问标识数据域201。例如,载入访问标识数据域(例如,单比特的数据域)201可以为载入访问标识数据位。
例如,将多个预取器条目的第一部分的每个标记为第一类预取器条目,包括:将多个预取器条目的第一部分的每个包括的载入访问标识数据域的值设置为第一值;将多个预取器条目的第二部分的每个标记为第二类预取器条目,包括:将多个预取器条目的第二部分的每个包括的载入访问标识数据域的值IS_LOAD设置为不同于第一值的第二值。例如,第一值可以为1,第二值可以为零。
需要说明的是,在一些示例中,数据预取器包括的缓冲存储器还可以存储其它适用的表格(例如,用于保存其它辅助实现预取功能的数据)。例如,一种数据预取器包括的缓冲存储器可以存储以下三个表格,第一个表格保存当前活跃数据流;第二个表格保存以往检测到的规律;第三个表格保存待输出的预取请求,其中,第一个和第二个表格的项目需要包括IS_LOAD数据域,而第三个表格的项目则不需要。
在步骤S30中,采用载入访问请求对数据预取器中的载入访问预取功能进行训练,包括以下的步骤S34。
步骤S34:响应于操作指令的访问请求是载入访问请求,将载入访问请求的地址分配给第一类预取器条目,并采用载入访问请求的地址对第一类预取器条目进行训练。
例如,在步骤S34中,将载入访问请求的地址分配给第一类预取器条目,包括:基于载入访问请求的地址(载入访问请求的目标数据的地址)确定载入访问请求的地址隶属的第一预取器条目,并将载入访问请求的地址分配给载入访问请求的地址隶属的第一预取器条目。
例如,位于存储空间中的同一页(例如,同一个4k页面)的用于载入访问的数据的地址隶属于同一个第一预取器条目;对应地,该第一预取器条目接收并跟踪位于存储空间中的同一页的用于载入访问的数据的地址,并采用上述位于存储空间中的同一页的用于载入访问的数据的地址进行训练,以发现该第一预取器条目跟踪的数据流的规律(也即,位于存储空间中的同一页的用于载入访问的数据的地址的规律)。
例如,基于载入访问请求的地址确定载入访问请求的地址隶属的第一预取器条目包括:基于载入访问请求的地址计算载入访问请求的地址的索引值INDEX,并至少基于载入访问请求的地址的索引值INDEX确定载入访问请求的地址隶属的第一预取器条目。
例如,多个预取器条目的每个对应于一个索引值。例如,可以基于预取器条目跟踪的数据流中首个数据的地址(也即,该预取器条目接收的首个地址)计算首个数据的地址的索引值,并将该预取器条目接收的首个数据的地址的索引值作为该预取器条目对应的索引值。
在一个示例中,至少基于载入访问请求的地址的索引值INDEX确定载入访问请求的地址隶属的第一预取器条目,包括:将第一预取器条目中与载入访问请求的地址具有相同的索引值的第一预取器条目作为载入访问请求的地址隶属的第一预取器条目。
本公开的发明人在研究中注意到,数据预取器包括的预取器条目的数目(例如,几十个到数千个)远远小于访问请求的地址范围(例如,232-264)的情况下,基于相距很远的多个地址分别计算得到的多个索引值可能彼此相同;然而,由于数据预取器通常用于发现位于局部地址范围内(比如地址范围4KB以内的地址)的数据访问规律,如果将相距很远的地址用于同一个数据预取器条目的训练中,可能会降低预取器条目发现的规律的准确性以及预取的准确性。
在另一个示例中,如图4所示,多个预取器条目的每个具有一个标识数据域202,该标识数据域202(例如,多比特)的值TAG为基于该预取器条目跟踪的数据流中首个数据的地址(也即,该预取器条目接收的首个地址)的计算得到的哈希值;此种情况下,至少基于载入访问请求的地址的索引值INDEX确定载入访问请求的地址隶属的第一预取器条目,包括:将第一预取器条目中与载入访问请求的地址具有相同的索引值的第一预取器条目作为候选第一预取器条目(载入访问请求的地址可能隶属的第一预取器条目);获取候选第一预取器条目的标识数据域202的值TAG(哈希值);计算载入访问请求的地址的哈希值;响应于候选第一预取器条目的标识数据域202的值TAG(哈希值)等于载入访问请求的地址的哈希值,将候选第一预取器条目作为该载入访问请求的地址隶属的第一预取器条目。例如,通过将第一预取器条目中与载入访问请求的地址具有相同的索引值和哈希值的第一预取器条目作为载入访问请求的地址隶属的第一预取器条目,可以提升预取器条目发现的规律的准确性以及预取的准确性。
例如,假设一个预取器的主表格有16个预取器条目,分别用于跟踪16个数据流;可以利用以下的方法基于操作指令的访问请求的目标数据的地址A的索引值INDEX和哈希值TAG:index=((A>>12)%16);TAG=(A>>16),其中,在上述两个表达式中,“>>”表示地址A右移(例如,右移12位或16为),“%”表示取余。
在步骤S30中,采用存储访问请求对数据预取器中的存储访问预取功能进行训练,包括以下的步骤S35。
步骤S35:响应于操作指令的访问请求是存储访问请求,将存储访问请求的地址(存储访问请求的目标数据的地址)分配给第二类预取器条目,并采用存储访问请求的地址对第二类预取器条目进行训练。
例如,在步骤S35中,将存储访问请求的地址分配给第二类预取器条目,包括:基于存储访问请求的地址确定存储访问请求的地址隶属的第二预取器条目,并将存储访问请求的地址分配给存储访问请求的地址隶属的第二预取器条目。
例如,位于存储空间中的同一页(例如,同一个4k页面)的用于存储访问的数据的地址隶属于同一个第二预取器条目;对应地,该第二预取器条目接收并跟踪位于存储空间中的同一页的用于存储访问的数据的地址,并采用上述位于存储空间中的同一页的用于存储访问的数据的地址进行训练,以发现该第二预取器条目跟踪的数据流的规律(也即,位于存储空间中的同一页的用于存储访问的数据的地址的访问规律)。例如,基于存储访问请求的地址确定存储访问请求的地址隶属的第二预取器条目与基于载入访问请求的地址确定载入访问请求的地址隶属的第一预取器条目相似,在此不再赘述。
例如,在步骤S30中,输出载入访问预取请求包括:基于第一类预取器条目(例如,多个预取器条目的第一部分的每个)跟踪的数据流的规律输出第一访问预取地址,并将第一访问预取地址对应的访问预取请求标识为载入访问预取请求。
例如,在步骤S30中,输出存储访问预取请求包括:基于多个预取器条目的第二部分的每个跟踪的数据流的规律输出第二访问预取地址,并将第二访问预取地址对应的访问预取请求标识为存储访问预取请求。
例如,在预取器为跨步预取器的情况下,多个预取器条目的每个可以通过训练发现该预取器条目跟踪的数据流的跳跃距离。例如,预取器条目跟踪的数据流的跳跃距离为N,且该预取器条目最新接收的地址(用于训练的地址)为A,则该预取器条目输出的预取地址就是A+N。需要说明的是,本公开的至少一个实施例提供的数据预取方法不限于采用跨步预取器,还可以采用流预取器或者其它适用的任何预取器(例如,任何使用虚拟地址进行训练的预取器)。
例如,预取器条目可以基于预取器条目包括的载入访问标识数据域的值IS_LOAD标记该预取器条目输出的访问预取请求。例如,在预取器条目包括的载入访问标识数据域的值为第一值的情况下,将该预取器条目输出的访问预取请求标识为载入访问预取请求;在预取器条目包括的载入访问标识数据域的值IS_LOAD为第二值的情况下,将该预取器条目输出的访问预取请求标识为存储访问预取请求。
在一个示例中,可以使用物理地址对数据预取器进行训练,对应地,数据预取器输出的预取地址也是物理地址,由此在进行预取时,无需对数据预取器输出的预取地址进行翻译。
然而,本公开的发明人在研究注意到,虚拟地址连续的两个页面中的地址有可能被分配为不连续的物理地址,但使用物理地址进行训练的数据预取器只能检测一个页面内的读取规律,从而限制了其发现的规律的准确性与有效性;此外,使用物理地址训练的数据预取器无法生成一个未被训练到的页面的物理地址。
在另一个示例中,可以使用虚拟地址对数据预取器进行训练(例如,数据预取器接收的载入访问请求的地址和存储访问请求的地址均是虚拟地址),对应地,数据预取器输出的预取的地址也是虚拟地址(例如,第一访问预取地址和第二访问预取地址均为虚拟地址);此种情况下,数据预取方法还包括:将第一访问预取地址和第二访问预取的地址翻译为物理地址,以分别基于第一访问预取地址和第二访问预取的物理地址进行载入访问预取和载入存储预取。
例如,使用虚拟地址对数据预取器进行训练可以使得数据预取器具有发现跨页面读取规律的能力以及可以输出跨页面的预取地址,由此可以进一步地提升数据预取器检测得到的规律的准确性与有效性以及数据预取器的性能。
例如,确定操作指令的访问请求是载入访问请求还是存储访问请求,以及接收操作指令并将操作指令的访问请求提供给数据预取器的具体方法可以参见相关技术,在此不再赘述。
图5是本公开的至少一个实施例提供的数据预取方法的一个示例。下面结合图5对本公开的至少一个实施例提供的数据预取方法进行示例性说明。
例如,如图5所示,该数据预取方法包括以下的步骤S2-步骤S4。
步骤S2:数据预取器接收所有(或者部分)操作指令的访问请求(例如,历史操作指令的访问请求),利用上述访问请求(例如,历史访问请求)的虚拟地址进行训练,以获取CPU核的数据访问规律,基于上述数据访问规律输出预取请求的目标数据的地址,并将该预取请求标记为载入访问预取请求或者存储访问预取请求。
例如,在步骤S2中,访问请求包括访问请求的目标数据的虚拟地址。例如,访问请求可以进一步地包括其它适用的信息,例如,该访问请求是载入访问请求还是存储访问请求;该访问请求是否是一级缓存存储器的未命中数据。
例如,步骤S2中,数据预取器接收载入访问请求以及存储载入访问请求,由此数据预取器可以利用更多的访问请求的目标数据的地址进行训练,由此可以增加数据预取器发现更多数据访问规律的可能性。例如,步骤S2中,在数据预取器训练时,对数据预取器的载入访问预取功能以及存储访问预取功能进行分别训练,例如,同一个预取器条目仅利用载入访问请求的目标数据的地址或者存储访问请求的目标数据的地址进行训练,由此不仅可以将载入访问预取请求以及存储访问预取请求区分,而且还可以提升数据预取器发现的规律的准确性。
例如,通过使用单个数据预取器区分载入访问预取请求以及存储访问预取请求对现有数据预取器及CPU核的改动都是比较小的,由此通过使用单个数据预取器区分载入访问预取请求以及存储访问预取请求代价低、简便、易实现。
步骤S3:利用地址翻译器111(例如,地址翻译流水线)将预取请求的目标数据的虚拟地址翻译为物理地址,然后,查看(例如,CPU核利用预取请求的物理地址查看)该预取请求的目标数据是否在一级缓存存储器中。
例如,如果该预取请求的目标数据在一级缓存存储器中,则丢弃该预取请求。对应地,针对该预取请求,无需执行下面的步骤S4以及步骤S4之后的步骤。
步骤S4:在预取请求的目标数据不在一级缓存存储器的情况下,响应于预取请求为载入访问预取请求,向未命中地址缓冲存储器112申请一个第二存储项,并将第二存储项分配给载入访问预取请求;响应存储访问预取请求为存储访问预取请求,向存储访问预取序列缓存器申请一个第一存储项,并将第一存储项分配给存储访问预取请求。
例如,如图5所示,响应于预取请求为载入访问预取请求以及预取请求的目标数据不在一级缓存存储器,执行以下的步骤S5-步骤S7(对应地,该数据预取方法还包括步骤S5-步骤S7)。
步骤S5:未命中地址缓冲存储器112向二级缓存存储器请求载入访问预取请求的目标数据。
步骤S6:二级缓存存储器获取载入访问预取请求的目标数据(从自身或者位于二级缓存存储器下一级的存储器件中),并将载入访问预取请求的目标数据提供给未命中地址缓冲存储器112。
步骤S7:未命中地址缓冲存储器112将载入访问预取请求的目标数据写入一级缓存器中。
例如,如图5所示,响应于预取请求为存储访问预取请求以及预取请求的目标数据不在一级缓存存储器,执行以下的步骤S5’-步骤S7’(对应地,该数据预取方法还包括步骤S5’-步骤S7’)。
步骤S5’:存储访问预取序列缓存器将存储访问预取请求提供给二级缓存存储器。
例如,通过在数据预取器和二级缓存存储器之间设置存储访问预取序列缓存器,可以缓存存储访问预取请求序列,待二级缓存存储器可以接收存储预取请求时将存储预取请求发送至二级缓存存储器,由此可以降低在二级缓存存储器不能立刻接受该存储访问预取请求的情况下被丢弃以及因存储访问预取请求被丢弃而对数据预取器和数据处理装置100带来的不利影响的可能性。例如,存储访问预取序列缓存器的容量可以根据实际应用需求进行设定。例如,存储访问预取序列缓存器没有空余的存储空间的情况下,如果来了一个新的存储访问预取请求,可以丢弃该存储访问预取请求或者驱逐一个已经存储在存储访问预取序列缓存器中的一个存储访问预取请求。
步骤S6’:二级缓存存储器检查存储访问预取请求的目标数据是否存储在二级缓存存储器中;如是,二级缓存存储器丢弃该存储访问预取请求;如否,二级缓存存储器向位于二级缓存存储器下一级的存储器件请求存储访问预取请求的目标数据。
步骤S7’:二级缓存存储器从位于二级缓存存储器下一级的存储器件获取存储访问预取请求的目标数据,并将存储访问预取请求的目标数据存储在二级缓存存储器中。
例如,通将存储访问预取请求的目标数据存储在二级缓存存储器中,能够使得更多的有用数据(例如,载入访问预取请求的目标数据)存储在一级缓存存储器中,由此可以降低载入访问请求的数据不在一级缓存存储器的几率,从而可以提高数据预取器的效率以及采用该数据预取器和预取方法的***的整体性能。
需要说明的是,在数据预取器进行训练与预取的过程中,CPU核读取数据,以执行相关操作。对应地,图5还示出了CPU核读取数据的流程的部分。例如,CPU核读取数据的流程包括以下的步骤S1。
步骤S1:CPU核输出访问请求的目标数据的虚拟地址至地址翻译器(例如,地址翻译流水线)111,地址翻译器将上述虚拟地址翻译为物理地址,然后,CPU核查看该访问请求的目标数据是否在一级缓存存储器中。
例如,如果访问请求的目标数据在一级缓存存储器,则从一级缓存存储器中取出访问请求的目标数据;如果访问请求的目标数据不在一级缓存存储器,则经由未命中地址缓冲存储器112获取访问请求的目标数据,并将访问请求的目标数据写入至一级缓存存储器中。
本公开的至少一个实施例还提供了一种数据处理装置100。图6是本公开的至少一个实施例提供的数据处理装置100的示例性框图。
如图6所示,该数据处理装置100包括数据预取器。数据预取器被配置为:接收操作指令,确定操作指令的访问请求是载入访问请求还是存储访问请求;响应于操作指令的访问请求是载入访问请求,采用载入访问请求对数据预取器中的载入访问预取功能进行训练,输出载入访问预取请求,并基于载入访问预取请求进行载入访问预取;以及响应于操作指令的访问请求是存储访问请求,采用存储访问请求对数据预取器中的存储访问预取功能进行训练,输出存储访问预取请求,并基于存储访问预取请求进行存储访问预取。
图7是图6所示数据处理装置100的一个示例的示意图。
例如,如图6和图7所示,数据处理装置100还包括一级缓存器和二级缓存存储器。基于存储访问预取请求进行存储访问预取,包括:响应于存储访问预取请求的目标数据已在一级缓存器或者二级缓存存储器中,丢弃存储访问预取请求;以及响应于存储访问预取请求的目标数据不在一级缓存器和二级缓存存储器中,获取存储访问预取请求的目标数据,并将存储访问预取请求的目标数据写入二级缓存存储器中。
例如,响应于存储访问预取请求的目标数据已在一级缓存器或者二级缓存存储器中,丢弃存储访问预取请求,包括:响应于存储访问预取请求的目标数据已在一级缓存器中,丢弃存储访问预取请求;响应于存储访问预取请求的目标数据不在一级缓存器中,将存储访问预取请求提供给二级缓存存储器;以及响应于存储访问预取请求的目标数据已在二级缓存存储器中,丢弃存储访问预取请求。
例如,如图6和图7所示,数据处理装置100还包括存储访问预取序列缓存器。响应于存储访问预取请求的目标数据不在一级缓存器中,将存储访问预取请求提供给二级缓存存储器,包括:响应存储访问预取请求的目标数据不在一级缓存器中,向存储访问预取序列缓存器申请一个第一存储项,并将第一存储项分配给存储访问预取请求;以及存储访问预取序列缓存器将存储访问预取请求提供给二级缓存存储器。
例如,数据预取器包括第一类预取器条目以及不同于第一类预取器条目的第二类预取器条目;响应于操作指令的访问请求是载入访问请求,采用载入访问请求对数据预取器中的载入访问预取功能进行训练,包括:响应于操作指令的访问请求是载入访问请求,将载入访问请求的地址分配给第一类预取器条目,并采用载入访问请求的地址对第一类预取器条目进行训练;以及响应于第二操作指令的访问请求是存储访问请求,采用存储访问请求对数据预取器中的存储访问预取功能进行训练,包括:响应于操作指令的访问请求是存储访问请求,将存储访问请求的地址分配给第二类预取器条目,并采用存储访问请求的地址对第二类预取器条目进行训练。
例如,数据预取器包括多个预取器条目;多个预取器条目的第一部分的每个包括的载入访问标识数据域(例如,载入访问标识数据域为载入访问标识数据位)中的值为第一值;多个预取器条目的第二部分的每个包括的载入访问标识数据域中的值为不同于第一值的第二值;第一值用于标识多个预取器条目的第一部分的每个为第一类预取器条目;以及第二值用于标识多个预取器条目的第二部分的每个为第二类预取器条目。
例如,输出载入访问预取请求,包括:基于多个预取器条目的第一部分的每个跟踪的数据流的规律输出第一访问预取地址,并将第一访问预取地址对应的访问预取请求标识为载入访问预取请求;输出存储访问预取请求,包括:基于多个预取器条目的第二部分的每个跟踪的数据流的规律输出第二访问预取地址,并将第二访问预取地址对应的访问预取请求标识为存储访问预取请求。
例如,数据处理装置100还包括地址翻译器111。例如,载入访问请求的地址、存储访问请求的地址、第一访问预取地址和第二访问预取地址均为虚拟地址:地址翻译器111被配置为将第一访问预取地址和第二访问预取的地址翻译为物理地址,以分别基于第一访问预取地址和第二访问预取的物理地址进行载入访问预取和载入存储预取。
需要说明的是,数据处理装置100的具体实现方式可以参见数据预取方法的相关步骤,在此不再赘述。
虽然上文中已经用一般性说明及具体实施方式,对本公开作了详尽的描述,但在本公开实施例基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本公开精神的基础上所做的这些修改或改进,均属于本公开要求保护的范围。
以上所述仅是本公开的示范性实施方式,而非用于限制本公开的保护范围,本公开的保护范围由所附的权利要求确定。
Claims (22)
1.一种数据预取方法,包括:
接收操作指令,将所述操作指令的访问请求提供给数据预取器;
确定所述操作指令的访问请求是载入访问请求还是存储访问请求;
响应于所述操作指令的访问请求是所述载入访问请求,采用所述载入访问请求对所述数据预取器中的载入访问预取功能进行训练,输出载入访问预取请求,并基于所述载入访问预取请求进行载入访问预取;以及
响应于所述操作指令的访问请求是所述存储访问请求,采用所述存储访问请求对所述数据预取器中的存储访问预取功能进行训练,输出存储访问预取请求,并基于所述存储访问预取请求进行存储访问预取。
2.根据权利要求1所述的数据预取方法,其中,所述基于所述存储访问预取请求进行所述存储访问预取,包括:
响应于所述存储访问预取请求的目标数据已在一级缓存存储器或者二级缓存存储器中,丢弃所述存储访问预取请求;以及
响应于所述存储访问预取请求的目标数据不在一级缓存存储器和二级缓存存储器中,获取所述存储访问预取请求的目标数据,并将所述存储访问预取请求的目标数据写入所述二级缓存存储器中。
3.根据权利要求2所述的数据预取方法,其中,所述响应于所述存储访问预取请求的目标数据已在一级缓存存储器或者二级缓存存储器中,丢弃所述存储访问预取请求,包括:
响应于所述存储访问预取请求的目标数据已在所述一级缓存存储器中,丢弃所述存储访问预取请求;
响应于所述存储访问预取请求的目标数据不在所述一级缓存存储器中,将所述存储访问预取请求提供给所述二级缓存存储器;以及
响应于所述存储访问预取请求的目标数据已在所述二级缓存存储器中,丢弃所述存储访问预取请求。
4.根据权利要求3所述的数据预取方法,其中,所述响应于所述存储访问预取请求的目标数据不在所述一级缓存存储器中,将所述存储访问预取请求提供给所述二级缓存存储器,包括:
响应所述存储访问预取请求的目标数据不在所述一级缓存存储器中,向存储访问预取序列缓冲存储器申请一个第一存储项,并将所述第一存储项分配给所述存储访问预取请求;以及
所述存储访问预取序列缓冲存储器将所述存储访问预取请求提供给所述二级缓存存储器。
5.根据权利要求2所述的数据预取方法,其中,所述获取所述存储访问预取请求的目标数据,并将所述存储访问预取请求的目标数据写入所述二级缓存存储器中,包括:
所述二级缓存存储器向位于所述二级缓存存储器下一级的存储器件请求所述存储访问预取请求的目标数据,并将所述下一级的存储器件提供的所述存储访问预取请求的目标数据存储在所述二级缓存存储器中。
6.根据权利要求1所述的数据预取方法,其中,所述基于所述载入访问预取请求进行所述载入访问预取,包括:
响应于所述载入访问预取请求的目标数据已在一级缓存存储器中,丢弃所述载入访问预取请求;以及
响应于所述载入访问预取请求的目标数据不在一级缓存存储器中,获取所述载入访问预取请求的目标数据,并将所述载入访问预取请求的目标数据写入所述一级缓存存储器中。
7.根据权利要求6所述的数据预取方法,其中,所述获取所述载入访问预取请求的目标数据,并将所述载入访问预取请求的目标数据写入所述一级缓存存储器中,包括:
向未命中地址缓冲存储器申请一个第二存储项,并将所述第二存储项分配给所述载入访问预取请求;
所述未命中地址缓冲存储器向二级缓存存储器请求所述载入访问预取请求的目标数据;
所述二级缓存存储器获取所述载入访问预取请求的目标数据,并将所述载入访问预取请求的目标数据提供给所述未命中地址缓冲存储器;以及
所述未命中地址缓冲存储器将所述载入访问预取请求的目标数据写入所述一级缓存存储器中。
8.根据权利要求1-7任一项所述的数据预取方法,其中,所述数据预取器包括第一类预取器条目以及不同于所述第一类预取器条目的第二类预取器条目;
所述响应于所述操作指令的访问请求是所述载入访问请求,采用所述载入访问请求对所述数据预取器中的载入访问预取功能进行训练,包括:响应于所述操作指令的访问请求是所述载入访问请求,将所述载入访问请求的地址分配给所述第一类预取器条目,并采用所述载入访问请求的地址对所述第一类预取器条目进行训练;以及
所述响应于所述第二操作指令的访问请求是所述存储访问请求,采用所述存储访问请求对所述数据预取器中的存储访问预取功能进行训练,包括:响应于所述操作指令的访问请求是所述存储访问请求,将所述存储访问请求的地址分配给所述第二类预取器条目,并采用所述存储访问请求的地址对所述第二类预取器条目进行训练。
9.根据权利要求8所述的数据预取方法,其中,所述第一类预取器条目包括多条第一预取器条目,所述第二类预取器条目包括多条第二预取器条目;
所述将所述载入访问请求的地址分配给所述第一类预取器条目,包括:基于所述载入访问请求的地址确定所述载入访问请求的地址隶属的第一预取器条目,并将所述载入访问请求的地址分配给所述载入访问请求的地址隶属的第一预取器条目;以及
所述将所述存储访问请求的地址分配给所述第二类预取器条目,包括:基于所述存储访问请求的地址确定所述存储访问请求的地址隶属的第二预取器条目,并将所述存储访问请求的地址分配给所述存储访问请求的地址隶属的第二预取器条目。
10.根据权利要求8所述的数据预取方法,其中,所述数据预取器包括多个预取器条目;以及
所述数据预取方法还包括:
响应于所述多个预取器条目的第一部分跟踪的数据流中首个数据对应的操作指令的访问请求用于载入访问,将所述多个预取器条目的第一部分的每个标记为所述第一类预取器条目;以及
响应于所述多个预取器条目的第二部分跟踪的数据流中首个数据对应的操作指令的访问请求用于存储访问,将所述多个预取器条目的第二部分的每个标记为所述第二类预取器条目。
11.根据权利要求10所述的数据预取方法,其中,所述将所述多个预取器条目的第一部分的每个标记为所述第一类预取器条目,包括:将所述多个预取器条目的第一部分的每个包括的载入访问标识数据域的值设置为第一值;以及
所述将所述多个预取器条目的第二部分的每个标记为所述第二类预取器条目,包括:将所述多个预取器条目的第二部分的每个包括的载入访问标识数据域的值设置为不同于所述第一值的第二值。
12.根据权利要求10所述的数据预取方法,其中,所述输出载入访问预取请求,包括:基于所述多个预取器条目的第一部分的每个跟踪的数据流的规律输出第一访问预取地址,并将所述第一访问预取地址对应的访问预取请求标识为所述载入访问预取请求;以及
所述输出存储访问预取请求,包括:基于所述多个预取器条目的第二部分的每个跟踪的数据流的规律输出第二访问预取地址,并将所述第二访问预取地址对应的访问预取请求标识为所述存储访问预取请求。
13.根据权利要求12所述的数据预取方法,其中,所述载入访问请求的地址、所述存储访问请求的地址、所述第一访问预取地址和所述第二访问预取地址均为虚拟地址:以及
所述数据预取方法还包括:将所述第一访问预取地址和所述第二访问预取的地址翻译为物理地址,以分别基于所述第一访问预取地址和所述第二访问预取的物理地址进行所述载入访问预取和所述载入存储预取。
14.一种数据处理装置,包括数据预取器,其中,所述数据预取器被配置为:
接收操作指令,确定所述操作指令的访问请求是载入访问请求还是存储访问请求;
响应于所述操作指令的访问请求是所述载入访问请求,采用所述载入访问请求对所述数据预取器中的载入访问预取功能进行训练,输出载入访问预取请求,并基于所述载入访问预取请求进行载入访问预取;以及
响应于所述操作指令的访问请求是所述存储访问请求,采用所述存储访问请求对所述数据预取器中的存储访问预取功能进行训练,输出存储访问预取请求,并基于所述存储访问预取请求进行存储访问预取。
15.根据权利要求14所述的数据处理装置,还包括一级缓存存储器和二级缓存存储器,
其中,所述基于所述存储访问预取请求进行所述存储访问预取,包括:
响应于所述存储访问预取请求的目标数据已在所述一级缓存存储器或者所述二级缓存存储器中,丢弃所述存储访问预取请求;以及
响应于所述存储访问预取请求的目标数据不在所述一级缓存存储器和所述二级缓存存储器中,获取所述存储访问预取请求的目标数据,并将所述存储访问预取请求的目标数据写入所述二级缓存存储器中。
16.根据权利要求15所述的数据处理装置,其中,所述响应于所述存储访问预取请求的目标数据已在所述一级缓存存储器或者所述二级缓存存储器中,丢弃所述存储访问预取请求,包括:
响应于所述存储访问预取请求的目标数据已在所述一级缓存存储器中,丢弃所述存储访问预取请求;
响应于所述存储访问预取请求的目标数据不在所述一级缓存存储器中,将所述存储访问预取请求提供给所述二级缓存存储器;以及
响应于所述存储访问预取请求的目标数据已在所述二级缓存存储器中,丢弃所述存储访问预取请求。
17.根据权利要求16所述的数据处理装置,还包括存储访问预取序列缓冲存储器,
其中,所述响应于所述存储访问预取请求的目标数据不在所述一级缓存存储器中,将所述存储访问预取请求提供给所述二级缓存存储器,包括:
响应所述存储访问预取请求的目标数据不在所述一级缓存存储器中,向所述存储访问预取序列缓冲存储器申请一个第一存储项,并将所述第一存储项分配给所述存储访问预取请求;以及
所述存储访问预取序列缓冲存储器将所述存储访问预取请求提供给所述二级缓存存储器。
18.根据权利要求14-17任一项所述的数据处理装置,其中,所述数据预取器包括第一类预取器条目以及不同于所述第一类预取器条目的第二类预取器条目;
所述响应于所述操作指令的访问请求是所述载入访问请求,采用所述载入访问请求对所述数据预取器中的载入访问预取功能进行训练,包括:响应于所述操作指令的访问请求是所述载入访问请求,将所述载入访问请求的地址分配给所述第一类预取器条目,并采用所述载入访问请求的地址对所述第一类预取器条目进行训练;以及
所述响应于所述第二操作指令的访问请求是所述存储访问请求,采用所述存储访问请求对所述数据预取器中的存储访问预取功能进行训练,包括:响应于所述操作指令的访问请求是所述存储访问请求,将所述存储访问请求的地址分配给所述第二类预取器条目,并采用所述存储访问请求的地址对所述第二类预取器条目进行训练。
19.根据权利要求18所述的数据处理装置,其中,所述数据预取器包括多个预取器条目;
所述多个预取器条目的第一部分的每个包括的载入访问标识数据域中的值为第一值;
所述多个预取器条目的第二部分的每个包括的载入访问标识数据域中的值为不同于所述第一值的第二值;
所述第一值用于标识所述多个预取器条目的第一部分的每个为所述第一类预取器条目;以及
所述第二值用于标识所述多个预取器条目的第二部分的每个为所述第二类预取器条目。
20.根据权利要求19所述的数据处理装置,其中,所述载入访问标识数据域为载入访问标识数据位。
21.根据权利要求19所述的数据处理装置,其中,所述输出载入访问预取请求,包括:基于所述多个预取器条目的第一部分的每个跟踪的数据流的规律输出第一访问预取地址,并将所述第一访问预取地址对应的访问预取请求标识为所述载入访问预取请求;以及
所述输出存储访问预取请求,包括:基于所述多个预取器条目的第二部分的每个跟踪的数据流的规律输出第二访问预取地址,并将所述第二访问预取地址对应的访问预取请求标识为所述存储访问预取请求。
22.根据权利要求21所述的数据处理装置,还包括地址翻译器,
其中,所述载入访问请求的地址、所述存储访问请求的地址、所述第一访问预取地址和所述第二访问预取地址均为虚拟地址:以及
所述地址翻译器被配置为将所述第一访问预取地址和所述第二访问预取的地址翻译为物理地址,以分别基于所述第一访问预取地址和所述第二访问预取的物理地址进行所述载入访问预取和所述载入存储预取。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011307964.2A CN112527395B (zh) | 2020-11-20 | 2020-11-20 | 数据预取方法和数据处理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011307964.2A CN112527395B (zh) | 2020-11-20 | 2020-11-20 | 数据预取方法和数据处理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112527395A true CN112527395A (zh) | 2021-03-19 |
CN112527395B CN112527395B (zh) | 2023-03-07 |
Family
ID=74981824
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011307964.2A Active CN112527395B (zh) | 2020-11-20 | 2020-11-20 | 数据预取方法和数据处理装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112527395B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022222377A1 (zh) * | 2021-04-23 | 2022-10-27 | 华为技术有限公司 | 一种内存控制器、数据读取方法以及内存*** |
CN118210557A (zh) * | 2024-05-20 | 2024-06-18 | 芯来智融半导体科技(上海)有限公司 | 用于过滤无效预取的预取方法、装置、设备和存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751246A (zh) * | 2008-12-15 | 2010-06-23 | 国际商业机器公司 | 预取数据的***和方法 |
CN104636270A (zh) * | 2013-11-14 | 2015-05-20 | Arm有限公司 | 数据处理装置中的自适应预取 |
CN105955709A (zh) * | 2016-04-16 | 2016-09-21 | 浙江大学 | 基于机器学习的预取能效优化自适应装置及方法 |
WO2016169518A1 (zh) * | 2015-04-23 | 2016-10-27 | 上海芯豪微电子有限公司 | 一种基于指令和数据推送的处理器***和方法 |
CN107479860A (zh) * | 2016-06-07 | 2017-12-15 | 华为技术有限公司 | 一种处理器芯片以及指令缓存的预取方法 |
CN108874690A (zh) * | 2017-05-16 | 2018-11-23 | 龙芯中科技术有限公司 | 数据预取的实现方法和处理器 |
CN110704107A (zh) * | 2019-09-30 | 2020-01-17 | 上海兆芯集成电路有限公司 | 预取器、预取器的运作方法及处理器 |
US20200272907A1 (en) * | 2019-02-22 | 2020-08-27 | Huazhong University Of Science And Technology | Deep learning heterogeneous computing method based on layer-wide memory allocation and system thereof |
-
2020
- 2020-11-20 CN CN202011307964.2A patent/CN112527395B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751246A (zh) * | 2008-12-15 | 2010-06-23 | 国际商业机器公司 | 预取数据的***和方法 |
CN104636270A (zh) * | 2013-11-14 | 2015-05-20 | Arm有限公司 | 数据处理装置中的自适应预取 |
WO2016169518A1 (zh) * | 2015-04-23 | 2016-10-27 | 上海芯豪微电子有限公司 | 一种基于指令和数据推送的处理器***和方法 |
CN105955709A (zh) * | 2016-04-16 | 2016-09-21 | 浙江大学 | 基于机器学习的预取能效优化自适应装置及方法 |
CN107479860A (zh) * | 2016-06-07 | 2017-12-15 | 华为技术有限公司 | 一种处理器芯片以及指令缓存的预取方法 |
CN108874690A (zh) * | 2017-05-16 | 2018-11-23 | 龙芯中科技术有限公司 | 数据预取的实现方法和处理器 |
US20200272907A1 (en) * | 2019-02-22 | 2020-08-27 | Huazhong University Of Science And Technology | Deep learning heterogeneous computing method based on layer-wide memory allocation and system thereof |
CN110704107A (zh) * | 2019-09-30 | 2020-01-17 | 上海兆芯集成电路有限公司 | 预取器、预取器的运作方法及处理器 |
Non-Patent Citations (2)
Title |
---|
陈志坚;孟建熠;严晓浪;沙子岩;: "基于神经网络的重构指令预取机制及其可扩展架构" * |
陈志坚等: "基于神经网络的重构指令预取机制及其可扩展架构", 《电子学报》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022222377A1 (zh) * | 2021-04-23 | 2022-10-27 | 华为技术有限公司 | 一种内存控制器、数据读取方法以及内存*** |
CN118210557A (zh) * | 2024-05-20 | 2024-06-18 | 芯来智融半导体科技(上海)有限公司 | 用于过滤无效预取的预取方法、装置、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112527395B (zh) | 2023-03-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107111455B (zh) | 电子处理器架构以及缓存数据的方法 | |
US10877901B2 (en) | Method and apparatus for utilizing proxy identifiers for merging of store operations | |
CN106537362B (zh) | 数据处理装置和在数据处理装置中处理地址转换的方法 | |
US5778434A (en) | System and method for processing multiple requests and out of order returns | |
KR102244191B1 (ko) | 캐시 및 변환 색인 버퍼를 갖는 데이터 처리장치 | |
JP4567789B2 (ja) | Tlbロックインジケータ | |
JP2618175B2 (ja) | キャッシュ・アクセスのための仮想アドレス変換予測の履歴テーブル | |
US7213126B1 (en) | Method and processor including logic for storing traces within a trace cache | |
US10146545B2 (en) | Translation address cache for a microprocessor | |
KR102588399B1 (ko) | 코프로세서 동작 번들링 | |
US20150121046A1 (en) | Ordering and bandwidth improvements for load and store unit and data cache | |
CN112416817B (zh) | 预取方法、信息处理装置、设备以及存储介质 | |
US10831675B2 (en) | Adaptive tablewalk translation storage buffer predictor | |
US20080065809A1 (en) | Optimized software cache lookup for simd architectures | |
US20090006803A1 (en) | L2 Cache/Nest Address Translation | |
US20160140042A1 (en) | Instruction cache translation management | |
US11775445B2 (en) | Translation support for a virtual cache | |
JPH1074166A (ja) | 多重レベル・ダイナミック・セット予測方法および装置 | |
US7039768B2 (en) | Cache predictor for simultaneous multi-threaded processor system supporting multiple transactions | |
US10606762B2 (en) | Sharing virtual and real translations in a virtual cache | |
WO2019018665A1 (en) | PRIVATE CACHE STORAGE FOR ACCESS TO LOCAL STORAGE DATA | |
KR20190087500A (ko) | 메모리 어드레스 변환 | |
CN112527395B (zh) | 数据预取方法和数据处理装置 | |
US11500779B1 (en) | Vector prefetching for computing systems | |
KR100343940B1 (ko) | 트랜슬레이션 룩어헤드 버퍼 예측 비트를 이용한 쓰기동작시의 캐쉬 얼리어싱 방지 |
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 |