基于数据局部性的访存方法
技术领域
本发明涉及计算机、电子产品领域,尤其涉及一种基于数据局部性的访存方法。
背景技术
高速缓存(Cache)是位于CPU与内存之间的临时存储器,它的容量比内存小,但存取速度比内存快得多。由于CPU的速度比内存速度快很多,高速缓存作为CPU与内存之间的桥梁,CPU将最有可能用到的数据和指令存放在高速缓存中,当CPU需要的指令和数据位于高速缓存中时,CPU就能快速从中读取,从而大大提高CPU的实际性能。高速缓存在一定程度上解决了CPU与内存之间的速度不匹配问题,其是基于程序的局部性原理来工作的。程序的局部性原理是指,当CPU访问内存时,无论是存取指令还是存取数据,其所访问的内存都趋于集中在一个较小的连续区域中。局部性包括:
时间局部性(Temporal Locality):如果内存中的某一个信息项正在被访问,那么在近期它很可能还会被再次访问。
空间局部性(Spatial Locality):在最近的将来将用到的信息很可能与现在正在使用的信息在空间地址(附近的内存区域)上是临近的。
顺序局部性(Order Locality):在典型程序中,除转移类指令外,大部分指令是顺序进行的。顺序执行和非顺序执行的比例大致是5:1。
基于程序访问的局部性原理,当CPU需要的指令或数据位于高速缓存中的概率越高,CPU访问内存的速度就越接近于访问缓存的速度,CPU的实际性能就越高。将CPU需要的指令或数据位于高速缓存中的概率定义为高速缓存的命中率,提高CPU性能的关键就是提高高速缓存的命中率。
虽然程序中的大部分指令和数据符合程序的局部性特点,能充分利用高速缓存,从而大大提高CPU的性能,然而,程序中也有不少指令和数据的使用不符合程序的局部性原理,甚至由于这种类型的指令和数据的存在破坏了原来局部性较好的部分程序数据和指令,以致大大降低了性能,而且这种类型的数据在以数据为驱动的计算领域,如生物计算、大数据计算等领域特别明显。这种类型的数据特点是数据量巨大、访问内存空间无规律,访问越来越不符合时间局部性原理,频繁的缓存替换操作对高速缓存性能造成巨大影响,在多核CPU中,这种影响更明显。在多核CPU中,各个CPU核一般共享LLC(last levelcache),CPU核竞争访问LLC,这种频繁的缓存替换操作比单核环境下更明显。产生以上现象的原因是,为了使用高速缓存,需要在缓存与内存之间建立映射关系,其映射的总体结果是,数据量越大,占用的缓存越多。以A、B两种数据类型为例,A类型数据具有较强的访问局部性,数据量较小,B类型数据具有较弱的访问局部性,且数据量很大,意味着访问局部性很弱的数据占据了大部分的缓存,以致A类型数据很有可能因为访问B类型的数据替换掉,下次访问访问A类型数据时需要从内存中加载,缓存命中率大大降低,缓存与主存间的访问时间增加,降低了缓存效率,从而降低了系统的性能。
发明内容
本发明所要解决的技术问题是,提出一种基于数据局部性的访存方法,以提高缓存命中率,提升CPU的访存性能。本发明是这样实现的:
一种基于数据局部性的访存方法,缓存包括若干缓存组,每一缓存组包括若干缓存块,各缓存块具有各自的局部性强度等级,且每一缓存组至少包括两种局部性强度等级的缓存块;待访存的数据同样具有局部性强度等级,且其局部性强度等级数量与缓存块的局部性强度等级数量相同;局部性强度等级越高的数据局部性越强,局部性强度等级越低的数据局部性越弱;各缓存块存储的数据的局部性强度等级不得低于其自身的局部性强度等级;所述访存方法包括如下步骤:
CPU核向缓存控制器发送要访问的主存地址;
缓存控制器查询缓存中是否有所述主存地址的数据,如果有,则将所述数据发送给所述CPU核,否则,将主存中所述主存地址的数据映射到缓存,再通过所述缓存发送给所述CPU核。
进一步地,各缓存块的局部性强度等级与其存储的数据的局部性强度等级相同。
进一步地,所述主存地址附有局部性强度等级标记;所述局部性强度等级标记用于标识所述主存地址的数据的局部性强度等级;
缓存控制器查询缓存中是否有所述主存地址的数据的步骤包括:
定位与所述主存地址组号相同的缓存组,并定位该缓存组中局部性强度等级不低于所述主存地址的数据的局部性强度等级的缓存块;
查询局部性强度等级不低于所述主存地址的数据的局部性强度等级的各缓存块中是否有区号及块号分别与所述主存地址的区号及块号相同的数据;如果有,则缓存中有所述主存地址的数据,否则,则缓存中没有所述主存地址的数据。
进一步地,所述主存地址为物理地址或虚拟地址。
与现有技术相比,本发明通过对每一缓存块设定局部性强度等级,且设定各缓存块存储的数据的局部性强度等级不得低于其自身的局部性强度等级,限制了数据映射的自由性,避免了在缓存填充和替换过程中较高局部性强度等级的缓存块中的数据被较低局部性强度等级的数据替换,从而提高缓存命中率,提升CPU的访存性能。
附图说明
图1:本发明基于数据局部性的访存方法流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。
根据局部性原理,如果能够降低访问局部性较弱的数据对访问局部性较强的数据的影响,就可以提高缓存的命中率,从而降低缓存-主存的平均访问时间,提升CPU的访存性能。本发明基于数据局部性的访存方法正是基于该基本原理而提出的。
图1所示为本发明基于数据局部性的访存方法流程示意图,在执行本发明的访存方法前,需要先做相应预处理,以适应本发明提出的方法。预处理主要包括以下两个方面:
一、对于数据(程序、指令也被认为是一种数据)而言,数据根据其局部性强弱应具有相应的局部性强度等级,用以标识该数据的局部性强弱。数据的局部性强度等级可由系统或用户申请决定,也就是说,用户在编写和编译数据或程序时,可以判断数据的局部性强弱,并据此设定相应数据的局部性强度等级。局部性强度等级越高的数据局部性越强,局部性强度等级越低的数据局部性越弱。在设定数据的局部性强度等级时,可在该数据前添加一个局部性强度等级标记,以标记该数据的局部性强度等级,数据的局部性强度等级就可作为其局部性强度等级标记。例如,在编写和编译一段程序时,在该段程序代码函数的前面添加局部性等级标记3,以标记该程序段的局部性强度等级为3。根据各数据段的局部性强弱,可将数据分段,各数据段也可通过类似方式添加局部性强度等级标记,以标识各数据段的局部性强度等级。在将数据分配到内存时,根据不同数据的局部性强度等级,将不同局部性强度等级的数据分配到不同的内存页中,再根据各内存页中数据的局部性强度等级对各内存页添加相应的局部性强度等级标记,以标识该内存页中数据的局部性强度等级。
二、对于缓存而言,主要是设定各缓存块的局部性强度等级。将缓存分为若干缓存组,每一缓存组包括若干缓存块,并设定各缓存块的局部性强度等级。缓存块的局部性强度等级用于表示该缓存块可用于存储的数据的最高局部性强度等级,即各缓存块存储的数据的局部性强度等级不得低于其自身的局部性强度等级。同时,缓存块的局部性强度等级数量与数据的局部性强度等级数量应相等。例如,缓存块和数据的局部性强度等级数量为5级,某一数据的局部性强度等级为3级,则该数据不能存储在局部性强度等级为4级及5级的缓存块中。这样,局部性强度等级为4级及5级的缓存块中的数据无法被局部性强度等级为3级的数据替换掉,从而削弱了较弱局部性数据(3级局部性强度等级的数据)对较强局部性数据(4级及5级缓存块中存储的数据)的影响,提高了缓存中存储的数据的局部性强度,从而提高了缓存命中率,提升了CPU的访存性能。本文默认局部性强度等级的数字越大,则局部性强度等级越高,根据用户习惯,也可设定局部性强度等级的数字越小,局部性强度等级越高。在缓存填充时,主存地址的数据可优先填充到与该数据的局部性强度等级相等的缓存块中,如果该等级的缓存块被占,再依次往较低等级的缓存块填充,当所有符合映射条件的缓存块都占满时,再进行替换,而替换时,也优先替换与该数据的局部性强度等级相等的缓存块中的数据。上述对缓存块的设置方法可兼顾访存速度和缓存空间利用率。也可设置各缓存块存储的数据的局部性强度等级与相应缓存块的局部性强度等级相同,这样数据只能存储在与其局部性强度等级相同的缓存块中,可以得到更快的访问速度,但缓存空间利用率会降低,缓存命中率也会降低。本文中,主存地址可以是物理地址,也可以是虚拟地址。
缓存块的局部性强度等级可通过对缓存块添加局部性强度等级标记的方式来表示,例如,可为该缓存块添加局部性强度等级标记3,以标识该缓存块的局部性强度等级为3级。缓存块的局部性强度等级标记可存储在相联存储器中,以标识相应缓存块的局部性强度等级。同时,缓存块的局部性强度等级标记也可不存储在相联存储器,而是存储在一寄存器中,在该寄存器中分别记录不同局部性强度等级的缓存块在相应缓存组内的起始块号及块数。例如,记录局部性强度等级标记为3的缓存块在缓存组2中的起始块号为4,块数为5,则其表示的含义是,在缓存组2中,第4到第9缓存块为局部性强度等级为3的缓存块。
不同局部性强度等级的缓存块的数量分配可根据实际需要配置。通常而言,局部性强度等级较高的缓存块应该多分配一些,局部性强度等级较低的缓存块应该少分配一些,以保证缓存中的数据的局部性始终保持在较强水平。需注意的是,在主存与缓存之间采用组相连映射时,每一缓存组中至少应当包括两种局部性强度等级的缓存块,以保证每一缓存组内数据的局部性强度。由于对各缓存组所能存储的数据的最高局部性强度等级进行了限定,因此,不管是在全相联映射方式、直接相联映射方式还是组相联映射方式下,都可实现提高缓存中存储的数据的局部性强度,提高缓存命中率,从而提高CPU访存性能的效果。
进行访存操作时,CPU核向缓存控制器发送要访问的主存地址,缓存控制器查询缓存中是否有该主存地址的数据,如果有,则将该数据发送给CPU核,否则,将主存中该主存地址的数据映射到缓存,CPU再从缓存中读取该数据。当缓存中没有主存地址的数据时,需要进行缓存填充或替换。主存地址也可附上局部性强度等级标记,以标识相应主存地址的数据的局部性强度等级。例如,某一主存地址的数据的局部性强度等级为3,可在该主存地址的前部附上局部性强度等级标记3,以标识该主存地址的数据的局部性强度等级为3。主存地址的局部性强度等级与主存地址可组成“局部性强度等级-主存”键值对。缓存控制器在查询缓存中是否有该主存地址的数据时,可结合该主存地址的局部性强度等级。以组相联映射方式为例,缓存控制器查询缓存中是否有主存地址的数据的步骤如下:
1、定位与所述主存地址组号相同的缓存组,并定位该缓存组中局部性强度等级不低于所述主存地址的数据的局部性强度等级的缓存块。在定位缓存组中与主存地址的数据具有相同局部性强度等级的缓存块时,就可以根据该主存地址的局部性强度等级标记来判断该主存地址的数据的局部性强度等级。
2、查询局部性强度等级不低于所述主存地址的数据的局部性强度等级的各缓存块中是否有区号及块号分别与所述主存地址的区号及块号相同的数据;如果有,则缓存中有主存地址的数据,否则,则缓存中没有主存地址的数据。
这里所说的组相联映射方式其实是一种类似组相联的映射方式,因为,在这种映射方式下,主存中的一块并非可以映射到缓存中某一特定组的任意一缓存块,而是只能映射到缓存中某一特定组中符合局部性强度等级要求的任意一块。其实质是,映射时,在传统的映射方式基础上增加了对主存地址所能映射到的缓存块的局部性强度等级的限定,即主存地址的数据不能映射到比该主存地址的数据的局部性强度等级高的缓存块中。
不管是以全相联映射、直接相联映射还是组相联映射方式为基础,本发明所提出的访存方法的原理都是相通的,即在映射过程中限制数据映射的自由性,避免在缓存填充和替换过程中较高局部性强度等级的缓存块中的数据被较低局部性强度等级的数据替换,从而提高缓存命中率,提升CPU的访存性能。由本发明的原理可知,在采用本发明技术方案进行访存操作时,数据的局部性越弱,其映射时所受到的限制越大,被替换的概率越高,数据的局部性越强,其映射时所受到的限制越小,被替换的概率越低,从而也证明了采用本发明技术方案提高缓存命中率、提升CPU访存性能的可行性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。