CN112579175B - 分支预测方法、分支预测装置和处理器核 - Google Patents
分支预测方法、分支预测装置和处理器核 Download PDFInfo
- Publication number
- CN112579175B CN112579175B CN202011475222.0A CN202011475222A CN112579175B CN 112579175 B CN112579175 B CN 112579175B CN 202011475222 A CN202011475222 A CN 202011475222A CN 112579175 B CN112579175 B CN 112579175B
- Authority
- CN
- China
- Prior art keywords
- branch
- branch information
- instruction
- address
- cache
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 85
- 239000000872 buffer Substances 0.000 claims abstract description 91
- 230000004044 response Effects 0.000 claims description 12
- 230000015654 memory Effects 0.000 description 23
- 238000010586 diagram Methods 0.000 description 21
- 238000012545 processing Methods 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
一种分支预测方法、分支预测装置和处理器核。该分支预测方法包括:获取当前取指起始地址;基于当前取指起始地址,查找与当前取指起始地址对应的第一分支信息;响应于当前取指起始地址未命中第一分支信息,获取与当前取指起始地址对应的第二分支信息;基于第二分支信息,生成分支预测结果,第一分支信息和第二分支信息存储在不同的缓冲器中,使用不同类型的地址访问不同的缓冲器。利用上述分支预测方法,可以缓解分支目标缓冲器的容量限制问题,还可以实现分支目标缓冲器的指令预取,减轻由于分支目标缓冲器缺失导致分支预测失败的开销,并且能够支持CISC架构下的分支目标缓冲器预取。
Description
技术领域
本公开的实施例涉及一种分支预测方法、分支预测装置和处理器核。
背景技术
现代处理器一般采用流水线(Pipeline)技术并行处理指令,以加速指令处理效率。在处理分支指令时,为避免等待分支指令执行结果以决定分支方向的情况,大多数现代处理器采用分支预测(Branch Prediction)技术。
通过分支预测技术可预测分支指令的包括分支方向等的分支预测结果,从而推动处理器进行下一步取指操作,避免由于等待分支指令的执行结果而导致的流水线延迟。现代处理器所采用的分支预测技术一般具有多级分支预测逻辑,在进行分支预测时,访问的分支预测逻辑的级数越高,分支预测的预测准确度越高,但同时,分支预测逻辑的级数越高,功耗也越大,所需的时钟周期数也越多。
发明内容
本公开至少一个实施例提供一种分支预测方法,包括:获取当前取指起始地址;基于所述当前取指起始地址,查找与所述当前取指起始地址对应的第一分支信息;响应于所述当前取指起始地址未命中所述第一分支信息,获取与所述当前取指起始地址对应的第二分支信息;基于所述第二分支信息,生成分支预测结果;其中,所述第一分支信息和所述第二分支信息存储在处理器核的不同的缓冲器中,使用不同类型的地址访问所述不同的缓冲器。
例如,在本公开一实施例提供的方法中,所述第一分支信息存储在分支目标缓冲器中。
例如,在本公开一实施例提供的方法中,所述第二分支信息存储在填充缓冲器中。
例如,在本公开一实施例提供的方法中,在获取所述当前取指起始地址之前,还包括:获取与所述当前取指起始地址相对应的指令预取请求;基于所述指令预取请求,获取与所述当前取指起始地址相对应的第三分支信息;基于所述第三分支信息,得到所述第二分支信息,并将所述第二分支信息存储在所述填充缓冲器中。
例如,在本公开一实施例提供的方法中,所述第三分支信息存储在缓存中。
例如,在本公开一实施例提供的方法中,获取与所述当前取指起始地址相对应的所述指令预取请求,包括:利用指令预取器,生成所述指令预取请求。
例如,在本公开一实施例提供的方法中,基于所述指令预取请求,获取与所述当前取指起始地址相对应的所述第三分支信息,包括:基于所述指令预取请求,得到第一缓存地址;基于所述第一缓存地址,访问所述缓存,获取所述第三分支信息。
例如,在本公开一实施例提供的方法中,还包括:基于所述当前取指起始地址和所述第二分支信息,生成所述第一分支信息,并将所述第一分支信息存储在所述分支目标缓冲器中。
例如,在本公开一实施例提供的方法中,基于所述当前取指起始地址,查找所述第一分支信息,包括:基于所述当前取指起始地址,访问所述分支目标缓冲器并在所述分支目标缓冲器中查找所述第一分支信息。
例如,在本公开一实施例提供的方法中,响应于所述当前取指起始地址未命中所述第一分支信息,获取与所述当前取指起始地址对应的所述第二分支信息,包括:响应于所述当前取指起始地址未命中所述第一分支信息,访问所述填充缓冲器并从所述填充缓冲器获取所述第二分支信息。
例如,在本公开一实施例提供的方法中,基于所述当前取指起始地址,查找所述第一分支信息,包括:基于所述当前取指起始地址,得到第二缓存地址;基于所述当前取指起始地址,访问所述分支目标缓冲器并在所述分支目标缓冲器中查找所述第一分支信息,并且基于所述第二缓存地址访问所述填充缓冲器。
例如,在本公开一实施例提供的方法中,还包括:响应于所述当前取指起始地址命中所述第一分支信息,基于所述第一分支信息,生成所述分支预测结果。
例如,在本公开一实施例提供的方法中,还包括:响应于所述当前取指起始地址未命中所述第一分支信息且未命中所述第二分支信息,基于预设边界和所述当前取指起始地址,生成所述分支预测结果。
例如,在本公开一实施例提供的方法中,所述处理器核包括复杂指令集计算机处理器核。
本公开至少一个实施例提供一种分支预测装置,包括:获取单元,配置为获取当前取指起始地址;查找单元,配置为基于所述当前取指起始地址,查找与所述当前取指起始地址对应的第一分支信息;确定单元,配置为响应于所述当前取指起始地址未命中所述第一分支信息,获取与所述当前取指起始地址对应的第二分支信息;预测单元,配置为基于所述第二分支信息,生成分支预测结果,其中,所述第一分支信息和所述第二分支信息存储在处理器的不同的缓冲器中,使用不同类型的地址访问所述不同的缓冲器。
本公开至少一个实施例提供一种分支预测方法处理器核,包括上述实施例所述的分支预测装置。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1A为一种计算机系统体系架构的示意框图;
图1B为本公开至少一个实施例提供的一种处理器核的框图;
图2A为本公开至少一个实施例提供的第一种分支预测单元的示意图;
图2B为本公开至少一个实施例提供的一种分支预测方法的流程示意图;
图3为本公开至少一个实施例提供的另一种处理器核的框图;
图4为本公开至少一个实施例提供的一种分支预测方法的流程图;
图5为本公开至少一个实施例提供的又一种处理器核的框图;
图6为本公开至少一个实施例提供的另一种分支预测方法的流程图;
图7A为本公开至少一个实施例提供的另一种分支预测方法的流程图;
图7B为本公开至少一个实施例提供的另一种分支预测方法的流程图;
图8为本公开至少一个实施例提供的一种分支预测装置的框图;以及
图9为本公开至少一个实施例提供的一种处理器核的框图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
现代处理器大多采用分支预测(Branch Prediction)技术。通过分支预测技术预测分支指令的包括分支方向等的分支预测结果,从而推动处理器进行下一步取指操作。下面结合图1A至图3详细描述分支预测技术以及实施分支预测的分支预测单元。
作为本公开实施例公开内容的一个可选示例,图1A为一种计算机系统体系架构的示意框图。应该说明的是,该示意图是为便于理解本公开实施例公开内容而示出,本公开实施例并不限于图1A所示架构。
参考图1A,计算机系统1可以包括:处理器11、与处理器11耦合的内存12、以及与处理器11耦合的南桥13。
处理器11可以包括CISC(Complex Instruction Set Computer,复杂指令集计算机)微处理器、RISC(Reduced Instruction Set Computer,精简指令集计算机)微处理器、超长指令字(Very Long Instruction Word,VLIW)微处理器、实现指令集的组合的处理器或诸如数字信号处理器的任何其它处理器装置。
如图1A所示,处理器11可集成用于执行至少一个指令的至少一个处理器核100。处理器核100表示具有任何类型的体系结构的处理器核,如RISC处理器核、CISC处理器核、VLIM处理器核或混合处理器核等,处理器核100可以以任何适合的方式实现。在处理器11集成多个处理器核100的情况下,处理器核100可在体系结构和/或指令集方面是同构或异构的。在一种可选的实施方式中,一些处理器核100可以是有序的,而其它处理器核100可以是乱序的。在另一种可选的实施方式中,两个或更多个处理器核100可执行相同指令集,而其它处理器核100可执行该指令集的子集或不同指令集。
处理器11内还可以集成内存控制器等部件(未示出),并对外提供内存接口等(未示出)。处理器11可通过内存接口耦合到内存12。同时,处理器11可耦合到处理器总线,并通过处理器总线耦合到南桥13。
南桥13可以集成与计算机系统其它组件相通信的总线接口14,从而通过南桥13实现处理器11与计算机系统1中大部分其他组件的信号传递。需要注意的是,在本公开中,计算机系统1的组件可根据实际情况增设和调整,此处不进行逐一说明。
例如,南桥13所集成的总线接口14包括但不限于:存储器(如硬盘)总线接口、USB总线接口、网络控制器总线接口、PCIE总线接口等。
需要说明的是,图1A示例框图中处理器11和南桥13的耦合结构是基本的,但处理器11和南桥13的具体细化结构可视具体使用情况设置、调整和/或扩展,并不固定。
根据本公开其他实施例,例如,在其他的计算机系统体系结构中,例如在设置南桥和北桥的计算机系统体系结构中,内存控制也可能由北桥提供,如北桥耦合在处理器和南桥之间,主要负责显卡、内存与处理器之间的信号传递;南桥主要负责硬盘、外设以及各种对带宽要求较低的I/O(输入/输出)接口与内存、处理器之间的信号传递。
如上所述是处理器与南桥式的计算机体系结构,在计算机体系结构的其他示例中,也可能通过SoC(System on Chip,片上系统)实现计算机体系结构。示例性的,SoC可集成处理器、内存控制器、以及I/O接口等,并且SoC可通过与外部的内存、I/O设备、网卡等其他组件相耦合,实现在单个主要芯片上搭建计算机体系结构。
需要进一步说明的是,以上描述的结构并不限于计算机系统,也可在诸如手持式装置和具有嵌入式应用的其他装置中使用。手持式装置的一些示例包括蜂窝电话、因特网协议装置、数码相机、个人数字助理(PDA)或手持式PC(personal computer,个人计算机)。具有嵌入式应用的其他装置可包括网络计算机(Net PC)、机顶盒、服务器、宽域网(WAN)交换机、或可执行至少一个本公开公开实施例的一个或多个指令的任何其他系统。
另外,如上所述的处理器并不限于CPU(Central Processing Unit,中央处理器),还可以是加速器(例如,图形加速器或数字信号处理单元)、GPU(GraphicsProcessingUnit,图形处理器)、现场可编程门阵列或任何其它具有指令执行功能的处理器。上述虽然是以单处理器进行的示例说明,但在实际情况下,计算机体系结构可能存在多个处理器,每一处理器具有至少一个处理器核。
现代微处理器架构一般使用流水线(pipeline)技术实现多条指令的并行处理,并结合使用分支预测、乱序执行等技术提升流水线的执行效率。作为本公开实施例公开内容的一个可选示例,通常,5级流水线的处理过程可以包括取指(Instruction Fetch)、译码(Instruction Decode)、执行(Execute)、访存(Memory Access)和写回(Write Back)。为解决在处理分支指令时,处理器核等待分支指令的执行结果来确定下一步取指而导致的流水线延迟,流水线的前端还可以设置分支预测单元,以实现分支预测。
图1B为本公开至少一个实施例提供的一种处理器核的框图。
例如,本公开至少一个实施例提供一种处理器核,如图1B所示,处理器核可以包括:分支预测单元101、取指单元102、译码单元103、执行单元104、访存单元105、一级缓存(例如L1指令缓存和L1数据缓存)、至少一个下级缓存(例如L2/L3缓存)和内存等。需要说明的是,图1B所示处理器核的框图是为便于理解本公开实施例公开内容而示出,本公开实施例并不限于图1B所示的结构。
例如,在本公开至少一个实施例中,分支预测单元101、取指单元102、译码单元103、执行单元104、访存单元105可以是集成在处理器核内的逻辑电路单元,本公开对此不作限制。
例如,在本公开的实施例中,缓存(cache)是在处理器核和内存之间的存取速度极快的存储单元,通常具有多级结构。例如,缓存中的全部或部分可集成在处理器核内。例如,缓存可以包括:集成到处理器核内的至少一个私有缓存,驻留在处理器核外的至少一个共享缓存。
当然,本公开实施例也支持缓存中的全部集成在处理器核内,在某些情况下,本公开实施例也可支持缓存中的全部驻留在处理器核外。
需要说明的是,无论集成在处理器核内和驻留在处理器核外的缓存层级如何设置,通常来说,上一层缓存可缓存来自下一层缓存的信息,如L1缓存可缓存来自L2缓存的信息,当然这种设置方式仅是可选的,本公开实施例并不局限于此。
例如,一级缓存L1可以包括L1指令缓存和L1数据缓存,如图1B所示。例如,指令缓存主要通过指令缓存块存储指令,数据缓存主要通过数据缓存块存储数据。例如,下级缓存的层级低于L1缓存,下级缓存可以是层级低于L1缓存的一个或多个缓存,如图1B所示的L2缓存、L3缓存之中的至少一个。
例如,在本公开至少一个实施例中,缓存可以是三级缓存结构,包括一级缓存L1、二级缓存L2和三级缓存L3。例如,在一个示例中,一级缓存L1作为指令缓存仅缓存指令,二级缓存L2和三级缓存L3可共同缓存数据和指令。
例如,在本公开至少一个实施例中,如图1B所示,一级缓存L1可以包括L1指令缓存和L1数据缓存,它们的访问速度较快,但是容量较小。例如,二级缓存L2和三级缓存L3共同缓存数据和指令,它们的容量较大、但是访问速度更慢。例如,二级缓存L2和三级缓存L3连接内存,内存存储所有的指令和数据。需要说明的是,本公开实施例也可支持多于三级缓存或小于三级缓存的结构。
在如图1B所示的处理器中,分支预测单元101运行在处理器流水线的最前端,并控制取指。分支预测单元101可通过分支预测技术,确定分支预测结果。例如,分支预测结果至少包括分支预测方向(分支指令的预测方向,如分支指令跳转或不跳转)、分支指令的目标地址、取指请求(例如,取指请求为一个地址范围,包括当前取指起始地址和当前取指结束地址)、下一步取指起始地址等。例如,在一个示例中,分支预测单元101可基于分支指令的历史执行信息和结果进行分支预测。
基于分支预测单元101预测的取指请求,取指单元102可通过L1指令缓存读取指令(例如,包括但不限于读取分支指令、逻辑运算指令、访存指令等),并将指令馈送到译码单元103。例如,在一个示例中,取指单元102可将读取的指令存放入处理器核的指令寄存器,以便译码单元103从指令寄存器读取指令进行译码。
例如,译码单元103可解释指令,得出译码结果,然后发送给执行单元104。例如,译码结果可以是解释指令所得出的可由机器执行的操作信息,诸如解释指令的操作码、操作数和控制字段所形成的机器可执行的uop(微指令)等。例如,在一个示例中,译码单元103可以解析操作码产生控制信号。例如,译码单元103可支持指令预取(Instruction Prefetch)技术。
执行单元104可基于译码单元103的译码结果执行运算,产生执行结果(执行结果与取指指令的指令功能相应,涉及访存、逻辑运算结果、指令跳转等)。例如,执行单元可以根据执行指令的类型来执行相应的操作。例如,如果是访存指令,执行单元104会发送给访存单元105,访问L1数据缓存中的数据。例如,执行单元104可以支持乱序执行技术等,本公开的实施例对此不作限制。
访存单元105可基于执行单元104对访存指令的执行结果执行访存。
需要说明的是,图1B示例性的示出了一种四级流水线的处理器核架构,而随着技术调整,流水线中不同阶段的逻辑电路单元也可能相整合或者分离,其架构并不固定。当然,本公开实施例的处理器核也可在五级流水线(例如,在图1B所示结构的基础上还包括写回单元)等其他流水线技术中适用。
可以理解的是,处理器核也可以包括对理解本公开实施例公开内容不是必需的其他电路(未示出),鉴于所述其他电路对于理解本公开实施例公开内容并不是必需的,本公开实施例就不再赘述。
图2A为本公开至少一实施例提供的一种分支预测单元的结构示意图,图2B为本公开至少一个实施例提供的一种分支预测方法的流程图。
例如,在本公开至少一个实施例中,分支预测单元101可基于分支目标缓冲器(Branch Target Buffer,BTB)实现,例如,通过将分支指令的分支信息存放到分支目标缓冲器BTB,以进行分支预测。
例如,如图2A所示,在本公开至少一个实施例中,分支预测单元101可以包括地址选择单元、分支目标缓冲器BTB、至少一个预测器(例如,方向预测器、间接分支目标地址预测器、返回地址预测器等)。例如,分支目标缓冲器BTB记录有分支指令的分支信息(为便于说明,分支目标缓冲器BTB记录的分支信息可称为第一分支信息)。
例如,在本公开至少一个实施例中,分支目标缓冲器BTB可以具有多个表项(为便于说明,本公开实施例称分支目标缓冲器中的表项为第一表项),一个第一表项可以表示一条第一分支信息,也可以包含若干个第一分支信息,本公开的实施例对此不作限制。
例如,第一表项可以具有多个域(字段)。例如,第一表项可具有如下域:标识域,Tag(标签)域,位置域,类型域,目标地址域等。例如,第一表项的标识域可以标识第一表项中是否包括有效信息,Tag域作为分支信息的标签信息,可记录用于访问分支指令的部分起始地址,位置域主要记录分支指令的地址,类型域主要记录分支指令的指令类型(例如,分支指令的类型包括Return(返回指令)、Call(调用指令)、Jcc(条件分支指令)、Jmp(无条件分支指令)等),目标地址域主要记录分支指令跳转的目标地址。
需要说明的是,上述第一表项所具有的域仅是可选的,本公开实施例也可支持第一表项中域的增加、删减等调整,并不固定限制第一表项所使用的域;如基于第一分支信息的内容设置不同,第一表项的域可适应调整。
分支预测单元101可利用分支目标缓冲器中记录的第一分支信息进行分支预测,输出分支预测结果。例如,在本公开的实施例中,分支预测结果至少包括:分支预测方向(如分支指令跳转或不跳转)、分支指令的目标地址、当前取指结束地址和下一步取指起始地址等,当然分支预测结果还可包括对理解本公开实施例并不是必需的其他内容,本公开的实施例对此不作限制。
如图2A所示,分支预测单元101的输出为发送给取指单元102的取指请求,例如,取指请求可以包括一个地址范围,即<当前取指起始地址,当前取指结束地址>,可以用于从L1指令缓存中读取相应指令。
例如,分支预测单元101内部在输出上述取指请求的同时,还会产生下一取指起始地址反馈给自己。如图2A所示,分支预测单元101的输入可以包括自反馈的下一取指起始地址,还可以包括来自执行单元104的纠正的取指起始地址。例如,分支预测单元101内部可以包括地址选择单元,用于对执行单元104的纠正的取指起始地址和自反馈的下一取指起始地址进行选择(通常,纠正的取指起始地址的优先级更高),从而得到预测流水线的输入,例如得到当前取指起始地址。
基于图2A所示的分支预测单元的结构,本公开至少一个实施例提供了一种分支预测方法的流程图。
如图2B所示,一种分支预测方法可以执行以下操作:基于当前取指起始地址的输入,在分支目标缓冲器BTB中查找与该地址对应的第一分支信息;确定BTB是否命中,如果命中,从命中的BTB表项(第一表项)中得到上述第一分支信息,并基于该第一分支信息,根据分支类别访问不同的预测组件(例如,条件分支访问方向预测器、间接分支访问间接目标预测器、返回分支访问返回地址预测器等),最终根据分支类别和各个预测组件得到分支预测结果(例如,分支预测结果包括取指请求和下一取指起始地址)。如果未命中,判断在取指边界之前没有分支,直接得到分支预测结果。
例如,在一个示例中,如果分支预测单元预测分支指令跳转(即第一分支预测方向为跳转),则输出的当前取指结束地址为分支指令的结束地址,下一步取指起始地址为分支指令的目标地址(即分支指令跳转的地址)。
例如,在另一个示例中,在BTB未命中的情况下,则当前取指结束地址可以为预先设定的取指边界(例如,64字节对应的边界),选择的下一取指起始地址可以设定为当前取指结束地址+1。
需要说明的是,上述示出的分支预测处理仅是一种可选的实施方式,仅为便于示例说明,本公开实施例也可支持其他可能的分支预测处理,本公开的实施例对此不作限制。
图3为本公开至少一个实施例提供的另一种处理器核的框图。
图3示出了分支预测单元作为L1指令预取器的原理。由于L1指令缓存很小,需要有效的预取机制才能提高其命中率。如上所述,分支预测单元由于在流水线的最前端,并且可以通过自我反馈的方式不断产生取指请求,因此其产生的取指请求足够提早,通常可以提早发送给L1指令缓存,作为其预取器。如图3所示,分支预测单元在把取指请求填入取指请求队列(位于分支预测单元和取指单元之间)的同时,也发送给L1指令缓存。如果L1指令缓存缺失,则可以提前发送请求给下一级缓存(例如L2缓存),把数据预取入L1指令缓存。这样当该取指起始地址从取指请求队列中经过排队被挑选出来执行时,所需要的指令已经被取入了L1指令缓存,减少了由于L1指令缓存缺失引起的流水线停顿。
上述把分支预测单元当做指令预取器的方式,在程序的代码规模比较小,分支信息都能在记录在BTB中的情况下,比较有效。但是,随着如今程序的代码规模不断增长,指令预取的需求越来越大,与此同时,程序中的分支数量也不断增长,BTB的容量也成为瓶颈,并不能记录所有的分支信息,因此,分支预测单元本身的准确性很受影响,同时其作为指令预取器的效果也大打折扣。因此,如何克服BTB本身的容量限制问题很重要。
目前,存在一种使用单独的指令预取器产生预取请求的方法,可以从下级缓存中预取出指令,在把指令填入L1指令缓存的同时,对其进行预解码,得到分支信息,填入BTB,从而同时实现指令预取和BTB预取。然而上述根据指令进行预解码得到分支信息的方式,只适用于RISC,因为指令长度是固定的,可以实现预解码。对于CISC,指令长度不固定,无法在不经过长度译码的情况下进行预解码。此外,为了支持BTB预取,一般采用缓存(块)地址,即取指边界的地址,而不是经常使用的取指地址进行索引。关于取指地址和缓存地址这两种类型的地址之间的区别和转换在下文中详细描述。
目前,还存在一种在L1/L2/L3缓存中存储分支信息,并在取指阶段对BTB容量缺失导致的预测错误提前纠正的方法。例如,通过该方法,可以在L1指令缓存中,增加额外的空间用于存储分支信息,在L2/L3缓存中,复用ECC空间存储分支信息。L1指令缓存同时负责分支信息的训练生成,当指令被替换入下一级缓存时,分支信息也被替换入下一级缓存。然而,该方法并没有预取功能,当程序代码规模比较大时,BTB容易发生缺失,此时L1指令缓存也大概率会发生缺失,从而需要从L2/L3中取得指令。虽然该方法可以在从L2/L3中取得指令的同时,得到分支信息,并提前进行纠正,无需等到指令执行阶段进行纠正。但是,其纠正的延迟仍然比较长,需要经历L1指令缓存缺失,到L2/L3缓存读取数据的延迟,对性能仍然有较大影响。
针对上述问题,本公开至少一个实施例提供了一种分支预测方法,该分支预测方法包括:获取当前取指起始地址;基于当前取指起始地址,查找与当前取指起始地址对应的第一分支信息;响应于当前取指起始地址未命中第一分支信息,获取与当前取指起始地址对应的第二分支信息;基于第二分支信息,生成分支预测结果。该第一分支信息和第二分支信息存储在处理器核的不同的缓冲器中,使用不同类型的地址访问该不同的缓冲器。本公开至少一个实施例还提供一种对应于上述分支预测方法的分支预测装置和处理器核。
在本公开实施例提供的分支预测方法中,通过存储在不同缓冲器中的第一分支信息和第二分支信息,可以缓解分支目标缓冲器BTB容量限制问题,还可以实现分支目标缓冲器BTB的指令预取,减轻由于BTB缺失导致分支预测失败的开销,并且能够支持CISC架构下的BTB预取。
下面通过几个示例或实施例对根据本公开的至少一个实施例提供的分支预测方法进行非限制性的说明,如下面所描述的,在不相互抵触的情况下这些具体示例或实施例中不同特征可以相互组合,从而得到新的示例或实施例,这些新的示例或实施例也都属于本公开保护的范围。
图4为本公开至少一个实施例提供的一种分支预测方法的流程图。
例如,在本公开至少一个实施中,如图4所示,分支预测方法10可以包括以下操作S101-S104:
步骤S101:获取当前取指起始地址;
步骤S102:基于当前取指起始地址,查找与当前取指起始地址对应的第一分支信息;
步骤S103:响应于当前取指起始地址未命中第一分支信息,获取与当前取指起始地址对应的第二分支信息;
步骤S104:基于第二分支信息,生成分支预测结果,该第一分支信息和第二分支信息存储在处理器核的不同的缓冲器中,使用不同类型的地址访问该不同的缓冲器。
在本公开实施例提供的分支预测方法中,通过存储在不同缓冲器中的第一分支信息和第二分支信息,可以缓解分支目标缓冲器BTB容量限制问题,还可以实现分支目标缓冲器BTB的指令预取,减轻由于BTB缺失导致分支预测失败的开销,并且能够支持CISC架构下的BTB预取。
需要说明的是,在本公开的实施例中,上述步骤S101-步骤S104可以顺序执行,也可以按调整后的其他次序执行,步骤S101-步骤S104中的部分或全部操作还可以并行执行,本公开的实施例对各个步骤的执行顺序不作限制,可以根据实际情况调整。例如,在一些示例中,可以选择地执行步骤S101-步骤S104的部分步骤,也可以执行除了步骤S101-步骤S104以外的一些附加步骤,本公开的实施例对此不做具体限制。
例如,在本公开至少一个实施中,第一分支信息存储在分支目标缓冲器中。例如,在本公开至少一个实施中,第二分支信息存储在填充缓冲器(也称为BTB填充缓冲器,BTBFill Buffer)中。例如,在本公开的实施例中,通过该填充缓冲器,可以把相应的分支信息提前存入其中,实行BTB的预取功能,也可以缓解BTB容量有限的问题。例如,填充缓冲器可以是全相联的结构,也可以是多路组相联的结构,本公开的实施例对此不作限制。
需要说明的是,为了便于说明,在本公开的实施例中,第一分支信息用于表示存储在BTB中的分支信息,第二分支信息用于表示存储在填充缓冲器中的分支信息,第三分支信息用于表示存储在缓存(例如,包括一级缓存L1、二级缓存L2和三级缓存L3等)中的分支信息。
还需要说明的是,在本公开的实施例中,不同类型的地址包括取指地址和缓存(块)地址。例如,对于BTB使用取指地址进行访问,例如使用取指地址对BTB进行查找、插入等操作。例如,对于填充缓冲器使用缓存地址进行访问。例如,使用缓存地址对填充缓冲器进行查找、插入等操作。例如,在本公开的实施例中使用的“当前取指起始地址”等属于取指地址一类,“第一缓存地址”、“第二缓存地址”等属于缓存地址一类,这将在下文中详细描述。例如,在本公开的实施例中,使用不同类型的地址访问不同的缓冲器,可以提高数据操作的效率。
例如,在本公开的实施例中,第一分支信息可以由第一表项表示,上文已经描述过第一表项的内容,此处不再赘述。例如,第二分支信息可以由第二表项表示,例如,第二表项的表项内容与第一表项内容基本一致,区别在于对第一表项和第二表项访问时使用的地址类型不同。例如,对第一表项访问时使用取指地址,而对第二表项访问时使用缓存(块)地址,也就是说,BTB使用取指地址进行访问,而填充缓冲器使用缓存地址进行访问。
例如,取指地址可以是任意字节对齐的,例如,可以是0x73、0x81、0x97等任意地址,而缓存地址是取指边界对齐的,例如,在取指边界为64字节时,缓存地址可以是0x40、0x80、0xC0等为64整数倍的地址。例如,在一些示例中,缓存地址可以由取指地址的后几位清零得到,例如,以32位地址为例,缓存地址=取指地址&0xFFFFFFC0。
例如,第三分支信息可以由第三表项表示。例如,对第三表项访问时使用缓存地址,即缓存使用缓存地址来进行访问,与第二表项基本一致。例如,第三表项可以具有如下域:位置域,类型域,目标地址域等。例如,在一个示例中,指令缓存块中所存储的第三表项可与指令缓存块相关联,因此指令缓存块所存储的第三表项可复用所在的指令缓存块的Tag域,而不再在第三表项中设置Tag域,由此可一定程度的减小第三表项(即第三分支信息)的数据量,有效的利用指令缓存块的空间资源。需要说明的是,本公开的实施例对第一表项、第二表项、第三表项所具有的内容不受限于上述内容,可以基于相应分支信息的内容、设计人员的设计等,调整第一表项、第二表项、第三表项所具有的内容。
图5为本公开至少一个实施例提供的又一种处理器核的框图。相比于图1B和图2A,图5所示的处理器核新增了独立的指令预取器和填充缓冲器(也可以称为BTB填充缓冲器),该新增部分由图5中的虚线表示。
例如,在本公开至少一实施例中,第一分支信息可以存储在分支目标缓冲器BTB中。例如,通过第一分支信息可以确定分支指令的类型、位置、目标地址等分支信息。如上所述,第一分支信息可以由第一表项表示,第一表项的内容在上文中已经描述,在此不再赘述。例如,在本公开至少一实施例中,第二分支信息可以存储在填充缓冲器(也可以称为BTB填充缓冲器)中。如上所述,第二分支信息可以由第二表项表示,第二表项的内容在上文中已经描述,在此不再赘述。
例如,在本公开至少一实施例中,分支预测方法10还具备指令预取功能。例如,指令预取是指在确定指令的取指地址之后,正式取指之前,判断指令是否已存储在一级缓存,若否,则从一级缓存的下级缓存提取指令到一级缓存中,以便在正式取指时,指令能够在一级缓存命中,提升取指时指令在一级缓存命中的概率。
例如,在本公开至少一实施例中,为了实现上述指令预取功能,在上述步骤S101之前,分支预测方法10还可以包括以下操作S201-S203:
步骤S201:获取与当前取指起始地址相对应的指令预取请求;
步骤S202:基于指令预取请求,获取与当前取指起始地址相对应的第三分支信息;
步骤S203:基于第三分支信息,得到第二分支信息,并将第二分支信息存储在填充缓冲器中。
例如,在本公开至少一实施例中,第三分支信息存储在缓存中。例如,缓存可以是多级结构,如图5所示,包括L1缓存、L2缓存和L3缓存。
例如,对于步骤S201,在一个示例中,可以通过指令预取器(独立的或者非独立的)得到指令预取请求。例如,指令预取请求可以包括一个地址范围(例如,该地址范围可以包括一个完整的缓存块的地址范围)。例如,基于该地址范围,当L1指令缓存未命中时,从下级缓存(L2/L3)中读取相应的缓存块(例如,包括指令以及相应分支信息等),并将该缓存块填入L1指令缓存中。
需要说明的是,本公开的实施例对指令预取器的具体实现方式不作限制,可以根据实际需求采用任意指令预取器,例如,PIF(proactive instruction field)指令预取器等。
例如,在将当前取指起始地址输入到分支预测单元之前,指令预取器可以输出与当前取指起始地址对应的指令预取请求给L1指令缓存。例如,如图5所示,该L1指令缓存存储指令及其分支信息(上述第三分支信息)。在L1指令缓存下方还包括L2/L3缓存,L2/L3缓存共同存储数据和指令,以及指令对应的分支信息(上述第三分支信息)。
例如,对于步骤S202,基于该指令取指请求,如果在L1指令缓存命中,则可以从L1指令缓存中获得相应的第三分支信息。如果L1指令缓存缺失,则可以从下级缓存(L2/L3)中读取相应的缓存块,并将该缓存块填入L1指令缓存中,从而从L1指令缓存中获得相应的第三分支信息。
例如,对于步骤S203,在一个示例中,可以将相应的第三分支信息从L1指令缓存中取出,发送给填充缓冲器,填入填充缓冲器的第二表项中,从而实现BTB预取的功能。
由于缓存中通常使用的是缓存地址,而指令预取请求使用的地址可能是取指地址,因此,在基于指令预取请求,获取L1指令缓存中的第三分支信息时,可能需要进行地址的转换。
例如,在本公开至少一实施例中,对于步骤S202,基于指令预取请求,获取与当前取指起始地址相对应的第三分支信息,包括:基于指令预取请求,得到第一缓存地址;基于第一缓存地址,访问缓存,获取第三分支信息。
例如,在一个示例中,指令预取请求使用的是取指地址,则在预取指令阶段,访问L1指令缓存之前,需要转换为对应的第一缓存地址,以便获取L1指令缓存中的第三分支信息。
需要说明的是,在本公开的实施例中所使用的地址可能是虚拟地址,也可能是物理地址。例如,缓存通常是使用物理地址索引的,则虚拟地址可以经过地址翻译以后,才发送到缓存。本公开的实施例对此不作限制,可以根据实际需求进行地址的虚实转换。
例如,在本公开至少一实施例中,分支预测方法10还包括:基于当前取指起始地址和第二分支信息,生成第一分支信息,并将第一分支信息存储在分支目标缓冲器中。
例如,在BTB未命中,填充缓冲器命中的情况下,基于相应的第二分支信息得到分支预测结果,然后根据当前取指起始地址,可以将由第二表项表示的该第二分支信息,填入到第一表项中,即生成对应的第一分支信息,并将第一分支信息存储在分支目标缓冲器BTB中,以便后续访问。如上所述,对第一表项和第二表项访问时使用的地址类型不同,BTB使用取指地址访问,填充缓冲器使用缓存地址访问,缓存地址可由相应的取指地址的后几位清零得到,而仅仅根据缓存地址无法直接得到相应的取指地址。因此,仅仅基于填充缓冲器中的第二分支信息无法直接填入BTB的第一表项,需要结合当前取指地址。
通过上述分支预测方法,在本公开的实施例中,BTB仍然使用常用的取指地址进行访问,而不是缓存地址,则不需要改变BTB的取指方式,提高了数据操作的效率。
同样,由于填充缓冲器使用的是缓存地址,而BTB使用的地址以及分支预测单元101输入的地址(例如,当前取指起始地址)可能是取指地址,因此,通常在基于当前取指起始地址,访问填充缓冲器时,需要进行地址的转换。
图7A为本公开至少一个实施例提供的一种分支预测方法的流程图;图7B为本公开至少一个实施例提供的另一种分支预测方法的流程图。
例如,在本公开至少一实施例中,基于当前取指起始地址,查找第一分支信息,包括:基于当前取指起始地址,访问分支目标缓冲器并在分支目标缓冲器中查找第一分支信息。响应于当前取指起始地址未命中第一分支信息,获取与当前取指起始地址对应的第二分支信息,包括:响应于当前取指起始地址未命中第一分支信息,访问填充缓冲器并从填充缓冲器获取第二分支信息。
例如,在本公开至少一实施例中,分支预测方法10还包括:响应于当前取指起始地址命中第一分支信息,基于第一分支信息,生成分支预测结果。
例如,在本公开至少一实施例中,分支预测方法10还包括:响应于当前取指起始地址未命中第一分支信息且未命中第二分支信息,基于预设边界和当前取指起始地址,生成分支预测结果。
例如,如图7A所示,在一个示例中,分支预测单元在接收当前取指起始地址以后,基于当前取指起始地址,访问分支目标缓冲器BTB,在BTB中查找与当前取指起始地址对应的第一分支信息。如果BTB命中,则从命中的BTB表项(第一表项)中获取该第一分支信息,并通过该第一分支信息,根据分支类别访问不同的组件,得到分支预测结果。如果BTB未命中,则将当前取指起始地址转换为第二缓存地址,使用第二缓存地址访问填充缓冲器。如果填充缓冲器命中,则从命中的填充缓冲器表项(第二表项)得到与当前取指起始地址(或者第二缓存地址)对应的第二分支信息,并基于该第二分支信息,得到分支预测结果。
例如,如果填充缓冲器也未命中,则判断在预设边界(取指边界)之前没有分支,可以直接得到分支预测结果,例如,在一个示例中,将当前取指结束地址设置为预先设定的取指边界(例如,64字节对应的边界),将选择的下一取指起始地址设置为当前取指结束地址+1。然后输出分支预测结果,例如该分支预测结果包括取指请求和下一取指起始地址。
例如,接下来,可以使用第二分支信息和当前取指起始地址生成第一分支信息,填入第一表项,存储到BTB中,以便后续访问。
例如,在本公开至少一实施例中,基于当前取指起始地址,查找第一分支信息,还可以包括:基于当前取指起始地址,得到第二缓存地址;基于当前取指起始地址,访问分支目标缓冲器并在分支目标缓冲器中查找第一分支信息,并且基于第二缓存地址访问填充缓冲器。
例如,在本公开的实施例中,在分支预测处理时,对填充缓冲器的访问时机可以是不同的。例如,在一个示例中,可以先进行BTB访问,查找BTB中的第一分支信息,只有在BTB缺失时,才进行对填充缓冲器访问。例如,在另一个示例中,为了减少延迟,也可以将对填充缓冲器的访问提前到和BTB同时访问,只有当BTB缺失时,才使用填充缓冲器中的内容(第二分支信息)进行分支预测,并形成BTB表项(第一表项)填入BTB。比较图7A和图7B,可以看出这两种不同流程的流程示意图的变化。
如图7B所示,图7B和图7A的区别在于访问填充缓冲器的时机。在图7B中,在使用当前取指起始地址查找BTB的同时,使用第二缓存地址(基于当前取指起始地址转换得到),查找填充缓存器。然后判断BTB是否命中,若BTB缺失,则进一步判断填充缓冲器是否命中,其他步骤与图7A基本一致,在此不再赘述。
例如,在本公开的实施例中,处理器核可以是复杂指令集计算机(CISC)处理器核。由于在本公开的实施例提供的分支预测方法10中,缓存中不仅存储了指令,还存储了指令对应的分支信息,从而在预取指令阶段,可以通过读取方式获得相应分支信息,并将其存储在填充缓冲器中,而无需通过预解码的方式获得该分支信息。因此,本公开的实施例提供的分支预测方法10支持CISC架构下的BTB预取。
因此,通过上述分支预测方法10可以缓解分支目标缓冲器BTB容量限制问题,还可以实现分支目标缓冲器BTB的指令预取,减轻由于BTB缺失导致分支预测失败的开销,并且能够支持CISC架构下的BTB预取。
本公开还提供一种分支预测装置,图8为根据本公开至少一个实施例的一种分支预测装置的示意框图。
例如,如图8所示,分支预测装置80可以包括:获取单元801、查找单元802、确定单元803以及预测单元804。
例如,在本公开的实施例中,获取单元801可以配置为获取当前取指起始地址,查找单元802可以配置为基于当前取指起始地址,查找与当前取指起始地址对应的第一分支信息,确定单元803可以配置为响应于当前取指起始地址未命中第一分支信息,获取与当前取指起始地址对应的第二分支信息,预测单元804可以配置为基于第二分支信息,生成分支预测结果。第一分支信息和第二分支信息存储在处理器核的不同的缓冲器中,使用不同类型的地址访问不同的缓冲器。
如上所述的分支预测装置进行分支预测的过程与如上所述的分支预测方法10类似,在此不再赘述。
利用如图8所示的分支预测装置80可以缓解分支目标缓冲器BTB容量限制问题,还可以实现分支目标缓冲器BTB的指令预取,减轻由于BTB缺失导致分支预测失败的开销,并且能够支持CISC架构下的BTB预取。
上文描述了本公开实施例提供的多个实施例方案,各实施例方案介绍的各可选方式可在不冲突的情况下相互结合、交叉引用,从而延伸出多种可能的实施例方案,这些均可认为是本公开实施例披露、公开的实施例方案。
本公开实施例还提供一种处理器核,图9为本公开至少一个实施例提供的一种处理器核的框图。
例如,如图9所示,处理器核90可以包括如上所述的分支预测装置901。
根据本公开的分支预测方法、分支预测装置以及处理器核,可以缓解分支目标缓冲器BTB容量限制问题,还可以实现分支目标缓冲器BTB的指令预取,减轻由于BTB缺失导致分支预测失败的开销,并且能够支持CISC架构下的BTB预取。
本领域普通技术人员可以理解上述方法中的全部或部分的步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本公开并不限制于任何特定形式的硬件和软件的结合。
除非另有定义,这里使用的所有术语(包括技术和科学术语)具有与本公开所属领域的普通技术人员共同理解的相同含义。还应当理解,诸如在通常字典里定义的那些术语应当被解释为具有与它们在相关技术的上下文中的含义相一致的含义,而不应用理想化或极度形式化的意义来解释,除非这里明确地这样定义。
以上是对本公开的说明,而不应被认为是对其的限制。尽管描述了本公开的若干示例性实施例,但本领域技术人员将容易地理解,在不背离本公开的新颖教学和优点的前提下可以对示例性实施例进行许多修改。因此,所有这些修改都意图包含在权利要求书所限定的本公开范围内。应当理解,上面是对本公开的说明,而不应被认为是限于所公开的特定实施例,并且对所公开的实施例以及其他实施例的修改意图包含在所附权利要求书的范围内。本公开由权利要求书及其等效物限定。
Claims (15)
1.一种分支预测方法,包括:
获取当前取指起始地址;
基于所述当前取指起始地址,查找与所述当前取指起始地址对应的第一分支信息;
响应于所述当前取指起始地址未命中所述第一分支信息,获取与所述当前取指起始地址对应的第二分支信息;
基于所述第二分支信息,生成分支预测结果;
其中,所述第一分支信息和所述第二分支信息存储在处理器核的不同的缓冲器中,使用不同类型的地址访问所述不同的缓冲器,
其中,所述第一分支信息存储在分支目标缓冲器中。
2.根据权利要求1所述的分支预测方法,其中,所述第二分支信息存储在填充缓冲器中。
3.根据权利要求2所述的分支预测方法,在获取所述当前取指起始地址之前,还包括:
获取与所述当前取指起始地址相对应的指令预取请求;
基于所述指令预取请求,获取与所述当前取指起始地址相对应的第三分支信息;
基于所述第三分支信息,得到所述第二分支信息,并将所述第二分支信息存储在所述填充缓冲器中。
4.根据权利要求3所述的分支预测方法,其中,所述第三分支信息存储在缓存中。
5.根据权利要求3所述的分支预测方法,其中,获取与所述当前取指起始地址相对应的所述指令预取请求,包括:
利用指令预取器,生成所述指令预取请求。
6.根据权利要求4所述的分支预测方法,其中,基于所述指令预取请求,获取与所述当前取指起始地址相对应的所述第三分支信息,包括:
基于所述指令预取请求,得到第一缓存地址;
基于所述第一缓存地址,访问所述缓存,获取所述第三分支信息。
7.根据权利要求1所述的分支预测方法,还包括:
基于所述当前取指起始地址和所述第二分支信息,生成所述第一分支信息,并将所述第一分支信息存储在所述分支目标缓冲器中。
8.根据权利要求2所述的分支预测方法,其中,基于所述当前取指起始地址,查找所述第一分支信息,包括:
基于所述当前取指起始地址,访问所述分支目标缓冲器并在所述分支目标缓冲器中查找所述第一分支信息。
9.根据权利要求8所述的分支预测方法,其中,响应于所述当前取指起始地址未命中所述第一分支信息,获取与所述当前取指起始地址对应的所述第二分支信息,包括:
响应于所述当前取指起始地址未命中所述第一分支信息,访问所述填充缓冲器并从所述填充缓冲器获取所述第二分支信息。
10.根据权利要求2所述的分支预测方法,其中,基于所述当前取指起始地址,查找与所述当前取指起始地址对应的所述第一分支信息,包括:
基于所述当前取指起始地址,得到第二缓存地址;
基于所述当前取指起始地址,访问所述分支目标缓冲器并在所述分支目标缓冲器中查找所述第一分支信息,并且基于所述第二缓存地址访问所述填充缓冲器。
11.根据权利要求1所述的分支预测方法,还包括:
响应于所述当前取指起始地址命中所述第一分支信息,基于所述第一分支信息,生成所述分支预测结果。
12.根据权利要求1所述的分支预测方法,还包括:
响应于所述当前取指起始地址未命中所述第一分支信息且未命中所述第二分支信息,基于预设边界和所述当前取指起始地址,生成所述分支预测结果。
13.根据权利要求1所述的分支预测方法,其中,所述处理器包括复杂指令集计算机处理器。
14.一种分支预测装置,包括:
获取单元,配置为获取当前取指起始地址;
查找单元,配置为基于所述当前取指起始地址,查找与所述当前取指起始地址对应的第一分支信息;
确定单元,配置为响应于所述当前取指起始地址未命中所述第一分支信息,获取与所述当前取指起始地址对应的第二分支信息;
预测单元,配置为基于所述第二分支信息,生成分支预测结果,
其中,所述第一分支信息和所述第二分支信息存储在处理器核的不同的缓冲器中,使用不同类型的地址访问所述不同的缓冲器,
其中,所述第一分支信息存储在分支目标缓冲器中。
15.一种处理器核,包括如权利要求14所述的分支预测装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011475222.0A CN112579175B (zh) | 2020-12-14 | 2020-12-14 | 分支预测方法、分支预测装置和处理器核 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011475222.0A CN112579175B (zh) | 2020-12-14 | 2020-12-14 | 分支预测方法、分支预测装置和处理器核 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112579175A CN112579175A (zh) | 2021-03-30 |
CN112579175B true CN112579175B (zh) | 2023-03-31 |
Family
ID=75135025
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011475222.0A Active CN112579175B (zh) | 2020-12-14 | 2020-12-14 | 分支预测方法、分支预测装置和处理器核 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112579175B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113918225A (zh) * | 2021-11-04 | 2022-01-11 | 成都海光微电子技术有限公司 | 指令预测方法、指令数据处理装置、处理器以及存储介质 |
CN114358179A (zh) * | 2021-12-31 | 2022-04-15 | 海光信息技术股份有限公司 | 处理器的预取训练方法、处理装置、处理器和计算设备 |
CN117093271A (zh) * | 2023-09-06 | 2023-11-21 | 上海耀芯电子科技有限公司 | 一种分支指令的预取方法及装置 |
CN117472446B (zh) * | 2023-12-28 | 2024-04-09 | 北京微核芯科技有限公司 | 基于处理器的多级取指目标缓冲器的分支预测方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0649084A1 (en) * | 1993-10-18 | 1995-04-19 | Cyrix Corporation | Microprocessor branch processing |
US5732253A (en) * | 1994-10-18 | 1998-03-24 | Cyrix Corporation | Branch processing unit with target cache storing history for predicted taken branches and history cache storing history for predicted not-taken branches |
CN1521635A (zh) * | 2003-01-14 | 2004-08-18 | 智权第一公司 | 解决分支目标地址快取中死结提取条件的装置与方法 |
CN104220980A (zh) * | 2011-12-29 | 2014-12-17 | 英特尔公司 | 经管理的指令缓存预取 |
CN110069285A (zh) * | 2019-04-30 | 2019-07-30 | 海光信息技术有限公司 | 一种检测分支预测的方法及处理器 |
CN110825442A (zh) * | 2019-04-30 | 2020-02-21 | 海光信息技术有限公司 | 一种指令预取方法及处理器 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070186049A1 (en) * | 2006-02-03 | 2007-08-09 | International Business Machines Corporation | Self prefetching L2 cache mechanism for instruction lines |
US7917731B2 (en) * | 2006-08-02 | 2011-03-29 | Qualcomm Incorporated | Method and apparatus for prefetching non-sequential instruction addresses |
US20150268961A1 (en) * | 2014-03-21 | 2015-09-24 | Samsung Electronics Co., Ltd. | Decoupling l2 btb from l2 cache to accelerate search for miss after miss |
US10922082B2 (en) * | 2019-03-05 | 2021-02-16 | Arm Limited | Branch predictor |
-
2020
- 2020-12-14 CN CN202011475222.0A patent/CN112579175B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0649084A1 (en) * | 1993-10-18 | 1995-04-19 | Cyrix Corporation | Microprocessor branch processing |
US5732253A (en) * | 1994-10-18 | 1998-03-24 | Cyrix Corporation | Branch processing unit with target cache storing history for predicted taken branches and history cache storing history for predicted not-taken branches |
CN1521635A (zh) * | 2003-01-14 | 2004-08-18 | 智权第一公司 | 解决分支目标地址快取中死结提取条件的装置与方法 |
CN104220980A (zh) * | 2011-12-29 | 2014-12-17 | 英特尔公司 | 经管理的指令缓存预取 |
CN110069285A (zh) * | 2019-04-30 | 2019-07-30 | 海光信息技术有限公司 | 一种检测分支预测的方法及处理器 |
CN110825442A (zh) * | 2019-04-30 | 2020-02-21 | 海光信息技术有限公司 | 一种指令预取方法及处理器 |
Non-Patent Citations (1)
Title |
---|
Windows视频驱动程序的技术剖析和比较;陈军等;《计算机工程与应用》;20020815(第16期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112579175A (zh) | 2021-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112579175B (zh) | 分支预测方法、分支预测装置和处理器核 | |
CN110069285B (zh) | 一种检测分支预测的方法及处理器 | |
US6151662A (en) | Data transaction typing for improved caching and prefetching characteristics | |
US8364902B2 (en) | Microprocessor with repeat prefetch indirect instruction | |
US5774710A (en) | Cache line branch prediction scheme that shares among sets of a set associative cache | |
JP2011100454A (ja) | 分岐誤予測バッファを用いるためのシステム及び方法 | |
WO2014039962A1 (en) | Fetch width predictor | |
TWI512626B (zh) | 微處理器中存取及管理程式碼轉譯 | |
WO2008106211A1 (en) | Branch predictor directed prefetch | |
TWI502347B (zh) | 分支預測功率縮減 | |
TWI502496B (zh) | 提供分支預測功率縮減的微處理器 | |
US10481912B2 (en) | Variable branch target buffer (BTB) line size for compression | |
WO2021263156A1 (en) | Instruction address translation and instruction prefetch engine | |
CN110806900B (zh) | 一种访存指令处理方法及处理器 | |
US20190079771A1 (en) | Lookahead out-of-order instruction fetch apparatus for microprocessors | |
US10241796B2 (en) | Compiler-assisted lookahead (CAL) memory system apparatus for microprocessors | |
US10691460B2 (en) | Pointer associated branch line jumps for accelerated line jumps | |
CN110825442B (zh) | 一种指令预取方法及处理器 | |
CN112596792A (zh) | 分支预测方法、装置、介质及设备 | |
US10922082B2 (en) | Branch predictor | |
US9395985B2 (en) | Efficient central processing unit (CPU) return address and instruction cache | |
CN113515311A (zh) | 微处理器和预取指调整方法 | |
CN113568663A (zh) | 代码预取指令 | |
US11947461B2 (en) | Prefetch unit filter for microprocessor | |
US11151054B2 (en) | Speculative address translation requests pertaining to instruction cache misses |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20230307 Address after: 610216 building 4, No. 171, hele'er street, Chengdu hi tech Zone, China (Sichuan) pilot Free Trade Zone, Chengdu, Sichuan Applicant after: CHENGDU HAIGUANG MICROELECTRONICS TECHNOLOGY Co.,Ltd. Address before: 300392 North 2-204 industrial incubation-3-8, 18 Haitai West Road, Huayuan Industrial Zone, Tianjin Applicant before: Haiguang Information Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |