CN106155922A - 失效处理方法、系统、sfb及访存失效装置 - Google Patents
失效处理方法、系统、sfb及访存失效装置 Download PDFInfo
- Publication number
- CN106155922A CN106155922A CN201510162049.1A CN201510162049A CN106155922A CN 106155922 A CN106155922 A CN 106155922A CN 201510162049 A CN201510162049 A CN 201510162049A CN 106155922 A CN106155922 A CN 106155922A
- Authority
- CN
- China
- Prior art keywords
- cache
- sfb
- row
- request
- invalidation request
- 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
Abstract
本发明提供一种失效处理方法、系统、SFB及访存失效装置。本发明提供的方法包括:一级cache在执行存储指令失效时,向SFB发送第一失效请求,并指示存储指令退出CPU当前运行程序的流水线;SFB将第一失效请求填充到SFB的cache行中;SFB在cache行填满时,向二级cache发送第一写权限请求;二级cache根据第一写权限请求执行cache一致性处理,并向cache行返回写权限标记,写权限标记用于指示SFB不修改cache行中的数据。本发明提供的方法解决了现有技术提供的失效处理方法,由于不需要向二级cache请求写权限的方式仅适用于单核处理器的系统中的,从而造成实用性较低的问题。
Description
技术领域
本发明涉及计算机技术,尤其涉及一种失效处理方法、系统、SFB及访存失效装置。
背景技术
目前,通常在处理器(Central Processing Unit,简称为:CPU)与内存之间设置多级高速缓冲存储器(cache)来降低存储延迟,并且采用cache一致性协议来维护多级cache之间数据的正确性。例如,一级cache在执行存储指令发生失效时,可以通过向二级cache发送写权限请求来指示该二级cache执行cache一致性处理,随后将写权限和该写权限请求对应的数据返还给一级cache。
论文《Avoiding Store Misses to Fully Modified Cache Blocks》提出一种可以提高一级cache失效时的处理效率的方式。上述论文提出了存储填充缓冲器(Store fill buffer,简称为:SFB)的概念,具体地,对一级cache设置一个并列的16项的SFB,该SFB中的cache行记录一级cache执行存储指令失效时发出的失效请求,该失效请求中可以携带有存储指令所要存储的数据,例如包括一级cache失效的地址、类型和该存储指令待写入的位置,当SFB中的某一cache行被失效请求填满时,则将该cache行直接填入一级cache,也就是说,二级cache并未参与一级cache失效时的处理,即该cache行填满后,并未向二级cache发送写权限请求;另外,若SFB中的某一cache行由于该SFB已满而被替换出,则取回这该cache行对应的数据,进行修改后填入一级cache。上述论文提供的方法在一级cache执行存储指令失效时,通过失效请求填充SFB的cache行直至填充满时的处理方式,可以减少一级cache和二级cache之间请求和交互的次数,从而提高了cache失效时的处理效率。
现有技术在一级cache失效时,将填充满的cache行直接填入一级cache中,不需要向二级cache请求写权限,然而,只有单核处理器的系统不会发生共享地址的情况,即不请求写权限也不会造成共享失败,因此,上述方法仅适用于单核处理器的系统中,从而造成该方法的实用性较低的问题。
发明内容
本发明提供一种失效处理方法、系统、SFB及访存失效装置,以解决现有技术在一级cache失效时,将填充满的cache行直接填入一级cache中,由于上述方法不需要向二级cache请求写权限,仅适用于单核处理器的系统中,从而造成该方法的实用性较低的问题。
第一方面,本发明提供一种失效处理方法,执行所述失效处理方法的系统,至少包括设置于处理器CPU与内存之间的一级高速缓冲存储器cache和二级cache,以及设置于所述一级cache和所述二级cache之间的存储填充缓冲器SFB,所述失效处理方法包括:
所述一级cache在执行存储指令失效时,向所述SFB发送第一失效请求,并指示所述存储指令退出所述CPU当前运行程序的流水线;
所述SFB将所述第一失效请求填充到所述SFB的cache行中;
所述SFB在所述cache行填满时,向所述二级cache发送第一写权限请求;
所述二级cache根据所述第一写权限请求执行cache一致性处理,并向所述cache行返回写权限标记,所述写权限标记用于指示所述SFB不修改所述cache行中的数据。
在第一方面的第一种可能的实现方式中,所述SFB的每个cache行中预置有对应的写标记位;则所述SFB将所述第一失效请求填充到所述SFB的cache行中之后,还包括:
所述SFB根据所述第一失效请求指示修改的数据在所述cache行中字节的位置,对所述cache行中待修改字节对应的写标记位的值进行置位;
则所述SFB向所述二级cache发送第一写权限请求之前,还包括:
所述SFB在所述cache行中写标记位的所有值均被置位时,确认所述cache行填满。
根据第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述cache行中具有已填入的第二失效请求,则所述SFB将所述第一失效请求填充到所述SFB的cache行中之后,还包括:
所述SFB根据所述cache行的写标记位和所述第二失效请求指示修改的数据,将所述第一失效请求与所述第二失效请求进行合并处理,以生成第三失效请求;和/或,
所述SFB将所述第一失效请求填充到所述SFB的cache行中之后,还包括:
所述SFB在所述cache行未填满时,将所述cache行保持在等待填充状态。
根据第一方面的第一种可能的实现方式,在第三种可能的实现方式中,所述SFB将所述第一失效请求填充到所述SFB的cache行中之后,还包括:
所述一级cache在执行读取指令失效时,向所述SFB发送第四失效请求,其中,所述第四失效请求与所述第一失效请求均属于所述cache行;
所述SFB将所述第四失效请求填充到所述第一失效请求所填入的cache行中;
所述SFB向所述二级cache发送第二写权限请求;
所述二级cache根据所述第二写权限请求执行cache一致性处理,并向所述cache行返回写权限和所述第二写权限请求对应的数据;
所述SFB根据所述cache行的写标记位,将所述cache行的写标记位中未被置位的值所对应的字节修改为所述二级cache返回的对应数据,并且保持所述cache行的写标记位中已被置位的值所对应的字节的内容不变。
根据第一方面的第一种到第三种可能的实现方式中任意一种,在第四种可能的实现方式中,所述SFB具体设置于所述一级cache与所述二级cache之间的访存失效装置中,所述访存失效装置的每个队列项中设置有状态位,所述状态位用于指示与所述状态位对应的队列项是否开启存储填充状态;则所述SFB将所述第一失效请求填充到所述SFB的cache行中,包括:
所述访存失效装置在与所述cache行对应的队列项的状态位为开启时,将所述第一失效请求填充到所述队列项中;
所述失效处理方法还包括:
所述访存失效装置在与所述cache行对应的队列项的状态位为开启,并且所述队列项在未填满时退出存储填充状态,或者在与所述cache行对应的队列项的状态位为关闭时,向所述二级cache发送第三写权限请求,所述第三写权限请求用于指示所述二级cache向所述队列项返回写权限和所述第三写权限请求对应的数据。
根据第一方面的第四种可能的实现方式,在第五种可能的实现方式中,所述失效处理方法还包括:
所述访存失效装置根据与所述cache行对应的队列项的状态位和写标记位,更新所述队列项的数据,以使得所述队列项中原有的数据或/和所述二级cache返回的数据填入所述一级cache。
第二方面,本发明提供一种失效处理系统,所述失效处理系统至少包括:设置于处理器CPU与内存之间的一级高速缓冲存储器cache和二级cache,以及所述一级cache和所述二级cache之间设置的存储填充缓冲器SFB;
其中,所述一级cache,用于在执行存储指令失效时,向所述SFB发送第一失效请求,并指示所述存储指令退出所述CPU当前运行程序的流水线;
所述SFB,用于将所述第一失效请求填充到所述SFB的cache行中;
所述SFB,还用于在所述cache行填满时,向所述二级cache发送第一写权限请求;
所述二级cache,用于根据所述SFB发送的第一写权限请求执行cache一致性处理,并向所述cache行返回写权限标记,所述写权限标记用于指示所述SFB不修改所述cache行中的数据。
在第二方面的第一种可能的实现方式中,所述SFB的每个cache行中预置有对应的写标记位;则所述SFB,还用于将所述第一失效请求填充到所述cache行中之后,根据所述第一失效请求指示修改的数据在所述cache行中字节的位置,对所述cache行中待修改字节对应的写标记位的值进行置位;
则所述SFB,还用于向所述二级cache发送第一写权限请求之前,在所述cache行中写标记位的所有值均被置位时,确认所述cache行填满。
根据第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述cache行中具有已填入的第二失效请求,则所述SFB,还用于将所述第一失效请求填充到所述cache行中之后,根据所述cache行的写标记位和所述第二失效请求指示修改的数据,将所述第一失效请求与所述第二失效请求进行合并处理,以生成第三失效请求;和/或,
所述SFB,还用于将所述第一失效请求填充到所述cache行中之后,在所述cache行未填满时,将所述cache行保持在等待填充状态。
根据第二方面的第一种可能的实现方式,在第三种可能的实现方式中,所述一级cache,还用于所述SFB将所述第一失效请求填充到所述cache行中之后,在执行读取指令失效时,向所述SFB发送第四失效请求,其中,所述第四失效请求与所述第一失效请求均属于所述cache行;
所述SFB,还用于将所述第四失效请求填充到所述第一失效请求所填入的cache行中;
所述SFB,还用于向所述二级cache发送第二写权限请求;
所述二级cache,还用于根据所述SFB发送的第二写权限请求执行cache一致性处理,并向所述cache行返回写权限和所述第二写权限请求对应的数据;
所述SFB,还用于根据所述cache行的写标记位,将所述cache行的写标记位中未被置位的值所对应的字节修改为所述二级cache返回的对应数据,并且保持所述cache行的写标记位中已被置位的值所对应的字节的内容不变。
根据第二方面的第一种到第三种可能的实现方式中任意一种,在第四种可能的实现方式中,所述SFB具体设置于所述一级cache与所述二级cache之间的访存失效装置中,所述访存失效装置的每个队列项中设置有状态位,所述状态位用于指示与所述状态位对应的队列项是否开启存储填充状态;则所述SFB用于将所述第一失效请求填充到所述SFB的cache行中,具体包括:所述访存失效装置,用于在与所述cache行对应的队列项的状态位为开启时,将所述第一失效请求填充到所述队列项中;
所述访存失效装置,还用于在与所述cache行对应的队列项的状态位为开启,并且所述队列项在未填满时退出存储填充状态,或者在与所述cache行对应的队列项的状态位为关闭时,向所述二级cache发送第三写权限请求,所述第三写权限请求用于指示所述二级cache向所述队列项返回写权限和所述第三写权限请求对应的数据。
根据第二方面的第四种可能的实现方式,在第五种可能的实现方式中,所述访存失效装置,还用于根据与所述cache行对应的队列项的状态位和写标记位,更新所述队列项的数据,以使得所述队列项中原有的数据或/和所述二级cache返回的数据填入所述一级cache。
第三方面,本发明提供一种存储填充缓冲器,所述存储填充缓冲器SFB设置于一级高速缓冲存储器cache和二级cache之间,所述一级cache和所述二级cache设置于处理器CPU与内存之间,所述SFB包括:
接收模块,用于接收所述一级cache执行存储指令失效时,向所述SFB发送的第一失效请求,其中,所述第一失效请求指示所述存储指令退出所述CPU当前运行程序的流水线;
填充模块,用于将所述接收模块接收的第一失效请求填充到所述SFB的cache行中;
发送模块,用于在所述cache行填满时,向所述二级cache发送第一写权限请求,所述第一写权限请求用于指示所述二级cache根据所述发送模块发送的第一写权限请求执行cache一致性处理,并向所述cache行返回写权限标记,所述写权限标记用于指示所述SFB不修改所述cache行中的数据。
在第三方面的第一种可能的实现方式中,所述SFB的每个cache行中预置有对应的写标记位;则所述SFB还包括:设置模块,用于在所述填充模块将所述第一失效请求填充到所述cache行中之后,根据所述第一失效请求指示修改的数据在所述cache行中字节的位置,对所述cache行中待修改字节对应的写标记位的值进行置位;
确认模块,用于向所述二级cache发送第一写权限请求之前,在所述cache行中写标记位的所有值均被置位时,确认所述cache行填满。
根据第三方面的第一种可能的实现方式,在第二种可能的实现方式中,所述cache行中具有已填入的第二失效请求,则所述SFB还包括:处理模块,用于在所述填充模块将所述第一失效请求填充到所述cache行中之后,根据所述cache行的写标记位和所述第二失效请求指示修改的数据,将所述第一失效请求与所述第二失效请求进行合并处理,以生成第三失效请求;
所述处理模块,还用于所述填充模块将所述第一失效请求填充到所述cache行中之后,在所述cache行未填满时,将所述cache行保持在等待填充状态。
根据第三方面的第一种可能的实现方式,在第三种可能的实现方式中,所述接收模块,还用于在所述填充模块将所述第一失效请求填充到所述cache行中之后,接收所述一级cache执行读取指令失效时,向所述SFB发送的第四失效请求,其中,所述第四失效请求与所述第一失效请求均属于所述cache行;
所述填充模块,还用于将所述接收模块接收的第四失效请求填充到所述第一失效请求所填入的cache行中;
所述发送模块,还用于向所述二级cache发送第二写权限请求,所述第二写权限请求用于指示所述二级cache根据所述发送模块发送的第二写权限请求执行cache一致性处理,并向所述cache行返回写权限和所述第二写权限请求对应的数据;
所述SFB还包括:处理模块,用于根据所述cache行的写标记位,将所述cache行的写标记位中未被置位的值所对应的字节修改为所述二级cache返回的对应数据,并且保持所述cache行的写标记位中已被置位的值所对应的字节的内容不变。
第四方面,本发明提供一种访存失效装置,所述访存失效装置中设置有如上述第三方面中任一项所提供的存储填充缓冲器SFB,所述访存失效装置的每个队列项中设置有状态位,所述状态位用于指示与所述状态位对应的队列项是否开启存储填充状态;则所述填充模块用于填充第一失效请求,具体包括:在与所述cache行对应的队列项的状态位为开启时,将向所述第一失效请求填充到所述队列项中;
所述发送模块,还用于在与所述cache行对应的队列项的状态位为开启,并且所述队列项在未填满时退出存储填充状态,或者在与所述cache行对应的队列项的状态位为关闭时,向所述二级cache发送第三写权限请求,所述第三写权限请求用于指示所述二级cache向所述队列项返回写权限和所述第三写权限请求对应的数据。
在第四方面的第一种可能的实现方式中,所述SFB还包括:更新模块,用于根据与所述cache行对应的队列项的状态位和写标记位,更新所述队列项的数据,以使得所述队列项中原有数据或/和所述二级cache返回的数据填入所述一级cache。
本发明提供一种失效处理方法、系统、SFB及访存失效装置,由设置于CPU与内存之间的一级cache和二级cache,以及设置于一级cache与二级cache之间的SFB执行,通过该一级cache在执行存储指令失效时,向SFB发送第一失效请求,同时指示存储指令退出CPU当前运行程序的流水线,从而SFB将该第一失效请求填充到该SFB的cache行中,并且在该cache行填满时,通过SFB向二级cache发送第一写权限请求,指示二级cache仅返回写权限标记,并通过写权限标记指示SFB不修改填充满的cache行中的数据,通过本实施例提供的方法对一级cache的失效进行处理,在降低处理器片上网络带宽的浪费,提高系统性能的同时,解决了现有技术在一级cache失效时,将填充满的cache行直接填入一级cache中,由于不需要向二级cache请求写权限的方式仅适用于单核处理器的系统中的,从而造成实用性较低的问题,即本实施例提供的方法广泛适用于多核处理器系统以及单核处理器系统。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例所提供的一种失效处理方法的流程图;
图2为本发明实施例所提供的另一种失效处理方法的流程图;
图3为本发明实施例所提供的又一种失效处理方法的流程图;
图4为本发明实施例所提供的再一种失效处理方法的流程图;
图5为本发明实施例所提供的还一种失效处理方法的流程图;
图6为本发明实施例所提供的一种失效处理系统的结构示意图;
图7为本发明实施例所提供的一种SFB的结构示意图;
图8为本发明实施例所提供的另一种SFB的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在介绍本发明实施例提供的技术方案之前,先对本发明实施例涉及到的一些概念以及基本测试原理进行阐述,以便本领域技术人员清楚准确地理解本发明实施例提供的技术方案。
为了降低存储延迟,通常在处理器与内存之间设计多级cache。本发明各实施例以处理器与内存之间设置有两个层次的cache,分别为一级cache与二级cache为例予以示出。当前通常使用的cache可以分为写回式cache与写穿透式cache两种,写回式cache在发生cache失效时,需要将失效的cache行对应的数据从下一级cache调入,再进行读取或存储操作;而写穿透式cache在发生读取失效时的处理方法与写回式cache相同,但在存储失效时,写穿透式cache会直接将数据写入下一级cache。由于写回式cache可以利用程序的局部性原理,具有较高的性能,因此设置在处理器与内存之间的多级cache,通常使用写回式cache。
在多核处理器和单核处理器的系统中,均可使用cache一致性协议来维护多级cache之间的数据的正确性,即如果读内存任意地址的数据返回的总是该地址中的最新数据,则可以认为内存系统是一致的。举例来说,一级cache中的数据具有共享(Shared)、独占(Exclusive)、无效(Invalid)的状态,只有处于独占状态的cache行可以被修改,当程序通过一个存储指令指示修改不处于独占状态的cache行时,该一级cache会发生失效,则需要向二级cache请求写权限,进而二级cache进行cache一致性处理,将写权限和数据返还给一级cache。
上述方法,执行存储指令的一级cache发送失效时,需要先从二级cache中读取被访问的数据,如果二级cache也发生失效,那么需要进一步从下一级的存储层次中读取被访问的数据;因此,一级cache在执行连续或靠近的多条存储指令并发生失效,使得该一级cache的一个cache行被填满时,该一级cache仍然需要采用上述方法处理该cache行记录的失效问题,但实际上,从下级存储层次读取的数据是没有任何用处的,会被写操作全部复写掉。显然地,上述方法存在以下缺陷:其一,一级cache对下级存储层次发出的读取操作实际上是对带宽的一种浪费;其二,在数据被读取回来之前,存储指令必须要等待,因此还会造成处理系统的性能损失;其三,如果存储指令需要取回的数据在二级cache中依然失效,那么需要继续向下一级存储层次请求,直到对内存发出读取请求,上述过程需要较长的执行时间,并且等待内存返回数据降低了系统性能。
针对上述问题,论文《Avoiding Store Misses to Fully Modified CacheBlocks》中提出的处理方法,已经具体说明该方法的处理过程及其存在的问题,即该论文提供的方法仅适用于单核处理器系统中,其实用性较差。目前亟需提供一种可以普遍应用于不同处理器系统中的失效处理方法,下面以具体的实施例对本发明的技术方案进行详细说明,下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图1为本发明实施例所提供的一种失效处理方法的流程图。本实施例提供的失效处理方法适用于CPU与内存之间的cache发生失效的情况,该方法可以由失效处理系统执行,该系统通常以硬件和软件的方法来实现,该系统至少包括设置于CPU与内存之间一级cache和二级cache,以及设置于该一级cache和该二级cache之间的SFB。如图1所示,本实施例的方法可以包括:
S110,一级cache在执行存储指令失效时,向SFB发送第一失效请求,并指示存储指令退出CPU当前运行程序的流水线。
S120,SFB将第一失效请求填充到该SFB的cache行中。
由于写回式cache可以很好的利用程序的局部性特征,已广泛将其应用于CPU和内存之间,本发明各实施例中的一级cache和二级cache均为写回式cache。基于写回式cache的写操作和读操作的处理规则,当一级cache在执行存储指令或读取指令发生失效时,均需要先从二级cache中读取被访问的数据,如果该二级cache也发生失效,那么需要再向下一层存储层次,例如三级cache或内存发出请求,以获取被访问的数据。
在本实施例中,由于一级cache与二级cache之间设置的SFB,用于处理一级cache失效时的请求,以及一级cache与二级cache之间的交互,该SFB例如为一个存储量较小的cache,即包括多个cache行,在一级cache执行存储指令失效时,并不需要直接从二级cache中读取被访问的数据,而是将第一失效请求发送给SFB,进而由该SFB将第一失效请求填充到其cache行中。由于存储指令要写的数据已经填充到SFB的cache行中,不需要该存储指令再额外进行写的操作了,因此该存储指令在一级cache失效时发出的第一失效请求被SFB接收,该存储指令就可以退出CPU当前运行程序的流水线,不需要等待被访问的数据返回该一级cache。
S130,SFB在cache行填满时,向二级cache发送第一写权限请求。
与论文《Avoiding Store Misses to Fully Modified Cache Blocks》不同的,在本实施例中,SFB中的某一cache行填满时,并没有直接将该cache行填入一级cache中,而是向二级cache发送第一写权限请求。本实施例提供的方法,cache行填满时并没有采用缺省请求写权限的方式,来减少一级cache与二级cache之间的请求和交互,因此可以应用于多核处理器的系统中。
需要说明的是,虽然上述论文提出希望将cache行填充满时的处理方法应用于多核处理器系统中的设想,但论文中仅说明基于cache一致性模型,一级cache在执行存储指令失效时发送的失效请求,在进入SFB之前需要请求写权限;然而,请求写权限需要时间,在请求写权限的过程中,上述失效请求不能进入SFB的cache行中,即该失效请求就必须处于等待状态,因此,该论文将其方案应用于多核处理器系统的设想,实际上并不可行。相比之下,在本实施例中,一级cache在执行存储指令失效时,只要将第一失效请求填充到SFB的cache行中,即可退出CPU当前运行程序的流水线了,有效的降低了CPU运行程序的负载量,相应地提高了CPU的处理性能;从而在SFB的cache行填满时,向二级cache发送第一写权限请求,例如cache行为64字节(byte),每次填入cache行的第一失效请求为8byte,在该cache行填入8个第一失效请求时被填充满。
本实施例在具体实现中,SFB的每个cache行中可以预置都有对应的写标记位,该写标记位用于标注cache行中相应的字节是否被填充,即具体通过写标记位判断其所属的cache行是否被填充满,则S120之后还包括:SFB根据第一失效请求指示修改的数据在cache行中字节的位置,对cache行中待修改字节对应的写标记位的值进行置位;也就是说,当cache行中填入第一失效请求时,写标记位对应于cache行中待修改字节的值被置位,举例来说,写标记位的值有0和1两种情况,在cache行为空时,该cache行中所有字节对应的写标记位的值均为0,即写标记位的所有值均没有被置位,在该cache行的某段字节中填入第一失效请求后,指示该段字节要进行写操作,将该段字节对应的写标记位的值置位为1,即本实施例在SFB向二级cache发送第一写权限请求之前,判断cache行是否填充满的方式具体为:SFB在cache行中写标记位的所有值均被置位为1时,确认该cache行填满。举例来说,SFB可以在某一cache行被当前填入的第一失效请求填满时,判断出该cache行为填充满状态;SFB中还可以加入定时判断机制,在预置时钟周期内都要判断该SFB中的每个cache行的写标记位的值是否全为1,进一步保证了SFB对已填满的cache行发出第一写权限请求,以及时对一级cache的失效进行处理。
S140,二级cache根据第一写权限请求执行cache一致性处理,并向cache行返回写权限标记,写权限标记用于指示SFB不修改cache行中的数据。
在本实施例中,由于第一写权限请求为cache行填满时发出的,即该第一写权限请求可以被标注为一个存储填充满请求,二级cache在收到该第一写权限请求后的处理方式具体为:可以先查询该二级cache是否失效,若没有失效,则正常执行cache一致性处理,之后仅向SFB返回一个写权限标记;若失效,规定不访问内存,而是在二级cache中创造一个属于二级cache失效请求的地址的cache行,本实施例并不关注该cache行的数据,随后同样仅向SFB返回一个写权限的标记。
需要说明的是,本实施例提供的失效处理方法中,一级cache连续执行存储指令失效,将SFB的某一cache行填满,即该cache行已被复写为存储指令写入的新值,该cache行对应于二级cache和内存中的旧值已经没有意义。因此,本实施例中的二级cache在接收到第一写权限请求时,仅向SFB返回写权限标记的处理方法,在降低对处理器片上网络带宽造成浪费,提高系统性能的同时,广泛适用于多核处理器系统以及单核处理器系统。
本实施例所提供的失效处理方法,由设置于CPU与内存之间的一级cache和二级cache,以及设置于一级cache与二级cache之间的SFB执行,通过该一级cache在执行存储指令失效时,向SFB发送第一失效请求,同时指示存储指令退出CPU当前运行程序的流水线,从而SFB将该第一失效请求填充到该SFB的cache行中,并且在该cache行填满时,通过SFB向二级cache发送第一写权限请求,指示二级cache仅返回写权限标记,并通过写权限标记指示SFB不修改填充满的cache行中的数据,通过本实施例提供的方法对一级cache的失效进行处理,在降低处理器片上网络带宽的浪费,提高系统性能的同时,解决了现有技术在一级cache失效时,将填充满的cache行直接填入一级cache中,由于不需要向二级cache请求写权限的方式仅适用于单核处理器的系统中的,从而造成实用性较低的问题,即本实施例提供的方法广泛适用于多核处理器系统以及单核处理器系统的。
可选地,图2为本发明实施例所提供的另一种失效处理方法的流程图,图2以在上述图1所示实施例的基础上进行的进一步描述。在本实施例中,在SFB将第一失效请求填充到SFB的cache行中之前,该cache行已填入有第二失效请求,在S120之后还包括:S121,SFB根据cache行的写标记位和第二失效请求指示修改的数据,将第一失效请求与第二失效请求进行合并处理,以生成第三失效请求。在本实施例中,按照cache行的填充规则,如果填充第一失效请求的cache行中已存在之前填入的第二失效请求,则根据该cache行在填充第一失效请求之前写标记位和第二失效请求指示修改的数据,对该第一失效请求和第二失效请求进行合并处理,具体方式为:更新cache行接收第一失效请求之前的写标记位,将本次合并的第一请求指示修改的数据,在cache行中的字节对应于写标记位的值设置为1,即只更新写标记位对应于cache行中要写的部分;更新数据,将第一失效请求对应于cache行的字节位置,更新为该第一失效请求指示修改的数据,该cache行中的其它字节位置的内容保存不变。
需要说明的是,本实施例提供的方法,将第一失效请求合并入已填充有第二失效请求的cache行中,例如可以通过失效请求的地址判断是否可以将新的失效请求合并入已填充的cache行中;另外,本实施例中的第二失效请求可以为之前填入cache行中的一个失效请求,也可以为在该cache行中已执行过合并处理的多个失效请求,多个失效请求在cache行中合并后,形成一个失效请求。
进一步地,本实施例提供的方法,在SFB将第一失效请求填充到SFB的cache行中之后,还可能包括:S122,SFB在cache行未填满时,将cache行保持在等待填充状态。需要说明的是,本实施例不限制S121和S122的执行顺序,在执行S122后,若有新的失效请求填入cache行,可以再次执行S121,图2所示实施例以S121在S122之前执行为例予以示出,仅用于说明本实施例提供的方法可能执行的步骤,并且不限制S121和S122的执行次数。
图3为本发明实施例所提供的又一种失效处理方法的流程图,图3同样以在上述图1所示实施例的基础上进行的进一步描述。在本实施例中,同样可以对属于同一cache行的多个失效请求进行合并处理,具体地,需要填充的新的失效请求填入一个非空的cache行中时,那么需要根据该失效请求的类型进行相应的处理,若该失效请求为写请求,即一级cache在执行存储指令失效时发出的失效请求,则可以参照上述图1或图2所示实施例中的处理方式,例如在S120之后包括S130~S140;若该失效请求为读请求,即一级cache在执行读取指令失效时发出的失效请求,在S120之后还可以包括:
S150,一级cache在执行读取指令失效时,向SFB发送第四失效请求,其中,该第四失效请求与第一失效请求均属于cache行。
S160,SFB将第四失效请求填充到第一失效请求所填入的cache行中。
S170,SFB向二级cache发送第二写权限请求。
本实施例中一级cache执行读取指令失效时,向SFB发送第四失效请求,以及SFB填充该第四失效请求的方式与上述实施例中的S110~S120的实现方式相同,该读请求,即第四失效请求与该cache行内已填充的写请求,即第一失效请求属于同一cache行,因此该第一失效请求与第四失效请求会在cache行中合并,仅占一个cache行;从而由SFB向二级cache发送第二写权限请求。
S180,二级cache根据第二写权限请求执行cache一致性处理,并向cache行返回写权限和第二写权限请求对应的数据。
在本实施例中,SFB发送的第二写权限请求不同于上述指示存储填充满的第一写权限请求,二级cache接收到该第二写权限请求执行的cache一致性处理后,返回的内容具体包括写权限和该第二写权限请求对应的数据,由于SFB发送的该第二写权限请求请求了对应的数据,二级cache对该第二写权限请求进行处理时,有可能会访问内存,因此,返回的内容还可以包括该请求对应的数据。
S190,SFB根据cache行的写标记位,将cache行的写标记位中值为0所对应的字节修改为二级cache返回的对应数据,并且保持cache行的写标记位中值为1所对应的字节的内容不变。
在本实施例中,cache行中填充有写请求和读请求,二级cache返回的内容也包括写请求指示请求的写权限,以及从下层存储层次中读取的数据,因此,SFB收到二级cache返回的内容后,具体按照cache行中写标记位对应每个字节的值来修改该cache行中的各个对应字节,具体方式为:如果写标记位对应某段字节的值为0,说明该段字节中没有填充过写请求,可以将该段字节的内容修改为二级cache返回的数据中对应该段字节的数据;如果写标记位对应某段字节的值为1,说明该段字节中填充有写请求,那么需要对该段字节执行写操作,并该段字节的内容写为新值,因此,二级cache返回的对应于该段字节的数据没有意义,可以保持该段字节的内容保持不变。
需要说明的是,本实施例中不限制执行S130~S140与S150~S190的可能性,S130~S140与S150~S190为一级cache执行指令失效时的两种可能的实现方式,通常为择一执行的,有可能执行S110~S140,即为图1所示实施例的方式,也有可能执行S110~S120和S150~S190。
进一步地,本发明提供的失效处理方法,还可以将SFB设置于一级cache与二级cache之间的访存失效装置中,该访存失效装置中的每个队列项具有对应的数据缓冲器,每个数据缓冲器对应于SFB中的一个cache行,用于接收二级cache返回的内容,并在接受完毕之后填入一级cache,该数据缓冲器也可以被用于放置一级cache执行存储指令失效时发出的失效请求。也就是说,本实施例提供的方法,不需要单独设置SFB所需要的硬件,直接通过复用系统中原有的访存失效装置来实现SFB的功能。然而,论文《Avoiding StoreMisses to Fully Modified Cache Blocks》中提供的方法,SFB需要由额外的硬件资源实现,另外,并行设置的SFB与一级cache为同时查询的,每次一级cache的访问,例如包括存储指令和读取指令,都需要访问SFB,这样造成了较高的功耗开销。本实施例提供的方法,可以通过复用系统中原有的硬件资源,即访存失效装置来实现SFB的功能,降低了执行失效处理方法对硬件的需要。
本实施例的具体实现如图4所示,为本发明实施例所提供的再一种失效处理方法的流程图,图4同样以在上述图1所示实施例的基础上进行的进一步描述。在通过复用原有的访存失效装置以实现SFB的功能时,该访存失效装置的每个队列项需要设置有状态位,该状态位用于指示与其对应的队列项是否开启存储填充状态,即指示该队列项对应的数据缓冲器是否作为cache行应用;则S120可以替换为:访存失效装置在与cache行对应的队列项的状态位为开启时,将第一失效请求填充到该队列项中。
图4所示实施例提供的失效处理方法还包括:
S150,访存失效装置在与cache行对应的队列项的状态位为开启,并且该队列项在未填满时退出存储填充状态,或者在与cache行对应的队列项的状态位为关闭时,向二级cache发送第三写权限请求,第三写权限请求用于指示二级cache向队列项返回写权限和第三写权限请求对应的数据。
在CPU运行的某些程序中,并不倾向于将cache行整行填满,举例来说,一个C语言中的数据结构的大小为一个cache行的大小,但是其中只有部分域会被修改,而另外部分域为只读的,对这个数据结构组成的数组进行修改时,不可能会发生填满整cache行的情况,在这种情况下,若使用论文《Avoiding Store Misses to Fully Modified Cache Blocks》中提供的方法,可能发生cache行因SFB已满而被替换出,则需要向二级cache继续请求数据,因此并没有减少一级cache向下级存储层次请求写权限和数据的次数,而且需要将这些请求向后推延到由于SFB已满而被替换时才进行处理,降低了并行程度,还可能导致对该cache行的读请求变慢,相应地降低了系统的性能。
针对上述问题,本实施例提供的方法,可以通过访存失效装置中与每个队列项对应的状态位,选择性的启用该队列项的存储填充功能,即是否启用SFB的功能,由于cache行是否可以被填满是由程序决定的,程序指令在运行前是固化的,是否倾向于填满整行可以通过分析程序指令获知。判断程序是否倾向于填满整行的具体方式例如可以为:在访存失效装置中加入几个比特组成的历史信息队列,采用先进先出的方式,用这个队列来记录最近状态位开启时,cache行是否填充满,当某一个cache行填充满时,则向该历史信息队列中加入一项1,当某一个cache行在未填充满时退出存储填充处理,则向该历史信息队列加入一项0。当一级cache因执行存储指令时失效而进入访存失效装置时,可以先检查该历史信息队列的内容,如果该历史信息队列的内容表示存储填充倾向于成功,例如该历史信息队列中1的比例超过50%,则进入存储填充操作流程,开启待填充队列项的状态位,向该队列项对应的cache行中填充第一失效请求,以及cache行填满时向二级cache发送第一写权限的方式均与上述实施例类似,故在此不再赘述;否则不执行上述存储填充操作流程,这条一级cache失效的存储指令也不能提前退出CPU当前运行程序的流水线,而是要需要等待读取的数据从二级cache填入到一级cache之后,再进行写cache操作。
本实施例通过复用访存失效装置来实现SFB的功能,具有自适应开启或关闭SFB的功能,可以在程序不适合进行存储填充时,采用其他机制对一级cache的失效进行处理,进一步地提高了执行失效处理方法的实用性和灵活性。
需要说明的是,本实施例中不限制执行S130~S140与S150的可能性,S130~S140和S150中包括一级cache执行存储指令失效时的两种可能的实现方式,有可能执行S110~S140,即为图1所示实施例的方式,也有可能执行S110~S120和S150。其一,访存失效装置中某一队列项的状态位为开启时,指示该队列项当前为存储填充状态,可以向与该队列项对应的cache行中填充第一失效请求,从而执行图1所示实施例的方法步骤;其二,与上述图3所示实施例类似地,访存失效装置向二级cache发送的写权限请求还可能指示二级cache在返回写权限的同时,返回相应地数据,在本实施例中存在两种可能返回数据的情况,具体包括:第一,访存失效装置中某一队列项的状态位为关闭时,指示该队列项并不能进行存储填充,此时向二级cache发送的第三写权限请求指示二级cache返回写权限和数据;第二,访存失效装置中某一队列项的状态位为开启,并且该队列项在未填满时退出存储填充状态,认为该队列项在执行存储填充流程时存在非正常退出的情况,该非正常退出的条件例如可以包括以下一种或多种:SFB已满或者接近填满状态,强制处于等待状态的cache行非正常退出;一个处于存储填充状态的队列项长期没有填充满;处理器正在进行cache同步操作,如无内部互锁流水级的微处理器(Microprocessor without interlocked piped stages,简称为:MIPS)架构下的缓存(CACHE)指令,需要将部分或全部cache内容写回到内存中;处理器正在进行同步操作,如MIPS架构下的同步(SYNC)指令,要求所有存储指令必须将数据写入cache中。
进一步地,本实施例提供的方法还包括:S160,访存失效装置根据与cache行对应的队列项的状态位和写标记位,更新队列项的数据,以使得队列项中原有的数据或/和二级cache返回的数据填入一级cache。在本实施例中,由于返回给一级cache的内容可能是执行上述S110~S140后返回的写权限标记,也有可能是执行上述S110~S120和S150之后返回的写权限和数据。因此,在执行S140或S150之后向一级cache中填充的内容是不同的,具体地,第一,如图4所示实施例中进行失效处理的步骤为S110~S140,即开启队列项的状态位,并且在填满cache行后发送第一写权限请求,则二级cache返回写权限标记后不需要更新该cache行的数据,直接将该cache行的数据填入一级cache中;第二,如图4所示实施例中进行失效处理的步骤为S110~S120和S150的一种情况,即开启队列项的状态位,但是在队列项在未填满时退出存储填充状态,则二级cache返回写权限和数据,根据该队列项对应的写标记位的值,将返回的数据填入队列项中写标记位的值为0对应的字节中,从而将更新后的队列项的数据填入一级cache中,第三,如图4所示实施例中进行失效处理的步骤为S110~S120和S150的另一种情况,即未开启队列项的状态位,则直接通过二级cache返回的数据更新队列项后,即将二级cache返回的数据填入一级cache中。
还需要说明的是,一级cache在执行指令时可能出现的另一种特殊情况,例如当一级cache在执行某存储指令时并未失效,但该写指令命中一个不可写的cache行,如一个处于共享(SHARED)状态的cache行,该cache行只能读,不能写,即不能进行存储填充操作,需要按照一级cache失效时的正处理方式进行处理,即返回写权限和数据,否则即便是一级cache在后续执行读取指令没有失效,也无法看到存储指令的效果。
在上述各实施例的基础上,通过一个具体实例对本发明提供的失效处理的方法做以详细说明,如图5所示,为本发明实施例所提供的还一种失效处理方法的流程图,本实施例通过上述复用访存失效装置实现SFB功能的方式,本实施例的以下步骤中,访存失效装置中的某一队列项在其状态为开启时,该队列项的数据缓冲器用来实现SFB中cache行的功能,即可以将上述实施例中cache行替换为队列项,本实施例提供的方法具体包括:
S201,一级cache在执行存储指令时失效。
S202,判断待填充队列项的状态位是否开启,若是,则执行S203;若否,执行S212。
S203,向该队列项中填充第一失效请求,并指示存储指令退出CPU当前运行程序的流水线。
S204,判断第一失效请求是否可以与队列项中的第二失效请求合并,若是,则执行S205;若否,则执行S206。
S205,将第一失效请求与第二失效请求在队列项中进行合并处理,修改队列项的数据缓冲器和写标记位。
S206,新建队列项,设置其数据缓冲器和写标记位的值。
S207,在队列项未填满时,暂停访问二级cache。
S208,判断队列项是否填充满,若是,则执行S209;若否,则执行S211。
S209,向二级cache发送第一写权限请求。
S210,向队列项返回写权限标记。需要说明的是,无论二级cache是否失效,都仅向队列项返回写权限标记,其中,二级cache失效与否的具体实现方式在上述实施例中已经描述,故在此不再赘述。
S211,是否强制进行非正常退出,若否,则重新执行S207;若是,则执行S213。
S212,进入访存失效装置,与队列项中已存在的请求进行合并。
S213,向二级cache发送第三写权限请求。
S214,二级cache是否失效,若是,则执行S215;若否,则执行S216。
S215,访问内存,获得数据后填入二级cache。
S216,向队列项返回写权限和数据;需要说明的是,S215之后同样执行S216。
S217,根据写标记位,更新队列项的数据缓冲器。需要说明的是,S210之后同样执行S217。
S218,将已更新的数据缓冲器的内容填入一级cache中。
需要说明的是,在重填一级cache之后,还可以进一步判断队列项的状态位是否开启,若开启,则完成失效处理;若未开启,还可以执行上述存储指令以进行写一级cache的操作。
图6为本发明实施例所提供的一种失效处理系统的结构示意图。本实施例提供的失效处理系统用于处理CPU与内存之间的cache发生失效的情况,该系统通常以硬件和软件的方法来实现,如图6所示,该失效处理系统10至少包括设置于CPU20与内存30之间一级cache110和二级cache120,以及设置于该一级cache110和该二级cache120之间的SFB130。
其中,一级cache110,用于在执行存储指令失效时,向SFB130发送第一失效请求,并指示存储指令退出CPU20当前运行程序的流水线。
SFB130,用于将第一失效请求填充到该SFB130的cache行131中。
SFB130,还用于在cache行131填满时,向二级cache120发送第一写权限请求。
二级cache120,用于根据SFB130发送的第一写权限请求执行cache一致性处理,并向cache行131返回写权限标记,写权限标记用于指示SFB130不修改cache行131中的数据。需要说明的是,图6所示实施例中仅示出该失效处理系统10在执行时效处理时所使用到的cache行131,SFB130中通常包括多个cache行。
本实施例在具体实现中,SFB130的每个cache行中预置有对应的写标记位;则SFB130,还用于将第一失效请求填充到cache行131中之后,根据该第一失效请求指示修改的数据在cache行131中字节的位置,对cache行131中待修改字节对应的写标记位的值进行置位,该cache行131对应的写标记位的值,以及置位的方式与上述实施例相同,具体可以将其设置为1。并且该SFB130,还用于向二级cache120发送第一写权限请求之前,在cache行131中写标记位的所有值为1时,确认cache行131填满。
需要说明的是,本实施例提供的失效处理系统中,一级cache110连续执行存储指令失效,将SFB130的某一cache行131填满,即该cache行131已被复写为存储指令写入的新值,该cache行131对应于二级cache120和内存中的旧值已经没有意义。因此,本实施例中的二级cache120在接收到第一写权限请求时,仅向SFB130返回写权限标记的处理方法,在降低对处理器片上网络带宽造成浪费,提高系统性能的同时,广泛适用于多核处理器系统以及单核处理器系统。
本发明实施例提供的失效处理系统用于执行本发明图1所示实施例提供的失效处理方法,具备相应的实体装置,其实现原理和技术效果类似,此处不再赘述。
可选地,在上述实施例的基础上,本实施例中,SFB130将第一失效请求填充到其自身的某一cache行131中之前,该cache行131已填入有第二失效请求,则SFB130,还用于将第一失效请求填充到cache行131中之后,根据cache行131的写标记位和第二失效请求指示修改的数据,将第一失效请求与第二失效请求进行合并处理,以生成第三失效请求;在本实施例中,按照cache行的填充规则,如果填充第一失效请求的cache行131中已存在之前填入的第二失效请求,则根据该cache行131在填充第一失效请求之前写标记位和第二失效请求指示修改的数据,对该第一失效请求和第二失效请求进行合并处理。
需要说明的是,本实施例提供的失效处理系统10中,SFB130执行将第一失效请求合并入已填充有第二失效请求的cache行131中时,例如可以通过失效请求的地址判断是否可以将新的失效请求合并入已填充的cache行131中;另外,本实施例中的第二失效请求可以为之前填入cache行131中的一个失效请求,也可以为在该cache行131中已执行过合并处理的多个失效请求,多个失效请求在cache行131中合并后,形成一个失效请求。
进一步地,本实施例提供的系统,在SFB130将第一失效请求填充到其自身的某一cache行131中之后,SFB130,还用于在cache行131未填满时,将cache行131保持在等待填充状态。需要说明的是,本实施例不限制SFB130对同属于cache行131的两个失效请求进行合并处理和SFB130将cache行131保持在等待填充状态的执行顺序,在将cache行131保持在等待填充状态后,若有新的失效请求填入cache行131,SFB130可以再次执行合并处理。
本发明实施例提供的失效处理系统用于执行本发明图2所示实施例提供的失效处理方法,具备相应的实体装置,其实现原理和技术效果类似,此处不再赘述。
进一步地,对属于同一cache行的多个失效请求进行合并处理,还存在另一种请求,具体地,需要填充的新的失效请求填入一个非空的cache行中时,那么需要根据该失效请求的类型进行相应的处理,若该失效请求为写请求,即一级cache110在执行存储指令失效时发出的失效请求,则可以参照上述实施例中的处理方式,若该失效请求为读请求,则一级cache110,还用于SFB130将第一失效请求填充到cache行131中之后,在执行读取指令失效时,向SFB130的cache行131中填充第四失效请求,其中,第四失效请求与第一失效请求均属于cache行131,即该第四失效请求可以与cache行131中的写请求合并;相应地,SFB130,还用于将该第四失效请求填充到第一失效请求所填入的cache行131中;并且向二级cache120发送第二写权限请求;从而,二级cache120,还用于根据SFB130发送的第二写权限请求执行cache一致性处理,并向cache行131返回写权限和第二写权限请求对应的数据;进而,SFB130,还用于根据cache行131的写标记位,将cache行131的写标记位中值为0所对应的字节修改为二级cache120返回的对应数据,并且保持cache行131的写标记位中值为1所对应的字节的内容不变。
本发明实施例提供的失效处理系统用于执行本发明图3所示实施例提供的失效处理方法,具备相应的实体装置,其实现原理和技术效果类似,此处不再赘述。
本实施例所提供的失效处理系统的另一种可能的实现方式中,还可以通过复用一级cache110与二级cache120之间的访存失效装置,来实现SFB130的功能,该访存失效装置中的每个队列项具有对应的数据缓冲器,每个数据缓冲器对应于SFB130中的一个cache行,用于接收二级cache120返回的内容,并在接收完毕之后填入一级cache110,该数据缓冲器也可以被用于放置一级cache110执行存储指令失效时发出的失效请求。也就是说,本实施例提供的失效处理系统,可以不需要单独设置SFB所需要的硬件,直接通过复用系统中原有的访存失效装置来实现上述图6中SFB130的功能。
在本实施例中,访存失效装置的每个队列项中设置有状态位,状态位用于指示其所属队列项是否开启存储填充状态;则SFB130用于将第一失效请求填充到cache行131中,具体包括:访存失效装置,用于在与cache行131对应的队列项的状态位为开启时,将第一失效请求填充到该队列项中;另外,该访存失效装置,还用于在与cache行131对应的队列项的状态位为开启,并且该队列项在未填满时退出存储填充状态,或者在与cache行131对应的队列项的状态位为关闭时,向二级cache120发送第三写权限请求,第三写权限请求用于指示二级cache120向该队列项返回写权限和第三写权限请求对应的数据。本实施例中,根据队列项的状态位,以及队列项的填充情况,对其失效做出相应的处理方式,在上述实施例中已经具体描述过,其实现方式和有益效果均与上述实施例相同,故在此不再赘述。
本实施例通过复用访存失效装置来实现SFB130的功能,可以自适应开启或关闭该SFB130的功能,可以在程序不适合进行存储填充时,采用其他机制对一级cache110的失效进行处理,进一步地提高了执行失效处理的实用性和灵活性。
上述实施例所述的失效处理系统中,访存失效装置,还用于根据与cache行131对应的队列项的状态位和写标记位,更新cache行131对应的队列项的数据,并将该队列项中原有的数据或/和二级cache120返回的数据填入一级cache110。
本发明实施例提供的失效处理系统用于执行本发明图4和5所示实施例提供的失效处理方法,具备相应的实体装置,其实现原理和技术效果类似,此处不再赘述。
图7为本发明实施例所提供的一种SFB的结构示意图。本实施例提供的SFB200用于处理CPU与内存之间的cache发生失效的情况,该CPU与内存之间至少包括一级cache和二级cache,该SFB通常以硬件和软件的方法来实现,具体设置于该一级cache和该二级cache之间,该SFB具体包括:接收模块21、填充模块22和发送模块23。
其中,接收模块21,用于接收一级cache执行存储指令失效时,向SFB200发送的第一失效请求,其中,该第一失效请求指示存储指令退出CPU当前运行程序的流水线。
填充模块22,用于将接收模块21接收的第一失效请求填充到SFB200的cache行201中。
发送模块23,用于在cache行201填满时,向二级cache发送第一写权限请求,第一写权限请求用于指示二级cache根据发送模块23发送的第一写权限请求执行cache一致性处理,并向cache行201返回写权限标记,写权限标记用于指示SFB200不修改cache行201中的数据。
图8为本发明实施例所提供的另一种SFB的结构示意图,在上述图7所示实施例的基础上,本实施例在具体实现中,SFB200的每个cache行中预置有对应的写标记位;则SFB200还可以包括:设置模块24,还用于在填充模块22将第一失效请求填充到cache行201中之后,根据该第一失效请求指示修改的数据在cache行201中字节的位置,对cache行201中待修改字节对应的写标记位的值进行置位,该cache行201对应的写标记位的值,以及置位的方式与上述实施例相同,具体可以将其设置为1。另外,SFB200还可以包括:确认模块25,用于向二级cache发送第一写权限请求之前,在cache行201中写标记位的所有值为1时,确认cache行201填满。
需要说明的是,本实施例提供SFB200中,一级cache连续执行存储指令失效,将SFB200的某一cache行201填满,即该cache行201已被复写为存储指令写入的新值,该cache行201对应于二级cache和内存中的旧值已经没有意义。因此,本实施例中的二级cache在接收到第一写权限请求时,仅向SFB200返回写权限标记的处理方法,在降低对处理器片上网络带宽造成浪费,提高系统性能的同时,广泛适用于多核处理器系统以及单核处理器系统。
本发明实施例提供的SFB用于执行本发明图1所示实施例提供的失效处理方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
需要说明的是,图7和图8所示实施例中仅示出SFB200在执行时效处理时所使用到的cache行201,SFB200中通常包括多个cache行。
可选地,在上述图8所示实施例的基础上,SFB200将第一失效请求填充到其自身的某一cache行201中之前,该cache行201已填入有第二失效请求,则SFB200还包括:处理模块26,用于在填充模块22将第一失效请求填充到cache行201中之后,根据cache行201的写标记位和第二失效请求指示修改的数据,将第一失效请求与第二失效请求进行合并处理,以生成第三失效请求;在本实施例中,按照cache行的填充规则,如果填充第一失效请求的cache行201中已存在之前填入的第二失效请求,则根据该cache行201在填充第一失效请求之前写标记位和第二失效请求指示修改的数据,对该第一失效请求和第二失效请求进行合并处理。
需要说明的是,本实施例提供的SFB200,在处理模块26执行将第一失效请求合并入已填充有第二失效请求的cache行201中时,例如可以通过失效请求的地址判断是否可以将新的失效请求合并入已填充的cache行201中;另外,本实施例中的第二失效请求可以为之前填入cache行201中的一个失效请求,也可以为在该cache行201中已执行过合并处理的多个失效请求,多个失效请求在cache行201中合并后,形成一个失效请求。
进一步地,本实施例提供的SFB200,在填充模块22将第一失效请求填充到cache行201中之后,处理模块26,还用于在cache行201未填满时,将cache行201保持在等待填充状态。需要说明的是,本实施例不限制处理模块26对同属于cache行201的两个失效请求进行合并处理和处理模块26将cache行201保持在等待填充状态的执行顺序,在将cache行201保持在等待填充状态后,若有新的失效请求填入cache行201,处理模块26可以再次执行合并处理。
本发明实施例提供的SFB用于执行本发明图2所示实施例提供的失效处理方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
进一步地,对属于同一cache行的多个失效请求进行合并处理,还存在另一种请求,具体地,需要填充的新的失效请求填入一个非空的cache行中时,那么需要根据该失效请求的类型进行相应的处理,若该失效请求为写请求,即一级cache在执行存储指令失效时发出的失效请求,则可以参照上述实施例中的处理方式,若该失效请求为读请求,则接收模块21,还用于在填充模块22将第一失效请求填充到cache行201中之后,接收一级cache执行读取指令失效时,向SFB200发送的第四失效请求,其中,第四失效请求与第一失效请求均属于cache行201,即该第四失效请求可以与cache行201中的写请求合并;相应地,填充模块22,还用于将接收模块21接收的第四失效请求填充到第一失效请求所填入的cache行201中;并且向二级cache发送第二写权限请求,该第二写权限请求用于指示二级cache根据发送模块23发送的第二写权限请求执行cache一致性处理,并向cache行201返回写权限和第二写权限请求对应的数据;进而,上述处理模块26,还用于根据cache行201的写标记位,将cache行201的写标记位中值为0所对应的字节修改为二级cache返回的对应数据,并且保持cache行201的写标记位中值为1所对应的字节的内容不变。
本发明实施例提供的SFB用于执行本发明图3所示实施例提供的失效处理方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
可选地,在本发明提供SFB的另一种可能的实现方式中,还可以通过复用一级cache与二级cache之间的访存失效装置,来实现SFB200的功能,该访存失效装置中的每个队列项具有对应的数据缓冲器,每个数据缓冲器对应于SFB200中的一个cache行,用于接收二级cache返回的内容,并在接收完毕之后填入一级cache该数据缓冲器也可以被用于放置一级cache执行存储指令失效时发出的失效请求。也就是说,本实施例可以不单独设置SFB所需要的硬件,直接通过复用访存失效装置来实现上述任一实施例中SFB200的功能。
在本实施例中,访存失效装置的每个队列项中设置有状态位,状态位用于指示其所属队列项是否开启存储填充状态;则填充模块22用于填充第一失效请求,具体包括:访存失效装置,用于在与cache行201对应的队列项的状态位为开启时,将第一失效请求填充到该队列项中;另外,该访存失效装置,还用于在与cache行201对应的队列项的状态位为开启,并且该队列项在未填满时退出存储填充状态,或者在与cache行201对应的队列项的状态位为关闭时,向二级cache发送第三写权限请求,第三写权限请求用于指示二级cache向该队列项返回写权限和第三写权限请求对应的数据。本实施例中,根据队列项的状态位,以及队列项的填充情况,对其失效做出相应的处理方式,在上述实施例中已经具体描述过,其实现方式和有益效果均与上述实施例相同,故在此不再赘述。
本实施例通过复用访存失效装置来实现SFB200的功能,可以自适应开启或关闭SFB200的功能,可以在程序不适合进行存储填充时,采用其他机制对一级cache110的失效进行处理,进一步地提高了执行失效处理方法的实用性和灵活性。
本实施例中的访存失效装置,还用于根据与cache行201对应的队列项的状态位和写标记位,更新cache行201对应的队列项的数据,并将该队列项中原有的数据或/和二级cache返回的数据填入一级cache。
本发明实施例提供的SFB用于执行本发明图4和5所示实施例提供的失效处理方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (18)
1.一种失效处理方法,其特征在于,执行所述失效处理方法的系统,至少包括设置于处理器CPU与内存之间的一级高速缓冲存储器cache和二级cache,以及设置于所述一级cache和所述二级cache之间的存储填充缓冲器SFB,所述失效处理方法包括:
所述一级cache在执行存储指令失效时,向所述SFB发送第一失效请求,并指示所述存储指令退出所述CPU当前运行程序的流水线;
所述SFB将所述第一失效请求填充到所述SFB的cache行中;
所述SFB在所述cache行填满时,向所述二级cache发送第一写权限请求;
所述二级cache根据所述第一写权限请求执行cache一致性处理,并向所述cache行返回写权限标记,所述写权限标记用于指示所述SFB不修改所述cache行中的数据。
2.根据权利要求1所述的失效处理方法,其特征在于,所述SFB的每个cache行中预置有对应的写标记位;则所述SFB将所述第一失效请求填充到所述SFB的cache行中之后,还包括:
所述SFB根据所述第一失效请求指示修改的数据在所述cache行中字节的位置,对所述cache行中待修改字节对应的写标记位的值进行置位;
则所述SFB向所述二级cache发送第一写权限请求之前,还包括:
所述SFB在所述cache行中写标记位的所有值均被置位时,确认所述cache行填满。
3.根据权利要求2所述的失效处理方法,其特征在于,所述cache行中具有已填入的第二失效请求,则所述SFB将所述第一失效请求填充到所述SFB的cache行中之后,还包括:
所述SFB根据所述cache行的写标记位和所述第二失效请求指示修改的数据,将所述第一失效请求与所述第二失效请求进行合并处理,以生成第三失效请求;和/或,
所述SFB将所述第一失效请求填充到所述SFB的cache行中之后,还包括:
所述SFB在所述cache行未填满时,将所述cache行保持在等待填充状态。
4.根据权利要求2所述的失效处理方法,其特征在于,所述SFB将所述第一失效请求填充到所述SFB的cache行中之后,还包括:
所述一级cache在执行读取指令失效时,向所述SFB发送第四失效请求,其中,所述第四失效请求与所述第一失效请求均属于所述cache行;
所述SFB将所述第四失效请求填充到所述第一失效请求所填入的cache行中;
所述SFB向所述二级cache发送第二写权限请求;
所述二级cache根据所述第二写权限请求执行cache一致性处理,并向所述cache行返回写权限和所述第二写权限请求对应的数据;
所述SFB根据所述cache行的写标记位,将所述cache行的写标记位中未被置位的值所对应的字节修改为所述二级cache返回的对应数据,并且保持所述cache行的写标记位中已被置位的值所对应的字节的内容不变。
5.根据权利要求2~4中任一项所述的失效处理方法,其特征在于,所述SFB具体设置于所述一级cache与所述二级cache之间的访存失效装置中,所述访存失效装置的每个队列项中设置有状态位,所述状态位用于指示与所述状态位对应的队列项是否开启存储填充状态;则所述SFB将所述第一失效请求填充到所述SFB的cache行中,包括:
所述访存失效装置在与所述cache行对应的队列项的状态位为开启时,将所述第一失效请求填充到所述队列项中;
所述失效处理方法还包括:
所述访存失效装置在与所述cache行对应的队列项的状态位为开启,并且所述队列项在未填满时退出存储填充状态,或者在与所述cache行对应的队列项的状态位为关闭时,向所述二级cache发送第三写权限请求,所述第三写权限请求用于指示所述二级cache向所述队列项返回写权限和所述第三写权限请求对应的数据。
6.根据权利要求5所述的失效处理方法,其特征在于,所述失效处理方法还包括:
所述访存失效装置根据与所述cache行对应的队列项的状态位和写标记位,更新所述队列项的数据,以使得所述队列项中原有的数据或/和所述二级cache返回的数据填入所述一级cache。
7.一种失效处理系统,其特征在于,所述失效处理系统至少包括:设置于处理器CPU与内存之间的一级高速缓冲存储器cache和二级cache,以及所述一级cache和所述二级cache之间设置的存储填充缓冲器SFB;
其中,所述一级cache,用于在执行存储指令失效时,向所述SFB发送第一失效请求,并指示所述存储指令退出所述CPU当前运行程序的流水线;
所述SFB,用于将所述第一失效请求填充到所述SFB的cache行中;
所述SFB,还用于在所述cache行填满时,向所述二级cache发送第一写权限请求;
所述二级cache,用于根据所述SFB发送的第一写权限请求执行cache一致性处理,并向所述cache行返回写权限标记,所述写权限标记用于指示所述SFB不修改所述cache行中的数据。
8.根据权利要求7所述的失效处理系统,其特征在于,所述SFB的每个cache行中预置有对应的写标记位;则所述SFB,还用于将所述第一失效请求填充到所述cache行中之后,根据所述第一失效请求指示修改的数据在所述cache行中字节的位置,对所述cache行中待修改字节对应的写标记位的值进行置位;
则所述SFB,还用于向所述二级cache发送第一写权限请求之前,在所述cache行中写标记位的所有值均被置位时,确认所述cache行填满。
9.根据权利要求8所述的失效处理系统,其特征在于,所述cache行中具有已填入的第二失效请求,则所述SFB,还用于将所述第一失效请求填充到所述cache行中之后,根据所述cache行的写标记位和所述第二失效请求指示修改的数据,将所述第一失效请求与所述第二失效请求进行合并处理,以生成第三失效请求;和/或,
所述SFB,还用于将所述第一失效请求填充到所述cache行中之后,在所述cache行未填满时,将所述cache行保持在等待填充状态。
10.根据权利要求8所述的失效处理系统,其特征在于,所述一级cache,还用于所述SFB将所述第一失效请求填充到所述cache行中之后,在执行读取指令失效时,向所述SFB发送第四失效请求,其中,所述第四失效请求与所述第一失效请求均属于所述cache行;
所述SFB,还用于将所述第四失效请求填充到所述第一失效请求所填入的cache行中;
所述SFB,还用于向所述二级cache发送第二写权限请求;
所述二级cache,还用于根据所述SFB发送的第二写权限请求执行cache一致性处理,并向所述cache行返回写权限和所述第二写权限请求对应的数据;
所述SFB,还用于根据所述cache行的写标记位,将所述cache行的写标记位中未被置位的值所对应的字节修改为所述二级cache返回的对应数据,并且保持所述cache行的写标记位中已被置位的值所对应的字节的内容不变。
11.根据权利要求8~10中任一项所述的失效处理系统,其特征在于,所述SFB具体设置于所述一级cache与所述二级cache之间的访存失效装置中,所述访存失效装置的每个队列项中设置有状态位,所述状态位用于指示与所述状态位对应的队列项是否开启存储填充状态;则所述SFB用于将所述第一失效请求填充到所述SFB的cache行中,具体包括:所述访存失效装置,用于在与所述cache行对应的队列项的状态位为开启时,将所述第一失效请求填充到所述队列项中;
所述访存失效装置,还用于在与所述cache行对应的队列项的状态位为开启,并且所述队列项在未填满时退出存储填充状态,或者在与所述cache行对应的队列项的状态位为关闭时,向所述二级cache发送第三写权限请求,所述第三写权限请求用于指示所述二级cache向所述队列项返回写权限和所述第三写权限请求对应的数据。
12.根据权利要求11所述的失效处理系统,其特征在于,所述访存失效装置,还用于根据与所述cache行对应的队列项的状态位和写标记位,更新所述队列项的数据,以使得所述队列项中原有的数据或/和所述二级cache返回的数据填入所述一级cache。
13.一种存储填充缓冲器,其特征在于,所述存储填充缓冲器SFB设置于一级高速缓冲存储器cache和二级cache之间,所述一级cache和所述二级cache设置于处理器CPU与内存之间,所述SFB包括:
接收模块,用于接收所述一级cache执行存储指令失效时,向所述SFB发送的第一失效请求,其中,所述第一失效请求指示所述存储指令退出所述CPU当前运行程序的流水线;
填充模块,用于将所述接收模块接收的第一失效请求填充到所述SFB的cache行中;
发送模块,用于在所述cache行填满时,向所述二级cache发送第一写权限请求,所述第一写权限请求用于指示所述二级cache根据所述发送模块发送的第一写权限请求执行cache一致性处理,并向所述cache行返回写权限标记,所述写权限标记用于指示所述SFB不修改所述cache行中的数据。
14.根据权利要求13所述的SFB,其特征在于,所述SFB的每个cache行中预置有对应的写标记位;则所述SFB还包括:设置模块,用于在所述填充模块将所述第一失效请求填充到所述cache行中之后,根据所述第一失效请求指示修改的数据在所述cache行中字节的位置,对所述cache行中待修改字节对应的写标记位的值进行置位;
确认模块,用于向所述二级cache发送第一写权限请求之前,在所述cache行中写标记位的所有值均被置位时,确认所述cache行填满。
15.根据权利要求14所述的SFB,其特征在于,所述cache行中具有已填入的第二失效请求,则所述SFB还包括:处理模块,用于在所述填充模块将所述第一失效请求填充到所述cache行中之后,根据所述cache行的写标记位和所述第二失效请求指示修改的数据,将所述第一失效请求与所述第二失效请求进行合并处理,以生成第三失效请求;
所述处理模块,还用于所述填充模块将所述第一失效请求填充到所述cache行中之后,在所述cache行未填满时,将所述cache行保持在等待填充状态。
16.根据权利要求14所述的SFB,其特征在于,所述接收模块,还用于在所述填充模块将所述第一失效请求填充到所述cache行中之后,接收所述一级cache执行读取指令失效时,向所述SFB发送的第四失效请求,其中,所述第四失效请求与所述第一失效请求均属于所述cache行;
所述填充模块,还用于将所述接收模块接收的第四失效请求填充到所述第一失效请求所填入的cache行中;
所述发送模块,还用于向所述二级cache发送第二写权限请求,所述第二写权限请求用于指示所述二级cache根据所述发送模块发送的第二写权限请求执行cache一致性处理,并向所述cache行返回写权限和所述第二写权限请求对应的数据;
所述SFB还包括:处理模块,用于根据所述cache行的写标记位,将所述cache行的写标记位中未被置位的值所对应的字节修改为所述二级cache返回的对应数据,并且保持所述cache行的写标记位中已被置位的值所对应的字节的内容不变。
17.一种访存失效装置,其特征在于,所述访存失效装置中设置有如权利要求14~16中任一项所述的存储填充缓冲器SFB,所述访存失效装置的每个队列项中设置有状态位,所述状态位用于指示与所述状态位对应的队列项是否开启存储填充状态;则所述填充模块用于填充第一失效请求,具体包括:在与所述cache行对应的队列项的状态位为开启时,将向所述第一失效请求填充到所述队列项中;
所述发送模块,还用于在与所述cache行对应的队列项的状态位为开启,并且所述队列项在未填满时退出存储填充状态,或者在与所述cache行对应的队列项的状态位为关闭时,向所述二级cache发送第三写权限请求,所述第三写权限请求用于指示所述二级cache向所述队列项返回写权限和所述第三写权限请求对应的数据。
18.根据权利要求17所述的访存失效装置,其特征在于,所述SFB还包括:更新模块,用于根据与所述cache行对应的队列项的状态位和写标记位,更新所述队列项的数据,以使得所述队列项中原有数据或/和所述二级cache返回的数据填入所述一级cache。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510162049.1A CN106155922B (zh) | 2015-04-07 | 2015-04-07 | 失效处理方法、系统、sfb及访存失效装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510162049.1A CN106155922B (zh) | 2015-04-07 | 2015-04-07 | 失效处理方法、系统、sfb及访存失效装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106155922A true CN106155922A (zh) | 2016-11-23 |
CN106155922B CN106155922B (zh) | 2019-03-05 |
Family
ID=57335632
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510162049.1A Active CN106155922B (zh) | 2015-04-07 | 2015-04-07 | 失效处理方法、系统、sfb及访存失效装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106155922B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117472804A (zh) * | 2023-12-28 | 2024-01-30 | 北京微核芯科技有限公司 | 访存失效队列处理方法、装置及电子设备 |
CN117472802A (zh) * | 2023-12-28 | 2024-01-30 | 北京微核芯科技有限公司 | 高速缓存访问方法、处理器、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102216898A (zh) * | 2008-05-30 | 2011-10-12 | 飞思卡尔半导体公司 | 用于存储分配高速缓存缺失的错误恢复的存储缓冲器的利用 |
US20140189245A1 (en) * | 2012-12-31 | 2014-07-03 | Advanced Micro Devices, Inc. | Merging eviction and fill buffers for cache line transactions |
CN104246726A (zh) * | 2012-04-18 | 2014-12-24 | 高通股份有限公司 | 用于维持高速缓存一致性的只写无数据状态 |
-
2015
- 2015-04-07 CN CN201510162049.1A patent/CN106155922B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102216898A (zh) * | 2008-05-30 | 2011-10-12 | 飞思卡尔半导体公司 | 用于存储分配高速缓存缺失的错误恢复的存储缓冲器的利用 |
CN104246726A (zh) * | 2012-04-18 | 2014-12-24 | 高通股份有限公司 | 用于维持高速缓存一致性的只写无数据状态 |
US20140189245A1 (en) * | 2012-12-31 | 2014-07-03 | Advanced Micro Devices, Inc. | Merging eviction and fill buffers for cache line transactions |
Non-Patent Citations (2)
Title |
---|
SHIWEN HU 等: "Avoiding Store Misses to Fully Modified Cache Blocks", 《IEEE》 * |
陈李维 等: "用于多核同步优化的cache—致性协议设计", 《高技术通讯》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117472804A (zh) * | 2023-12-28 | 2024-01-30 | 北京微核芯科技有限公司 | 访存失效队列处理方法、装置及电子设备 |
CN117472802A (zh) * | 2023-12-28 | 2024-01-30 | 北京微核芯科技有限公司 | 高速缓存访问方法、处理器、电子设备及存储介质 |
CN117472802B (zh) * | 2023-12-28 | 2024-03-29 | 北京微核芯科技有限公司 | 高速缓存访问方法、处理器、电子设备及存储介质 |
CN117472804B (zh) * | 2023-12-28 | 2024-04-09 | 北京微核芯科技有限公司 | 访存失效队列处理方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN106155922B (zh) | 2019-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103257933B (zh) | 无序处理器中的事务存储器执行的方法、设备和系统 | |
CN104375958B (zh) | 高速缓存存储器管理事务性存储器访问请求 | |
CN106155577B (zh) | 扩展内存的访问方法、设备以及系统 | |
US10585726B2 (en) | Parameter-sharing apparatus and method | |
CN103150220B (zh) | 进程间的通信方法和通信系统 | |
CN100394407C (zh) | 低等待时间存储器系统访问 | |
CN103744644B (zh) | 采用四核结构搭建的四核处理器系统及数据交换方法 | |
CN103988184B (zh) | 元比特在系统存储器内的高效存储 | |
KR101511972B1 (ko) | 계층적 캐싱 설계에서 캐시들 간 효율적 통신을 위한 방법 및 장치 | |
ITRM20120094A1 (it) | Scheda di interfaccia di rete per nodo di rete di calcolo parallelo su gpu, e relativo metodo di comunicazione internodale | |
CN107179878A (zh) | 基于应用优化的数据存储的方法和装置 | |
US9251048B2 (en) | Memory page management | |
CN107949837A (zh) | 用于i/o数据包压缩的寄存器文件 | |
WO2009002857A1 (en) | Reduced handling of writeback data | |
CN106959893A (zh) | 加速器、用于加速器的内存管理方法以及数据处理系统 | |
US8793435B1 (en) | Load miss result buffer with shared data lines | |
CN107368583A (zh) | 一种多集群信息查询的方法及系统 | |
US20200081864A1 (en) | Instructions for Performing Multi-Line Memory Accesses | |
CN105095138B (zh) | 一种扩展同步内存总线功能的方法和装置 | |
CN106777085A (zh) | 一种数据处理方法、装置及数据查询系统 | |
CN109918131A (zh) | 一种基于非阻塞指令cache的指令读取方法 | |
CN105354153B (zh) | 一种紧耦合异构多处理器数据交换缓存的实现方法 | |
CN106155922A (zh) | 失效处理方法、系统、sfb及访存失效装置 | |
CN107346265A (zh) | 实现QoS的方法与装置 | |
CN106406764A (zh) | 一种分布式san块存储的高效能数据访问系统及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee after: Loongson Zhongke Technology Co.,Ltd. Address before: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee before: LOONGSON TECHNOLOGY Corp.,Ltd. |