数据预取方法、数据预取装置、处理器
技术领域
本公开的实施例涉及一种数据预取方法、数据预取装置、处理器。
背景技术
处理器的工作速度远高于内存,如果处理器直接访问内存读写数据,则需要等待一定的时间周期,因此访问内存的过程中通常采用高速缓冲存储装置(Cache)来提高系统效率以及处理器访问内存的速度。通常,处理器优先从Cache中查找数据,例如,若应用程序或软件请求的数据在Cache中存在,则称为缓存命中(Cache hit),反之称为未命中(Cachemiss)。
为进一步降低获取数据的延迟,通常采用预取(Prefetch)技术来提前加载数据,预取技术是通过计算和访存的重叠,在Cache可能会发生未命中之前发出预取请求以便在该数据真正被使用到时己提前将数据提取入Cache,从而避免Cache未命中造成的处理器停顿。
发明内容
本公开至少一实施例提供一种数据预取方法,应用于缓存,所述缓存包括至少一个缓存替换组,每个缓存替换组包括多个缓存行,所述方法包括:获取当前数据预取请求,其中,所述当前数据预取请求对应于所述缓存中的目标缓存替换组;获取所述目标缓存替换组的访问情况;基于所述目标缓存替换组的访问情况,调整执行目标数据预取请求时的预取策略,其中,所述目标数据预取请求包括所述当前数据预取请求,或者在所述当前数据预取请求之后执行的一个数据预取请求。
例如,在本公开至少一实施例提供的数据预取方法中,所述目标缓存替换组的访问情况包括所述目标缓存替换组包括的各个缓存行的访问情况。
例如,在本公开至少一实施例提供的数据预取方法中,基于所述目标缓存替换组的访问情况,调整执行目标数据预取请求时的预取策略,包括:基于所述各个缓存行的访问情况,确定执行所述目标数据预取请求时的预取数据个数。
例如,在本公开至少一实施例提供的数据预取方法中,基于所述各个缓存行的访问情况,确定执行所述目标数据预取请求时的预取数据个数,包括:响应于第一事件,调整执行所述目标数据预取请求时的预取数据个数为第一预取范围中的任意数值,其中,所述第一事件包括所述各个缓存行的访问情况指示所述各个缓存行在预定时间内被多次访问;响应于第二事件,调整执行所述目标数据预取请求时的预取数据个数为第二预取范围中的任意数值,其中,所述第二事件包括所述各个缓存行的访问情况指示所述各个缓存行中的任一个缓存行为空,或者所述各个缓存行在所述预定时间内未被多次访问;响应于第三事件,不改变执行所述目标数据预取请求时的预取数据个数,其中,所述第三事件与所述第一事件和所述第二事件不同,其中,所述第一预取范围的平均值小于所述第二预取范围的平均值。
例如,在本公开至少一实施例提供的数据预取方法中,所述目标缓存替换组包括的各个缓存行的访问情况包括所述各个缓存行的替换优先级,每个缓存行的替换优先级与所述每个缓存行在所述预定时间内的访问次数呈负相关关系,在所述各个缓存行中替换优先级低于或等于第一优先级阈值的缓存行的数量大于第一替换阈值时,确定所述各个缓存行在所述预定时间内被多次访问,在所述各个缓存行中替换优先级高于或等于第二优先级阈值的缓存行的数量大于第二替换阈值时,确定所述各个缓存行在所述预定时间内未被多次访问,其中,所述第一优先级阈值低于或等于所述第二优先级阈值。
例如,在本公开至少一实施例提供的数据预取方法中,所述当前数据预取请求包括第一预取置信度,所述目标数据预取请求包括第二预取置信度,所述第二预取置信度与执行所述目标数据预取请求时的预取数据个数呈正相关关系,调整执行所述目标数据预取请求时的预取数据个数为第一预取范围中的任意数值,包括:减少或不改变所述第一预取置信度,以得到所述第二预取置信度;在执行所述目标数据预取请求时,根据所述第二预取置信度,确定执行所述目标数据预取请求时的预取数据个数,并使得所述预取数据个数为所述第一预取范围中的任意数值。
例如,在本公开至少一实施例提供的数据预取方法中,减少或不改变所述第一预取置信度,以得到所述第二预取置信度,包括:在所述第一预取置信度属于第一置信度范围时,减少所述第一预取置信度,以得到所述第二预取置信度;在所述第一预取置信度不属于第一置信度范围时,将所述第一预取置信度作为所述第二预取置信度,其中,所述第一置信度范围的平均值大于预设置信度阈值。
例如,在本公开至少一实施例提供的数据预取方法中,所述当前数据预取请求包括第一预取置信度,所述目标数据预取请求包括第二预取置信度,所述第二预取置信度与执行所述目标数据预取请求时的预取数据个数呈正相关关系,调整执行目标数据预取请求时的预取数据个数为第二预取范围中的任意数值,包括:增大或不改变所述第一预取置信度,以得到所述第二预取置信度;在执行所述目标数据预取请求时,根据所述第二预取置信度,确定执行所述目标数据预取请求时的预取数据个数,并使得所述预取数据个数为所述第二预取范围中的任意数值。
例如,在本公开至少一实施例提供的数据预取方法中,增大或不改变所述第一预取置信度,以得到所述第二预取置信度,包括:在所述第一预取置信度属于第二置信度范围时,增大所述第一预取置信度,以得到所述第二预取置信度;在所述第一预取置信度不属于第二置信度范围时,将所述第一预取置信度作为所述第二预取置信度,其中,所述第二置信度范围的平均值小于预设置信度阈值。
本公开至少一实施例还提供一种数据预取装置,应用于缓存,所述缓存包括至少一个缓存替换组,每个缓存替换组包括多个缓存行,所述数据预取装置包括:预取请求获取单元,配置为获取当前数据预取请求,其中,所述当前数据预取请求对应于所述缓存中的目标缓存替换组;访问情况获取单元,配置为获取所述目标缓存替换组的访问情况,调整单元,配置为基于所述目标缓存替换组的访问情况,调整执行目标数据预取请求时的预取策略,其中,所述目标数据预取请求包括所述当前数据预取请求,或者在所述当前数据预取请求之后执行的一个数据预取请求。
例如,在本公开至少一实施例提供的数据预取装置中,所述目标缓存替换组的访问情况包括所述目标缓存替换组包括的各个缓存行的访问情况,所述调整单元执行基于所述目标缓存替换组的访问情况,调整执行目标数据预取请求时的预取策略时,包括执行以下操作:基于所述各个缓存行的访问情况,确定执行所述目标数据预取请求时的预取数据个数。
例如,在本公开至少一实施例提供的数据预取装置中,所述调整单元包括第一调整子单元、第二调整子单元和第三调整子单元,所述第一调整子单元配置为响应于第一事件,调整执行所述目标数据预取请求时的预取数据个数为第一预取范围中的任意数值,其中,所述第一事件包括所述各个缓存行的访问情况指示所述各个缓存行在预定时间内被多次访问;所述第二调整子单元配置为响应于第二事件,调整执行所述目标数据预取请求时的预取数据个数为第二预取范围中的任意数值,其中,所述第二事件包括所述各个缓存行的访问情况指示所述各个缓存行中的任一个缓存行为空,或者所述各个缓存行在所述预定时间内未被多次访问;所述第三调整子单元配置为响应于第三事件,不改变执行所述目标数据预取请求时的预取数据个数,其中,所述第三事件与所述第一事件和所述第二事件不同,其中,所述第一预取范围的平均值小于所述第二预取范围的平均值。
本公开至少一实施例还提供一种处理器,包括:如本公开任一实施例所述的数据预取装置;以及所述缓存。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1为一种缓存预取、替换机制的过程示意图;
图2为本公开至少一实施例提供的一种数据预取方法的示意性流程图;
图3为本公开至少一实施例提供的预取、替换过程示意图;
图4为本公开至少一实施例提供的数据预取方法的工作流程图;
图5为本公开至少一实施例提供的一种数据预取装置的示意性框图;
图6为本公开至少一实施例提供的处理器的示意性结构图;
图7为本公开至少一实施例提供的一种电子设备的示意性框图;
图8为本公开至少一实施例提供的另一种电子设备的示意性框图。
具体实施方式
为了使得本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
为了保持本公开实施例的以下说明清楚且简明,本公开省略了部分已知功能和已知部件的详细说明。
为了提高缓存的命中率,缓存中一般会加入预取模块以产生预取地址,预取地址即为预测的后续处理器可能访问的地址,以提前将数据加载到缓存中。之后,若处理器访问该地址的数据,则可以直接从缓存中读取,而不必从存储装置(例如,内存)中提取数据,造成处理器停顿。
目前常见的预取方式包括按步长预取和顺序预取。例如,按步长预取为识别从缓存中读取的多个数据的步长,基于步长对数据进行预取,例如,读取数据的地址顺序为:地址1、地址3、地址6,则识别步长为3,从而在预取数据时对地址9进行预取。例如,顺序预取为,如果连续读取了地址1、地址2和地址3的数据,在预取数据时对地址4进行预取。
例如,高速缓冲存储装置(Cache,以下简称“缓存”)包括至少一个缓存替换组,每个缓存替换组包括多个缓存行。例如,当缓存架构为组相连架构时,每个缓存替换组具有相同的索引地址(index),缓存替换组内通过标签(tag)区分不同的缓存行。例如,当缓存架构为全相连架构时,整个缓存视为一个缓存替换组,该缓存替换组包括缓存中的所有缓存行。
例如,当发生预取操作时,需要载入新的缓存行,但是若当前的缓存替换组已经装满,那么需要在当前的缓存替换组中挑选一个缓存行,将该缓存行的数据替换为新的缓存行的数据,挑选缓存行的策略即为替换策略。在替换策略中,通常需要记录缓存行最近被访问的情况,一般选择最近最少访问的缓存行作为被替换的缓存行。
目前,预取策略通常是预取固定数量的预取数据,例如每次预取2个或1个数据加载入缓存中,例如,预取数据的地址可以彼此连续,或者间隔固定步长。
图1为一种缓存预取、替换机制的过程示意图。
如图1所示,该缓存替换组包括4路缓存行,分别为图1所示的1路、2路、3路和4路。每个方框表示该路缓存行中的数据状态,例如,I表示该缓存行为空,数据a1至数据a5表示任意形式的数据/地址。存有数据的方框旁标识有访问信息,访问信息代表该缓存行的替换优先级,例如,在时刻6,1路缓存行的访问信息为2,2路缓存行至4路缓存行的访问信息为3,例如,访问信息的数值越大,表示该缓存行的替换优先级越高,在发生缓存替换时,替换优先级越高的缓存行被优先替换。
例如,访问信息的变更策略可以设置为:在执行数据读取过程时,若当前时刻的数据访问是命中时,命中的缓存行的访问信息变为0,其他缓存行不改变访问信息;当执行缓存替换操作时,发生数据替换的缓存行的访问信息被变为2,其他缓存行的访问信息加1,访问信息的最大值为3,增加到3时不再增加。
当然,访问信息的变更策略可以根据需要进行设置,本公开对此不作限制。
如图1所示,在时刻1,各个缓存行均为空,之后在时刻2至时刻5,处理器依次发出读取数据a1、数据a2、数据a3和数据a4的请求,由于该缓存块中不存在相应的数据,则缓存块的命中情况均为未命中,处理器从内存中提取数据a1、数据a2、数据a3和数据a4,并分别存入1路缓存行、2路缓存行、3路缓存行和4路缓存行。
例如,当访问信息为0或者2时,表示该缓存行的替换优先级较低,在发生缓存替换时应当最后被替换。例如,当访问信息为3时,表示该缓存行的替换优先级较高,在发生缓存替换时应当优先被替换。
例如,根据预取策略,处理器预取数据a5并将数据a5存入缓存中,在进行缓存替换时,由于各个缓存行的访问信息均为2,判断该各个缓存行处于最近经常被访问状态,则从中选择1路缓存行中的数据a1进行替换,1路缓存行的访问信息变为2,2路缓存行至4路缓存行的访问信息增加至3,各个缓存行的状态如时刻6所示。
之后,处理器在时刻7发出读取数据a1的请求,由于数据a1已被预取的数据a5替换出去,则此时的命中情况仍为未命中,此时需要执行缓存替换,以将数据a1存入缓存中。例如,由于2路缓存行至4路缓存行的访问信息均为3,替换优先级高于1路缓存行,则选择2路缓存行中的数据a2进行替换,2路缓存行的访问信息变为2,3路缓存行和4路缓存行的访问信息仍保持为3,各个缓存行的状态如时刻7所示。
之后,在时刻8和时刻9依次发出读取数据a3和数据a4的请求,依据如前所述的过程,两次读取请求的命中情况均为未命中,导致因将数据a5预取入缓存,使得缓存访问出现连续未命中的情况,造成处理器多次停顿,影响处理器的处理效率。
在如上所述的缓存替换、预取策略中,当处理器发起预取请求时,没有考虑到缓存替换组内的访问情况,无法根据缓存替换组内的访问情况动态的调整预取请求,从而产生缓存资源浪费以及处理器访存效率降低的问题。
本公开至少一实施例提供一种数据预取方法、数据预取装置和处理器。该数据预取方法包括:获取当前数据预取请求,其中,当前数据预取请求对应于缓存中的目标缓存替换组;获取目标缓存替换组的访问情况;基于目标缓存替换组的访问情况,调整执行目标数据预取请求时的预取策略,其中,目标数据预取请求包括当前数据预取请求,或者在当前数据预取请求之后执行的一个数据预取请求。
该数据预取方法基于目标缓存替换组的访问情况实时、动态地调整预取请求,避免因预取数据导致缓存中最近经常被访问的数据被替换掉,提高处理器的处理效率,合理利用缓存资源。
本公开对预取策略、缓存替换策略不作限制,可以采用任意可行的预取策略、缓存替换策略,在此基础上结合本发明中的根据缓存访问情况调整预取条数,实现动态调整预取请求,达到本发明的目的。
例如,缓存架构为组相连(set associative)架构或者全相连架构时均可应用本发明,也即是,当缓存中存在缓存替换以及缓存预取时,均可以应用本公开提供的数据预取方法,本公开对缓存架构不作限制。
例如,在本公开中,一个预取数据存入一个缓存行,例如,缓存行的长度为32字节时,一个预取数据的长度也为32字节。
下面结合附图对本公开的实施例进行详细说明,但是本公开并不限于这些具体的实施例。
图2为本公开至少一实施例提供的一种数据预取方法的示意性流程图。
例如,该数据预取方法应用于缓存,例如,缓存可以是一级缓存、二级缓存等,缓存包括一个或多个缓存替换组,每个缓存替换组包括多个缓存行。关于缓存替换组和缓存行的概念如前所述,这里不再赘述。
例如,如图2所示,本公开实施例提供的数据预取方法包括步骤S10至S30。
在步骤S10,获取当前数据预取请求。
例如,当前数据预取请求对应于缓存中的目标缓存替换组。例如,处理器发起对缓存中的某个缓存替换组的预取操作,以将数据预先从内存中存入该缓存替换组的某个缓存行中,则该缓存替换组即为目标缓存替换组。
在步骤S20,获取目标缓存替换组的访问情况。
例如,目标缓存替换组的访问情况包括目标缓存替换组包括的各个缓存行的访问情况。
例如,访问情况可以包括最近很少被访问、最近经常被访问等。
在步骤S30,基于目标缓存替换组的访问情况,调整执行目标数据预取请求时的预取策略。
例如,目标数据预取请求包括当前数据预取请求,或者在当前数据预取请求之后执行的一个数据预取请求。也就是说,预取策略的调整可以在发起数据预取请求时就执行,或者,预取策略的调整可以在当前数据预取请求之后的下一个数据预取请求中执行,或者,预取策略的调整可以在当前数据预取请求之后的满足预定条件的数据预取请求中执行,关于“满足预定条件的数据预取请求”可以参考后文中对数据预取请求包括预取置信度时的相关内容的描述,这里不再赘述。
例如,步骤S30可以包括:基于各个缓存行的访问情况,确定执行目标数据预取请求时的预取数据个数。
例如,当目标缓存替换组中的各个缓存行处于最近经常被访问状态,那么应当减少预取数据个数,以避免经常被访问的有效数据被替换,降低数据读取效率。例如,当目标缓存替换组中的缓存行存在空行,或者各个缓存行处于最近很少被访问的状态,则应当增加预取数据个数,减少缓存资源的浪费。
例如,基于各个缓存行的访问情况,确定执行目标数据预取请求时的预取数据个数,可以包括:响应于第一事件,调整执行目标数据预取请求时的预取数据个数为第一预取范围中的任意数值,例如,第一事件包括各个缓存行的访问情况指示各个缓存行在预定时间内被多次访问;响应于第二事件,调整执行目标数据预取请求时的预取数据个数为第二预取范围中的任意数值,例如,第二事件包括各个缓存行的访问情况指示各个缓存行中的任一个缓存行为空,或者各个缓存行在预定时间内未被多次访问;响应于第三事件,不改变所述目标数据预取请求时的预取数据个数,例如,第三事件与第一事件和第二事件不同,第一预取范围的平均值小于第二预取范围的平均值。
例如,可以根据实际需要设置第一预取范围和第二预取范围。例如,第一预取范围表征预取少量的数据,例如不预取或仅预取1个或2个数据,此时第一预取范围可以为[0,2]。例如,第二预取范围表示预取较多的数据,例如预取2个、3个或4个数据,此时第一预取范围可以为[2,4]。需要说明的是,这里的预取范围仅为示意性说明,不构成对本公开的限定。
例如,当各个缓存行的访问情况指示各个缓存行在预定时间内被多次访问时,表示大多数缓存行处于最近经常被访问状态,此时应当减少执行目标数据预取请求时的预取数据个数,例如调整预取数据个数为0或者1。
例如,当各个缓存行的访问情况指示各个缓存行中的任一个缓存行为空,或者各个缓存行在预定时间内未被多次访问时,表示大多数缓存行处于最近很少被访问状态,此时增加执行目标数据预取请求时的预取数据个数,例如调整预取数据个数为3或者4。
例如,对于除上述两种情况外的其他情况,不改变执行目标数据预取请求时的预取数据个数,维持当前的预取策略不变。
例如,目标缓存替换组包括的各个缓存行的访问情况包括各个缓存行的替换优先级,每个缓存行的替换优先级与每个缓存行在预定时间内的访问次数呈负相关关系,也就是说,当一个缓存行的替换优先级越高,表示该缓存行在预定时间内的访问次数越少,在发生缓存替换时应当被优先替换,反之,当一个缓存行的替换优先级越低,表示该缓存行在预定时间内的访问次数越多,在发生缓存替换时不应当被优先替换。
例如,以图1所示的访问信息为例,访问信息为3表示其替换优先级最高,访问信息为0表示其替换优先级最低。
需要说明的是,根据实际需要,也可以设置替换优先级与每个缓存行在预定时间内的访问次数呈正相关关系,并据此对应调整各个缓存行的访问情况的判断条件,本公开对此不作限制。
例如,在各个缓存行中替换优先级低于或等于第一优先级阈值的缓存行的数量大于第一替换阈值时,确定各个缓存行在预定时间内被多次访问,在各个缓存行中替换优先级高于或等于第二优先级阈值的缓存行的数量大于第二替换阈值时,确定各个缓存行在预定时间内未被多次访问,其中,第一优先级阈值低于或等于第二优先级阈值。
例如,以图1所示的访问信息为例,当访问信息为3时表示其替换优先级为三级,访问信息为2时表示其替换优先级为二级,访问信息为0时表示其替换优先级为一级。
例如,第一优先级阈值可以设置为二级,当各个缓存行中访问信息为2或者0的缓存行的数量大于第一替换阈值(例如80%*缓存行总数)时,确定各个缓存行在预定时间内被多次访问,也即判断大多数缓存行处于最近经常被访问状态。
例如,第二优先级阈值可以设置为三级,当各个缓存行中访问信息为3的缓存行的数量大于第二替换阈值(例如80%*缓存行总数)时,确定各个缓存行在预定时间内未被多次访问,也即判断大多数缓存行处于最近很少被访问状态。
例如,第一替换阈值与第二替换阈值可以相同也可以不同。
图3为本公开至少一实施例提供的预取、替换过程示意图。
图3所示的附图标记的含义可以参考图1的相关描述,这里不再赘述。
例如,如前所述,当访问信息为3时表示其替换优先级为三级,访问信息为2时表示其替换优先级为二级,访问信息为0时表示其替换优先级为一级,第一优先级阈值可以设置为二级。
例如,在时刻5发起数据预取请求时,由于此时各个缓存行中访问信息均为2,也即所有的缓存行的替换优先级都等于第一优先级阈值,确定各个缓存行在预定时间内被多次访问,也即判断大多数缓存行处于最近经常被访问状态。
根据如前所述的内容,由于大多数缓存行处于最近经常被访问状态,可以选择不进行预取,从而在时刻6至时刻9发起的对数据a1、数据a2、数据a3和数据a4的访问均命中,不会产生如图1所示的连续未命中的情况。
在本公开提供的数据预取方法中,结合缓存替换组的访问情况动态调整预取策略,当缓存替换组的访问情况指示大多数缓存行处于最近经常被访问状态时,不预取或预取少量数据,当缓存替换组的访问情况指示大多数缓存行处于最近很少被访问状态时或存在空的缓存行时,预取更多的数据,以最大程度利用缓存资源,从而提高缓存命中率,降低处理器停顿次数,提升处理效率。
例如,在一些实施例中,数据预取请求包括预取置信度,通过预取置信度改变预取策略,也即改变预取数据的个数。
例如,预取置信度表示预取强度,预取置信度与每次预取得到的数据的命中率相关联。例如,预取置信度设置有固定的初始值,在发起预取操作时,根据预取策略将地址1和地址2的数据加载入缓存中,若后续处理器发起的数据请求中,地址1和/或地址2发生命中(cache hit),也即处理器发起了对地址1和/或地址2的读取请求,则提升预取置信度,也即提升每次预取数据的个数,若地址1和地址2都未命中,则降低预取置信度,也即减少每次预取数据的条数。
例如,预取置信度对应于一个地址集合,地址集合包括至少一个地址,例如,根据设计需要,地址集合可以包括N个连续的地址,或者地址集合可以包括N个固定步长间隔的地址。
例如,可以根据地址集合中的地址的命中率修改预取置信度,从而在下一次对地址集合中的地址发起数据预取请求时,也即执行目标数据预取请求时,根据修改后的预取置信度调整预取策略,例如,根据预取置信度选择预取数据个数。
例如,预取置信度越高,每次预取更多的数据,预取置信度越低,每次预取更少的数据。例如,当处理器发起向缓存的数据访问请求时,基于访问地址产生预取置信度和预取地址,例如,预取地址的数量根据预取置信度确定。例如,设置预取数据数量范围为[0,4],当预取置信度较高时,例如预取置信度属于第一置信度范围(例如80%-100%),单次预取操作中提取3个或4个数据,存入对应的3个或4个缓存行中;当预取置信度比较低时,例如预取置信度属于第二置信度范围(例如0-20%),单次预取操作中提取1个数据或不预取数据;当预取置信度既不属于第一置信度范围,也不属于第二置信度范围(例如20%-80%)时,单次预取操作中提取2个数据。
在上述实施例中,处理器中的缓存对数据进行预取时,只考虑缓存的未命中情况进行预取,当缓存替换组中没有空的缓存行且每个缓存行都是最近经常被访问的状态时,这种预取策略可能会加载很少被访问的新的数据而将缓存中原本的经常被访问的有效数据替换出去,降低处理器处理性能。
此外,如果缓存替换组中包括的数据均是很少被访问的数据,或者缓存替换组中存在空的缓存行,由于上述预取策略不考虑缓存替换组的状态仅考虑命中率,可能由于命中率较低,预取置信度也较低,从而在执行目标数据预取请求时选择不进行预取或少量预取,导致缓存资源的浪费,进而降低了处理器的处理效率。
例如,当前数据预取请求包括第一预取置信度,目标数据预取请求包括第二预取置信度,第二预取置信度与执行目标数据预取请求时的预取数据个数呈正相关关系,也即预取置信度越高,执行数据预取请求时的预取数据个数越多。
例如,可以将缓存替换组的访问情况与预取置信度相结合,综合判断执行目标数据预取请求时是否预取以及预取数据的数量。
例如,调整执行目标数据预取请求时的预取数据个数为第一预取范围中的任意数值,可以包括:减少或不改变第一预取置信度,以得到第二预取置信度;在执行目标数据预取请求时,根据第二预取置信度,确定执行目标数据预取请求时的预取数据个数,并使得预取数据个数为第一预取范围中的任意数值。
例如,减少或不改变第一预取置信度,以得到第二预取置信度,可以包括:在第一预取置信度属于第一置信度范围时,减少第一预取置信度,以得到第二预取置信度;在第一预取置信度不属于第一置信度范围时,将第一预取置信度作为第二预取置信度,其中,第一置信度范围的平均值大于预设置信度阈值。
例如,在大多数缓存行处于最近经常被访问状态,且第一置信度较高时,减少第一预取置信度,得到数值小于第一预取置信度的第二预取置信度,从而在执行目标数据预取请求时,根据第二预取置信度选择不预取或预取较少数量的预取数据。
例如,调整执行目标数据预取请求时的预取数据个数为第二预取范围中的任意数值,可以包括:增大或不改变第一预取置信度,以得到第二预取置信度;在执行目标数据预取请求时,根据第二预取置信度,确定执行目标数据预取请求时的预取数据个数,并使得预取数据个数为第二预取范围中的任意数值。
例如,增大或不改变第一预取置信度,以得到第二预取置信度,可以包括:在第一预取置信度处于第二置信度范围时,增大第一预取置信度,以得到第二预取置信度;在第一预取置信度不处于第二置信度范围时,将第一预取置信度作为第二预取置信度,其中,第二置信度范围的平均值小于预设置信度阈值。
例如,在大多数缓存行处于最近很少被访问状态或存在缓存行为空的情况,且第一置信度较低时,增大第一预取置信度,得到数值大于第一预取置信度的第二预取置信度,从而在执行目标数据预取请求时,根据第二预取置信度选择预取较多数量的预取数据。
例如,第一置信度范围表示预取置信度较高,第二置信度范围表示预取置信度较低,第一置信度范围和第二置信度范围的具体取值可以根据设计需要进行设置,本公开对此不作限制。
图4为本公开至少一实施例提供的数据预取方法的工作流程图。
下面结合图4具体说明本公开提供的数据预取方法的执行过程。
首先,当处理器发起访问请求时,生成数据预取请求,数据预取请求包括预取置信度。
同时,获取缓存替换组的访问情况,例如,获取缓存替换组包括的各个缓存行的访问情况。
之后,判断缓存替换组包括的各个缓存行的访问情况是否指示大多数缓存行处于最近很少被访问状态,或者缓存替换组中是否存在空的缓存行,具体判断过程如前所述,这里不再赘述。
若大多数缓存行处于最近很少被访问状态,或者缓存替换组中存在空的缓存行,则进一步判断预取置信度是否属于第二置信度范围,也即预取置信度是否较低,若预取置信度属于第二置信度范围,也即预取置信度较低,则增加预取置信度,并更新预取置信度(也即得到第二预取置信度),从而在执行目标数据预取请求,例如,在执行该预取置信度对应的地址集合中的地址的数据预取请求时,根据更新后的预取置信度选择更多的预取数据进行预取;若预取置信度不属于第二置信度范围,也即预取置信度正常或较高,则保持预取置信度,也即不改变预取置信度,并在执行目标数据预取请求,不改变选择的预取数据个数。
若大多数缓存行不处于最近很少被访问状态,则进一步判断各个缓存行是否处于最近经常被访问状态,具体判断过程如前所述,这里不再赘述。
若大多数缓存行处于最近经常被访问状态,则进一步判断预取置信度是否属于第一置信度范围,也即预取置信度是否较高,若预取置信度属于第一置信度范围,也即预取置信度较高,则减少预取置信度,并更新预取置信度,从而在执行目标数据预取请求,根据更新后的预取置信度选择不预取,或预取更少的数据;若预取置信度不属于第二置信度范围,也即预取置信度正常或较低,则保持预取置信度,也即不改变预取置信度,并在执行目标数据预取请求,不改变选择的预取数据个数。
若大多数缓存行不处于最近经常被访问状态,则保持预取置信度,也即不改变预取置信度,并在执行目标数据预取请求,不改变选择的预取数据个数。
在本公开提供的数据预取方法中,结合缓存替换组的访问情况,更新数据预取请求的预取置信度,避免出现不应被替换的缓存行的数据被预取数据替换,以及避免当存在有空的缓存行或者多数缓存行最近没有被访问过,但因预取置信度较低导致没有发起预取的情况,提高缓存资源利用率,提高处理器效率。
与上述的数据预取方法相对应,本公开至少一实施例还提供一种数据预取装置,图5为本公开至少一实施例提供的一种数据预取装置的示意性框图。
例如,如图5所示,数据预取装置500包括:预取请求获取单元501、访问情况获取单元502和调整单元503。
预取请求获取单元501,配置为获取当前数据预取请求,例如,当前数据预取请求对应于缓存中的目标缓存替换组;
访问情况获取单元502,配置为获取目标缓存替换组的访问情况。
调整单元503,配置为基于目标缓存替换组的访问情况,调整执行目标数据预取请求时的预取策略,例如,目标数据预取请求包括当前数据预取请求,或者在当前数据预取请求之后执行的一个数据预取请求。
例如,调整单元503执行基于目标缓存替换组的访问情况,调整执行目标数据预取请求时的预取策略,包括执行以下操作:基于各个缓存行的访问情况,确定执行目标数据预取请求时的预取数据个数。
例如,调整单元503包括第一调整子单元、第二调整子单元和第三调整子单元。
例如,第一调整子单元配置为响应于第一事件,调整执行目标数据预取请求时的预取数据个数为第一预取范围中的任意数值,其中,第一事件包括各个缓存行的访问情况指示各个缓存行在预定时间内被多次访问。
例如,第二调整子单元配置为响应于第二事件,调整执行目标数据预取请求时的预取数据个数为第二预取范围中的任意数值,其中,第二事件包括各个缓存行的访问情况指示各个缓存行中的任一个缓存行为空,或者各个缓存行在预定时间内未被多次访问。
例如,第三调整子单元配置为响应于第三事件,不改变执行目标数据预取请求时的预取数据个数,其中,第三事件与第一事件和第二事件不同。
例如,第一预取范围的平均值小于第二预取范围的平均值。
例如,第一调整子单元执行调整执行目标数据预取请求时的预取数据个数为第一预取范围中的任意数值时,包括执行以下操作:减少或不改变第一预取置信度,以得到第二预取置信度;在执行目标数据预取请求时,根据第二预取置信度,确定执行目标数据预取请求时的预取数据个数,并使得预取数据个数为第一预取范围中的任意数值。
例如,第二调整子单元执行调整执行目标数据预取请求时的预取数据个数为第二预取范围中的任意数值时,包括执行以下操作:增大或不改变第一预取置信度,以得到第二预取置信度;在执行目标数据预取请求时,根据第二预取置信度,确定执行目标数据预取请求时的预取数据个数,并使得预取数据个数为第二预取范围中的任意数值。
例如,预取请求获取单元501、访问情况获取单元502和调整单元503包括存储在存储器中的代码和程序;处理器可以执行该代码和程序以实现如上所述的预取请求获取单元501、访问情况获取单元502和调整单元503的一些功能或全部功能。例如,预取请求获取单元501、访问情况获取单元502和调整单元503可以是专用硬件器件,用来实现如上所述的预取请求获取单元501、访问情况获取单元502和调整单元503的一些或全部功能。例如,预取请求获取单元501、访问情况获取单元502和调整单元503可以是一个电路板或多个电路板的组合,用于实现如上所述的功能。在本申请实施例中,该一个电路板或多个电路板的组合可以包括:(1)一个或多个处理器;(2)与处理器相连接的一个或多个非暂时的存储器;以及(3)处理器可执行的存储在存储器中的固件。
需要说明的是,预取请求获取单元501用于实现图2所示的步骤S10,访问情况获取单元502用于实现图2所示的步骤S20,调整单元503用于实现图2所示的步骤S30。从而关于预取请求获取单元501的具体说明可以参考上述数据预取方法的实施例中图2所示的步骤S10的相关描述,关于访问情况获取单元502的具体说明可以参考上述数据预取方法的实施例中图2所示的步骤S20的相关描述,关于调整单元503的具体说明可以参考上述数据预取方法的实施例中图2所示的步骤S30的相关描述。此外,数据预取装置可以实现与前述数据预取方法相似的技术效果,在此不再赘述。
图6为本公开至少一实施例提供的处理器的示意性结构图。
如图6所示,该处理器600包括如本公开任一实施例所述的数据预取装置601以及缓存602。关于数据预取装置601的结构、功能、技术效果如前所述,这里不再赘述。
例如,缓存602包括预取模块、访问情况计算模块和地址匹配模块。
例如,该缓存的架构可以为组相连或全相连,关于缓存架构的具体内容这里不再赘述。
例如,预取模块配置为,当处理器600发起的对缓存602的数据访问请求的结果为未命中时,根据预取策略生成数据预取请求,例如,数据预取请求包括预取置信度和一个或多个预取地址,例如,预取地址的数量由预取置信度确定。
例如,地址匹配模块配置为对预取地址进行解析,得到标签、索引,通过索引查找到对应的缓存替换组,通过标签与缓存替换组中的各个缓存行的标签进行比对,判断是否发生命中,并将命中结果发送回预取模块。
例如,如果发生命中,说明缓存602中已存在预取地址对应的预取数据,不进行缓存替换,如果各个缓存行均未命中,说明需要进行缓存替换。
例如,访问情况计算模块配置为根据预取地址计算各个缓存行的替换优先级,计算替换优先级的过程可以采用任何可行的计算方法,例如,可以参考前述访问信息的变更策略的相关内容,这里不再赘述。
例如,地址匹配模块接收访问情况计算模块得到的缓存替换组访问情况,也即各个缓存行的替换优先级,在需要进行缓存替换时,根据各个缓存行的替换优先级执行缓存替换。
例如,数据预取装置601基于接收到的访问情况计算模块发送的缓存替换组访问情况,以及预取模块发送的预取置信度,增加、减少或保持预取置信度,并将更新后的预取置信度发送至预取模块,从而让预取模块在执行目标数据预取请求时,根据更新后的预取置信度调整预取策略。
如图6所示,可以在现有的缓存的基础上增加一个数据预取装置,即可实现根据缓存替换组的访问情况动态调整预取策略的目的,该数据预取装置对原有的架构改动较小,实现简单。
本公开至少一实施例还提供一种电子设备,图7为本公开至少一实施例提供的一种电子设备的示意性框图。
例如,如图7所示,该电子设备包括处理器701,处理器701用于实现上述的数据预取方法。
处理器701运行时可以执行上文所述的数据预取方法中的一个或多个步骤。例如,处理器701可以是中央处理单元(CPU)或者具有数据处理能力和/或程序执行能力的其它形式的处理单元。例如,中央处理单元(CPU)可以为X86或ARM架构等。处理器701可以为通用处理器或专用处理器,可以控制电子设备700中的其它组件以执行期望的功能。
需要说明的是,本公开的实施例中,电子设备700的具体功能和技术效果可以参考上文中关于数据预取方法的描述,此处不再赘述。
例如,处理器701可以包括如上所述的数据预取装置与缓存,数据预取装置和缓存的连接关系参考图6的相关描述,这里不再赘述。
图8为本公开一些实施例提供的另一种电子设备的示意框图。该电子设备800例如适于用来实施本公开实施例提供的数据预取方法。电子设备800可以是终端设备等。需要注意的是,图8示出的电子设备800仅仅是一个示例,其不会对本公开实施例的功能和使用范围带来任何限制。
如图8所示,电子设备800可以包括处理装置(例如中央处理器)810,其可以根据存储在只读存储器(ROM)820中的程序或者从存储装置880加载到随机访问存储器(RAM)830中的程序而执行各种适当的动作和处理。
在RAM830中,还存储有电子设备800操作所需的各种程序和数据。处理装置810、ROM820以及RAM830通过总线840彼此相连。输入/输出(I/O)接口850也连接至总线840。
通常,以下装置可以连接至I/O接口850:输入装置860,例如输入装置860可以包括触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等;输出装置870,例如输出装置870可以包括液晶显示器(LCD)、扬声器、振动器等;存储装置880,例如存储装置880可以包括磁带、硬盘等;以及通信装置890。通信装置890可以允许电子设备800与其他电子设备进行无线或有线通信以交换数据。虽然图8示出了具有各种装置的电子设备800,但应理解的是,并不要求实施或具备所有示出的装置,电子设备800可以替代地实施或具备更多或更少的装置。
例如,根据本公开的实施例,处理装置810可以执行上述数据预取方法,可以实现本公开实施例提供的数据预取方法中限定的功能。
对于本公开,还有以下几点需要说明:
(1)本公开实施例附图只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)为了清晰起见,在用于描述本发明的实施例的附图中,层或结构的厚度和尺寸被放大。可以理解,当诸如层、膜、区域或基板之类的元件被称作位于另一元件“上”或“下”时,该元件可以“直接”位于另一元件“上”或“下”,或者可以存在中间元件。
(3)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。