一种数据预取方法及装置、微处理器与流程

文档序号:17489141发布日期:2019-04-23 20:16阅读:133来源:国知局
一种数据预取方法及装置、微处理器与流程

本发明涉及计算机领域,具体地涉及一种数据预取方法及装置、微处理器。



背景技术:

随着计算机的数据处理能力的飞速提升,现有的微处理器工作在较高(如大于1ghz)的频率,为了保持执行单元处于忙碌状态,需要以高比率向微处理器投喂数据。此外,延迟也很重要,许多微处理器被设计为可以允许4循环负荷(即1ghz的处理器可以有4ns)的延迟。

但是,与微处理器不同,现有的存储器,如动态随机存取存储器(dynamicrandomaccessmemory,简称dram),具有长访问延迟的工作特征。

为了解决与dram之间的延迟失配,在实际应用中,微处理器一般会使用一级或多级缓存(cache)来预先缓存dram中的数据。具体地,一段数据被从dram中取出后,假定其在将来会被再次使用,该数据会被存储在所述微处理器本地的缓存中。而对于流式程序(如memcpy函数)这类在运行时会使用大量数据,但是每段数据只使用一次的程序,微处理器需要进一步采用硬件预取引擎来实现数据预取。

例如,所述硬件预取引擎可以监控微处理器运行的程序的数据访问流,以尝试检测到某一模式(pattern)。如果检测到模式,则所述硬件预取引擎可以使用该模式来提前预测该程序接下来可能需要的数据所在的存储单元,并提前发起请求以从预测到的存储单元中预取数据。

在理想状态下,硬件预取引擎可以实现百分百的预测正确率,即只要所述硬件预取引擎采用的前瞻距离足够长,所述硬件预取引擎就可以足够快的取回足够长的数据,从而使得程序始终能够在缓存中找到其需要的数据。

但是,在实际应用中,由于硬件预取引擎不知道程序的存储器访问流何时结束,这就意味着当存储器访问流结束时,所述硬件预取引擎仍会根据预设的前瞻距离从dram取回多余的数据(可以以缓存行为传输单位)。对于流式程序,这些多余的数据是永远不会被程序再次使用的。这无疑增加了程序(尤其是小字串流的流式程序)的运行时间,并且还会产生额外的功耗,严重影响了程序的运行速度,进而影响了计算机的数据处理能力。



技术实现要素:

本发明解决的技术问题是如何更合理的确定用于数据预取的前瞻距离,以保障程序的运行速度,降低功耗。

为解决上述技术问题,本发明实施例提供一种数据预取方法,包括:对于具有存储器访问需求的程序,统计所述程序的存储器访问流的长度;根据所述存储器访问流的长度确定前瞻距离,其中,所述前瞻距离与所述存储器访问流的长度呈正比;根据所述前瞻距离从所述存储器中预取数据。

可选的,所述统计所述程序的存储器访问流的长度包括:跟踪所述程序访问所述存储器时的数据传输;根据传输的数据量确定所述存储器访问流的长度。

可选的,所述存储器访问流的长度以缓存行为单位计量。

可选的,所述根据所述存储器访问流的长度确定所述前瞻距离包括:根据所述存储器访问流的长度查找对照关系表,以确定与所述存储器访问流的长度相对应的前瞻距离。

可选的,所述对照关系表以硬编码或可配置软件的形式存储。

本发明实施例还提供一种数据预取装置,包括:统计模块,对于具有存储器访问需求的程序,统计所述程序的存储器访问流的长度;前瞻距离确定模块,用于根据所述存储器访问流的长度确定所述前瞻距离,其中,所述前瞻距离与所述存储器访问流的长度呈正比;数据预取模块,用于根据所述前瞻距离从所述存储器中预取数据。

可选的,所述统计模块包括:缓存行穿过检测器,用于跟踪所述程序访问所述存储器时的数据传输;长度计数器,用于根据传输的数据量确定所述存储器访问流的长度。

可选的,所述存储器访问流的长度以缓存行为单位计量。

可选的,所述前瞻距离确定模块包括:查找子模块,用于根据所述存储器访问流的长度查找对照关系表,以确定与所述存储器访问流的长度相对应的前瞻距离。

可选的,所述对照关系表以硬编码或可配置软件的形式存储。

本发明实施例还提供一种微处理器,包括上述数据预取装置。

与现有技术相比,本发明实施例的技术方案具有以下有益效果:

对于具有存储器访问需求的程序,统计所述程序的存储器访问流的长度;根据所述存储器访问流的长度确定所述前瞻距离,其中,所述前瞻距离与所述存储器访问流的长度呈正比;根据所述前瞻距离从所述存储器中预取数据。较之现有基于恒定数值的预设前瞻距离进行数据预取的技术方案,本发明实施例的技术方案能够根据程序的存储器访问流的长度动态调整前瞻距离,并基于调整后的前瞻距离进行数据预取,以有效减少程序的运行时间,降低功率消耗。

进一步,通过跟踪所述程序访问所述存储器时的数据传输,并根据传输的数据量确定所述存储器访问流的长度,从而更精准的确定接下来执行数据预取所需使用的前瞻距离,确保数据预取装置(如硬件预取装置,也可称为硬件预取引擎)能够获得更好的性能。

进一步地,通过本发明实施例的技术方案,数据预取装置以较小的前瞻距离开始进行数据预取,基于本发明实施例的技术方案,在程序运行期间,能够持续追踪所述程序的存储器访问流的长度,当所述存储器访问流的长度很短时,所有的数据预取可以以较小的前瞻距离来进行;当所述存储器访问流的长度很长时,所述数据预取装置可以随着所述存储器访问流的长度的增加而逐渐增大前瞻距离,以最小化在程序(如流式程序)的最后预取回不必要的缓存行所导致的开销。

附图说明

图1是本发明的第一实施例的一种数据预取方法的流程图;

图2是本发明的第二实施例的一种数据预取装置的结构示意图。

具体实施方式

本领域技术人员理解,如背景技术所言,为了减少微处理器与存储器(如dram)之间的延迟失配,硬件预取引擎至少需要能够以与程序(如流式程序)的数据消耗速度相匹配的速度预先从存储器中请求缓存行至数据缓存(datacache)中。例如,如果从dram中取回64b的数据行(也可称为缓存行)需要200ns,则相应的数据取回速度需要达到3亿2千万字节/秒;如果所述微处理器以1ghz的频率运行,并且每个循环可以进行一8字节的负荷,则所述微处理器的数据消耗速度是80亿字节/秒,相应的,所述硬件预取引擎需要从dram中平行的取回25个缓存行以匹配程序的数据消耗速度。这个数字(即25个数据行)也可以称为所述硬件预取引擎的前瞻距离。

基于现有的技术方案,普遍会预先设定较大的前瞻距离,以期能够更好的帮助硬件预取引擎跟上程序的存储器访问流。而在实际应用中,现有硬件预取引擎的前瞻距离是固定不变的,又由于硬件预取引擎不知道程序的存储器访问流的结束时间,这就意味着当程序停止访问存储器时(即所述程序的存储器访问流结束时),若所述硬件预取引擎仍然按照预设的前瞻距离从存储器中预取数据,就势必会取回多余的缓存行,而这些多余的缓存行永远不会被程序使用,这无疑增加了程序的运行时间,还会产生额外的功耗。参考上述前瞻距离为25个缓存行的示例,当所述程序的存储器访问流结束时,所述硬件预取引擎会取回25个无用的缓存行。

虽然对于存储器访问流的长度较大的程序(也可称为大字串流,largestream)而言,这样的开销是可以被忽略的;但是,对于存储器访问流的长度较小的程序(也可称为小字串流,smallstream),如1kb(16个64b的缓存行)的memcpy程序,这样的开销会浪费100%的额外运行时间和功率消耗。

为了解决上述技术问题,本发明实施例提供了一种技术方案,对于具有存储器访问需求的程序,统计所述程序的存储器访问流的长度;根据所述存储器访问流的长度确定所述前瞻距离,其中,所述前瞻距离与所述存储器访问流的长度呈正比;根据所述前瞻距离从所述存储器中预取数据。本领域技术人员理解,本发明实施例的技术方案能够根据程序的存储器访问流的长度动态调整前瞻距离,并基于调整后的前瞻距离进行数据预取,以有效减少程序的运行时间,降低功率消耗。

进一步,通过跟踪所述程序访问所述存储器时的数据传输,并根据传输的数据量确定所述存储器访问流的长度,从而更精准的确定接下来执行数据预取所需使用的前瞻距离,确保数据预取装置(如硬件预取装置,也可称为硬件预取引擎)能够获得更好的性能。

为使本发明的上述目的、特征和有益效果能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。

图1是本发明的第一实施例的一种数据预取方法的流程图。其中,所述数据预取可以包括硬件预取,例如微处理器通过硬件预取引擎的预取操作。

具体地,在本实施例中,所述数据预取方法可以包括如下步骤:

步骤s101,对于具有存储器访问需求的程序,统计所述程序的存储器访问流的长度。

步骤s102,根据所述存储器访问流的长度确定所述前瞻距离,其中,所述前瞻距离与所述存储器访问流的长度呈正比。

步骤s103,根据所述前瞻距离从所述存储器中预取数据。

更为具体地,所述程序可以包括流式程序,还可以包括其他任何需要执行硬件预取操作的程序。

进一步地,所述前瞻距离可以用于表示每次需要从所述存储器中预先取回的数据量。

优选地,所述存储器访问流的长度以及所述前瞻距离均可以以缓存行(cacheline)为单位计量。其中,对于特定结构的缓存,每一缓存行包括大小固定的成块数据。

在一个优选例中,所述前瞻距离可以取自预设数值区间。例如,所述预设数值区间可以为[1,64],或者,本领域技术人员还可以根据实际需要变化出更多实施例,在此不予赘述。

进一步地,所述步骤s101可以包括步骤:跟踪所述程序访问所述存储器时的数据传输;根据传输的数据量确定所述存储器访问流的长度。

本领域技术人员理解,由于所述存储器访问流的长度可以以所述缓存行为计量单位,而所述传输的数据量也是以缓存行为传输单位的,所以,通过根据所述程序访问所述存储器时传输的数据量,就可以确定所述存储器访问流的长度。例如,每当所述传输的数据量穿过一个缓存行的边界时,可以确定所述存储器访问流的长度增加一个缓存行。

进一步地,所述步骤s102可以包括步骤:根据所述存储器访问流的长度查找对照关系表,以确定与所述存储器访问流的长度相对应的前瞻距离。

表1对照关系表

在一个优选例中,所述存储器访问流的长度和前瞻距离的对照关系表可以如上述表1所示,其中,当所述步骤s101统计到的所述存储器访问流的长度落在[0,4)的长度区间内时,所述步骤s102可以参照上述表1所列的对照关系将所述前瞻距离确定为1个缓存行;以此类推,当所述步骤s101统计到的所述存储器访问流的长度大于或等于32个缓存行时,所述步骤s102可以参照上述表1所列的对照关系将所述前瞻距离确定为16个缓存行。

进一步地,所述对照关系表可以以硬编码或可配置软件的形式存储。

例如,所述对照关系表可以硬编码在数字逻辑电路中,所述数字逻辑电路可以集成于所述微处理器或者所述数据预取装置上,或者,所述数字逻辑电路也可以单独集成并与所述数据预取装置相通讯。

又例如,所述对照关系表还可以通过软件编写的方式存储在寄存器中。

进一步地,所述对照关系表中对所述存储器访问流的长度区间的划分,以及与各个长度区间相对应的前瞻距离的具体数值,均可以根据实际需要进行配置。例如,当所述存储器访问流的长度为4个缓存行时,所述前瞻距离可以为1或2个缓存行。

本领域技术人员理解,在实际应用中,用户可以根据实际运行的程序来重新配置所述对照关系表,一方面在预设的最小前瞻距离和最大前瞻距离界定的取值范围(即上述前瞻距离的预设数值区间)内,确保所述前瞻距离的取值能够随着所述存储器访问流的长度的增长而增大;另一方面又可以根据当前运行的程序的特点,及时调整与所述存储器访问流的长度相对应的前瞻距离的实际长度,使得预取回的数据量既能满足所述程序的数据消耗速度,又能够最小化在程序的最后预取回不必要的缓存行所导致的开销。

在步骤s103中,根据所述前瞻距离从所述存储器中预取数据,预取获得的数据可以在数据缓存模块中缓存,以供微处理器使用。

由上,采用第一实施例的方案,用于执行数据预取的装置(即数据预取装置,如硬件预取装置)可以基于动态可调的前瞻距离从存储器中预取数据,其中,所述前瞻距离的大小可以随着所述程序的存储器访问流的长度的增大而增大。具体地,基于本发明实施例的技术方案,所述数据预取装置可以以较小的前瞻距离开始进行数据预取,并且在程序运行期间,所述数据预取装置能够持续追踪所述程序的存储器访问流的长度,当所述存储器访问流的长度很短时,所有的数据预取可以以较小的前瞻距离来进行;当所述存储器访问流的长度很长时,所述硬件预取装置可以随着所述存储器访问流的长度的增加而逐渐增大前瞻距离,以最小化在程序(如流式程序)的最后预取回不必要的缓存行所导致的开销。

图2是本发明的第二实施例的一种数据预取装置的结构示意图。具体地,在本实施例中,所述数据预取装置2可以包括统计模块23,对于具有存储器访问需求的程序,统计所述程序的存储器访问流的长度;前瞻距离确定模块24,用于根据所述存储器访问流的长度确定所述前瞻距离,其中,所述前瞻距离与所述存储器访问流的长度呈正比;数据预取模块,用于根据所述前瞻距离从所述存储器中预取数据。

进一步地,所述统计模块23可以包括缓存行穿过检测器231,用于跟踪所述程序访问所述存储器时的数据传输;长度计数器233,用于根据传输的数据量确定所述存储器访问流的长度。

优选地,所述存储器访问流的长度以缓存行为单位计量。

进一步地,所述前瞻距离确定模块24包括查找子模块242,用于根据所述存储器访问流的长度查找对照关系表,以确定与所述存储器访问流的长度相对应的前瞻距离。

优选地,所述对照关系表可以以硬编码或可配置软件的形式存储。例如,可以存储于至少一个候选前瞻距离存储模块243。

在一个典型的应用场景中,参考图2,以本发明实施例应用于微处理器(图中未示出)的数据缓存系统为例。具体地,在微处理器中,数据缓存可以用于避免微处理器(希望快速访问数据,如在4次循环(也可简称为4循环)之内访问到存储器的数据)和存储器(如dram,数据访问速度很慢,需要花费200次到300循环去访问数据)之间的延迟失配。所以,当微处理器从dram中取到了一个缓存行的数据,所述微处理器会把所述数据存储在数据缓存模块1中,以期所述数据在接下来的时间里还会被使用。进一步地,在实际应用中,当所述微处理器需要访问下一片数据时,会优先检查所述数据缓存模块1。如果所述微处理器需要的数据已经是所述数据缓存模块1中存储的缓存行的一部分,这样的场景可以称为命中(hit),此时所述微处理器的访问延迟很快(如可以控制在4循环内);但是,如果所述微处理器需要的数据不是所述数据缓存模块1中存储的缓存行的一部分,则这个数据必须从dram中实时取得,这样的场景可以称为未命中(miss),此时所述微处理器的访问延迟很慢(约200-300循环)。

因此,需要采用本发明实施例的技术方案,通过硬件预取的方式,将所述程序后续可能需要的数据预先取回并放置到所述数据缓存模块1中,以尽可能的降低所述微处理器与存储器之间的延迟失配;同时,基于本发明实施例的方案,还需要通过所述数据预取装置2来根据所述程序的存储器访问流动态调整所述前瞻距离的具体数值,以最小化在程序的最后预取回不必要的缓存行所导致的开销。

进一步地,在本应用场景中,当产生所述程序的存储器访问流(以下简称存储器访问流)时,所述数据预取装置2可以基于所述缓存行穿过检测器231跟踪所述程序访问所述存储器时的数据传输,当所述缓存行穿过检测器231检测到传输的数据量超过一个缓存行的数据量时,可以确定所述存储器访问流穿过了所述缓存行的边界,则所述缓存行穿过检测器231通知加法器232,以更新所述长度计数器233记录的数值。例如,所述长度计数器233可以从0开始计数,每当有存储器访问流穿过所述缓存行的边界,由加法器232为所述长度计数器233记录的数值加1,并将加1后的所述存储器访问流的长度更新至所述长度计数器233。

优选地,所述长度计数器233可以为触发器(flip-flop),或者,也可以为寄存器(register)。

进一步地,在统计出所述存储器访问流的长度后,所述统计模块23可以将统计结果(即所述存储器访问流的长度)发送至所述前瞻距离确定模块24。

进一步地,所述前瞻距离确定模块24可以调用对照关系表存储子模块241,以根据所述对照关系表选择与所述统计结果相对应的候选前瞻距离存储模块243。进一步地,所述前瞻距离确定模块24可以调用所述查找子模块242,以从选择的所述候选前瞻距离存储模块243中存储的多个候选前瞻距离中读取与所述统计结果最合适的前瞻距离,并将所述前瞻距离发送至预取请求逻辑模块22。

优选地,所述对照关系表存储子模块241中预存的对照关系表可以参照上述表1的相关内容。作为一个非限制性实施例,在实际应用中,用户可以根据实际需要调整所述对照关系表中记录的所述存储器访问流的长度区间的划分。

优选地,所述对照关系表中各个存储器访问流的长度区间各自对应的前瞻距离可以取自所述候选前瞻距离存储模块243。参考图2,本应用场景中仅以三个候选前瞻距离存储模块243为例,而在实际应用中,所述数据预取装置2中包括的候选前瞻距离存储模块243的数量还可以为1个、2个、4个甚至更多,本领域技术人员可以根据实际需要变化出更多实施例,在此不予赘述。

优选地,所述候选前瞻距离存储模块243可以与所述对照关系表中存储器访问流的长度区间一一对应。作为一个非限制性实施例,在实际应用中,用户还可以根据实际需要调整所述候选前瞻距离存储模块243中存储的所述前瞻距离的具体数值,相应的,所述查找子模块242可以根据所述统计模块23统计到的所述存储器访问流的长度在所述对照关系表存储子模块241中查找到适合的存储器访问流的长度区间,进而从与所述长度区间相对应的候选前瞻距离存储模块243中获取所述前瞻距离的最新数值。

或者,所述候选前瞻距离存储模块243也可以用于存储所述对照关系表中多个存储器访问流的长度区间各自对应的前瞻距离。

例如,图2示出的三个候选前瞻距离存储模块243可以分别用于存储存储器访问流的长度较短(如0-16缓存行)、存储器访问流的长度中等(如16-24缓存行)、以及存储器访问流的长度较长(如大于24缓存行)时,各自对应的前瞻距离。

进一步地,在确定与所述程序的存储器访问流相对应的前瞻距离后,所述前瞻距离确定模块24将所述前瞻距离发送至所述预取请求逻辑模块22,由所述预取请求逻辑模块22接收到模式检测逻辑模块21发出的触发预取的触发信号后,向所述存储器发送预取请求。

优选地,所述数据预取装置2可以包括硬件预取装置,所述硬件预取装置可以称为硬件预取引擎。

关于所述数据预取装置2的工作原理、工作方式的更多内容,可以参照上述图1中的相关描述,这里不再赘述。

由上,采用本发明实施例的技术方案,所述硬件预取引擎能够以较小的前瞻距离开始执行数据预取操作,然后,在程序访问存储器期间,所述硬件预取引擎持续追踪所述程序的存储器访问流的长度,当所述长度一直保持在较短的状态时,所述数据预取操作仍优选地以较小的前瞻距离执行;当所述程序的存储器访问流的长度增大时,所述硬件预取引擎能够随着所述长度的增加而逐渐增加所述前瞻距离。

仍以本具体实施方式开篇所列举的示例为例,当程序开始访问存储器时,采用本发明实施例的技术方案的硬件预取引擎可以以4个缓存行为前瞻距离开始预取;之后,当所述程序访问存储器时传输的数据量超过512字节时,所述硬件预取引擎可以提升所述前瞻距离至8个缓存行,这样,当所述程序的存储器访问流在前进了1024个字节后结束时,只有8个无用的缓存行会被预取回来,极大地减少了在程序运行的最后预取回不必要的缓存行所导致的开销,有效保障了程序的运行速度,降低了功耗。

进一步地,本发明实施例的技术方案还提供一种微处理器,所述微处理器包括上述图2所示的数据预取装置2。进一步地,所述微处理器还可以包括缓存(如上述图2所示的数据缓存模块1),以缓存所述数据预取装置2从存储器中预取回的数据。

虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1