数据预取方法和内存控制器与流程

文档序号:16068108发布日期:2018-11-24 12:52阅读:250来源:国知局

本发明涉及计算机技术领域的处理器设计,尤其涉及一种数据预取方法和内存控制器。

背景技术

现代处理器普遍采用多级高速缓存结构,以弥补处理器与主储存器之间的速度差距。为了进一步提高处理器的执行效率和数据吞吐率,通常采用数据预取技术。该技术将处理器随后要处理的数据提前放置在高速缓存中,以减少临时访问数据时,需要的较长延迟。

目前市场上大多数的处理器中,数据预取通常采用顺序预取和跨步预取技术。顺序预取是指一个接一个地连续读取数据的预取方法,例如读取:地址1的数据、地址2的数据、地址3的数据….。跨步预取是指按照一定的规律读取数据的预取方法,例如读取:地址1的数据、地址3的数据、地址5的数据…。顺序预取和跨步预取多应用于提升数据局部性较好或者访存模式比较规律的应用程序的访存性能。数据的空间局部性较好,则数据在存储器中的存放方式是连续的或者是有规律的。因此,对于这些数据集,采用顺序预取和跨步预取的方式可以达到很好的预取效率和预取精度。

但是,对于基于链式数据结构(linkeddatastructure,简称lds)(例如指针,链表,栈,图)等的不规则数据集,物理存储上表现为不连续或者根本没有规律性。这种情况下,顺序预取和跨步预取就无法应对这种非规则的访存模式,因此导致传统的预取方法对链式数据结构的预取效率和准确率较低、预取效果往往很差。



技术实现要素:

本发明提供一种数据预取方法和内存控制器,缩短了链式数据预取访问时延,提高了链式数据预取的效率和准确率。

本发明提供的数据预取方法,包括:

接收高速缓冲存储器发送的第一访存请求,所述第一访存请求包括加载地址;所述第一访存请求指示向所述高速缓冲存储器返回所述加载地址中存储的数据;

判断所述第一访存请求是否还包括链式数据预取标识,所述链式数据预取标识指示了所述加载地址中存储的数据为指针,所述指针指向链式数据;

若所述第一访存请求包括所述链式数据预取标识,则根据所述加载地址获取所述指针,并将所述指针返回至所述高速缓冲存储器;

根据所述指针预取所述链式数据,并将所述链式数据存储在预取结果缓冲器中。

本发明提供的内存控制器,包括:

接收模块,用于接收高速缓冲存储器发送的第一访存请求,所述第一访存请求包括加载地址;所述第一访存请求指示向所述高速缓冲存储器返回所述加载地址中存储的数据;

处理模块,用于判断所述第一访存请求是否还包括链式数据预取标识,所述链式数据预取标识指示了所述加载地址中存储的数据为指针,所述指针指向链式数据;若所述第一访存请求包括所述链式数据预取标识,则根据所述加载地址获取所述指针;

发送模块,用于将所述指针返回至所述高速缓冲存储器;

预取模块,用于根据所述指针预取所述链式数据,并将所述链式数据存储在预取结果缓冲器中。

本发明提供了一种数据预取方法和内存控制器,通过cache发送给内存控制器的第一访存请求中携带的链式数据预取标识,内存控制器可以获知该第一访存请求基于链式数据结构,从而内存控制器可以完成链式数据的预取操作。本发明提供的数据预取方法,提高了链式数据预取的效率和准确率,缩短了链式数据预取访问时延。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例适用的存储器体系结构示意图;

图2为本发明实施例一提供的数据预取方法的流程图;

图3为本发明实施例一提供的获取地址的方法流程图;

图4为本发明实施例一提供的预取链式数据的方法流程图;

图5为本发明实施例二提供的数据预取方法的流程图;

图6为本发明实施例三提供的数据预取方法的流程图;

图7为本发明实施例一提供的内存控制器的结构示意图;

图8为本发明实施例一提供的内存控制器在执行访存请求时的流程指示图;

图9为本发明实施例一提供的vtp单元结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

现代处理器普遍采用多级高速缓存结构。图1为本发明实施例适用的存储器体系结构示意图。如图1所示,存储器体系结构可以包括:高速缓冲存储器(cachememory,简称cache)、内存15和内存控制器(memorycontroller,简称mc)14。cache可以包括一级缓存(l1cache)12和二级缓存(l2cache)13。在本发明实施例中,内存控制器14还可以包括预取器16。其中,内存控制器14是计算机系统内部控制内存、并且使内存与中央处理器(centralprocessingunit,简称cpu)之间交换数据的重要器件。预取器16可以实现数据预取功能,对于cpu将来要访问的数据,可以提前从内存中取出。需要说明,本发明对于预取器16的实现方式不做限定,可以通过软件程序实现,也可以通过硬件实现,或者通过软件程序结合硬件实现,只要实现数据预取功能即可。而且,预取器16可以与现有的内存控制器结构相结合,也就是说,预取器可以不是独立的软件程序或者硬件,可以与现有的内存控制器结构相结合共同实现数据预取功能。处理器核11取数据的流程如下:首先在l1cache查找。如果l1cache命中,则直接取出。如果l1cache缺失,则向l2cache查找。如果l2cache命中,则直接取出。如果l2cache缺失,则通过mc14向更低存储器层次的内存查找。通过引入存储器层次和数据预取技术,可以将处理器核要用到的数据提前放置在cache中,减少数据访问时延。

本发明提供的数据预取方法,主要应用于基于链式数据结构的数据预取,旨在解决目前现有技术中对于lds等不规则数据进行预取时预取效率和准确率低的技术问题。通过cache发送给mc的访存请求中携带的链式数据预取标识,指示了该访存请求返回一个指针,mc可以根据该指针预取该指针指向的链式数据,提升了链式数据预取的效率和准确率。

需要说明,本发明提供的数据预取方法,仅作为内存控制器实现数据预取的实现部分。而对于处理器实现数据预取的方法,可以参考本申请人申请的另一篇发明名称为《数据预取的实现方法和处理器》的发明专利申请。

需要说明,本发明实施例中的“指针”与“地址”的含义相同,“指针指向的链式数据”与“地址中存储的链式数据”含义相同。

本发明的说明书、权利要求书、附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

图2为本发明实施例一提供的数据预取方法的流程图。本实施例提供的数据预取方法,执行主体可以为内存控制器。如图2所示,本实施例提供的数据预取方法,应用于基于链式数据结构的数据预取,可以包括:

s101、接收高速缓冲存储器发送的第一访存请求。

其中,第一访存请求可以包括加载地址。第一访存请求指示向高速缓冲存储器返回加载地址中存储的数据。

具体的,内存控制器接收到cache发送的第一访存请求,说明cache缺失。内存控制器需要根据第一访存请求,向cache返回第一访存请求包括的加载地址中存储的数据。其中,加载地址中存储的数据,可能是一个指针,该指针指向了一个链式数据(或者理解为,加载地址中存储的数据为一个地址,该地址中存储一个链式数据),也可能是普通数据结构的数据,例如单字节数据、双字节数据、字符型数据等。

s102、判断第一访存请求是否还包括链式数据预取标识。

其中,链式数据预取标识指示了加载地址中存储的数据为指针。

若第一访存请求包括链式数据预取标识,则执行s103。

具体的,如果第一访存请求包括链式数据预取标识,说明加载地址中存储的是一个指针,第一访存请求用于返回一个指针。而指针的值指向存储在另一个存储位置的值,所以,第一访存请求基于链式数据结构,该指针指向链式数据。因此,内存控制器可以进一步根据该指针进行链式数据的预取。

需要说明,若第一访存请求包括链式数据预取标识,则该链式数据预取标识可以是处理器核对访存指令译码后生成的,该访存指令可以优选参考本申请人申请的另一篇发明名称为《数据预取方法、处理器和设备》的发明专利申请中提出的一种访存指令。

需要说明,如果第一访存请求不包括链式数据预取标识,并不能说明加载地址中存储的数据就不是指针。此时,加载地址中存储的数据可能是指针,也可能是普通数据结构的数据。内存控制器需要对加载地址中存储的数据进一步分析,才可能获知加载地址中存储的数据的数据类型。

s103、根据加载地址获取指针。

其中,根据加载地址获取指针的实现方式,可以采用现有的任意一种内存控制器执行访存请求的方法。本步骤中,由于第一访存请求中包括链式数据预取标识,因此内存控制器可以获知加载地址中存储的是指针。内存控制器可以根据加载地址获取加载地址中存储的指针。

