一种数据预取方法及装置的制造方法_3

文档序号:8430727阅读:来源:国知局
算距离之和。
[0103]可选的,上述采用所述链式流预模式进行预取,可以包括:
[0104]对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取,并获取模式表(Pattern Table, PTB)的最旧项,再修改所述最旧项,修改后的所述最旧项的首地址为所述第三缺失地址与所述第一计算距离之和,修改后的所述最旧项的尾地址为所述第三缺失地址与T倍所述第一计算距离之和,修改后的所述最旧项的距离为所述第一计算距离;当缓存命中,且所述缓存命中的地址在所述首地址和所述尾地址的中间时,继续向所述缓存命中的地址之后的地址发起预取;其中,所述N预先设置的预取深度,所述T为大于I的整数(例如:4、6和8等)。
[0105]其中,上述缓存命中可以是从缓存中取到数据,另外,该缓存命中可以是在执行对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取的操作之后的任意时刻的缓存命中。这样该实施方式可以实现缓存不命中时,即获取到缺失地址时,发起预取,还可以在缓存命中时,发起预取。
[0106]其中,该预取的深度和距离都可以是预先设置,或者根据实际情况进行调整的,对此本实施例不作限定。对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取可以是以第一地址为起始地址进行深度为N的多次预取,其中,第一地址等于所述第三缺失地址与所述第一计算距离之和。另外,上述继续向后发起预取可以是从继续向上述预取命中的地址之后的地址进行预取。另外,上述PTB可以用于维护发现模式并对该发现模式进行自增强利用,且该PTB可以是用于寄存器结构实现的缓存,PTB可以用于缓存在不同时间段的最早预取地址(即上述首地址)、最近预取地址(即上述尾地址)和距离,上述最旧项可以是指离上述预取操作最近的时间段包括的首地址、尾地址和距离。另外,该PTB还可以采用近期最少使用(Least Recently Used, LRU)算法机制进行内容替换。
[0107]例如:第一缺失地址Missl是0x90000,那么索引到第4个entry,发现该entry状态初始状态,于是记录缺失地址第一缺失地址,并将第4个entry的状态置为准训练状态;
[0108]第二缺失地址Miss2是0x90008,那么索引到第4个entry,发现该entry状态准训练状态,于是记录Miss2,并计算第一计算距离DISTl= (Miss2_Missl)、将第4个entry的状态置为模式发现状态;
[0109]第三缺失地址Miss3是0x90010,那么索引到第4个entry,发现该entry状态模式发现状态,于是计算Miss3-Miss2与DISTl比较,如果相等,则将MAP该项清零,并置第4个entry的状态为初始状态。并对Miss3+DIST1连续发起N次预取(N为深度),同时以LRU算法找PTB的最旧项,并记录该最旧项的首地址为Miss3+DIST1,尾地址为Miss3+4*DIST1,距离=DIST1。此后的缓存命中的地址若在首地址和尾地址范围内,则继续向缓存命中的地址之后的地址发起预取。
[0110]205、当判断训练模式为链式流训练模式时,采用所述链式流训练模式对缺失地址进行训练。
[0111]可选的,步骤205可以包括:
[0112]获取第四缺失地址,并将所述第四缺失地址作为索引地址索引MAP得到第二入口项entry ;当所述第一 entry的状态为初始状态时,记录所述第四缺失地址的第一缺失返回值,并将所述第一 entry的状态设置为准训练状态;其中,所述MAP用于记录历史访存信息;
[0113]获取第五缺失地址,并将第五缺失地址作为索引地址索引所述MAP得到所述第二 entry,当所述第二 entry的状态为准训练状态时,记录所述第五缺失地址的第二缺失返回值,再将所述第五缺失地址减去所述第一缺失返回值得到第二计算距离,并将所述第一entry的状态设置为模式发现状态;
[0114]获取第六缺失地址,并将第六缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一 entry的状态为模式发现状态时,判断所述第六缺失地址与所述第二缺失返回值之差是否等于所述第二计算距离,若是,则发现链式流预取模式;其中,所述第四缺失地址、第五缺失地址和第六缺失地址为相邻缺失地址。
[0115]可选的,上述将所述第四缺失地址作为索引地址索引MAP可以是将第四缺失地址的最高三位作为索引地址索引MAP ;上述将所述第五缺失地址作为索引地址索引MAP可以是将第五缺失地址的最高三位作为索引地址索引MAP ;上述将所述第六缺失地址作为索引地址索引MAP可以是将第六缺失地址的最高三位作为索引地址索引MAP。另外,发现链式流预取模式后,还可以将上述MAP中第二 entry所在的项清零,并将第一 entry的状态设置为初始状态。另外,上述第一缺失返回值、第二缺失返回值和第三缺失返回值的都可以是类地址。
[0116]206、当所述链式流训练模式发现的预取模式为链式流预模式时,采用所述链式流预模式进行预取。
[0117]可选的,上述采用所述链式流预模式进行预取,可以包括:
[0118]对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取,其中,所述N预先设置的预取深度。
[0119]其中,该预取的深度和距离都可以是预先设置,或者根据实际情况进行调整的,对此本实施例不作限定。对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取可以是以第一地址为起始地址进行深度为N的多次预取,其中,第一地址等于所述第三缺失返回值与所述第二计算距离之和。
[0120]可选的,上述采用所述链式流预模式进行预取,可以包括:
[0121]对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取,并获取模式表PTB的最旧项,再修改所述最旧项,修改后的所述最旧项的首地址为所述第三缺失返回值与所述第二计算距离之和,修改后的所述最旧项的尾地址为所述预取中最后一次预取的地址,修改后的所述最旧项的距离为所述第二计算距离;当缓存命中,且所述缓存命中的地址为所述首地址或者所述尾地址时,继续向所述缓存命中的地址之后的地址发起预取;其中,所述N预先设置的预取深度。
[0122]其中,上述缓存命中可以是从缓存中取到数据,另外,该缓存命中可以是在执行对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取的操作之后的任意时刻的缓存命中。这样该实施方式可以实现缓存不命中时,即获取到缺失地址时,发起预取,还可以在缓存命中时,发起预取。
[0123]例如:第四缺失地址Miss4是0x40000,是类地址,那么索引到第2个entry,发现该entry状态为初始状态,于是记录第一缺失返回值Rvall,并置第2个entry的状态为准训练状态;
[0124]第五缺失地址Miss5是0x40008,那么索引到第2个entry,发现该entry状态准训练状态,于是记录其第二返回值Rval2=0x50000,第二计算距离DIST2= (Miss5_Rvall),置第2个entry的状态为模式发现状态;
[0125]第六缺失地址Miss6是0x50008,那么索弓I到第2个entry,发现该entry状态为模式发现状态,于是计算Miss6-Rval2与DIST2比较,如果相等,则将MAP该项清零,置第2个entry的状态为初始状态。并对Miss6的第三缺失返回值Rval3+DIST顺序发起N次预取(N为深度),同时以LRU算法找PTB的最旧项,并记录首地址=Rval3+DIST2,距离=DIST2。尾地址在N次预取完成后,记录为最后一次预取地址。此后,若缓存命中首地址或者尾地址,则向后继续发起预取。
[0126]可选的,如图3所示,所述方法还可以包括:
[0127]207、统计特定时间段内的预取准确率、预取有害率和预取迟到率,其中,所述预取准确率为预取命中次数除以总预取次数,所述预取有害率为污染预取次数除以总预取次数,所述预取迟到率为迟到预取次数除以预取命中次数。
[0128]可选的,上述预取准确率可以包括线性流预取准确率和链式流预取准确率,上述预取有害率可以包括线性流预取有害率和链式流预取有害率,上述预取迟到率可以包括线性流预取迟到率和链式流预取迟到率。另外,上述特定时间段可以是理解为一个周期,本实施例中可以存在多个周期。
[0129]可选的,步骤207可以通过两组八个硬件计数器,分别记录两种模式的预取发起、预取命中、预取污染和预取迟到次数。在每一路缓存块上需要维护两比特信息区分数据来自普通缓存请求,还是来自预取请求,或者还是预取请求的类型。例如:当预取回的数据被填入缓存中时,将该缓存行的标识置为第一标识(例如:0b’ 01)表示线性流预取,或第二标识(例如:0b’ 10)表示链式流预取,否则置为第三标识(例如:0)表示正常请求。例如:通过第一计数器(例如=SEQCNT计数器)记录线性流模式发起的预取总次数,而第二计数器(例如=LINCNT计数器)记录链式流模式的预取总次数。每次缓存命中时,检查该缓存行的标识位,若为第一标识(例如:0b’ 01),则更新第三计数器(例如=SEQHIT计数器),若为第二标识(例如:0b’10),则更新第四计数器(例如=LINHIT计数器),然后将该缓存行标识位重置为第三标识(例如:0)。其中,上述Ob表示可以二进制数据。
[0130]可选的,污染预取次数可以借助布隆过滤器来统计,其中,布隆过滤器可以由哈希函数和记分牌组成,哈希函数将输入映射到记分牌的多个Ibit上。在每次预取数据返回时,将该预取地址通过哈希函数将记分牌对应位置为第四标识(例如:0b’0)。当发生预取导致的缓存替换时,如果对应缓存行是由普通请求取回,那么用该缓存行地址作为输入通过哈希函数,将记分牌对应位置第五标识(例如:0b’ 1),对应于由该预取发生的一次逐出。这样,在每次发生缓存缺失时,若该缓存行由预取取回,那么用缺失地址通过哈希函数查找对应记分牌的位,如果为第五标识(例如:0b’ I)则表明是一次预取污染导致的缓存缺失。于是统计线性流预取污染次数和链式流预取污染次数的第五计数器(例如:SEQPLUT计数器)和第六计数器(例如:LINPLUT)加I。
[0131]可选的,迟到率预取次数需要借助预取队列来统计,预取队列跟踪正在处理的预取请求。当发起一次预取请求时,预取队列将该请求记录在表项中,当该请求的数据返回时,清除该项记录。每次发生缓存缺失时,检查该地址是否在预取队列中有记录,如果有则将统计线性流迟到预取次数和链式流迟到预取次数的第七计数器(例如:SEQLATE计数器)和第八计数器(例如:LINLATE计数器)加1,并将该位清零。
[0132]可选的,上述采用所述线性流预取模式进行预取,可以包括:
[0133]当线性流预取准确率超过第一预设阈值时,增加预取深度,采用所述线性流预取模式进行预取,所述预取的深度为所述增加后的预取深度。
[0134]可选的,上述采用所述线性流预取模式进行预取,可以包括:
[0135]当所述线性流预取准确率超过第一预设阈值,且所述线性流预取迟到率超过第二预设阈值时,增加预取深度,并增加预取距离,采用所述线性流预取模式进行预取,所述预取的深度为所述增加后的预取深度,所述预取的距离为所述增加后的预取距离。
[0
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1