一种数据预取方法、相关装置及系统的制作方法

文档序号:6532470阅读:153来源:国知局
一种数据预取方法、相关装置及系统的制作方法
【专利摘要】本发明实施例公开了一种数据预取方法、相关装置及系统,其中,所述方法包括运行可执行程序;当运行到插入在所述可执行程序中的预取代码时,根据该预取代码的指示对到数据存储器中预取数据进行控制;其中,所述根据该预取代码的指示对到数据存储器中预取数据进行控制包括:若所述预取代码包括用于指示开启预取功能的预取开启代码,控制开启预取功能到数据存储器中预取数据;若所述预取代码包括用于指示关闭预取功能的预取关闭代码,控制关闭预取功能停止到数据存储器中预取数据。采用本发明,可直接控制缓存器等进行数据预取的装置的预取功能的开启或关闭,降低了功耗,并且可有效避免预取误操作带来的缓存污染问题。
【专利说明】一种数据预取方法、相关装置及系统
【技术领域】
[0001]本发明涉及计算机【技术领域】,尤其涉及一种数据预取方法、相关装置及系统。
【背景技术】
[0002]在现有的计算机系统中,虽然处理器如CPlXCentral Processing Unit,中央处理器)主频的提升会带动系统性能的改善,但系统性能的提高不仅仅取决于CPU,还与系统架构、指令结构、信息在各个部件之间的传送速度及存储部件的存取速度等因素有关,特别是与CPU/内存之间的存取速度有关。若CPU工作速度较高,但内存存取速度相对较低,则造成CPU等待,降低处理速度,浪费CPU的能力。
[0003]当前减少CPU与内存之间速度差异的方法主要有以下几种方式:
[0004]在基本总线周期中插入等待,但这样会浪费CPU的能力;
[0005]采用存取时间较快的SRAM作存储器,这样虽然解决了 CPU与存储器间速度不匹配的问题,但却大幅提升了系统成本;
[0006]在慢速的DRAM和快速CPU之间插入一速度较快、容量较小的SRAM,起到缓冲作用;使CPU既可以以较快速度存取SRAM中的数据,又不使系统成本上升过高,这就是Cache法;
[0007]采用新型的高速存储器。
[0008]目前,一般采用Cache法减少CPU与内存之间速度差异,它使硬件系统在不大增加成本的前提下,使计算处理性能提升的一个非常有效的技术。
[0009]Cache的工作原理是基于程序访问的局部性。对大量典型程序运行情况的分析结果表明,在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内。指令地址的分布本来就是连续的,再加上循环程序段和子程序段要重复执行多次。因此,对这些地址的访问就自然地具有时间上集中分布的倾向。虽然数据分布的这种集中倾向不如指令明显,但是对数组的存储和访问以及工作单元的选择都可以使存储器地址相对集中。这种对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的现象,就称为程序访问的局部性。
[0010]根据程序的局部性原理,可以在主存和CPU通用寄存器之间设置一个高速但容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据从主存调入这个存储器,供CPU在一段时间内使用。这对提高程序的运行速度有很大的作用。这个介于主存和CPU之间的高速小容量存储器称作高速缓冲存储器Cache。
[0011]系统正是依据局部性原理,不断地将与当前指令集相关联的一个不太大的后继指令集从内存读到Cache,然后再与CPU高速传送,从而达到速度匹配。CPU对存储器进行数据请求时,通常先访问Cache。由于局部性原理不能保证所请求的数据百分之百地在Cache中,这里便存在一个命中率,即CPU在任一时刻从Cache中可靠获取数据的几率。命中率越高,正确获取数据的可靠性就越大。为了提高数据的命中率,就需要选择适当的数据预取方式。
[0012]数据预取技术是提高计算机系统处理速度的有效方法。预取是指在指令或数据即将访问之前,将所需指令或数据提前从内存取至Cache,以达到访问时Cache命中的目的。针对预取的对象是指令还是数据,可分为指令预取和数据预取。目前使用的预取技术大多为软硬件结合预取技术。
[0013]软硬件结合的预取技术中,首先确定任务中需要预取数据的程序段,然后由计算机系统的硬件来决定预取的数据的数目并到内存中预取相应的数据流。发明人发现,现有技术中的软硬件结合的预取方式预取数据时,在任务对应的可执行程序的运行过程中,硬件需要一直处于预取状态,会带来不必要的能量消耗,并且硬件一直处理预取状态还可能产生不必要的预取操作,导致Cache污染等问题。

【发明内容】

[0014]本发明实施例提供一种数据预取方法、相关装置及系统,可控制硬件的预取状态的开启和关闭,以节约功耗并一定程度上避免Cache污染。
[0015]第一方面,本发明实施例提供了一种数据预取方法,包括:
[0016]运行可执行程序;
[0017]当运行到插入在所述可执行程序中的预取代码时,根据该预取代码的指示,对到数据存储器预取数据进行控制;
[0018]其中,所述根据该预取代码的指示对到数据存储器中预取数据进行控制包括:
[0019]若所述预取代码包括用于指示开启预取功能的预取开启代码,控制开启预取功能到数据存储器中预取数据;若所述预取代码包括用于指示关闭预取功能的预取关闭代码,控制关闭预取功能停止到数据存储器中预取数据。
[0020]结合第一方面,在第一种可能的实现方式中,所述运行可执行程序之前,还包括:
[0021]在所述可执行程序的预编译过程中,识别确定出所述可执行程序中密集访存的代码区间,并在所述密集访存的代码区间插入所述预取代码。
[0022]结合第一方面,或者第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述方法还包括:
[0023]检测到从所述可执行程序切换至其他程序时,存储当前所述可执行程序所处的预取状态,所述预取状态包括预取已开启的状态和预取已关闭的状态;
[0024]检测到由所述其他程序切换回所述可执行程序时,查找存储的所述可执行程序所处的预取状态;
[0025]若预取状态包括预取已开启的状态,控制开启预取功能到数据存储器中预取数据;若预取状态包括预取已关闭的状态,控制关闭预取功能停止到数据存储器中预取数据。
[0026]结合第一方面,或者第一方面的第一种可能的实现方式,或者第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述若所述预取代码包括用于指示开启预取功能的预取开启代码,控制开启预取功能到数据存储器中预取数据,包括:
[0027]若所述预取代码包括用于指示开启预取功能的预取开启代码,设置预取指令中的预取开启控制位为有效得到控制指令,以控制开启缓存器的预取功能以到数据存储器中预取数据;
[0028]所述若所述预取代码包括用于指示关闭预取功能的预取关闭代码,控制关闭预取功能停止到数据存储器中预取数据,包括:[0029]若所述预取代码包括用于指示关闭预取功能的预取关闭代码,设置预取指令中的预取结束控制位为有效得到控制指令,以控制关闭缓存器的预取功能以停止到数据存储器中预取数据。
[0030]结合第一方面,第一方面的第一种可能的实现方式,或者第一方面的第二种可能的实现方式,或者第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述根据该预取代码的指示对到数据存储器中预取数据进行控制,还包括:
[0031]若所述预取代码包括用于指示开启预取功能的预取开启代码和用于指示预取模式的预取模式代码,设置预取指令中的预取开启控制位为有效,并设置用于指示预取模式的预取模式控制位的模式值得到控制指令,以控制开启缓存器的预取功能并按模式值所指示的预取模式到数据存储器中预取数据的预取控制指令;
[0032]若所述预取代码包括用于指示开启预取功能的预取开启代码和用于指示预取的数据量大小的预取数代码,设置预取指令中的预取开启控制位为有效,并设置用于指示预取的数据量大小的预取数控制位的数量值得到控制指令,以控制开启缓存器的预取功能并按数量值所指示的数量到数据存储器中预取数据。
[0033]结合第一方面的第一种可能的实现方式,或者第一方面的第二种可能的实现方式,或者第一方面的第三种可能的实现方式,或者第一方面的第四种可能的实现方式,在第五种可能的实现方式中,所述识别确定出所述可执行程序中密集访存的代码区间,包括:
[0034]查找预编译过程中所述可执行程序中预置的预取关键字;
[0035]根据预取关键字标记出候选密集访存的代码区间;
[0036]判断所述被标记为候选密集访存的代码区间是否满足预取条件;
[0037]若满足,则将所述被标记为候选密集访存的代码区间确定为所述可执行程序的密集访存的代码区间。
[0038]结合第一方面的第一种可能的实现方式,或者第一方面的第二种可能的实现方式,或者第一方面的第三种可能的实现方式,或者第一方面的第四种可能的实现方式,或者第一方面的第五种可能的实现方式,在第六种可能的实现方式中,所述识别确定出所述可执行程序中密集访存的代码区间,包括:
[0039]识别确定出所述可执行程序中为循环体的代码区间;
[0040]将所述可执行程序中被识别为循环体的代码区间标记为候选密集访存的代码区间;
[0041]判断所述被标记为候选密集访存的代码区间是否满足预取条件;
[0042]若满足,则将所述被标记为候选密集访存的代码区间确定为所述可执行程序中密集访存的代码区间。
[0043]结合第一方面的第一种可能的实现方式,或者第一方面的第二种可能的实现方式,或者第一方面的第三种可能的实现方式,或者第一方面的第四种可能的实现方式,或者第一方面的第五种可能的实现方式,在第七种可能的实现方式中,所述识别确定出所述可执行程序中密集访存的代码区间,包括:
[0044]根据所述可执行程序被预编译过程中的数据访问规律,将以呈线性规律变化的方式密集访问同一存储单元的代码区间或者以呈线性规律变化的方式访问存储单元的代码区间标记为候选密集访存的代码区间;[0045]判断所述被标记为候选密集访存的代码区间是否满足预取条件;
[0046]若满足,则将所述被标记为候选密集访存的代码区间确定为所述可执行程序中密集访存的代码区间。
[0047]结合第一方面的第一种可能的实现方式,或者第一方面的第二种可能的实现方式,或者第一方面的第三种可能的实现方式,或者第一方面的第四种可能的实现方式,或者第一方面的第五种可能的实现方式,或者第一方面的第六种可能的实现方式,或者第一方面的第七种可能的实现方式,在第八种可能的实现方式中,所述在所述密集访存的代码区间插入预取代码,包括:
[0048]在所述密集访存的代码区间的代码入口处插入预取开启代码;
[0049]在所述密集访存的代码区间的代码出口处插入预取关闭代码。
[0050]结合第一方面的第八种可能的实现方式,在第九种可能的实现方式中,所述在所述密集访存的代码区间插入预取代码,还包括:
[0051]根据密集访存的代码区间中代码访问的数据存储地址中数据流的特征,在所述密集访存的代码区间的代码入口处插入预取模式代码;和/或
[0052]根据密集访存的代码区间中代码访问的数据存储地址中数据流的特征,在所述密集访存的代码区间的代码入口处插入用于指示预取的数据量大小的预取数代码。
[0053]结合第一方面,或者第一方面的第一种可能的实现方式,或者第一方面的第二种可能的实现方式,或者第一方面的第三种可能的实现方式,或者第一方面的第四种可能的实现方式,或者第一方面的第五种可能的实现方式,或者第一方面的第六种可能的实现方式,或者第一方面的第七种可能的实现方式,或者第一方面的第八种可能的实现方式,或者第一方面的第九种可能的实现方式,在第十种可能的实现方式中,还包括:将从数据存储器中预取的数据缓存到缓存器中或者缓存到预取缓冲器中;
[0054]其中,将从数据存储器中预取的数据缓存到缓存器中时,若缓存器的存储单元分配超过预设时间值、或者缓存器正在存入其他数据,则将所述数据存储器中预取的数据缓存到预取缓冲器中。
[0055]结合第一方面,或者第一方面的第一种可能的实现方式,或者第一方面的第二种可能的实现方式,或者第一方面的第三种可能的实现方式,或者第一方面的第四种可能的实现方式,或者第一方面的第五种可能的实现方式,或者第一方面的第六种可能的实现方式,或者第一方面的第七种可能的实现方式,或者第一方面的第八种可能的实现方式,或者第一方面的第九种可能的实现方式,或者第一方面的第十种可能的实现方式,在第十一种可能的实现方式中,还包括:
[0056]根据对缓存器中缓存的数据的命中率,获取缓存器中命中率超过预设阈值的数据或者连续存储的数组数据;
[0057]将获取的数据或者连续存储的数组数据存储到一级缓存器中。
[0058]第三方面,本发明实施例还提供了一种数据预取控制装置,包括:
[0059]程序运行模块,用于运行可执行程序;
[0060]预取控制模块,用于当运行到插入在所述可执行程序中的预取代码时,根据该预取代码的指示对到数据存储器中预取数据进行控制;
[0061]其中,所述预取控制模块具体包括:[0062]预取开启控制单元,用于若所述预取代码包括用于指示开启预取功能的预取开启代码,控制开启预取功能到数据存储器中预取数据;
[0063]预取关闭控制单元,用于若所述预取代码包括用于指示关闭预取功能的预取关闭代码,控制关闭预取功能停止到数据存储器中预取数据。
[0064]结合第三方面,在第一种可能的实现方式中,还包括:
[0065]区间识别模块,用于在所述可执行程序的预编译过程中,识别确定出所述可执行程序中密集访存的代码区间;
[0066]代码插入模块,用于在所述密集访存的代码区间插入预取代码。
[0067]结合第三方面,或者第三方面的第一种可能的实现方式,在第二种可能的实现方式中,所述装置还包括:
[0068]状态存储模块,用于在检测到从所述可执行程序切换至其他程序时,存储当前所述可执行程序所处的预取状态,所述预取状态包括预取已开启的状态和预取已关闭的状态;
[0069]查找模块,用于在检测到由所述其他程序切换回所述可执行程序时,查找存储的所述可执行程序所处的预取状态;
[0070]所述预取控制模块还用于若预取状态包括预取已开启的状态,控制开启预取功能到数据存储器中预取数据;若预取状态包括预取已关闭的状态,控制关闭预取功能停止到数据存储器中预取数据。
[0071]结合第三方面,或者第三方面的第一种可能的实现方式,或者第三方面的第二种可能的实现方式,在第三种可能的实现方式中,
[0072]所述预取开启控制单元,具体用于若所述预取代码包括用于指示开启预取功能的预取开启代码,设置预取指令中的预取开启控制位为有效,控制开启缓存器的预取功能以到数据存储器中预取数据;
[0073]所述预取关闭单元,具体用于若所述预取代码包括用于指示关闭预取功能的预取关闭代码,设置预取指令中的预取结束控制位为有效,控制关闭缓存器的预取功能以停止到数据存储器中预取数据。
[0074]结合第三方面,或者第三方面的第一种可能的实现方式,或者第三方面的第二种可能的实现方式,或者第三方面的第三种可能的实现方式,在第四种可能的实现方式中,所述预取控制模块还包括:
[0075]模式控制单元,用于若所述预取代码包括用于指示开启预取功能的预取开启代码和用于指示预取模式的预取模式代码,设置预取指令中的预取开启控制位为有效,并设置用于指示预取模式的预取模式控制位的模式值,控制开启缓存器的预取功能并按模式值所指示的预取模式到数据存储器中预取数据的预取控制指令;
[0076]预取数控制单元,用于若所述预取代码包括用于指示开启预取功能的预取开启代码和用于指示预取的数据量大小的预取数代码,设置预取指令中的预取开启控制位为有效,并设置用于指示预取的数据量大小的预取数控制位的数量值,控制开启缓存器的预取功能并按数量值所指示的数量到数据存储器中预取数据。
[0077]结合第三方面,或者第三方面的第一种可能的实现方式,或者第三方面的第二种可能的实现方式,或者第三方面的第三种可能的实现方式,或者第三方面的第四种可能的实现方式,在第五种可能的实现方式中,所述区间识别模块包括:
[0078]第一标记单元,用于查找预编译过程中所述可执行程序中预置的预取关键字;并根据预取关键字标记出候选密集访存的代码区间;
[0079]第一判断单元,用于判断所述被标记为候选密集访存的代码区间是否满足预取条件;
[0080]第一确定单元,用于在所述第一判断单元的判断结果为满足时,将所述被标记为候选密集访存的代码区间确定为所述可执行程序的密集访存的代码区间。
[0081]结合第三方面,或者第三方面的第一种可能的实现方式,或者第三方面的第二种可能的实现方式,或者第三方面的第三种可能的实现方式,或者第三方面的第四种可能的实现方式,在第六种可能的实现方式中,所述区间识别模块包括:
[0082]第二标记单元,用于识别确定出所述可执行程序中为循环体的代码区间;并将所述可执行程序中被识别为循环体的代码区间标记为候选密集访存的代码区间;
[0083]第二判断单元,用于判断所述被标记为候选密集访存的代码区间是否满足预取条件;
[0084]第二确定单元,用于在所述第二判断单元的判断结果为满足时,将所述被标记为候选密集访存的代码区间确定为所述可执行程序中密集访存的代码区间。
[0085]结合第三方面,或者第三方面的第一种可能的实现方式,或者第三方面的第二种可能的实现方式,或者第三方面的第三种可能的实现方式,或者第三方面的第四种可能的实现方式,在第七种可能的实现方式中,所述区间识别模块包括:
[0086]第三标记单元,用于根据所述可执行程序被预编译过程中的数据访问规律,将以呈线性规律变化的方式密集访问同一存储单元的代码区间或者以呈线性规律变化的方式访问存储单元的代码区间标记为候选密集访存的代码区间;
[0087]第三判断单元,用于判断所述被标记为候选密集访存的代码区间是否满足预取条件;
[0088]第三确定单元,用于在所述第三判断单元的判断结果为满足时,将所述被标记为候选密集访存的代码区间确定为所述可执行程序中密集访存的代码区间。
[0089]结合第三方面的第三种可能的实现方式,或者第三方面的第四种可能的实现方式,或者第三方面的第五种可能的实现方式,或者第三方面的第六种可能的实现方式,或者第三方面的第七种可能的实现方式,在第八种可能的实现方式中,所述代码插入模块包括:
[0090]第一插入单元,用于在所述密集访存的代码区间的代码入口处插入预取开启代码;
[0091]第二插入单元,用于在所述密集访存的代码区间的代码出口处插入预取关闭代码。
[0092]结合第三方面的第八种可能的实现方式,在第九种可能的实现方式中,所述代码插入模块还包括:
[0093]第三插入单元,用于在所述密集访存的代码区间的代码入口处插入预取模式代码;或
[0094]第四插入单元,用于在所述密集访存的代码区间的代码入口处插入预取数代码。[0095]结合第三方面的第一种可能的实现方式,或者第三方面的第二种可能的实现方式,或者第三方面的第三种可能的实现方式,或者第三方面的第四种可能的实现方式,或者第三方面的第五种可能的实现方式,或者第三方面的第六种可能的实现方式,或者第三方面的第七种可能的实现方式,或者第三方面的第八种可能的实现方式,或者第三方面的第九种可能的实现方式,在第十种可能的实现方式中,还包括:
[0096]存储模块,用于将从数据存储器中预取的数据缓存到缓存器中或者缓存到预取缓冲器中;
[0097]转存模块,用于将从数据存储器中预取的数据缓存到缓存器中时,若缓存器的存储单元分配超过预设时间值、或者缓存器正在存入其他数据,则将所述数据存储器中预取的数据缓存到预取缓冲器中。
[0098]结合第三方面的第一种可能的实现方式,或者第三方面的第二种可能的实现方式,或者第三方面的第三种可能的实现方式,或者第三方面的第四种可能的实现方式,或者第三方面的第五种可能的实现方式,或者第三方面的第六种可能的实现方式,或者第三方面的第七种可能的实现方式,或者第三方面的第八种可能的实现方式,或者第三方面的第九种可能的实现方式,或者第三方面的第十种可能的实现方式,在第十一种可能的实现方式中,还包括:
[0099]获取模块,用于根据对缓存器中缓存的数据的命中率,获取缓存器中命中率超过预设阈值的数据或者连续存储的数组数据;
[0100]提取模块,用于将获取的数据或者连续存储的数组数据存储到一级缓存器中。
[0101]第四方面,本发明实施例还提供了一种计算机存储介质,所述计算机存储介质可存储有程序,该程序执行时包括上述第一方面所述的方法。
[0102]第五方面,本发明实施例还提供了一种计算机系统,包括:
[0103]总线;
[0104]与所述总线相连的处理器;
[0105]与所述总线相连的存储器;
[0106]其中,所述处理器通过所述总线,调用所述存储器中存储的代码,以用于:
[0107]运行可执行程序;
[0108]当运行到插入在所述可执行程序中的预取代码时,根据该预取代码的指示对到数据存储器中预取数据进行控制;
[0109]其中,所述根据该预取代码的指示对到数据存储器中预取数据进行控制包括:
[0110]若所述预取代码包括用于指示开启预取功能的预取开启代码,控制开启预取功能到数据存储器中预取数据;若所述预取代码包括用于指示关闭预取功能的预取关闭代码,控制关闭预取功能停止到数据存储器中预取数据。
[0111]结合第五方面,在第一种可能的实现方式中,所述处理器在执行所述运行可执行程序之前,还用于:
[0112]在所述可执行程序的预编译过程中,识别确定出所述可执行程序中密集访存的代码区间,并在所述密集访存的代码区间插入预取代码。
[0113]结合第五方面,或者第五方面的第一种可能的实现方式,在第二种可能的实现方式中,所述处理器还用于:[0114]检测到从所述可执行程序切换至其他程序时,存储当前所述可执行程序所处的预取状态,所述预取状态包括预取已开启的状态和预取已关闭的状态;
[0115]检测到由所述其他程序切换回所述可执行程序时,查找存储的所述可执行程序所处的预取状态;
[0116]若预取状态包括预取已开启的状态,控制开启预取功能到数据存储器中预取数据;若预取状态包括预取已关闭的状态,控制关闭预取功能停止到数据存储器中预取数据。
[0117]结合第五方面,或者第五方面的第一种可能的实现方式,或者第五方面的第二种可能的实现方式,在第三种可能的实现方式中,所述处理器在执行所述若所述预取代码包括用于指示开启预取功能的预取开启代码,控制开启预取功能到数据存储器中预取数据时,具体用于:
[0118]若所述预取代码包括用于指示开启预取功能的预取开启代码,设置预取指令中的预取开启控制位为有效,控制开启缓存器的预取功能以到数据存储器中预取数据;
[0119]所述处理器在执行所述若所述预取代码包括用于指示关闭预取功能的预取关闭代码,控制关闭预取功能停止到数据存储器中预取数据,具体用于:
[0120]若所述预取代码包括用于指示关闭预取功能的预取关闭代码,设置预取指令中的预取结束控制位为有效,控制关闭缓存器的预取功能以停止到数据存储器中预取数据。
[0121]结合第五方面,或者第五方面的第一种可能的实现方式,或者第五方面的第二种可能的实现方式,或者第五方面的第三种可能的实现方式,在第四种可能的实现方式中,所述处理器在执行所述根据该预取代码的指示对到数据存储器中预取数据进行控制时,还用于:
[0122]若所述预取代码包括用于指示开启预取功能的预取开启代码和用于指示预取模式的预取模式代码,设置预取指令中的预取开启控制位为有效,并设置用于指示预取模式的预取模式控制位的模式值,控制开启缓存器的预取功能并按模式值所指示的预取模式到数据存储器中预取数据的预取控制指令;
[0123]若所述预取代码包括用于指示开启预取功能的预取开启代码和用于指示预取的数据量大小的预取数代码,设置预取指令中的预取开启控制位为有效,并设置用于指示预取的数据量大小的预取数控制位的数量值,控制开启缓存器的预取功能并按数量值所指示的数量到数据存储器中预取数据。
[0124]结合第五方面的第一种可能的实现方式,或者第五方面的第二种可能的实现方式,或者第五方面的第三种可能的实现方式,在第五种可能的实现方式中,所述处理器在执行所述识别确定出所述可执行程序中密集访存的代码区间,具体用于:
[0125]查找预编译过程中所述可执行程序中预置的预取关键字;
[0126]根据预取关键字标记出候选密集访存的代码区间;
[0127]判断所述被标记为候选密集访存的代码区间是否满足预取条件;
[0128]若满足,则将所述被标记为候选密集访存的代码区间确定为所述可执行程序的密集访存的代码区间。
[0129]结合第五方面的第一种可能的实现方式,或者第五方面的第二种可能的实现方式,或者第五方面的第三种可能的实现方式,在第六种可能的实现方式中,所述处理器在执行所述识别确定出所述可执行程序中密集访存的代码区间,具体用于:[0130]识别确定出所述可执行程序中为循环体的代码区间;
[0131]将所述可执行程序中被识别为循环体的代码区间标记为候选密集访存的代码区间;
[0132]判断所述被标记为候选密集访存的代码区间是否满足预取条件;
[0133]若满足,则将所述被标记为候选密集访存的代码区间确定为所述可执行程序中密集访存的代码区间。
[0134]结合第五方面的第四种可能的实现方式,或者第五方面的第五种可能的实现方式,或者第五方面的第六种可能的实现方式,在第七种可能的实现方式中,所述处理器在执行所述识别确定出所述可执行程序中密集访存的代码区间,具体用于:
[0135]根据所述可执行程序被预编译过程中的数据访问规律,将以呈线性规律变化的方式密集访问同一存储单元的代码区间或者以呈线性规律变化的方式访问存储单元的代码区间标记为候选密集访存的代码区间;
[0136]判断所述被标记为候选密集访存的代码区间是否满足预取条件;
[0137]若满足,则将所述被标记为候选密集访存的代码区间确定为所述可执行程序中密集访存的代码区间。
[0138]结合第五方面的第一种可能的实现方式,或者第五方面的第二种可能的实现方式,或者第五方面的第三种可能的实现方式,或者第五方面的第四种可能的实现方式,或者第五方面的第五种可能的实现方式,或者第五方面的第六种可能的实现方式,或者第五方面的第七种可能的实现方式,在第八种可能的实现方式中,所述处理器执行所述在所述密集访存的代码区间插入预取代码时,所述处理器执行所述在所述密集访存的代码区间插入预取代码时,具体用于:
[0139]在所述密集访存的代码区间的代码入口处插入预取开启代码;
[0140]在所述密集访存的代码区间的代码出口处插入预取关闭代码。
[0141]结合第五方面的第八种可能的实现方式,在第九种可能的实现方式中,所述处理器执行所述在所述密集访存的代码区间插入预取代码时,具体还用于:
[0142]在所述密集访存的代码区间的代码入口处插入预取模式代码;
[0143]在所述密集访存的代码区间的代码入口处插入预取数代码。
[0144]结合第五方面,或者第五方面的第一种可能的实现方式,或者第五方面的第三种可能的实现方式,或者第五方面的第四种可能的实现方式,或者第五方面的第五种可能的实现方式,或者第五方面的第六种可能的实现方式,或者第五方面的第五种可能的实现方式,或者第五方面的第八种可能的实现方式,或者第五方面的第九种可能的实现方式,在第十种可能的实现方式中,所述处理器还用于:
[0145]将从数据存储器中预取的数据缓存到缓存器中或者缓存到预取缓冲器中;
[0146]其中,将从数据存储器中预取的数据缓存到缓存器中时,若缓存器的存储单元分配超过预设时间值、或者缓存器正在存入其他数据,则将所述数据存储器中预取的数据缓存到预取缓冲器中。
[0147]结合第五方面,或者第五方面的第一种可能的实现方式,或者第五方面的第三种可能的实现方式,或者第五方面的第四种可能的实现方式,或者第五方面的第五种可能的实现方式,或者第五方面的第六种可能的实现方式,或者第五方面的第五种可能的实现方式,或者第五方面的第八种可能的实现方式,或者第五方面的第九种可能的实现方式,或者第五方面的第十种可能的实现方式,在第十一种可能的实现方式中,所述处理器还用于:
[0148]根据对缓存器中缓存的数据的命中率,获取缓存器中命中率超过预设阈值的数据或者连续存储的数组数据;
[0149]将获取的数据或者连续存储的数组数据存储到一级缓存器中。
[0150]第六方面,本发明实施例还提供了 一种数据预取系统,包括程序运行装置、可编程预取装置、缓存器以及数据存储器,其中,所述数据存储器中存储有可执行程序需要访问的数据;
[0151]所述程序运行装置用于运行所述可执行程序;
[0152]所述可编程预取装置用于当所述程序运行装置运行到插入在所述可执行程序中的预取代码时,根据该预取代码的指示控制所述缓存器到所述数据存储器中预取数据;
[0153]所述缓存器用于到所述数据存储器中预取数据;
[0154]其中,所述可编程预取装置具体用于:若所述预取代码包括用于指示开启预取功能的预取开启代码,控制开启所述缓存器的预取功能;若所述预取代码包括用于指示关闭预取功能的预取关闭代码,控制关闭所述缓存器的预取功能;
[0155]所述缓存器具体用于在预取功能被开启后到所述数据存储器中预取数据;以及,在预取功能被关闭后,停止到所述数据存储器中预取数据。
[0156]结合第六方面,在第一种可能的实现方式中,所述程序运行装置,还用于在所述可执行程序的预编译过程中,识别确定出所述可执行程序中密集访存的代码区间,并在所述密集访存的代码区间插入预取代码。
[0157]结合第六方面,或者第六方面的第一种可能的实现方式,在第二种可能的实现方式中,所述可编程预取装置,还用于检测到从所述可执行程序切换至其他程序时,存储当前所述可执行程序所处的预取状态,所述预取状态包括预取已开启的状态和预取已关闭的状态;检测到由所述其他程序切换回所述可执行程序时,查找存储的所述可执行程序所处的预取状态;若预取状态包括预取已开启的状态,控制开启预取功能到数据存储器中预取数据;若预取状态包括预取已关闭的状态,控制关闭预取功能停止到数据存储器中预取数据。
[0158]本发明实施例在可执行程序的运行过程中,当运行到预先插入在所述可执行程序中的包括用于指示预取开始和预取结束的预取代码时,相应地开启预取功能或者关闭预取功能,可以根据代码的实际数据访问需求对数据的预取操作进行控制,不必使一直处于数据预取开启状态,不仅降低了功耗,节约了成本,并且在一定程度上避免了预取误操作带来的缓存污染问题。
【专利附图】

【附图说明】
[0159]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0160]图1是本发明实施例的一种数据预取方法的流程示意图;
[0161]图2是本发明实施例的另一种数据预取方法的流程示意图;[0162]图3是本发明实施例的识别确定可执行程序中密集访存的代码区间的其中一种具体方法的流程示意图;
[0163]图4是本发明实施例的识别确定可执行程序中密集访存的代码区间的其中另一种具体方法的流程示意图;
[0164]图5是本发明实施例的识别确定可执行程序中密集访存的代码区间的其中又一种具体方法的流程示意图;
[0165]图6是本发明实施例的识别确定可执行程序中密集访存的代码区间的其中再一种具体方法的流程示意图;
[0166]图7是本发明实施例的又一种数据预取方法的流程示意图;
[0167]图8是本发明实施例的一种数据预取控制装置的结构示意图;
[0168]图9是本发明实施例的另一种数据预取控制装置的结构示意图;
[0169]图10是图9中的区间识别模块的结构示意图;
[0170]图11是图9中的另一种区间识别模块的结构示意图;
[0171]图12是图9中的再一种区间识别模块的结构示意图;
[0172]图13是本发明实施例的又一种数据预取装置的结构示意图;
[0173]图14是本发明实施例的一种处理器的结构示意图;
[0174]图15是本发明实施例一个计算机系统的结构示意图;
[0175]图16本发明实施例的另一个计算机系统的结构示意图;
[0176]图17是本发明实施例的一种数据预取系统的结构示意图。
【具体实施方式】
[0177]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0178]请参见图1,是本发明实施例的一种数据预取方法的流程示意图,本发明实施例所述的方法可应用于计算机系统中完成数据的预取操作,具体可以由一个内置有缓存器Cache的处理器执行,本发明实施例的所述方法包括:
[0179]SlOl:运行可执行程序。
[0180]可执行程序包括各类计算机应用程序,处理器在加载后运行所述可执行程序的过程中,在运行到所述可执行程序的各代码时,会生成相应的计算机指令以控制计算机的其他模块,例如发出访问指令访问内存或者硬盘中的数据,发出显示指令在计算机显示器上显示相应内容,此为现有技术。
[0181]S102:当运行到插入在所述可执行程序中的预取代码时,根据该预取代码的指示对到数据存储器中预取数据进行控制;
[0182]其中,所述根据该预取代码的指示对到数据存储器中预取数据进行控制包括:
[0183]若所述预取代码包括用于指示开启预取功能的预取开启代码,控制开启预取功能到数据存储器中预取数据;若所述预取代码包括用于指示关闭预取功能的预取关闭代码,控制关闭预取功能停止到数据存储器中预取数据。[0184]预取功能主要是指:可执行程序被运行的过程中在某段代码需要访问内存等数据存储器中的数据之前,能够将所需指令或数据提前从内存或者硬盘等存储数据的存储器中提取并存储到内置的缓存器Cache中。
[0185]所述预取开启代码、预取关闭代码可以是在所述可执行程序的预编译阶段,根据对程序代码所要访问的数据的分析结果,识别出需要预取数据的代码区间后,将相应的预取开启代码和预取关闭代码插入到对应的代码区间,在该代码区间的开始处插入预取开启代码Prefetch, on,在该代码区间的结束位置插入预取关闭代码Prefetch, off,当然还可以在该代码区间的开始处插入用于指示预取模式的预取模式代码。
[0186]在包括预取代码插入操作的预编译阶段完成后,用户可以根据需要在任何时候运行该可执行程序。处理器在加载后运行该可执行程序的过程中,当运行到插入其中的预取开启代码、预取关闭代码等预取代码时,会开启预取功能到内存、硬盘等存储数据的存储器中预取数据;或者关闭预取功能停止预取数据。
[0187]在开启预取功能后,根据处理器当前运行所述可执行程序时发出的数据访问指令,到内存或者直接到硬盘中预取数据。而当关闭预取功能后,则停止到内存或者硬盘中预取数据。
[0188]预取到的数据可以直接存储到cache中,也可以先缓存到一个预置的预取缓冲器prefetch buffer中,预取缓冲器为一个缓冲装置,用于在需要时缓冲预取到的数据。具体可以通过预取控制寄存器配置预取缓存配置信息对预取数据的存储方式进行控制。因此,在所述S102中预取到数据后,本发明实施例所述的方法缓存预取到的数据的步骤可以包括:将从数据存储器中预取到的数据缓存到缓存器中或者缓存到预取缓冲器中;其中,当根据预置的预取缓存配置信息将从数据存储器中预取到的数据缓存到缓存器中时,若缓存器的存储单元分配超过预设时间值、或者缓存器正在存入其他数据时,将所述数据存储器中预取到的数据缓存到预取缓冲器中。
[0189]具体的,如果配置的缓存目的地址为cache,则将预取到的数据直接缓存到cache中,而如果配置的缓存目的地址为预取缓冲器prefetch buffer,则将预取到的数据直接缓存到prefetch buffer中。另外,如果配置的缓存目的地址为cache,但预取到的数据在遇到缓存冲突时,例如遇到等待缓存器的存储单元cache line (缓存器的存储单元分配超过预设时间值)的分配或prefetch逻辑正在缓存另一条数据到cache中时,则将数据缓存到预取缓冲器prefetch buffer中。
[0190]进一步的,对预取的数据进行缓存时,还可以通过设置多级缓存来进一步提高数据的访问效率。例如设置一级缓存器和二级缓存器的两级高速缓存,根据对缓存器中缓存的数据的命中率,获取缓存器中命中率超过预设阈值的数据或者连续存储的数组数据;将获取的数据或者连续存储的数组数据存储到一级缓存器中。所述预设阈值可以是一个值例如80%或90%等值,也可以为一个范围,阈值是可以根据时间应用或经验值灵活设置。
[0191]二级缓存器具有包容性,即一级缓存器中的数据都出现在二级缓存器中,以便于I/O和cache之间内容一致性。并且,由于一级缓存器的数据量较小,且为常被访问的数据,可以使得可执行程序需要访问数据时,首先到一级缓存器中访问数据,可以较为有效地提高访问效率。
[0192]本发明实施例在可执行程序的运行过程中,当运行到预先插入在所述可执行程序中的包括用于指示预取开始和预取结束的预取代码时,相应地开启预取功能或者关闭预取功能,可以根据代码的实际数据访问需求对数据的预取操作进行控制,不必使一直处于数据预取开启状态,不仅降低了功耗,节约了成本,并且在一定程度上避免了预取误操作带来的缓存污染问题。
[0193]再请参见图2,是本发明实施例的另一种数据预取方法的流程示意图,与上述实施例相同,本发明实施例所述的方法可应用于计算机系统中完成数据的预取操作,具体可以由一个内置缓存器Cache的处理器执行,本发明实施例的所述方法包括:
[0194]S201:在可执行程序的预编译过程中,识别确定出所述可执行程序中密集访存的代码区间,并在所述密集访存的代码区间插入预取代码。
[0195]所述预取代码包括用于指示开启预取功能的预取开启代码和用于指示关闭预取功能的预取关闭代码,还可以包括其他形式的预取代码,如:用于指示预取模式的预取模式代码,或者用于指示预取的数据量大小的预取数代码等。
[0196]所述密集访存的代码区间可以是指:数据读取和存储操作(访存操作)相对于所有操作所占比例相对较大的代码区间,比如该代码区间访存操作占整个操作比例达到50%以上。
[0197]在本发明实施例中,开启预取功能的代码被标记为prefetch, on,关闭预取功能的代码被标记为prefetch, off,预取模式的代码被标记为set.prefetch, mode i:i值对应不同的数据预取模式,查询预取模式的代码被标记为get.prefetch, mode。
[0198]所述的识别以及插入过程是在所述可执行程序预编译阶段进行的,可以通过PPU(Programmable Prefeth Unit,可编程预取单元)等数据预取控制装置进行识别和插入操作,也可以采用能够自动识别并插入代码的编译器。
[0199]当然,所述可执行程序的预编译阶段还可以包括现有的其他步骤,在此不赘述。所述可执行程序预编译通过后,即可以根据需要加载到处理器中以实现相应的功能应用,即执行S202。
[0200]S202:运行可执行程序。
[0201]S203:当运行到插入在所述可执行程序中的预取代码时,根据该预取代码的指示对到数据存储器中预取数据进行控制;
[0202]其中,所述根据该预取代码的指示对到数据存储器中预取数据进行控制包括:
[0203]若所述预取代码包括用于指示开启预取功能的预取开启代码,控制开启预取功能到数据存储器中预取数据;若所述预取代码包括用于指示关闭预取功能的预取关闭代码,控制关闭预取功能停止到数据存储器中预取数据
[0204]具体的,本发明实施例的所述S202具体可以包括以下步骤实现:
[0205]若所述预取代码包括用于指示开启预取功能的预取开启代码,设置预取指令中的预取开启控制位为有效得到控制指令,以控制开启缓存器的预取功能以到数据存储器中预取数据。
[0206]若所述预取代码包括用于指示关闭预取功能的预取关闭代码,设置预取指令中的预取结束控制位为有效得到控制指令,以控制关闭缓存器的预取功能以停止到数据存储器中预取数据。
[0207]若所述预取代码包括用于指示开启预取功能的预取开启代码和用于指示预取模式的预取模式代码,设置预取指令中的预取开启控制位为有效,并设置用于指示预取模式的预取模式控制位的模式值得到控制指令,以控制开启缓存器的预取功能并按模式值所指示的预取模式到数据存储器中预取数据的预取控制指令。
[0208]若所述预取代码包括用于指示开启预取功能的预取开启代码和用于指示预取的数据量大小的预取数代码,设置预取指令中的预取开启控制位为有效,并设置用于指示预取的数据量大小的预取数控制位的数量值得到控制指令,以控制开启缓存器的预取功能并按数量值所指示的数量到数据存储器中预取数据。
[0209]所述预取指令可以采用下述表1的内容表示,对所述预取指令赋值后得到相应的预取命令。
[0210]表1
[0211]
【权利要求】
1.一种数据预取方法,其特征在于,包括: 运行可执行程序; 当运行到插入在所述可执行程序中的预取代码时,根据该预取代码的指示对到数据存储器中预取数据进行控制; 其中,所述根据该预取代码的指示对到数据存储器中预取数据进行控制包括: 若所述预取代码包括用于指示开启预取功能的预取开启代码,控制开启预取功能到数据存储器中预取数据;若所述预取代码包括用于指示关闭预取功能的预取关闭代码,控制关闭预取功能停止到数据存储器中预取数据。
2.如权利要求1所述的方法,其特征在于,所述运行可执行程序之前,还包括: 在所述可执行程序的预编译过程中,识别确定出所述可执行程序中密集访存的代码区间,并在所述密集访存的代码区间插入所述预取代码。
3.如权利要求1或2所述的方法,其特征在于,还包括: 检测到从所述可执行程序切换至其他程序时,存储当前所述可执行程序所处的预取状态,所述预取状态包括预取已开启的状态和预取已关闭的状态; 检测到由所述其他程序切换回所述可执行程序时,查找存储的所述可执行程序所处的预取状态; 若预取状态包括预取已开启的状态,控制开启预取功能到数据存储器中预取数据;若预取状态包括预取已关闭的状态,控制关闭预取功能停止到数据存储器中预取数据。
4.如权利要求1-3任一项所述的方法,其特征在于, 所述若所述预取代码包括用于指示开启预取功能的预取开启代码,控制开启预取功能到数据存储器中预取数据,包括: 若所述预取代码包括用于指示开启预取功能的预取开启代码,设置预取指令中的预取开启控制位为有效得到控制指令,以控制开启缓存器的预取功能以到数据存储器中预取数据; 所述若所述预取代码包括用于指示关闭预取功能的预取关闭代码,控制关闭预取功能停止到数据存储器中预取数据,包括: 若所述预取代码包括用于指示关闭预取功能的预取关闭代码,设置预取指令中的预取结束控制位为有效得到控制指令,以控制关闭缓存器的预取功能以停止到数据存储器中预取数据。
5.如权利要求1-4任一项所述的方法,其特征在于,所述根据该预取代码的指示对到数据存储器中预取数据进行控制,还包括: 若所述预取代码包括用于指示开启预取功能的预取开启代码和用于指示预取模式的预取模式代码,设置预取指令中的预取开启控制位为有效,并设置用于指示预取模式的预取模式控制位的模式值 得到控制指令,以控制开启缓存器的预取功能并按模式值所指示的预取模式到数据存储器中预取数据的预取控制指令; 若所述预取代码包括用于指 示开启预取功能的预取开启代码和用于指示预取的数据量大小的预取数代码,设置预取指令中的预取开启控制位为有效,并设置用于指示预取的数据量大小的预取数控制位的数量值得到控制指令,以控制开启缓存器的预取功能并按数量值所指示的数量到数据存储器中预取数据。
6.如权利要求2-5任一项所述的方法,其特征在于,所述识别确定出所述可执行程序中密集访存的代码区间,包括: 查找预编译过程中所述可执行程序中预置的预取关键字; 根据预取关键字标记出候选密集访存的代码区间; 判断所述被标记为候选密集访存的代码区间是否满足预取条件; 若满足,则将所述被标记为候选密集访存的代码区间确定为所述可执行程序的密集访存的代码区间。
7.如权利要求2-6任一项所述的方法,其特征在于,所述识别确定出所述可执行程序中密集访存的代码区间,包括: 识别确定出所述可执行程序中为循环体的代码区间; 将所述可执行程序中被识别为循环体的代码区间标记为候选密集访存的代码区间; 判断所述被标记为候选密集访存的代码区间是否满足预取条件; 若满足,则将所述被标记为候选密集访存的代码区间确定为所述可执行程序中密集访存的代码区间。
8.如权利要求2-6任一项所述的方法,其特征在于,所述识别确定出所述可执行程序中密集访存的代码区间,包括: 根据所述可执行程序被预编译过程中的数据访问规律,将以呈线性规律变化的方式密集访问同一存储单元的代码区间或者以呈线性规律变化的方式访问存储单元的代码区间标记为候选密集访存的代码区间; 判断所述被标记为候选密集访存的代码区间是否满足预取条件; 若满足,则将所述被标记为候选密集访存的代码区间确定为所述可执行程序中密集访存的代码区间。
9.如权利要求2-8任一项所述的方法,其特征在于,所述在所述密集访存的代码区间插入所述预取代码,包括: 在所述密集访存的代码区间的代码入口处插入预取开启代码; 在所述密集访存的代码区间的代码出口处插入预取关闭代码。
10.如权利要求9所述的方法,其特征在于,所述在所述密集访存的代码区间插入所述预取代码,还包括: 在所述密集访存的代码区间的代码入口处插入预取模式代码;或 在所述密集访存的代码区间的代码入口处插入预取数代码。
11.如权利要求1-10任一项所述的方法,其特征在于,还包括: 将从数据存储器中预取的数据缓存到缓存器中或者缓存到预取缓冲器中; 其中,将从数据存储器中预取的数据缓存到缓存器中时,若缓存器的存储单元分配超过预设时间值、或者缓存器正在存入其他数据,则将所述数据存储器中预取的数据缓存到预取缓冲器中。
12.如权利要求1-11任一项所述的方法,其特征在于,还包括: 根据对缓存器中缓存的数据的命中率,获取缓存器中命中率超过预设阈值的数据或者连续存储的数组数据; 将获取的数据或者连续存储的数组数据存储到一级缓存器中。
13.一种数据预取控制装置,其特征在于,包括: 程序运行模块,用于运行可执行程序; 预取控制模块,用于当运行到插入在所述可执行程序中的预取代码时,根据该预取代码的指示对到数据存储器中预取数据进行控制; 其中,所述预取控制模块具体包括: 预取开启控制单元,用于若所述预取代码包括用于指示开启预取功能的预取开启代码,控制开启预取功能到数据存储器中预取数据; 预取关闭控制单元,用于若所述预取代码包括用于指示关闭预取功能的预取关闭代码,控制关闭预取功能停止到数据存储器中预取数据。
14.如权利要求13所述的装置,其特征在于,还包括: 区间识别模块,用于在所述可执行程序的预编译过程中,识别确定出所述可执行程序中密集访存的代码区间; 代码插入模块,用于在所述密集访存的代码区间插入所述预取代码。
15.如权利要求13或14所述的装置,其特征在于,还包括: 状态存储模块,用于在检测到从所述可执行程序切换至其他程序时,存储当前所述可执行程序所处的预取状态,所述预取状态包括预取已开启的状态和预取已关闭的状态;查找模块,用于在检测到由所述其他程序切换回所述可执行程序时,查找存储的所述可执行程序所处的预取状态; 所述预取控制模块还用于若预取状态包括预取已开启的状态,控制开启预取功能到数据存储器中预取数据;若预取状态包括预取已关闭的状态,控制关闭预取功能停止到数据存储器中预取数据。
16.如权利要求13至15任一项所述的装置,其特征在于, 所述预取开启控制单元,具体用于若所述预取代码包括用于指示开启预取功能的预取开启代码,设置预取指令中的预取开启控制位为有效得到控制指令,以控制开启缓存器的预取功能以到数据存储器中预取数据; 所述预取关闭单元,具体用于若所述预取代码包括用于指示关闭预取功能的预取关闭代码,设置预取指令中的预取结束控制位为有效得到控制指令,以控制关闭缓存器的预取功能以停止到数据存储器中预取数据。
17.如权利要求13-16任一项所述的装置,其特征在于,所述预取控制模块还包括: 模式控制单元,用于若所述预取代码包括用于指示开启预取功能的预取开启代码和用于指示预取模式的预取模式代码,设置预取指令中的预取开启控制位为有效,并设置用于指示预取模式的预取模式控制位的模式值得到控制指令,以控制开启缓存器的预取功能并按模式值所指示的预取模式到数据存储器中预取数据的预取控制指令; 预取数控制单元,用于若所述预取代码包括用于指示开启预取功能的预取开启代码和用于指示预取的数据量大小的预取数代码,设置预取指令中的预取开启控制位为有效,并设置用于指示预取的数据量大小的预取数控制位的数量值得到控制指令,以控制开启缓存器的预取功能并按数量值所指示的数量到数据存储器中预取数据。
18.如权利要求14至 17任一项所述的装置,其特征在于,所述区间识别模块包括: 第一标记单元,用于查找预编译过程中所述可执行程序中预置的预取关键字;并根据预取关键字标记出候选密集访存的代码区间; 第一判断单元,用于判断所述被标记为候选密集访存的代码区间是否满足预取条件;第一确定单元,用于在所述第一判断单元的判断结果为满足时,将所述被标记为候选密集访存的代码区间确定为所述可执行程序的密集访存的代码区间。
19.如权利要求14至17任一项所述的装置,其特征在于,所述区间识别模块包括: 第二标记单元,用于识别确定出所述可执行程序中为循环体的代码区间;并将所述可执行程序中被识别为循环体的代码区间标记为候选密集访存的代码区间; 第二判断单元,用于判断所述被标记为候选密集访存的代码区间是否满足预取条件;第二确定单元,用于在所述第二判断单元的判断结果为满足时,将所述被标记为候选密集访存的代码区间确定为所述可执行程序中密集访存的代码区间。
20.如权利要求14至17任一项所述的装置,其特征在于,所述区间识别模块包括: 第三标记单元,用于根据所述可执行程序被预编译过程中的数据访问规律,将以呈线性规律变化的方式密集访问同一存储单元的代码区间或者以呈线性规律变化的方式访问存储单元的代码区间标记为候选密集访存的代码区间; 第三判断单元,用于判断所述被标记为候选密集访存的代码区间是否满足预取条件;第三确定单元,用于在所述第三判断单元的判断结果为满足时,将所述被标记为候选密集访存的代码区间确定为所述可执行程序中密集访存的代码区间。
21.如权利要求16至20任一项所述的装置,其特征在于,所述代码插入模块包括: 第一插入单元,用于在所述密集访存的代码区间的代码入口处插入预取开启代码; 第二插入单元,用于在所述密集访存的代码区间的代码出口处插入预取关闭代码。
22.如权利要求21所述的装置,其特征在于,所述代码插入模块还包括: 第三插入单元,用于在所述密集访存的代码区间的代码入口处插入预取模式代码;或 第四插入单元,用于在所述密集访存的代码区间的代码入口处插入预取数代码。
23.如权利要求14-22任一项所述的装置,其特征在于,还包括:存储模块,用于将从数据存储器中预取的数据缓存到缓存器中或者缓存到预取缓冲器中; 转存模块,用于将从数据存储器中预取的数据缓存到缓存器中时,若缓存器的存储单元分配超过预设时间值、或者缓存器正在存入其他数据,则将所述数据存储器中预取的数据缓存到预取缓冲器中。
24.如权利要求14-23任一项所述的装置,其特征在于,还包括: 获取模块,用于根据对缓存器中缓存的数据的命中率,获取缓存器中命中率超过预设阈值的数据或者连续存储的数组数据; 提取模块,用于将获取的数据或者连续存储的数组数据存储到一级缓存器中。
25.一种计算机系统,其特征在于,包括: 总线; 与所述总线相连的处理器; 与所述总线相连的存储器; 其中,所述处理器通过所述总线,调用所述存储器中存储的代码,以用于: 运行可执行程序;当运行到插入在所述可执行程序中的预取代码时,根据该预取代码的指示对到数据存储器中预取数据进行控制; 其中,所述根据该预取代码的指示对到数据存储器中预取数据进行控制包括: 若所述预取代码包括用于指示开启预取功能的预取开启代码,控制开启预取功能到数据存储器中预取数据;若所述预取代码包括用于指示关闭预取功能的预取关闭代码,控制关闭预取功能停止到数据存储器中预取数据。
26.如权利要求25所述的计算机系统,其特征在于,所述处理器在执行所述运行可执行程序之前,还用于: 在所述可执行程序的预编译过程中,识别确定出所述可执行程序中密集访存的代码区间,并在所述密集访存的代码区间插入所述预取代码。
27.如权利要求25或26所述的计算机系统,其特征在于,所述处理器还用于: 检测到从所述可执行程序切换至其他程序时,存储当前所述可执行程序所处的预取状态,所述预取状态包括预取已开启的状态和预取已关闭的状态; 检测到由所述其他程序切换回所述可执行程序时,查找存储的所述可执行程序所处的预取状态; 若预取状态包括预取已开启的状态,控制开启预取功能到数据存储器中预取数据;若预取状态包括预取已关闭的状态,控制关闭预取功能停止到数据存储器中预取数据。
28.如权利要求25-27任一项所述的计算机系统,其特征在于, 所述处理器在执行所述若所述预取代码包括用于指示开启预取功能的预取开启代码,控制开启预取功能到数据存储器中预取数据时,具体用于: 若所述预取代码包括用于指示开启预取功能的预取开启代码,设置预取指令中的预取开启控制位为有效得到控制指令,以控制开启缓存器的预取功能以到数据存储器中预取数据; 所述处理器在执行所述若所述预取代码包括用于指示关闭预取功能的预取关闭代码,控制关闭预取功能停止到数据存储器中预取数据时,具体用于: 若所述预取代码包括用于指示关闭预取功能的预取关闭代码,设置预取指令中的预取结束控制位为有效得到控制指令,以控制关闭缓存器的预取功能以停止到数据存储器中预取数据。
29.如权利要求25-28任一项所述的计算机系统,其特征在于,所述处理器在执行所述根据该预取代码的指示对到数据存储器中预取数据进行控制时,还用于: 若所述预取代码包括用于指示开启预取功能的预取开启代码和用于指示预取模式的预取模式代码,设置预取指令中的预取开启控制位为有效,并设置用于指示预取模式的预取模式控制位的模式值得到控制指令,以控制开启缓存器的预取功能并按模式值所指示的预取模式到数据存储器中预取数据的预取控制指令; 若所述预取代码包括用于指示开启预取功能的预取开启代码和用于指示预取的数据量大小的预取数代码,设置预取指令中的预取开启控制位为有效,并设置用于指示预取的数据量大小的预取数控制位的数量值得到控制指令,以控制开启缓存器的预取功能并按数量值所指示的数量到数据存储器中预取数据。
30.如权利要求26-29任一项所述的计算机系统,其特征在于,所述处理器在执行所述识别确定出所述可执行程序中密集访存的代码区间时,具体用于: 查找预编译过程中所述可执行程序中预置的预取关键字; 根据预取关键字标记出候选密集访存的代码区间; 判断所述被标记为候选密集访存的代码区间是否满足预取条件; 若满足,则将所述被标记为候选密集访存的代码区间确定为所述可执行程序的密集访存的代码区间。
31.如权利要求26-29任一项所述的计算机系统,其特征在于,所述处理器在执行所述识别确定出所述可执行程序中密集访存的代码区间时,具体用于: 识别确定出所述可执行程序中为循环体的代码区间; 将所述可执行程序中被识别为循环体的代码区间标记为候选密集访存的代码区间; 判断所述被标记为候选密集访存的代码区间是否满足预取条件; 若满足,则将所述被标记为候选密集访存的代码区间确定为所述可执行程序中密集访存的代码区间。
32.如权利要求26-29任一项所述的计算机系统,其特征在于,所述处理器在执行所述识别确定出所述可执行程序中密集访存的代码区间时,具体用于: 根据所述可执行程序被预编译过程中的数据访问规律,将以呈线性规律变化的方式密集访问同一存储单元的代码区间或者以呈线性规律变化的方式访问存储单元的代码区间标记为候选密集访存的代`码区间; 判断所述被标记为候选密集访存的代码区间是否满足预取条件; 若满足,则将所述被标记为候选密集访存的代码区间确定为所述可执行程序中密集访存的代码区间。
33.如权利要求26-32任一项所述的计算机系统,其特征在于,所述处理器执行所述在所述密集访存的代码区间插入所述预取代码时,具体用于: 在所述密集访存的代码区间的代码入口处插入预取开启代码; 在所述密集访存的代码区间的代码出口处插入预取关闭代码。
34.如权利要求33所述的计算机系统,其特征在于,所述处理器执行所述在所述密集访存的代码区间插入所述预取代码时,具体还用于: 在所述密集访存的代码区间的代码入口处插入预取模式代码;或 在所述密集访存的代码区间的代码入口处插入预取数代码。
35.如权利要求25-34任一项所述的计算机系统,其特征在于,所述处理器还用于: 将从数据存储器中预取的数据缓存到缓存器中或者缓存到预取缓冲器中; 其中,将从数据存储器中预取的数据缓存到缓存器中时,若缓存器的存储单元分配超过预设时间值、或者缓存器正在存入其他数据,则将所述数据存储器中预取的数据缓存到预取缓冲器中。
36.如权利要求25至35任一项所述的计算机系统,其特征在于,所述处理器还用于: 根据对缓存器中缓存的数据的命中率,获取缓存器中命中率超过预设阈值的数据或者连续存储的数组数据; 将获取的数据或者连续存储的数组数据存储到一级缓存器中。
37.一种数据预取系统,其特征在于,包括程序运行装置、可编程预取装置、缓存器以及数据存储器,其中,所述数据存储器中存储有可执行程序需要访问的数据;
所述程序运行装置用于运行所述可执行程序; 所述可编程预取装置用于当所述程序运行装置运行到插入在所述可执行程序中的预取代码时,根据该预取代码的指示控制所述缓存器到所述数据存储器中预取数据; 所述缓存器用于到所述数据存储器中预取数据; 其中,所述可编程预取装置具体用于:若所述预取代码包括用于指示开启预取功能的预取开启代码,控制开启所述缓存器的预取功能;若所述预取代码包括用于指示关闭预取功能的预取关闭代码,控制关闭所述缓存器的预取功能; 所述缓存器具体用于在预取功能被开启后到所述数据存储器中预取数据;以及,在预取功能被关闭后,停止到所述数据存储器中预取数据。
38.如权利要求37所述的系统,其特征在于, 所述程序运行装置,还用于在所述可执行程序的预编译过程中,识别确定出所述可执行程序中密集访存的代码区间,并在所述密集访存的代码区间插入预取代码。
39.如权利要求37或38所述的系统,其特征在于, 所述可编程预取装置,还用于检测到从所述可执行程序切换至其他程序时,存储当前所述可执行程序所处的预取状态,所述预取状态包括预取已开启的状态和预取已关闭的状态;检测到由所述其他程序切换回所述可执行程序时,查找存储的所述可执行程序所处的预取状态;若预取状态包括预取已开启的状态,控制开启预取功能到数据存储器中预取数据;若预取状态包括预取已关闭的状态,控制关闭预取功能停止到数据存储器中预取数据。
【文档编号】G06F12/08GK103608768SQ201380001332
【公开日】2014年2月26日 申请日期:2013年4月1日 优先权日:2013年4月1日
【发明者】钟云德, 陈龙, 毕波 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1