一种改善数据在缓存中空间局部性的缓存方法及装置与流程

文档序号:11864597阅读:173来源:国知局
一种改善数据在缓存中空间局部性的缓存方法及装置与流程

本发明涉及高速缓存技术领域,特别涉及一种改善数据在缓存中空间局部性的缓存方法及装置。



背景技术:

高速缓存是位于处理器与内存之间的重要存储设备,用以缓解处理器与内存速度不匹配的矛盾。每当处理器访问的数据未在缓存中命中时,处理器将继续访问内存,将该数据所在的数据块复制到缓存中,若下次要访问的数据落在这个已经被复制进缓存的缓存块中时,就可以直接在缓存命中。每次访问缓存未命中时,将数据块而非单个数据从内存复制到缓存中利用了程序执行的空间局部性原理,即如果程序执行过程中的某个数据当前正在被处理器所访问,那么在内存中与该数据位置相近的其他数据也有即将被处理器所访问的趋势。于是,天然上连贯的内存空间被人为地划分成了多个数据块,同属一个数据块中的数据被视作相互之间具有良好的空间局部性,而属于不同数据块中的数据则被视作相互之间不具有空间局部性。通常,内存通过地址的取模运算进行数据块划分,地址通常由高低位两部分构成,低位部分决定了一个数据块中包含多少个数据,高位部分用来区分不同的数据块。显然,这种人为地将内存分块的方式从一定程度上破坏了数据之间原本想要保持的空间局部性关系。假设数据a和数据b在内存中紧邻,即它们在内存中的地址连续,但数据a其对应地址的高位部分与数据b所对应地址的高位部分不同,那么将导致数据a、数据b被划分到不同的数据块中,这就导致数据a和数据b这两个在内存中具有最佳空间局部性关系的数据在被复制到缓存的过程中,空间局部性关系遭到了破坏。为使高速缓存技术发挥更大的作用,需要改善数据在缓存中的空间局部性。



技术实现要素:

针对现有技术的不足,本发明提出一种改善数据在缓存中空间局部性的缓存方法,包括:

步骤1,设置主缓存与辅缓存,当进行访存操作时,先访问所述主缓存,从访存地址中解析出索引域,根据所述索引域定位所述主缓存中的组相联缓存块;

步骤2,检查所述组相联缓存块的有效位,判断是否命中,若命中,则从命中的缓存块中获取所述欲访问的数据,否则访问辅缓存,判断是否命中,若命中,从所述辅缓存中获取所述欲访问的数据;

步骤3,若所述辅缓存未命中,则从内存中获取所述欲访问的数据,并将所述欲访问的数据所在的数据块复制到所述主缓存中,将内存中与所述欲访问的数据空间局部性关系最好的数据块复制到所述辅缓存中。

所述主缓存为多路组相联缓存。

所述辅缓存为直接相联缓存。

所述步骤2中通过比较所述访存地址的标志域与缓存块中的标志域,判断是否命中。

所述步骤3包括从访存地址中解析出数据块的块内偏移域以及数据块的块内偏移域所占的比特数n,判断所述欲访问的数据在其所在的数据块中的位置,其中当块内偏移域小于2n-1时,所述欲访问的数据在其所在的数据块的前半部分,当块内偏移域大于或等于2n-1时,所述欲访问的数据在其所在的数据块的后半部分;

若所述欲访问的数据在其所在的数据块中的位置为后半部分,则将内存中与所述欲访问的数据所在的数据块后半部分相邻的数据块复制到所述辅缓存中;

若所述欲访问的数据在其所在的数据块中的位置为前半部分,则将内存中与所述欲访问的数据所在的数据块前半部分相邻的数据块复制到所述辅缓存中。

本发明还提出一种改善数据在缓存中空间局部性的缓存装置,包括:

定位模块,用于设置主缓存与辅缓存,当进行访存操作时,先访问所述主缓存,从访存地址中解析出索引域,根据所述索引域定位所述主缓存中的组相联缓存块;

访问数据模块,用于检查所述组相联缓存块的有效位,判断是否命中,若命中,则从命中的缓存块中获取所述欲访问的数据,否则访问辅缓存,判断是否命中,若命中,从所述辅缓存中获取所述欲访问的数据;