可选的,作为一种实现方式,根据加载地址获取指针,可以包括:

将第一访存请求插入到请求队列中,第一访存请求包括加载地址和链式数据预取标识。

调度请求队列中的第一访存请求,向动态随机存取存储器(dynamicrandomaccessmemory,dram)发送访存请求。

接收dram返回的指针。

s104、将指针返回至高速缓冲存储器。

s105、根据指针预取链式数据,并将链式数据存储在预取结果缓冲器中。

其中,预取结果缓冲器为内存控制器中的一个存储部件,用于缓存预取的数据以及内存控制器中需要缓存的其他数据。

具体的,由于第一访存请求基于链式数据结构,第一访存请求返回了一个指针。因此,内存控制器可以根据该指针对指针指向的链式数据进行预取操作,将链式数据提前从内存中预取到内存控制器,存储在内存控制器中的预取结果缓冲器中。这样,当处理器需要获取该链式数据时,可以直接从预取结果缓冲器中获得该链式数据。节省了当处理器需要获取链式数据时才进行内存读取的时间,降低了链式数据内存访问的延迟,提高了链式数据预取的效率和准确率,进而提升了处理器读取数据的效率。

可见,本实施例提供的数据预取方法,通过cache发送给内存控制器的第一访存请求中携带的链式数据预取标识,指示了第一访存请求基于链式数据结构,用于返回一个指针。内存控制器根据第一访存请求向cache返回指针后,可以根据该指针预取指针指向的链式数据。当处理器后续需要获取该链式数据时,可以直接获取,无需再进行内存读取操作。从而缩短了链式数据预取访问时延,提高了链式数据预取的效率和准确率,进而提升了处理器效率。

可选的,作为s103的一种实施方式,图3为本发明实施例一提供的获取指针的方法流程图。如图3所示,根据加载地址获取指针,可以包括:

s1031、判断预取结果缓冲器中是否命中加载地址。

在内存控制器执行第一访存请求时,将首先判断结果缓冲器中是否命中第一访存请求包括的加载地址。若预取结果缓冲器中没有命中加载地址,则执行s1032~s1033。若预取结果缓冲器中命中加载地址,则执行s1034。

s1032、根据加载地址在内存中进行查找,获得加载地址中存储的指针。

s1033、将指针存储在数据响应存储器中。

具体的,如果预取结果缓冲器中没有命中加载地址,则需要到内存中查找。在获取到内存返回的加载地址中存储的指针后,将该指针存储在数据响应存储器中,以便下一步将该指针返回给cache。

其中,数据响应存储器为内存控制器中的一个存储部件,用于缓存内存返回的、且需要返回给cache的数据。

s1034、根据加载地址在预取结果缓冲器中进行查找,获得加载地址中存储的指针。

具体的,如果预取结果缓冲器中命中加载地址,则可以直接在预取结果缓冲器中获得加载地址中存储的指针。

可选的,作为s105的一种实施方式,图4为本发明实施例一提供的预取链式数据的方法流程图。内存控制器还包括:虚拟地址到物理地址转换(virtualaddresstophysicaladdress,简称vtp)单元和地址存储器,vtp单元与地址存储器连接。如图4所示,根据指针预取链式数据,可以包括:

s1051、将指针存储在地址寄存器中。

其中,地址寄存器为内存控制器中的一个存储部件,用于在链式数据预取过程中缓存地址。

s1052、通过vtp单元对指针进行虚拟地址到物理地址的转换,获得指针对应的物理地址,vtp单元与地址寄存器连接。

其中,vtp单元可以通过硬件实现,完成虚拟地址到物理地址的转换。本实施例对于vtp单元的实现方式不做限定。

s1053、根据物理地址在内存中进行查找,获得指针指向的链式数据。

本实施例提供了一种数据预取方法,包括:接收高速缓冲存储器发送的第一访存请求,判断第一访存请求是否还包括链式数据预取标识,若第一访存请求包括链式数据预取标识,则根据加载地址获取指针,将指针返回至高速缓冲存储器,根据指针预取链式数据,并将链式数据存储在预取结果缓冲器中。本实施例提供的数据预取方法,通过cache发送给内存控制器的第一访存请求中携带的链式数据预取标识,内存控制器可以获知该第一访存请求基于链式数据结构,从而内存控制器可以完成链式数据的预取操作。提高了链式数据预取的效率和准确率,缩短了链式数据预取访问时延,进而提升了处理器效率。

