CN103744800B - 面向重放机制的缓存操作方法及装置 - Google Patents
面向重放机制的缓存操作方法及装置 Download PDFInfo
- Publication number
- CN103744800B CN103744800B CN201310746996.6A CN201310746996A CN103744800B CN 103744800 B CN103744800 B CN 103744800B CN 201310746996 A CN201310746996 A CN 201310746996A CN 103744800 B CN103744800 B CN 103744800B
- Authority
- CN
- China
- Prior art keywords
- cache line
- cache
- program
- replacement information
- pool
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 126
- 230000007246 mechanism Effects 0.000 title claims abstract description 49
- 230000008569 process Effects 0.000 claims description 74
- 238000013500 data storage Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 5
- 230000000903 blocking effect Effects 0.000 description 3
- 239000000463 material Substances 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明实施例提供了一种面向重放机制的缓存操作方法及装置,涉及程序重放领域。保证了程序在重放时缓存命中率的稳定性,并进一步保证了重放机制中程序重放时缓存命中率优于程序初次运行的缓存命中率。本发明实施例提供的面向重放机制的缓存操作方法,包括:在初次运行程序的过程中,当缓存行池中存在与第一缓存行匹配的历史缓存行时,根据所述与第一缓存行匹配的历史缓存行生成替换信息并将所述第一缓存行中的局部唯一标识信息替换与所述第一缓存行匹配的历史缓存行中的局部唯一标识信息保存在与第一缓存行匹配的历史缓存行中;在重放程序的过程中,当存在与第二缓存行匹配的替换信息时,将所述第二缓存行保存到辅助缓存中。
Description
技术领域
本发明涉及程序重放领域,特别是一种面向重放机制的缓存操作方法及装置。
背景技术
程序重放是一种常见的应用,在程序调试(特别是并行程序的调试)、错误容忍和特征分析等领域有着极为重要的作用。
目前,程序重放机制只是在内存层面对于内存的访存(load/store)行为有记录,相对于内存而言,缓存的速度对于数据访问存储和指令操作具有明显的速度上的优势,但是缓存的大小相比之下又非常小,如何提高程序重放过程中数据访存缓存的命中率是亟需解决的问题。
现有的程序重放机制在记录缓存行为时仅仅是简单的历史访存操作记录,由于缓存的容量有限,在程序重放过程中发生缓存操作且该访存操作未命中缓存时,在缓存仍然有空闲的情况下直接将访存操作对应的内存行以缓存行的形式存储到缓存中,在缓存已满的情况下,将符合替换策略(如先进先出策略、最后最近使用型策略)的缓存行踢出所述缓存使得缓存空闲进而使得访存操作对应的内存行以缓存行的形式存储到缓存中。
在实现本发明实施例的过程中,发明人发现完整的程序中可能需要对某一内存行进行多次的访存操作,由于简单的替换策略使得访存操作需要多次访问的内存行可能被重复的存储到缓存中并被多次的从缓存中踢出,进而不能保证程序在重放时缓存命中率的稳定性更不能保证重放机制中程序重放时缓存命中率优于程序初次运行的缓存命中率。
发明内容
本发明的目的在于提供一种面向重放机制的缓存操作方法及装置,保证了程序在重放时缓存命中率的稳定性,并进一步保证了重放机制中程序重放时缓存命中率优于程序初次运行的缓存命中率。
一方面,本发明实施例提供了一种面向重放机制的缓存操作方法,用于面向重放机制的缓存,所述面向重放机制的缓存包括缓存数据区和缓存池,所述缓存数据区用于存放当前运行的程序根据访存指令生成的第一类型缓存行,所述缓存池用于存放历史缓存行,所述第一类型缓存行包括标示TAG信息、局部唯一标识信息以及访存指令需要访存的数据,所述历史缓存行包括程序初次运行过程中被替换出来的第一类型缓存行的TAG信息和局部唯一标识信息,所述方法,包括:
在初次运行程序的过程中,当缓存行池中存在与第一缓存行匹配的历史缓存行时,根据所述与第一缓存行匹配的历史缓存行生成替换信息并将所述第一缓存行中的局部唯一标识信息替换与所述第一缓存行匹配的历史缓存行中的局部唯一标识信息保存在与第一缓存行匹配的历史缓存行中,其中,所述第一缓存行为每当接收到访存指令且该访存指令未命中已存满的缓存数据区时生成的第一类型缓存行所述替换信息包括与第一缓存行匹配的历史缓存行中的TAG信息和局部唯一标识信息;
在重放程序的过程中,当存在与第二缓存行匹配的替换信息时,将所述第二缓存行保存到辅助缓存中,所述第二缓存行为程序重放过程中每当接收到访存指令且该访存指令既未命中已存满缓存数据区也未命中所述辅助缓存时被替换出来的第一类型缓存行。
另一方面,本发明实施例还提供了一种面向重放机制的缓存操作装置,用于面向重放机制的缓存,所述面向重放机制的缓存包括缓存数据区和缓存池,所述缓存数据区用于存放当前运行的程序根据访存指令生成的第一类型缓存行,所述缓存池用于存放历史缓存行,所述第一类型缓存行包括标示TAG信息、局部唯一标识信息以及访存指令需要访存的数据,所述历史缓存行包括程序初次运行过程中被替换出来的第一类型缓存行的TAG信息和局部唯一标识信息,所述装置,包括:
第一生成单元,用于在初次运行程序的过程中,当缓存行池中存在与第一缓存行匹配的历史缓存行时,根据所述与第一缓存行匹配的历史缓存行生成替换信息并将所述第一缓存行中的局部唯一标识信息替换与所述第一缓存行匹配的历史缓存行中的局部唯一标识信息保存在与第一缓存行匹配的历史缓存行中,其中,所述第一缓存行为每当接收到访存指令且该访存指令未命中已存满的缓存数据区时生成的第一类型缓存行所述替换信息包括与第一缓存行匹配的历史缓存行中的TAG信息和局部唯一标识信息;
第一执行单元,用于在重放程序的过程中,当第一生成单元生成的替换信息中存在与第二缓存行匹配的替换信息时,将所述第二缓存行保存到辅助缓存中,所述第二缓存行为程序重放过程中每当接收到访存指令且该访存指令既未命中已存满缓存数据区也未命中所述辅助缓存时被替换出来的第一类型缓存行。
本发明实施例提供的面向重放机制的缓存操作方法及装置,通过缓存行池保存程序初次运行时从缓存数据区被替换出来的第一类型缓存行,当缓存行池中存在与第一缓存行匹配的历史缓存行时,说明在整个程序的初次运行过程中,生成第一缓存行的访存指令在生成第一缓存行之前保存在缓存数据区中并在第一缓存行的访存指令到达之前被替换出缓存数据区,从而使得第一缓存行被反复的从缓存数据区删除和写入,由于在初次运行程序的时候将反复被删除和写入缓存数据区的缓存行以替换信息的形式记录下来,并在重放程序的过程中根据替换信息,将与替换信息匹配的第二缓存行保存到辅助缓存中,那么第二缓存行对应的访存指令在后期到达时可以从辅助缓存中命中,进而保证了程序重放过程中的缓存命中率并且还进一步提高了程序重放过程中的缓存命中率。
附图说明
图1所示为本发明实施例提供的一种面向重放机制的缓存操作方法流程图;
图2为本发明实施例提供的面向重放机制的缓存操作方法中步骤101的流程图;
图3为本发明又一实施例提供的面向重放机制的缓存操作方法流程图;
图4a为本发明另一实施例提供的面向重放机制的缓存操作方法中初步运行程序的流程图;
图4b为本发明另一实施例提供的面向重放机制的缓存操作方法中重放程序的流程图;
图5为本发明另一实施例提供的面向重放机制的缓存操作装置的结构示意图;
图6为图4所示的面向重放机制的缓存操作方法中记录用缓存的结构结构示意图;
图7为图6所示的记录用缓存中记录用缓存组的结构示意图;
图8为图4所示的面向重放机制的缓存操作方法中重放用缓存的结构结构示意图;
图9为图8所示的重放用缓存中重放用缓存组的结构示意图;
图10为本发明实施例提供的面向重放机制的缓存操作装置的结构示意图一;
图11为图10所示的面向重放机制的缓存操作装置中第一生成单元的结构示意图;
图12为本发明实施例提供的面向重放机制的缓存操作装置的结构示意图二。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1所示为本发明实施例提供的一种面向重放机制的缓存操作方法流程图。
如图1所示,本发明实施例提供了一种面向重放机制的缓存操作方法,用于面向重放机制的缓存,所述面向重放机制的缓存包括缓存数据区和缓存池,所述缓存数据区用于存放当前运行的程序根据访存指令生成的第一类型缓存行,所述缓存池用于存放历史缓存行,所述第一类型缓存行包括标示TAG信息、局部唯一标识信息以及访存指令需要访存的数据,所述历史缓存行包括程序初次运行过程中被替换出来的第一类型缓存行的TAG信息和局部唯一标识信息,所述方法,包括:
步骤101、在初次运行程序的过程中,当缓存行池中存在与第一缓存行匹配的历史缓存行时,根据所述与第一缓存行匹配的历史缓存行生成替换信息并将所述第一缓存行中的局部唯一标识信息替换与所述第一缓存行匹配的历史缓存行中的局部唯一标识信息保存在与第一缓存行匹配的历史缓存行中。
其中,所述第一缓存行为每当接收到访存指令且该访存指令未命中已存满的缓存数据区时生成的第一类型缓存行所述替换信息包括与第一缓存行匹配的历史缓存行中的TAG信息和局部唯一标识信息。
步骤102、在重放程序的过程中,当存在与第二缓存行匹配的替换信息时,将所述第二缓存行保存到辅助缓存中。
其中,所述第二缓存行为程序重放过程中每当接收到访存指令且该访存指令既未命中已存满缓存数据区也未命中所述辅助缓存时被替换出来的第一类型缓存行。
值得说明的是,所述第一类型缓存行中的所述TAG信息与所述访存指令需要访存的数据均与现有技术中的定义相同,此处不再赘述,所述局部唯一标识信息,为程序从头到尾执行一次出现的分配访存指令的标识,该标识在程序头到尾执行的过程中是唯一的,且在重放程序的过程中,以初次运行程序时采用的分配原则对访存指令进行标识分配。
本发明实施例提供的面向重放机制的缓存操作方法,通过缓存行池保存程序初次运行时从缓存数据区被替换出来的第一类型缓存行,当缓存行池中存在与第一缓存行匹配的历史缓存行时,说明在整个程序的初次运行过程中,生成第一缓存行的访存指令在生成第一缓存行之前保存在缓存数据区中并在第一缓存行的访存指令到达之前被替换出缓存数据区,从而使得第一缓存行被反复的从缓存数据区删除和写入,由于在初次运行程序的时候将反复被删除和写入缓存数据区的缓存行以替换信息的形式记录下来,并在重放程序的过程中根据替换信息,将与替换信息匹配的第二缓存行保存到辅助缓存中,那么第二缓存行对应的访存指令在后期到达时可以从辅助缓存中命中,进而保证了程序重放过程中的缓存命中率并且还进一步提高了程序重放过程中的缓存命中率。
图2为本发明实施例提供的面向重放机制的缓存操作方法中步骤101的流程图。在本发明一实施例中,如图2所示,当缓存行池中存在与第一缓存行匹配的历史缓存行时,根据所述与第一缓存行匹配的历史缓存行生成替换信息,可以通过以下步骤实现:
步骤1011、在接收到访存指令且该访存指令未命中所述存数据区时,根据该访存指令生成第一缓存行。
步骤1012、根据预先设置的第一替换策略从所述缓存数据区中选出被替换的第一类型缓存行,将所述第一缓存行保存到被替换的第一缓存行的位置。
其中,所述第一替换策略可以是先进先出策略、最后最近使用型策略等,此处不做限制。
步骤1013、将所述被替换的第一类型缓存行以历史缓存行的形式保存到缓存行池中。
其中,所述历史缓存行可以包括被替换的第一类型缓存行中的TAG信息和被替换的第一类型缓存行中的局部唯一标识信息。优选的,当每个缓存数据区对应一个缓存行池时,每个缓存行池中保存的历史缓存行可以只由TAG信息和局部唯一标识组成,一对缓存数据区和缓存行池构成一个记录用缓存组,这样能够达到节省存储空间。
值得说明的是,所述缓存行池可以保存在内存中,也可以保存在缓存中,由于记录程序(即初次运行程序)只需要在执行一次,如果需要将程序初次运行过程中生成的历史缓存行均记录在缓存池中,以进一步提高缓存的命中率,优选采用内存来保存所述缓存行池,值得说明的是,采用缓存也有其较好的效果,即在历史缓存行数量较少时采用缓存在保证缓存命中率的同时还可以提高程序运行效率。具体的:(1)所述缓存行池保存在内存中,所述将所述被替换的第一类型缓存行以历史缓存行的形式保存到缓存行池中,包括:将所述被替换的第一类型缓存行以历史缓存行的形式直接保存到缓存行池中;(2)所述缓存行池保存在缓存中,所述将所述被替换的第一类型缓存行以历史缓存行的形式保存到缓存行池中,包括:判断所述缓存行池是否空闲;若所述缓存行池空闲,将所述被替换的第一类型缓存行以历史缓存行的形式保存到所述缓存行池中,否则,将符合预先设置的第二替换策略的历史缓存行删除以使得所述缓存行池空闲,将所述被替换的第一类型缓存行以历史缓存行的形式保存到所述缓存行池中。
图3为本发明又一实施例提供的面向重放机制的缓存操作方法流程图,在本发明又一实施例中,为了进一步减少替换信息被重放程序过程中被获取的效率,对初次运行程序过程中生成的替换信息进行编译以形成日志文件,并在重放程序时接收到日志文件后对日志文件进行解码,由于编译动作可以缩小初次运行程序过程中生成的替换信息的大小,便于其传输,从而提高日志文件的传输和操作效率。
如图3所示,本发明实施例提供的面向重放机制的缓存操作方法,用于面向重放机制的缓存,所述面向重放机制的缓存包括缓存数据区和缓存池,所述缓存数据区用于存放当前运行的程序根据访存指令生成的第一类型缓存行,所述缓存池用于存放历史缓存行,所述第一类型缓存行包括标示TAG信息、局部唯一标识信息以及访存指令需要访存的数据,所述历史缓存行包括程序初次运行过程中被替换出来的第一类型缓存行的TAG信息和局部唯一标识信息,所述方法,包括:
步骤301、在初次运行程序的过程中,当缓存行池中存在与第一缓存行匹配的历史缓存行时,根据所述与第一缓存行匹配的历史缓存行生成替换信息。
其中,所述第一缓存行为每当接收到访存指令且该访存指令未命中已存满的缓存数据区时生成的第一类型缓存行所述替换信息包括与第一缓存行匹配的历史缓存行中的TAG信息和局部唯一标识信息。
步骤302、在初次运行所述程序的过程中,将所述替换信息保存至日志缓冲区,在接收到编译触发时对所述日志缓冲区保存的至少一条替换信息进行编码以生成日志文件。
其中,所述步骤302的触发形式可以是程序结束触发,也可以是当日志缓冲区中保存的替换信息的条数达到一定阈值时触发,具体的,所述在接收到编译触发时对所述日志缓冲区保存的至少一条替换信息进行编码以生成日志文件,可以包括:在所述程序初次运行结束时,触发编译,对所述日志缓冲区保存的至少一条替换信息编译以生成日志文件;还可以包括:在所述日志缓冲区中缓存的替换信息条数等于预先设置的第一阈值时,触发编译,对所述日志缓冲区保存的替换信息编译以生成日志文件并清除所述日志缓冲区中保存的替换信息;在所述程序运行结束且所述日志缓冲区中保存有至少一条替换信息时,触发编译,对所述日志缓冲区保存的替换信息编译以生成日志文件。
值得说明的是,当运行庞大且复杂的程序时,需要对海量的访存操作进行处理,则日志缓冲区的规模必然变得非常庞大,甚至超出内存可分配的范围,一方面会导致生成的日志文件规模巨大,一方面将导致日志文件的读取、修改和转移等操作不便,故在程序庞大且复杂时,优先采用当日志缓冲区中保存的替换信息的条数达到一定阈值时触发的触发形式,实现了对大量访存操作进行分块处理,日志文件的大小被分块的规模所限制,对于日志文件的各种操作也更加方便和高效。
步骤303、在重放所述程序时,获取所述程序在初次运行过程中生成的日志文件,将所述日志文件解码以生成替换信息集合。
其中,所述替换信息集合包括至少一条所述替换信息。值得说明的是,步骤303的实现方式有多种,可以在重放程序开始时先获取日志文件并对日志文件进行解码以生成替换信息集合。此处,若程序为复杂且庞大的,会存在日志文件较大的问题,一次将文件进行解码会占用很大的存储空间,故可以在生成替换信息的时候,以该替换信息生成时间的先后为顺序保存至所述日志缓冲区,然后根据替换信息的生成时间,在程序重放的过程中逐步解码所述日志文件以生成所述替换信息集合。逐步解码的过程不仅仅只用于程序结束触发生成的日志文件,也可以用于替换信息达到一定数目进行触发生成的日志文件。
步骤304、在重放程序的过程中,当存在与第二缓存行匹配的替换信息时,将所述第二缓存行保存到辅助缓存中。
其中,所述第二缓存行为程序重放过程中每当接收到访存指令且该访存指令既未命中已存满缓存数据区也未命中所述辅助缓存时被替换出来的第一类型缓存行,所述辅助缓存可以是合作缓存,也可以是二级缓存。
本发明实施例提供的面向重放机制的缓存操作方法,通过缓存行池保存程序初次运行时从缓存数据区被替换出来的第一类型缓存行,当缓存行池中存在与第一缓存行匹配的历史缓存行时,说明在整个程序的初次运行过程中,生成第一缓存行的访存指令在生成第一缓存行之前保存在缓存数据区中并在第一缓存行的访存指令到达之前被替换出缓存数据区,从而使得第一缓存行被反复的从缓存数据区删除和写入,由于在初次运行程序的时候将反复被删除和写入缓存数据区的缓存行以替换信息的形式记录下来,并在重放程序的过程中根据替换信息,将与替换信息匹配的第二缓存行保存到辅助缓存中,那么第二缓存行对应的访存指令在后期到达时可以从辅助缓存中命中,进而保证了程序重放过程中的缓存命中率并且还进一步提高了程序重放过程中的缓存命中率。
为了使得本领域技术人员更好的理解本发明实施例提供的方案,本发明另一实施例提供了面向重放机制的缓存操作方法,以一具体实例来进行详细的说明。
图4a为本发明另一实施例提供的面向重放机制的缓存操作方法中初步运行程序的流程图,图4b为本发明另一实施例提供的面向重放机制的缓存操作方法中重放程序的流程图。图5为本发明另一实施例提供的面向重放机制的缓存操作装置,如图4a和图4b所示,在本实施例中,本发明另一实施例提供的面向重放机制的缓存操作方法,应用于如图5所示的面向重放机制的缓存操作装置,该装置包括记录模块51、重放模块52以及日志缓冲区53。
值得说明的是,在本实施例中,将面向重放机制的缓存在程序初次运行时称为记录用缓存,此时使用缓存中的数字缓存区和缓存行池,在程序重放时称为重放用缓存,此时使用缓存中的数字缓存区和辅助缓存。
其中,所述记录模块51包括第一访存计数器511、记录用缓存512、记录器513以及编码器514。所述记录用缓存512,如图6所示,用于保存多个记录用缓存组。记录用缓存组,如图7所示,包括缓存数据区和缓存行池,其中缓存数据区包括多条第一类型缓存行,每条第一类型缓存行包括标示TAG信息(一般是该第一类型缓存行在内存当中对应的地址,使得寻址操作能够进行)、访存指令需要访存的数据(内存行当中的内容,也就是字1~字4,一般现在是一次内存访问是4字节也就是32个bit,所以在图7中用4个字来标示),即在现有缓存行的基础上增加一局部唯一标识信息,在本实施例中,通过第一访存计数器实现对访存指令进行局部唯一标识的分配,局部唯一标识信息为历史计数位,用于记录该项第一类型缓存行被调入记录用缓存数据区时第一访存计数器当前的计数器值。所述缓存行池包括至少一条历史缓存行,历史缓存行数量可以预先设定,用于记录从记录用数据缓存区中被替换出来的第一类型缓存行,在本实施例中,从记录用数据缓存区中被替换出来的第一类型缓存行以历史缓存行的形式保存在所述缓存行池中。在本实施例中,所述历史缓存行仅包括TAG信息和历史计数位信息,从而达到节省缓存空间和提高操作效率的目的。值得说明的是,所述缓存行池612也可以放在内存中,采用与一般缓存不同的结构和材质,并因此带来缓存行池容量巨大的有益效果,这是由于用于记录的程序只需要执行一次,其执行效率及代价为了重放操作可以做出牺牲。
值得说明的是,上述记录用缓存512是现有缓存的改进设计,该现有缓存需要具备确定性的替换策略(deterministic replace strategy),要求多次运行中同一条件下选择的被替换出去的缓存行一致,典型的替换策略如先进先出型(First In First Out,FIFO)、最后最近使用型(Last Recently Used,LRU)等,可为记录器513提供额外的分析信息和记录信息。由于采用了确定的替换策略之后,被替换出去的缓存行就有了一定的规律性,这样在做记录的时候就有可能使用到这样的额外规律了。
对应地,本发明实施例的重放模块52包括解码器521、第二访存计数器522、重放用缓存523和重放器524。所述重放用缓存523,如图8所示,包括至少一个重放用缓存组。重放用缓存组,如图9所示,包括第重放用缓存数据区和合作缓存(本实施例中以合作缓存为例进行详细说明)。其中,第二缓存数据区包括多条第一类型缓存行。所述合作缓存也包括多条第一类型缓存行,合作缓存中第一类型缓存行的数量可以预先设定,用于存放从重放用缓存数据区被替换出去的并且有必要暂时保留的第一类型缓存行,这些第一类型缓存行虽已被替换出来,但以后还会被用到。值得说明的是,合作缓存812需要有快速的读写访存能力,因此需要采用和现有缓存相同的材质和结构,导致其容量有限,因此需要预先设定大小,这也同时带来程序重放时不能保证缓存命中率100%的原因,但由于合作缓存的读写速度要远高于内存,因此第一类型缓存行由合作缓存调入重放用缓存数据区在时间上可以认为是缓存命中,从而可以在保证缓存命中率的基础上提高缓存命中率。
值得说明的是,因为程序的初次运行和重放,在时间上是相互独立的,所以第一访存计数器和第二访存计数器的功能可以通过一个计数器来实现。
对应于上述装置,本发明另一实施例提供的面向重放机制的缓存操作方法,包括:
如图4a所示的步骤400a-程序初次运行和如图4b所示的步骤400b-程序重放。其中,
步骤400a,包括:
步骤401a、将记录用缓存内各缓存行清空,第一访存计数器清零,记录器和编码器初始化。
步骤402a、访存操作出现(即接收到访存指令)时,根据访存指令获取访存地址。
步骤403a、对第一访存计数器加一,根据访存操作的地址用位操作方法计算出其SET部分(对应记录用缓存组)和TAG部分(对应记录缓存组中的第一类型缓存行),将访存地址定位到记录用缓存中缓存数据区的记录用缓存组。
步骤404a、遍历该记录用缓存组中所有第一类型缓存行,与该次访存指令的TAG部分进行比较,判断缓存是否命中(即判断此次访存目的地址代表的内存行是否已经调入缓存)。如果访存命中,即访存操作的目的内存块已经被调入缓存,执行步骤405a,如果访存未命中,执行步骤406a。
步骤405a、将被命中的第一类型缓存行的历史计数位更新为第一访存计数器当前的计数值。转到步骤411a。
步骤406a、判断所映射的记录用缓存组是否已满,如果所映射的记录用缓存组中仍有空闲缓存行(即未满),则执行步骤407a,否则执行步骤408a-步骤411a。
步骤407a、将该次访存指令访问的数据从内存调入记录用缓存生成第一类型缓存行,将第一访存计数器当前计数值写入该第一类型缓存行的历史计数位中,转到步骤411a,等待下一次访存操作的到来,对余下的访存操作进行处理。
步骤408a、根据预先设置的第一替换策略,如先进先出型(FIFO)、最后最近使用型(LRU)等,选择记录用缓存组中被替换的第一类型缓存行A,将该第一类型缓存行A调入到缓存行池,将访存指令访问的内存行调入到记录用缓存中生成第一类型缓存行B(即第一缓存行)。
步骤409a、遍历该记录用缓存组的缓存行池,判断缓存行池中是否存在与第一类型缓存行B相匹配的历史缓存行C(即判断在之前的访存操作中是否存在相同的内存行被调入缓存然后又被调出),如果缓存行池中存在匹配的历史缓存行C,则执行步骤410a。
步骤410a、根据匹配的历史缓存行C生成替换信息,并将历史缓存行C中的历史计数位更新为第一类型缓存行B的历史计数位。
其中替换信息就是历史缓存行C的历史计数位和历史缓存行C的TAG信息。
步骤411a,判断第一访存计数器当前计数值是否达到上限,如果当前计数值未达到上限,则转到步骤402a,等待下一次访存操作的到来,对余下的访存操作进行处理;如果当前计数器值达到预先设定的阈值,即一次能处理的缓存操作的数量,则执行步骤412a,将日志缓冲区中的计数值进行排序,优选地按照从小到大的顺序排序,然后将缓冲器数据编码并写入日志文件中,清空记录用缓存和第一访存计数器。然后转到步骤402a,等待下一次访存操作到来,对余下的访存操作进行处理。
本实施例中,当运行庞大且复杂的程序时,需要对海量的访存操作进行处理,则日志缓冲区的规模必然变得庞大,甚至超出内存可分配的范围,一方面会导致生成的日志文件的规模巨大,另一方面将导致日志文件的读取、修改和转移等操作不便。通过对第一访存计数器设置阈值,实现对大量访存操作进行分块处理的好处在于,采取分块处理之后,日志文件的大小被分块的规模所限制,对于日志文件的各种操作也将更加方便和高效。
此外,如果对于日志文件的记录信息(本实施例的记录信息为访存操作的计数值)没有进行编码操作的话,随着程序执行的不断深入,访存操作的计数值也越来越大,日志文件的规模也越来越庞大,甚至计数值的大小会超过一般程序规定的整数值的上限。对于注重效率的记录和重放操作,这种情况是很容易出现的,而对于计数值的归零操作无疑能给这种情况节省大量的存储空间,并且也不会出现计数值超过整数值上限的问题。
应当理解,在上述操作进行过程中,如果重放应用还需要记录有关访存的其他信息,那么有关访存操作的其他具体信息也应当根据具体的重放策略进行记录。
步骤400b-程序重放,包括:
步骤401b、将重放用缓存内各缓存行被清空,第二访存计数器清零,重放器和解码器初始化。
步骤402b、打开日志文件,重放模块的解码器对于初次运行时记录得到的日志文件进行解码处理,获得替换信息集合。
可选地,解码这一步骤在程序重放过程中逐步实现,可以避免在程序开始时全部处理所带来的重放程序占用存储空间的问题。
步骤403b、访存操作出现时获取访存地址,第二访存计数器加一,对访存操作的地址进行计算,用位操作方法计算出其SET部分和TAG部分,用以寻找该缓存行在重放用缓存组中应当出现的第一类型缓存行,通过其SET部分定位到重放用缓存组。
步骤404b、遍历该重放用缓存组中数据缓存区中所有第一类型缓存行,与该次访存操作的TAG部分进行比较,判断缓存是否命中(即此次访存目的地址代表的内存行是否已经调入缓存),如果访存命中,执行步骤405b,否则执行步骤406b-步骤407b。
步骤405b、如果访存命中,即访存操作的目的内存行已经被调入缓存,将被命中的第一类型缓存行的历史计数位更新为第二访存计数器当前计数值。然后转到步骤412b。
步骤406b、如果访存暂时没有命中,遍历重放用缓存组中合作缓存中所有第一类型缓存行,与该次访存指令的TAG部分进行比较,判断此次访存目的地址代表的内存行是否已经调入缓存。如果命中,执行步骤407b,如果未命中执行步骤408b-步骤409。
步骤407b、在合作缓存中通过TAG比较找到了与访存地址中的TAG相匹配的第一类型缓存信息K,将第一类型缓存行K直接传递给中央处理器,并将缓存行K的历史计数位更新为第二访存计数器的当前计数值。然后转到步骤412b。
由于合作缓存仍然是缓存,采用了与缓存相同的结构和材料,读写速度与普通缓存相同,并且不需要从一般内存当中读取内存行,仍然可以看作访存命中。
步骤408b、在合作缓存中没有找到TAG相匹配的第一类型缓存行,根据访存指令生成第一类型缓存行L,第一类型缓存行L替代符合预先设置的第一替换策略的第一类型缓存行M保存到重放用缓存中的缓存数据区。
步骤409b、比较缓存行M的历史计数位与之前在解码阶段得到的替换信息集合中替换信息中记载的历史计数位。如果二者不同,说明缓存行M在后续的访存操作中不会再次用到,执行步骤410b、将第一类型缓存行M丢弃。然后转到步骤403b等待下一次访存操作到来,对余下的访存操作进行处理。否则说明缓存行M在后续的访存操作中还会再次用到,如果将其丢弃,那么下次对缓存行M的访问就会产生缓存未命中(cache miss),并因此导致再次访问内存,造成增加访存时间,降低命中率的不利后果,故执行步骤411b、此时重放器将第一类型缓存行M存入到合作缓存中,以备后续访存使用。然后转到步骤412b。
具体的,判断合作缓存是否已满:遍历合作缓存,如果存在位置标记为可用的缓存行,则表明合作缓存未满,将第一类型缓存行M存入到合作缓存的该可用位置。如果合作缓存中不存在位置标记为可用的缓存行,表明合作缓存中的所有位置都已经被占用,则根据预先设定的替换策略,例如选择合作缓存中历史计数位最小的第一类型缓存行N被替换出去,将第一类型缓存行M存入合作缓存中第一类型缓存行N的位置。
步骤412b、判断第二访存计数器值是否达到阈值。如果访存计数器未达到阈值,则转到步骤403b,等待下一次访存操作的到来,否则执行步骤413b,清空第二访存计数器及合作缓存,然后转到步骤403b,等待下一次访存操作的到来。
特别需要说明的是,这里采用的合作缓存和传统的受害者缓存(victim cache)有很大的不同,本发明实施例中的合作缓存是利用缓存行中的局部唯一标识信息以及根据日志文件生成的替换信息来保证合作缓存中的缓存行不会频繁地进出,并且保证这些存储在合作缓存(coherent cache)中的缓存行都有存在的意义。而传统的受害者缓存(victim cache)仅仅是保留了最近从缓存中被替换出去的缓存行,这些缓存行是否都能在接下来的访存操作中被使用到是一个无法确定的问题,这一问题非常重要,如果受害者缓存中的信息在后面不会被用到,那么这种方法的效率就会受到很大的影响。并且,每次在发生缓存未命中时,受害者缓存都需要更新,这样的操作频度对于缓存来说是很大的负担。合作缓存的好处在于,合作缓存的每一个缓存行的读入都是通过日志信息流来确定的,在未来一定会被再次使用到,因此只需要在日志信息反映的特定访存次数与当前访存的局部唯一标识相合拍时才会进行更新,并不会在每一次缓存未命中时都需要更新,从而在提高访存命中率的同时,访存操作效率得到了保证。
本发明实施例提供的面向重放机制的缓存操作方法,通过缓存行池保存程序初次运行时从缓存数据区被替换出来的第一类型缓存行,当缓存行池中存在与第一缓存行匹配的历史缓存行时,说明在整个程序的初次运行过程中,生成第一缓存行的访存指令在生成第一缓存行之前保存在缓存数据区中并在第一缓存行的访存指令到达之前被替换出缓存数据区,从而使得第一缓存行被反复的从缓存数据区删除和写入,由于在初次运行程序的时候将反复被删除和写入缓存数据区的缓存行以替换信息的形式记录下来,并在重放程序的过程中根据替换信息,将与替换信息匹配的第二缓存行保存到辅助缓存中,那么第二缓存行对应的访存指令在后期到达时可以从辅助缓存中命中,进而保证了程序重放过程中的缓存命中率并且还进一步提高了程序重放过程中的缓存命中率。
图10为本发明实施例提供的一种面向重放机制的缓存操作装置结构示意图。如图10所示,本发明实施例提供了一种面向重放机制的缓存操作装置,用于面向重放机制的缓存,所述面向重放机制的缓存包括缓存数据区和缓存池,所述缓存数据区用于存放当前运行的程序根据访存指令生成的第一类型缓存行,所述缓存池用于存放历史缓存行,所述第一类型缓存行包括标示TAG信息、局部唯一标识信息以及访存指令需要访存的数据,所述历史缓存行包括程序初次运行过程中被替换出来的第一类型缓存行的TAG信息和局部唯一标识信息,所述装置,包括:第一生成单元91和第一执行单元92。
第一生成单元91,用于在初次运行程序的过程中,当缓存行池中存在与第一缓存行匹配的历史缓存行时,根据所述与第一缓存行匹配的历史缓存行生成替换信息并将所述第一缓存行中的局部唯一标识信息替换与所述第一缓存行匹配的历史缓存行中的局部唯一标识信息保存在与第一缓存行匹配的历史缓存行中。
其中,所述第一缓存行为每当接收到访存指令且该访存指令未命中已存满的缓存数据区时生成的第一类型缓存行所述替换信息包括与第一缓存行匹配的历史缓存行中的TAG信息和局部唯一标识信息。
在本发明实施例中,如图11所示,所述第一生成单元91,包括:
第一生成模块911,用于在接收到访存指令且该访存指令未命中所述存数据区时,根据该访存指令生成第一缓存行;
第一执行模块912,用于根据预先设置的第一替换策略从所述缓存数据区中选出被替换的第一类型缓存行,将所述第一生成模块生成的第一缓存行保存到被替换的第一缓存行的位置;
第二执行模块913,用于将被所述第一执行模块替换出来的第一类型缓存行以历史缓存行的形式保存到缓存行池中;
第二生成模块914,用于当所述缓存行池中存在与所述第一生成模块生成的第一缓存行匹配的历史缓存行时,根据所述与第一缓存行匹配的历史缓存行生成替换信息。
在本发明实施例中,所述缓存行池保存在内存中,所述第二执行模块,包括:第一执行子模块,用于将所述被替换的第一类型缓存行以历史缓存行的形式直接保存到缓存行池中。或者,所述缓存行池保存在缓存中,所述第二执行模块,还包括:判断子模块,用于判断所述缓存行池是否空闲;第二执行子模块,用于在所述判断子模块判断得到所述缓存池空闲时,将所述被替换的第一类型缓存行以历史缓存行的形式保存到所述缓存行池中;第三执行子模块,用于在所述判断子模块判断得到所述缓存池存满时,用于将符合预先设置的第二替换策略的历史缓存行删除以使得所述缓存行池空闲,将所述被替换的第一类型缓存行以历史缓存行的形式保存到所述缓存行池中。
第一执行单元92,用于在重放程序的过程中,当第一生成单元生成的替换信息中存在与第二缓存行匹配的替换信息时,将所述第二缓存行保存到辅助缓存中。
其中,所述第二缓存行为程序重放过程中每当接收到访存指令且该访存指令既未命中已存满缓存数据区也未命中所述辅助缓存时被替换出来的第一类型缓存行。
进一步的,为了减少替换信息的保存空间,如图12所示,所述面向重放机制的缓存操作装置,还包括:执行编译单元93和获取解码单元94。
执行编译单元93,用于在初次运行所述程序的过程中,将所述替换信息保存至日志缓冲区,在接收到编译触发时对所述日志缓冲区保存的至少一条替换信息进行编码以生成日志文件。
在本发明实施例中所述执行编译单元,可以包括:第一触发模块,用于在所述程序初次运行结束时,触发编译;第一编译模块,用于在所述第一触发模块触发编译时对所述日志缓冲区保存的至少一条替换信息编译以生成日志文件。可选的,所述执行编译单元,还可以包括:第二触发模块,用于在所述日志缓冲区中缓存的替换信息条数等于预先设置的第一阈值时,触发编译;第二编译模块,用于在所述第二触发模块触发编译时对所述日志缓冲区保存的替换信息编译以生成日志文件并清除所述日志缓冲区中保存的替换信息;第三触发模块,用于在所述程序运行结束且所述日志缓冲区中保存有至少一条替换信息时,触发编译;第二编译模块,还用于在所述第三触发模块触发编译时对所述日志缓冲区保存的替换信息编译以生成日志文件。
获取解码单元94,用于在重放所述程序时,获取所述执行编译单元编译生成的日志文件,将所述日志文件解码以生成替换信息集合,所述替换信息集合包括至少一条所述替换信息。
值得说明的是,所述替换信息以该替换信息生成时间的先后为顺序保存至所述日志缓冲区;所述获取解码单元,包括:解码模块,用于根据替换信息的生成时间,在程序重放的过程中逐步解码所述日志文件以生成所述替换信息集合。
进一步的,所述面向重放机制的缓存操作装置,还可以包括第二执行单元,分配单元、以及丢弃单元,其中,
所述第二执行单元,用于在初次运行所述程序的过程中,当接收到访存指令且该访存指令命中缓存数据区时,将该访存指令对应的局部唯一标识替换缓存数据区中被命中的第一类型缓存行中的局部唯一标识保存在所述缓存数据区;还用于在重放所述程序的过程中,当接收到到访存指令且该访存指令命中缓存数据区或者辅助缓存时,将该访存指令对应的局部唯一标识替换缓存数据区或者辅助缓存中被命中的第一类型缓存行中的局部唯一标识保存在所述缓存数据区。
所述分配单元,用于在运行程序的过程中,当接收到访存指令时,对所述访存指令分配局部唯一标识,所述运行包括初次运行和重放。
所述丢弃单元,用于当不存在与所述第二缓存行匹配的替换信息时,将所述第二缓存行丢弃。
本发明实施例提供的面向重放机制的缓存操作方法,通过缓存行池保存程序初次运行时从缓存数据区被替换出来的第一类型缓存行,当缓存行池中存在与第一缓存行匹配的历史缓存行时,说明在整个程序的初次运行过程中,生成第一缓存行的访存指令在生成第一缓存行之前保存在缓存数据区中并在第一缓存行的访存指令到达之前被替换出缓存数据区,从而使得第一缓存行被反复的从缓存数据区删除和写入,由于在初次运行程序的时候将反复被删除和写入缓存数据区的缓存行以替换信息的形式记录下来,并在重放程序的过程中根据替换信息,将与替换信息匹配的第二缓存行保存到辅助缓存中,那么第二缓存行对应的访存指令在后期到达时可以从辅助缓存中命中,进而保证了程序重放过程中的缓存命中率并且还进一步提高了程序重放过程中的缓存命中率。
最后应说明的是:以上所述,仅为本发明较佳的具体实施方式,各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (23)
1.一种面向重放机制的缓存操作方法,其特征在于,用于面向重放机制的缓存,所述面向重放机制的缓存包括缓存数据区和缓存行池,所述缓存数据区用于存放当前运行的程序根据访存指令生成的第一类型缓存行,所述缓存行池用于存放历史缓存行,所述第一类型缓存行包括标示TAG信息、局部唯一标识信息以及访存指令需要访存的数据,所述历史缓存行包括程序初次运行过程中被替换出来的第一类型缓存行的TAG信息和局部唯一标识信息,所述方法,包括:
在初次运行程序的过程中,当缓存行池中存在与第一缓存行匹配的历史缓存行时,根据所述与第一缓存行匹配的历史缓存行生成替换信息,并将所述第一缓存行中的局部唯一标识信息替换为与所述第一缓存行匹配的历史缓存行中的局部唯一标识信息并保存在与第一缓存行匹配的历史缓存行中,其中,所述第一缓存行为每当接收到访存指令且该访存指令未命中已存满的缓存数据区时生成的第一类型缓存行,所述替换信息包括与第一缓存行匹配的历史缓存行中的TAG信息和局部唯一标识信息;
在重放程序的过程中,当存在与第二缓存行匹配的替换信息时,将所述第二缓存行保存到辅助缓存中,所述第二缓存行为程序重放过程中每当接收到访存指令且该访存指令既未命中已存满缓存数据区也未命中所述辅助缓存时被替换出来的第一类型缓存行。
2.根据权利要求1所述的方法,其特征在于,所述当缓存行池中存在与第一缓存行匹配的历史缓存行时,根据所述与第一缓存行匹配的历史缓存行生成替换信息,包括:
在接收到访存指令且该访存指令未命中所述存数据区时,根据该访存指令生成第一缓存行;
根据预先设置的第一替换策略从所述缓存数据区中选出被替换的第一类型缓存行,将所述第一缓存行保存到被替换的第一缓存行的位置;
将所述被替换的第一类型缓存行以历史缓存行的形式保存到缓存行池中;
当所述缓存行池中存在与所述第一缓存行匹配的历史缓存行时,根据所述与第一缓存行匹配的历史缓存行生成替换信息。
3.根据权利要求2所述的方法,其特征在于,所述缓存行池位于内存中,所述将所述被替换的第一类型缓存行以历史缓存行的形式保存到缓存行池中,包括:
将所述被替换的第一类型缓存行以历史缓存行的形式直接保存到缓存行池中。
4.根据权利要求2所述的方法,其特征在于,所述缓存行池位于缓存中,所述将所述被替换的第一类型缓存行以历史缓存行的形式保存到缓存行池中,包括:
判断所述缓存行池是否空闲;
若所述缓存行池空闲,将所述被替换的第一类型缓存行以历史缓存行的形式保存到所述缓存行池中,否则,将符合预先设置的第二替换策略的历史缓存行删除以使得所述缓存行池空闲,将所述被替换的第一类型缓存行以历史缓存行的形式保存到所述缓存行池中。
5.根据权利要求1-4任一项所述的方法,其特征在于,每个缓存数据区对应一个缓存行池,每个缓存行池中保存的历史缓存行由TAG信息和局部唯一标识组成,一对缓存数据区和缓存行池构成一个记录用缓存组。
6.根据权利要求1所述的方法,其特征在于,还包括:
在初次运行所述程序的过程中,将所述替换信息保存至日志缓冲区,在接收到编译触发时对所述日志缓冲区保存的至少一条替换信息进行编码以生成日志文件;
在重放所述程序时,获取所述程序在初次运行过程中生成的日志文件,将所述日志文件解码以生成替换信息集合,所述替换信息集合包括至少一条所述替换信息。
7.根据权利要求6所述的方法,其特征在于,所述在接收到编译触发时对所述日志缓冲区保存的至少一条替换信息进行编码以生成日志文件,包括:
在所述程序初次运行结束时,触发编译,对所述日志缓冲区保存的至少一条替换信息编译以生成日志文件。
8.根据权利要求6所述的方法,其特征在于,所述在接收到编译触发时对所述日志缓冲区缓存的至少一条替换信息进行编码以生成日志文件,包括:
在所述日志缓冲区中缓存的替换信息条数等于预先设置的第一阈值时,触发编译,对所述日志缓冲区保存的替换信息编译以生成日志文件并清除所述日志缓冲区中保存的替换信息;
在所述程序运行结束且所述日志缓冲区中保存有至少一条替换信息时,触发编译,对所述日志缓冲区保存的替换信息编译以生成日志文件。
9.根据权利要求6-8任一项所述的方法,其特征在于,所述替换信息以该替换信息生成时间的先后为顺序保存至所述日志缓冲区;
所述将所述日志文件解码以生成替换信息集合,包括:
根据替换信息的生成时间,在程序重放的过程中逐步解码所述日志文件以生成所述替换信息集合。
10.根据权利要求1所述的方法,其特征在于,还包括:
在初次运行所述程序的过程中,当接收到访存指令且该访存指令命中缓存数据区时,将该访存指令对应的局部唯一标识替换缓存数据区中被命中的第一类型缓存行中的局部唯一标识保存在所述缓存数据区;
在重放所述程序的过程中,当接收到到访存指令且该访存指令命中缓存数据区或者辅助缓存时,将该访存指令对应的局部唯一标识替换缓存数据区或者辅助缓存中被命中的第一类型缓存行中的局部唯一标识保存在所述缓存数据区。
11.根据权利要求1-4、6-8以及10中任一项所述的方法,其特征在于,还包括:
在运行程序的过程中,当接收到访存指令时,对所述访存指令分配局部唯一标识,所述运行包括初次运行和重放。
12.根据权利要求11所述的方法,其特征在于,还包括:
当不存在与所述第二缓存行匹配的替换信息时,将所述第二缓存行丢弃。
13.根据权利要求11所述的方法,所述辅助缓存为合作缓存或者二级缓存。
14.一种面向重放机制的缓存操作装置,其特征在于,用于面向重放机制的缓存,所述面向重放机制的缓存包括缓存数据区和缓存行池,所述缓存数据区用于存放当前运行的程序根据访存指令生成的第一类型缓存行,所述缓存行池用于存放历史缓存行,所述第一类型缓存行包括标示TAG信息、局部唯一标识信息以及访存指令需要访存的数据,所述历史缓存行包括程序初次运行过程中被替换出来的第一类型缓存行的TAG信息和局部唯一标识信息,所述装置,包括:
第一生成单元,用于在初次运行程序的过程中,当缓存行池中存在与第一缓存行匹配的历史缓存行时,根据所述与第一缓存行匹配的历史缓存行生成替换信息,并将所述第一缓存行中的局部唯一标识信息替换为与所述第一缓存行匹配的历史缓存行中的局部唯一标识信息并保存在与第一缓存行匹配的历史缓存行中,其中,所述第一缓存行为每当接收到访存指令且该访存指令未命中已存满的缓存数据区时生成的第一类型缓存行,所述替换信息包括与第一缓存行匹配的历史缓存行中的TAG信息和局部唯一标识信息;
第一执行单元,用于在重放程序的过程中,当第一生成单元生成的替换信息中存在与第二缓存行匹配的替换信息时,将所述第二缓存行保存到辅助缓存中,所述第二缓存行为程序重放过程中每当接收到访存指令且该访存指令既未命中已存满缓存数据区也未命中所述辅助缓存时被替换出来的第一类型缓存行。
15.根据权利要求14所述的装置,其特征在于,所述第一生成单元,包括:
第一生成模块,用于在接收到访存指令且该访存指令未命中所述存数据区时,根据该访存指令生成第一缓存行;
第一执行模块,用于根据预先设置的第一替换策略从所述缓存数据区中选出被替换的第一类型缓存行,将所述第一生成模块生成的第一缓存行保存到被替换的第一缓存行的位置;
第二执行模块,用于将被所述第一执行模块替换出来的第一类型缓存行以历史缓存行的形式保存到缓存行池中;
第二生成模块,用于当所述缓存行池中存在与所述第一生成模块生成的第一缓存行匹配的历史缓存行时,根据所述与第一缓存行匹配的历史缓存行生成替换信息。
16.根据权利要求15所述的装置,其特征在于,所述缓存行池位于内存中,所述第二执行模块,包括:
第一执行子模块,用于将所述被替换的第一类型缓存行以历史缓存行的形式直接保存到缓存行池中;
或者,所述缓存行池保存在缓存中,所述第二执行模块,还包括:
判断子模块,用于判断所述缓存行池是否空闲;
第二执行子模块,用于在所述判断子模块判断得到所述缓存行池空闲时,将所述被替换的第一类型缓存行以历史缓存行的形式保存到所述缓存行池中;
第三执行子模块,用于在所述判断子模块判断得到所述缓存行池存满时,用于将符合预先设置的第二替换策略的历史缓存行删除以使得所述缓存行池空闲,将所述被替换的第一类型缓存行以历史缓存行的形式保存到所述缓存行池中。
17.根据权利要求14所述的装置,其特征在于,还包括:
执行编译单元,用于在初次运行所述程序的过程中,将所述替换信息保存至日志缓冲区,在接收到编译触发时对所述日志缓冲区保存的至少一条替换信息进行编码以生成日志文件;
获取解码单元,用于在重放所述程序时,获取所述执行编译单元编译生成的日志文件,将所述日志文件解码以生成替换信息集合,所述替换信息集合包括至少一条所述替换信息。
18.根据权利要求17所述的装置,其特征在于,所述执行编译单元,包括:
第一触发模块,用于在所述程序初次运行结束时,触发编译;
第一编译模块,用于在所述第一触发模块触发编译时对所述日志缓冲区保存的至少一条替换信息编译以生成日志文件。
19.根据权利要求17所述的装置,其特征在于,所述执行编译单元,包括:
第二触发模块,用于在所述日志缓冲区中缓存的替换信息条数等于预先设置的第一阈值时,触发编译;
第二编译模块,用于在所述第二触发模块触发编译时对所述日志缓冲区保存的替换信息编译以生成日志文件并清除所述日志缓冲区中保存的替换信息;
第三触发模块,用于在所述程序运行结束且所述日志缓冲区中保存有至少一条替换信息时,触发编译;
第二编译模块,还用于在所述第三触发模块触发编译时对所述日志缓冲区保存的替换信息编译以生成日志文件。
20.根据权利要求17-19任一项所述的装置,其特征在于,所述替换信息以该替换信息生成时间的先后为顺序保存至所述日志缓冲区;
所述获取解码单元,包括:
解码模块,用于根据替换信息的生成时间,在程序重放的过程中逐步解码所述日志文件以生成所述替换信息集合。
21.根据权利要求14所述的装置,其特征在于,还包括:
第二执行单元,用于在初次运行所述程序的过程中,当接收到访存指令且该访存指令命中缓存数据区时,将该访存指令对应的局部唯一标识替换缓存数据区中被命中的第一类型缓存行中的局部唯一标识保存在所述缓存数据区;
所述第二执行单元,还用于在重放所述程序的过程中,当接收到到访存指令且该访存指令命中缓存数据区或者辅助缓存时,将该访存指令对应的局部唯一标识替换缓存数据区或者辅助缓存中被命中的第一类型缓存行中的局部唯一标识保存在所述缓存数据区。
22.根据权利要求14-19以及21中任一项所述的装置,其特征在于,还包括:
分配单元,用于在运行程序的过程中,当接收到访存指令时,对所述访存指令分配局部唯一标识,所述运行包括初次运行和重放。
23.根据权利要求22所述的装置,其特征在于,还包括:
丢弃单元,用于当不存在与所述第二缓存行匹配的替换信息时,将所述第二缓存行丢弃。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310746996.6A CN103744800B (zh) | 2013-12-30 | 2013-12-30 | 面向重放机制的缓存操作方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310746996.6A CN103744800B (zh) | 2013-12-30 | 2013-12-30 | 面向重放机制的缓存操作方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103744800A CN103744800A (zh) | 2014-04-23 |
CN103744800B true CN103744800B (zh) | 2016-09-14 |
Family
ID=50501818
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310746996.6A Active CN103744800B (zh) | 2013-12-30 | 2013-12-30 | 面向重放机制的缓存操作方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103744800B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9767041B2 (en) * | 2015-05-26 | 2017-09-19 | Intel Corporation | Managing sectored cache |
US10127152B2 (en) | 2015-10-20 | 2018-11-13 | International Business Machines Corporation | Populating a second cache with tracks from a first cache when transferring management of the tracks from a first node to a second node |
US10320936B2 (en) | 2015-10-20 | 2019-06-11 | International Business Machines Corporation | Populating a secondary cache with unmodified tracks in a primary cache when redirecting host access from a primary server to a secondary server |
CN109799897B (zh) * | 2019-01-29 | 2019-11-26 | 吉林大学 | 一种减少gpu二级缓存能耗的控制方法及装置 |
CN110083387B (zh) * | 2019-04-19 | 2021-11-12 | 上海兆芯集成电路有限公司 | 使用轮询机制的处理系统及其访存方法 |
CN113849455B (zh) * | 2021-09-28 | 2023-09-29 | 致真存储(北京)科技有限公司 | 一种基于混合式存储器的mcu及缓存数据的方法 |
CN115809208B (zh) * | 2023-01-19 | 2023-07-21 | 北京象帝先计算技术有限公司 | 缓存数据刷新方法、装置、图形处理系统及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1452736A (zh) * | 2000-02-14 | 2003-10-29 | 英特尔公司 | 拥有带快慢重放路径的重放体系结构的处理器 |
US6986010B2 (en) * | 2002-12-13 | 2006-01-10 | Intel Corporation | Cache lock mechanism with speculative allocation |
CN1806226A (zh) * | 2003-06-10 | 2006-07-19 | 先进微装置公司 | 具有重放机制的加载存储单元 |
CN101576856A (zh) * | 2009-06-18 | 2009-11-11 | 浪潮电子信息产业股份有限公司 | 一种基于长短周期访问频度的缓存数据替换方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6631454B1 (en) * | 1996-11-13 | 2003-10-07 | Intel Corporation | Processor and data cache with data storage unit and tag hit/miss logic operated at a first and second clock frequencies |
WO2003001383A2 (en) * | 2001-06-26 | 2003-01-03 | Sun Microsystems, Inc. | Using an l2 directory to facilitate speculative loads in a multiprocessor system |
-
2013
- 2013-12-30 CN CN201310746996.6A patent/CN103744800B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1452736A (zh) * | 2000-02-14 | 2003-10-29 | 英特尔公司 | 拥有带快慢重放路径的重放体系结构的处理器 |
US6986010B2 (en) * | 2002-12-13 | 2006-01-10 | Intel Corporation | Cache lock mechanism with speculative allocation |
CN1806226A (zh) * | 2003-06-10 | 2006-07-19 | 先进微装置公司 | 具有重放机制的加载存储单元 |
CN101576856A (zh) * | 2009-06-18 | 2009-11-11 | 浪潮电子信息产业股份有限公司 | 一种基于长短周期访问频度的缓存数据替换方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103744800A (zh) | 2014-04-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103744800B (zh) | 面向重放机制的缓存操作方法及装置 | |
US10303596B2 (en) | Read-write control method for memory, and corresponding memory and server | |
US8225029B2 (en) | Data storage processing method, data searching method and devices thereof | |
US9767140B2 (en) | Deduplicating storage with enhanced frequent-block detection | |
US9274959B2 (en) | Handling virtual memory address synonyms in a multi-level cache hierarchy structure | |
US9323685B2 (en) | Data storage space processing method and processing system, and data storage server | |
US8122216B2 (en) | Systems and methods for masking latency of memory reorganization work in a compressed memory system | |
KR20090026296A (ko) | 예측 데이터 로더 | |
US20110302365A1 (en) | Storage system using a rapid storage device as a cache | |
US20120303928A1 (en) | Implementing enhanced deterministic memory allocation for indirection tables for persistent media | |
US20170371807A1 (en) | Cache data determining method and apparatus | |
US20130268770A1 (en) | Cryptographic hash database | |
US9507705B2 (en) | Write cache sorting | |
US8472449B2 (en) | Packet file system | |
CN107491523A (zh) | 存储数据对象的方法及装置 | |
CN107870973A (zh) | 一种加快多路监控同时回放的文件存储系统 | |
CN105677236B (zh) | 一种存储设备及其存储数据的方法 | |
CN103150395B (zh) | 基于ssd的文件系统目录路径解析方法 | |
US20060143395A1 (en) | Method and apparatus for managing a cache memory in a mass-storage system | |
KR101109210B1 (ko) | 데이터 액세스 위반을 검출하기 위한 방법 및 장치 | |
CN108833817B (zh) | 一种视频数据存储方法及装置 | |
KR20100069240A (ko) | 캐시 컨트롤을 위한 장치 및 방법 | |
US7200731B2 (en) | Memory leak detection | |
US6353871B1 (en) | Directory cache for indirectly addressed main memory | |
CN106649143B (zh) | 一种访问缓存的方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
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. |