一种检测分支预测的方法及处理器
技术领域
本发明实施例涉及处理器技术领域,具体涉及一种检测分支预测的方法及处理器。
背景技术
现代处理器一般采用流水线技术并行处理指令,以加速指令处理效率;在处理分支指令时,为避免等待分支指令执行结果而决定分支方向的情况,大多数现代处理器均采用分支预测(Branch Prediction)技术。
分支预测可对分支指令的分支方向等结果进行预测,从而推动处理器进行下一步取指,避免等待分支指令执行结果而导致的流水线延迟。然而,分支预测也存在预测错误的可能,在出现分支预测错误时,需要清空流水线中由于分支预测错误引发的错误取指的指令,以纠正分支预测错误,这极为耗费流水线资源,扩大了流水线延迟。
发明内容
有鉴于此,本发明实施提供一种检测分支预测的方法及处理器,以在取指阶段提前发现分支预测错误,为在取指阶段提前纠正分支预测错误提供可能,从而降低分支预测错误引发的流水线资源消耗和延迟。
为解决上述问题,本发明实施例提供一种检测分支预测的方法,该方法包括:
一种检测分支预测的方法,所述方法由处理器执行,所述方法包括:
根据分支预测缓冲器存储的第一分支信息预测分支预测结果,所述分支预测结果至少包括当前取指地址;
在根据所述当前取指地址从缓存取指的阶段,如果从缓存的指令缓存块中查找到与所述当前取指地址匹配的第二分支信息,读取所述匹配的第二分支信息;其中,所述缓存的指令缓存块中存储有第二分支信息;
根据所述匹配的第二分支信息检测分支预测是否正确。
本发明实施例还提供一种处理器,所述处理器包括至少一个处理器核,所述处理器核至少包括如下逻辑:
分支预测单元,用于根据分支预测缓冲器存储的第一分支信息预测分支预测结果,所述分支预测结果至少包括当前取指地址;
缓存,用于在根据所述当前取指地址从缓存取指的阶段,如果从缓存的指令缓存块中查找到与所述当前取指地址匹配的第二分支信息,读取所述匹配的第二分支信息;其中,所述缓存的指令缓存块中存储有第二分支信息;
决策逻辑单元,用于根据所述匹配的第二分支信息检测分支预测是否正确。
本发明实施例的技术方案具有以下优点:
本发明实施例除在分支预测单元存储第一分支信息,还在缓存的指令缓存块中存储第二分支信息;从而在分支预测单元输出分支预测结果,根据分支预测结果的当前取指地址进行取指的阶段,如果从缓存的指令缓存块中查找到与所述当前取指地址匹配的第二分支信息,则可根据所匹配的第二分支信息,检测分支预测是否正确;以此在取指阶段,基于缓存的指令缓存块中存储的第二分支信息,检测分支预测。
本发明实施例可基于分支预测是否正确的检测结果,在取指阶段发现分支预测错误时,为在取指阶段提前纠正分支预测错误提供可能,从而减少流水线中填充入由于分支预测错误引发的指令和相应的执行结果的情况,减少译码或者执行阶段发现分支预测错误并纠正分支预测错误的情况,可极大的降低分支预测错误引发的流水线资源消耗和延迟。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为计算机系统体系结构的可选框图;
图2为与内存耦合的处理器的可选框图;
图3为包含使用流水线技术的处理器核的处理器可选框图;
图4为本发明实施例提供的处理器的架构框图;
图5为本发明实施例提供的处理器的另一架构框图;
图6为本发明实施例提供的处理器的再一架构框图;
图7为本发明实施例提供的处理器的又一架构框图;
图8为本发明实施例提供的检测分支预测的方法示意图;
图9为本发明实施例提供的检测分支预测是否正确的方法示意图;
图10为本发明实施例列举的分支预测错误情况及重定向取指起始地址情况的示例图;
图11为本发明实施例提供的处理器的又另一架构框图;
图12为本发明实施例提供的处理器的又再一架构框图;
图13为本发明实施例提供的处理器的另又一架构框图;
图14为本发明实施例提供的搬移指令缓存块的示意图;
图15为本发明实施例提供的查找匹配的第二分支信息的方法示意图;
图16为本发明实施例提供的更新第一表项的可选示意图;
图17为本发明实施例提供的更新第一表项的方法示意图;
图18为本发明实施例提供的更新第一表项的另一可选示意图;
图19为本发明实施例提供的确定更新第二表项的方法示意图;
图20为本发明实施例提供的更新第二表项的方法示意图。
具体实施方式
在基于BTB(Branch Target Buffer,分支目标缓冲器)的分支预测场景下,本发明实施例可在缓存中存储分支信息,从而在取指阶段利用缓存中存储的分支信息判断分支预测结果是否正确;以在判断分支预测错误时,为在取指阶段纠正分支预测错误提供可能,从而减少流水线中填充入由分支预测错误引发的指令和相应的执行结果的情况,降低流水线的资源消耗和延迟。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
作为本发明实施例公开内容的一个可选示例,图1示例性的示出了计算机系统体系架构的一种框图;应该说明的是,该框图是为便于理解本发明实施例公开内容而示出,本发明实施例并不限于图1所示架构。
参考图1,计算机系统1可包括:处理器11,与处理器11耦合的内存12,与处理器耦合的南桥13。
处理器11可包括CISC(复杂指令集计算机)微处理器、RISC(精简指令集计算机)微处理器、VLIW(超长指令字)微处理器、实现指令集的组合的处理器或诸如数字信号处理器的任何其它处理器装置。
处理器11可集成用于执行至少一个指令的至少一个处理器核100,处理器核100表示任何类型的体系结构的处理器核,如RISC处理器核、CISC处理器核、VLIM处理器核或混合处理器核等。处理器核100可以以任何适合的方式实现,在处理器11集成多个处理器核100的情况下,处理器核可在体系结构和/或指令集方面是同构或异构的;在一种可选实现中,一些处理器核可以是有序的,而其它处理器核可以是乱序的,在另一种可选实现中,两个或更多个处理器核可执行相同指令集,而其它处理器核可执行该指令集的子集或不同指令集。
作为一种可选示例,处理器11内可集成内存控制器等部件,并对外提供内存接口等;处理器11可通过内存接口耦合到内存12。同时,处理器11可耦合到处理器总线,并通过处理器总线耦合到南桥13。
作为一种可选示例,南桥13可以集成与计算机系统其它组件相通信的总线接口14,从而通过南桥13实现处理器11与计算机系统1中大部分其他组件的信号传递;计算机系统的组件可根据实际情况增设和调整,此处不进行逐一说明;
在一个可选示例中,南桥13所集成的总线接口14包括但不限于:存储器(如硬盘)总线接口、USB总线接口、网络控制器总线接口、PCIE总线接口等。
需要说明的是,图1示例框图中处理器和南桥的耦合结构是基本的,但处理器和南桥的具体细化结构可视具体使用情况设置、调整和/或扩展,并不固定。
在其他的计算机系统体系结构中,例如在分设南桥和北桥的计算机系统体系结构中,内存控制也可能由北桥提供,如北桥主要负责显卡、内存与处理器之间的信号传递,并且向上耦合处理器,向下耦合南桥;南桥主要负责硬盘、外设以及各种对带宽要求较低的IO(输入输出)接口与内存、处理器之间的信号传递。
上述所述是处理器与南桥式的计算机体系结构,在计算机体系结构的其他示例中,也可能通过SoC(System on Chip,片上系统)实现计算机体系结构;示例性的,SoC可集成处理器、内存控制器、以及IO接口等,并且SoC可通过与外部的内存、IO设备、网卡等其他组件相耦合,实现在单个主要芯片上搭建计算机体系结构。
需要进一步说明的是,以上描述的结构并不限于计算机系统,也可在诸如手持式装置和具有嵌入式应用的其他装置中使用;手持式装置的一些示例包括蜂窝电话、因特网协议装置、数码相机、个人数字助理(PDA)或手持式PC(personal computer,个人计算机)。具有嵌入式应用的其他装置可包括网络计算机(Net PC)、置顶盒、服务器、宽域网(WAN)交换机、或可执行至少一个本发明公开实施例的一个或更多个指令的任何其他系统。
另外,上述所述的处理器并不限于CPU(Central Processing Unit,中央处理器),还可以是加速器(例如,图形加速器或数字信号处理单元)、GPU(Graphics ProcessingUnit,图形处理器)、现场可编程门阵列或任何其它具有指令执行功能的处理器。上述虽然是以单处理器进行的示例说明,但在实际情况下,计算机体系结构可能存在多个处理器,每一处理器具有至少一个处理器核。
作为本发明实施例公开内容的一个可选示例,图2示例性的示出了与内存耦合的处理器的框图;应该说明的是,该框图是为便于理解本发明实施例公开内容而示出,本发明实施例并不限于图2所示架构。
参考图2,处理器11可包括:至少一个处理器核100(图2所示多个处理器核的情况仅是一种可选示例);每个处理器核100的内部可驻留至少一个私有缓存210;同时,至少一个共享缓存220驻留在处理器核100的外部,并被所述至少一个处理器核100所共享;共享缓存220访问内存12,并在处理器核100和内存12之间传递信号。可选的,在图2所示架构的基础上,本发明实施例也可在处理器11外部设置外部共享缓存,由外部共享缓存在处理器11与内存12之间传递信号。
需要说明的是,处理器也可以包括对理解本发明实施例公开内容不是必需的其他电路(未示出),鉴于所述其他电路对于理解本发明实施例公开内容并不是必需的,本发明实施例就不再赘述。
缓存(如高速缓存cache)是在处理器核100和内存12之间的存取速度极快的存储单元,一般具有多级结构;较为常见的是三级缓存结构,分为一级(L1)缓存,二级(L2)缓存和三级(L3)缓存;当然,本发明实施例也可支持多于三级缓存或小于三级缓存的结构。
作为一种可选示例,每个处理器核100内部可集成L1缓存和L2缓存,即私有缓存210可以包括:L1缓存和L2缓存;共享缓存220可以包括L3缓存,L3缓存被所述至少一个处理器核100所共享;当然,这种缓存设置方式仅是一种示例,也可能是L2和L3缓存作为共享缓存,或者在设置多于三级缓存结构的情况下,也可能将L1、L2和L3缓存均集成在处理器核内作为私有缓存。
现代微处理器架构一般使用流水线(pipeline)技术实现多条指令的并行处理,并结合使用分支预测、乱序执行(out of order execution)等技术提升流水线的执行效率。作为本发明实施例公开内容的一个可选示例,图3示例性的示出了包含使用流水线技术的处理器核的处理器框图;应该说明的是,该框图是为便于理解本发明实施例公开内容而示出,本发明实施例并不限于图3所示架构。
作为一种可选示例,五级流水线的处理过程可以分为取指(Instruction Fetch)、译码(Instruction Decode)、执行(Execute)、访存(Memory Access)和写回(Write Back);为解决在处理分支指令时,处理器核等待分支指令的执行结果来确定下一步取指而导致的流水线延迟,流水线的前端可设置分支预测单元,以实现分支预测。分支指令通常分为两种情况:分支指令不跳转,则下一步指令为分支指令下一步顺序的指令;分支指令跳转,则下一步指令为跳转到的指令。
参考图3,处理器11可以包括:分支预测单元101,取指单元102,译码单元103,执行引擎单元104,访存单元105,写回单元106,缓存200;
其中,分支预测单元101,取指单元102,译码单元103,执行引擎单元104,访存单元105,写回单元106可以是集成在处理器核内的逻辑电路单元,处理器核包括但不限于图1或图2所示处理器核100;
可选的,缓存200中的全部或部分可集成在处理器核内;作为一种示例,结合图2所示,缓存200可以包括:集成到处理器核内的至少一个私有缓存210,驻留在处理器核外的至少一个共享缓存220;
当然,本发明实施例也支持缓存200中的全部集成在处理器核内,在某些情况下,本发明实施例也可支持缓存200中的全部驻留在处理器核外;
需要说明的是,无论集成在处理器核内和驻留在处理器核外的缓存层级如何设置;可选的,通常来说,上一层缓存可缓存来自下一层缓存的信息,如L1缓存可缓存来自L2缓存的信息,当然这种设置方式仅是可选的,本发明实施例并不局限于此。
分支预测单元101可进行分支预测,得到分支预测结果,如当前指令是否为分支指令、分支指令的分支结果(方向、地址、目标地址等)等;在一种实现中,可基于分支指令的历史执行信息和结果进行分支预测。
基于分支预测单元101的分支预测结果,取指单元102可通过缓存200读取当前取指的指令(包括但不限于读取分支指令、逻辑运算指令、访存指令等),并馈送到译码单元103;在一种可选实现中,取指单元102可将读取的指令存放入处理器核100的指令寄存器,以便译码单元103从指令寄存器读取指令进行译码。
译码单元103可解释指令,得出译码结果;译码结果可以是解释指令所得出的可由机器执行的操作信息,诸如解释指令的操作码、操作数和控制字段所形成的机器可执行的uop(微指令)等;可选的,译码单元103可从寄存器文件中读取源操作数并解析操作码产生控制信号。
执行引擎单元104可基于译码单元的译码结果执行运算,产生执行结果(执行结果与取指指令的指令功能相应,涉及访存、逻辑运算结果、指令跳转等);可选的,执行引擎单元104可支持乱序执行技术。
访存单元105可基于执行引擎单元104对访存指令的执行结果执行访存。
写回单元106可基于执行引擎单元104对指令的执行结果,或者访存单元105对LOAD指令的执行结果,将执行结果写回寄存器文件。
需要说明的是,图3示例性的示出了一种五级流水线的处理器核架构,而随着技术调整,流水线中不同阶段的逻辑电路单元也可能相整合或者分离,其架构并不固定;同时,本发明实施例的处理器核也可在四级流水线等其他流水线技术中适用。
可以理解的是,处理器核也可以包括对理解本发明实施例公开内容不是必需的其他电路(未示出),鉴于所述其他电路对于理解本发明实施例公开内容并不是必需的,本发明实施例就不再赘述。
在本发明实施例中,分支预测单元可基于BTB实现,BTB是通过将分支成功的分支指令的分支信息存放到分支目标缓冲器,以进行分支预测的技术。
在使用分支预测单元的过程中,本发明的发明人发现:随着应用程序的代码空间增大,分支目标缓冲器的容量缺失越来越严重(即分支目标缓冲器的容量上限已不足以记录足够的分支信息);当分支目标缓冲器的容量达到上限、发生容量冲突时,为记录新的分支信息,分支目标缓冲器会替换已存储的分支信息,将一些已存储的分支信息踢出分支目标缓冲器;分支信息的替换规则可根据实际情况设置,包括但不限于:优先替换时间最早、使用频度最低等的分支信息;
分支目标缓冲器踢出的分支信息极有可能导致分支指令的访问缺失(即分支指令在分支目标缓冲器中未命中分支信息),这会使得在当前指令为分支指令时,分支预测单元不认为当前指令为分支指令,从而判断下一步进行连续取指,导致分支预测错误;
基于现代处理器对分支预测错误的处理,一般需要到译码或者执行阶段才能发现分支预测错误并纠正;在译码或者执行阶段发现分支预测错误时,纠正分支预测错误的过程主要是:从预测错误的指令开始,清空流水线中已填充入的错误取指的指令,并进行重定向。
可以看出,纠正分支预测错误的过程,将使得流水线中由于分支预测错误引发的错误取指的指令均被清空,然后重新取指,这无疑极为耗费流水线资源,扩大了流水线延迟。
为解决上述问题,本发明的发明人经过研究提出一种改进方法,以在取指阶段提前发现分支预测错误;进一步可在发现分支预测错误时,提前纠正分支预测错误,降低分支预测错误引发的流水线资源消耗和延迟。
作为本发明实施例公开内容的一个可选实施例,图4示例性的示出了本发明实施例提供的处理器的架构框图;需要说明的是,处理器也可以包括对理解本发明实施例公开内容不是必需的其他电路(未示出)。
参考图4,处理器可以包括:分支预测单元101,决策逻辑单元107,以及缓存200;
其中,分支预测单元101,决策逻辑单元107可集成于处理器核内;缓存200中的部分或全部可集成于处理器核内;当然,本发明实施例也支持缓存200全部驻留在处理器核外的情况,也可支持决策逻辑单元107驻留在处理器核外的情况。
在本发明实施例中,分支预测单元101可以包括:分支目标缓冲器1011,分支目标缓冲器1011记录有分支指令的分支信息(为便于说明,分支目标缓冲器记录的分支信息可称为第一分支信息);
分支预测单元可利用分支目标缓冲器中记录的第一分支信息进行分支预测,输出分支预测结果;示例的,分支预测结果可以包括当前取指地址,当前取指地址可用于从缓存200中读取相应的指令。
为解决分支目标缓冲器的容量缺失问题,本发明实施例可在缓存200的指令缓存块中存储分支信息(为便于说明,缓存的指令缓存块中存储的分支信息可称为第二分支信息),从而实现分支目标缓冲器1011的容量扩充;
基于此,在根据分支预测单元输出的当前取指地址进行取指时,如果从缓存的指令缓存块中查找到与所述当前取指地址匹配的第二分支信息,则决策逻辑单元107可根据所匹配的第二分支信息,检测分支预测是否正确;以此在取指阶段,基于缓存的指令缓存块中存储的第二分支信息,检测分支预测(即检测分支预测是否正确)。
在本发明实施例中,基于分支预测是否正确的检测结果,处理器可在取指阶段发现分支预测错误时,纠正分支预测错误,从而减少译码或者执行阶段发现分支预测错误并纠正分支预测错误的情况;本发明实施例为在取指阶段纠正分支预测错误,降低分支预测错误引发的流水线资源消耗和延迟提供了可能,可极大的降低分支预测错误引发的流水线资源消耗和延迟;显然,纠正分支预测错误,仅是本发明实施例在取指阶段发现分支预测错误的一种可选处理方案,本发明实施例并不限制其他可能的处理方案。
在一种可选实现中,分支目标缓冲器可以具有多个表项(为便于说明,本发明实施例称分支目标缓冲器中的表项为第一表项),一个第一表项可以表示一条第一分支信息;
第一表项可以具有多个域(字段),作为一种可选实现,第一表项可具有如下域:Tag(标签)域,位置域,类型域,目标地址域;其中,第一表项的Tag域作为分支信息的标签信息,可记录分支指令的部分起始地址,位置域主要记录分支指令的地址,类型域主要记录分支指令的指令类型,目标地址域主要记录分支指令跳转的目标地址;
显然,上述第一表项所具有的域仅是可选的,本发明实施例也可支持第一表项中域的增加、删减等调整,并不固定限制第一表项所使用的域;如基于第一分支信息的内容设置不同,第一表项的域可适应调整。
可选的,本发明实施例可在缓存200的指令缓存块中存储第二表项(为便于说明,本发明实施例将缓存的指令缓存块中的表项称为第二表项),一个第二表项可以表示一条第二分支信息;在本发明实施例中,第二表项可与所在的指令缓存块相关联,且复用所在的指令缓存块的Tag域;
在本发明实施例中,第二表项与第一表项相比,第二表项可不具有Tag域,但第二表项可具有第一表项中除Tag域外的其他域;作为一种可选示例,第二表项可具有如下域:位置域,类型域,目标地址域;当然,基于第二分支信息的内容设置不同,第二表项的域可适应调整,本发明实施例并不作固定限制。
作为一种可选实现,下文涉及第一分支信息的描述可使用第一表项表示第一分支信息,涉及第二分支信息的描述可使用第二表项表示第二分支信息。
进一步,作为本发明实施例在取指阶段发现分支预测错误的一种可选处理方案,决策逻辑单元可通过向分支预测单元反馈重定向的取指起始地址,纠正分支预测错误。
作为一种可选示例,图5示例性的示出了本发明实施例提供的处理器的另一架构框图;需要说明的是,处理器也可以包括对理解本发明实施例公开内容不是必需的其他电路(未示出);
参照图5,分支预测单元还可以包括:选择单元1012;选择单元1012可基于输入的取指起始地址(重定向的取指起始地址,或分支预测单元输出的下一步取指起始地址),选择当前取指起始地址;
基于当前取指起始地址和分支目标缓冲器1011存储的第一分支信息,分支预测单元可输出分支预测结果;所述分支预测结果可包括当前取指地址以及下一步取指起始地址;进一步,当前分支预测结果还可以包括指令是否跳转、跳转的地址等信息;
示例的,当前取指地址可包括当前取指起始地址以及预测的当前取指结束地址;
下一步取指起始地址可作为下一次分支预测的输入,以此不断的驱动分支预测单元运作;而在发生分支预测错误时,重定向的取指起始地址将作为分支预测单元的输入。
一般情况下,重定向的取指起始地址由译码单元或执行引擎单元提供,本发明的发明人创造性的提出:在取指阶段,如果从缓存的指令缓存块中查找到与所述当前取指地址匹配的第二分支信息,则可根据匹配的第二分支信息检测分支预测是否正确;并在检测分支预测错误时,由分支决策单元107重定向取指起始地址。以此,可减少流水线中填充入由于分支预测错误引发的指令和相应的执行结果,极大程度的降低由于分支预测错误而清空流水线的情况,提升了流水线的运行流畅性,降低了流水线的资源消耗和延迟。
可选的,以基于多预测器的BTB技术为例进行说明,图6示例性的示出了本发明实施例提供的处理器的再一架构框图;需要说明的是,图6所示仅是基于多预测器的BTB技术的一种可选架构示例,其是为便于理解和说明本发明实施例方案而示出,本发明实施例方案并不限于图6所示架构,也可支持其他架构的分支预测单元;另外,处理器也可以包括对理解本发明实施例公开内容不是必需的其他电路(未示出)。
参考图6,分支预测单元101还可以包括:至少一个预测器1013,预测决策单元1014;
在本发明实施例中,选择单元1012可基于输入的取指起始地址(重定向的取指起始地址,或预测决策单元1014输出的下一步取指起始地址),选择当前取指起始地址;
若选择单元1012输出的当前取指起始地址命中分支目标缓冲器1011记录的第一分支信息,则分支目标缓冲器1011可确定命中的第一分支信息;
示例性的,通过命中的第一分支信息可确定分支指令的类型、位置、目标地址等分支信息;分支预测单元可根据分支指令的类型,访问相应的预测器1013,由所访问的预测器提供预测给预测决策单元1014;同时,分支目标缓冲器可将命中的第一分支信息的结果提供给预测决策单元1014。
示例的,结合图6和图7所示,在分支预测单元101中,至少一个预测器1013可以包括:方向预测器10131,返回地址预测器10132,间接分支预测器10133;
如果分支指令的类型为Jcc(条件分支指令),则访问方向预测器10131,预测分支指令是否跳转;如果分支指令的类型为Return(返回指令),则访问返回地址预测器,预测分支指令的返回地址;如果分支指令的类型为间接分支,则访问间接分支预测器,预测分支指令的目标地址;如果分支指令的类型为非条件分支,则不需要访问预测器,分支目标缓冲器可基于自身存储的第一分支信息提供预测。
预测决策单元1014可综合分支目标缓冲器1011的预测和至少一个预测器1013提供的预测结果,确定当前取指结束地址和下一步取指起始地址;从而基于当前取指起始地址和当前取指结束地址,分支预测单元可输出当前取指地址,以在缓存200中读取相应的指令。同时,预测决策单元1014将下一步取指起始地址反馈给选择单元1012,以驱动下一周期的分支预测。
作为一种示例,分支预测逻辑主要包括:如果分支预测单元预测分支指令不跳转,或者预测没有分支指令,则当前取指结束地址可以为预先设定的边界(如64字节对应的边界)或者分支指令的结束地址,而下一步取指起始地址可以为当前取指结束地址+1;
如果分支预测单元预测分支指令跳转,则输出的当前取指结束地址为分支指令的结束地址,下一步取指起始地址为分支指令的目标地址(即分支指令跳转的地址)。
可以看出,如果分支目标缓冲器由于容量缺失,导致部分第一分支信息被踢出分支目标缓冲器,那么分支预测单元将预测当前指令不为分支指令,从而进行连续取指,引发分支预测错误;这也正是本发明实施例改进处理器逻辑,以在取指阶段检测分支预测的原因之一。
上文示例性的示出了本发明实施例提供的处理器架构;从处理器运行方法上来看,处理器可执行图8所示检测分支预测的方法;图8所示方法可由处理器执行,可选的,可由处理器内设置的逻辑电路单元执行图8所示方法(即通过硬化逻辑电路执行方法),在某些情况下,也可通过代码控制处理器内设置的逻辑电路单元执行图8所示方法(即通过软硬结合执行方法);下文涉及处理器逻辑的描述,可认为是针对处理器的逻辑电路单元而言。
参考图8,该方法可以包括:
步骤S10、根据分支预测缓冲器存储的第一分支信息预测分支预测结果,所述分支预测结果至少包括当前取指地址。
可选的,可由处理器的分支预测单元执行步骤S10。
其中,分支预测单元可利用分支目标缓冲器存储的第一分支信息进行分支预测,并输出分支预测结果;分支预测结果可包括当前取指地址,进一步可包括下一步取指起始地址;当然,分支预测结果还可包括分支指令是否跳转,跳转的地址等信息。
步骤S11、在根据所述当前取指地址从缓存取指的阶段,从缓存的指令缓存块中查找是否存在与所述当前取指地址匹配的第二分支信息。
可选的,可由处理器的缓存执行步骤S11。
步骤S12、如果从缓存的指令缓存块中查找到与所述当前取指地址匹配的第二分支信息,读取所述匹配的第二分支信息。
可选的,可由处理器的缓存执行步骤S12。
在步骤S11中,所述当前取指地址在缓存的指令缓存块中匹配到第二分支信息,则可认为分支预测可能存在错误(如可能由于分支目标缓冲器缺失第一分支信息而导致分支预测错误)。
可选的,在步骤S11中,若当前取指地址未在缓存的指令缓存块中匹配到第二分支信息,则可执行后续流水线。
步骤S13、根据匹配的第二分支信息检测分支预测是否正确。
可选的,步骤S13可由决策逻辑单元执行;在一种可选实现上,决策逻辑单元可以是设置于L1缓存内的逻辑电路单元。
可选的,执行上述方法步骤的逻辑电路单元并不限于上述说明,处理器可根据设计和使用需要,设置相应的逻辑执行上述方法步骤。
作为步骤S13的一种可选实现,本发明实施例可根据匹配的第二分支信息,查找当前取指起始地址和当前取指结束地址之间是否存在分支指令,或者,在当前取指结束地址的位置上是否存在分支指令;如果存在分支指令,则可至少根据分支指令的类型,检测分支预测是否正确;
分支指令的类型包括但不限于非条件分支指令(如非条件直接分支指令)、返回指令、条件分支指令等;不同的分支指令类型,检测分支预测是否正确的规则可以不同,原则上,只要发现分支预测结果中携带有错误的分支预测信息则认为分支预测错误。
需要说明的是,第二分支信息和第一分支信息记录的信息类型大部分一致,如第二分支信息至少记录了分支指令的类型,位置(地址)和目标地址;在从缓存查找到当前取指地址匹配的第二分支信息后,基于匹配的第二分支信息记录的分支指令的地址,以及当前取指起始地址和当前取指结束地址,本发明实施例可查找出当前取指起始地址和当前取指结束地址之间存在的指令,或者在当前取指结束地址的位置上存在的指令,并确定当前取指起始地址和当前取指结束地址之间,或者在当前取指结束地址的位置上是否存在分支指令。
可选的,步骤S13检测分支预测正确,则可执行后续流水线;可选的,步骤S13检测分支预测正确可以包括:当前取指起始地址和当前取指结束地址之间不存在分支指令,且在当前取指结束地址的位置上不存在分支指;或者,在当前取指起始地址和当前取指结束地址之间存在分支指令,或,在当前取指结束地址的位置上存在分支指令的情况下,检测分支预测正确。
作为一种可选示例,在确定匹配的第二分支信息后,处理器可通过执行图9所示方法检测分支预测是否正确,并在分支预测错误时,纠正分支预测错误;参照图9,该方法可以包括:
步骤S20、根据匹配的第二分支信息指示的分支指令的地址,查找当前取指起始地址和当前取指结束地址之间,或者在当前取指结束地址的位置上查找是否存在分支指令。
可选的,如果当前取指起始地址和当前取指结束地址之间不存在分支指令,且在当前取指结束地址的位置上不存在分支指令,则认为分支预测正确。
步骤S21、如果当前取指起始地址和当前取指结束地址之间存在分支指令,或者在当前取指结束地址的位置上存在分支指令,至少根据该分支指令的类型检测分支预测是否正确。
可选的,步骤S20和步骤S21可以认为是步骤S13的一种可选实现,本发明实施例并不排除步骤S13的其他实现可能。
步骤S22、如果检测分支预测错误,则重定向取指起始地址。
可选的,步骤S20至步骤S22可由决策逻辑单元执行,决策逻辑单元可设计相应的逻辑执行上述步骤。
可选的,决策逻辑单元107可将重定向的取指起始地址作为分支预测单元的输入,以纠正分支预测错误;由于纠正分支预测错误是在取指阶段执行,并不涉及到译码、执行等阶段,因此可极大程度的降低由于分支预测错误而清空流水线的情况,提升了流水线的运行流畅性,降低了流水线的资源消耗和延迟。
在步骤S21的一种可选实现方面,本发明实施例可直接根据当前取指起始地址和当前取指结束地址之间存在的分支指令的类型,检测分支预测是否正确;可选的,如果当前取指起始地址和当前取指结束地址之间存在的分支指令的类型为非条件分支指令,则认为分支预测错误;需要说明的是,此处所指的非条件分支指令在某些情况下需要排除indirect jmp(间接跳转指令);
示例性的,非条件分支指令可以包括:非条件直接分支指令或返回指令;如果当前取指起始地址和当前取指结束地址之间的分支指令的类型为非条件直接分支指令或返回指令,则检测分支预测错误。
示例性的,在步骤S22重定向取指起始地址时,如果分支指令的类型为非条件直接分支指令(直接分支指令如Direct Jmp、Direct Call等),则可根据匹配的第二分支信息指示的目标地址进行重定向,使重定向的取指起始地址为匹配的第二分支信息指示的目标地址;
示例性的,在步骤S22重定向取指起始地址时,如果分支指令的类型为返回指令(Return等),则可使重定向的取指起始地址为返回指令的起始地址。
在步骤S21的另一种可选实现方面,本发明实施例可根据当前取指结束地址的位置上存在的分支指令的类型,分支预测结果和匹配的第二分支信息,检测分支预测是否正确;
可选的,如果在当前取指结束地址的位置上存在的分支指令的类型为直接分支指令,则可根据分支预测结果是否跳转,以及预测的跳转地址与匹配的第二分支信息指示的目标地址,检测分支预测是否正确;
示例性的,如果在当前取指结束地址的位置上存在直接分支指令(如Direct Jmp、Direct Call、Jcc等),且分支预测结果为指令跳转,但预测的跳转地址不等同于匹配的第二分支信息指示的目标地址,则可检测分支预测错误,否则认为分支预测正确;从而,在步骤S22重定向取指起始地址时,重定向的取指起始地址为匹配的第二分支信息指示的目标地址;
可选的,分支预测正确的情况可以包括:在分支预测结果为指令不跳转,或者,指令虽然跳转、但指令跳转的地址等同于匹配的第二分支信息指示的目标地址。
综上示例说明,图10列举了分支预测错误情况及重定向取指起始地址情况的示例,可与上文示例相互参照。
作为一种可选实现,本发明实施例中存储第二分支信息的缓存可以包括:L1缓存;L1缓存包括指令缓存,指令缓存主要通过指令缓存块存储指令。作为改进,本发明的发明人提出扩容L1缓存,以通过扩容的存储空间存储第二分支信息;示例的,图11示例性的示出了本发明实施例提供的处理器的又另一架构框图,需要说明的是,处理器也可以包括对理解本发明实施例公开内容不是必需的其他电路(未示出);
结合图4和图11所示,L1缓存01可以包括多个指令缓存块,每一个指令缓存块除包括存储指令的指令存储空间011外,还包括存储第二分支信息的分支信息存储空间012;
示例的,以L1缓存的每个指令缓存块存储64字节的指令为例,本发明实施例在扩容L1缓存的指令缓存块后,可保持L1缓存的指令缓存块数量不变(当然也支持提升指令缓存块数量的情形),但每个指令缓存块的容量提升到72字节,其中,每个指令缓存块中存储指令的指令存储空间还是64字节,额外的8字节分支信息存储空间可用于存储第二分支信息;此段的数值仅为示例说明,以便理解本发明实施例提供的一种可选的L1缓存的存储空间扩容方式;
需要说明的是,图11中指令存储空间011或分支信息存储空间012在指令缓存块中是连续的存储空间,但本发明实施例也可支持指令存储空间011或分支信息存储空间012在指令缓存块中是不连续的存储空间。
可选的,在本发明实施例中,分支目标缓冲器1011可以是多个第一表项的缓存结构,基于第一表项的处理器的架构可如图12示例性示意,至少结合图4,图11和图12所示:
分支目标缓冲器1011可以包括多个第一表项;一个第一表项可以表示一条第一分支信息;示例的,一个第一表项可具有如下域:Tag域,位置域,类型域,目标地址域。
其中,第一表项的Tag域作为分支信息的标签信息,可记录分支指令的部分起始地址,在进行分支预测时,可基于当前取指起始地址与Tag域的匹配,查找当前取指起始地址是否命中第一表项;
若是,则可基于命中的第一表项,实现与当前取指起始地址相应分支指令的类型、地址、目标地址的预测,从而使得分支预测单元能够预测当前取指结束地址和下一步取指起始地址;
若否,则当前指令不为分支指令,进行连续取指(下一步取指起始地址为当前取指结束地址+1)。
示例的,图12还示出了L1缓存01的指令缓存块可通过第二表项表示第二分支信息,即指令缓存块的分支信息存储空间012中可以存储至少一个第二表项;并且每个第二表项复用所在指令缓存块的Tag域;
需要说明的是,一个指令缓存块可记录的第二表项数量,需视指令缓存块中分支信息存储空间大小,以及第二表项的大小而定,本发明实施例可支持一个指令缓存块存储一个表项或多个表项的情况(即一个指令缓存块的分支信息存储空间可存储一个或多个表项)。
示例的,参考图12,一个第二表项可具有如下域:位置域,类型域,目标地址域;需要注意的是,本发明的发明人认为,指令缓存块中所存储的第二表项可与指令缓存块相关联,因此指令缓存块所存储的第二表项可复用所在的指令缓存块的Tag域,而不再在第二表项中设置Tag域,由此可一定程度的减小第二表项(即第二分支信息)的数据量,有效的利用指令缓存块的空间资源。
基于此,本发明实施例可查找当前取指地址是否命中L1缓存的指令缓存块的Tag域;可选的,图8所示步骤S12所述的从缓存的指令缓存块中查找到与所述当前取指地址匹配的第二分支信息可以包括:
在当前取指地址命中L1缓存的指令缓存块的Tag域时,确定L1缓存中复用命中Tag域的第二表项,根据所述复用命中Tag域的第二表项,确定与所述当前取指地址匹配的第二表项。
需要说明的是,如果L1缓存的一个指令缓存块存储一个第二表项,则可读取L1缓存中复用命中Tag域的第二表项,实现读取匹配的第二表项;
如果L1缓存的一个指令缓存块存储多个第二表项,则可确定L1缓存中复用命中Tag域的多个第二表项,从复用命中Tag域的多个第二表项中确定,记录的分支指令地址与所述当前取指地址匹配的第二表项,实现读取匹配的第二表项。
可以理解的是,各个第二表项具有记录分支指令地址的位置域,且当前取指地址包括当前取指起始地址和结束地址,因此在复用命中Tag域的第二表项为多个时,可通过各第二表项记录的分支指令地址与当前取指起始地址和结束地址的比对,来读取与当前取指地址匹配的第二表项。
作为一种可选实现,如图13所示处理器的架构示例,本发明实施例中存储分支信息的缓存200可以包括:L1缓存01和至少一个下级缓存02,其中下级缓存的层级低于L1缓存;所述至少一个下级缓存可以是层级低于L1缓存的一个或多个缓存,例如L1缓存之下的L2缓存、L3缓存等之中的至少一个;所述至少一个下级缓存的部分或全部可集成在处理器核内;
在本发明实施例中,L1缓存01为单独的指令缓存(仅缓存指令),所述至少一个下级缓存02共同缓存数据和指令(同时具有数据缓存块和指令缓存块);如以三层缓存架构为例,L1缓存作为指令缓存仅缓存指令,L2缓存和L3缓存(所述至少一个下级缓存02的一种可选实现)可共同缓存数据和指令。
本发明的发明人发现:指令缓存由于其只读的特性,可使用奇偶校验进行保护,而所述至少一个下级缓存02通常使用ECC(Error Correcting Code,错误检查和纠正)进行保护;由于所述至少一个下级缓存包含了指令缓存块,因此可设置所述至少一个下级缓存02中的指令缓存块也使用奇偶校验进行保护,从而可空余出所述至少一个下级缓存的指令缓存块中的ECC空间。
基于此项发现,本发明的发明人提出所述至少一个下级缓存02中存放指令的指令缓存块使用奇偶校验进行保护,从而利用指令缓存块的ECC空间存储第二分支信息,进一步实现分支信息的存储扩容;
如图13所示示例,L1缓存01的说明可参照图11和图12部分,此处不再赘述;
需要说明的是,图13所示的至少一个下级缓存02中,灰色部分代表数据缓存块(用于存放数据),白色部分代表指令缓存块(用于存放指令);
示例的,数据缓存块和指令缓存块均包括:Tag域,data域和ECC域;在本发明实施例中,数据缓存块的data域可记录数据信息,指令缓存块的data域可记录指令信息,数据缓存块的ECC域可用于为数据缓存块提供ECC保护,而指令缓存块则使用奇偶校验保护,指令缓存块的ECC域所对应的ECC空间用于存储第二分支信息;
在所述至少一个下级缓存02中,指令缓存块的ECC空间可通过第二表项表示第二分支信息;ECC空间中的第二表项的说明与图12所示分支信息存储空间012中第二表项的说明一致,两者可相互参照;示例的,ECC空间中的第二表项与所在指令缓存块相关联,ECC空间除通过第二表项的位置域,类型域和目标地址域记录第二分支信息外,还复用所在指令缓存块的Tag域;
ECC空间中存储的第二表项数量,需视ECC空间大小以及第二表项的大小而定,本发明实施例可支持一个指令缓存块存储一个表项或多个表项的情况。
需要注意的是,分支信息存储空间012是L1缓存01的指令缓存块中扩容的用于存储分支信息的空间,本发明实施例可设置分支信息存储空间的大小等同于所述ECC空间的大小;示例的,以传统64字节大小的指令缓存块为例,所述至少一个下级缓存02中指令缓存块的ECC空间一般是8字节,相应的,可设置L1缓存01中指令缓存块扩容的分支信息存储空间为8字节,当然此处数值示例仅是为便于理解本段说明,其不应理解成是对本发明保护范围的一种限制。
设置分支信息存储空间的大小等同于ECC空间,其一种可选目的是:当指令缓存块在L1缓存和所述至少一个下级缓存间搬移时,可使得关联的第二表项也随指令缓存块搬移,从而实现指令缓存块关联的第二表项,与指令缓存块存放位置的同步;
示例的,图14示出了在L1缓存和所述至少一个下级缓存间搬移指令缓存块的示意,参照图14,搬移指令缓存块主要分为:从至少一个下级缓存02回填指令缓存块到L1缓存01的过程(如图实线箭头所示),以及从L1缓存01写回指令缓存块到至少一个下级缓存02的过程(如图虚线箭头所示);
可选的,搬移指令缓存块可由L1缓存执行,L1缓存可通过设计相应逻辑搬移指令缓存块,当然,本发明实施例也可支持由处理器设计其他的逻辑搬移指令缓存块;
可选的,当L1缓存01缺失指令缓存块,需从至少一个下级缓存02回填指令缓存块到L1缓存时,可将所回填的指令缓存块关联的第二表项,从相应的ECC空间搬移到L1缓存中相应的分支信息存储空间;具体的,所述至少一个下级缓存02中,指令缓存块的ECC空间和Tag域及data域是绑定的,在回填指令缓存块时,至少一个下级缓存的指令缓存块中的Tag域和data域的信息,搬移到L1缓存的指令缓存块的指令存储空间011,而ECC空间存储的第二表项一起搬移到L1缓存相应指令缓存块的分支信息存储空间012。
可选的,当L1缓存01的指令缓存块被替换时,所替换的指令缓存块关联的第二表项,可写回到至少一个下级缓存02中对应的ECC空间,而L1缓存的指令缓存块由于是只读的,因此指令缓存块的指令信息并不用写回到至少一个下级缓存02中;具体的,当L1缓存01中的指令缓存块被替换时,其分支信息存储空间012存储的第二表项,写回到至少一个下级缓存02中相应指令缓存块的ECC空间。
作为一种可选实现,基于图13所示架构,本发明实施例图8所示步骤中查找匹配的第二分支信息的方法可以如图15所示,参照图15,该方法可以包括:
步骤S30、查找当前取指地址是否命中L1缓存的指令缓存块的Tag域,若是,执行步骤S31,若否,执行步骤S32。
步骤S31、根据L1缓存中复用命中Tag域的第二表项,确定与所述当前取指地址匹配的第二表项。
步骤S32、查找当前取指地址是否命中所述至少一个下级缓存的指令缓存块的Tag域,若是,执行步骤S33,若否,执行步骤S34。
步骤S33、根据所述至少一个下级缓存中复用命中Tag域的第二表项,确定与所述当前取指地址匹配的第二表项。
进一步,步骤S32的判决结果为是,说明L1缓存缺失指令缓存块,可执行从至少一个下级缓存回填指令缓存块到L1缓存的过程(即前文所述的第二表项随同指令缓存块,从至少一个下级缓存回填到指令缓存块的过程),回填过程可参照前文相应部分描述,此处不再赘述。
步骤S34、结束检测。
需要说明的是,步骤S34所指结束检测表示的是,结束检测分支预测。
在本发明实施例中,L1缓存01新增的分支信息存储空间,以及,至少一个下级缓存中指令缓存块的ECC空间可构成为扩展分支目标缓冲器,实现对分支预测单元中分支目标缓冲器的扩容。
作为另一种可选实现方式,本发明实施例也可设置不使用L1缓存存储第二分支信息,而由至少一个下级缓存存储第二分支信息;这种方式也可在L1缓存缺失指令,而从所述至少一个下级缓存取指时,发现分支预测错误,也可一定程度的降低由于分支预测错误而清空流水线的情况,提升流水线的运行流畅性。
可以看出,在本发明实施例中,存储第二分支信息的缓存可以分为多种情况,包括但不限于如下:仅由L1缓存的指令缓存块存储第二分支信息;由L1缓存的指令缓存块,和至少一个下级缓存的指令缓存块共同存储第二分支信息;仅由至少一个下级缓存的指令缓存块存储第二分支信息;
无论缓存是由上述何种方式存储第二分支信息,均可认为是由缓存的指令缓存块存储第二分支信息;在一种可选实现上,一条第二分支信息可通过一个第二表项表示,而一个指令缓存块可记录的第二表项的数量,需视指令缓存块提供的存储第二表项的空间大小,以及第二表项的大小而定,本发明实施例可支持一个指令缓存块存储一个表项或多个表项的情况。
若一个指令缓存块存储一个表项,则在确定当前取指地址匹配的第二分支信息时,本发明实施例可通过如下可选方式实现(可选的,如下可选方式可支持在图12或图13所示架构中实现):
如果缓存的一个指令缓存块存储一个第二表项,则可在当前取指地址命中缓存的指令缓存块的Tag域时,可将所述复用命中Tag域的第二表项确定为,与所述当前取指地址匹配的第二表项;
如果缓存的一个指令缓存块存储多个第二表项,则可在当前取指地址命中缓存的指令缓存块的Tag域时,确定复用命中Tag域的多个第二表项,从复用命中Tag域的多个第二表项中确定,记录的分支指令地址与所述当前取指地址匹配的第二表项。
作为本发明实施例公开内容的一种可选示例,本发明实施例检测分支预测错误,说明分支目标缓冲器中记录的第一表项存在缺失或错误,本发明实施例可进一步对分支目标缓冲器中记录的第一表项进行更新;
作为一种可选实现,图16示出了更新第一表项的一种可选实现示意,参考图16,决策逻辑单元107可在检测分支预测错误时,向分支目标缓冲器1011发送重定向分支信息,以更新分支目标缓冲器1011记录的第一表项;其中,重定向分支信息可以认为是分支预测错误的分支指令所对应的正确分支信息;
重定向分支信息可以至少包括:当前取指起始地址,缓存中匹配的第二分支信息;
其中,当前取指起始地址是,分支预测错误时所使用的取指起始地址;分支预测单元101在输出分支预测结果时,可寄存当前取指起始地址;从而决策逻辑单元107可在检测分支预测错误时,读取寄存的当前取指起始地址,并加入到重定向分支信息中;
缓存中匹配的第二分支信息可由匹配的第二表项表示,并加入到重定向分支信息;示例的,第二分支信息可以包括:位置、类型、目标地址等。
可选的,决策逻辑单元107输出重定向分支信息后,分支预测单元可执行图17所示方法更新第一表项;结合图16和图17所示,该方法可以包括:
步骤S40、重定向分支信息输入分支预测单元,所述重新定向分支信息包括:当前取指起始地址和缓存中匹配的第二分支信息。
在本发明实施例中,重定向分支信息由决策逻辑单元107提供给分支预测单元。
步骤S41、查找所述当前取指起始地址是否在分支目标缓冲器中命中第一表项,若是,执行步骤S42,若否,执行步骤S43。
分支预测错误所使用的当前取指起始地址,输入分支目标缓冲器后,分支目标缓冲器1011可查找所述当前取指起始地址是否命中已存储的第一表项。
示例的,第一表项可分为Tag域,位置域,类型域,目标地址域;本发明实施例可查找是否存在与所述当前取指起始地址相匹配的第一表项的Tag域,以实现步骤S41。
步骤S42、根据匹配的第二分支信息,修改命中的第一表项。
步骤S41的判断结果为是,说明分支目标缓冲器存在Tag域与所述当前取指起始地址相匹配的第一表项,并且该第一表项存在错误,则可使用匹配的第二分支信息修改该第一表项,从而提升目标缓冲器中存储的第一表项的准确性。
步骤S43、根据匹配的第二分支信息,创建相应的第一表项。
所述当前取指起始地址在分支目标缓冲器中未命中第一表项,说明目标缓冲器缺失相应的第一分支信息,可根据所述缓存中匹配的第二分支信息,创建相应的第一表项;
示例的,可基于当前取指起始地址创建相应第一表项的Tag域,基于匹配的第二分支信息的位置,类型和目标地址,创建相应第一表项的位置域,类型域和目标地址域,图中虚线示出了所创建的第一表项可参照。
可选的,步骤S41至步骤S43可由分支预测单元执行。
可以看出,本发明实施例更新第一表项可以包括:修改第一表项或创建第一表项。
作为本发明实施例公开内容的另一种可选示例,在检测分支预测错误后,本发明实施例可在执行阶段确定重定向分支信息,以便准确的更新分支目标缓存器存储的第一表项,以及缓存中存储的第二表项;
作为一种可选实现,图18示出了更新第一表项的另一种可选实现示意,参考图18,重定向单元108为执行阶段进行重定向的逻辑电路单元;
对于分支预测错误的分支指令,可在执行阶段确定分支信息,重定向单元108读取该分支信息后,加入到重定向分支信息中;该分支信息可以包括:分支预测错误的分支指令相应正确的类型、位置、目标地址等信息;
同时,读取寄存的当前取指起始地址,并加入到重定向分支信息中。
重定向单元108可向分支预测单元发送重定向分支信息,该重定向分支信息可以包括:当前取指起始地址,以及执行阶段确定的分支信息。
可选的,分支预测单元可基于如下方法更新第一表项:
如果当前取指起始地址在分支目标缓冲器中命中第一表项,根据执行阶段确定的分支信息,修改命中的第一表项;
如果当前取指起始地址在分支目标缓冲器中未命中第一表项,根据执行阶段确定的分支信息,创建相应的第一表项。
上述方法与图17所示方法逻辑类似,区别在于:上述方法中,重定向分支信息携带的是执行阶段确定的分支信息;而图17所示方法中,重定向分支信息携带的是缓存中匹配的第二分支信息。
进一步,在以执行阶段确定的分支信息更新分支目标缓冲器的第一表项后,本发明实施例可对缓存中存储的第二表项进行更新(可包括对L1缓存和至少一个下级缓存所存储的第二表项进行更新),示例的,确定更新缓存中存储的第二表项的一种可选方法示意可如图19所示,参考图19,该过程可以包括:
步骤S50、在第一表项更新后,确定所述执行阶段确定的分支信息指示的分支指令类型。
在本发明实施例中,更新第一表项包括修改第一表项和创建第一表项;由于本发明实施例是根据所述执行阶段确定的分支信息,更新第一表项,因此更新后的第一表项的分支信息可与所述执行阶段确定的分支信息一致。
步骤S51、如果分支指令类型为间接分支指令,不更新缓存中存储的第二表项。
本发明的发明人发现,某些特定分支指令在取指阶段并无法进行有效的重定向决策,例如基于分支指令的不同类型,确定分支指令最终结果的流水线阶段也可能不同,一般而言,间接分支指令(如Indirect Jmp、Indirect Call等)只有在执行阶段才能确定正确的结果。
步骤S52、如果分支指令类型不为间接分支指令,确定更新缓存中存储的第二表项。
可选的,上述方法可由分支预测单元执行实现,当然,本发明实施例并不排除处理器设置相应的逻辑(如逻辑电路单元)来实现上述方法。
以缓存包含L1缓存为例,基于缓存的层级结构,第二表项的更新可以由L1缓存开始;同时,为更新缓存中存储的第二表项需要确定更新的第二表项在缓存中的位置,并且在该位置如何更新第二表项;
可选的,图20示出了更新缓存中存储的第二表项的一种可选示意方法,参照图20,该方法可以包括:
步骤S60、构造更新请求,所述更新请求至少包括当前取指起始地址以及执行阶段确定的分支信息。
可选的,分支预测单元可构造所述更新请求,具体可以是分支目标缓冲器构造所述更新请求;更新请求中可以至少携带分支预测错误时使用的当前取指起始地址,以及执行阶段确定的分支信息(执行阶段确定的分支信息即第一表项更新后的分支信息),示例的,分支信息可以指示分支指令的类型、位置、目标地址等;
更新请求可以沿取指路径发往L1缓存。
步骤S61、查找所述当前取指起始地址是否在指令缓存命中预测单元中命中,若否,执行步骤S62,若是,执行步骤S63。
可选的,指令缓存命中预测单元可以是L1缓存中可选的逻辑电路单元(指令缓存命中预测单元也可能是位于L1缓存外),指令缓存命中预测单元可用于在取指时预测指令是否在L1缓存中命中,并在预测指令未在L1缓存中命中时,提前从L1缓存的下级缓存取指到L1缓存,实现指令的预取;本发明实施例可使用指令缓存命中预测单元,来过滤当前取指起始地址不可能在L1缓存中命中的更新请求;
可选的,指令缓存命中预测单元可以是micro Tag(微标签)的存储结构,通过micro Tag可存储L1缓存中指令缓存块的部分Tag信息;
作为一种可选实现,可利用更新请求中的物理地址(如所述当前取指起始地址)查找micro Tag;如果命中micro Tag,则可将更新请求进一步发往L1缓存;如果未命中microTag,则放弃更新。
步骤S61可由指令缓存命中预测单元执行。
步骤S62、放弃更新。
步骤S63、将更新请求发往L1缓存。
步骤S63可由指令缓存命中预测单元执行。
步骤S64、查找L1缓存中是否存在与所述当前取指起始地址相关联的第二表项,若否,执行步骤S62,若是,执行步骤S65。
步骤S64可由L1缓存执行,当然也可由处理器中设置的相应逻辑实现;可选的,本发明实施例也可利用更新请求中的物理地址(如所述当前取指起始地址)查找L1缓存的指令缓存块的Tag;如果命中Tag,则可确定L1缓存中复用命中的Tag的第二表项,确定出相关联的第二表项;如果未命中Tag,则放弃更新。
需要说明的是,上述步骤S61可以是可选的,本发明实施例也可直接将更新请求发往L1缓存,即在步骤S60之后,分支预测单元将更新请求发往L1缓存,执行步骤S64。
步骤S65、判断相关联的第二表项中是否存在空闲的第二表项,若是,执行步骤S66,若否,执行步骤S67。
可以理解的是,如果一个指令缓存块存储一个第二表项,则可在相关联的第二表项未填写分支信息时,认为相关联的第二表项为空闲的第二表项;如果一个指令缓存块存储多个第二表项,则在存在未填写分支信息的至少一个相关联的第二表项时,认为存在空闲的第二表项。
步骤S66、将所述执行阶段确定的分支信息填入空闲的第二表项。
可以理解的是,空闲的第二表项是复用所在指令缓存块的Tag,因此根据执行阶段确定的分支信息,填入第二表项的信息包括但不限于分支指令的类型、位置、目标地址等。
步骤S67、判断执行阶段确定的分支信息指示的分支指令类型是否为Jcc指令,若是,执行步骤S62,若否,执行步骤S68。
如果执行阶段确定的分支信息所指示的分支指令类型为Jcc指令,则放弃更新,这是因为Jcc指令只有在被预测跳转时,才能给出有效的重定向决策,因此在相关联的第二表项的空间已满时,并没有必要更新第二表项。
步骤S68、利用执行阶段确定的分支信息覆盖相关联的第二表项。
在相关联的第二表项不具有空闲空间,且执行阶段确定的分支信息指示的分支指令类型不为Jcc指令时,可利用执行阶段确定的分支信息覆盖相关联的第二表项;可选的,在相关联的第二表项为多个时,可从相关联的第二表项中选择存在时间最长、命中次数最低的第二表项,从而利用执行阶段确定的分支信息覆盖所选择的第二表项。
可选的,步骤S64至S68可由L1缓存执行,L1缓存可设置相应的逻辑,执行上述步骤。
上文描述了本发明实施例提供的多个实施例方案,各实施例方案介绍的各可选方式可在不冲突的情况下相互结合、交叉引用,从而延伸出多种可能的实施例方案,这些均可认为是本发明实施例披露、公开的实施例方案。
本发明实施例提供的方案通过在缓存的指令缓存块中存储第二分支信息,以扩展分支目标缓冲器的容量,可在分支目标缓冲器由于容量不足造成分支预测错误情况下,基于缓存的指令缓存块中存储的第二分支信息,在取指阶段提前发现分支预测错误,为提前纠正分支预测错误提供可能;
作为一种可选实现,可由L1缓存的指令缓存块新增的分支信息存储空间存储第二分支信息,并由L1缓存的至少一个下级缓存(如L2、L3缓存)的指令缓存块的ECC空间存储第二分支信息;从而由L1缓存的指令缓存块新增的分支信息存储空间,和至少一个下级缓存的指令缓存块的ECC空间,在逻辑上构成为扩展分支目标缓冲器;在通过第二表项表示第二分支信息的情况下,扩展分支目标缓冲器的第二表项可始终与指令缓存块相关联,并复用所在指令缓存块的Tag域。基于扩展分支目标缓冲器存储的第二分支信息,本发明实施例可在取指阶段发现分支目标缓冲器没有发现的分支指令,实现分支预测错误的判断,提前纠正分支预测错误。
使用本发明实施例提供的技术方案,可减少流水线中填充入由于分支预测错误引发的指令和相应的执行结果,进而极大程度的降低由于分支预测错误而清空流水线的情况,提升了流水线的运行流畅性,降低了流水线的资源消耗和延迟。
下面对本发明实施例提供的处理器的一种可选逻辑实现进行说明,下文描述内容可与上文描述内容相互对应参照。
从处理器核的逻辑设计来看,作为一种可选实现,本发明实施例提供的一种处理器可以包括至少一个处理器核,结合图4所示,所述处理器核可至少包括如下逻辑:
分支预测单元,用于根据分支预测缓冲器存储的第一分支信息预测分支预测结果,所述分支预测结果至少包括当前取指地址;
缓存,用于在根据所述当前取指地址从缓存取指的阶段,如果从缓存的指令缓存块中查找到与所述当前取指地址匹配的第二分支信息,读取所述匹配的第二分支信息;其中,所述缓存的指令缓存块中存储有第二分支信息;
决策逻辑单元,用于根据所述匹配的第二分支信息检测分支预测是否正确。
作为一种可选实现,所述缓存可以包括:一级缓存,和层级低于所述一级缓存的至少一个下级缓存;
其中,所述一级缓存的指令缓存块设置有存储第二分支信息的分支信息存储空间;
所述至少一个下级缓存的指令缓存块的错误检查和纠正ECC空间存储有第二分支信息。
可选的,第一分支信息可使用第一表项表示,第二分支信息可使用第二表项表示;所述第二表项与所述第二表项所在的指令缓存块相关联,且复用所在的指令缓存块的Tag域;所述至少一个下级缓存的指令缓存块使用奇偶校验保护。
可选的,所述决策逻辑单元还包括逻辑,以实现:
在检测分支预测错误时,重定向取指起始地址;将重定向的取指起始地址作为分支预测的输入。
可选的,所述缓存包括:一级缓存和层级低于所述一级缓存的至少一个下级缓存;一级缓存的指令缓存块的分支信息存储空间大小等同于,所述至少一个下级缓存的指令缓存块的ECC空间大小;
所述缓存还包括逻辑,以实现:
当指令缓存块在一级缓存和所述至少一个下级缓存间搬移时,使搬移的指令缓存块关联的第二表项随同指令缓存块搬移。
可选的,所述决策逻辑单元还包括逻辑,以实现:
在检测分支预测错误时,将重定向分支信息输入分支预测单元;所述重定向分支信息包括:当前取指起始地址,和缓存中匹配的第二分支信息;
所述分支预测单元还包括逻辑,以实现:
如果所述当前取指起始地址命中第一表项,根据所述匹配的第二分支信息,修改命中的第一表项;
如果所述当前取指起始地址未命中第一表项,根据所述匹配的第二分支信息,创建相应的第一表项。
可选的,所述处理器核还包括如下逻辑:
重定向单元,用于将重定向分支信息输入分支预测单元;所述重定向分支信息包括:当前取指起始地址,和执行阶段确定的分支信息;其中,所述执行阶段确定的分支信息与分支预测错误的分支指令相对应;
所述分支预测单元还包括逻辑,以实现:
如果当前取指起始地址命中第一表项,根据所述执行阶段确定的分支信息,修改命中的第一表项;
如果当前取指起始地址未命中第一表项,根据所述执行阶段确定的分支信息,创建相应的第一表项。
可选的,所述分支预测单元还包括逻辑,以实现:
在第一表项更新后,确定所述执行阶段确定的分支信息指示的分支指令类型;
如果所述分支指令类型为间接分支指令,不更新缓存中存储的第二表项;
如果所述分支指令类型不为间接分支指令,确定更新缓存中存储的第二表项。
可选的,所述分支预测单元还包括逻辑,以实现:
在所述分支指令类型为间接分支指令时,构造更新请求,所述更新请求至少包括当前取指起始地址,以及所述执行阶段确定的分支信息;
所述缓存的一级缓存还包括逻辑,以实现:
如果一级缓存中存在与所述当前取指起始地址相关联的第二表项,判断相关联的第二表项中是否存在空闲的第二表项;如果存在空闲的第二表项,将所述执行阶段确定的分支信息填入空闲的第二表项;如果不存在空闲的第二表项,且所述执行阶段确定的分支信息指示的分支指令类型不为Jcc指令,利用所述执行阶段确定的分支信息覆盖相关联的第二表项。
上述所述的逻辑电路单元的细化逻辑实现,可参照方法部分的相应说明,说明书中关联的各部分均可对应参照,此处不再赘述
虽然本发明实施例披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。