一种缓存刷新方法和装置制造方法

文档序号:6507523阅读:159来源:国知局
一种缓存刷新方法和装置制造方法
【专利摘要】本发明的实施例提供一种缓存刷新方法和装置,涉及计算机领域,能够实现通过一条指令一次刷新多行缓存,从而降低了缓存的访问次数,解决了缓存刷新速度慢、功耗高的问题。其方法为:根据刷新指令确定待刷新的缓存组的索引;所述刷新指令包括基地址寄存器操作数和位掩码,所述缓存组中包括至少两行缓存;根据所述索引访问缓存标签阵列,获取所述索引对应的多路缓存标签,其中缓存标签为该缓存标签所关联的一行缓存的地址的高位;根据所述位掩码的指示将所述索引对应的多路缓存标签与所述物理地址进行比较,根据比较结果输出命中信号;将所述命中信号在有效缓存阵列中命中的缓存设置为无效。本发明实施例用于缓存刷新。
【专利说明】一种缓存刷新方法和装置

【技术领域】
[0001]本发明涉及计算机领域,尤其涉及一种缓存刷新方法和装置。

【背景技术】
[0002]缓存(Cache)是临时文件交换区,计算机通常会将存储器(比如内存)中提取出来临时数据放在缓存里,以方便CPU (Central Processing Unit,中央处理器)读取,由于缓存中保存的是内存中数据的备份,当内存的数据发生变化时,为了保证缓存数据和内存数据的一致性,需要对缓存进行刷新工作。
[0003]在现有技术中,刷新一行缓存是通过将该行缓存设置为无效来实现,具体的,在一行缓存中,缓存中的数据与该行缓存是否有效是分别来管理的,通常对于每行缓存都设置有对应的有效位,通过该有效位就可以设置一行缓存是否为无效,比如,可以通过将一行缓存对应的有效位的值设置为0,则该行缓存就被设置为无效了,也就是实现了该行缓存的刷新。但是目前一条刷新指令只能刷新一行缓存,因此,如果要刷新大片缓存区域,需要通过一个循环来实现刷新多行缓存,这样无法实现快速的按需刷新,而且刷新多行需要显式的使用多条刷新一行的指令来实现,速度慢、功耗高。


【发明内容】