图5为本发明实施例二提供的数据预取方法的流程图。本实施例在上述实施例一的基础上,提供了数据预取方法的另一种实现方式,尤其提供了如何返回链式数据的方法。如图5所示,本实施例提供的数据预取方法,在s105之后,还可以包括:

s201、接收高速缓冲存储器发送的第二访存请求。

其中,第二访存请求包括指针。第二访存请求指示向高速缓冲存储器返回指针指向的链式数据。

s202、根据指针在预取结果缓冲器中进行查找,获得链式数据。

s203、将链式数据返回至高速缓冲存储器。

具体的,在内存控制器对指针指向的链式数据完成预取操作后,接收cache发送的第二访存请求。内存控制器可以根据第二访存请求直接在预取结果缓冲器中获得指针指向的链式数据,并将该链式数据返回给cache。缩短了链式数据预取访问时延,提高了链式数据预取的效率和准确率。

其中,第二访存请求与不包括链式数据预取标识的第一访存请求的区别在于,对于第二访存请求中包含的指针,预取结果缓冲器中一定命中。而对于不包括链式数据预取标识的第一访存请求,其包含的加载地址,预取结果缓冲器中可能命中,也可能不命中。

本实施例提供了一种数据预取方法,在内存控制器完成链式数据的预取操作之后,通过接收cache发送的第二访存请求,将已经存储在预取结果缓冲器中的链式数据返回至cache。缩短了链式数据预取访问时延,提升了处理器效率。

图6为本发明实施例三提供的数据预取方法的流程图。本实施例在上述实施例一和实施例二的基础上,提供了数据预取方法的另一种实现方式,尤其提供了当第一访存请求不包括链式数据预取标识时的数据预取方法。如图6所示,本实施例提供的数据预取方法,若s102中确定第一访存请求不包括链式数据预取标识,则数据预取方法还可以包括:

s301、判断预取结果缓冲器中是否命中加载地址。

若预取结果缓冲器中没有命中加载地址,则执行s302~s304。若预取结果缓冲器中命中加载地址,则执行s305~s306。

s302、根据加载地址在内存中进行查找,获得加载地址中存储的数据。

s303、将数据存储在数据响应存储器中。

s304、将数据返回至高速缓冲存储器。

具体的,如果预取结果缓冲器中没有命中加载地址,则需要到内存中查找。在获取到内存返回的加载地址中存储的数据后,将该数据存储在数据响应存储器中,并将该数据返回给cache。

s305、根据加载地址在预取结果缓冲器中进行查找,获得加载地址中存储的数据。

s306、将数据返回至高速缓冲存储器。

具体的,如果预取结果缓冲器中命中加载地址,则可以直接在预取结果缓冲器中获得加载地址中存储的数据,并将该数据返回给cache。

需要说明,如果第一访存请求不包括链式数据预取标识,则该第一访存请求可以为现有的访存请求,内存控制器对于该第一访存请求的处理方法,可以采用现有的任意一种内存控制器执行现有的访存请求的方法。

图7为本发明实施例一提供的内存控制器的结构示意图,图8为本发明实施例一提供的内存控制器在执行访存请求时的流程指示图。本实施例提供的内存控制器,可以执行图2~图6所示实施例提供的数据预取方法。如图7~图8所示,本实施例提供的内存控制器,应用于基于链式数据结构的数据预取,可以包括:

接收模块21,用于接收高速缓冲存储器发送的第一访存请求,第一访存请求包括加载地址。第一访存请求指示向高速缓冲存储器返回加载地址中存储的数据。

处理模块22,用于判断第一访存请求是否还包括链式数据预取标识,链式数据预取标识指示了加载地址中存储的数据为指针,指针指向链式数据。若第一访存请求包括链式数据预取标识,则根据加载地址获取指针。

发送模块23,用于将指针返回至高速缓冲存储器。

预取模块24,用于根据指针预取链式数据,并将链式数据存储在预取结果缓冲器25中。

其中,预取结果缓冲器为内存控制器中的一个存储部件,用于缓存预取的数据以及内存控制器中需要缓存的其他数据。本实施例对于预取结果缓冲器的具体实现方式不做限定,例如可以为易挥发性随机存取存储器(ramdomaccessmemory,ram)等。