复制模块,用于若所述辅缓存未命中,则从内存中获取所述欲访问的数据,并将所述欲访问的数据所在的数据块复制到所述主缓存中,将内存中与所述欲访问的数据空间局部性关系最好的数据块复制到所述辅缓存中。

所述主缓存为多路组相联缓存。

所述辅缓存为直接相联缓存。

所述访问数据模块中通过比较所述访存地址的标志域与缓存块中的标志域,判断是否命中。

所述复制模块包括从访存地址中解析出数据块的块内偏移域以及数据块的块内偏移域所占的比特数n,判断所述欲访问的数据在其所在的数据块中的位置,其中当块内偏移域小于2n-1时,所述欲访问的数据在其所在的数据块的前半部分,当块内偏移域大于或等于2n-1时,所述欲访问的数据在其所在的数据块的后半部分;

若所述欲访问的数据在其所在的数据块中的位置为后半部分,则将内存中与所述欲访问的数据所在的数据块后半部分相邻的数据块复制到所述辅缓存中;

若所述欲访问的数据在其所在的数据块中的位置为前半部分,则将内存中与所述欲访问的数据所在的数据块前半部分相邻的数据块复制到所述辅缓存中。

由以上方案可知,本发明的优点在于:

1.每次访问缓存,发生缺失时,不仅将欲访问的数据所在的数据块复制到缓存中,也将内存中与欲访问的数据空间局部性关系最好的数据块复制到缓存中,较好地解决了传统缓存当数据块从内存复制到缓存中时破坏空间局部性的缺陷。

2.设计的辅缓存和主缓存与传统缓存的结构基本相同,减少了技术实现上的难度。

3.提供了一种简单有效的判断数据在其所在数据块中位置的方法。

附图说明

图1为一种破坏数据在缓存中空间局部性的极端情况图;

图2为改善数据在缓存中空间局部性的缓存装置示意图;

图3为处理器访问主缓存的过程图;

图4为处理器访问辅缓存的过程图;

图5为处理器访问内存和复制数据块的过程图;

图6为使用本发明后,极端情况下缓存块在主缓存和辅缓存中的分布图。

具体实施方式

下面结合附图,对本发明做进一步的详细描述。

缓存技术利用了程序执行的空间局部性原理,然而传统的缓存结构却在一定程度上破坏了这种空间局部性。图1给出了一种破坏空间局部性的极端情况,其中,数据b是处理器当前欲访问的数据,它在缓存中未命中,这导致处理器进一步访问内存且将数据b所在的数据块B复制到缓存中。图1中显示数据b在其所在的数据块B中的位置为最左端,不难看出,在内存中位置与数据b地址相邻的数据a跟数据b具有最好的空间局部性关系。而按照地址进行数据块划分后,数据a被分割到了数据块A中,因此没有在该次访问数据b未命中的情况下被一同复制到缓存中,于是,数据b和数据a之间的空间局部性关系遭到了破坏。

以下为本发明具体步骤,如下所示:

本发明的方法包括:在传统的组相联缓存(在本发明中被称作主缓存)的基础上,增加一组直接相联缓存(在本发明中称作辅缓存),辅缓存被用来存放内存中与未命中数据空间局部性关系最好的数据块;规定了访问主缓存和辅缓存的顺序;规定了判断未命中的数据在其所在数据块中的位置的方法;规定了判断内存中与未命中的数据空间局部性关系最好的数据块的方法;规定了未命中时,复制数据块到主缓存和辅缓存的方法。

处理器访问存储层次的顺序视实际情况选择:

顺序一:先访问主缓存,若主缓存未命中,则访问辅缓存,若辅缓存仍不命中,则访问内存;

顺序二:同时访问主缓存和辅缓存,若主缓存和辅缓存都未命中,则访问内存。

判断未命中的数据在其所在数据块中位置的方法:

设访存地址中块内偏移域占n个比特,访存地址中的块内偏移域记为offset,则:当offset小于2n-1时,未命中的数据在其所在的数据块的前半部分;当offset大于或等于2n-1时,未命中的数据在其所在的数据块的后半部分。

判断内存中与未命中的数据空间局部性关系最好的数据块的方法:

若未命中数据位于其所在的数据块的前半部分,则与该数据空间局部性关系最好的数据块为内存中与该数据块前半部分相邻的数据块;若未命中数据位于其所在的数据块的后半部分,则与该数据空间局部性关系最好的数据块为内存中与该数据块后半部分相邻的数据块。

