CN105426322B - 一种数据的预取方法及装置 - Google Patents
一种数据的预取方法及装置 Download PDFInfo
- Publication number
- CN105426322B CN105426322B CN201511027094.2A CN201511027094A CN105426322B CN 105426322 B CN105426322 B CN 105426322B CN 201511027094 A CN201511027094 A CN 201511027094A CN 105426322 B CN105426322 B CN 105426322B
- Authority
- CN
- China
- Prior art keywords
- prefetched
- data
- address
- memory
- cpu
- 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
Classifications
-
- 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/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6028—Prefetching based on hints or prefetch instructions
Abstract
本发明实施例提供一种数据的预取方法及装置,涉及计算机领域,能够通过执行一条预取指令实现将多个离散的数据预取到高速缓冲存储器中,节省了处理器资源,降低软件开发的复杂度。该预取方法包括:中央处理器CPU获取预取指令,其中,预取指令包括地址列表信息的标识,预取指令用于触发CPU将内存中的至少两个待预取数据预取到高速缓冲存储器中,至少两个待预取数据为离散数据;CPU根据地址列表信息的标识,获取地址列表信息;CPU根据地址列表信息,将内存中的至少两个待预取数据预取到高速缓冲存储器中。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种数据的预取方法及装置。
背景技术
预取技术是软件性能优化的关键技术之一,是指在处理器进行运算时,提前将处理器运算将要使用的数据从内存存入高速缓冲存储器Cache中,当处理器需要这些数据时,可以直接从高速缓冲存储器中获得这些数据。由于处理器从高速缓冲存储器中读取数据的时间远远小于从内存中读取数据的时间,并且预取过程可以与处理器运算过程并行执行,因此大大降低了处理器访问存储器时的延迟。
现有的预取技术通常分为硬件预取和软件预取,这两种预取都支持指令的预取(即指令代码的预取)和数据的预取。其中,在采用软件预取的方式对数据进行预取时,一般通过指令的方式实现,如Intel x86处理器中的PREFETCH指令,MIPS(MillionInstructions Per Second,单字长定点指令平均执行速度)指令集中的PERF指令以及ARM(Advanced Reduced Instruction Set Computer Machines,精简指令集微处理器)指令集中的PLD指令。
现有的一条预取指令只能根据该预取指令所指示的一个地址将数据预取到高速缓冲存储器中,而实际的数据特点是数量多且离散的,因此在对这些离散的数据进行预取时,不同位置的数据需要执行不同的预取指令,这些预取指令耗费了大量的处理器资源,增加了软件开发的复杂度。
发明内容
本发明的实施例提供一种数据的预取方法及装置,能够通过执行一条预取指令实现将多个离散的数据预取到高速缓冲存储器中,节省了处理器资源,降低软件开发的复杂度。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,本发明实施例提供一种数据的预取方法,包括:
中央处理器CPU获取预取指令,其中,所述预取指令包括地址列表信息的标识,所述预取指令用于触发所述CPU将内存中的至少两个待预取数据预取到高速缓冲存储器中,所述至少两个待预取数据为离散数据;
所述CPU根据所述地址列表信息的标识,获取所述地址列表信息;
所述CPU根据所述地址列表信息,将内存中的至少两个待预取数据预取到高速缓冲存储器中。
本发明实施例提供的预取方法中,CPU能够获取预取指令,根据预取指令查找到所述地址列表信息,并根据地址列表信息将内存中的至少两个待预取数据预取到高速缓冲存储器中。由于至少两个待预取数据为离散数据,与传统的一条预取指令只能根据该预取指令所指示的一个地址将数据预取到高速缓冲存储器中的方法相比,能够通过执行一条预取指令实现将多个离散的数据预取到高速缓冲存储器中,节省了处理器资源,降低软件开发的复杂度。
进一步地,所述地址列表信息包括所述至少两个待预取数据在内存中的地址信息;
所述CPU根据所述地址列表信息,将内存中的至少两个待预取数据预取到高速缓冲存储器中,具体包括:
所述CPU根据所述地址列表信息中所述至少两个待预取数据在内存中的地址信息,将内存中的所述至少两个待预取数据预取到高速缓冲存储器中。
本发明实施例提供的预取方法中,CPU根据所述地址列表信息中所述至少两个待预取数据在内存中的地址信息,将内存中的所述至少两个待预取数据预取到高速缓冲存储器中。通过配置在CPU内部的不同的地址列表信息,能够实现对不同的多个离散的数据进行预取,节省了处理器资源。
进一步地,对于所述至少两个待预取数据中的任意一个待预取数据,所述待预取数据在内存中的地址信息包括基地址和相对偏移地址,其中,所述基地址为所述待预取数据所属的数据结构的首地址,所述相对偏移地址为所述待预取数据在所述数据结构的地址相对于所述数据结构的首地址的偏移量。
进一步地,所述CPU根据所述地址列表信息中所述至少两个待预取数据在内存中的地址信息,将内存中的所述至少两个待预取数据预取到高速缓冲存储器中,具体包括:
所述CPU根据所述至少两个待预取数据的所述基地址和所述相对偏移地址,计算所述至少两个待预取数据在内存中的地址;
所述CPU将所述至少两个待预取数据预取到高速缓冲存储器中。
本发明实施例提供的预取方法中,所述待预取数据在内存中的地址信息包括基地址和相对偏移地址,通过这种记录地址的方式,可以将属于同一数据结构的待预取数据进行归类。
第二方面,本发明实施例提供一种中央处理器CPU,包括获取模块和预取模块;
所述获取模块,用于获取预取指令,其中,所述预取指令包括地址列表信息的标识,所述预取指令用于触发所述CPU将内存中的至少两个待预取数据预取到高速缓冲存储器中,所述至少两个待预取数据为离散数据;
所述获取模块,还用于在所述获取模块获取预取指令后,获取所述地址列表信息;
所述预取模块,用于在所述获取模块获取所述地址列表信息后,根据所述地址列表信息,将内存中的至少两个待预取数据预取到高速缓冲存储器中。
本发明实施例提供的CPU的技术效果可以参见上述第一方面中CPU执行的预取方法中描述的CPU的技术效果,此处不再赘述。
进一步地,所述地址列表信息包括所述至少两个待预取数据在内存中的地址信息;
所述预取模块,具体用于在所述获取模块获取所述地址列表信息后,根据所述地址列表信息中所述至少两个待预取数据在内存中的地址信息,将内存中的所述至少两个待预取数据预取到高速缓冲存储器中
进一步地,对于所述至少两个待预取数据中的任意一个待预取数据,所述待预取数据在内存中的地址信息包括基地址和相对偏移地址,其中,所述基地址为所述待预取数据所属的数据结构的首地址,所述相对偏移地址为所述待预取数据在所述数据结构的地址相对于所述数据结构的首地址的偏移量。
进一步地,所述预取模块,具体包括计算子模块和预取子模块;
所述计算子模块,用于在所述获取模块获取所述地址列表信息后,根据所述至少两个待预取数据的所述基地址和所述相对偏移地址,计算所述至少两个待预取数据在内存中的地址;
所述预取子模块,用于在所述计算子模块计算所述至少两个待预取数据在内存中的地址后,将所述至少两个待预取数据预取到高速缓冲存储器中。
第三方面,本发明实施例还提供一种终端,包括存储器、具有第二方面任意特征的处理器、通信接口和系统总线;
所述存储器、所述处理器和所述通信接口通过所述系统总线连接,所述存储器用于存储计算机指令,所述处理器用于执行所述存储器存储的计算机指令,以使所述终端执行如上述第一方面或者第一方面的任意一种可选方式中所述的预取方法。
进一步地,所述存储器还用于存储待预取数据。
本发明实施例提供一种数据的预取方法及装置,通过中央处理器CPU获取预取指令,其中,所述预取指令包括地址列表信息的标识,所述预取指令用于触发所述CPU将内存中的至少两个待预取数据预取到高速缓冲存储器中,所述至少两个待预取数据为离散数据;所述CPU根据所述地址列表信息的标识,获取所述地址列表信息;所述CPU根据所述地址列表信息,将内存中的至少两个待预取数据预取到高速缓冲存储器中。基于上述实施例的描述,CPU能够获取预取指令,根据预取指令查找到所述地址列表信息,并根据地址列表信息将内存中的至少两个待预取数据预取到高速缓冲存储器中。由于至少两个待预取数据为离散数据,与传统的一条预取指令只能根据该预取指令所指示的一个地址将数据预取到高速缓冲存储器中的方法相比,能够通过执行一条预取指令实现将多个离散的数据预取到高速缓冲存储器中,节省了处理器资源,降低软件开发的复杂度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中硬件预取的示意图;
图2为现有技术中软件预取的示意图;
图3为现有技术中某函数访问的数据结构示意图;
图4为本发明实施例提供的一种数据的预取方法的流程示意图一;
图5为本发明实施例提供的一种数据的预取方法的流程示意图二;
图6为本发明实施例提供的一种数据的预取方法的流程示意图三;
图7为本发明实施例提供的一种数据的预取方法的示意图;
图8为本发明实施例提供的一种CPU的结构示意图一;
图9为本发明实施例提供的一种CPU的结构示意图二;
图10为本发明实施例提供的一种终端的硬件示意图一;
图11为本发明实施例提供的一种终端的硬件示意图二。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
本发明实施例中所描述的技术应用于各种需要进行预取的终端中,如用户终端(PC(Personal Computer,个人计算机)、PAD(Portable Android Device,平板电脑)或者手机等)和网络终端(基站等)。预取是指在处理器进行运算时,提前将处理器运算将要使用的数据从内存提前存入高速缓冲存储器(通常指高速缓冲存储器Cache)中,当处理器需要这些数据时,可以直接从这些高速缓冲存储器中获得数据的过程。
现有的预取技术通常分为硬件预取和软件预取。
如图1所示,为现有技术中硬件预取的示意图。其中,高速缓冲存储器中设计有硬件的预取逻辑,在CPU(Central Processing Unit,中央处理器)的运算单元执行程序的过程中,预取逻辑会经过侦测自动启动对后续指令和数据的预取操作,将指令或数据提前从内存预取到高速缓冲存储器中。该预取操作与CPU的运算单元执行程序的过程同步进行。
如图2所示,为现有技术中软件预取的示意图。其中,在CPU的运算单元执行程序的过程中,CPU通过发出预取指令,触发高速缓冲存储器执行预取操作,将相应的指令或数据预取到高速缓冲存储器中。该预取操作仅在预取指令执行时占用CPU资源,后续操作与CPU的运算单元执行程序的过程同步进行。
在采用软件预取的方式对数据进行预取时,一般通过指令的方式实现,如Intelx86处理器中的PREFETCH指令,MIPS指令集中的PERF指令以及ARM指令集中的PLD指令。这些指令需要在有限的指令机器码中表示被预取的数据地址和预取的用途。然而,现有的一条预取指令只能根据该预取指令所指示的一个地址将数据预取到高速缓冲存储器中,而实际软件的数据特点是多且离散的。如图3所示,为现有技术中某函数访问的数据结构示意图,该函数会访问图3所示的数据结构中阴影部分所表示的数据,因此需要提前预取这些数据。但是由于这些数据是离散分布的,因此在对这些离散的数据进行预取时,需要针对该函数内使用到的每一个数据编写一条预取指令。在预取如图3所示的这些数据时,一共需要编写4条预取指令。如果函数访问的数据量更大,则需要编写更多的离散数据的指令,这些指令本身会消耗CPU的运算单元的执行时间,耗费了大量的处理器资源,并且插入过多的指令,会令软件的可读性下降,增加了软件开发的复杂度。
本发明实施例提供了一种数据的预取方法及装置,采用软硬件结合的方式进行数据预取,能够通过执行一条预取指令实现将多个离散数据预取到高速缓冲存储器中,节省了处理器资源,降低软件开发的复杂度。
需要说明的是,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
本发明实施例提供一种数据的预取方法,如图4所示,该方法包括:
S101、CPU获取预取指令,其中,预取指令包括地址列表信息的标识,预取指令用于触发CPU将内存中的至少两个待预取数据预取到高速缓冲存储器中,至少两个待预取数据为离散数据。
高速缓冲存储器存在于CPU中,是用于临时存放数据的存储器。一般高速缓冲存储器的访问速度比内存快很多,但容量较小,为了提高CPU的运行效率,通常把即将访问到的,或者反复访问的代码和数据放到高速缓冲存储器中。其中,高速缓存行是高速缓冲存储器中最小的单位,高速缓存行的大小通常为16~256个字节。高速缓冲存储器按照离CPU中的运算单元的距离远近,又分为一级缓存和二级缓存。一级缓存是指CPU内的第一层高速缓存,与CPU中的运算单元之间的距离最近;二级缓存是指CPU内的第二层高速缓存,是CPU内部的一些缓冲存储器,其作用跟内存一样,相对于CPU中的运算单元,二级缓存位于一级缓存的外端,与CPU中的运算单元之间的距离相对较远。
采用本发明实施例提供的预取方法对待预取数据进行预取时,CPU首先获取预取指令,其中,预取指令用于触发CPU将内存中的至少两个待预取数据预取到高速缓冲存储器中,至少两个待预取数据为离散数据。
其中,预取指令可以直接触发CPU的预取逻辑将内存中的至少两个待预取数据预取到高速缓冲存储器中,也可以是触发CPU的配置寄存器的指令,以使得配置寄存器触发CPU的预取逻辑将内存中的至少两个待预取数据预取到高速缓冲存储器中,本发明不做限制。
需要说明的是,CPU获取预取指令,采用预取指令触发CPU将内存中的至少两个待预取数据预取到高速缓冲存储器中的过程相当于现有技术中软件预取的过程。
S102、CPU根据地址列表信息的标识,获取地址列表信息。
对于不同的软件或函数,在执行过程中所要使用的待预取数据也不同,因此,每个需要进行待预取数据预取的软件或函数均对应一个地址列表信息,每个地址列表信息均包含一个地址列表信息的标识。其中,地址列表信息是预先配置在CPU中的。
示例性的,预取指令的格式可以为:
PREFETCH_PATTERN_DATA(Prefetch_Ctrl_Reg,Pattern_id)
其中,PREFETCH_PATTERN_DATA表示预取逻辑寄存器的接口函数/指令;Prefetch_Ctrl_Reg表示预取逻辑的控制寄存器;Pattern_id表示地址列表信息的标识,每个需要进行待预取数据预取的软件或函数均对应一个Pattern_id。
需要说明的是,本发明实施例提供的预取指令的格式只是本发明实施例的一种可实现的方式,本发明对预取指令的格式并不做具体限制。
CPU的预取逻辑在收到预取指令后,根据地址列表信息的标识,获取地址列表信息,如上述预取指令中的Pattern_id,开始执行预取操作。
需要说明的是,本发明对地址列表信息的格式并不做具体的限定,只要地址列表信息中包括至少两个待预取数据在内存中的地址信息即可。
S103、CPU根据地址列表信息,将内存中的至少两个待预取数据预取到高速缓冲存储器中。
需要说明的是,CPU根据地址列表信息,将内存中的至少两个待预取数据预取到高速缓冲存储器中是通过CPU中的高速缓冲存储器的预取逻辑执行的,相当于现有技术中硬件预取的过程。
具体的,地址列表信息包括至少两个待预取数据在内存中的地址信息,如图5所示,步骤S103具体可以包括步骤S103a:
S103a、CPU根据地址列表信息中至少两个待预取数据在内存中的地址信息,将内存中的至少两个待预取数据预取到高速缓冲存储器中。
具体的,如图6所示,步骤S103a可以包括步骤103aa和步骤S103ab:
S103aa、CPU根据至少两个待预取数据的基地址和相对偏移地址,计算至少两个待预取数据在内存中的地址。
S103ab、CPU将至少两个待预取数据预取到高速缓冲存储器中。
对于至少两个待预取数据中的任意一个待预取数据,待预取数据在内存中的地址信息包括基地址和相对偏移地址,其中,基地址为待预取数据所属的数据结构的首地址,相对偏移地址为待预取数据在数据结构的地址相对于数据结构的首地址的偏移量。
对于不同的软件或函数,在执行过程中所要使用的待预取数据也不同,因此,地址列表信息的格式也可以不同。地址列表信息的格式还可以根据软件或函数在执行过程中所要使用的待预取数据的频率进行排布,例如经常使用的待预取数据放在地址列表信息的前半部分,不常使用的待预取数据放在地址列表信息的后半部分,本发明不做限制。
示例一,若一个函数要访问某一个数据结构D1的10个待预取数据,则地址列表信息的格式如下:
Address,offset1(field 1),offset2(field 2)……offset10(field 10)
其中,Address为D1的首地址,offset1为待预取数据1的相对偏移地址,offset2为待预取数据2的相对偏移地址,以此类推,一直到offset10。
在上述地址列表信息的格式中,10个待预取数据属于同一数据结构D1,将属于同一数据结构的待预取数据分为一类,每个待预取数据在内存中的地址信息包括基地址Address和相对偏移地址offsetx,其中x取1至10中的正整数。因此,每个待预取数据在内存中的地址信息都可以根据基地址Address和相对偏移地址offsetx计算出来,进而将内存中的至少两个待预取数据预取到高速缓冲存储器中。
示例二,若一个函数要访问不同数据结构的不同待预取数据,如D1的2个待预取数据,D2的3个待预取数据,D3的2个待预取数据,则地址列表信息的格式如下:
Address1,offset1(field 1),offset2(field 2)
Address2,offset1(field 1),offset2(field 2),offset3(field 3)
Address3,offset1(field 1),offset2(field 2)
其中,Address1为D1的首地址,offset1为D1中的待预取数据1的相对偏移地址,offset2为D1中的待预取数据2的相对偏移地址。
Address2为D2的首地址,offset1为D2中的待预取数据1的相对偏移地址,offset2为D2中的待预取数据2的相对偏移地址,offset3为D1中的待预取数据3的相对偏移地址。
Address3为D3的首地址,offset1为D3中的待预取数据1的相对偏移地址,offset2为D3中的待预取数据2的相对偏移地址。
示例三,若一个软件包括三个函数N1、N2和N3,每个函数要访问不同数据结构的不同待预取数据,如N1访问D1的2个待预取数据,N2访问D2的3个待预取数据,D3的2个待预取数据,N3访问D4的3个待预取数据,则地址列表信息的格式如下:
Pattern 1(Module X)
Address1(for N1),offset1(field 1),offset2(field 2)
Address2(for N2),offset1(field 1),offset2(field 2),offset3(field 3)
Address3(for N2),offset1(field 1),offset2(field 2)
Address4(for N3),offset1(field 1),offset2(field 2),offset3(field 3)
其中,Address1为D1的首地址,offset1为D1中的待预取数据1的相对偏移地址,offset2为D1中的待预取数据2的相对偏移地址。
Address2为D2的首地址,offset1为D2中的待预取数据1的相对偏移地址,offset2为D2中的待预取数据2的相对偏移地址,offset3为D2中的待预取数据3的相对偏移地址。
Address3为D3的首地址,offset1为D3中的待预取数据1的相对偏移地址,offset2为D3中的待预取数据2的相对偏移地址。
Address4为D4的首地址,offset1为D4中的待预取数据1的相对偏移地址,offset2为D4中的待预取数据2的相对偏移地址,offset3为D4中的待预取数据3的相对偏移地址。
因此,如图7所示,CPU中的高速缓冲存储器的预取逻辑能够根据上述地址列表信息包括的至少两个待预取数据的基地址和相对偏移地址,计算至少两个待预取数据在内存中的地址,将内存中的至少两个待预取数据预取到高速缓冲存储器中。这样占用CPU的运算单元的处理时间的仅有一个启动硬件预取逻辑的操作,即启动预取指令的操作。CPU性能会比现有技术针对每个离散待预取数据需要一条预取指令的方案有大幅度的提升,节省了处理器资源,降低软件开发的复杂度。
需要说明的是,本发明实施例提供的预取方法中,CPU执行一条预取指令能够预取到高速缓冲存储器的数据的个数并没有上限,可以是几万个,乃至几十万个。只要地址列表信息中包括这些数据在内存中的地址即可。CPU执行一条预取指令所预取到高速缓冲存储器中的数据的个数越多,节省的处理器资源也就越多。
需要补充的是,本发明实施例所提到的待预取数据的大小可以是小于等于一个高速缓存行的大小,这种数据在预取时只占用一条高速缓存行;待预取数据的大小也可以大于一个高速缓存行的大小,这种数据在预取时占用多条高速缓存行。
本发明实施例提供一种数据的预取方法,通过中央处理器CPU获取预取指令,其中,所述预取指令包括地址列表信息的标识,所述预取指令用于触发所述CPU将内存中的至少两个待预取数据预取到高速缓冲存储器中,所述至少两个待预取数据为离散数据;所述CPU根据所述地址列表信息的标识,获取所述地址列表信息;所述CPU根据所述地址列表信息,将内存中的至少两个待预取数据预取到高速缓冲存储器中。基于上述实施例的描述,CPU能够获取预取指令,根据预取指令查找到所述地址列表信息,并根据地址列表信息将内存中的至少两个待预取数据预取到高速缓冲存储器中。由于至少两个待预取数据为离散数据,与传统的一条预取指令只能根据该预取指令所指示的一个地址将数据预取到高速缓冲存储器中的方法相比,能够通过执行一条预取指令实现将多个离散的数据预取到高速缓冲存储器中,节省了处理器资源,降低软件开发的复杂度。
本发明实施例提供一种中央处理器CPU,如图8所示,CPU用于执行以上方法中的CPU所执行的步骤。CPU可以包括相应步骤所对应的模块。示例性的,可以包括获取模块10和预取模块11。
获取模块10,用于获取预取指令,其中,预取指令包括地址列表信息的标识,预取指令用于触发CPU将内存中的至少两个待预取数据预取到高速缓冲存储器中,至少两个待预取数据为离散数据。
获取模块10,还用于在获取模块10获取预取指令后,获取地址列表信息。
预取模块11,用于在获取模块10获取地址列表信息后,根据地址列表信息,将内存中的至少两个待预取数据预取到高速缓冲存储器中。
可选的,地址列表信息包括至少两个待预取数据在内存中的地址信息。
预取模块11,具体用于在获取模块10获取地址列表信息后,根据地址列表信息中至少两个待预取数据在内存中的地址信息,将内存中的至少两个待预取数据预取到高速缓冲存储器中。
可选的,对于至少两个待预取数据中的任意一个待预取数据,待预取数据在内存中的地址信息包括基地址和相对偏移地址,其中,基地址为待预取数据所属的数据结构的首地址,相对偏移地址为待预取数据在数据结构的地址相对于数据结构的首地址的偏移量。
可选的,如图9所示,预取模块11,具体包括计算子模块110和预取子模块111。
计算子模块110,用于在获取模块10获取地址列表信息后,根据至少两个待预取数据的基地址和相对偏移地址,计算至少两个待预取数据在内存中的地址。
预取子模块111,用于在计算子模块110计算至少两个待预取数据在内存中的地址后,将至少两个待预取数据预取到高速缓冲存储器中。
可以理解的是,本发明实施例的CPU可以对应于上述如图4至图7任意之一的实施例的预取方法中的CPU,并且本发明实施例的CPU中的各个单元的划分和/或功能等均是为了实现如图4至图7任意之一所示的方法流程,为了简洁,在此不再赘述。
可选的,作为本发明的另一个实施例,获取模块10的功能可以由接收器实现,预取模块11的功能可以由处理器实现。
本发明实施例提供一种CPU,包括获取模块和预取模块;获取模块,用于获取预取指令,其中,预取指令包括地址列表信息的标识,预取指令用于触发CPU将内存中的至少两个待预取数据预取到高速缓冲存储器中,至少两个待预取数据为离散数据;获取模块,还用于在获取模块获取预取指令后,获取地址列表信息;预取模块,用于在获取模块获取地址列表信息后,根据地址列表信息,将内存中的至少两个待预取数据预取到高速缓冲存储器中。基于上述实施例的描述,CPU能够获取预取指令,根据预取指令查找到地址列表信息,并根据地址列表信息将内存中的至少两个待预取数据预取到高速缓冲存储器中。由于至少两个待预取数据为离散数据,与传统的一条预取指令只能根据该预取指令所指示的一个地址将数据预取到高速缓冲存储器中的方法相比,能够通过执行一条预取指令实现将多个离散的数据预取到高速缓冲存储器中,节省了处理器资源,降低软件开发的复杂度。
本发明实施例还提供一种终端,如图10所示,该终端包括:存储器20、处理器21、通信接口22和系统总线23。
存储器20、处理器21和通信接口22通过系统总线23连接,存储器20用于存储一些计算机指令,处理器21用于执行计算机指令,以使终端执行如图4至图7任意之一的预取方法。具体的预取方法可参见上述如图4至图7任意之一所示的实施例中的相关描述,此处不再赘述。
处理器21可以为中央处理器(central processing unit,CPU)。处理器21还可以为其他通用处理器、数字信号处理器(digital signal processing,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
如图11所示,处理器21中包括高速缓冲存储器Cache、EU(Execution Unit,运算单元)和LSU(Load Store Unit,装载存储单元),高速缓冲存储器Cache中包括用于将内存中的至少两个待预取数据预取到高速缓冲存储器中的PPL(pattern prefetch logic,根据格式的预取逻辑)。
处理器21可以为专用处理器。进一步地,该专用处理器还可以包括具有终端其他专用处理功能的芯片。
存储器20可以包括易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储器20也可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM),快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);存储器20还可以包括上述种类的存储器的组合。
系统总线23可以包括数据总线、电源总线、控制总线和信号状态总线等。本实施例中为了清楚说明,在图10和图11中将各种总线都示意为系统总线23。
通信接口22可以包括接收器和发送器。并且在终端的具体实现中,接收器和发送器具体可以是终端上的输入输出适配器(Input/Output Adapters)。处理器21通过输入输出适配器与其他设备进行数据的收发。
可以理解的是,本发明实施例的处理器21可以对应于上述如图8或图9的实施例中的CPU,并且本发明实施例的处理器21中的各个单元的划分和/或功能等均是为了实现如图8或图9任意之一所示的功能,为了简洁,在此不再赘述。
在具体实现过程中,上述如图4至图7任意之一所示的方法流程中的各步骤均可以通过硬件执行软件形式的计算机执行指令实现。为避免重复,此处不再赘述。
本发明实施例提供一种终端。基于上述实施例的描述,由于终端能够根据预取指令,将内存中的至少两个待预取数据预取到高速缓冲存储器中,至少两个待预取数据为离散数据,与传统的一条预取指令只能根据该预取指令所指示的一个地址将数据预取到高速缓冲存储器中的方法相比,能够通过执行一条预取指令实现将多个离散数据预取到高速缓冲存储器中,节省了处理器资源,降低软件开发的复杂度。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (9)
1.一种数据的预取方法,其特征在于,包括:
中央处理器CPU获取预取指令,其中,所述预取指令包括地址列表信息的标识,所述预取指令用于触发所述CPU将内存中的至少两个待预取数据预取到高速缓冲存储器中,所述至少两个待预取数据为离散数据;
所述CPU根据所述地址列表信息的标识,获取所述地址列表信息,所述地址列表信息预先配置在所述CPU中;
所述CPU根据所述地址列表信息,将内存中的至少两个待预取数据预取到高速缓冲存储器中。
2.根据权利要求1所述的预取方法,其特征在于,所述地址列表信息包括所述至少两个待预取数据在内存中的地址信息;
所述CPU根据所述地址列表信息,将内存中的至少两个待预取数据预取到高速缓冲存储器中,具体包括:
所述CPU根据所述地址列表信息中所述至少两个待预取数据在内存中的地址信息,将内存中的所述至少两个待预取数据预取到高速缓冲存储器中。
3.根据权利要求1或2所述的预取方法,其特征在于,对于所述至少两个待预取数据中的任意一个待预取数据,所述待预取数据在内存中的地址信息包括基地址和相对偏移地址,其中,所述基地址为所述待预取数据所属的数据结构的首地址,所述相对偏移地址为所述待预取数据在所述数据结构的地址相对于所述数据结构的首地址的偏移量。
4.根据权利要求3所述的预取方法,其特征在于,所述CPU根据所述地址列表信息中所述至少两个待预取数据在内存中的地址信息,将内存中的所述至少两个待预取数据预取到高速缓冲存储器中,具体包括:
所述CPU根据所述至少两个待预取数据的所述基地址和所述相对偏移地址,计算所述至少两个待预取数据在内存中的地址;
所述CPU将所述至少两个待预取数据预取到高速缓冲存储器中。
5.一种中央处理器CPU,其特征在于,包括获取模块和预取模块;
所述获取模块,用于获取预取指令,其中,所述预取指令包括地址列表信息的标识,所述预取指令用于触发所述CPU将内存中的至少两个待预取数据预取到高速缓冲存储器中,所述至少两个待预取数据为离散数据;
所述获取模块,还用于在所述获取模块获取预取指令后,获取所述地址列表信息,所述地址列表信息预先配置在所述CPU中;
所述预取模块,用于在所述获取模块获取所述地址列表信息后,根据所述地址列表信息,将内存中的至少两个待预取数据预取到高速缓冲存储器中。
6.根据权利要求5所述的CPU,其特征在于,所述地址列表信息包括所述至少两个待预取数据在内存中的地址信息;
所述预取模块,具体用于在所述获取模块获取所述地址列表信息后,根据所述地址列表信息中所述至少两个待预取数据在内存中的地址信息,将内存中的所述至少两个待预取数据预取到高速缓冲存储器中。
7.根据权利要求5或6所述的CPU,其特征在于,对于所述至少两个待预取数据中的任意一个待预取数据,所述待预取数据在内存中的地址信息包括基地址和相对偏移地址,其中,所述基地址为所述待预取数据所属的数据结构的首地址,所述相对偏移地址为所述待预取数据在所述数据结构的地址相对于所述数据结构的首地址的偏移量。
8.根据权利要求7所述的CPU,其特征在于,
所述预取模块,具体包括计算子模块和预取子模块;
所述计算子模块,用于在所述获取模块获取所述地址列表信息后,根据所述至少两个待预取数据的所述基地址和所述相对偏移地址,计算所述至少两个待预取数据在内存中的地址;
所述预取子模块,用于在所述计算子模块计算所述至少两个待预取数据在内存中的地址后,将所述至少两个待预取数据预取到高速缓冲存储器中。
9.一种具有数据预取技术的终端,其特征在于,包括具有如权利要求5-8中任意一项所述的中央处理器CPU。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511027094.2A CN105426322B (zh) | 2015-12-31 | 2015-12-31 | 一种数据的预取方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511027094.2A CN105426322B (zh) | 2015-12-31 | 2015-12-31 | 一种数据的预取方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105426322A CN105426322A (zh) | 2016-03-23 |
CN105426322B true CN105426322B (zh) | 2019-05-28 |
Family
ID=55504538
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201511027094.2A Active CN105426322B (zh) | 2015-12-31 | 2015-12-31 | 一种数据的预取方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105426322B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105867847B (zh) * | 2016-03-28 | 2018-11-30 | 龙芯中科技术有限公司 | 访存控制方法、装置及系统 |
CN108073525B (zh) * | 2016-11-08 | 2021-10-19 | 华为技术有限公司 | 预取数据的方法、装置和系统 |
CN110765034B (zh) * | 2018-07-27 | 2022-06-14 | 华为技术有限公司 | 一种数据预取方法及终端设备 |
CN111241009B (zh) * | 2019-12-31 | 2023-05-16 | 西安翔腾微电子科技有限公司 | 一种数据反馈方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101946242A (zh) * | 2008-02-14 | 2011-01-12 | 国际商业机器公司 | 在间接数据地址列表不连续的输入/输出处理系统中提供间接数据寻址 |
CN102171649A (zh) * | 2008-12-22 | 2011-08-31 | 英特尔公司 | 用于用单个命令对多个不连续地址范围的传送进行排队的方法和系统 |
CN103608768A (zh) * | 2013-04-01 | 2014-02-26 | 华为技术有限公司 | 一种数据预取方法、相关装置及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107402891B (zh) * | 2012-12-25 | 2020-12-22 | 华为技术有限公司 | 确定共享虚拟内存页面管理模式的方法和相关设备 |
-
2015
- 2015-12-31 CN CN201511027094.2A patent/CN105426322B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101946242A (zh) * | 2008-02-14 | 2011-01-12 | 国际商业机器公司 | 在间接数据地址列表不连续的输入/输出处理系统中提供间接数据寻址 |
CN102171649A (zh) * | 2008-12-22 | 2011-08-31 | 英特尔公司 | 用于用单个命令对多个不连续地址范围的传送进行排队的方法和系统 |
CN103608768A (zh) * | 2013-04-01 | 2014-02-26 | 华为技术有限公司 | 一种数据预取方法、相关装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN105426322A (zh) | 2016-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104657284B (zh) | 存储设备的扩展利用区域 | |
CN110471861B (zh) | 一种闪存设备中的数据存储方法及闪存设备 | |
CN105426322B (zh) | 一种数据的预取方法及装置 | |
CN106354656B (zh) | 用于存储管理的方法和系统 | |
KR101419615B1 (ko) | 리드 및 라이트 인식 캐시 | |
KR20210147976A (ko) | 확장 가능하고 일관성 있는 메모리 장치를 위한 시스템 및 방법 | |
CN107729159A (zh) | 一种共享内存的地址映射方法及装置 | |
CN105677580A (zh) | 访问缓存的方法和装置 | |
CN111143242B (zh) | 一种缓存预取方法和装置 | |
EP2646921A2 (en) | Efficient cache management | |
CN108496161A (zh) | 数据缓存装置及控制方法、数据处理芯片、数据处理系统 | |
CN107111452A (zh) | 应用于计算机系统的数据迁移方法和装置、计算机系统 | |
CN109800558B (zh) | 密码服务板卡以及密码服务装置 | |
CN111324427A (zh) | 一种基于dsp的任务调度方法及装置 | |
CN109992203A (zh) | 能够进行细粒度读取和/或写入操作的海量存储装置 | |
CN103513956B (zh) | 一种处理器处理数据的方法以及装置 | |
CN108829525A (zh) | 可信平台遥测机制 | |
CN109426623A (zh) | 一种读取数据的方法及装置 | |
CN109947667B (zh) | 数据访问预测方法和装置 | |
CN109840048A (zh) | 存储命令处理方法及其存储设备 | |
CN102117245B (zh) | 嵌入式设备及其系统可执行文件分割加载和启动方法 | |
CN104252423A (zh) | 基于多内核处理器的一致性处理方法和装置 | |
CN104216984B (zh) | 数据查询方法 | |
CN116521608A (zh) | 数据迁移方法及计算设备 | |
CN106462506A (zh) | 呼入数据的受控缓存注入 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |