用于提高缓存命中率的装置及方法

文档序号:6354111阅读:451来源:国知局
专利名称:用于提高缓存命中率的装置及方法
技术领域
本发明涉及CPU的取指技术,特别涉及一种用于提高缓存命中率的装置、以及一 种用于提高缓存命中率的方法,本文所述的缓存主要是指CPU内部的指令缓存(Icache)。
背景技术
如图1所示,在CPU中,当取指单元需要读取一条指令数据时,首先将该指令数据 的PC地址发送给Icache单元;Icache单元具有其对应的Icache控制逻辑和Icache缓存, 当Icache单元接收到来自取指单元的PC地址后,Icache控制逻辑从Icache缓存中查找 是否存在具有该PC地址的指令数据。如果Icache控制逻辑从Icache缓存中找到具有该PC地址的指令数据,则Icache 控制逻辑就用相对快的速度立即从Icache缓存中读取具有该PC地址的指令数据、并返回 给取指单元。但如果Icache控制逻辑从Icache缓存中没有找到具有该PC地址的指令数据, 则Icache控制逻辑就用相对慢的速度从CPU外部的内存中读取具有该PC地址的指令数 据、并返回给取指单元,同时,Icache控制逻辑还将具有该PC地址的指令数据所在的一线 (Icache line)指令数据块调入至Icache缓存中,以使得后续可以直接从Icache缓存中 读取该指令数据块中的其他指令数据、而不必再调用CPU外部的内存。其中,一个Icache line的指令数据块通常为4 32个字节、包含4_8条指令数据。总的来说,读取指令的优先顺序是先Icache缓存、后内存。由于程序执行的局域性行为,当前正在执行的指令数据所在的指令数据块中,通 常会包含有后续可能需要的若干条其他指令数据,因此,基于上述指令数据读取机制,能够 使CPU内部利用Icache单元读取指令数据的命中率非常高、通常可达90%左右,也就是说, CPU内部的取指单元下一次所要读取的指令数据90%都在Icache缓存中,而只有大约10% 的指令数据需要从CPU外部的内存读取。从而,上述指令数据读取机制能够在很大程度上免去CPU直接读取内存的时间, 也使指令数据的读取基本无需等待。然而,对于跳转指令来说,上述指令数据读取机制就无法保证对Icache缓存的高 命中率。具体说,跳转指令可能发生跳转的目标地址并不一定属于当前指令所在的指令数 据块,因此,即便能够将一 Icache line的指令数据块调入至Icache缓存中,也很难保证目 标地址处的指令数据能够位于Icache缓存中,从而,当执行跳转指令后,取指单元需要读 取目标地址处的指令数据时,就会出现在Icache缓存中无法命中的情况。而一旦出现无法 命中的情况,就需要花费多个指令周期从CPU外部的内存中读取目标地址处的指令数据, 势必会增加CPU的等待时间。而且,跳转指令一般会占到所有的指令数据的20%左右,因此,由跳转指令所引起 的Icache缓存命中率低的问题,对CPU的运行效率也是有较大影响的。

发明内容
有鉴于此,本发明提供了一种用于提高缓存命中率的装置、以及一种用于提高缓 存命中率的方法。本发明提供的一种用于提高缓存命中率的装置,包括取指单元,将当前需要读取的第一指令数据的第一地址提供给BTB单元;BTB单元,根据所述第一地址在其内部缓存中查找将在所述第一指令数据之后执 行的跳转指令,若未找到则不动作,若找到则将作为所述跳转指令的跳转目标的第二地址 提供给Icache单元;Icache单元,查找其内部缓存中是否存在具有所述第二地址的第二指令数据,若 存在则不动作,若不存在则从内存中读取所述第二地址处的所述第二指令数据至其内部缓 存中保存。优选地,BTB单元以所述第一地址为起始地址查找所述跳转指令。或者,BTB单元 进一步计算所述第一地址按照一线大小的下对齐地址,并以所述下对齐地址为起始地址、 在一线的范围内查找所述跳转指令。优选地,Icache单元进一步从内存中读取所述第二指令数据所属的指令数据块至 其内部缓存中保存。优选地,取指单元进一步将所述第一地址提供给Icache单元;相应地,Icache单 元进一步在其内部缓存中查找是否存在具有所述第一地址的所述第一指令数据,当存在时 从其内部缓存中读取具有所述第一地址的所述第一指令数据返回给取指单元,否则从内存 中读取所述第一地址处的所述第一指令数据至其内部缓存中、并返回给取指单元。本发明提供的一种用于提高缓存命中率的方法,包括a、将取指单元当前需要读取的第一指令数据的第一地址提供给BTB单元;b、根据所述第一地址在BTB单元中查找将于所述第一指令数据之后被执行的跳 转指令,若未找到则不动作,若找到则将作为所述跳转指令的跳转目标的第二地址提供给 Icache 单兀;c、在Icache单元中查找是否存在具有所述第二地址的第二指令数据,若存在则 不动作,若不存在则从内存中读取所述第二地址处的所述第二指令数据至Icache单元中 保存。优选地,在步骤b中,以所述第一地址为起始地址在BTB单元查找所述跳转指令。优选地,在步骤b中,进一步计算所述第一地址按照一线大小的下对齐地址,并以 所述下对齐地址为起始地址、在一线的范围内查找BTB单元中的所述跳转指令。优选地,在步骤c中进一步从内存中读取所述第二指令数据所属的指令数据块 至Icache单元中保存。优选地,在步骤a中进一步包括将所述第一地址提供给Icache单元;相应地,在 步骤b中进一步包括在Icache单元中查找是否存在具有所述第一地址的所述第一指令数 据,当存在时从其内部缓存中读取并返回具有所述第一地址的所述第一指令数据,否则从 内存中读取所述第一地址处的所述第一指令数据至Icache单元中保存、并返回所述第一 指令数据。由上述技术方案可见,本发明能够利用BTB单元提前推测出跳转指令的目标地址
5(即第二地址)、并提供给Icache单元,因此,在取指单元需要读取目标地址处的指令数据 之前,就可以由Icache单元提前从内存中预取目标地址处的指令数据。从而,等到取指单 元需要读取目标地址处的指令数据时,无需再从内存读取、而是可以直接从Icache缓存中 读取,进而能够针对跳转指令的目标地址处的指令数据提高对Icache缓存取指的命中率、 减少CPU等待取指的时间、提高CPU的运行效率。更优地,本发明可以在取指单元向Icache单元发起取操作的过程中,以取指单元 当前需要的指令数据的地址为参照来推测后续跳转指令的目标地址,从而能够更好地将推 测跳转指令的目标地址的过程与正常的取指过程相结合,使正常的取指过程能够进一步附 带有推测跳转指令的目标地址的效果。


