CN104750696B - 一种数据预取方法及装置 - Google Patents
一种数据预取方法及装置 Download PDFInfo
- Publication number
- CN104750696B CN104750696B CN201310733130.1A CN201310733130A CN104750696B CN 104750696 B CN104750696 B CN 104750696B CN 201310733130 A CN201310733130 A CN 201310733130A CN 104750696 B CN104750696 B CN 104750696B
- Authority
- CN
- China
- Prior art keywords
- address
- prefetch
- pattern
- prefetches
- depth
- 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.)
- Expired - Fee Related
Links
Abstract
本发明实施例公开了一种数据预取方法及装置,该方法可包括:获取缺失返回值;根据所述缺失返回值判断训练模式;当判断训练模式为目标训练模式时,采用所述目标训练模式对缺失地址进行训练,所述目标训练包括线性流训练模式或者链式流训练模式;当所述目标训练模式发现的预取模式为目标预取模式时,采用所述目标预取模式进行预取;其中,所述目标预取模式包括线性流预取模式或者链式流预模式。本发明实施例可以提高预取的准确率。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种数据预取方法及装置。
背景技术
目前存储器和处理器的性能差距不断扩大,存储延迟可能高达数百个处理器周期,这使得存储访问成为系统性能提升的关键瓶颈之一。为降低存储访问延迟导致的性能损失,研究人员提出了数据预取机制。预取是指在处理器访问指令或数据前就把它们从芯片外存储器取到高速缓存或者预取缓存。目前预取技术主要是通过一个固定的预取方法进行预取。但是在实际应用中地址的模式包括线性流和链式流模式,且各模式的读取方法是不同的,这样通过一种固定的预取方式进行预取,那么在预取过程中就会出现大量的无用预取。例如:通过基于内容指导的无状态预取方法的预取,该方法监控所有的缺失返回值,并判断这些值是否是指针类型,如果判断是指针则以该值作为地址发起预取。该技术中,只能对缺失返回值为指针类型且该缺失返回值可以作为地址使用时,才会是有用预取。而实际应用中并非所有取到的指针都可以作为地址使用,另外,并非所有缺失返回值都是针类型,这样该方法就会产生大量的无用预取。
可见,目前的预取技术中预取准确率较低。
发明内容
本发明实施例提供了一种数据预取方法及装置,可以解决目前的预取技术中预取准确率较低的问题。
第一方面,本发明提供一种数据预取方法,包括:
获取缺失返回值;
根据所述缺失返回值判断训练模式;
当判断训练模式为目标训练模式时,采用所述目标训练模式对缺失地址进行训练,所述目标训练包括线性流训练模式或者链式流训练模式;
当所述目标训练模式发现的预取模式为目标预取模式时,采用所述目标预取模式进行预取;其中,所述目标预取模式包括线性流预取模式或者链式流预模式。
在第一种可能的实现方式中,所述根据所述缺失返回值判断训练模式,包括:
判断所述缺失返回值是否为缺失地址,若是,则判断训练模式为链式流训练模式,若否,则判断训练模式为线性流训练模式。
结合第一方面或者第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述目标训练包括线性流训练模式;
所述采用所述目标训练模式对缺失地址进行训练,包括:
获取第一缺失地址,并将所述第一缺失地址作为索引地址索引历史访存池MAP得到第一入口项entry;当所述第一entry的状态为初始状态时,记录所述第一缺失地址,并将所述第一entry的状态设置为准训练状态;其中,所述MAP用于记录历史访存信息;
获取第二缺失地址,并将所述将第二缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一entry的状态为准训练状态时,将所述第二缺失地址减去所述第一缺失地址得到第一计算距离,并将所述第一entry的状态设置为模式发现状态;
获取第三缺失地址,并将所述将第三缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一entry的状态为模式发现状态时,判断所述第三缺失地址与所述第二缺失地址之差是否等于所述第一计算距离,若是,则发现线性流预取模式;其中,所述第一缺失地址、第二缺失地址和第三缺失地址为相邻缺失地址;
所述采用所述目标预取模式进行预取,包括:
对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取,其中,所述N预先设置的预取深度;或者
对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取,并获取模式表PTB的最旧项,再修改所述最旧项,修改后的所述最旧项的首地址为所述第三缺失地址与所述第一计算距离之和,修改后的所述最旧项的尾地址为所述第三缺失地址与T倍所述第一计算距离之和,修改后的所述最旧项的距离为所述第一计算距离;当缓存命中,且所述缓存命中的地址在所述首地址和所述尾地址的中间时,继续向所述缓存命中的地址之后的地址发起预取;其中,所述N预先设置的预取深度,所述T为大于1的整数。
结合第一方面或者第一方面的第一种可能的实现方式,在第一方面的第三种可能的实现方式中,所述目标训练包括链式流训练模式;
所述采用所述目标训练模式对缺失地址进行训练,包括:
获取第四缺失地址,并将所述第四缺失地址作为索引地址索引MAP得到第二入口项entry;当所述第一entry的状态为初始状态时,记录所述第四缺失地址的第一缺失返回值,并将所述第一entry的状态设置为准训练状态;其中,所述MAP用于记录历史访存信息;
获取第五缺失地址,并将第五缺失地址作为索引地址索引所述MAP得到所述第二entry,当所述第二entry的状态为准训练状态时,记录所述第五缺失地址的第二缺失返回值,再将所述第五缺失地址减去所述第一缺失返回值得到第二计算距离,并将所述第一entry的状态设置为模式发现状态;
获取第六缺失地址,并将第六缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一entry的状态为模式发现状态时,判断所述第六缺失地址与所述第二缺失返回值之差是否等于所述第二计算距离,若是,则发现链式流预取模式;其中,所述第四缺失地址、第五缺失地址和第六缺失地址为相邻缺失地址;
所述采用所述目标预取模式进行预取,包括:
对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取,其中,所述N预先设置的预取深度;或者
对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取,并获取模式表PTB的最旧项,再修改所述最旧项,修改后的所述最旧项的首地址为所述第三缺失返回值与所述第二计算距离之和,修改后的所述最旧项的尾地址为所述预取中最后一次预取的地址,修改后的所述最旧项的距离为所述第二计算距离;当缓存命中,且所述缓存命中的地址为所述首地址或者所述尾地址时,继续向所述缓存命中的地址之后的地址发起预取;其中,所述N预先设置的预取深度。
结合第一方面或者第一方面的第一种可能的实现方式,在第一方面的第四种可能的实现方式中,所述方法还包括:
统计特定时间段内的预取准确率、预取有害率和预取迟到率,其中,所述预取准确率为预取命中次数除以总预取次数,所述预取有害率为污染预取次数除以总预取次数,所述预取迟到率为迟到预取次数除以预取命中次数;
所述采用所述目标预取模式进行预取,包括:
当所述预取准确率超过第一预设阈值时,增加预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度;或者
当所述预取准确率超过第一预设阈值,且所述预取迟到率超过第二预设阈值时,增加预取深度,并增加预取距离,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度,所述预取的距离为所述增加后的预取距离;
当所述预取有害率超过第三预设阈值时,减少预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述减少后的预取深度。
第二方面,本发明提供一种数据预取装置,包括:获取模块、判断模块、训练模块和预取模块,其中:
所述获取模块,用于获取缺失返回值;
所述判断模块,用于根据所述获取模块获取的缺失返回值判断训练模式;
所述训练模块,用于当所述判断模块判断训练模式为目标训练模式时,采用所述目标训练模式对缺失地址进行训练,所述目标训练包括线性流训练模式或者链式流训练模式;
所述预取模块,用于当训练模块训练的目标训练模式发现的预取模式为目标预取模式时,采用所述目标预取模式进行预取;其中,所述目标预取模式包括线性流预取模式或者链式流预模式。
在第二方面的第一种可能的实现方式中,所述方法还包括:
统计特定时间段内的预取准确率、预取有害率和预取迟到率,其中,所述预取准确率为预取命中次数除以总预取次数,所述预取有害率为污染预取次数除以总预取次数,所述预取迟到率为迟到预取次数除以预取命中次数;
所述采用所述目标预取模式进行预取,包括:
当所述预取准确率超过第一预设阈值时,增加预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度;或者
当所述预取准确率超过第一预设阈值,且所述预取迟到率超过第二预设阈值时,增加预取深度,并增加预取距离,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度,所述预取的距离为所述增加后的预取距离;
当所述预取有害率超过第三预设阈值时,减少预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述减少后的预取深度。
结合第二方面或者第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述训练模块,包括:
第一训练子单元,用于当所述目标训练包括线性流训练模式时,获取第一缺失地址,并将所述第一缺失地址作为索引地址索引历史访存池MAP得到第一入口项entry;当所述第一entry的状态为初始状态时,记录所述第一缺失地址,并将所述第一entry的状态设置为准训练状态;其中,所述MAP用于记录历史访存信息;
第二训练子单元,用于获取第二缺失地址,并将所述将第二缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一entry的状态为准训练状态时,将所述第二缺失地址减去所述第一缺失地址得到第一计算距离,并将所述第一entry的状态设置为模式发现状态;
第三训练子单元,用于获取第三缺失地址,并将所述将第三缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一entry的状态为模式发现状态时,判断所述第三缺失地址与所述第二缺失地址之差是否等于所述第一计算距离,若是,则发现线性流预取模式;其中,所述第一缺失地址、第二缺失地址和第三缺失地址为相邻缺失地址;
所述预取模块用于当所述线性流训练模式发现的预取模式为线性流预模式时,对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取,其中,所述N预先设置的预取深度;或者
所述预取模块用于当所述线性流训练模式发现的预取模式为线性流预模式时,对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取,并获取模式表PTB的最旧项,再修改所述最旧项,修改后的所述最旧项的首地址为所述第三缺失地址与所述第一计算距离之和,修改后的所述最旧项的尾地址为所述第三缺失地址与T倍所述第一计算距离之和,修改后的所述最旧项的距离为所述第一计算距离;以及当缓存命中,且所述缓存命中的地址在所述首地址和所述尾地址的中间时,继续向所述缓存命中的地址之后的地址发起预取;其中,所述N预先设置的预取深度,所述T为大于1的整数。
结合第二方面或者第二方面的第一种可能的实现方式,在第二方面的第三种可能的实现方式中,所述训练模块,包括:
第四训练子单元,用于当所述目标训练包括链式流训练模式时,获取第四缺失地址,并将所述第四缺失地址作为索引地址索引MAP得到第二入口项entry;当所述第一entry的状态为初始状态时,记录所述第四缺失地址的第一缺失返回值,并将所述第一entry的状态设置为准训练状态;其中,所述MAP用于记录历史访存信息;
第五训练子单元,用于获取第五缺失地址,并将第五缺失地址作为索引地址索引所述MAP得到所述第二entry,当所述第二entry的状态为准训练状态时,记录所述第五缺失地址的第二缺失返回值,再将所述第五缺失地址减去所述第一缺失返回值得到第二计算距离,并将所述第一entry的状态设置为模式发现状态;
第六训练子单元,用于获取第六缺失地址,并将第六缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一entry的状态为模式发现状态时,判断所述第六缺失地址与所述第二缺失返回值之差是否等于所述第二计算距离,若是,则发现链式流预取模式;其中,所述第四缺失地址、第五缺失地址和第六缺失地址为相邻缺失地址;
所述预取模块用于当所述链式流训练模式发现的预取模式为链式流预模式时,对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取,其中,所述N预先设置的预取深度;或者
所述预取模块用于当所述链式流训练模式发现的预取模式为链式流预模式时,对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取,并获取模式表PTB的最旧项,再修改所述最旧项,修改后的所述最旧项的首地址为所述第三缺失返回值与所述第二计算距离之和,修改后的所述最旧项的尾地址为所述预取中最后一次预取的地址,修改后的所述最旧项的距离为所述第二计算距离;以及当缓存命中,且所述缓存命中的地址为所述首地址或者所述尾地址时,继续向所述缓存命中的地址之后的地址发起预取;其中,所述N预先设置的预取深度。
结合第二方面或者第二方面的第一种可能的实现方式,在第二方面的第四种可能的实现方式中,所述装置还包括:
统计模块,用于统计特定时间段内的预取准确率、预取有害率和预取迟到率,其中,所述预取准确率为预取命中次数除以总预取次数,所述预取有害率为污染预取次数除以总预取次数,所述预取迟到率为迟到预取次数除以预取命中次数;
所述预取模块还用于当所述预取准确率超过第一预设阈值时,增加预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度;或者
所述预取模块还用于当所述预取准确率超过第一预设阈值,且所述预取迟到率超过第二预设阈值时,增加预取深度,并增加预取距离,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度,所述预取的距离为所述增加后的预取距离;
所述预取模块还用于当所述预取有害率超过第三预设阈值时,减少预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述减少后的预取深度。
上述技术方案中,获取缺失返回值;根据所述缺失返回值判断训练模式;当判断训练模式为目标训练模式时,采用所述目标训练模式对缺失地址进行训练,所述目标训练包括线性流训练模式或者链式流训练模式;当所述目标训练模式发现的预取模式为目标预取模式时,采用所述目标预取模式进行预取;其中,所述目标预取模式包括线性流预取模式或者链式流预模式。这样可以实现根据不同的情况采用不同的预取模式,从而可以提高预取的准确率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种数据预取方法的流程示意图;
图2是本发明实施例提供的另一种数据预取方法的流程示意图;
图3是本发明实施例提供的另一种数据预取方法的流程示意图;
图4是本发明实施例提供的一种数据预取装置的结构示意图;
图5是本发明实施例提供的另一种数据预取装置的结构示意图;
图6是本发明实施例提供的另一种数据预取装置的结构示意图;
图7是本发明实施例提供的另一种数据预取装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,图1是本发明实施例提供的一种数据预取方法的流程示意图,如图1所示,包括以下步骤:
101、获取缺失返回值。
可选的,上述缺失返回值可以是指缓存缺失返回值;例如:缓存未命中而访问内存读到的值。
102、根据所述缺失返回值判断训练模式。
可选的,具体可以是根据上述缺失返回值是否符合地址特征为判断训练模式。
103、当判断训练模式为目标训练模式时,采用所述目标训练模式对缺失地址进行训练,所述目标训练包括线性流训练模式或者链式流训练模式。
可选的,上述线性流训练模式可以是指对线性流的地址进行训练的模式,其中,线性流的地址可以是指相邻地址间存在等差数列关系的地址。上述链式流训练模式可以是指对链式流的地址进行训练的模式,其中,链式流的地址可以是指地址与该地址的返回值之间存在链表关系的地址。
104、当所述目标训练模式发现的预取模式为目标预取模式时,采用所述目标预取模式进行预取;其中,所述目标预取模式包括线性流预取模式或者链式流预模式。
可选的,步骤104预取的数据可以是缓存至缓存中。
可选的,在另一个实施例中,所述方法还可以包括:
统计特定时间段内的预取准确率、预取有害率和预取迟到率,其中,所述预取准确率为预取命中次数除以总预取次数,所述预取有害率为污染预取次数除以总预取次数,所述预取迟到率为迟到预取次数除以预取命中次数;
上述采用所述目标预取模式进行预取,可以包括:
当所述预取准确率超过第一预设阈值时,增加预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度;或者
当所述预取准确率超过第一预设阈值,且所述预取迟到率超过第二预设阈值时,增加预取深度,并增加预取距离,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度,所述预取的距离为所述增加后的预取距离;
当所述预取有害率超过第三预设阈值时,减少预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述减少后的预取深度。
该实施方式中可以实现根据实现情况根据预到深度和距离,从而可以提高预取的效率和准确率。另外,上述预取的深度可以是指预取的数据量,上述预取的距离可以是预取回的数据的时间与实际使用该数据时间的时间间隔。
可选的,上述方法可以应用于任何具备数据缓存功能的设备,例如:服务器、基站、平板电脑、手机、电子阅读器、遥控器、个人计算机(Personal Computer,PC)、笔记本电脑、车载设备、网络电视、可穿戴设备等具有网络功能的智能设备。
上述技术方案中,获取缺失返回值;根据所述缺失返回值判断训练模式;当判断训练模式为目标训练模式时,采用所述目标训练模式对缺失地址进行训练,所述目标训练包括线性流训练模式或者链式流训练模式;当所述目标训练模式发现的预取模式为目标预取模式时,采用所述目标预取模式进行预取;其中,所述目标预取模式包括线性流预取模式或者链式流预模式。这样可以实现根据不同的情况采用不同的预取模式,从而可以提高预取的准确率。
请参阅图2,图2是本发明实施例提供的另一种数据预取方法的流程示意图,如图2所示,包括以下步骤:
201、获取缺失返回值。
202、判断所述缺失返回值是否为缺失地址,若否,则判断训练模式为线性流训练模式,并执行步骤203,若是,则判断训练模式为链式流训练模式,并执行步骤205。
203、当判断训练模式为线性流训练模式时,采用所述线性流训练模式对缺失地址进行训练。
可选的,步骤203可以包括:
获取第一缺失地址,并将所述第一缺失地址作为索引地址索引历史访存池(Memory Access Pool,MAP)得到第一入口项(entry);当所述第一entry的状态为初始状态时,记录所述第一缺失地址,并将所述第一entry的状态设置为准训练状态;其中,所述MAP用于记录历史访存信息;
获取第二缺失地址,并将所述将第二缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一entry的状态为准训练状态时,将所述第二缺失地址减去所述第一缺失地址得到第一计算距离,并将所述第一entry的状态设置为模式发现状态;
获取第三缺失地址,并将所述将第三缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一entry的状态为模式发现状态时,判断所述第三缺失地址与所述第二缺失地址之差是否等于所述第一计算距离,若是,则发现线性流预取模式;其中,所述第一缺失地址、第二缺失地址和第三缺失地址为相邻缺失地址。
可选的,上述将所述第一缺失地址作为索引地址索引MAP可以是将第一缺失地址的最高三位作为索引地址索引MAP;上述将所述第二缺失地址作为索引地址索引MAP可以是将第二缺失地址的最高三位作为索引地址索引MAP;上述将所述第三缺失地址作为索引地址索引MAP可以是将第三缺失地址的最高三位作为索引地址索引MAP。另外,上述MAP可以是用于记录历史访存信息的访存池,上述MAP还可以是用寄存器结构实现的16项先入先出队列。另外,上述entry可以是存储模块。另外,发现线性流预取模式后,还可以将上述MAP中第一entry所在的项清零,并将第一entry的状态设置为初始状态。
204、当所述线性流训练模式发现的预取模式为线性流预模式时,采用所述线性流预模式进行预取。
可选的,上述采用所述链式流预模式进行预取,可以包括:
对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取,其中,所述N预先设置的预取深度。
其中,该预取的深度和距离都可以是预先设置,或者根据实际情况进行调整的,对此本实施例不作限定。对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取可以是以第一地址为起始地址进行深度为N的多次预取,其中,第一地址等于所述第三缺失地址与所述第一计算距离之和。
可选的,上述采用所述链式流预模式进行预取,可以包括:
对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取,并获取模式表(Pattern Table,PTB)的最旧项,再修改所述最旧项,修改后的所述最旧项的首地址为所述第三缺失地址与所述第一计算距离之和,修改后的所述最旧项的尾地址为所述第三缺失地址与T倍所述第一计算距离之和,修改后的所述最旧项的距离为所述第一计算距离;当缓存命中,且所述缓存命中的地址在所述首地址和所述尾地址的中间时,继续向所述缓存命中的地址之后的地址发起预取;其中,所述N预先设置的预取深度,所述T为大于1的整数(例如:4、6和8等)。
其中,上述缓存命中可以是从缓存中取到数据,另外,该缓存命中可以是在执行对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取的操作之后的任意时刻的缓存命中。这样该实施方式可以实现缓存不命中时,即获取到缺失地址时,发起预取,还可以在缓存命中时,发起预取。
其中,该预取的深度和距离都可以是预先设置,或者根据实际情况进行调整的,对此本实施例不作限定。对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取可以是以第一地址为起始地址进行深度为N的多次预取,其中,第一地址等于所述第三缺失地址与所述第一计算距离之和。另外,上述继续向后发起预取可以是从继续向上述预取命中的地址之后的地址进行预取。另外,上述PTB可以用于维护发现模式并对该发现模式进行自增强利用,且该PTB可以是用于寄存器结构实现的缓存,PTB可以用于缓存在不同时间段的最早预取地址(即上述首地址)、最近预取地址(即上述尾地址)和距离,上述最旧项可以是指离上述预取操作最近的时间段包括的首地址、尾地址和距离。另外,该PTB还可以采用近期最少使用(Least Recently Used,LRU)算法机制进行内容替换。
例如:第一缺失地址Miss1是0x90000,那么索引到第4个entry,发现该entry状态初始状态,于是记录缺失地址第一缺失地址,并将第4个entry的状态置为准训练状态;
第二缺失地址Miss2是0x90008,那么索引到第4个entry,发现该entry状态准训练状态,于是记录Miss2,并计算第一计算距离DIST1=(Miss2-Miss1)、将第4个entry的状态置为模式发现状态;
第三缺失地址Miss3是0x90010,那么索引到第4个entry,发现该entry状态模式发现状态,于是计算Miss3-Miss2与DIST1比较,如果相等,则将MAP该项清零,并置第4个entry的状态为初始状态。并对Miss3+DIST1连续发起N次预取(N为深度),同时以LRU算法找PTB的最旧项,并记录该最旧项的首地址为Miss3+DIST1,尾地址为Miss3+4*DIST1,距离=DIST1。此后的缓存命中的地址若在首地址和尾地址范围内,则继续向缓存命中的地址之后的地址发起预取。
205、当判断训练模式为链式流训练模式时,采用所述链式流训练模式对缺失地址进行训练。
可选的,步骤205可以包括:
获取第四缺失地址,并将所述第四缺失地址作为索引地址索引MAP得到第二入口项entry;当所述第一entry的状态为初始状态时,记录所述第四缺失地址的第一缺失返回值,并将所述第一entry的状态设置为准训练状态;其中,所述MAP用于记录历史访存信息;
获取第五缺失地址,并将第五缺失地址作为索引地址索引所述MAP得到所述第二entry,当所述第二entry的状态为准训练状态时,记录所述第五缺失地址的第二缺失返回值,再将所述第五缺失地址减去所述第一缺失返回值得到第二计算距离,并将所述第一entry的状态设置为模式发现状态;
获取第六缺失地址,并将第六缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一entry的状态为模式发现状态时,判断所述第六缺失地址与所述第二缺失返回值之差是否等于所述第二计算距离,若是,则发现链式流预取模式;其中,所述第四缺失地址、第五缺失地址和第六缺失地址为相邻缺失地址。
可选的,上述将所述第四缺失地址作为索引地址索引MAP可以是将第四缺失地址的最高三位作为索引地址索引MAP;上述将所述第五缺失地址作为索引地址索引MAP可以是将第五缺失地址的最高三位作为索引地址索引MAP;上述将所述第六缺失地址作为索引地址索引MAP可以是将第六缺失地址的最高三位作为索引地址索引MAP。另外,发现链式流预取模式后,还可以将上述MAP中第二entry所在的项清零,并将第一entry的状态设置为初始状态。另外,上述第一缺失返回值、第二缺失返回值和第三缺失返回值的都可以是类地址。
206、当所述链式流训练模式发现的预取模式为链式流预模式时,采用所述链式流预模式进行预取。
可选的,上述采用所述链式流预模式进行预取,可以包括:
对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取,其中,所述N预先设置的预取深度。
其中,该预取的深度和距离都可以是预先设置,或者根据实际情况进行调整的,对此本实施例不作限定。对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取可以是以第一地址为起始地址进行深度为N的多次预取,其中,第一地址等于所述第三缺失返回值与所述第二计算距离之和。
可选的,上述采用所述链式流预模式进行预取,可以包括:
对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取,并获取模式表PTB的最旧项,再修改所述最旧项,修改后的所述最旧项的首地址为所述第三缺失返回值与所述第二计算距离之和,修改后的所述最旧项的尾地址为所述预取中最后一次预取的地址,修改后的所述最旧项的距离为所述第二计算距离;当缓存命中,且所述缓存命中的地址为所述首地址或者所述尾地址时,继续向所述缓存命中的地址之后的地址发起预取;其中,所述N预先设置的预取深度。
其中,上述缓存命中可以是从缓存中取到数据,另外,该缓存命中可以是在执行对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取的操作之后的任意时刻的缓存命中。这样该实施方式可以实现缓存不命中时,即获取到缺失地址时,发起预取,还可以在缓存命中时,发起预取。
例如:第四缺失地址Miss4是0x40000,是类地址,那么索引到第2个entry,发现该entry状态为初始状态,于是记录第一缺失返回值Rval1,并置第2个entry的状态为准训练状态;
第五缺失地址Miss5是0x40008,那么索引到第2个entry,发现该entry状态准训练状态,于是记录其第二返回值Rval2=0x50000,第二计算距离DIST2=(Miss5-Rval1),置第2个entry的状态为模式发现状态;
第六缺失地址Miss6是0x50008,那么索引到第2个entry,发现该entry状态为模式发现状态,于是计算Miss6-Rval2与DIST2比较,如果相等,则将MAP该项清零,置第2个entry的状态为初始状态。并对Miss6的第三缺失返回值Rval3+DIST顺序发起N次预取(N为深度),同时以LRU算法找PTB的最旧项,并记录首地址=Rval3+DIST2,距离=DIST2。尾地址在N次预取完成后,记录为最后一次预取地址。此后,若缓存命中首地址或者尾地址,则向后继续发起预取。
可选的,如图3所示,所述方法还可以包括:
207、统计特定时间段内的预取准确率、预取有害率和预取迟到率,其中,所述预取准确率为预取命中次数除以总预取次数,所述预取有害率为污染预取次数除以总预取次数,所述预取迟到率为迟到预取次数除以预取命中次数。
可选的,上述预取准确率可以包括线性流预取准确率和链式流预取准确率,上述预取有害率可以包括线性流预取有害率和链式流预取有害率,上述预取迟到率可以包括线性流预取迟到率和链式流预取迟到率。另外,上述特定时间段可以是理解为一个周期,本实施例中可以存在多个周期。
可选的,步骤207可以通过两组八个硬件计数器,分别记录两种模式的预取发起、预取命中、预取污染和预取迟到次数。在每一路缓存块上需要维护两比特信息区分数据来自普通缓存请求,还是来自预取请求,或者还是预取请求的类型。例如:当预取回的数据被填入缓存中时,将该缓存行的标识置为第一标识(例如:0b’01)表示线性流预取,或第二标识(例如:0b’10)表示链式流预取,否则置为第三标识(例如:0)表示正常请求。例如:通过第一计数器(例如:SEQCNT计数器)记录线性流模式发起的预取总次数,而第二计数器(例如:LINCNT计数器)记录链式流模式的预取总次数。每次缓存命中时,检查该缓存行的标识位,若为第一标识(例如:0b’01),则更新第三计数器(例如:SEQHIT计数器),若为第二标识(例如:0b’10),则更新第四计数器(例如:LINHIT计数器),然后将该缓存行标识位重置为第三标识(例如:0)。其中,上述0b表示可以二进制数据。
可选的,污染预取次数可以借助布隆过滤器来统计,其中,布隆过滤器可以由哈希函数和记分牌组成,哈希函数将输入映射到记分牌的多个1bit上。在每次预取数据返回时,将该预取地址通过哈希函数将记分牌对应位置为第四标识(例如:0b’0)。当发生预取导致的缓存替换时,如果对应缓存行是由普通请求取回,那么用该缓存行地址作为输入通过哈希函数,将记分牌对应位置第五标识(例如:0b’1),对应于由该预取发生的一次逐出。这样,在每次发生缓存缺失时,若该缓存行由预取取回,那么用缺失地址通过哈希函数查找对应记分牌的位,如果为第五标识(例如:0b’1)则表明是一次预取污染导致的缓存缺失。于是统计线性流预取污染次数和链式流预取污染次数的第五计数器(例如:SEQPLUT计数器)和第六计数器(例如:LINPLUT)加1。
可选的,迟到率预取次数需要借助预取队列来统计,预取队列跟踪正在处理的预取请求。当发起一次预取请求时,预取队列将该请求记录在表项中,当该请求的数据返回时,清除该项记录。每次发生缓存缺失时,检查该地址是否在预取队列中有记录,如果有则将统计线性流迟到预取次数和链式流迟到预取次数的第七计数器(例如:SEQLATE计数器)和第八计数器(例如:LINLATE计数器)加1,并将该位清零。
可选的,上述采用所述线性流预取模式进行预取,可以包括:
当线性流预取准确率超过第一预设阈值时,增加预取深度,采用所述线性流预取模式进行预取,所述预取的深度为所述增加后的预取深度。
可选的,上述采用所述线性流预取模式进行预取,可以包括:
当所述线性流预取准确率超过第一预设阈值,且所述线性流预取迟到率超过第二预设阈值时,增加预取深度,并增加预取距离,采用所述线性流预取模式进行预取,所述预取的深度为所述增加后的预取深度,所述预取的距离为所述增加后的预取距离。
可选的,上述采用所述线性流预取模式进行预取,可以包括:
当所述线性流预取有害率超过第三预设阈值时,减少预取深度,采用所述线性流预取模式进行预取,所述预取的深度为所述减少后的预取深度。
上述采用所述链式流预取模式进行预取,可以包括:
当所述链式流预取准确率超过第一预设阈值时,增加预取深度,采用所述链式流预取模式进行预取,所述预取的深度为所述增加后的预取深度。
上述采用所述链式流预取模式进行预取,可以包括:
当所述链式流预取准确率超过第一预设阈值,且所述链式流预取迟到率超过第二预设阈值时,增加预取深度,并增加预取距离,采用所述链式流预取模式进行预取,所述预取的深度为所述增加后的预取深度,所述预取的距离为所述增加后的预取距离。
上述采用所述链式流预取模式进行预取,可以包括:
当所述链式流预取有害率超过第三预设阈值时,减少预取深度,采用所述链式流预取模式进行预取,所述预取的深度为所述减少后的预取深度。
通过上述多种实现方式,就可以实现根据实际情况调整预取的深度和距离。
可选的,上述方法可以应用于可以应用于任何具备数据缓存功能的设备中的预取引擎,其中,该设备可以是:服务器、基站、平板电脑、手机、电子阅读器、遥控器、PC、笔记本电脑、车载设备、网络电视、可穿戴设备等具有网络功能的智能设备。预取引擎可以是一个独立的处理器,也可以处理器中一个模块。
上述技术方案中,在上面实施例的基础上实现了多种可选的实施方式,且都可以实现提高预取的准确率。
下面为本发明装置实施例,本发明装置实施例用于执行本发明方法实施例一至二实现的方法,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例一和实施例二。
请参阅图4,图4是本发明实施例提供的一种数据预取装置的结构示意图,如图4所示包括:获取模块41、判断模块42、训练模块43和预取模块44,其中:
获取模块41,用于获取缺失返回值。
可选的,上述缺失返回值可以是指缓存缺失返回值;例如:缓存未命中而访问内存读到的值。
判断模块42,用于根据所述获取模块41获取的缺失返回值判断训练模式。
可选的,具体可以是根据上述缺失返回值是否符合地址特征为判断训练模式。
训练模块43,用于当所述判断模块42判断训练模式为目标训练模式时,采用所述目标训练模式对缺失地址进行训练,所述目标训练包括线性流训练模式或者链式流训练模式。
可选的,上述线性流训练模式可以是指对线性流的地址进行训练的模式,其中,线性流的地址可以是指相邻地址间存在等差数列关系的地址。上述链式流训练模式可以是指对链式流的地址进行训练的模式,其中,链式流的地址可以是指地址与该地址的返回值之间存在链表关系的地址。
预取模块44,用于当训练模块43训练的目标训练模式发现的预取模式为目标预取模式时,采用所述目标预取模式进行预取;其中,所述目标预取模式包括线性流预取模式或者链式流预模式。
可选的,在另一个实施例中,如图5所示,所述装置还可以包括:
统计模块45,用于统计特定时间段内的预取准确率、预取有害率和预取迟到率,其中,所述预取准确率为预取命中次数除以总预取次数,所述预取有害率为污染预取次数除以总预取次数,所述预取迟到率为迟到预取次数除以预取命中次数;
上述采用所述目标预取模式进行预取,可以包括:
预取模块44还可以用于当所述预取准确率超过第一预设阈值时,增加预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度;或者
预取模块44还可以用于当所述预取准确率超过第一预设阈值,且所述预取迟到率超过第二预设阈值时,增加预取深度,并增加预取距离,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度,所述预取的距离为所述增加后的预取距离;
预取模块44还可以用于当所述预取有害率超过第三预设阈值时,减少预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述减少后的预取深度。
该实施方式中可以实现根据实现情况根据预到深度和距离,从而可以提高预取的效率和准确率。另外,上述预取的深度可以是指预取的数据量,上述预取的距离可以是预取回的数据的时间与实际使用该数据时间的时间间隔。
可选的,上述装置可以应用于任何具备数据缓存功能的设备,例如:服务器、基站、平板电脑、手机、电子阅读器、遥控器、个人计算机(Personal Computer,PC)、笔记本电脑、车载设备、网络电视、可穿戴设备等具有网络功能的智能设备。
上述技术方案中,获取缺失返回值;根据所述缺失返回值判断训练模式;当判断训练模式为目标训练模式时,采用所述目标训练模式对缺失地址进行训练,所述目标训练包括线性流训练模式或者链式流训练模式;当所述目标训练模式发现的预取模式为目标预取模式时,采用所述目标预取模式进行预取;其中,所述目标预取模式包括线性流预取模式或者链式流预模式。这样可以实现根据不同的情况采用不同的预取模式,从而可以提高预取的准确率。
请参阅图6,图6是本发明实施例提供的另一种数据预取装置的结构示意图,如图6所示,包括:获取模块61、判断模块62、训练模块63和预取模块64,其中,训练模块63包括第一训练单元631和第二训练单元632,其中:
获取模块61,用于获取缺失返回值。
判断模块62,用于判断所述获取模块61获取的缺失返回值是否为缺失地址,若是,则判断训练模式为链式流训练模式,若否,则判断训练模式为线性流训练模式。
第一训练单元631,用于当判断模块62判断训练模式为线性流训练模式时,采用所述线性流训练模式对缺失地址进行训练。
第二训练单元632,用于当判断模块62判断训练模式为链式流训练模式时,采用所述链式流训练模式对缺失地址进行训练。
预取模块64,用于当所述线性流训练模式发现的预取模式为线性流预模式时,采用所述线性流预模式进行预取;以及当所述链式流训练模式发现的预取模式为链式流预模式时,采用所述链式流预模式进行预取。
可选的,第一训练单元631可以包括:
第一训练子单元6311,用于当判断模块62判断训练模式为线性流训练模式时,获取第一缺失地址,并将所述第一缺失地址作为索引地址索引历史访存池MAP得到第一入口项entry;当所述第一entry的状态为初始状态时,记录所述第一缺失地址,并将所述第一entry的状态设置为准训练状态;其中,所述MAP用于记录历史访存信息。
第二训练子单元6312,用于获取第二缺失地址,并将所述将第二缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一entry的状态为准训练状态时,将所述第二缺失地址减去所述第一缺失地址得到第一计算距离,并将所述第一entry的状态设置为模式发现状态;
第三训练子单元6313,用于获取第三缺失地址,并将所述将第三缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一entry的状态为模式发现状态时,判断所述第三缺失地址与所述第二缺失地址之差是否等于所述第一计算距离,若是,则发现线性流预取模式;其中,所述第一缺失地址、第二缺失地址和第三缺失地址为相邻缺失地址。
可选的,上述将所述第一缺失地址作为索引地址索引MAP可以是将第一缺失地址的最高三位作为索引地址索引MAP;上述将所述第二缺失地址作为索引地址索引MAP可以是将第二缺失地址的最高三位作为索引地址索引MAP;上述将所述第三缺失地址作为索引地址索引MAP可以是将第三缺失地址的最高三位作为索引地址索引MAP。另外,发现线性流预取模式后,还可以将上述MAP中第一entry所在的项清零,并将第一entry的状态设置为初始状态。
可选的,获取模块64可以用于当所述线性流训练模式发现的预取模式为线性流预模式时,对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取,其中,所述N预先设置的预取深度。
可选的,获取模块64可以用于当所述线性流训练模式发现的预取模式为线性流预模式时,对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取,并获取模式表PTB的最旧项,再修改所述最旧项,修改后的所述最旧项的首地址为所述第三缺失地址与所述第一计算距离之和,修改后的所述最旧项的尾地址为所述第三缺失地址与T倍所述第一计算距离之和,修改后的所述最旧项的距离为所述第一计算距离;以及当缓存命中,且所述缓存命中的地址在所述首地址和所述尾地址的中间时,继续向所述缓存命中的地址之后的地址发起预取;其中,所述N预先设置的预取深度,所述T为大于1的整数。
可选的,第二训练单元632,可以包括:
第四训练子单元6321,用于当判断模块62判断训练模式为链式流训练模式时,获取第四缺失地址,并将所述第四缺失地址作为索引地址索引MAP得到第二入口项entry;当所述第一entry的状态为初始状态时,记录所述第四缺失地址的第一缺失返回值,并将所述第一entry的状态设置为准训练状态;其中,所述MAP用于记录历史访存信息;
第五训练子单元6322,用于获取第五缺失地址,并将第五缺失地址作为索引地址索引所述MAP得到所述第二entry,当所述第二entry的状态为准训练状态时,记录所述第五缺失地址的第二缺失返回值,再将所述第五缺失地址减去所述第一缺失返回值得到第二计算距离,并将所述第一entry的状态设置为模式发现状态;
第六训练子单元6323,用于获取第六缺失地址,并将第六缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一entry的状态为模式发现状态时,判断所述第六缺失地址与所述第二缺失返回值之差是否等于所述第二计算距离,若是,则发现链式流预取模式;其中,所述第四缺失地址、第五缺失地址和第六缺失地址为相邻缺失地址;
可选的,预取模块64可以用于当所述链式流训练模式发现的预取模式为链式流预模式时,对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取,其中,所述N预先设置的预取深度。
可选的,预取模块64可以用于当所述链式流训练模式发现的预取模式为链式流预模式时,对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取,并获取模式表PTB的最旧项,再修改所述最旧项,修改后的所述最旧项的首地址为所述第三缺失返回值与所述第二计算距离之和,修改后的所述最旧项的尾地址为所述预取中最后一次预取的地址,修改后的所述最旧项的距离为所述第二计算距离;以及当缓存命中,且所述缓存命中的地址为所述首地址或者所述尾地址时,继续向所述缓存命中的地址之后的地址发起预取;其中,所述N预先设置的预取深度。
可选的,所述装置还可以包括:
统计模块65,用于统计特定时间段内的预取准确率、预取有害率和预取迟到率,其中,所述预取准确率为预取命中次数除以总预取次数,所述预取有害率为污染预取次数除以总预取次数,所述预取迟到率为迟到预取次数除以预取命中次数。
可选的,上述预取准确率可以包括线性流预取准确率和链式流预取准确率,上述预取有害率可以包括线性流预取有害率和链式流预取有害率,上述预取迟到率可以包括线性流预取迟到率和链式流预取迟到率。另外,上述特定时间段可以是理解为一个周期,本实施例中可以存在多个周期。
可选的,所述预取模块64可以用于当所述线性流训练模式发现的预取模式为线性流预模式,且线性流预取准确率超过第一预设阈值时,增加预取深度,采用所述线性流预取模式进行预取,所述预取的深度为所述增加后的预取深度。
可选的,所述预取模块64可以用于当所述线性流训练模式发现的预取模式为线性流预模式,且所述线性流预取准确率超过第一预设阈值,且所述线性流预取迟到率超过第二预设阈值时,增加预取深度,并增加预取距离,采用所述线性流预取模式进行预取,所述预取的深度为所述增加后的预取深度,所述预取的距离为所述增加后的预取距离。
可选的,所述预取模块64可以用于当所述线性流训练模式发现的预取模式为线性流预模式,且所述线性流预取有害率超过第三预设阈值时,减少预取深度,采用所述线性流预取模式进行预取,所述预取的深度为所述减少后的预取深度。
可选的,所述预取模块64可以用于当所述链式流训练模式发现的预取模式为链式流预模式,且所述链式流预取准确率超过第一预设阈值时,增加预取深度,采用所述链式流预取模式进行预取,所述预取的深度为所述增加后的预取深度。
可选的,所述预取模块64可以用于当所述链式流训练模式发现的预取模式为链式流预模式,且所述链式流预取准确率超过第一预设阈值,且所述链式流预取迟到率超过第二预设阈值时,增加预取深度,并增加预取距离,采用所述链式流预取模式进行预取,所述预取的深度为所述增加后的预取深度,所述预取的距离为所述增加后的预取距离。
可选的,所述预取模块64可以用于当所述链式流训练模式发现的预取模式为链式流预模式,且所述链式流预取有害率超过第三预设阈值时,减少预取深度,采用所述链式流预取模式进行预取,所述预取的深度为所述减少后的预取深度。
通过上述多种实现方式,就可以实现根据实际情况调整预取的深度和距离。
可选的,上述装置可以应用于可以应用于任何具备数据缓存功能的设备中的预取引擎,其中,该设备可以是:服务器、基站、平板电脑、手机、电子阅读器、遥控器、PC、笔记本电脑、车载设备、网络电视、可穿戴设备等具有网络功能的智能设备。预取引擎可以是一个独立的处理器,也可以处理器中一个模块。
上述技术方案中,在上面实施例的基础上实现了多种可选的实施方式,且都可以实现提高预取的准确率。
请参阅图7,图7本发明实施例提供的另一种数据预取装置的结构示意图,如图7所示,包括:存储器71和缓存72,以及分别与存储器71和缓存72连接的处理器73,其中,所述存储器71用于存储数据和程序代码,处理器73用于调用存储器71存储的程序的执行如下操作:
获取缺失返回值;
根据所述缺失返回值判断训练模式;
当判断训练模式为目标训练模式时,采用所述目标训练模式对缺失地址进行训练,所述目标训练包括线性流训练模式或者链式流训练模式;
当所述目标训练模式发现的预取模式为目标预取模式时,采用所述目标预取模式进行预取;其中,所述目标预取模式包括线性流预取模式或者链式流预模式。
其中,上述预取可以是预取存储器71存储的数据,再将预取到的数据缓存至缓存72中。
可选的,处理器73执行的根据所述缺失返回值判断训练模式的操作,可以包括:
判断所述缺失返回值是否为缺失地址,若是,则判断训练模式为链式流训练模式,若否,则判断训练模式为线性流训练模式。
可选的,所述目标训练包括线性流训练模式;处理器73执行的采用所述目标训练模式对缺失地址进行训练的操作,可以包括:
获取第一缺失地址,并将所述第一缺失地址作为索引地址索引历史访存池MAP得到第一入口项entry;当所述第一entry的状态为初始状态时,记录所述第一缺失地址,并将所述第一entry的状态设置为准训练状态;其中,所述MAP用于记录历史访存信息;
获取第二缺失地址,并将所述将第二缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一entry的状态为准训练状态时,将所述第二缺失地址减去所述第一缺失地址得到第一计算距离,并将所述第一entry的状态设置为模式发现状态;
获取第三缺失地址,并将所述将第三缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一entry的状态为模式发现状态时,判断所述第三缺失地址与所述第二缺失地址之差是否等于所述第一计算距离,若是,则发现线性流预取模式;其中,所述第一缺失地址、第二缺失地址和第三缺失地址为相邻缺失地址;
可选的,处理器73执行的采用所述目标预取模式进行预取的操作,可以包括:
对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取,其中,所述N预先设置的预取深度;或者
对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取,并获取模式表PTB的最旧项,再修改所述最旧项,修改后的所述最旧项的首地址为所述第三缺失地址与所述第一计算距离之和,修改后的所述最旧项的尾地址为所述第三缺失地址与T倍所述第一计算距离之和,修改后的所述最旧项的距离为所述第一计算距离;当缓存命中,且所述缓存命中的地址在所述首地址和所述尾地址的中间时,继续向所述缓存命中的地址之后的地址发起预取;其中,所述N预先设置的预取深度,所述T为大于1的整数。
可选的,所述目标训练包括链式流训练模式;处理器73执行的采用所述目标训练模式对缺失地址进行训练的操作,可以包括:
获取第四缺失地址,并将所述第四缺失地址作为索引地址索引MAP得到第二入口项entry;当所述第一entry的状态为初始状态时,记录所述第四缺失地址的第一缺失返回值,并将所述第一entry的状态设置为准训练状态;其中,所述MAP用于记录历史访存信息;
获取第五缺失地址,并将第五缺失地址作为索引地址索引所述MAP得到所述第二entry,当所述第二entry的状态为准训练状态时,记录所述第五缺失地址的第二缺失返回值,再将所述第五缺失地址减去所述第一缺失返回值得到第二计算距离,并将所述第一entry的状态设置为模式发现状态;
获取第六缺失地址,并将第六缺失地址作为索引地址索引所述MAP得到所述第一entry,当所述第一entry的状态为模式发现状态时,判断所述第六缺失地址与所述第二缺失返回值之差是否等于所述第二计算距离,若是,则发现链式流预取模式;其中,所述第四缺失地址、第五缺失地址和第六缺失地址为相邻缺失地址;
可选的,处理器73执行的采用所述目标预取模式进行预取的操作,可以包括:
对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取,其中,所述N预先设置的预取深度;或者
对所述第三缺失返回值与所述第二计算距离之和的地址发起深度为N的预取,并获取模式表PTB的最旧项,再修改所述最旧项,修改后的所述最旧项的首地址为所述第三缺失返回值与所述第二计算距离之和,修改后的所述最旧项的尾地址为所述预取中最后一次预取的地址,修改后的所述最旧项的距离为所述第二计算距离;当缓存命中,且所述缓存命中的地址为所述首地址或者所述尾地址时,继续向所述缓存命中的地址之后的地址发起预取;其中,所述N预先设置的预取深度。
可选的,处理器73还可以用于执行如下操作:
统计特定时间段内的预取准确率、预取有害率和预取迟到率,其中,所述预取准确率为预取命中次数除以总预取次数,所述预取有害率为污染预取次数除以总预取次数,所述预取迟到率为迟到预取次数除以预取命中次数;
所述处理器73执行的采用所述目标预取模式进行预取的操作,可以包括:
当所述预取准确率超过第一预设阈值时,增加预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度;或者
当所述预取准确率超过第一预设阈值,且所述预取迟到率超过第二预设阈值时,增加预取深度,并增加预取距离,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度,所述预取的距离为所述增加后的预取距离;
当所述预取有害率超过第三预设阈值时,减少预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述减少后的预取深度。
需要说明的是,本实施例中所有的预取可以是预取存储器71存储的数据,再将预取到的数据缓存至缓存72中。
可选的,上述装置可以应用于任何具备数据缓存功能的设备,例如:服务器、基站、平板电脑、手机、电子阅读器、遥控器、个人计算机(Personal Computer,PC)、笔记本电脑、车载设备、网络电视、可穿戴设备等具有网络功能的智能设备。
上述技术方案中,获取缺失返回值;根据所述缺失返回值判断训练模式;当判断训练模式为目标训练模式时,采用所述目标训练模式对缺失地址进行训练,所述目标训练包括线性流训练模式或者链式流训练模式;当所述目标训练模式发现的预取模式为目标预取模式时,采用所述目标预取模式进行预取;其中,所述目标预取模式包括线性流预取模式或者链式流预模式。这样可以实现根据不同的情况采用不同的预取模式,从而可以提高预取的准确率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存取存储器(Random AccessMemory,简称RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (8)
1.一种数据预取方法,其特征在于,包括:
获取缺失返回值;所述缺失返回值是缓存未命中而访问内存读到的值;
根据所述缺失返回值判断训练模式;
当判断训练模式为目标训练模式时,采用所述目标训练模式对缺失地址进行训练,所述目标训练模式包括线性流训练模式或者链式流训练模式;所述线性流训练模式是指对线性流的地址进行训练的模式,所述线性流的地址是指相邻地址间存在等差数列关系的地址;所述链式流训练模式是指对链式流的地址进行训练的模式,链式流的地址是指地址与该地址的返回值之间存在链表关系的地址;
当所述目标训练模式发现的预取模式为目标预取模式时,采用所述目标预取模式进行预取;其中,所述目标预取模式包括线性流预取模式或者链式流预取模式。
2.如权利要求1所述的方法,其特征在于,所述根据所述缺失返回值判断训练模式,包括:
判断所述缺失返回值是否确定为缺失地址,若是,则判断训练模式为链式流训练模式,若否,则判断训练模式为线性流训练模式。
3.如权利要求1或2所述的方法,其特征在于,所述线性流训练模式包括:
获取第一缺失地址,并将所述第一缺失地址作为索引地址索引历史访存池MAP得到第一入口项entry;当所述第一入口项entry的状态为初始状态时,记录所述第一缺失地址,并将所述第一入口项entry的状态设置为准训练状态;其中,所述MAP用于记录历史访存信息;
获取第二缺失地址,并将所述将第二缺失地址作为索引地址索引所述MAP得到所述第一入口项entry,当所述第一入口项entry的状态为准训练状态时,将所述第二缺失地址减去所述第一缺失地址得到第一计算距离,并将所述第一入口项entry的状态设置为模式发现状态;
获取第三缺失地址,并将所述将第三缺失地址作为索引地址索引所述MAP得到所述第一入口项entry,当所述第一入口项entry的状态为模式发现状态时,判断所述第三缺失地址与所述第二缺失地址之差是否等于所述第一计算距离,若是,则发现线性流预取模式;其中,所述第一缺失地址、第二缺失地址和第三缺失地址为相邻缺失地址;
所述线性流预取模式包括:
对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取,其中,所述N为预先设置的预取深度;或者
对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取,并获取模式表PTB的最旧项,再修改所述最旧项,修改后的所述最旧项的首地址为所述第三缺失地址与所述第一计算距离之和,修改后的所述最旧项的尾地址为所述第三缺失地址与T倍所述第一计算距离之和,修改后的所述最旧项的距离为所述第一计算距离;当缓存命中,且所述缓存命中的地址在所述首地址和所述尾地址的中间时,继续向所述缓存命中的地址之后的地址发起预取;其中,所述N为预先设置的预取深度,所述T为大于1的整数;所述最旧项是指离预取操作最近的时间段包括的首地址、尾地址和距离。
4.如权利要求1或2所述的方法,其特征在于,所述方法还包括:
统计特定时间段内的预取准确率、预取有害率和预取迟到率,其中,所述预取准确率为预取命中次数除以总预取次数,所述预取有害率为污染预取次数除以总预取次数,所述预取迟到率为迟到预取次数除以预取命中次数;
所述采用所述目标预取模式进行预取,包括:
当所述预取准确率超过第一预设阈值时,增加预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度;或者
当所述预取准确率超过第一预设阈值,且所述预取迟到率超过第二预设阈值时,增加预取深度,并增加预取距离,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度,所述预取的距离为所述增加后的预取距离;
当所述预取有害率超过第三预设阈值时,减少预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述减少后的预取深度。
5.一种数据预取装置,其特征在于,包括:获取模块、判断模块、训练模块和预取模块,其中:
所述获取模块,用于获取缺失返回值;所述缺失返回值是缓存未命中而访问内存读到的值;
所述判断模块,用于根据所述获取模块获取的缺失返回值判断训练模式;
所述训练模块,用于当所述判断模块判断训练模式为目标训练模式时,采用所述目标训练模式对缺失地址进行训练,所述目标训练模式包括线性流训练模式或者链式流训练模式;所述线性流训练模式是指对线性流的地址进行训练的模式,所述线性流的地址是指相邻地址间存在等差数列关系的地址;所述链式流训练模式是指对链式流的地址进行训练的模式,链式流的地址是指地址与该地址的返回值之间存在链表关系的地址;
所述预取模块,用于当训练模块训练的目标训练模式发现的预取模式为目标预取模式时,采用所述目标预取模式进行预取;其中,所述目标预取模式包括线性流预取模式或者链式流预取模式。
6.如权利要求5所述的装置,其特征在于,所述判断模块用于判断所述获取模块获取的缺失返回值是否确定为缺失地址,若是,则判断训练模式为链式流训练模式,若否,则判断训练模式为线性流训练模式。
7.如权利要求5或6所述的装置,其特征在于,所述训练模块,包括:
第一训练子单元,用于执行线性流训练模式时,获取第一缺失地址,并将所述第一缺失地址作为索引地址索引历史访存池MAP得到第一入口项entry;当所述第一入口项entry的状态为初始状态时,记录所述第一缺失地址,并将所述第一入口项entry的状态设置为准训练状态;其中,所述MAP用于记录历史访存信息;
第二训练子单元,用于获取第二缺失地址,并将所述将第二缺失地址作为索引地址索引所述MAP得到所述第一入口项entry,当所述第一入口项entry的状态为准训练状态时,将所述第二缺失地址减去所述第一缺失地址得到第一计算距离,并将所述第一入口项entry的状态设置为模式发现状态;
第三训练子单元,用于获取第三缺失地址,并将所述将第三缺失地址作为索引地址索引所述MAP得到所述第一入口项entry,当所述第一入口项entry的状态为模式发现状态时,判断所述第三缺失地址与所述第二缺失地址之差是否等于所述第一计算距离,若是,则发现线性流预取模式;其中,所述第一缺失地址、第二缺失地址和第三缺失地址为相邻缺失地址;
所述预取模块用于执行线性流预模式时,对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取,其中,所述N为预先设置的预取深度;或者
所述预取模块用于当执行线性流预模式时,对所述第三缺失地址与所述第一计算距离之和的地址发起深度为N的预取,并获取模式表PTB的最旧项,再修改所述最旧项,修改后的所述最旧项的首地址为所述第三缺失地址与所述第一计算距离之和,修改后的所述最旧项的尾地址为所述第三缺失地址与T倍所述第一计算距离之和,修改后的所述最旧项的距离为所述第一计算距离;以及当缓存命中,且所述缓存命中的地址在所述首地址和所述尾地址的中间时,继续向所述缓存命中的地址之后的地址发起预取;其中,所述N为预先设置的预取深度,所述T为大于1的整数;所述最旧项是指离预取操作最近的时间段包括的首地址、尾地址和距离。
8.如权利要求5或6所述的装置,其特征在于,所述装置还包括:
统计模块,用于统计特定时间段内的预取准确率、预取有害率和预取迟到率,其中,所述预取准确率为预取命中次数除以总预取次数,所述预取有害率为污染预取次数除以总预取次数,所述预取迟到率为迟到预取次数除以预取命中次数;
所述预取模块还用于当所述预取准确率超过第一预设阈值时,增加预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度;或者
所述预取模块还用于当所述预取准确率超过第一预设阈值,且所述预取迟到率超过第二预设阈值时,增加预取深度,并增加预取距离,采用所述目标预取模式进行预取,所述预取的深度为所述增加后的预取深度,所述预取的距离为所述增加后的预取距离;
所述预取模块还用于当所述预取有害率超过第三预设阈值时,减少预取深度,采用所述目标预取模式进行预取,所述预取的深度为所述减少后的预取深度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310733130.1A CN104750696B (zh) | 2013-12-26 | 2013-12-26 | 一种数据预取方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310733130.1A CN104750696B (zh) | 2013-12-26 | 2013-12-26 | 一种数据预取方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104750696A CN104750696A (zh) | 2015-07-01 |
CN104750696B true CN104750696B (zh) | 2018-07-20 |
Family
ID=53590406
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310733130.1A Expired - Fee Related CN104750696B (zh) | 2013-12-26 | 2013-12-26 | 一种数据预取方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104750696B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106557431B (zh) * | 2016-11-25 | 2020-07-24 | 苏州浪潮智能科技有限公司 | 一种用于多路顺序流的预读方法及装置 |
CN108874691B (zh) * | 2017-05-16 | 2021-04-30 | 龙芯中科技术股份有限公司 | 数据预取方法和内存控制器 |
CN108874690B (zh) * | 2017-05-16 | 2020-12-15 | 龙芯中科技术有限公司 | 数据预取的实现方法和处理器 |
US10210090B1 (en) * | 2017-10-12 | 2019-02-19 | Texas Instruments Incorporated | Servicing CPU demand requests with inflight prefetchs |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5790823A (en) * | 1995-07-13 | 1998-08-04 | International Business Machines Corporation | Operand prefetch table |
CN1484788A (zh) * | 2000-12-29 | 2004-03-24 | 英特尔公司 | 根据未命中距离将数据预取到高速缓存器中的系统和方法 |
US6976147B1 (en) * | 2003-01-21 | 2005-12-13 | Advanced Micro Devices, Inc. | Stride-based prefetch mechanism using a prediction confidence value |
CN102156633A (zh) * | 2011-04-18 | 2011-08-17 | 北京北大众志微系统科技有限责任公司 | 预执行指导的数据预取方法及系统 |
CN102163144A (zh) * | 2011-05-05 | 2011-08-24 | 浙江大学 | 嵌入式处理器的硬件数据预取方法 |
US8352686B2 (en) * | 2009-03-31 | 2013-01-08 | Advanced Micro Devices, Inc. | Method and system for data prefetching for loops based on linear induction expressions |
CN103226521A (zh) * | 2013-04-18 | 2013-07-31 | 浙江大学 | 多模式数据预取装置及其管理方法 |
CN103235764A (zh) * | 2013-04-11 | 2013-08-07 | 浙江大学 | 线程感知多核数据预取自调方法 |
-
2013
- 2013-12-26 CN CN201310733130.1A patent/CN104750696B/zh not_active Expired - Fee Related
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5790823A (en) * | 1995-07-13 | 1998-08-04 | International Business Machines Corporation | Operand prefetch table |
CN1484788A (zh) * | 2000-12-29 | 2004-03-24 | 英特尔公司 | 根据未命中距离将数据预取到高速缓存器中的系统和方法 |
US6976147B1 (en) * | 2003-01-21 | 2005-12-13 | Advanced Micro Devices, Inc. | Stride-based prefetch mechanism using a prediction confidence value |
US8352686B2 (en) * | 2009-03-31 | 2013-01-08 | Advanced Micro Devices, Inc. | Method and system for data prefetching for loops based on linear induction expressions |
CN102156633A (zh) * | 2011-04-18 | 2011-08-17 | 北京北大众志微系统科技有限责任公司 | 预执行指导的数据预取方法及系统 |
CN102163144A (zh) * | 2011-05-05 | 2011-08-24 | 浙江大学 | 嵌入式处理器的硬件数据预取方法 |
CN103235764A (zh) * | 2013-04-11 | 2013-08-07 | 浙江大学 | 线程感知多核数据预取自调方法 |
CN103226521A (zh) * | 2013-04-18 | 2013-07-31 | 浙江大学 | 多模式数据预取装置及其管理方法 |
Non-Patent Citations (5)
Title |
---|
"Enhancements for Accurate and Timely Streaming Prefetcher";Gang Liu ET AL;《Journal of Instruction-Level Parallelism》;20111231;全文 * |
"Machine Learning-Based Prefetch Optimization for Data Center Applications";Shih-wei Liao ET AL;《SC09》;20091231;全文 * |
"Techniques for Bandwidth-Efficient Prefetching of Linked Data Structures in Hybrid Prefetching Systems";Eiman Ebrahimi ET AL;《Proc of the 15th Int Conf on High-Performance Computer Architecture》;20091231;全文 * |
"基于CMP的指针数据预取方法";朱会东 等;《计算机工程》;20110331;全文 * |
Santhosh Srinath ET AL."Feedback Directed Prefetching:Improving the Performance and Bandwidth-Efficiency of Hardware Prefetchers".《Proc of the 13th Int Conf on High-Performance Computer Architecture Phoenix, AZ, USA: IEEE》.2007, * |
Also Published As
Publication number | Publication date |
---|---|
CN104750696A (zh) | 2015-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106021128B (zh) | 一种基于步幅和数据相关性的数据预取器及其预取方法 | |
CN104750696B (zh) | 一种数据预取方法及装置 | |
CN105069115B (zh) | 一种基于历史报警分布式聚类的报警抑制方法 | |
EP2612249A1 (en) | Method and system for removing cache blocks | |
WO2018017461A1 (en) | Stride prefetcher for inconsistent strides | |
CN110297787B (zh) | I/o设备访问内存的方法、装置及设备 | |
CN101944068A (zh) | 一种共享高速缓存的性能优化方法 | |
Franey et al. | Tag tables | |
JP6402647B2 (ja) | データ配置プログラム、データ配置装置およびデータ配置方法 | |
CN110795363B (zh) | 一种存储介质的热页预测方法和页面调度方法 | |
CN105359142B (zh) | 哈希连接方法和装置 | |
CN109086141A (zh) | 内存管理方法和装置以及计算机可读存储介质 | |
KR20100069240A (ko) | 캐시 컨트롤을 위한 장치 및 방법 | |
Pan et al. | predis: Penalty and locality aware memory allocation in redis | |
On et al. | FD-buffer: a buffer manager for databases on flash disks | |
CN106681830B (zh) | 一种任务缓存空间监测方法和装置 | |
CN106155936B (zh) | 一种缓存替换方法与相关装置 | |
US20170357587A1 (en) | Up/down prefetcher | |
CN109144431A (zh) | 数据块的缓存方法、装置、设备及存储介质 | |
KR101940382B1 (ko) | 페이지의 프리페칭 방법 및 장치 | |
CN106649143B (zh) | 一种访问缓存的方法、装置及电子设备 | |
CN104166596B (zh) | 一种内存分配方法及节点 | |
CN108874691A (zh) | 数据预取方法和内存控制器 | |
CN107295059A (zh) | 业务推送量的统计系统及方法 | |
KR101681423B1 (ko) | 변위 히스토리 버퍼를 이용한 명령어 및 데이터 프리페치 방법 및 시스템 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180720 Termination date: 20201226 |