[0004]本发明的实施例提供一种缓存刷新方法和装置,能够一次刷新多行缓存,解决了缓存刷新速度慢、功耗高的问题。
[0005]为达到上述目的,本发明的实施例采用如下技术方案:
[0006]第一方面,提供一种缓存刷新方法,所述方法包括:
[0007]根据刷新指令确定待刷新的缓存组的索引;所述刷新指令包括位掩码,所述缓存组中包括至少两行缓存;
[0008]根据所述索引访问缓存标签阵列,获取所述索引对应的多路缓存标签,其中缓存标签为该缓存标签所关联的一行缓存的地址的高位;
[0009]根据所述位掩码的指示将所述索引对应的多路缓存标签与所述物理地址进行比较,根据比较结果输出命中信号,所述命中信号包括命中和未命中;
[0010]将所述命中信号在有效缓存阵列中命中的缓存设置为无效。
[0011]结合第一方面,在第一种可能的实现方式中,在将所述命中信号在有效缓存阵列中命中缓存设置为无效之前,所述方法还包括:
[0012]判断所述命中信号在有效缓存阵列中命中的缓存是否为脏缓存;
[0013]若所述命中信号在有效缓存阵列中命中的缓存是脏缓存,则将所述命中信号在有效缓存阵列中命中的缓存进行写回处理,而后将所述命中信号在有效缓存阵列中命中的缓存设置为无效;
[0014]若所述命中信号在有效缓存阵列中命中的缓存不是脏缓存,则直接执行所述将所述命中信号在有效缓存阵列中命中的缓存设置为无效。
[0015]结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述刷新指令还包括基地址寄存器操作数;
[0016]所述根据刷新指令确定待刷新的缓存组的索引包括:
[0017]当所述刷新指令为单组刷新指令时,将所述刷新指令中的基地址寄存器操作数所指示的缓存组的索引确定为所述待刷新的缓存组的索引;或
[0018]当所述刷新指令为区域刷新指令时,将所述刷新指令中的基地址寄存器操作数所指示的缓存组的索引确定为所述待刷新的缓存组的起始索引。
[0019]结合第一方面或第一方面的第一种可能的实现方式,在第三种可能的实现方式中,所述根据所述索引访问缓存标签阵列,获取所述索引对应的多路缓存标签包括:
[0020]遍历缓存标签阵列中的每个缓存标签的标识位,其中每个缓存标签的标识位设置有索引;
[0021]查找标识位上的索引与所述待刷新的缓存组的索引相同缓存标签,得到所述待刷新的缓存组的索引对应的多路缓存标签。
[0022]结合第一方面或第一方面的第一种可能的实现方式,在第四种可能的实现方式中,所述将所述命中信号在有效缓存阵列中命中的缓存设置为无效包括:
[0023]根据所述索引访问所述有效缓存阵列,确定所述待刷新的缓存组在所述有效缓存阵列中对应的多行缓存;
[0024]将所述命中信号在所述多行缓存中命中的缓存设置为无效。
[0025]结合第一方面或第一方面的第一种可能的实现方式,在第五种可能的实现方式中,所述根据所述位掩码的指示将所述索引对应的多路缓存标签与所述物理地址进行比较,根据比较结果输出命中信号包括:
[0026]将所述索引对应的多路缓存标签分别与所述物理地址进行比较,其中所述位掩码用于指示不需要比较的位,所述物理地址是根据所述索引查找页表缓存中的页表后得到的与所述索引对应的物理地址;
[0027]若缓存标签与所述物理地址相同,则输出与该缓存标签对应的命中信号,所述命中信号为未命中,若缓存标签与所述物理地址不同,则输出与该缓存标签对应的命中信号,所述命中信号为命中。
[0028]结合第一方面的第二种可能的实现方式,在第六种可能的实现方式中,当所述刷新指令为区域刷新指令时,所述刷新指令还包括待刷新的缓存组中的刷新起始行的地址和刷新缓存的行数,所述刷新起始行的地址和刷新缓存的行数用于确定所有需要刷新的缓存。
[0029]结合第一方面的第六种可能的实现方式,在第七种可能的实现方式中,在执行完一个缓存组的刷新后,所述方法还包括:
[0030]将所述起始索引加1,并执行所述起始索引加I后所对应的缓存组的刷新流程,直至所有需要刷新的缓存组全部完成刷新为止。
[0031]第二方面,提供一种缓存刷新装置,所述装置包括:位掩码寄存器、索引控制器、物理地址缓存、缓存标签阵列、有效缓存阵列以及至少一个比较器;
[0032]所述索引控制器用于根据刷新指令确定待刷新的缓存组的索引;所述刷新指令包括所述位掩码寄存器中的位掩码,所述缓存组中包括至少两行缓存;
[0033]所述缓存标签阵列中包括多路缓存标签,所述缓存标签阵列根据所述索引控制器确定的待刷新的缓存组的索引获取所述索引对应的多路缓存标签,其中缓存标签为该缓存标签所关联的一行缓存的地址的高位;
[0034]所述至少一个比较器用于根据所述位掩码的指示将所述索引对应的多路缓存标签与所述物理地址缓存中的物理地址进行比较,根据比较结果输出命中信号,所述命中信号包括命中和未命;
[0035]所述有效缓存阵列中包括多行有效缓存,所述有效缓存阵列用于将所述命中信号在有效缓存阵列中命中的缓存设置为无效。
[0036]结合第二方面,在第一种可能的实现方式中,所述装置还包括:写回控制模块,所述写回控制模块包括写回控制器和写回缓存;
[0037]所述有效缓存阵列还用于判断所述命中信号在有效缓存阵列中命中的缓存是否为脏缓存;
[0038]若所述命中信号在有效缓存阵列中命中的缓存是脏缓存,则所述写回控制模块将所述命中信号在有效缓存阵列中命中的缓存进行写回处理,而后所述有效缓存阵列将所述命中信号在有效缓存阵列中命中的缓存设置为无效;
[0039]若所述命中信号在有效缓存阵列中命中的缓存不是脏缓存,则所述有效缓存阵列直接执行所述将所述命中信号在有效缓存阵列中命中的缓存设置为无效。
[0040]结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述装置还包括:基地址寄存器;所述刷新指令还包括基地址寄存器中的基地址寄存器操作数;
[0041]所述索引控制器具体用于:
[0042]当所述刷新指令为单组刷新指令时,将所述刷新指令中的基地址寄存器操作数所指示的缓存组的索引确定为所述待刷新的缓存组的索引;或
[0043]当所述刷新指令为区域刷新指令时,将所述刷新指令中的基地址寄存器操作数所指示的缓存组的索引确定为所述待刷新的缓存组的起始索引。
[0044]结合第二方面或第二方面的第一种可能的实现方式,在第三种可能的实现方式中,所述缓存标签阵列具体用于:
[0045]遍历缓存标签阵列中的每个缓存标签的标识位,其中每个缓存标签的标识位设置有索引;
[0046]查找标识位上的索引与所述待刷新的缓存组的索引相同缓存标签,得到所述待刷新的缓存组的索引对应的多路缓存标签。
[0047]结合第二方面或第二方面的第一种可能的实现方式,在第四种可能的实现方式中,所述有效缓存阵列具体用于:
[0048]根据所述索引确定所述待刷新的缓存组在所述有效缓存阵列中对应的多行缓存;
[0049]将所述命中信号在所述多行缓存中命中的缓存设置为无效。
[0050]结合第二方面或第二方面的第一种可能的实现方式,在第五种可能的实现方式中,所述装置还包括:页表缓存,用于存储页表,所述页表为虚拟地址到物理地址的转换关系;
[0051]所述至少一个比较器具体用于:
[0052]将所述索引对应的多路缓存标签分别与所述物理地址进行比较,其中所述位掩码用于指示不需要比较的位,所述物理地址是根据所述索引查找页表缓存中的页表后得到的与所述索引对应的物理地址;
[0053]若缓存标签与所述物理地址相同,则输出与该缓存标签对应的命中信号,所述命中信号为未命中,若缓存标签与所述物理地址不同,则输出与该缓存标签对应的命中信号,所述命中信号为命中。
[0054]结合第二方面的第二种可能的实现方式,在第六种可能的实现方式中,当所述刷新指令为区域刷新指令时,所述刷新指令还包括待刷新的缓存组中的刷新起始行的地址和刷新缓存的行数,所述刷新起始行的地址和刷新缓存的行数用于确定所有需要刷新的缓存。
[0055]结合第二方面的第六种可能的实现方式,在第七种可能的实现方式中,在执行完一个缓存组的刷新后,所述起始索引加1,以便执行所述起始索引加I后所对应的缓存组的刷新流程,直至所有需要刷新的缓存组全部完成刷新为止。
[0056]本发明的实施例提供一种缓存刷新方法和装置,提供一种新的刷新指令,该刷新指令定义了起始刷新的缓存组,缓存组中包括多行缓存;当区域刷新时,该刷新指令定义了起始刷新的缓存组,并且还定义了起始刷新的一行缓存以及刷新缓存的行数,能够实现通过一条指令一次刷新多行缓存,从而降低了缓存的访问次数,解决了缓存刷新速度慢、功耗高的问题。