其中,本实施例对于接收模块21、处理模块22、发送模块23、预取模块24的具体实现方式不做特别限定。可选的,接收模块21、处理模块22、发送模块23、预取模块24可以通过软件程序与硬件相结合的方式实现,硬件可以包括存储部件、电路、芯片等。

其中,作为一种实现方式,本实施例中的预取模块24和预取结果缓冲器25可以组成图1中的预取器16,实现数据预取功能。

可选的,处理模块22具体用于:

判断预取结果缓冲器25中是否命中加载地址。

若预取结果缓冲器25中没有命中加载地址,则根据加载地址在内存中进行查找,获得加载地址中存储的指针。

将指针存储在数据响应存储器26中。

其中,数据响应存储器为内存控制器中的一个存储部件,用于缓存内存返回的、且需要返回给cache的数据。本实施例对于数据响应存储器的具体实现方式不做限定,例如可以为ram。

可选的,处理模块22还用于:

若预取结果缓冲器25中命中加载地址,则根据加载地址在预取结果缓冲器25中进行查找,获得加载地址中存储的指针。

可选的,预取模块24可以包括:存储单元241、vtp单元243和地址寄存器242,vtp单元243与地址寄存器242连接。

存储单元241,用于将指针存储在地址寄存器242中。

vtp单元243,用于对指针进行虚拟地址到物理地址的转换,获得指针对应的物理地址。

处理模块22还用于,根据物理地址在内存中进行查找,获得指针指向的链式数据。

存储单元241还用于,将链式数据存储在预取结果缓冲器25中。

其中,地址寄存器为内存控制器中的一个存储部件,用于在链式数据预取过程中缓存地址。本实施例对于地址寄存器的具体实现方式不做限定,例如可以为ram。

其中,vtp单元用于实现虚拟地址到物理地址的转换。vtp单元可以通过硬件实现。可选的,作为一种实现方式,图9为本发明实施例一提供的vtp单元结构示意图。图9示出了具有多个vtp表项的vtp单元。每个vtp表项中的f7-01域(v)表示该项是否有效。f7-02指示了地址空间标识符(addressspaceidentifier,asid)域,对进程的地址空间进行区分。f7-03是虚拟地址域。f7-04是物理地址域。f7-05为其他数据域组成的位,保持和处理器核中的虚实地址转换装置(tlb)中基本相同。

vtp单元的初始化时,可以设置所有项的有效位为0(v=0)。进行虚实地址转换时,在vtp表项有效的情况下(v=1),通过将访存请求中的asid、虚拟地址和vtp表项中的asid、虚拟地址域进行对比,以找出访存请求的虚拟地址对应的物理地址,然后以该物理地址进行后续的访存操作。

如果vtp表项无效(v=0)或者没有在vtp中找到对应的vtp表项时,则发生vtp表项的缺失。如果cpu侧的tlb结构和vtp单元保持独立,在该情况下,可以利用硬件结构自动对vtp表项进行重填,也可以利用操作系统进行vtp表项的重填操作。如果cpu侧的tlb结构和vtp装置保持同步,则可以放弃此处预取请求,在进行cpu侧tlb充填时,同时填充缺失的vtp表项。在cpu侧tlb进行刷新时,同时刷新vtp表项,也设置所有项为无效(v=0)。

可选的,接收模块21还用于:

接收高速缓冲存储器发送的第二访存请求,第二访存请求包括指针。第二访存请求指示向高速缓冲存储器返回指针指向的链式数据。

处理模块22还用于,根据指针在预取结果缓冲器25中进行查找,获得链式数据。

发送模块23还用于,将链式数据返回至高速缓冲存储器。

可选的,处理模块22还用于:

若第一访存请求不包括链式数据预取标识,则判断预取结果缓冲器25中是否命中加载地址。

若预取结果缓冲器25中没有命中加载地址,则根据加载地址在内存中进行查找,获得加载地址中存储的数据。

将数据存储在数据响应存储器26中。

发送模块23还用于,将数据返回至高速缓冲存储器。

本实施例提供的内存控制器,用于执行图2~图6所示方法实施例提供的数据预取方法,其技术原理和技术效果类似,此处不再赘述。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1