CN107291630A - 一种高速缓冲存储器处理方法及装置 - Google Patents
一种高速缓冲存储器处理方法及装置 Download PDFInfo
- Publication number
- CN107291630A CN107291630A CN201610190617.3A CN201610190617A CN107291630A CN 107291630 A CN107291630 A CN 107291630A CN 201610190617 A CN201610190617 A CN 201610190617A CN 107291630 A CN107291630 A CN 107291630A
- Authority
- CN
- China
- Prior art keywords
- cache
- cache line
- tag
- set1
- set2
- 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
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/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0868—Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
-
- 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/0893—Caches characterised by their organisation or structure
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (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
本发明实施例公开了一种高速缓冲存储器处理方法及装置,其中的方法可包括:Cache接收CPU发送的主存地址,所述主存地址包括标签Tag和第一索引Index1;查找所述Index1对应的第一组Set1,以及查找第二索引Index2对应的第二组Set2;在所述Set1和所述Set2的缓存行Cache Line中查找匹配的CacheLine。采用本发明可以降低Cache缺失时的功耗开销,提升了Cache性能。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种高速缓冲存储器处理方法及装置。
背景技术
在计算机技术发展过程中,为了填补中央处理器(Central Processing Unit,CPU)和主存储器在速度上的巨大差距,都在CPU和主存储器之间设置一个高速、小容量的高速缓冲存储器Cache,Cache对于提高整个计算机系统的性能有重要的意义,几乎是一个不可缺少的部件。
然而,在计算机系统结构中,Cache是按块(Cache Block)进行管理的,Cache和主存均被分割成大小相同的块,信息以块为单位调入Cache。相应地,CPU的主存地址被分割成两部分:块地址和块内位移。主存块地址用于查找该块在Cache中的位置,块内位移用于确定所访问的数据在该块中的位置。由于Cache的容量相对于主存容量来说很小,为了能将两者有效的对应起来,便产生了主存地址与Cache地址间的相互转换地址的映像方式,包括直接映像、全相联映像和组相联映像。其中,组相联映像方式是介于直接映像和全相联映像之间的一种折中方案,假设Cache中共有m个块,在采用组相联映像方式时,将m个Cache块(也可称为缓存行Cache Line)分成G组(set),每组n个块(即m=G×n),则组相联是指主存中的每一块可以被放置到Cache中唯一的一个组中的任何一个位置,且通常将每组n个块的Cache称为n路组相联(n-Way SetAssociative Mapping)Cache。组内的选择常采用位选择算法,例如,若主存第i块映象到Cache的第k组,则k=imod(G)其中G为Cache的组数。假设G=2g,则当表示为二进制数时,n实际上就是i的低g位,因此,可以直接用主存块地址的低g位去选择组相联Cache中的相应组,因而,此处的低g位通常称为索引Index。例如,如图1所示,图1为组相联Cache的地址映射结构示意图,当m为8,n为2(n一般取值较小典型值是2、4、8、16),则组数G为4且G=2g,则g为2,Index为主存地址块的低2位,即主存块地址分别用十进制/二进制表示为,0(0 0 0 0)、4(0 1 0 0)、8(1 0 0 0)和12(1 1 0 0),其中低二位(低g位,g=2)为(0 0),则对应的放入Cache中的第0(0 0)组中的任意一个Cache块;同样,主存块1(0 0 0 1)、5(0 1 0 1)、9(1 0 0 1)、13(1 1 0 1),其中的低二位(低g位,g=2)为(0 1),则对应的放入Cache中的第1(0 1)组中的任意一个Cache Line,以此类推。如图1中所示,当CPU需要读取目标数据时,则需要首先通过目标地址(主存地址)中的主存块地址对应的二进制的低2位(即Index),锁定对应的Set,再在对应的Set的Cache line中比较高2位的信息(即Tag),若一致,则命中,若不存在一致的Cache Line,则缺失。
然而在现有技术中,由于程序访问的不均匀性,很容易出现CPU对Cache中的某些组(假定为Hot Set)访问过度频繁,而对其它Cache组访问较少的现象,而当Cache在该Hot Set中未命中目标数据时,则需要访问主存,并从主存中调入相应数据块到Cache中,若此时Hot Set已写满,则需要按某种算法将Hot Set中的某一块替换出去,并修改有关的地址映像关系,如此一来,则可能需要在该Hot Set中进行反复替换,从而导致实现复杂度和代价的增加,进而降低了Cache的性能。
发明内容
本发明实施例提供一种高速缓冲存储器处理方法及装置,可以解决现有技术中组相联Cache在Cache缺失且相关的存储空间已满的情况下可能需要进行反复替换的问题,减小了Cache存储开销,提升了Cache性能。
第一方面,本发明实施例提供了一种高速缓冲存储器处理方法,应用于n路组相联Cache中,所述Cache包括多个缓存组Set,每个Set中包含n个缓存行Cache Line,所述Cache Line中包含缓存标签Cache Tag;任意一个主存地址包括标签Tag和索引Index,所述主存地址和所述Cache之间的地址映射关系为,所述主存地址通过所述Index被缓存到所述Cache中与所述Index唯一对应的Set中的任意一个Cache Line中,并将所述Tag写入到缓存的Cache line的Cache Tag中;可包括:
Cache接收CPU发送的需要访问的主存地址,所述主存地址包括标签Tag和第一索引Index1,所述Cache为n路组相联,n是大于0的整数;
查找所述Index1对应的第一组Set1,以及查找第二索引Index2对应的第二组Set2,其中,所述Index2为对所述Index1的预设位取反后的值;
在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,其中,所述Set1和所述Set2的Cache line共有2n路,所述匹配的Cache Line的缓存标签Cache Tag由地址位和标识位组成,所述地址位与所述Tag一致,且所述标识位与所述Index1的所述预设位一致。
通过本发明实施例提供的方案,通过将目标地址的索引位Index1的预设位取反,从而增加了数据读取和写入的第二组Set2,而由于增加了更多的可存储空间,从而可以减小组相联Cache在Cache缺失且相关的存储空间已满的情况下进行Cache替换的概率,同时减小了Cache存储开销,提升了Cache性能。
结合第一方面,在第一种可能的实现方式中,当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,并且,所述Set1中无空闲位置且所述Set2中有空闲位置时,将所述主存地址的Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述空闲位置中。
结合第一方面,在第二种可能的实现方式中,所述在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,包括:
将所述Tag进行缩位运算,得到缩位后的Tag;
分别对所述Set1和所述Set2的Cache Line中的存储标签Cache Tag中的地址位进行所述缩位运算得到缩位后的地址位;
在所述2n路Cache Line中查找出所述缩位后的地址位与所述缩位后的Tag相同的Cache Line;
根据所述Index1的所述预设位和所述Tag在所述相同的Cache Line中查找匹配的Cache Line。
通过本发明实施例提供的方案,通过在对第一组Set1和第二组Set2进行查询之前,将目标地址的Tag进行缩位预算,从而可以更快捷地预判出未命中(缺失)的情形。
结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述根据所述Index1的所述预设位和所述Tag在所述相同的Cache Line中查找匹配的Cache Line,包括:
根据所述Index1的所述预设位和所述Tag在所述Set1中的所述相同的CacheLine中查找匹配的Cache Line;
当未查找出匹配的Cache Line时,则在所述Set2中的所述相同的Cache Line中查找匹配的Cache Line。
通过本发明实施例提供的方案,在当通过缩位运算的快捷预判之后,若发现存在多个可能匹配的Cache Line时,则优先在原始的第一组Set1中进行查找,因为在Cache未命中时优先是在其对应的原始的Set1中进行存储或替换,因此查找的时候也对应地优先从Set1进行查找,可以更快地命中。
结合第一方面,或者结合第一方面的第一种可能的实现方式,或者结合第一方面的第二种可能的实现方式,或者结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述方法还包括:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1和所述Set2中均无空闲位置时,优先在所述Set1中的Cache Line中进行替换,以写入所述目标地址。
通过本发明实施例提供的方案,在Set1和所述Set2中均无空闲位置时,则优先在Set1中的Cache Line中进行替换以写入所述目标地址,以便于后续查找时,优先从Set1中进行查找,以更快命中。
结合第一方面的第四种可能的实现方式,在第五种可能的实现方式中,所述优先在所述Set1中的Cache Line中进行替换,包括:
优先在所述Set1中的Cache Line中的Cache Tag的标识位为所述Index2的Cache line中进行替换。
通过本发明实施例提供的方案,在Set1和所述Set2中均无空闲位置时,则优先在所述Set1中的Cache Line中的Cache Tag的标识位为所述Index2的Cacheline中进行替换,以便保证Set1中尽可能的存储Index1对应的数据,以后续更快命中。
结合第一方面,或者结合第一方面的第一种可能的实现方式,或者,结合第一方面的第二种可能的实现方式,或者,结合第一方面的第三种可能的实现方式,或者,结合第一方面的第四种可能的实现方式,或者,结合第一方面的第五种可能的实现方式,在第六种可能的实现方式中,所述方法还包括:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1中有空闲位置时,将所述Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述Set1的空闲位置中。
通过本发明实施例提供的方案,当Set1中有空闲位置时,则不论此时Set2中是否有空闲位置,都可以优先在Set1中进行存储,以便于Set1中尽量存储Index1对应的数据,以便后续优先从Set1中进行查找,从而更快命中。
结合第一方面,在第七种可能的实现方式中,所述在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,包括:
根据所述Index1的所述预设位和所述Tag在所述Set1的n路Cache Line中查找匹配的Cache Line;
若没有匹配的Cache Line,则在所述Set2的n路Cache Line中查找匹配的Cache Line。
通过本发明实施例提供的方案,在查找匹配的Cache Line时,也可以优先从第一组Set1查找,若命中,则与现有技术相同直接读出,若Set1未命中再去第二组查找,既没有降低直接命中情况的效率,又可以保证在Set1中未有命中项时,可以有第二组Set2进行进一步地的查寻,甚至后续的写入和替换等,减少缺失情况下的替换概率,提升Cache性能。
结合第一方面,或者结合第一方面的第一种可能的实现方式,或者,结合第一方面的第二种可能的实现方式,或者,结合第一方面的第三种可能的实现方式,或者,结合第一方面的第四种可能的实现方式,或者,结合第一方面的第五种可能的实现方式,或者,结合第一方面的第六种可能的实现方式,或者,结合第一方面的第七种可能的实现方式,在第八种可能的实现方式中,所述主存地址包括内存地址或系统地址。
结合第一方面,或者结合第一方面的第一种可能的实现方式,或者,结合第一方面的第二种可能的实现方式,或者,结合第一方面的第三种可能的实现方式,或者,结合第一方面的第四种可能的实现方式,或者,结合第一方面的第五种可能的实现方式,或者,结合第一方面的第六种可能的实现方式,或者,结合第一方面的第七种可能的实现方式,或者,结合第一方面的第八种可能的实现方式,在第九种可能的实现方式中,所述Index1的所述预设位为所述Index1的最高位。
通过本发明实施例提供的方案,解决了由于程序的连续性造成的短时间内Cache的相邻组可能会存在多次读写操作的情况而导致的需要反复替换的问题,将预设位定为Index1的最高位,既可以避免Set1与Set2过于临近,又可以让Cache Tag携带的标识位不至于过长,从而减小对查询效率的影响,提升Cache性能。
第二方面,本发明实施例提供了一种高速缓冲存储器处理装置,可包括:
接收模块,用于接收CPU发送的需要访问的主存地址,所述主存地址包括标签Tag和第一索引Index1,所述Cache为n路组相联,n是大于0的整数;
第一映射模块,用于查找所述Index1对应的第一组Set1,以及查找第二索引Index2对应的第二组Set2,其中,所述Index2为对所述Index1的预设位取反后的值;
第二映射模块,用于在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,其中,所述Set1和所述Set2的Cache line共有2n路,所述匹配的Cache Line的缓存标签Cache Tag由地址位和标识位组成,所述地址位与所述Tag一致,且所述标识位与所述Index1的所述预设位一致。
结合第二方面,在第一种可能的实现方式中,所述装置,还包括:
第一处理模块,用于当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,并且,所述Set1中无空闲位置且所述Set2中有空闲位置时,将所述主存地址的Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述空闲位置中。
结合第二方面,在第二种可能的实现方式中,所述第二映射模块,包括:
第一运算单元,用于将所述Tag进行缩位运算,得到缩位后的Tag;
第二运算单元,用于分别对所述Set1和所述Set2的Cache Line中的存储标签Cache Tag中的地址位进行所述缩位运算得到缩位后的地址位;
第一映射单元,用于在所述2n路Cache Line中查找出所述缩位后的地址位与所述缩位后的Tag相同的Cache Line;
第二映射单元,用于根据所述Index1的所述预设位和所述Tag在所述相同的Cache Line中查找匹配的Cache Line。
结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述第二映射单元,包括:
第一查找单元,用于根据所述Index1的所述预设位和所述Tag在所述Set1中的所述相同的Cache Line中查找匹配的Cache Line;
第二查找单元,用于当未查找出匹配的Cache Line时,则在所述Set2中的所述相同的Cache Line中查找匹配的Cache Line。
结合第二方面,或者结合第二方面的第一种可能的实现方式,或者结合第二方面的第二种可能的实现方式,或者结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,所述装置还包括:
第二处理模块,用于当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1和所述Set2中均无空闲位置时,优先在所述Set1中的Cache Line中进行替换,以写入所述主存地址。
结合第二方面的第四种可能的实现方式,在第五种可能的实现方式中,所述第二处理模块,具体用于:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1和所述Set2中均无空闲位置时,优先在所述Set1中的Cache Line中的Cache Tag的标识位为所述Index2的Cache line中进行替换。
结合第二方面,或者结合第二方面的第一种可能的实现方式,或者,结合第二方面的第二种可能的实现方式,或者,结合第二方面的第三种可能的实现方式,或者,结合第二方面的第四种可能的实现方式,或者,结合第二方面的第五种可能的实现方式,在第六种可能的实现方式中,所述装置还包括:
第三处理模块,用于当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1中有空闲位置时,将所述Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述Set1的空闲位置中。
结合第二方面,在第七种可能的实现方式中,所述第二映射模块,包括:
第三映射单元,用于根据所述Index1的所述预设位和所述Tag在所述Set1的n路Cache Line中查找匹配的Cache Line;
第四映射单元,用于若没有匹配的Cache Line,则在所述Set2的n路CacheLine中查找匹配的Cache Line。
结合第二方面,或者结合第二方面的第一种可能的实现方式,或者,结合第二方面的第二种可能的实现方式,或者,结合第二方面的第三种可能的实现方式,或者,结合第二方面的第四种可能的实现方式,或者,结合第二方面的第五种可能的实现方式,或者,结合第二方面的第六种可能的实现方式,或者,结合第二方面的第七种可能的实现方式,在第八种可能的实现方式中,所述主存地址包括内存地址或系统地址。
结合第二方面,或者结合第二方面的第一种可能的实现方式,或者,结合第二方面的第二种可能的实现方式,或者,结合第二方面的第三种可能的实现方式,或者,结合第二方面的第四种可能的实现方式,或者,结合第二方面的第五种可能的实现方式,或者,结合第二方面的第六种可能的实现方式,或者,结合第二方面的第七种可能的实现方式,或者,结合第二方面的第八种可能的实现方式,在第九种可能的实现方式中,所述Index1的所述预设位为所述Index1的最高位。
第三方面,本发明实施例提供了一种高速缓冲存储器Cache,可包括:输入单元、输出单元、存储单元和控制单元;
其中,所述存储单元用于存储程序代码,所述控制单元用于调用所述存储单元存储的程序代码执行如下步骤:
通过所述输入单元接收CPU发送的需要访问的主存地址,所述主存地址包括标签Tag和第一索引Index1,所述Cache为n路组相联,n是大于0的整数;
查找所述Index1对应的第一组Set1,以及查找第二索引Index2对应的第二组Set2,其中,所述Index2为对所述Index1的预设位取反后的值;
在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,其中,所述Set1和所述Set2的Cache line共有2n路,所述匹配的Cache Line的缓存标签Cache Tag由地址位和标识位组成,所述地址位与所述Tag一致,且所述标识位与所述Index1的所述预设位一致。
结合第三方面,在第一种可能的实现方式中,所述处理单元还用于:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,并且,所述Set1中无空闲位置且所述Set2中有空闲位置时,将所述主存地址的Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述空闲位置中。
结合第三方面,在第二种可能的实现方式中,所述控制单元用于在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,具体为:
将所述Tag进行缩位运算,得到缩位后的Tag;
分别对所述Set1和所述Set2的Cache Line中的存储标签Cache Tag中的地址位进行所述缩位运算得到缩位后的地址位;
在所述2n路Cache Line中查找出所述缩位后的地址位与所述缩位后的Tag相同的Cache Line;
根据所述Index1的所述预设位和所述Tag在所述相同的Cache Line中查找匹配的Cache Line。
结合第三方面的第二种可能的实现方式,在第三种可能的实现方式中,所述控制单元用于根据所述Index1的所述预设位和所述Tag在所述相同的CacheLine中查找匹配的Cache Line,具体为:
根据所述Index1的所述预设位和所述Tag在所述Set1中的所述相同的CacheLine中查找匹配的Cache Line;
当未查找出匹配的Cache Line时,则在所述Set2中的所述相同的Cache Line中查找匹配的Cache Line。
结合第三方面,或者结合第三方面的第一种可能的实现方式,或者结合第三方面的第二种可能的实现方式,或者结合第三方面的第三种可能的实现方式,在第四种可能的实现方式中,所述控制单元,还用于:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1和所述Set2中均无空闲位置时,优先在所述Set1中的Cache Line中进行替换,以写入所述主存地址。
结合第三方面的第四种可能的实现方式,在第五种可能的实现方式中,所述控制单元,用于优先在所述Set1中的Cache Line中进行替换,包括:
优先在所述Set1中的Cache Line中的Cache Tag的标识位为所述Index2的Cache line中进行替换。
结合第三方面,或者结合第三方面的第一种可能的实现方式,或者,结合第三方面的第二种可能的实现方式,或者,结合第三方面的第三种可能的实现方式,或者,结合第三方面的第四种可能的实现方式,或者,结合第三方面的第五种可能的实现方式,在第六种可能的实现方式中,所述控制单元,还用于:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1中有空闲位置时,将所述Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述Set1的空闲位置中。
结合第三方面,在第七种可能的实现方式中,所述控制单元用于根据所述Index1的所述预设位和所述Tag在所述Set1和所述Set2的Cache Line中查找匹配的Cache Line,包括:
根据所述Index1的所述预设位和所述Tag在所述Set1的n路Cache Line中查找匹配的Cache Line;
若没有匹配的Cache Line,则在所述Set2的n路Cache Line中查找匹配的Cache Line。
结合第三方面,或者结合第三方面的第一种可能的实现方式,或者,结合第三方面的第二种可能的实现方式,或者,结合第三方面的第三种可能的实现方式,或者,结合第三方面的第四种可能的实现方式,或者,结合第三方面的第五种可能的实现方式,或者,结合第三方面的第六种可能的实现方式,或者,结合第三方面的第七种可能的实现方式,在第八种可能的实现方式中,所述主存地址包括内存地址或系统地址。
结合第三方面,或者结合第三方面的第一种可能的实现方式,或者,结合第三方面的第二种可能的实现方式,或者,结合第三方面的第三种可能的实现方式,或者,结合第三方面的第四种可能的实现方式,或者,结合第三方面的第五种可能的实现方式,或者,结合第三方面的第六种可能的实现方式,或者,结合第三方面的第七种可能的实现方式,或者,结合第三方面的第八种可能的实现方式,在第九种可能的实现方式中,所述Index1的所述预设位为所述Index1的最高位。
实施本发明实施例,具有如下有益效果:
本发明实施例,通过Cache接收CPU发送的需要访问的主存地址,查找所述Index1对应的第一组Set1,以及查找第二索引Index2对应的第二组Set2,最终在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,由于增加了第二组Set2,因而增加了更多的可存储空间。当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,并且,所述Set1中无空闲位置且所述Set2中有空闲位置时,将所述主存地址的Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述空闲位置中,即可以减小组相联Cache在Cache缺失且相关的存储空间已满的情况下进行Cache替换的概率,同时减小了Cache存储开销,提升了Cache性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是组相联Cache的地址映射结构示意图;
图2是本发明实施例中高速缓冲存储器处理方法的流程示意图;
图3是本发明实施例中高速缓冲存储器处理方法的一个具体应用场景示意图;
图4和图5是本发明实施例中高速缓冲存储器处理方法的另一个具体应用场景示意图;
图6是本发明实施例中的高速缓冲存储器处理装置的结构示意图;
图7是本发明实施例中的高速缓冲存储器处理装置的另一实施例的结构示意图;
图8是本发明实施例中的高速缓冲存储器处理装置的又一实施例的结构示意图;
图9是本发明实施例中的高速缓冲存储器处理装置的又一实施例结构示意图;
图10是本发明实施例中的高速缓冲存储器处理装置的又一实施例结构示意图;
图11是本发明实施例中的高速缓冲存储器处理装置的又一实施例结构示意图;
图12是本发明实施例中的高速缓冲存储器处理装置的又一实施例结构示意图;
图13是本发明实施例中的Cache结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。应当理解的是,本文中虽然使用术语第一、第二等描述消息业务或模块,但是这些消息业务或模块应该不受这些术语的限制,这些术语仅被用于彼此区分。还应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”(“a”、“an”、和“the”)旨在也包括复数形式。还应该理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。
为了便于理解本发明实施例的发明内容,首先结合图1对本发明实施例进行举例说明,假设当前CPU需要访问目标地址(如主存地址)中的主存块地址为15,转换为二进制即为(1 1 1 1),在现有技术中,由于Index为低2位为(11),因此CPU会直接访问并查找第一组Set1即第3(1 1)组,然后将Tag(1 1)与第3组中的每一个Cache Line中的Tag进行比对,若一致则命中,若不存在一致则缺失。但是在本发明实施例中,当CPU需要访问主存块15时,则不仅需要访问并查找第一组Set1第3组还需要访问将Set1(1 1)的高位取反后的第二组Set2即为第1(0 1)组,假设在第3组中或者在第1组中,存在高2位为(1 1)的Tag,则证明该两个组中可能有匹配的Cache Line,但是由于此时块号15(1 1 1 1)和块号13(1 1 0 1)的高两位均为(1 1),且均有可能存储在第3组或第1组中,因此,只通过高2位,无法确定是否确实存在匹配的Cache Line,因此在本发明实施例中,通过在现有技术中的Cache Line中的Tag中携带一位Index的预设位(即经过取反变化的高位),以此来最终区分并查找的Cache Line是否存在真正匹配的Cache Line。相反,当在该第3组和第1组中均未查找到Tag为主存地址的高2位(1 1)的Cache Line,则为缺失,此时则需要CPU去内存中读出主存块15,并将该主存块15(1 1 1 1)的Tag(1 1)和Index1的预设位(1)写入到Cache中的Cache Tag中,以便于下一次CPU读取的时候可以顺利命中。可以理解的是,具体的查找顺序和实现途径可以参照后续实施例中的S201-S204中的方法步骤,例如进行缩位运算,优先在第一组进行查找,或者写入的时候优先写入第一组等,此处将不在一一进行说明。
参见图2,图2是本发明实施例中的一种高速缓冲存储器处理方法的流程示意图,下面将结合附图2至从高速缓冲存储器Cache侧对本发明实施例中的地址映射处理方法进行详细描述。如图2所示,该方法可以包括以下步骤S201-步骤S204。
步骤S201:Cache接收CPU发送的需要访问的主存地址。
具体地,当中央处理器CPU需要访问内存中的目标数据时,首先给出该目标数据的主存地址(如内存地址或系统地址等),并向Cache发送该主存地址,Cache接收到CPU发送的主存地址后,依据该主存地址中包含的标记部分(标签Tag+索引Index)判断该主存地址是否已经存储于Cache中。本实施例中主存地址包括与Cache建立地址映射关系的标签Tag和索引Index1,Cache为n路组相联,且n为大于0的自然数。在实际应用中,组相联映射方式每组的块数一般取值较小,典型值为2、4、8、16等,分别称为两路组相联、四路组相联等。
步骤S202:查找所述Index1对应的第一组Set1,以及查找第二索引Index2对应的第二组Set2。
具体地,在现有技术中,在n路组相联的Cache中,首先利用索引index1来确定需要访问的主存地址位于Cache存储空间中的第一组Set1,再在该第一组Set1中查找比对与主存地址中的标签Tag中相匹配的缓存行Cache Line,若命中(与Tag匹配),则直接读出递交给CPU,若未命中(与Tag不匹配),则发生缺失,CPU只好直接从主存地址处(内存或系统等)获取该目标数据,获取的同时将该目标数据对应的数据块发送给Cache进行存储,以备下次访问。当第一组Set1中没有空闲位置(已全被占用的情况)时,则需要利用替换策略,即需强迫腾出Set1中的某一个Cache Line,以接纳新调入的块。但是,在本发明实施例中,通过将Index1的预设位取反后作为第二索引Index2,从而增加查找该Index2对应的Set2,假设Set1是被访问频繁的Hot set,而Set2又属于较为空闲的Set,则可以充分利用该资源。
在一种可能的实现方式中,所述Index1的所述预设位为所述Index1的最高位。原因在于,通常情况下,程序运行情况表明,程序产生的地址往往集中在存储器逻辑地址空间的很小范围内,而指令通常又是顺序执行,所以分布连续,再加上循环程序和子程序段都要运行多次,数据也是如此,这种现象称为“程序访问的局部性Locality of Reference”。因此体现在主存地址上,可以认为多个主存地址通常为连续的,即会在低位即Index1的低位上变化的可能性最大,因此,对应在Cache地址中,即可以认为会出现在连续的Cache Set中,因此,当第二组Set2与第一组Set1在地址间隔上越大,而当Set1为Hot Set时,则Set2存在空闲位置的可能性就越大。因此将第二组Set2定义为Index1的最高位取反对应的Set,既可以保障Set1与Set2之间的间距性,又可以保证Cache Tag携带的标识位较少,以利于综合性能达到最好。并且,可以理解的是,预设位可以是Index1其中的一位或多位,不论是一位还是多位时,都可以是Index1中的任意位置的位,本发明对此不作具体限定,只要是能完成本发明中增加相应的查找和存储的第二组,则均属于本发明所保护涵盖的范围,并且位的多少和位的位置不同,只会影响Cache缺失下的替换概率。
步骤S203:在所述Set1和所述Set2的缓存行Cache Line中查找匹配的CacheLine。
具体地,根据Index1的预设位和Tag在Set1和Set2对应的2n路缓存行CacheLine中查找匹配的Cache Line,其中,匹配的Cache Line的存储标签Cache Tag由地址位和标识位组成,且地址位与所述Tag一致,标识位与Index1的预设位一致。即匹配的Cache Line为该Cache Line中的存储标签Cache Tag中的地址位与Tag一致且携带的标识位与Index1的预设位一致。可以理解的是,本发明实施例中的Cache中的所有Cache Line中的存储标签Tag均包括在存储相应数据时对应的标签Tag以及索引Index1的预设位。原因在于,在现有技术中,主存地址中的Index1与Cache中的Set1是严格对应的关系,因此在通过Index1在Cache中查找到对应的Set1之后,只需要比较Tag就可以唯一确定主存地址(Tag+Index1),从而查找到匹配的Cache Line,但是,由于在本发明实施例中增加了第二组Set2,则本来地址低位为Index1的主存地址有可能会被存储在地址低位为Index2的Set2中,因此从Set1中读取的数据,有可能是CacheTag+Index1,也有可能是Cache Tag+Index2,因而不能唯一确定存储的地址,因此需要通过在Cache Tag中携带取反前的原本的主存地址中的Index1,由此才可以进行最终的区分和确定。因此如何最终确定是否是主存地址,还需要通过进一步的判断Tag中携带的Index的预设位是否与Index1对应的预设位相匹配,若是,则可以认为该Cache Tag。
在一种可能的实现方式中,将主存地址的Tag进行缩位运算,得到缩位后的Tag,然后分别对Set1和Set2的2n路缓存行Cache Line中的存储标签CacheTag中的地址位进行缩位运算得到缩位后的地址位;在2n路Cache Line中查找出缩位后的地址位与所述缩位后的Tag相同的Cache Line;根据Index1的预设位和Tag在该相同的Cache Line中查找匹配的Cache Line。即本方法实施例通过在对第一组Set1和第二组Set2进行查询之前,增加预测模块将主存地址的Tag进行缩位预算,从而可以更快捷地预判出未命中(缺失)的情形。
在一种可能的实现方式中,根据Index1的预设位和Tag在Set1中的所述相同的Cache Line中查找匹配的Cache Line;当未查找出匹配的Cache Line时,则在所述Set2中的所述相同的Cache Line中查找匹配的Cache Line。即本方法实施例在当通过缩位运算的快捷预判之后,若发现存在多个可能匹配的CacheLine时,则优先在原始的第一组Set1中进行查找,因为在Cache未命中时优先是在其对应的原始的Set1中进行存储或替换,因此查找的时候也对应地优先从Set1进行查找,可以更快地命中。
步骤S204:当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,并且,所述Set1中无空闲位置且所述Set2中有空闲位置时,将所述主存地址的Tag作为所述Cache Tag的地址位,并将所述Index1的所述预设位作为所述Cache Tag的标识位写入到所述空闲位置中。
具体地,当在查找是否有匹配的Cache Line的过程中,发现Set1和Set2中对应的2n个Cache Line中均未有命中项时,则查找Set1和Set2中是否有空闲的Cache Line,具体的检测方式是检查Cache Line中的有效位V是否等于0或者1,当为0时,则表示当前的Cache Line没有被占用,当V=1时,则表示当前的Cache Line已经被占用,当前无法再写入,需要被替换才有可能写入新的数据块。
在一个可选的实现方式中,当Set1和Set2中的2n路Cache Line中均未有匹配的Cache Line,且Set1和Set2中均无空闲位置时,优先在Set1中的CacheLine中进行替换,以写入所述主存地址。进一步地,优先在Set1中的Cache Line中进行替换可以为:优先在Set1中的Cache Line中的Cache Tag的标识位为Index2的Cache line中进行替换。即本方法实施例,通过在Set1和所述Set2中均无空闲位置时,则优先在Set1中的Cache Line中进行替换以写入所述主存地址,以便于后续查找时,优先从Set1中进行查找,以更快命中。
在一个可选的实现方式中,当Set1和Set2中的2n路Cache Line中均未有匹配的Cache Line,且Set1中有空闲位置时,将Tag以及Index1的预设位依次作为存储标签Cache Tag的地址位和标识位写入到Set1的空闲位置中。通过本发明实施例提供的方案,当Set1中有空闲位置时,则不论此时Set2中是否有空闲位置,都可以优先在Set1中进行存储,以便于Set1中尽量存储Index1对应的数据,从而以便后续优先从Set1中进行查找,以更快命中。
本发明实施例,通过高速缓冲存储器Cache接收中央处理器CPU发送的主存地址,查找并确定所述Index1对应的第一组Set1和第二索引Index2对应的第二组Set2,根据所述Index1的所述预设位和所述Tag在所述Set1和所述Set2的2n路缓存行Cache Line中查找匹配的Cache Line,由于增加了第二组Set2,因而增加了更多的可存储空间。进一步地,当所述Set1和所述Set2中的2n路Cache Line中均未有所述匹配的Cache Line,并且,所述Set1中无空闲位置且所述Set2中有空闲位置时,将所述主存地址的Tag作为所述Cache Tag的地址位,并将所述Index1的所述预设位作为所述Cache Tag的标识位写入到所述空闲位置中,即可以减小组相联Cache在Cache缺失且相关的存储空间已满的情况下进行Cache替换的概率,同时减小了Cache存储开销,提升了Cache性能。
在具体的应用场景中,如图3所示,图3是本发明实施例中高速缓冲存储器处理方法的一个具体应用场景示意图,图3中,假设组相联Cache为n路组相联(例如n=8),输入Cache访问的地址(主存地址)为30bit,其中Tag为29:10,Index1为9:0。假设在命中(match/hit)场景下,则步骤流程如下:
1、假设输入的地址[29:0]为{Tag,Index1}(Tag=0x076d2,Index1=0x100),输入地址的Tag经过压缩后(缩位运算)变为Compress_Tag=0x0b(假设每4bit进行缩位异或运算获得)。
2、读取Predict Array中对应的Index[8:0]=0x100(即包括Index1和Index2)对应的2n个单元(Cache Line),并把每个Cache Line与Compress_Tag进行比较,假设有三个Cache Line匹配(match),分别为PAW[0](Predict Array Way0)、PAW[1]和PAW[2n-1]。
3、读取Tag Array中对应Index1[9:0]=0x100和Index2[9:0]=0x300(Index1[9]取反)中的对应PAW[0]、PAW[1]和PAW[2n-1]的三个Cache Line,即Index1[9:0]=0x100的TAW[0](Tag Array Way0)、TAW[1]和Index2[9:0]=0x300的TAW[n-1],假设最终TAW[0]的Cache Tag的地址位Tag和标识位Index[9]与输入地址的一致,则向CPU输出TAW[0]的数据为命中的数据。
在具体的应用场景中,如图4和图5所示,是本发明实施例中高速缓冲存储器处理方法的另一个具体应用场景示意图,图4和图5中,假设主存地址[29:0]为{Tag,Index1}(Tag=0x076d2,Index1=0x100),主存地址中的Tag经过压缩后的变为compress_tag=0x0b(假设每4bit进行缩位异或运算获得)。若发生未命中(miss)场景,则具体的步骤流程如下:
读取Predict Array中对应Index[8:0]=0x100的2n个单元(Cache Line),并把每个Cache Line与compress_tag进行比较,假设有没有有效的Cache Line与compress_tag匹配,也就是此次Cache访问未命中(miss),在这种情况下,需要根据Predict Array的使用情况,判断是否需要替换,也就是两个子场景。A)不替换场景和B)替换场景,其中
A)不替换场景下,如图4所示,在Predict Array中存在没有使用的Cache Line可以存放当前要访问的地址(也就是存在某个Cache Line的Valid位为0)这时只需要选取一个空闲的Cache Line,并把从内存读来的数据放到对应这个CacheLine上即可。
可以理解的是:在这种情况下,若Index1[9:0]=0x100的PAW[0]到PAW[n-1]都是有效的,而Index2[9:0]=0x300(Index[9]取反)对应的PAW[n]到PAW[2n-1]存在空闲的位置,这时就不需要替换,可以直接使用这个空闲位置(例如图4中的PAW[n+1]的位置),此场景也是有益效果较为明显的应用场景。
B)发生替换的场景下,如图5所示,在Predict Array中,Index[8:0]=0x100对应的所有的Cache Line都是有效(也就是所有way的Valid位为1),这时需要替换操作。需要按照一定的规则(可以是随机RAND或者最近最少用LRU等算法)选取一个Cache Line,把这个Cache Line的数据回写到内存,并通知CPU,并把{Tag,Index1}(Tag=0x076d2,Index1=0x100)的目标数据写到这个Cache Line。更具体的实现细节和更多的实际应用场景,这里不再一一列举,请参照上述图2中的方法实施例。
参见图6,对本发明实施例中的高速缓冲存储器处理装置的实施例的结构示意图进行详细介绍。该装置10可包括:接收模块101、第一映射模块102和第二映射模块103。
接收模块101,用于接收CPU发送的需要访问的主存地址,所述主存地址包括标签Tag和第一索引Index1,所述Cache为n路组相联,n是大于0的整数;
第一映射模块102,用于查找所述Index1对应的第一组Set1,以及查找第二索引Index2对应的第二组Set2,其中,所述Index2为对所述Index1的预设位取反后的值;
第二映射模块103,用于在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,其中,所述Set1和所述Set2的Cache line共有2n路,所述匹配的Cache Line的缓存标签Cache Tag由地址位和标识位组成,所述地址位与所述Tag一致,且所述标识位与所述Index1的所述预设位一致。
再进一步地,如图7所示的本发明提供的高速缓冲存储器处理装置的另一实施例的结构示意图,装置10,还可以包括:第一处理模块104,其中
第一处理模块104,用于当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,并且,所述Set1中无空闲位置且所述Set2中有空闲位置时,将所述主存地址的Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述空闲位置中。
具体地,如图8所示的本发明提供的高速缓冲存储器处理装置的又一实施例的结构示意图,第二映射模块103,可包括第一运算单元、第二运算单元、第一映射单元和第二映射单元,其中
第一运算单元1031,用于将所述Tag进行缩位运算,得到缩位后的Tag;
第二运算单元1032,用于分别对所述Set1和所述Set2的Cache Line中的存储标签Cache Tag中的地址位进行所述缩位运算得到缩位后的地址位;
第一映射单元1033,用于在所述2n路Cache Line中查找出所述缩位后的地址位与所述缩位后的Tag相同的Cache Line;
第二映射单元1034,用于根据所述Index1的所述预设位和所述Tag在所述相同的Cache Line中查找匹配的Cache Line。
进一步地,如图9所示的本发明提供的高速缓冲存储器处理装置的又一实施例的结构示意图,第二映射单元1034,可包括:第一查找单元1034a和第二查找单元1034b,其中
第一查找单元1034a,用于根据所述Index1的所述预设位和所述Tag在所述Set1中的所述相同的Cache Line中查找匹配的Cache Line;
第二查找单元1034b,用于当未查找出匹配的Cache Line时,则在所述Set2中的所述相同的Cache Line中查找匹配的Cache Line。
再进一步地,如图10所示的本发明提供的高速缓冲存储器处理装置的又一实施例的结构示意图,装置10还可以包括:第二处理模块105,其中
第二处理模块105,用于当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1和所述Set2中均无空闲位置时,优先在所述Set1中的Cache Line中进行替换,以写入所述主存地址。
再进一步地,第二处理模块105,具体用于:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1和所述Set2中均无空闲位置时,优先在所述Set1中的Cache Line中的Cache Tag的标识位为所述Index2的Cache line中进行替换。
再进一步地,如图11所示的本发明提供的高速缓冲存储器处理装置的又一实施例的结构示意图,装置10,还可以包括:第三处理模块106,其中
第三处理模块106,用于当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1中有空闲位置时,将所述Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述Set1的空闲位置中。
再进一步地,如图12所示的本发明提供的高速缓冲存储器处理装置的又一实施例的结构示意图,第二映射模块103,可包括:第三映射单元和第四映射单元,其中
第三映射单元1035,用于根据所述Index1的所述预设位和所述Tag在所述Set1的n路Cache Line中查找匹配的Cache Line;
第四映射单元1036,用于若没有匹配的Cache Line,则在所述Set2的n路Cache Line中查找匹配的Cache Line。
再进一步地,所述主存地址包括内存地址或系统地址。
再进一步地,所述Index1的所述预设位为所述Index1的最高位。
可理解的是,高速缓冲存储器处理装置10中各模块的功能可对应参考上述图2的方法实施例中的具体实现方式,这里不再赘述。
为了便于更好地实施本发明实施例的上述方案,本发明还提供了用于配合实施上述方案的相关Cache。下面结合图13所示的本发明提供的Cache的实施例的结构示意图,进行详细说明:
Cache 20可包括:输入单元201、输出单元202、存储单元203和控制单元204(Cache20中的控制单元204的数量可以一个或多个,图13中以一个控制单元为例)。其中输出单元202可以用于Cache将读取命中的目标数据返回给CPU。在本发明的一些实施例中,输入单元201、输出单元202、存储单元203和控制单元204可通过总线或者其它方式连接,其中,图13中以通过总线连接为例。
其中,存储单元203用于存储程序代码,控制单元204用于调用存储单元203存储的程序代码执行如下步骤:
通过所述输入单元201接收CPU发送的需要访问的主存地址,所述主存地址包括标签Tag和第一索引Index1,所述Cache为n路组相联,n是大于0的整数;
查找所述Index1对应的第一组Set1,以及查找第二索引Index2对应的第二组Set2,其中,所述Index2为对所述Index1的预设位取反后的值;
在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,其中,所述Set1和所述Set2的Cache line共有2n路,所述匹配的Cache Line的缓存标签Cache Tag由地址位和标识位组成,所述地址位与所述Tag一致,且所述标识位与所述Index1的所述预设位一致。
具体地,控制单元204还用于当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,并且,所述Set1中无空闲位置且所述Set2中有空闲位置时,将所述主存地址的Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述空闲位置中。
进一步地,控制单元204用于在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,具体为:
将所述Tag进行缩位运算,得到缩位后的Tag;
分别对所述Set1和所述Set2的Cache Line中的存储标签Cache Tag中的地址位进行所述缩位运算得到缩位后的地址位;
在所述2n路Cache Line中查找出所述缩位后的地址位与所述缩位后的Tag相同的Cache Line;
根据所述Index1的所述预设位和所述Tag在所述相同的Cache Line中查找匹配的Cache Line。
再进一步地,控制单元204用于根据所述Index1的所述预设位和所述Tag在所述相同的Cache Line中查找匹配的Cache Line,具体为:
根据所述Index1的所述预设位和所述Tag在所述Set1中的所述相同的CacheLine中查找匹配的Cache Line;
当未查找出匹配的Cache Line时,则在所述Set2中的所述相同的Cache Line中查找匹配的Cache Line。
再进一步地,控制单元204,还用于:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1和所述Set2中均无空闲位置时,优先在所述Set1中的Cache Line中进行替换,以写入所述主存地址。
再进一步地,控制单元204用于优先在所述Set1中的Cache Line中进行替换,包括:
优先在所述Set1中的Cache Line中的Cache Tag的标识位为所述Index2的Cache line中进行替换。
再进一步地,控制单元204,还用于:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1中有空闲位置时,将所述Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述Set1的空闲位置中。
再进一步地,控制单元204用于根据所述Index1的所述预设位和所述Tag在所述Set1和所述Set2的Cache Line中查找匹配的Cache Line,包括:
根据所述Index1的所述预设位和所述Tag在所述Set1的n路Cache Line中查找匹配的Cache Line;
若没有匹配的Cache Line,则在所述Set2的n路Cache Line中查找匹配的Cache Line。
再进一步地,所述主存地址包括内存地址或系统地址。
再进一步地,所述Index1的所述预设位为所述Index1的最高位。
可理解的是,Cache 20中各模块的功能可对应参考上述图2的方法实施例中的具体实现方式,这里不再赘述。
本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的任意一种高速缓冲存储器处理方法的部分或全部步骤。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可能可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以为个人计算机、服务器或者网络设备等,具体可以是计算机设备中的处理器)执行本发明各个实施例上述方法的全部或部分步骤。其中,而前述的存储介质可包括:U盘、移动硬盘、磁碟、光盘、只读存储器(英文:Read-Only Memory,缩写:ROM)或者随机存取存储器(英文:Random Access Memory,缩写:RAM)等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (30)
1.一种高速缓冲存储器处理方法,应用于n路组相联Cache中,所述Cache包括多个缓存组Set,每个Set中包含n个缓存行Cache Line,所述Cache Line中包含缓存标签Cache Tag;任意一个主存地址包括标签Tag和索引Index,所述主存地址和所述Cache之间的访存地址的映射关系为,所述主存地址通过所述Index被缓存到所述Cache中与所述Index唯一对应的Set中的任意一个CacheLine中,并将所述Tag写入到缓存的Cache line的Cache Tag中;其特征在于,包括:
Cache接收CPU发送的需要访问的主存地址,所述主存地址包括标签Tag和第一索引Index1,所述Cache为n路组相联,n是大于0的整数;
查找所述Index1对应的第一组Set1,以及查找第二索引Index2对应的第二组Set2,其中,所述Index2为对所述Index1的预设位取反后的值;
在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,其中,所述Set1和所述Set2的Cache line共有2n路,所述匹配的Cache Line的缓存标签Cache Tag由地址位和标识位组成,所述地址位与所述Tag一致,且所述标识位与所述Index1的所述预设位一致。
2.如权利要求1所述的方法,其特征在于,所述方法,还包括:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,并且,所述Set1中无空闲位置且所述Set2中有空闲位置时,将所述主存地址的Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述空闲位置中。
3.如权利要求1所述的方法,其特征在于,所述在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,包括:
将所述Tag进行缩位运算,得到缩位后的Tag;
分别对所述Set1和所述Set2的Cache Line中的存储标签Cache Tag中的地址位进行所述缩位运算得到缩位后的地址位;
在所述2n路Cache Line中查找出所述缩位后的地址位与所述缩位后的Tag相同的Cache Line;
根据所述Index1的所述预设位和所述Tag在所述相同的Cache Line中查找匹配的Cache Line。
4.如权利要求3所述的方法,其特征在于,所述根据所述Index1的所述预设位和所述Tag在所述相同的Cache Line中查找匹配的Cache Line,包括:
根据所述Index1的所述预设位和所述Tag在所述Set1中的所述相同的CacheLine中查找匹配的Cache Line;
当未查找出匹配的Cache Line时,则在所述Set2中的所述相同的Cache Line中查找匹配的Cache Line。
5.如权利要求1-4任意一项所述的方法,其特征在于,所述方法还包括:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1和所述Set2中均无空闲位置时,优先在所述Set1中的Cache Line中进行替换,以写入所述主存地址。
6.如权利要求5所述的方法,其特征在于,所述优先在所述Set1中的CacheLine中进行替换,包括:
优先在所述Set1中的Cache Line中的Cache Tag的标识位为所述Index2的Cache line中进行替换。
7.如权利要求1-6任意一项所述的方法,其特征在于,所述方法还包括:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1中有空闲位置时,将所述Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述Set1的空闲位置中。
8.如权利要求1所述的方法,其特征在于,所述在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,包括:
根据所述Index1的所述预设位和所述Tag在所述Set1的n路Cache Line中查找匹配的Cache Line;
若没有匹配的Cache Line,则在所述Set2的n路Cache Line中查找匹配的Cache Line。
9.如权利要求1-8任意一项所述的方法,其特征在于,所述主存地址包括内存地址或系统地址。
10.如权利要求1-9任意一项所述的方法,其特征在于,所述Index1的所述预设位为所述Index1的最高位。
11.一种高速缓冲存储器处理装置,其特征在于,包括:
接收模块,用于接收CPU发送的需要访问的主存地址,所述主存地址包括标签Tag和第一索引Index1,所述Cache为n路组相联,n是大于0的整数;
第一映射模块,用于查找所述Index1对应的第一组Set1,以及查找第二索引Index2对应的第二组Set2,其中,所述Index2为对所述Index1的预设位取反后的值;
第二映射模块,用于在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,其中,所述Set1和所述Set2的Cache line共有2n路,所述匹配的Cache Line的缓存标签Cache Tag由地址位和标识位组成,所述地址位与所述Tag一致,且所述标识位与所述Index1的所述预设位一致。
12.如权利要求11所述的装置,其特征在于,所述装置,还包括:
第一处理模块,用于当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,并且,所述Set1中无空闲位置且所述Set2中有空闲位置时,将所述主存地址的Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述空闲位置中。
13.如权利要求11所述的装置,其特征在于,所述第二映射模块,包括:
第一运算单元,用于将所述Tag进行缩位运算,得到缩位后的Tag;
第二运算单元,用于分别对所述Set1和所述Set2的Cache Line中的存储标签Cache Tag中的地址位进行所述缩位运算得到缩位后的地址位;
第一映射单元,用于在所述2n路Cache Line中查找出所述缩位后的地址位与所述缩位后的Tag相同的Cache Line;
第二映射单元,用于根据所述Index1的所述预设位和所述Tag在所述相同的Cache Line中查找匹配的Cache Line。
14.如权利要求13所述的装置,其特征在于,所述第二映射单元,包括:
第一查找单元,用于根据所述Index1的所述预设位和所述Tag在所述Set1中的所述相同的Cache Line中查找匹配的Cache Line;
第二查找单元,用于当未查找出匹配的Cache Line时,则在所述Set2中的所述相同的Cache Line中查找匹配的Cache Line。
15.如权利要求11-14任意一项所述的装置,其特征在于,所述装置还包括:
第二处理模块,用于当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1和所述Set2中均无空闲位置时,优先在所述Set1中的Cache Line中进行替换,以写入所述主存地址。
16.如权利要求15所述的装置,其特征在于,所述第二处理模块,具体用于:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1和所述Set2中均无空闲位置时,优先在所述Set1中的Cache Line中的Cache Tag的标识位为所述Index2的Cache line中进行替换。
17.如权利要求11-16任意一项所述的装置,其特征在于,所述装置还包括:
第三处理模块,用于当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1中有空闲位置时,将所述Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述Set1的空闲位置中。
18.如权利要求11所述的装置,其特征在于,所述第二映射模块,包括:
第三映射单元,用于根据所述Index1的所述预设位和所述Tag在所述Set1的n路Cache Line中查找匹配的Cache Line;
第四映射单元,用于若没有匹配的Cache Line,则在所述Set2的n路CacheLine中查找匹配的Cache Line。
19.如权利要求11-18任意一项所述的装置,其特征在于,所述主存地址包括内存地址或系统地址。
20.如权利要求11-19任意一项所述的装置,其特征在于,所述Index1的所述预设位为所述Index1的最高位。
21.一种高速缓冲存储器Cache,其特征在于,包括:输入单元、输出单元、存储单元和控制单元;
其中,所述存储单元用于存储程序代码,所述控制单元用于调用所述存储单元存储的程序代码执行如下步骤:
通过所述输入单元接收CPU发送的需要访问的主存地址,所述主存地址包括标签Tag和第一索引Index1,所述Cache为n路组相联,n是大于0的整数;
查找所述Index1对应的第一组Set1,以及查找第二索引Index2对应的第二组Set2,其中,所述Index2为对所述Index1的预设位取反后的值;
在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,其中,所述Set1和所述Set2的Cache line共有2n路,所述匹配的Cache Line的缓存标签Cache Tag由地址位和标识位组成,所述地址位与所述Tag一致,且所述标识位与所述Index1的所述预设位一致。
22.如权利要求21所述的Cache,其特征在于,所述控制单元还用于:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,并且,所述Set1中无空闲位置且所述Set2中有空闲位置时,将所述主存地址的Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述空闲位置中。
23.如权利要求21所述的Cache,其特征在于,所述控制单元用于在所述Set1和所述Set2的缓存行Cache Line中查找匹配的Cache Line,具体为:
将所述Tag进行缩位运算,得到缩位后的Tag;
分别对所述Set1和所述Set2的Cache Line中的存储标签Cache Tag中的地址位进行所述缩位运算得到缩位后的地址位;
在所述2n路Cache Line中查找出所述缩位后的地址位与所述缩位后的Tag相同的Cache Line;
根据所述Index1的所述预设位和所述Tag在所述相同的Cache Line中查找匹配的Cache Line。
24.如权利要求23所述的Cache,其特征在于,所述控制单元用于根据所述Index1的所述预设位和所述Tag在所述相同的Cache Line中查找匹配的CacheLine,具体为:
根据所述Index1的所述预设位和所述Tag在所述Set1中的所述相同的CacheLine中查找匹配的Cache Line;
当未查找出匹配的Cache Line时,则在所述Set2中的所述相同的Cache Line中查找匹配的Cache Line。
25.如权利要求21-24任意一项所述的Cache,其特征在于,所述控制单元,还用于:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1和所述Set2中均无空闲位置时,优先在所述Set1中的Cache Line中进行替换,以写入所述主存地址。
26.如权利要求25所述的Cache,其特征在于,所述控制单元,用于优先在所述Set1中的Cache Line中进行替换,包括:
优先在所述Set1中的Cache Line中的Cache Tag的标识位为所述Index2的Cache line中进行替换。
27.如权利要求21-26任意一项所述的Cache,其特征在于,所述控制单元,还用于:
当所述Set1和所述Set2中的Cache Line中均未有所述匹配的Cache Line,且所述Set1中有空闲位置时,将所述Tag作为Cache Tag的地址位,并将所述Index1的所述预设位作为Cache Tag的标识位写入到所述Set1的空闲位置中。
28.如权利要求21所述的Cache,其特征在于,所述控制单元用于根据所述Index1的所述预设位和所述Tag在所述Set1和所述Set2的Cache Line中查找匹配的Cache Line,包括:
根据所述Index1的所述预设位和所述Tag在所述Set1的n路Cache Line中查找匹配的Cache Line;
若没有匹配的Cache Line,则在所述Set2的n路Cache Line中查找匹配的Cache Line。
29.如权利要求21-28任意一项所述的Cache,其特征在于,所述主存地址包括内存地址或系统地址。
30.如权利要求21-29任意一项所述的Cache,其特征在于,所述Index1的所述预设位为所述Index1的最高位。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610190617.3A CN107291630B (zh) | 2016-03-30 | 2016-03-30 | 一种高速缓冲存储器处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610190617.3A CN107291630B (zh) | 2016-03-30 | 2016-03-30 | 一种高速缓冲存储器处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107291630A true CN107291630A (zh) | 2017-10-24 |
CN107291630B CN107291630B (zh) | 2020-08-25 |
Family
ID=60087118
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610190617.3A Active CN107291630B (zh) | 2016-03-30 | 2016-03-30 | 一种高速缓冲存储器处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107291630B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111602377A (zh) * | 2017-12-27 | 2020-08-28 | 华为技术有限公司 | 高速缓存中资源调整方法、数据访问方法及装置 |
CN113641596A (zh) * | 2021-10-18 | 2021-11-12 | 北京壁仞科技开发有限公司 | 缓存管理方法、缓存管理装置、处理器 |
WO2022021177A1 (zh) * | 2020-07-30 | 2022-02-03 | 华为技术有限公司 | 缓存系统、方法和芯片 |
CN114860785A (zh) * | 2022-07-08 | 2022-08-05 | 深圳云豹智能有限公司 | 缓存数据处理系统、方法、计算机设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1532709A (zh) * | 2003-03-20 | 2004-09-29 | ���µ�����ҵ��ʽ���� | 数据存储器高速缓存装置及数据存储器高速缓存系统 |
CN1552025A (zh) * | 2002-03-22 | 2004-12-01 | 英特尔公司 | 高速缓存中上下文标识符的使用 |
US20060179231A1 (en) * | 2005-02-07 | 2006-08-10 | Advanced Micron Devices, Inc. | System having cache memory and method of accessing |
CN103019959B (zh) * | 2012-11-21 | 2016-05-04 | 中国科学院声学研究所 | 一种指令高速缓冲存储器 |
-
2016
- 2016-03-30 CN CN201610190617.3A patent/CN107291630B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1552025A (zh) * | 2002-03-22 | 2004-12-01 | 英特尔公司 | 高速缓存中上下文标识符的使用 |
CN1532709A (zh) * | 2003-03-20 | 2004-09-29 | ���µ�����ҵ��ʽ���� | 数据存储器高速缓存装置及数据存储器高速缓存系统 |
US20060179231A1 (en) * | 2005-02-07 | 2006-08-10 | Advanced Micron Devices, Inc. | System having cache memory and method of accessing |
CN103019959B (zh) * | 2012-11-21 | 2016-05-04 | 中国科学院声学研究所 | 一种指令高速缓冲存储器 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111602377A (zh) * | 2017-12-27 | 2020-08-28 | 华为技术有限公司 | 高速缓存中资源调整方法、数据访问方法及装置 |
WO2022021177A1 (zh) * | 2020-07-30 | 2022-02-03 | 华为技术有限公司 | 缓存系统、方法和芯片 |
CN115698964A (zh) * | 2020-07-30 | 2023-02-03 | 华为技术有限公司 | 缓存系统、方法和芯片 |
CN113641596A (zh) * | 2021-10-18 | 2021-11-12 | 北京壁仞科技开发有限公司 | 缓存管理方法、缓存管理装置、处理器 |
WO2023066124A1 (zh) * | 2021-10-18 | 2023-04-27 | 上海壁仞智能科技有限公司 | 缓存管理方法、缓存管理装置、处理器 |
CN114860785A (zh) * | 2022-07-08 | 2022-08-05 | 深圳云豹智能有限公司 | 缓存数据处理系统、方法、计算机设备和存储介质 |
CN114860785B (zh) * | 2022-07-08 | 2022-09-06 | 深圳云豹智能有限公司 | 缓存数据处理系统、方法、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN107291630B (zh) | 2020-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10706101B2 (en) | Bucketized hash tables with remap entries | |
CN107168657B (zh) | 一种基于分布式块存储的虚拟磁盘分层缓存设计方法 | |
CN107515901B (zh) | 一种链式日志存储结构及其哈希索引结构、数据操作方法及服务器、介质 | |
JP6356675B2 (ja) | 集約/グループ化動作:ハッシュテーブル法のハードウェア実装 | |
CN102792285B (zh) | 用于处理数据的装置和方法 | |
CN102662869B (zh) | 虚拟机中的内存访问方法和装置及查找器 | |
KR102437775B1 (ko) | 효율적인 맵핑을 위한 페이지 캐시 장치 및 방법 | |
CN109582593B (zh) | 一种基于计算的ftl地址映射读、写方法 | |
CN107291630A (zh) | 一种高速缓冲存储器处理方法及装置 | |
CN105117417A (zh) | 一种读优化的内存数据库Trie树索引方法 | |
CA2766161A1 (en) | Scalable indexing in a non-uniform access memory | |
CN101510176B (zh) | 通用操作系统对cpu二级缓存访问的控制方法 | |
CN104809179A (zh) | 访问哈希表的装置和方法 | |
CN109542814A (zh) | 通过pci-express的p2p连接在存储设备之间传输数据的方法和系统 | |
US20130297877A1 (en) | Managing buffer memory | |
CN108959113A (zh) | 用于闪存感知堆存储器管理的方法和系统 | |
US8468297B2 (en) | Content addressable memory system | |
KR20230026946A (ko) | 해싱을 사용하는 키 밸류 스토리지 장치 및 그것의 동작 방법 | |
CN103077198B (zh) | 一种操作系统及其文件缓存定位方法 | |
CN115033185A (zh) | 访存处理方法和装置、存储装置、芯片、板卡、电子设备 | |
CN115407933A (zh) | 基于非易失内存的文件元数据存储方法与系统 | |
CN114637700A (zh) | 针对目标虚拟地址的地址转换方法、处理器及电子设备 | |
CN100487697C (zh) | 一种应用改进的哈希方法进行查找的方法 | |
CN107967306B (zh) | 一种存储系统中关联块的快速挖掘方法 | |
CN112148638A (zh) | 用于存储器页的粒度分配的页表 |
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 |