【专利附图】

【附图说明】
[0057]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0058]图1为本发明实施例提供的一种缓存刷新方法的流程示意图;
[0059]图2为本发明实施例提供的另一种缓存刷新方法的流程示意图
[0060]图3为本发明另一实施例提供的一种缓存刷新方法的流程示意图;
[0061]图4为本发明实施例提供的一种缓存刷新装置的结构示意图;
[0062]图5为本发明实施例提供的另一种缓存刷新装置的结构示意图。

【具体实施方式】
[0063]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0064]本发明实施例提供一种缓存刷新方法,如图1所示,该方法包括:
[0065]101、根据刷新指令确定待刷新的缓存组的索引,其中刷新指令包括位掩码,缓存组中包括至少两行缓存。
[0066]102、根据索引访问缓存标签阵列,获取索引对应的多路缓存标签,其中缓存标签为该缓存标签所关联的一行缓存的地址的高位。
[0067]103、根据位掩码的指示将索引对应的多路缓存标签与物理地址进行比较,根据比较结果输出命中信号,命中信号包括命中和未命中。
[0068]104、将命中信号在有效缓存阵列中命中的缓存设置为无效。
[0069]上述方法适用于写参透(Write Through)机制,本发明实施例还提供另一种缓存刷新方法,可以适用于写回(Write Back)机制,如图2所示,在执行步骤104之前,该方法还可以包括:
[0070]105、判断命中信号在有效缓存阵列中命中的缓存是否为脏缓存。其中,脏缓存(Dirty Cache)中保存的是脏数据,脏数据是相对于原数据而言的,是指被修改过的,与原数据不一样的数据。
[0071]若命中/[目号在有效缓存阵列中命中的缓存是脏缓存,则执行步骤106,而后执行步骤104 ;若命中信号在有效缓存阵列中命中的缓存不是脏缓存,则直接执行步骤104。
[0072]106、将命中信号在有效缓存阵列中命中的缓存进行写回处理。
[0073]本发明的实施例提供一种缓存刷新方法,提供一种新的刷新指令,该刷新指令定义了起始刷新的缓存组,缓存组中包括多行缓存;当区域刷新时,该刷新指令定义了起始刷新的缓存组,并且还定义了刷新起始行以及刷新缓存的行数,能够实现通过一条指令一次刷新多行缓存,从而降低了缓存的访问次数,解决了缓存刷新速度慢、功耗高的问题。
[0074]为了使本领域技术人员能够更清楚地理解本发明实施例提供的技术方案,下面通过具体的实施例,对本发明实施例提供的一种缓存刷新方法进行详细说明,如图3所示,该方法包括:
[0075]301、根据刷新指令确定待刷新的缓存组的索引(Index)。其中,刷新指令包括基地址寄存器操作数和位掩码。其中,缓存组(Cache_Set)可以理解为包括至少两个缓存(Cache_line)的缓存集合。
[0076]刷新指令可以为单组刷新指令,或者为区域刷新指令。
[0077]示例性的,当刷新指令为单组刷新指令时,刷新指令可以为:cflush base_addrmask_off_bits,其中,cflush表示刷新,base_addr是基地址寄存器的操作数,存储在基地址寄存器中,mask_0ff_bits为位掩码,存储在位掩码寄存器中。其中,基地址寄存器的操作数用于指示缓存组的索引,还用来指示缓存标签阵列(Cache Tag Array)中缓存标签的索引,其中,缓存标签是指该缓存标签所关联的一行缓存的地址的高位;而位掩码用于指示缓存标签中不需要比较的位。
[0078]因此,当刷新指令为单组刷新指令时根据刷新指令确定待刷新的缓存组的索引具体可以为确定baSe_addr指示的索引为待刷新的缓存组的索引。
[0079]当刷新指令为区域刷新指令时,刷新指令可以为:cflush_range base_addrmask_off_bits, cflush_range表示区域刷新(可以理解为刷新多行缓存),base_addr是基地址寄存器的操作数,存储在基地址寄存器中,mask_off_bits为位掩码,存储在位掩码寄存器中。其中,基地址寄存器的操作数用于指示缓存组的索引,还用来指示缓存标签阵列中缓存标签的索引,其中,缓存标签是指该缓存标签所关联的一行缓存的地址的高位;而位掩码用于指示缓存标签中不需要比较的位。
[0080]除此之外,cflush_range base_addr mask_off_bits指令还定义了待刷新的缓存组中的缓存刷新的起始行的地址,简称起始地址,以及刷新缓存的行数。
[0081]其中,起始地址是由base_addr和mask_off_bits定义的,具体的可以表示为:base_addr& (?(cache_way_size*2mask-°ff-blts_l)),刷新缓存的行数以表不为:cache_way_size*〗.15—°ff—bits。
[0082]因此,当刷新指令为区域刷新指令时根据刷新指令确定待刷新的缓存组的索引具体可以为确定baSe_addr指示的索引为待刷新的缓存组的起始索引。通常,起始索引为0,该起始索引在每完成一个刷新周期,也就是一个缓存组的刷新后加1,直到索引为set_size-1为止,set_size为需要刷新的缓存组的总数。
[0083]302、根据确定的索引访问缓存标签阵列,获取索引对应的多路缓存标签。
[0084]示例性的,可以预先在缓存标签阵列中的每个缓存标签的标识位上都设置索引,上述标识位可以采用下标的形式。
[0085]当访问缓存标签阵列时,遍历缓存标签阵列中的每个缓存标签的下标,查找下标上的索引与待刷新的缓存组的索引相同缓存标签,从而得到与待刷新的缓存组的索引相同的多路缓存标签,这些缓存标签即为待刷新的缓存组的索引对应的多路缓存标签。
[0086]303、根据位掩码的指示将索引对应的多路缓存标签与物理地址进行比较,根据比较结果输出命中信号。
[0087]其中,在比较之前需要先确定待比较的物理地址,具体的,首先通过上述索引访问页表缓存中储存的页表,该页表是虚拟地址到物理地址的转换关系,因此查找页表就可以得到索引对应的物理地址。页表缓存也可以称为旁路转换缓冲(Translat1n lookasidebuffer, TLB)ο
[0088]而后,将将索引对应的多路缓存标签与物理地址进行比较,其中,由于位掩码指示了缓存标签中不需要比较的位,因此在比较过程中不比较被位掩码掩掉的位。
[0089]根据比较结果,若某一路缓存标签与得到的物理地址相同,则输出与该缓存标签对应的命中信号,该命中信号为未命中,若某一路缓存标签与得到的物理地址不同,则输出与该缓存标签对应的命中信号,该命中信号为命中。
[0090]示例性的,若某一路缓存标签与得到的物理地址相同,则输出的命中信号为O ;若某一路缓存标签与得到的物理地址不同,则输出的命中信号为1,通过O和I分别表示未命中和命中。
[0091 ] 304、根据索引访问有效缓存阵列,确定待刷新的缓存组在有效缓存阵列中对应的多行缓存。
[0092]305、将命中信号在待刷新的缓存组在有效缓存阵列中对应的多行缓存中命中的缓存设置为无效。
[0093]这样就通过一条指令完成了一组缓存的刷新,上述方法适用于写参透(WriteThrough)机制,为了可以适用于写回(Write Back)机制,在步骤304之后还可以执行以下步骤:
[0094]306、判断命中信号在待刷新的缓存组在有效缓存阵列中对应的多行缓存中命中的缓存是否为脏缓存,若命中的缓存为脏缓存,则执行步骤307,而后执行步骤305 ;若命中的缓存不是脏缓存,则直接执行步骤305。
[0095]307、将命中信号在命中的缓存发送到写回队列。
[0096]进一步的,若步骤301中的刷新指令为单行刷新指令,则在一组缓存刷新完成后结束,若刷新指令为区域刷新指令,刷新指令中还可以包括刷新起始行的地址和刷新缓存的行数,其中刷新起始行的地址可以表示为base_addr& (?(CaChe_Way_SiZe*2mask-°ff-bits_l)),刷新缓存的行数可以表示为CaChe_Way_SiZe*2mask-°ff-bits,则在执行完一组缓存刷新后,将当前的缓存组的索引加I,具体的可以将指令cflush_range base_addr mask_off_bits中的base_addr指示的值加I,而后再次执行步骤302-307,直至所有需要刷新的缓存组全部完成刷新为止,即直至 base_addr& (?(cache_way_size*2mask-°ff-blts_l))和 cache_way_siZe*2mask-°ff-bits所定义的所有缓存都完成刷新。
[0097]本发明的实施例提供一种缓存刷新方法,提供一种新的刷新指令,该刷新指令定义了起始刷新的缓存组,缓存组中包括多行缓存;当区域刷新时,该刷新指令定义了起始刷新的缓存组,并且还定义了刷新起始行以及刷新缓存的行数,能够实现通过一条指令一次刷新多行缓存,从而降低了缓存的访问次数,解决了缓存刷新速度慢、功耗高的问题。
[0098]本发明实施例还提供一种缓存刷新装置01,包括:基地址寄存器011、位掩码寄存器012、索引控制器013、页表缓存014、物理地址缓存015、缓存标签阵列016、有效缓存阵列017以及至少一个比较器018 ;
[0099]具体的,各个元件的连接关系如图4所示:
[0100]基地址寄存器011的输出端连接索引控制器013的输入端和页表缓存014的输入端;
[0101]索引控制器013的输出端连接缓存标签阵列016的输入端和有效缓存阵列017的输入端;
[0102]页表缓存014的输出端连接物理地址缓存015的输入端,物理地址缓存015的输出端连接各比较器018的输入端;
[0103]位掩码寄存器012连接各比较器018的输入端,缓存标签阵列016的输出端连接各比较器018的输入端;
[0104]各比较器018的输出端连接有效缓存阵列017的输入端。
[0105]其中,
[0106]索引控制器013用于根据刷新指令确定待刷新的缓存组的索引;刷新指令包括基地址寄存器011中的基地址寄存器操作数和位掩码寄存器012中的位掩码,缓存组中包括至少两行缓存。
[0107]缓存标签阵列016中包括多路缓存标签,缓存标签阵列016根据索引控制器013确定的待刷新的缓存组的索引获取索引对应的多路缓存标签,其中缓存标签为该缓存标签所关联的一行缓存的地址的高位。
[0108]至少一个比较器018用于根据位掩码的指示将索引对应的多路缓存标签与物理地址缓存015中的物理地址进行比较,根据比较结果输出命中信号,命中信号包括命中和未命中。
[0109]有效缓存阵列017中包括多行有效缓存,有效缓存阵列017用于将命中信号在有效缓存阵列017中命中的缓存设置为无效。
[0110]可选的,如图5所示,缓存刷新装置01还可以包括:
[0111]写回控制模块019,写回控制模块包括写回控制器0191和写回缓存0192 ;其中,连接关系为:有效缓存阵列017的输出端连接写回控制模块019中写回控制器0191的输入端,写回控制器0191的输出端连接写回缓存0192。
[0112]有效缓存阵列017还用于判断命中信号在有效缓存阵列017中命中的缓存是否为脏缓存;
[0113]若命中信号在有效缓存阵列017中命中的缓存是脏缓存,则写回控制模块019将命中信号在有效缓存阵列017中命中的缓存进行写回处理,而后有效缓存阵列017将命中信号在有效缓存阵列017中命中的缓存设置为无效;
[0114]若命中信号在有效缓存阵列017中命中的缓存不是脏缓存,则有效缓存阵列017直接执行将命中信号在有效缓存阵列017中命中的缓存设置为无效。
[0115]可选的,当刷新指令为单组刷新指令时,索引控制器013具体用于:
[0116]将刷新指令中的基地址寄存器操作数所指示的缓存组的索引确定为待刷新的缓存组的索引。
[0117]当刷新指令为区域刷新指令时,索引控制器013具体用于:
[0118]将刷新指令中的基地址寄存器操作数所指示的缓存组的索引确定为待刷新的缓存组的起始索引。
[0119]可选的,缓存标签阵列016可以具体用于:
[0120]遍历缓存标签阵列016中的每个缓存标签的标识位,其中每个缓存标签的标识位设置有索引;
[0121]查找标识位上的索引与所述待刷新的缓存组的索引相同缓存标签,得到所述待刷新的缓存组的索引对应的多路缓存标签。
[0122]可选的,至少一个比较器018可以具体用于:
[0123]将索引对应的多路缓存标签分别与物理地址进行比较,其中位掩码用于指示不需要比较的位,物理地址是根据索引查找页表缓存014中的页表后得到的与索引对应的物理地址;其中,页表缓存014用于存储页表,页表为虚拟地址到物理地址的转换关系。
[0124]若缓存标签与物理地址相同,则输出与该缓存标签对应的命中信号,该命中信号为未命中;若缓存标签与物理地址不同,输出与该缓存标签对应的命中信号,该命中信号为命中。
[0125]可选的,有效缓存阵列017可以具体用于:
[0126]根据索引确定待刷新的缓存组在有效缓存阵列中对应的多行缓存;
[0127]将命中信号在多行缓存中命中的缓存设置为无效。
[0128]或者,有效缓存阵列017可以具体用于:
[0129]根据索引确定待刷新的缓存组在有效缓存阵列017中对应的多行缓存;
[0130]根据命中信号在多行缓存中命中的缓存上的脏缓存标志位确定命中信号在多行缓存中命中的缓存是否为脏缓存;
[0131]若命中信号在多行缓存中命中的缓存为脏缓存,则将命中信号在多行缓存中命中的缓存发送到写回控制器0191,以便写回控制器0191将命中信号在多行缓存中命中的缓存发送到写回缓存0192中的写回队列中,而后将命中信号在多行缓存中命中的缓存为无效。
[0132]可选的,若刷新指令为单行刷新指令,则缓存刷新装置01在一组缓存刷新完成后结束,若刷新指令为区域刷新指令,刷新指令中还可以包括刷新起始行的地址和刷新缓存的行数,其中刷新起始行的地址可以表示为base_addr& (?(CaChe_Way_SiZe*2mask-°ff-bits_l)),刷新缓存的行数可以表示为CaChe_Way_SiZe*2mask-°ff-bits,则缓存刷新装置01在一组缓存刷新完成后,将当前的缓存组的索引加I,具体的可以将指令cflush_range base_addr mask_off_bits中的base_addr指示的值加I,而后再次执行刷新流程,直至所有需要刷新的缓存组全部完成刷新为止,即直至base_addr& (?(cache_way_s i ze*2mask-0fOlts-1))和CaChe_Way_SiZe*2mask-°ff-bits所定义的所有缓存都完成刷新。
[0133]本发明的实施例提供一种缓存刷新装置,该缓存刷新装置通过一种新的刷新指令进行缓存刷新,该刷新指令定义了起始刷新的缓存组,缓存组中包括多行缓存;当区域刷新时,该刷新指令定义了起始刷新的缓存组,并且还定义了刷新起始行以及刷新缓存的行数,能够适用于写参透机制和写回机制,能够实现通过一条指令一次刷新多行缓存,从而降低了缓存的访问次数,解决了缓存刷新速度慢、功耗高的问题。
[0134]在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0135]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0136]另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
[0137]上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0138]以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【技术领域】的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
【权利要求】
1.一种缓存刷新方法,其特征在于,所述方法包括: 根据刷新指令确定待刷新的缓存组的索引;所述刷新指令包括位掩码,所述缓存组中包括至少两行缓存; 根据所述索引访问缓存标签阵列,获取所述索引对应的多路缓存标签,其中缓存标签为该缓存标签所关联的一行缓存的地址的高位; 根据所述位掩码的指示将所述索引对应的多路缓存标签与所述物理地址进行比较,根据比较结果输出命中信号,所述命中信号包括命中和未命中; 将所述命中信号在有效缓存阵列中命中的缓存设置为无效。
2.根据权利要求1所述的方法,其特征在于,在将所述命中信号在有效缓存阵列中命中缓存设置为无效之前,所述方法还包括: 判断所述命中信号在有效缓存阵列中命中的缓存是否为脏缓存; 若所述命中信号在有效缓存阵列中命中的缓存是脏缓存,则将所述命中信号在有效缓存阵列中命中的缓存进行写回处理,而后将所述命中信号在有效缓存阵列中命中的缓存设置为无效; 若所述命中信号在有效缓存阵列中命中的缓存不是脏缓存,则直接执行所述将所述命中信号在有效缓存阵列中命中的缓存设置为无效。
3.根据权利要求1或2所述的方法,其特征在于,所述刷新指令还包括基地址寄存器操作数; 所述根据刷新指令确定待刷新的缓存组的索引包括: 当所述刷新指令为单组刷新指令时,将所述刷新指令中的基地址寄存器操作数所指示的缓存组的索引确定为所述待刷新的缓存组的索引;或 当所述刷新指令为区域刷新指令时,将所述刷新指令中的基地址寄存器操作数所指示的缓存组的索引确定为所述待刷新的缓存组的起始索引。
4.根据权里要求1或2所述的方法,其特征在于,所述根据所述索引访问缓存标签阵列,获取所述索引对应的多路缓存标签包括: 遍历缓存标签阵列中的每个缓存标签的标识位,其中每个缓存标签的标识位设置有索弓I ; 查找标识位上的索引与所述待刷新的缓存组的索引相同缓存标签,得到所述待刷新的缓存组的索引对应的多路缓存标签。
5.根据权利要求1或2所述的方法,其特征在于,所述将所述命中信号在有效缓存阵列中命中的缓存设置为无效包括: 根据所述索引访问所述有效缓存阵列,确定所述待刷新的缓存组在所述有效缓存阵列中对应的多行缓存; 将所述命中信号在所述多行缓存中命中的缓存设置为无效。
6.根据权利要求1或2所述的方法,其特征在于,所述根据所述位掩码的指示将所述索引对应的多路缓存标签与所述物理地址进行比较,根据比较结果输出命中信号包括: 将所述索引对应的多路缓存标签分别与所述物理地址进行比较,其中所述位掩码用于指示不需要比较的位,所述物理地址是根据所述索引查找页表缓存中的页表后得到的与所述索引对应的物理地址; 若缓存标签与所述物理地址相同,则输出与该缓存标签对应的命中信号,所述命中信号为未命中,若缓存标签与所述物理地址不同,则输出与该缓存标签对应的命中信号,所述命中信号为命中。
7.根据权利要求3所述的方法,其特征在于,当所述刷新指令为区域刷新指令时,所述刷新指令还包括待刷新的缓存组中的刷新起始行的地址和刷新缓存的行数,所述刷新起始行的地址和刷新缓存的行数用于确定所有需要刷新的缓存。
8.根据权利要求7所述的方法,其特征在于,在执行完一个缓存组的刷新后,所述方法还包括: 将所述起始索引加1,并执行所述起始索引加1后所对应的缓存组的刷新流程,直至所有需要刷新的缓存组全部完成刷新为止。
9.一种缓存刷新装置,其特征在于,所述装置包括:位掩码寄存器、索引控制器、物理地址缓存、缓存标签阵列、有效缓存阵列以及至少一个比较器; 所述索引控制器用于根据刷新指令确定待刷新的缓存组的索引;所述刷新指令包括所述位掩码寄存器中的位掩码,所述缓存组中包括至少两行缓存; 所述缓存标签阵列中包括多路缓存标签,所述缓存标签阵列根据所述索引控制器确定的待刷新的缓存组的索引获取所述索引对应的多路缓存标签,其中缓存标签为该缓存标签所关联的一行缓存的地址的高位; 所述至少一个比较器用于根据所述位掩码的指示将所述索引对应的多路缓存标签与所述物理地址缓存中的物理地址进行比较,根据比较结果输出命中信号,所述命中信号包括命中和未命中; 所述有效缓存阵列中包括多行有效缓存,所述有效缓存阵列用于将所述命中信号在有效缓存阵列中命中的缓存设置为无效。
10.根据权利要求9所述的装置,其特征在于,还包括:写回控制模块,所述写回控制模块包括写回控制器和写回缓存; 所述有效缓存阵列还用于判断所述命中信号在有效缓存阵列中命中的缓存是否为脏缓存; 若所述命中信号在有效缓存阵列中命中的缓存是脏缓存,则所述写回控制模块将所述命中信号在有效缓存阵列中命中的缓存进行写回处理,而后所述有效缓存阵列将所述命中信号在有效缓存阵列中命中的缓存设置为无效; 若所述命中信号在有效缓存阵列中命中的缓存不是脏缓存,则所述有效缓存阵列直接执行所述将所述命中信号在有效缓存阵列中命中的缓存设置为无效。
11.根据权利要求9或10所述的装置,其特征在于,所述装置还包括:基地址寄存器;所述刷新指令还包括基地址寄存器中的基地址寄存器操作数; 所述索引控制器具体用于: 当所述刷新指令为单组刷新指令时,将所述刷新指令中的基地址寄存器操作数所指示的缓存组的索引确定为所述待刷新的缓存组的索引;或 当所述刷新指令为区域刷新指令时,将所述刷新指令中的基地址寄存器操作数所指示的缓存组的索引确定为所述待刷新的缓存组的起始索引。
12.根据权里要求9或10所述的装置,其特征在于,所述缓存标签阵列具体用于: 遍历缓存标签阵列中的每个缓存标签的标识位,其中每个缓存标签的标识位设置有索弓I ; 查找标识位上的索引与所述待刷新的缓存组的索引相同缓存标签,得到所述待刷新的缓存组的索引对应的多路缓存标签。
13.根据权利要求9或10所述的装置,其特征在于,所述有效缓存阵列具体用于: 根据所述索引确定所述待刷新的缓存组在所述有效缓存阵列中对应的多行缓存; 将所述命中信号在所述多行缓存中命中的缓存设置为无效。
14.根据权利要求9或10所述的装置,其特征在于,所述装置还包括:页表缓存,用于存储页表,所述页表为虚拟地址到物理地址的转换关系; 所述至少一个比较器具体用于: 将所述索引对应的多路缓存标签分别与所述物理地址进行比较,其中所述位掩码用于指示不需要比较的位,所述物理地址是根据所述索引查找页表缓存中的页表后得到的与所述索引对应的物理地址; 若缓存标签与所述物理地址相同,则输出与该缓存标签对应的命中信号,所述命中信号为未命中,若缓存标签与所述物理地址不同,则输出与该缓存标签对应的命中信号,所述命中信号为命中。
15.根据权利要求11所述的装置,其特征在于,当所述刷新指令为区域刷新指令时,所述刷新指令还包括待刷新的缓存组中的刷新起始行的地址和刷新缓存的行数,所述刷新起始行的地址和刷新缓存的行数用于确定所有需要刷新的缓存。
16.根据权利要求15所述的装置,其特征在于,在执行完一个缓存组的刷新后,所述起始索引加1,以便执行所述起始索引加1后所对应的缓存组的刷新流程,直至所有需要刷新的缓存组全部完成刷新为止。
【文档编号】G06F9/44GK104346295SQ201310348127
【公开日】2015年2月11日 申请日期:2013年8月9日 优先权日:2013年8月9日
【发明者】江涛, 张立新, 刘月吉, 张乾龙 申请人:华为技术有限公司, 中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1