图1为现有技术中CPU取指阶段的原理示意图;图2为本发明实施例中用于提高缓存命中率的装置的逻辑结构示意图;图3a至图3d为如图2所示装置实现取指过程的一实例示意图;图4为本发明实施例中用于提高缓存命中率的方法的示例性流程图。
具体实施例方式为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对 本发明进一步详细说明。在现代体系结构的CPU(x86、arm)内部,通常会包含一种分支目标缓存(BTB)单 元,BTB单元能够预测跳转指令的目标地址,且预测的准确率一般高达95%以上。因此,本 实施例将BTB单元的预测功能与Icache单元相结合,用以提高Icache单元针对目标地址 的指令数据的命中率。下面,结合如图2中所示出的逻辑结构,详细介绍本实施例中如何将BTB单元的预 测功能与Icache单元相结合。首先,取指单元在需要读取一条指令数据时,会将该指令数据的PC地址发送给 Icache单元的Icache控制逻辑;与此同时,取指单元还将该PC地址发送至BTB单元的BTB 控制逻辑。在接收到取指单元提供的PC地址之后,Icache单元的Icache控制逻辑从Icache 缓存中查找是否存在具有该PC地址的指令数据。如找到具有该PC地址的指令数据,则用相对快的速度立即从Icache缓存中读取 具有该PC地址的指令数据、并返回给取指单元;如没有找到具有该PC地址的指令数据,则利用相对慢的速度从CPU外部的内存中 读取该PC地址处的指令数据、并返回给取指单元,还将读取的该PC地址处的指令数据所在 的一个Icache line指令数据块调入至Icache缓存中,以使得后续可以直接从Icache缓 存中读取该指令数据块中的其他指令数据、而不必再调用CPU外部的内存。而且,在Icache单元的Icache控制逻辑执行查找操作的同时,BTB单元的BTB控 制逻辑会在BTB缓存中查找将于取指单元需要读取的指令数据之后执行的跳转指令(如何 预测出跳转指令可以按照现有方式来实现),该跳转指令的地址大于该PC地址、且相比于其他跳转指令距离该PC地址最近;然后,将预测出的作为跳转目标的另一 PC地址提供给 Icache单元的Icache控制逻辑,该另一 PC地址可称之为目标地址。更具体地,BTB控制逻辑可以采用如下的查找方式方式1,BTB控制逻辑以取指单元所提供的PC地址为查找的起始地址,并按照地址 递增的方式在PC PC+L的范围内进行顺序查找,L为预先设定的任意值;方式2,BTB控制逻辑以[PC]为查找的起始地址,其中,[PC]为取指单元所提 供的PC地址按照一 Icache line的大小(Icache_line_size)的下对齐地址、[PC]= PC&(Icache_line_size-l),然后,按照地址递增的方式在[PC] [PC]+Icache_line_ size-1的范围内进行顺序查找,这样,就相当于先确定取指单元所提供的PC地址所属 Icache_line的头地址,然后从头地址开始在该PC地址所属Icachejine内查找。实际应用中,对于所有指令数据中的跳转指令比例较高、或较为集中的情况,采用 方式1可以在取指单元每次取指时均由BTB单元进行查找,这样能够较好地避免有跳转指 令被遗漏;而对于跳转指令较少、且较为分散的情况(例如每一 Icache line最多只有一条 跳转指令),则可以选择方式2,并只有在PC地址等于[PC]时、即PC = PC&(Icache_line_ size-1)时再由BTB单元进行查找,这就相当于,只有当前要读取的指令数据的PC地址是一 个Icache line的头地址时才进行查找,从而就使得针对每一 Icache line只进行一次查 找,进而也就能够尽可能地减少CPU的负担。当然,BTB控制逻辑也可以采用其他本领域技 术人员能够想到的方式进行查找,本文不再一一列举。但无论按照何种方式进行查找,只要存在将于取指单元所要读取的指令数据之后 执行的跳转指令,BTB单元均会将该跳转指令的目标地址提供给Icache单元。但如果BTB 单元在一定范围内未能查找到跳转指令,则无需动作。也就是说,Icache单元的Icache控制逻辑不仅要响应取指单元的取指要求,还要 对BTB控制单元传过来可能跳转的跳转指令的目标地址进行相应的操作,具体来说Icache单元的Icache控制逻辑在将指令数据返回给取指单元之后,还需要从 Icache缓存中查找是否存在具有BTB单元所提供的目标地址的指令数据;如找到具有该目标地址的指令数据,则表示该目标地址处的指令数据已经在 Icache缓存中,取指单元在执行跳转指令后又需要目标地址处的指令数据时,可直接从 Icache缓存中读取,因而Icache控制逻辑不需要作任何操作、只需等待取指单元针对该目 标地址的取指要求即可;否则,表示该目标地址处的指令数据未在Icache缓存中,因此,为了避免取指单 元下次需要该目标地址处的指令数据时不得不从CPU外部的内存读取,Icache控制逻辑先 从CPU外部的内存中将该目标地址处的指令数据预取到Icache缓存中,然后即可等待取指 单元针对该目标地址的取指要求。当然,Icache单元中的Icache控制逻辑也可以从内存 中将该目标地址处的指令数据所属的指令数据块都读取至其Icache缓存中保存,而不是 仅仅读取该目标地址处的一条指令数据。如上可见,本实施例利用BTB单元提前推测出跳转指令的目标地址、并提供给 Icache单元,因此,在取指单元需要读取目标地址处的指令数据之前,就可以由Icache单 元提前从内存中预取目标地址处的指令数据。从而,等到取指单元需要读取目标地址处的 指令数据时,无需再从内存读取、而是可以直接从Icache缓存中读取,进而能够针对跳转指令的目标地址处的指令数据提高对Icache缓存取指的命中率、减少CPU等待取指的时 间、提高CPU的运行效率。以下再结合具体实例,对本实施例中的方案进行更进一步的说明。参见图3a,取指单元在取指阶段希望读取PC地址=0x10000000处的指令数据1, 并将该PC地址发送给Icache单元和BTB单元。参见图3b,Icache单元在其缓存中查找到其Icache缓存有PC地址= 0x10000000的指令数据1 ;且在此过程中,BTB单元在其内部对照表中表示跳转指令地址 的 branch_addr 列中,查找到取值大于 0x10000000、离 0x10000000 最近的 branch_addr =0x10000010,即0x10000010处的指令数据为跳转指令,并在对照表中表示目标地址 白勺 target_addr ^lJ Φ, SiJcIlJ branch_addr = 0x10000010 ffiX^iSW target_addr = 0x20000000 ;虽然Icache缓存中存在PC地址=0x10000000的指令数据1,但并不一定存 在0x20000000处的指令数据2,因此,BTB单元需要将target_addr = 0x20000000提供给 Icache 单兀。参见图3c,Icache单元首先要完成对取指单元的响应,将Icache缓存中的该指令 数据1返回给取指单元,然后才开始处理BTB单元提供的target_addr = 0x20000000。参见图3d,Icache单元在Icache缓存查找是否存在PC地址与target_addr = 0x20000000相同的指令数据2,但没有查找到,因此,Icache单元向CPU外部的内存发出对 0x20000000地址处的指令数据2的读取请求,并预先提取0x20000000地址处的指令数据2 所属的一个Icache line的指令数据块到Icache缓存中。如上可见,在本实例中,当CPU执行到0x10000000的指令数据时,能够预测出该指 令数据之后还将有0x10000010处的跳转指令需要执行、且跳转目标为0x20000000,并且还 能够将0x20000000处的指令数据预取至Icache单元中,从而,CPU通过执行0x10000010处 的跳转指令而跳转至0x20000000之后,可直接从Icache单元中读取0x20000000处的指令 数据,显然,也就提高CPU在取指阶段的命中率,加速程序的运行效率。除了如上所述的包括取指单元、BTB单元、以及Icache单元的装置之外,本实施例 还提供了一种对应的方法。如图4所示,该方法主要包括S401,在取指单元需要读取一条指令数据时,将该指令数据的PC地址发送给 Icache单元和BTB单元,然后同时开始执行S402和S405。S402,从Icache单元内部的Icache缓存中查找是否存在具有该PC地址的指令 数据,如找到具有该PC地址的指令数据,则执行S403 ;如没有找到具有该PC地址的指令数 据。则执行S404。S403,用相对快的速度立即从Icache单元内部的Icache缓存中读取具有该PC地 址的指令数据、并返回给取指单元,然后等待执行S407。S404,用相对慢的速度从CPU外部的内存中读取该PC地址处的指令数据、并返回 给取指单元,还将读取的该PC地址处的指令数据所在的一个Icache line指令数据块调入 至Icache单元内部的Icache缓存中,以使得后续可以直接从Icache缓存中读取该指令数 据块中的其他指令数据、而不必再调用CPU外部的内存,然后等待执行S408。S405,在BTB单元的BTB缓存中查找将于取指单元需要读取的指令数据之后执行的跳转指令,该跳转指令的地址大于该PC地址、且相比于其他跳转指令距离该PC地址最 近,然后执行S406。如果本步骤中的查找仅限于一定的范围,则有可能在一定范围内未能查找到跳转 指令,如果没有查找到则无需动作、并可以直接在S403或S404执行完毕后即结束本流程。而且,本步骤中可以采用如前文所述的方式1、或方式2、或其他由本领域技术人 员能够想到的方式进行查找。S406, BTB单元将跳转指令的目标地址提供给Icache单元,然后等待执行S407。S407,已向取指单元返回需要读取的指令数据、且Icache单元已接收到BTB单元 提供的目标地址后,在Icache单元内部的Icache缓存中查找是否存在具有BTB单元所提 供的目标地址的指令数据,如果查找到具有该目标地址的指令数据,则表示该目标地址处 的指令数据已经在Icache缓存中,取指单元在执行跳转指令后又需要目标地址处的指令 数据时,可直接从Icache缓存中读取,因而Icache单元不需要作任何操作,只需结束本流 程、并等待取指单元针对该目标地址的指令数据开始新的流程即可;但如果没有查找到具 有该目标地址的指令数据,则表示该目标地址处的指令数据未在Icache缓存中,因此,为 了避免取指单元下次需要该目标地址处的指令数据时不得不从CPU外部的内存读取,执行 S408。S408,先从CPU外部的内存中将该目标地址处的指令数据预取到Icache单元内部 的Icache缓存中、或者将该目标地址处的指令数据所在的一 cacheline的指令数据块预取 到Icache单元内部的Icache缓存中,然后即可结束本流程,并等待取指单元针对该目标地 址的指令数据开始新的流程。至此,针对一条指令数据的取指过程、以及在该过程中预取后续跳转目标处的指 令数据的流程结束。本实施例的上述装置和方法,都是在取指单元向Icache单元发起取操作的过程 中,以取指单元当前需要的指令数据的地址为参照来推测后续跳转指令的目标地址,这样, 主要是为了能够更好地将推测跳转指令的目标地址的过程与正常的取指过程相结合,从而 使正常的取指过程能够进一步附带有推测跳转指令的目标地址的效果。当然,在实际应用中,取指单元也可以单独发起推测跳转指令的目标地址的过程。 具体来说,在任意时刻,取指单元均可将一 PC地址(该PC地址并不一定就是取指单元当前 需要读取的指令数据的PC地址)仅发送给BTB单元,令BTB单元预测符合条件的跳转指令 的目标地址,如果预测出符合条件的跳转指令的目标地址再提供给Icache单元进行后续 处理。也就是说,推测跳转指令的目标地址的过程与正常的取指过程也可以是相互独立 的,此时,由于Icache单元仍能够依据推测出的跳转指令的目标地址从内存预取目标地址 处的指令数据,因而仍能够在一定程度上避免由跳转指令所引起的Icache缓存命中率低 的问题、并提高CPU的运行效率。以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在 本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保 护范围之内。
权利要求
1.一种用于提高缓存命中率的装置,其特征在于,包括取指单元,将当前需要读取的第一指令数据的第一地址提供给BTB单元;BTB单元,根据所述第一地址在其内部缓存中查找将在所述第一指令数据之后执行的 跳转指令,若未找到则不动作,若找到则将作为所述跳转指令的跳转目标的第二地址提供 给Icache单元;Icache单元,查找其内部缓存中是否存在具有所述第二地址的第二指令数据,若存在 则不动作,若不存在则从内存中读取所述第二地址处的所述第二指令数据至其内部缓存中 保存。
2.如权利要求1所述的装置,其特征在于,BTB单元以所述第一地址为起始地址查找所 述跳转指令。
3.如权利要求1所述的装置,其特征在于,BTB单元进一步计算所述第一地址按照一线 大小的下对齐地址,并以所述下对齐地址为起始地址、在一线的范围内查找所述跳转指令。
4.如权利要求1至3中任一项所述的装置,其特征在于,Icache单元进一步从内存中 读取所述第二指令数据所属的指令数据块至其内部缓存中保存。
5.如权利要求1至3中任一项所述的装置,其特征在于,取指单元进一步将所述第一地址提供给Icache单元;Icache单元进一步在其内部缓存中查找是否存在具有所述第一地址的所述第一指令 数据,当存在时从其内部缓存中读取具有所述第一地址的所述第一指令数据返回给取指单 元,否则从内存中读取所述第一地址处的所述第一指令数据至其内部缓存中、并返回给取 指单元。
6.一种用于提高缓存命中率的方法,其特征在于,包括a、将取指单元当前需要读取的第一指令数据的第一地址提供给BTB单元;b、根据所述第一地址在BTB单元中查找将于所述第一指令数据之后被执行的跳转 指令,若未找到则不动作,若找到则将作为所述跳转指令的跳转目标的第二地址提供给 Icache 单兀;C、在Icache单元中查找是否存在具有所述第二地址的第二指令数据,若存在则不动 作,若不存在则从内存中读取所述第二地址处的所述第二指令数据至Icache单元中保存。
7.如权利要求6所述的方法,其特征在于,在步骤b中,以所述第一地址为起始地址在 BTB单元查找所述跳转指令。
8.如权利要求6所述的方法,其特征在于,在步骤b中,进一步计算所述第一地址按照 一线大小的下对齐地址,并以所述下对齐地址为起始地址、在一线的范围内查找BTB单元 中的所述跳转指令。
9.如权利要求6至8中任一项所述的方法,其特征在于,在步骤c中进一步从内存中 读取所述第二指令数据所属的指令数据块至Icache单元中保存。
10.如权利要求6至8中任一项所述的方法,其特征在于,在步骤a中进一步包括将所述第一地址提供给Icache单元;在步骤b中进一步包括在Icache单元中查找是否存在具有所述第一地址的所述第一 指令数据,当存在时从其内部缓存中读取并返回具有所述第一地址的所述第一指令数据, 否则从内存中读取所述第一地址处的所述第一指令数据至Icache单元中保存、并返回所述第一指令数据。
全文摘要
本发明公开了一种用于提高缓存命中率的装置及方法。本发明能够利用BTB单元提前推测出跳转指令的目标地址、并提供给Icache单元,因此,在取指单元需要读取目标地址处的指令数据之前,就可以由Icache单元提前从内存中预取目标地址处的指令数据。从而,等到取指单元需要读取目标地址处的指令数据时,无需再从内存读取、而是可以直接从Icache缓存中读取,进而能够针对跳转指令的目标地址处的指令数据提高对Icache缓存取指的命中率、减少CPU等待取指的时间、提高CPU的运行效率。
文档编号G06F12/02GK102087634SQ20111003257
公开日2011年6月8日 申请日期2011年1月27日 优先权日2011年1月27日
发明者陈立勤 申请人:凌阳科技股份有限公司, 北京北阳电子技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1