数据预先提取方法及使用此方法的装置与流程

文档序号:12120712阅读:205来源:国知局
本发明涉及一种微处理器技术,特别涉及一种数据预先提取方法以及使用此方法的装置。
背景技术
::为了避免当关联于存取系统存储器的数据高速缓存未命中(cachemiss)发生所导致较长的等待时间,微处理器观察最近的存储器需求的地址,试图预测将来需要哪些数据,并预先提取这些数据至微处理器的高速缓存存储器。观察存储器存取的简单顺序性来预测将来需要的数据,相对上容易。然而,程序也可能以相较于简单顺序性更复杂的模式来存取数据。在某些微处理器中,为了提高载入/存储指令的执行效率,会在微处理器中设置两条或以上的载入/存储流水线以并行执行载入/存储指令,观察二个载入/存储流水线(load/storepipeline)上的复杂存取模式,则更是复杂。设计一个数据预先提取器来根据二个载入/存储流水线的复杂存取模式预测将来需要的数据,可能需要大量的电力及时间资源,加长微处理器的时钟长度及增加微处理器的电力消耗,而此二因素为设计的重要考虑。因此,需要一种数据预先提取器,用以有效率地预测二个载入/存储流水线的复杂存取模式。技术实现要素:本发明的实施例提出一种数据预先提取方法,至少包含以下步骤。本发明的实施例提出一种数据预先提取方法,至少包含以下步骤。并行地分别从第一及第二载入/存储队列接收第一读取请求以及第二读取请求。并行地分别从上述第一及第二载入/存储队列取得第一读取请求的第一高速缓存线编号和第一偏移量及第二读取请求的第二高速缓存线编号和第二偏移量。从高速缓存线寄存器取得第三高速缓存线编号,以及从偏移量寄存器取得第三偏移量。依据第一至第三高速缓存线编号以及第一至第三偏移量,判断是否形成偏移量趋势。当形成偏移量趋势时,驱动第一级数据高速缓存器预先提取高速缓存线的数据。本发明的实施例提出一种数据预先提取装置,至少包含第一及第二载入/存储队列、第一级数据高速缓存器以及检测器。检测器耦接于第一及第二载入/存储队列及第一级数据高速缓存器,并行地分别从第一及第二载入/存储队列接收第一读取请求以及第二读取请求;并行地分别取得第一读取请求的第一高速缓存线编号和第一偏移量及第二读取请求的第二高速缓存线编号和第二偏移量;从高速缓存线寄存器取得第三高速缓存线编号;从偏移量寄存器取得第三偏移量;依据第一至第三高速缓存线编号以及第一至第三偏移量,判断是否形成偏移量趋势;以及当形成偏移量趋势时,驱动第一级数据高速缓存器预先提取高速缓存线的数据。本发明实施例的上述数据预先提取方法和装置每回合可以判断从二个载入/存储队列并行分派的读取请求是否与之前的读取请求形成偏移量上升或下降趋势,可实现同时跟踪两个载入/存储流水线上载入/存储读取请求地址的变化情况以指导预取操作,从而提升由第一级数据高速缓存器读取数据的命中率。附图说明图1是依据本发明实施例的超标量及管道化的微处理器的方块图。图2是依据本发明实施例的预先提取控制器的系统方块图。图3是依据本发明实施例的检测器的系统方块图。图4是依据本发明实施例的数据预先提取的方法流程图。【符号说明】100微处理器110指令高速缓存器;120指令解码器;130寄存器重命名表;140调度器;141a、141b载入/存储队列;150执行单元;151a、151b载入/存储执行单元;153其它执行单元;160预先提取控制器;160_0、…、160_n检测器;170第一级数据高速缓存器;180第二级数据高速缓存器;190总线接口;210选择控制器;230检测控制器;250多工器;310高速缓存线检测单元;311多工器;313高速缓存线寄存器;315、317比较器;330偏移量检测单元;331多工器;333偏移量寄存器;335、337、339比较器;350趋势检测单元;351数据更新逻辑;353预先提取触发逻辑;Ctrl0、Ctrl1、Ctrl2控制信号;VA0、VA1读取请求的载入地址;VAx[47:6]读取请求的高速缓存线编号;VAx[5:0]读取请求的高速缓存线上的偏移量;M0、M1、T0、T1、T2输出结果;S410~S460方法步骤。具体实施方式以下说明为完成发明的较佳实现方式,其目的在于描述本发明的基本精神,但并不用以限定本发明。实际的
发明内容必须参考之后的权利要求范围。必须了解的是,使用于本说明书中的“包含”、“包括”等词,用以表示存在特定的技术特征、数值、方法步骤、作业处理、元件和/或组件,但并不排除可加上更多的技术特征、数值、方法步骤、作业处理、元件、组件,或以上的任意组合。在权利要求中使用如“第一”、“第二”、“第三”等词用来修饰权利要求中的元件,并非用来表示之间具有优先权顺序,先行关系,或者是一个元件先于另一个元件,或者是执行方法步骤时的时间先后顺序,仅用来区别具有相同名字的元件。图1是依据本发明实施例的超标量(superscalar)及管道化(pipelined)的微处理器的方块图。微处理器100包含指令高速缓存器(instructioncache)110,用以缓存一种指令集架构(instructionsetarchitecture)的宏指令(macro-instructions),例如x86指令集架构等。指令解码器(instructiondecoder)120从指令高速缓存器110接收宏指令,并且将宏指令转译成微指令(micro-instructions)。寄存器重命名表(registeraliastable)130依据微指令依赖关系以程序顺序传送微指令至调度器(scheduler)。调度器140,例如为一保留站(reservationstation),分派(dispatch)微指令至多个执行单元150中的适当一个,其中包括载入/存储队列141a及141b,用以并行地分派读取请求(loadrequest)至载入/存储执行单元151a及151b。除了载入/存储执行单元151a及151b外,执行单元150可包含一或多个其它执行单元153。其他执行单元153可为整数运算/逻辑单元(arithmetic/logicunit,ALU)、浮点数执行单元、分支单元(branchunit)、单指令多数据(single-instruction-multiple-data,SIMD)执行单元等。载入/存储执行单元151a及151b中的任何一个从第一级数据高速缓存器(level-1L1datacache)170读取数据及存储数据至第一级数据高速缓存器170。第二级数据高速缓存器(level-2L2datacache)180设置于第一级数据高速缓存器170及指令高速缓存器110之后。第二级数据高速缓存器180通过总线接口190从系统存储器读取数据,以及写入数据至系统存储器。总线接口190将微处理器100接上总线,例如,本地总线、存储器总线等。预先提取控制器160耦接于载入/存储执行单元151a及151b、第一级数据高速缓存器170、第二级数据高速缓存器180及总线接口190。预先提取控制器160可从第二级数据高速缓存器180预先提取数据至第一级数据高速缓存器170。预先提取控制器160包含多个检测器160_0至160_n,n为整数,可随着设计需求而改变。总的来说,检测器160_0至160_n中的每一个可完成以下功能:并行地分别从载入/存储队列(LD/ST,Load/Storequeue)141a及141b接收第一读取请求以及第二读取请求;并行地分别取得第一读取请求的第一高速缓存线编号和第一偏移量以及第二读取请求的第二高速缓存线编号和第二偏移量;从高速缓存线寄存器取得第三高速缓存线编号;从偏移量寄存器取得第三偏移量;根据第一至第三高速缓存线编号以及第一至第三偏移量,判断是否形成偏移量趋势;以及当形成偏移量趋势时,驱动第一级数据高速缓存器170预先提取高速缓存线的数据。图2是依据本发明实施例的预先提取控制器的系统方块图。检测器160_0至160_n中的每一个分别从载入/存储队列141a及141b取得读取请求的载入地址(loadaddresses),判断二个读取请求的载入地址中的每一个的高速缓存线编号(例如前述的第一高速缓存线编号和第二高速缓存线编号)是否相符于该检测器关联的高速缓存线(例如前述的第三高速缓存线编号),并且判断此二个读取请求的载入地址中的每一个的偏移量(例如前述的第一偏移量和第二偏移量)结合先前的读取请求的偏移量(例如前述的第三偏移量)是否形成一个偏移量上升或下降趋势。如果是,则发出控制信号给选择控制器210用以指示第一级数据高速缓存器170预先提取指定的高速缓存线的数据。预先提取控制器160还包含检测控制器230。检测控制器230监督检测器160_0至160_n的判断结果,并判断载入/存储队列141a发出的读取请求的载入地址的高速缓存线编号(例如前述的第一高速缓存线编号)是否与检测器160_0至160_n中的任何一个都不匹配(即都不相等)。如果是,检测控制器230根据最近最少使用(LeastRecentlyUsed,LRU)算法从检测器160_0至160_n中选择关联的高速缓存线编号最老(即,关联至最早进入的高速缓存线)的一个检测器,并指示选择的检测器管理此载入地址关联的高速缓存线,例如将该检测器对应的高速缓存线编号更新为当前时钟周期从载入/存储队列141a分派的读取请求的载入地址中的高速缓存线编号(例如前述的第一高速缓存线编号)。检测控制器230更判断载入/存储队列141b发出的读取请求的载入地址的高速缓存线编号(例如前述的第二高速缓存线编号)是否与检测器160_0至160_n中的任何一个都不匹配(即都不相等)。如果是,检测控制器230除了选择上述最高检测器,同时更选择关联的高速缓存线编号次老的一个检测器,并将该次老的检测器对应的高速缓存线编号更新为当前时钟周期从载入/存储队列141b分派的读取请求的载入地址中的高速缓存线编号(例如前述的第二高速缓存线编号)。图3是依据本发明实施例的检测器的系统方块图。检测器160_0至160_n中的每一个包含高速缓存线检测单元(cachelinedetectionunit)310、偏移量检测单元(offsetdetectionunit)330及趋势检测单元(trenddetectionunit)350。高速缓存线检测单元310及偏移量检测单元330从载入/存储队列141a及141b分别取得读取请求的载入地址VA0及VA1对应的高速缓存线编号及偏移量,并据以执行如后所述的判断。第一级数据高速缓存器170中的数据是按照高速缓存线的形式逐行存储的。通常,载入/存储队列141a及141b所分派的针对第一级数据高速缓存器170的读取请求所读取数据大小不超过一个高速缓存线大小。举例来说,载入地址VA0及VA1可以48比特表示,其中的第47至6比特[47:6]代表高速缓存线的编号,而第5至0比特[5:0]代表载入地址VA0及VA1于此高速缓存线(与各自的高速缓存线编号对应)中的地址偏移量。在一实施例中,高速缓存线检测单元310包含以D型触发寄存器(Dflip-flopregister)实现的高速缓存线寄存器313,用以存储一个高速缓存线编号(cachelinenumber)。当高速缓存线寄存器313存储了高速缓存线编号时,代表此检测器处于有效状态(validstate),该存储的高速缓存线编号对应于第一个占据该检测器(在当前时钟周期之前)的读取请求的载入地址对应的高速缓存线,即代表之前有读取请求对应到该检测器。当高速缓存线寄存器313不存储任何值或存储空值时,代表此检测器处于无效状态(invalidstate)。不存储任何值或存储空值的高速缓存线寄存器313可称为空高速缓存线寄存器(emptycachelineregister),代表之前尚未有读取请求占据该检测器。高速缓存线寄存器313也可设置于高速缓存线检测单元310之外,本发明并不因此受限。高速缓存线检测单元310设置比较器315及317,用以判断二个载入地址是否落入关联的高速缓存线。比较器315判断载入地址的高速缓存线编号VA0[47:6]是否等于高速缓存线寄存器313中的高速缓存线编号,并输出结果M0。如果相同,输出结果M0为1;如果不同,输出结果M0为0。比较器317判断载入地址的高速缓存线编号VA1[47:6]是否等于高速缓存线寄存器313中的高速缓存线编号,并输出结果M1。如果相同,输出结果M1为1;如果不同,输出结果M1为0。此外,检测控制器230监督所有检测器160_0至160_n的输出结果M0及M1。当所有检测器160_0至160_n的高速缓存线检测单元310的输出结果M0皆为0时,代表当前时钟周期从载入/存储队列141a分派的载入地址的高速缓存线编号都与所有有效的检测器所存储的高速缓存线编号都不相等,如果没有无效的检测器(即所有检测器都已经被占用),则检测控制器230从检测器160_0至160_n中选择关联至最早进入的高速缓存线(即所存储的高速缓存线编号最老)的一个检测器,发出控制信号Ctrl0至多工器(multiplexer)250,将载入/存储队列141a连接至选择的检测器的多工器311,用以传递载入地址的高速缓存线编号VA0[47:6]至选择的检测器的多工器311。同时,发出控制信号Ctrl1至选择的检测器的多工器311,将多工器250连接至选择的检测器的高速缓存线寄存器313,用以传递载入地址的高速缓存线编号VA0[47:6]至选择的检测器的高速缓存线寄存器313,使得高速缓存线寄存器313存储此载入地址的高速缓存线编号VA0[47:6],以将该检测器所对应的高速缓存线编号更新为当前从载入/存储队列141a分派的读取请求的载入地址对应的高速缓存线编号。当所有检测器160_0至160_n的高速缓存线检测单元310的输出结果M1皆为0时,代表当前时钟周期从载入/存储队列141b分派的载入地址的高速缓存线编号都与所有有效的检测器所存储的高速缓存线编号都不相等,如果没有无效的检测器(即所有检测器都已经被占用),则检测控制器230从检测器160_0至160_n中选择关联至最早进入的高速缓存线(即所存储的高速缓存线编号最老的高速缓存线,在一实施例中,如果同时当所有检测器160_0至160_n的输出结果M0同样也皆为0,则选择所存储的高速缓存线编号次老的高速缓存线)的一个检测器,发出控制信号Ctrl0至多工器250,将载入/存储队列141b连接至选择的检测器的多工器311,用以传递载入地址的高速缓存线编号VA1[47:6]至选择的检测器的多工器311。同时,发出控制信号Ctrl1至选择的检测器的多工器311,将多工器250连接至选择的检测器的高速缓存线寄存器313,用以传递载入地址的高速缓存线编号VA1[47:6]至选择的检测器的高速缓存线寄存器313,使得高速缓存线寄存器313存储此载入地址的高速缓存线编号VA1[47:6],以将该检测器所对应的高速缓存线编号更新为当前从载入/存储队列141b分派的读取请求的载入地址对应的高速缓存线编号。偏移量检测单元330包含以一D型触发寄存器实现的偏移量寄存器333,用以存储一个偏移量。偏移量寄存器333也可设置于偏移量检测单元330之外,本发明并不因此受限。偏移量检测单元330设置比较器335、337及339。比较器335比较从载入/存储队列141a分派的读取请求的载入地址VA0的偏移量VA0[5:0]及偏移量寄存器333中的偏移量,并输出结果T0。如果大于,输出结果T0为1;如果小于或等于,输出结果T0为0。比较器337比较从载入/存储队列141b分派的读取请求的载入地址VA1的偏移量VA1[5:0]及偏移量寄存器333中的偏移量,并输出结果T1。如果大于,输出结果T1为1;如果小于或等于,输出结果T1为0。比较器339比较载入地址VA0的偏移量VA0[5:0]及载入地址VA1的偏移量VA1[5:0],并输出结果T2。如果大于,输出结果T2为1;如果小于,输出结果T2为0。此外,每一个趋势检测单元350的数据更新逻辑351监督输出结果M0、M1、T0、T1及T2。当输出结果M0为1及M1为0时,数据更新逻辑351发出控制信号Ctrl0至多工器250,将载入/存储队列141a连接至多工器331,用以传递载入地址VA0的偏移量VA0[5:0]至多工器331。同时,发出控制信号Ctrl2至多工器331,将多工器250连接至偏移量寄存器333,用以传递载入地址VA0的偏移量VA0[5:0]至偏移量寄存器333,使得偏移量寄存器333存储此载入地址VA0的偏移量VA0[5:0],即将该检测器所对应的前述第三偏移量更新为当前时钟周期从载入/存储队列141a分派的读取请求的偏移量(例如前述第一偏移量)。当输出结果M0为0及M1为1时,数据更新逻辑351发出控制信号Ctrl0至多工器250,将载入/存储队列141b连接至多工器331,用以传递载入地址VA1的偏移量VA1[5:0]至多工器331。同时,发出控制信号Ctrl2至多工器331,将多工器250连接至偏移量寄存器333,用以传递载入地址VA1的偏移量VA1[5:0]至偏移量寄存器333,使得偏移量寄存器333存储载入地址VA1的偏移量VA1[5:0],即将该检测器所对应的前述第三偏移量更新为当前时钟周期从载入/存储队列141b分派的读取请求的偏移量(例如前述第二偏移量)。当输出结果M0为1、M1为1、T0及T1皆为1且T2为1时,即构成偏移量上升趋势且前述载入地址VA0的偏移量最大,则数据更新逻辑351分别发出控制信号Ctrl0及Ctrl1至多工器250及331,使得偏移量寄存器333存储此载入地址VA0的偏移量VA0[5:0]作为前述第三偏移量。当输出结果M0为1、M1为1、T0及T1皆为1且T2为0时,即构成偏移量上升趋势且前述载入地址VA1的偏移量最大,则数据更新逻辑351分别发出控制信号Ctrl0及Ctrl1至多工器250及331,使得偏移量寄存器333存储载入地址VA1的偏移量VA1[5:0]作为前述第三偏移量。当输出结果M0为1、M1为1、T0及T1皆为0且T2为1时,即构成偏移量下降趋势且前述载入地址VA1的偏移量最小,则数据更新逻辑351分别发出控制信号Ctrl0及Ctrl1至多工器250及331,使得偏移量寄存器333存储此载入地址VA1的偏移量VA1[5:0]作为前述第三偏移量。当输出结果M0为1、M1为1、T0及T1皆为0且T2为0时,即构成偏移量下降趋势且前述载入地址VA0的偏移量最小,则数据更新逻辑351分别发出控制信号Ctrl0及Ctrl1至多工器250及331,使得偏移量寄存器333存储载入地址的偏移量VA0[5:0]作为前述第三偏移量。在其它实施例中,各检测器还包括另一偏移量寄存器(图未示出)用以存储第四偏移量,该第四偏移量为构成偏移量上升趋势时载入地址VA1和VA0中偏移量较小者,或者构成偏移量下降趋势时载入地址VA1和VA0中偏移量较大者,其作用后面会详述。在另一些实施例中,偏移量寄存器333可根据从载入/存储队列141a和141b分派的读取请求的重排序缓存器(ROB,ReOrderBuffer)索引,代表读取请求的先后顺序,数值越大代表较晚的读取请求。比较器335、337及339可从载入/存储队列141a及141b取得读取请求的ROB索引,然后根据ROB索引的大小决定同一时钟周期分派的两个读取请求的先后顺序,ROB索引较大者的载入地址作为VA0,ROB索引较小者的载入地址作为VA1,再进行如上所述的比较,用以产生输出结果T0至T2。也就是说,重排序缓存器索引或其他具有类似意义的值表征了同一时钟周期同时分派的两个读取请求的先后顺序,顺序上较晚者的载入地址作为VA0,顺序上较早者的载入地址作为VA1,再进行上述比较以判断当前时钟周期的两个读取请求与之前的读取请求的偏移量是否构成偏移量的上升或下降趋势。在其它实施例中,同一时钟周期同时分派的两个读取请求无需区分先后顺序。每一个趋势检测单元350的数据更新逻辑(datarefreshlogic)351还包含两个趋势计数器(counters)。上升趋势计数器指示检测到偏移量上升趋势的次数;下降趋势计数器指示检测到偏移量下降趋势的次数。上升和下降趋势计数器可设置于数据更新逻辑351之外,本发明并不因此受限。数据更新逻辑351另依据高速缓存线检测单元310的输出结果M0及M1、偏移量检测单元330的输出结果T0及T1更新两个趋势计数器。数据更新逻辑351可根据表1的范例案例来更新两个趋势计数器。趋势检测单元350可包含非易失性存储器,例如静态存储器(SRAM,StaticRandomAccessMemory)、快闪存储器(flashmemory)等,用以存储表1的内容。表1案例M0M1T0T1趋势计数器更新前计数更新后计数1101-上升ii+1201-1上升ii+13100-下降ii+1401-0下降ii+151101无无无61110无无无71111上升ii+281100下降ii+2第2至7栏为输入参数,第8栏为输出结果。第2栏至5栏分别记录输出结果M0、M1、T0及T1。第6栏记录所更新的趋势寄存器,第7和第8栏记录更新前后计数器的值。输出结果“T0”或“T1”字段中的符号“-”代表不需要考虑的状态。数据更新逻辑351藉由分别比对第2至6栏的高速缓存线检测单元310的输出结果M0及M1及偏移量检测单元330的输出结果T0及T1来找出适当的案例,并依据找到案例的中第6至8栏的趋势计数器来更新趋势计数器的值。”更新后计数(i)”字段中的“i+1”或“i+2”用来指示数据更新逻辑351将趋势计数器中的值加1或加2。值得注意的是,表1所示的更新趋势计数器的规则仅为示例,本发明不限于此。每一个趋势检测单元350的预先提取触发逻辑353读取趋势计数器的内容,并据以决定是否触发预先提取。详细来说,当检测到上升趋势计数器的值达到预定的阈值(threshold,例如3)时,发出控制信号给选择控制器210,用以驱动第一级数据高速缓存器170预先提取下一个高速缓存线的数据。以上情况可称为形成偏移量上升趋势。当检测到的下降趋势计数器的值达到预定的阈值(threshold,例如3)时,发出控制信号给选择控制器210,用以驱动第一级数据高速缓存器170预先提取上一个高速缓存线的数据。举例来说,若高速缓存线寄存器313中的高速缓存线编号为10,则下一个高速缓存线的编号为11,上一个高速缓存线的编号为9。上述实施例并不严格限制读取请求的偏移量呈连续上升或连续下降趋势,因此须检测4笔及以上读取请求以确定偏移量趋势。在其它实施例中,可以直接检测连续3笔读取请求的偏移量,在此种实施例中,该检测器160所存储的第三偏移量是在当前时钟周期的前一时钟周期从载入/存储队列141a或载入/存储队列141b的读取请求的偏移量:当趋势检测单元350判定高速缓存线检测单元310的输出结果M0及M1皆为1(即前述的第一高速缓存线编号及第二高速缓存线编号皆命中该检测器160存储的第三高速缓存线编号),并且偏移量检测单元330的输出结果T0及T1皆为1,T2输出结果为0或1(即前述的第一及第二偏移量不相等且皆大于该检测器160所存储的第三偏移量),则趋势检测单元350判定形成偏移量上升趋势。当趋势检测单元350判定高速缓存线检测单元310的输出结果M0及M1皆为1(即前述的第一高速缓存线编号及第二高速缓存线编号皆命中该检测器160存储的第三高速缓存线编号),并且偏移量检测单元330的输出结果T0及T1皆为0,T2输出结果为0或1(即前述的第一及第二偏移量不相等且皆小于该检测器160所存储的第三偏移量),则趋势检测单元350判定形成偏移量下降趋势。在前述同时记录2笔在前读取请求的偏移量(如前述的第三和第四偏移量)的实施例中,如果当前时钟周期分派的2个读取请求的偏移量较小者大于该检测器所存储的第三和第四偏移量中较大者,则趋势检测单元350判定形成偏移量上升趋势;当前时钟周期分派的2个读取请求的偏移量较大者小于该检测器所存储的第三和第四偏移量中较小者,则趋势检测单元350判定形成偏移量上升趋势。图4是依据本发明实施例的数据预先提取的方法流程图。在一段预定时间后,并行地分别从载入/存储队列141a及载入/存储队列141b接收第一读取请求以及第二读取请求(步骤S410),并行地分别取得第一读取请求的第一高速缓存线编号和第一偏移量以及第二读取请求的第二高速缓存线编号和第二偏移量(步骤S420)。从高速缓存线寄存器取得第三高速缓存线编号(步骤S430),并且从偏移量寄存器取得第三偏移量(步骤S440)。依据第一至第三高速缓存线编号以及第一至第三偏移量,判断是否形成偏移量趋势(步骤S450)。步骤S450的技术细节,可参考数据更新逻辑351及预先提取触发逻辑353的内容。若是,则驱动第一级数据高速缓存器170预先提取一高速缓存线的数据(步骤S460)。否则,忽略此二个读取请求。在步骤S450,当第一高速缓存线编号及第二高速缓存线编号皆等于第三高速缓存线编号,并且第一及第二偏移量不相等且皆大于第三偏移量,则判断形成偏移量上升趋势。当第一高速缓存线编号及第二高速缓存线编号皆等于第三高速缓存线编号,并且第一及第二偏移量不相等且皆小于第三偏移量则判断形成偏移量下降趋势。在另一实施例中,在步骤S450,当第一高速缓存线编号等于第三高速缓存线编号,且第一偏移量大于第三偏移量,则前述上升趋势计数器的值加1;当第二高速缓存线编号等于第三高速缓存线编号,且第二偏移量大于第三偏移量,则前述下降趋势计数器的值加1;如果上升趋势计数器的值大于阈值,则判断形成偏移量上升趋势;当第一高速缓存线编号等于第三高速缓存线编号,且第一偏移量小于第三偏移量,则前述下降趋势计数器的值加1;当第二高速缓存线编号等于第三高速缓存线编号,且第二偏移量小于第三偏移量,则下降趋势计数器的值加1;如果下降趋势计数器的值大于阈值,则判断形成偏移量下降趋势。在步骤S460,当形成偏移量上升趋势时,驱动第一级数据高速缓存器170预先提取下一高速缓存线的数据。当形成偏移量下降趋势时,驱动第一级数据高速缓存器170预先提取上一高速缓存线的数据。以下举出数个情境来说明预先提取控制器160的运作。假设检测器160_0至160_n皆初始成无效状态:在第一个情境中,检测器160_0在第一时间点分别从载入/存储队列141a及载入/存储队列141b并行地接收两个读取请求的载入地址A/3及A/7,以及在第二时间点分别从载入/存储队列141a及载入/存储队列141b并行地接收两个读取请求的载入地址A/4及A/5,其中,斜线前的英文字母代表高速缓存线编号,斜线后的数字代表偏移量。在第二时间点,由于此时取得的载入地址与上一时间点得到的载入地址不形成任何偏移量趋势,不触发预先提取。在第二个情境中,检测器160_0在第一时间点分别从载入/存储队列141a及载入/存储队列141b并行地接收两个读取请求的载入地址A/3及A/4,以及在第二时间点分别从载入/存储队列141a及载入/存储队列141b并行地接收两个读取请求的载入地址A/6及A/5。在第二时间点,由于此时取得的载入地址与上一时间点得到的载入地址形成偏移量上升趋势,发出控制信号给选择控制器210用以指示第一级数据高速缓存器170预先提取编号为(A+1)的高速缓存线的数据。在第三个情境中,检测器160_0在第一时间点分别从载入/存储队列141a及载入/存储队列141b并行地接收两个读取请求的载入地址A/5及A/6,以及在第二时间点分别从载入/存储队列141a及载入/存储队列141b并行地接收两个读取请求的载入地址A/3及A/4。在第二时间点,由于此时取得的载入地址与上一时间点得到的载入地址形成偏移量下降趋势,发出控制信号给选择控制器210用以指示第一级数据高速缓存器170预先提取编号为(A-1)的高速缓存线的数据。从第二及第三个情境可以理解,由于本发明实施例每回合可以判断从二个载入/存储队列并行分派的读取请求是否与之前的读取请求形成偏移量上升或下降趋势,可实现同时跟踪两个载入/存储流水线上载入/存储读取请求地址的变化情况以指导预取操作,从而提升由第一级数据高速缓存器170读取数据的命中率。虽然图1至3中包含了以上描述的元件,但不排除在不违反发明的精神下,使用更多其他的附加元件,已达成更佳的技术效果。此外,虽然图4的处理步骤采用特定的顺序来执行,但是在不违反发明精神的情况下,本领域技术人员可以在达到相同效果的前提下,修改这些步骤间的顺序,所以,本发明并不局限于仅使用如上所述的顺序。虽然本发明使用以上实施例进行说明,但需要注意的是,这些描述并非用以限缩本发明。相反地,此发明涵盖了本领域技术人员显而易见的修改与相似设置。所以,申请权利要求范围须以最宽广的方式解释来包含所有显而易见的修改与相似设置。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1