缓存未命中时,复制数据块到主缓存和辅缓存的方法:

将未命中数据所在数据块复制到主缓存中;将内存中与未命中数据空间局部性关系最好的数据块复制到辅缓存中。

本发明还提出一种改善数据在缓存中空间局部性的缓存装置,包括:

定位模块,用于设置主缓存与辅缓存,当进行访存操作时,先访问所述主缓存,从访存地址中解析出索引域,根据所述索引域定位所述主缓存中的组相联缓存块;

访问数据模块,用于检查所述组相联缓存块的有效位,判断是否命中,若命中,则从命中的缓存块中获取所述欲访问的数据,否则访问辅缓存,判断是否命中,若命中,从所述辅缓存中获取所述欲访问的数据;

复制模块,用于若所述辅缓存未命中,则从内存中获取所述欲访问的数据,并将所述欲访问的数据所在的数据块复制到所述主缓存中,将内存中与所述欲访问的数据空间局部性关系最好的数据块复制到所述辅缓存中。

所述主缓存为多路组相联缓存。

所述辅缓存为直接相联缓存。

所述访问数据模块中通过比较所述访存地址的标志域与缓存块中的标志域,判断是否命中。

所述复制模块包括从访存地址中解析出数据块的块内偏移域以及数据块的块内偏移域所占的比特数n,判断所述欲访问的数据在其所在的数据块中的位置,其中当块内偏移域小于2n-1时,所述欲访问的数据在其所在的数据块的前半部分,当块内偏移域大于或等于2n-1时,所述欲访问的数据在其所在的数据块的后半部分;

若所述欲访问的数据在其所在的数据块中的位置为后半部分,则将内存中与所述欲访问的数据所在的数据块后半部分相邻的数据块复制到所述辅缓存中;

若所述欲访问的数据在其所在的数据块中的位置为前半部分,则将内存中与所述欲访问的数据所在的数据块前半部分相邻的数据块复制到所述辅缓存中。

以下为本发明的实施例,如下所示:

图2给出了根据本发明的改善数据在缓存中空间局部性的缓存装置结构示意图,其中,主缓存为两路组相联,辅缓存为直接相联。

访问主缓存过程如图3所示:

步骤301:处理器访问主缓存,从访存地址中解析出索引域index,根据索引域index定位到主缓存中的两个缓存块;

步骤302:检查定位到的这两个缓存块的有效位,将访存地址的标志域tag和缓存块中的标志域tag进行比较,判断主缓存是否命中;

步骤303:主缓存未命中,访问辅缓存;

步骤304:主缓存命中,则从发生命中的缓存块中获取欲访问的数据;

步骤305:处理器对该数据进行读写操作;

步骤306:结束。

访问辅缓存过程如图4所示:

步骤401:处理器访问辅缓存,从访存地址中解析出索引域index,根据索引域index定位到辅缓存中的一个缓存块;

步骤402:检查定位到的缓存块的有效位,将访存地址的标志域tag和缓存块中的标志域tag进行比较,判断辅缓存是否命中;

步骤403:辅缓存未命中,访问内存;

步骤404:辅缓存命中,则从该命中的缓存块中获取欲访问的数据;

步骤405:处理器对该数据进行读写操作;

步骤406:结束。

访问内存的过程如图5所示:

步骤501:处理器访问内存,从内存中获取未命中的数据所在的数据块,将其复制到主缓存中;

步骤502:从访存地址中解析出块内偏移域offset以及块内偏移域所占的比特数n,判断欲访问数据在其所在的数据块中的位置:当offset小于2n-1时未命中的数据(欲访问的数据)在其所在的数据块的前半部分,当offset大于或等于2n-1时未命中的数据(欲访问的数据)在其所在的数据块的后半部分;

步骤503:判断未命中的数据在其所在的数据块中的位置是否为前半部分;

步骤504:未命中的数据在其所在的数据块中的位置为后半部分,将内存中与该数据块后半部分相邻的数据块复制到辅缓存中;

步骤505:未命中的数据在其所在的数据块中的位置为前半部分,将内存中与该数据块前半部分相邻的数据块复制到辅缓存中;

步骤506:从主缓存中获取欲访问的数据;

步骤507:处理器对该数据进行读写操作;

步骤508:结束。

图6给出了图1中的极端情况在使用本发明后,缓存块在主缓存和辅缓存中的分布。

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