数据处理装置中的自适应预取的制作方法
【技术领域】
[0001]本发明涉及数据处理装置。更特别地,本发明涉及数据处理装置中对数据值的预取。
【背景技术】
[0002]执行一系列程序指令的数据处理装置具有预取器是公知的,该预取器力图在那些数据值被数据处理装置的指令执行单元请求之前,从存储器读取数据值用于存储在指令执行单元本地的缓存中。在这种数据处理装置中与从存储器中读取数据值相关联的存储器延迟可能是显著的,如果不提供这种预取能力,数据处理装置的操作将存在严重的性能障碍。
[0003]这种预取器对它提前预取到缓存中的数据值的数量进行动态调整也是公知的。一方面,如果在处理器(指令执行单元)的行动之前预取器不预取足够远,处理器将赶上预取器,并将力图在数据值被从存储器读取之前访问缓存中的数据值,要求处理器在相应的存储器访问完成的同时进行等待。另一方面,如果预取器提前预取数据值过远,在被要求之前数据值将被长时间地存储在缓存中,存在被其间的其它存储器访问请求从缓存中驱逐的风险。取决于所实现的数据处理的本质,这些相互竞争的约束之间的合适的平衡可能不同,因此预取器被配置为动态(即在数据处理装置的操作过程中)调整其预取距离(即在它操作的处理器之前多远)。
【发明内容】
[0004]从第一方面看,本发明提供一种数据处理装置,包括:
[0005]指令执行单元,该指令执行单元被配置为执行一系列程序指令,其中对程序指令中的至少一些程序指令的执行发起从存储器读取数据值的存储器访问请求;
[0006]缓存单元,该缓存单元被配置为存储从存储器中读取的数据值的副本;以及
[0007]预取单元,该预取单元被配置为在数据值被指令执行单元请求之前,通过推断存储器访问请求的当前数据值访问模式以预测将被指令执行单元请求的将来的数据值并预取该将来的数据值,来从存储器预取数据值用于存储在缓存单元中,
[0008]其中预取单元被配置为处理错过响应,这包括增加它在存储器访问请求指定等待(pending)数据值(即已经经历预取但还未被存储在缓存单元中的数据值)时预取的将来数据值的数量,
[0009]其中预取单元被配置为:响应于禁止条件被满足,而在禁止期暂时禁止错过响应。
[0010]根据本技术的预取单元被配置为动态调整其预取距离,S卩,在那些数据值被由指令执行单元发出的存储器访问实际请求之前,它对其发起预取的那些将来数据值的数量。应当理解本文中术语“数据值”应当被解释为概括地覆盖指令和数据。通过监视从指令执行单元接收到的存储器访问请求以及判定它们是否被已经被预取并被存储在缓存单元中的数据值成功地预期,这种动态调整得以实现。特别地,预取单元被配置为通过处理错过响应来调整预取距离,其中当接收到的存储器访问请求指定已经是预取对象但还未被存储在缓存单元中的数据值时预取单元预取的数据值的数量被增加。也就是说,通常在这种情况下的解释是预取器已经正确地预测该数据值将被由指令执行单元发起的存储器访问请求需要,但还未提前发起对该数据值的足够远的预取使得其到从指令执行单元接收到存储器访问的时候在缓存单元中已经可用。因此,根据该解释,预取单元可以通过增加它预取的数据值的数量来减小将来发生这种情况的可能性,即,增加它的预取距离,使得对预测将被指令执行单元要求的给定数据值的预取在它实际上被指令执行单元要求之前更早被发起。
[0011]然而,本技术意识到,每次从指定已经经历预取但还未被存储在缓存中的数据值的指令执行单元接收到存储器访问请求时,预取单元可能并不总是需要增加它的预取距离。例如,本技术意识到,在由数据处理装置实现数据处理活动的过程中,可能发生一些情况,其中增加预取距离并不一定会引起数据处理性能的改善,因此实际上可能是不需要的。因此,本技术规定预取单元可以附加地监视禁止条件,并且当这种禁止条件被满足时,预取单元被配置为在预定禁止期内暂时禁止通常的错过响应(即增加预取距离)。因而,这使得预取单元能够标识那些通过增加预取距离数据将不会改善处理装置的性能的情况,并暂时阻止那种通常响应。
[0012]禁止条件可以以多种不同的方式被配置,但是在一个实施例中,禁止条件包括对强制错过条件的标识,其中,当存储器访问请求指定的等待数据值必然未被存储在缓存单元中时,强制错过条件被满足。因此,在等待数据值必然未被存储在缓存中(即预取单元的其他配置也不能避免数据值还未被存储在缓存单元中这一事实)的情况下,则预取单元的配置(特别是它的预取距离)不被改变是有利的。
[0013]强制错过条件可能因为许多原因出现,但是在一个实施例中,当存储器访问请求不可预取时,强制错过条件被满足。存储器访问请求不可预取的事实由此提供了一个理由来解释为什么预取单元的配置(特别是它的预取距离)不是问题,即,并不是它造成等待数据值还未被存储在缓存单元中。
[0014]在一些实施例中,预取单元被配置为针对每个存储器访问请求执行步幅(stride)检查,其中步幅检查判定存储器访问请求是否确实推断当前的数据值访问模式,并且其中数据处理装置中的存储器地址在存储器页中被管理,并且其中预取单元被配置为:响应于一组与将来数据值数量对应的存储器地址跨越页边界,抑制步幅检查。为了成功地推断指令执行单元发出的存储器访问请求的当前数据值访问模式,预取单元通常可以被配置为针对每个新的存储器访问请求检查相应的新地址是否确实与预测的步幅匹配(即数据值访问模式推断),但是当页边界被跨越时,由于可以合理地预期这种步幅检查无论如何都不会引起匹配,所以可以抑制步幅检查以节省不必要的处理。
[0015]在一些实施例中,数据处理装置中的存储器地址在存储器页中被管理,当与将来数据值数量相对应的一组存储器地址跨越页边界时,禁止被满足。当被预取单元预取的那些将来数据值跨越页边界时,这意味着那些数据值的第一子集在一个存储器页中,而那些数据值的第二部分在第二存储器页中。由于一个存储器页的物理地址与第二存储器页的物理地址之间没有关联,这造成预取单元根本不可能成功地预测并预取相应的目标数据值的情况。
[0016]在一些实施例中,预取单元被配置使得在将来数据值的数量(即预取距离)被增加之后的预定时期内,禁止条件被满足。已经认识到,由于存储器访问延迟,当预取距离增加时,正经历预取(且与特定的程序指令相对应)的存储器访问请求的数量随后将在缓存单元的内容中已经产生相应的变化之前增加。因此会有一段中间时间,在这段时间中对要禁止的错过响应(即进一步增加预取距离)是有利的。事实上,可以想到这样的正反馈场景:预取距离可能被反复地增加。虽然在更简单的指令执行单元中这通常不是问题,但是在多线程指令执行单元的情况中,指令执行单元将被第一个实例阻塞,因为等待数据值还未被存储在缓存单元中;即,更加可能出现与已经经历预取但还未被存储在缓存单元中的数据值相关的这种反复的存储器访问请求,以及针对这种反复增加预取距离而发生的缓和诉求。
[0017]取决于数据处理装置的具体约束,可以以各种方式对禁止期的持续时间进行配置,但是在一个实施例中禁止期是数据处理装置的标准存储器延迟的倍数,存储器延迟代表数据值从存储器中被读取所需要的时间。禁止期从而可以被安排,使得在标准存储器延迟的这个倍数经过之前,预取单元预取的将来值数量(即预取距离)的调整不可以被增加。例如,在由于预取距离最近刚