CN116737240A - 分支预测方法、装置、处理器、介质及设备 - Google Patents

分支预测方法、装置、处理器、介质及设备 Download PDF

Info

Publication number
CN116737240A
CN116737240A CN202210205048.0A CN202210205048A CN116737240A CN 116737240 A CN116737240 A CN 116737240A CN 202210205048 A CN202210205048 A CN 202210205048A CN 116737240 A CN116737240 A CN 116737240A
Authority
CN
China
Prior art keywords
instruction
branch
address
loop
instructions
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.)
Granted
Application number
CN202210205048.0A
Other languages
English (en)
Other versions
CN116737240B (zh
Inventor
李东声
任子木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202210205048.0A priority Critical patent/CN116737240B/zh
Priority to PCT/CN2022/134994 priority patent/WO2023165185A1/zh
Priority to US18/339,024 priority patent/US20230350683A1/en
Publication of CN116737240A publication Critical patent/CN116737240A/zh
Application granted granted Critical
Publication of CN116737240B publication Critical patent/CN116737240B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30069Instruction skipping instructions, e.g. SKIP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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

本申请的实施例提供了一种分支预测方法、装置、处理器、介质及设备。所述分支预测方法包括:获取待处理指令块,所述待处理指令块中包含有至少一条指令;若根据分支目标缓冲区中存储的分支指令信息检测到所述待处理指令块中包含有分支指令,则检测所述分支指令的类型;若所述分支指令的类型是除目标类型之外的其它类型,则从所述分支目标缓冲区中查找得到所述分支指令的预测跳转地址,所述目标类型包括以下至少一种:函数调用指令、函数返回指令和循环指令;若所述分支指令的类型为所述目标类型,则从所述分支预测器的其它地址区中查找得到所述分支指令的预测跳转地址。本申请实施例的技术方案可以提高处理器对指令执行的效率。

Description

分支预测方法、装置、处理器、介质及设备
技术领域
本申请涉及计算机及通信技术领域,具体而言,涉及一种分支预测方法、装置、处理器、介质及设备。
背景技术
分支指令是计算机程序中的一种指令,它可以使计算机执行不同的指令序列,从而偏离其按顺序执行指令的默认行为。在处理器的设计中,如果不加入分支预测器,那么会对处理器性能产生较大影响,但是目前的人工智能处理器以及浅流水线通用处理器一般没有对应的分支预测器,这样会降低人工智能处理器及浅流水线通用处理器的处理性能,影响处理器对指令执行的效率。
发明内容
本申请的实施例提供了一种分支预测方法、装置、处理器、介质及设备,进而至少在一定程度上可以提高处理器对指令执行的效率。
本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。
根据本申请实施例的一个方面,提供了一种用于处理器的分支预测方法,所述处理器中包含有分支预测器,所述分支预测器中包含有用于存储分支指令信息的分支目标缓冲区,所述分支预测方法包括:获取待处理指令块,所述待处理指令块中包含有至少一条指令;若根据所述分支目标缓冲区中存储的分支指令信息检测到所述待处理指令块中包含有分支指令,则检测所述分支指令的类型;若所述分支指令的类型是除目标类型之外的其它类型,则从所述分支目标缓冲区中查找得到所述分支指令的预测跳转地址,所述目标类型包括以下至少一种:函数调用指令、函数返回指令和循环指令;若所述分支指令的类型为所述目标类型,则从所述分支预测器的其它地址区中查找得到所述分支指令的预测跳转地址。
根据本申请实施例的一个方面,提供了一种用于处理器的分支预测装置,所述处理器中包含有分支预测器,所述分支预测器中包含有用于存储分支指令信息的分支目标缓冲区,所述分支预测装置包括:获取单元,配置为获取待处理指令块,所述待处理指令块中包含有至少一条指令;检测单元,配置为若根据所述分支目标缓冲区中存储的分支指令信息检测到所述待处理指令块中包含有分支指令,则检测所述分支指令的类型;处理单元,配置为若所述分支指令的类型是除目标类型之外的其它类型,则从所述分支目标缓冲区中查找得到所述分支指令的预测跳转地址,所述目标类型包括以下至少一种:函数调用指令、函数返回指令和循环指令,并配置为若所述分支指令的类型为所述目标类型,则从所述分支预测器的其它地址区中查找得到所述分支指令的预测跳转地址。
在本申请的一些实施例中,基于前述方案,所述分支目标缓冲区中包含有至少一条分支指令信息,所述分支指令信息包括分支指令标识信息、分支指令的类型和分支指令的预测跳转地址;所述检测单元配置为:将所述待处理指令块中所包含指令的标识信息与所述分支目标缓冲区中所包含的分支指令标识信息进行匹配,以确定所述待处理指令块中是否包含有分支指令,以及所包含的分支指令的类型。
在本申请的一些实施例中,基于前述方案,所述检测单元还配置为:若根据所述分支目标缓冲区中存储的分支指令信息检测到所述待处理指令块中包含有分支指令,则根据所述分支目标缓冲区中存储的分支指令信息检测所述分支指令是否需要进行跳转;所述处理单元配置为,在检测到所述分支指令需要进行跳转时,执行查找得到所述分支指令的预测跳转地址的操作。
在本申请的一些实施例中,基于前述方案,所述其它地址区包括返回地址栈,所述目标类型包括函数调用指令和函数返回指令;所述处理单元从所述分支预测器的其它地址区中查找得到所述分支指令的预测跳转地址,包括:若所述分支指令的类型为函数调用指令,则将调用的函数地址压入所述返回地址栈;若所述分支指令的类型为函数返回指令,则将压入所述返回地址栈中的函数地址弹出,以作为所述预测跳转地址。
在本申请的一些实施例中,基于前述方案,所述其它地址区包括用于存储循环指令信息的循环缓冲区,所述目标类型包括循环指令;其中,所述处理单元从所述分支预测器的其它地址区中查找得到所述分支指令的预测跳转地址,包括:若所述分支指令的类型为循环指令,则根据所述循环缓冲区中存储的循环指令信息,获取所述循环指令的已循环次数与循环总数;若所述循环指令的已循环次数与所述循环总数相等,则针对所述循环指令预测为跳出循环;若所述循环指令的已循环次数与所述循环总数不相等,则将所述循环指令对应的循环起始地址作为所述预测跳转地址。
在本申请的一些实施例中,基于前述方案,所述循环缓冲区中包含有至少一条循环指令信息,所述循环指令信息包括循环指令标识信息、循环总数、已循环次数和循环起始地址;所述处理单元配置为:提取所述循环指令所对应的循环体内的指定指令;将所述指定指令的标识信息与所述循环缓冲区中的循环指令标识信息进行匹配,以确定与所述指定指令的标识信息相匹配的循环指令信息;根据与所述指定指令的标识信息相匹配的循环指令信息,查询得到所述循环指令的已循环次数与循环总数。
在本申请的一些实施例中,基于前述方案,所述指定指令包括所述循环体内的最后一条指令。
在本申请的一些实施例中,基于前述方案,所述处理单元还配置为:若所述循环指令的已循环次数与所述循环总数不相等,则将所述循环缓冲区中,与所述指定指令的标识信息相匹配的循环指令信息的已循环次数增加设定值。
在本申请的一些实施例中,基于前述方案,所述分支预测方法的预测过程与所述处理器的取指令过程处于同一个时钟周期内。
在本申请的一些实施例中,基于前述方案,所述处理单元还配置为:若根据所述分支目标缓冲区中存储的分支指令信息检测到所述待处理指令块中包含有分支指令,则将所述分支指令的预测跳转地址作为下一个待处理指令块的起始地址;若根据所述分支目标缓冲区中存储的分支指令信息检测到所述待处理指令块中不包含有分支指令,则将位于所述待处理指令块的最后一条指令地址之后的顺序地址作为下一个待处理指令块的起始地址。
根据本申请实施例的一个方面,提供了一种分支预测器,所述分支预测器设置于处理器内,所述分支预测器用于实现如上述实施例中所述的分支预测方法。
根据本申请实施例的一个方面,提供了一种处理器,所述处理器包括:如上述实施例中所述的分支预测器;以及
多路复用器,所述多路复用器的第一输入端连接至所述分支预测器的输出端,所述多路复用器的第二输入端为顺序取指令端,所述多路复用器的输出端连接至指令缓存单元的输入端和所述分支预测器的输入端;其中,所述多路复用器在所述第一输入端输入预测跳转地址时,输出所述预测跳转地址,在所述第一输入端未输入预测跳转地址时,输出所述第二输入端输入的指令地址;
所述指令缓存单元,用于根据所述多路复用器输出的地址,获取对应的指令信息;
指令译码单元,连接至所述指令缓存单元,用于对所述指令缓存单元获取到的指令信息进行译码,得到控制信号;
指令执行单元,连接至所述指令译码单元,用于根据所述指令译码单元得到的控制信号执行对应的操作。
根据本申请实施例的一个方面,提供了一种计算机可读介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述实施例中所述的分支预测方法。
根据本申请实施例的一个方面,提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述电子设备实现如上述实施例中所述的分支预测方法。
根据本申请实施例的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种可选实施例中提供的分支预测方法。
在本申请的一些实施例所提供的技术方案中,通过在根据分支目标缓冲区中存储的分支指令信息检测到待处理指令块中包含有分支指令时,检测分支指令的类型,且在分支指令的类型是除目标类型之外的其它类型时,从分支目标缓冲区中查找得到分支指令的预测跳转地址,该目标类型包括以下至少一种:函数调用指令、函数返回指令和循环指令,而在分支指令的类型为目标类型时,从分支预测器的其它地址区中查找得到分支指令的预测跳转地址,使得针对各种类型的分支指令都能够实现预测跳转地址的预测,实现了对分支指令类型的全覆盖,进而可以提高处理器对指令执行的效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示出了根本本申请的一个实施例的处理装置的架构图;
图2示出了根据本申请的一个实施例的用于处理器的分支预测方法的流程图;
图3示出了根据本申请的一个实施例的分支目标缓冲区内所包含的分支指令信息的示意图;
图4示出了根据本申请的一个实施例的确定循环指令的预测跳转地址的流程图;
图5示出了根据本申请的一个实施例的循环缓冲区内所包含的循环指令信息的示意图;
图6示出了根据本申请的一个实施例的用于处理器的分支预测方法的流程图;
图7示出了根本本申请的一个实施例的处理装置的架构图;
图8示出了根据本申请的一个实施例的分支目标缓冲区内所包含的分支指令信息的示意图;
图9示出了根据本申请的一个实施例的循环缓冲区内所包含的循环指令信息的示意图;
图10示出了根据本申请的一个实施例的用于处理器的分支预测装置的框图;
图11示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
具体实施方式
现在参考附图以更全面的方式描述示例实施方式。然而,示例的实施方式能够以各种形式实施,且不应被理解为仅限于这些范例;相反,提供这些实施方式的目的是使得本申请更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
此外,本申请所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,有许多具体细节从而可以充分理解本申请的实施例。然而,本领域技术人员应意识到,在实施本申请的技术方案时可以不需用到实施例中的所有细节特征,可以省略一个或更多特定细节,或者可以采用其它的方法、元件、装置、步骤等。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
需要说明的是:在本文中提及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
计算机程序的指令序列可以包括各种分支指令,如条件跳转指令等,分支指令是计算机程序中的一种指令,它可以使计算机执行不同的指令序列,从而偏离其按顺序执行指令的默认行为。
据统计,平均每7条指令中就有一条是分支指令,在指令流水线结构中,对于分支指令相当敏感。假设在指令流水线中的第一条指令已进入到译码阶段,而第二条指令已进入到提取阶段(即准备进入译码器),如果发现第一条指令是分支指令(如跳转到某个地址),则指令预取队列中的下一条及其之后的指令预取无效。在第一条指令执行期间形成了分支的目标地址,然后需要从目标地址中现取指令,并交付执行,同时应立即清除指令预取队列,再将目标地址后面的指令预取过来填到队列中,这种方式叫做流水线停顿(pipelinestalled)或者流水线冒泡(pipeline bubbling)或者分支延迟间隙。当然这也表明,一旦遇到分支指令,整个指令流水线就被打乱一次,稍后才能恢复到正常,显然这影响了机器的运行速度。
分支预测器可以改进指令流水线中的流程,如上所述,在没有分支预测的情况下,处理器必须等到分支指令(例如条件跳转指令)通过执行阶段后,下一条指令才能进入提取阶段。而分支预测器通过预测分支是否可能跳转来避免这种等待,然后提取最可能的分支处的指令作为预测指令,并且从预测指令开始的一个或多个指令被推测性地执行;如果处理器稍后检测到分支预测错误,则刷新流水线(即流水线冲刷Pipeline Flush)并且流水线以正确的指令重新开始。
可见,在处理器的设计中,如果不加入分支预测器或者分支预测器预测准确率不高的话,都会对处理器性能产生较大影响,在高性能超标量处理器设计中,有多种复杂分支预测器的设计方案。但是,目前的人工智能处理器以及浅流水线通用处理器一般没有对应的分支预测器,不设计的原因主要是认为浅流水线的停顿和冲刷可以忍受。另外,人工智能处理器的指令集与通用的超标量处理器的指令集存在一定的差异,因此对于人工智能处理器以及浅流水线通用处理器,相关技术中即使做分支预测,往往是非常简易并且与自身指令集高度耦合。
前面所提到的人工智能处理器即AI(Artificial Intelligence)芯片,它最大的优势就在于人工智能方面,在引入人工智能的深度学习能力后,可实现系统内部资源智能分配,并具有感知、推理与决策功能。人工智能是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。人工智能技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习、自动驾驶、智慧交通等几大方向。
在人工智能处理器以及浅流水线通用处理器芯片应用中,分支指令占总运行指令的近四分之一,因此有必要设计分支预测器来降低分支指令带来的流水线暂停或是冲刷。因此,本申请实施例提出了一种应用于处理器的分支预测方案,可以提升处理器的性能效率。
具体而言,如图1所示,在本申请得一个实施例中,处理装置(如处理器)100的系统架构可以包括多路复用器101、指令缓存单元102、指令译码单元103、指令执行单元104和分支预测器105。
其中,多路复用器101的第一输入端连接至分支预测器105的输出端,多路复用器101的第二输入端为顺序取指令端,多路复用器101的输出端连接至指令缓存单元102的输入端和分支预测器105的输入端。指令缓存单元102的输出端连接至指令译码单元103的输入端,指令译码单元103的输出端连接至指令执行单元104的输入端。
在一些可选的实施例中,分支预测器105中包含有分支目标缓冲区,当分支预测器105获取到待处理指令块(该待处理指令块是多路复用器101输出的指令块)之后,可以根据分支目标缓冲区中存储的分支指令信息检测该待处理指令块中是否有分支指令,当检测到待处理指令块中包含有分支指令时,可以检测分支指令的类型。进而如果分支指令的类型是除目标类型之外的其它类型,则从分支目标缓冲区中查找得到分支指令的预测跳转地址,该目标类型包括以下至少一种:函数调用指令、函数返回指令和循环指令;如果分支指令的类型为前述的目标类型,则从分支预测器的其它地址区(如返回地址栈、循环缓冲区等)中查找得到分支指令的预测跳转地址。
具体而言,如果分支指令的类型为函数调用指令,则将调用的函数地址压入返回地址栈;若分支指令的类型为函数返回指令,则将压入返回地址栈中的函数地址弹出,以作为预测跳转地址。
如果分支指令的类型为循环指令,则根据循环缓冲区中存储的循环指令信息,获取循环指令的已循环次数与循环总数;若循环指令的已循环次数与循环总数相等,则针对循环指令预测为跳出循环;若循环指令的已循环次数与循环总数不相等,则将循环指令对应的循环起始地址作为预测跳转地址。
在一些可选的实施例中,多路复用器101可以在第一输入端输入预测跳转地址时,输出该预测跳转地址,在第一输入端未输入预测跳转地址时,输出第二输入端输入的指令地址(即顺序取到的指令地址)。
指令缓存单元102用于根据多路复用器101输出的地址,获取对应的指令信息;指令译码单元103用于对指令缓存单元102获取到的指令信息进行译码,得到控制信号;指令执行单元104用于根据指令译码单元103得到的控制信号执行对应的操作。
由于分支预测器105针对各种类型的分支指令都能够实现预测跳转地址的预测,实现了对分支指令类型的全覆盖,因此本申请实施例的技术方案可以提高处理器对指令执行的效率。
以下对本申请实施例的技术方案的实现细节进行详细阐述:
图2示出了根据本申请的一个实施例的用于处理器的分支预测方法的流程图,该用于处理器的分支预测方法可以由分支预测器来执行,比如可以由图1中所示的分支预测器105来执行,该分支预测器中包含有用于存储分支指令信息的分支目标缓冲区。参照图2所示,该用于处理器的分支预测方法至少包括以下步骤S210至步骤S240:
步骤S210,获取待处理指令块,该待处理指令块中包含有至少一条指令;
步骤S220,若根据分支目标缓冲区中存储的分支指令信息检测到待处理指令块中包含有分支指令,则检测分支指令的类型;
步骤S230,若分支指令的类型是除目标类型之外的其它类型,则从分支目标缓冲区中查找得到分支指令的预测跳转地址,该目标类型包括以下至少一种:函数调用指令、函数返回指令和循环指令;
步骤S240,若分支指令的类型为目标类型,则从分支预测器的其它地址区中查找得到分支指令的预测跳转地址。
以下对图2中所示的各个步骤的实现细节进行详细阐述:
在步骤S210中,获取待处理指令块,该待处理指令块中包含有至少一条指令。
在一些可选的实施例中,待处理指令块可以是需要进行提取来执行的指令块。待处理指令块可以由该指令块内的第一条指令的地址作为标签来进行识别,并且一个指令块内包含的指令条数通常是确定的,例如可以是1、2、4、8、16、32条等。
在一些可选地实施例中,待处理指令块中所包含的指令可以是顺序执行的指令,也可以是分支指令,分支指令可以使计算机执行不同的指令序列,从而偏离其按顺序执行指令的默认行为。
在步骤S220中,若根据分支目标缓冲区中存储的分支指令信息检测到待处理指令块中包含有分支指令,则检测分支指令的类型。
在一些可选的实施例中,分支目标缓冲区中包含有至少一条分支指令信息。如图3所示,每一条分支指令信息包括分支指令标识信息301、分支指令的类型302和分支指令的预测跳转地址303。其中,分支指令标识信息301用于对分支指令进行标识,其可以是指令的地址,比如可以通过一个设定位数的二进制数来表示;分支指令的类型用于表示分支指令是否是函数调用指令、函数返回指令、循环指令或者其它类型的指令等,比如分支指令的类型为“0”,表示是条件跳转类型,分支指令的类型为“1”,表示是循环类型等;预测跳转地址303用于表示针对分支指令预测得到的跳转地址,具体可以通过一个设定位数的二进制数来表示。
基于图3所示的分支指令信息,在检测待处理指令块中是否包含有分支指令时,可以将待处理指令块中所包含指令的标识信息与分支目标缓冲区中所包含的分支指令标识信息进行匹配,如果能够匹配到分支指令标识信息,那么可以确定待处理指令块中包含有分支指令,并且可以根据图3所示的分支指令信息来确定分支指令的类型。
在一些可选的实施例中,分支目标缓冲区中所存储的分支指令信息可以是通过机器学习的方式得到的,比如在处理器对指令的执行过程中,根据指令的执行结果和指令的特征识别出分支指令,然后将识别出的分支指令存储在分支目标缓冲区中,以便于分支预测器据此来检测指令块中是否存在分支指令。
在本申请的一个实施例中,如果根据分支目标缓冲区中存储的分支指令信息检测到待处理指令块中包含有分支指令,还可以进一步根据分支目标缓冲区中存储的分支指令信息检测分支指令是否需要进行跳转,如果检测到分支指令需要进行跳转,则可以执行下述实施例中所描述的查找分支指令的预测跳转地址的过程。
在一些可选的实施例中,参照图3所示,每一条分支指令信息除了包括分支指令标识信息301、分支指令的类型302和分支指令的预测跳转地址303之外,还可以包含是否跳转的字段304,这样可以基于该字段304的值来确定分支指令是否需要进行跳转。
继续参照图2所示,在步骤S230中,若分支指令的类型是除目标类型之外的其它类型,则从分支目标缓冲区中查找得到分支指令的预测跳转地址,该目标类型包括以下至少一种:函数调用指令、函数返回指令和循环指令。
在一些可选的实施例中,其它类型比如可以是条件跳转类型等。在本申请的实施例中,如果分支指令的类型为除目标类型之外的其它类型,那么可以通过图3中所示的分值指令信息来查询预测跳转地址303。
继续参照图2所示,在步骤S240中,若分支指令的类型为目标类型,则从分支预测器的其它地址区中查找得到分支指令的预测跳转地址。
需要说明的是:图2中所示步骤的执行顺序仅为示意,在本申请的其它实施例中,具体步骤的执行顺序可以进行调整,比如可以如图2所示先执行步骤S230,再执行步骤S240;或者也可以先执行步骤S240,再执行步骤S230;或者还可以同时执行步骤S230和步骤S240。
在一些可选的实施例中,其它地址区可以包括返回地址栈,目标类型包括函数调用指令和函数返回指令。在这种情况下,如果分支指令的类型为函数调用指令,则可以将调用的函数地址压入返回地址栈;如果分支指令的类型为函数返回指令,则将压入返回地址栈中的函数地址弹出,以作为预测跳转地址。
由于函数调用指令与函数返回指令通常都是成对出现的,因此只要指令是在正常执行,那么其函数的调用和返回会成对出现,进而便能够提供较高的预测准确率,并且也可以快速的为函数返回指令预测出跳转地址。
在一些可选的实施例中,其它地址区包括用于存储循环指令信息的循环缓冲区,目标类型可以包括循环指令。在这种情况下,确定循环指令的预测跳转地址的过程可以参照图4所示,包括如下步骤:
步骤S410,若分支指令的类型为循环指令,则根据循环缓冲区中存储的循环指令信息,获取循环指令的已循环次数与循环总数。
在一些可选的实施例中,循环缓冲区中包含有至少一条循环指令信息。如图5所示,每一条循环指令信息包括循环指令标识信息501、循环总数502、已循环次数503和循环起始地址504。其中,循环指令标识信息501用于对循环指令进行标识,其可以是指令的地址,具体比如可以通过一个设定位数的二进制数来表示;循环总数502用于表示循环指令所对应的循环体的循环总次数,具体可以通过一个设定位数的二进制数来表示;已循环次数503用于表示循环指令所对应的循环体已经进行循环的次数,具体可以通过一个设定位数的二进制数来表示;循环起始地址504用于表示循环体中第一条指令的地址,具体可以通过一个设定位数的二进制数来表示。
基于图5所示的循环指令信息,在获取循环指令的已循环次数与循环总数时,可以提取循环指令所对应的循环体内的指定指令,然后将指定指令的标识信息与循环缓冲区中的循环指令标识信息进行匹配,以匹配到与指定指令的标识信息相匹配的循环指令信息,然后可以根据图5所示的循环指令信息,根据与指定指令的标识信息相匹配的循环指令信息,查询得到循环指令的已循环次数与循环总数。
在一些可选的实施例中,循环缓冲区中所存储的循环指令信息可以是通过机器学习的方式得到的,比如在处理器对指令的执行过程中,根据指令的执行结果和指令的特征识别出循环指令,然后将识别出的循环指令的信息存储在循环缓冲区中,以便于分支预测器据此来获取循环指令的信息。可选地,如果指令集架构中设计专门的循环指令并能够给出循环总数,那么循环缓冲区的预测准确率可以达到100%。
在一些可选的实施例中,提取循环指令所对应的循环体内的指定指令可以是提取循环体内的最后一条指令。当然,也可以提取循环体内的其它指令。
步骤S420,若循环指令的已循环次数与循环总数相等,则针对循环指令预测为跳出循环。
需要说明的是:如果循环指令的已循环次数与循环总数相等,那么说明循环指令对应的循环体已经完成了循环过程,此时可以跳出循环,顺序执行循环指令之后的指令了。
步骤S430,若循环指令的已循环次数与循环总数不相等,则将循环指令对应的循环起始地址作为预测跳转地址。
需要说明的是:如果循环指令的已循环次数与循环总数不相等,那么说明循环指令对应的循环体还未完成循环过程,此时需要跳转到循环起始地址继续进行循环,因此可以将循环指令对应的循环起始地址作为预测跳转地址。
在本申请的一个实施例中,如果循环指令的已循环次数与循环总数不相等,那么说明循环指令对应的循环体还未完成循环过程,此时需要跳转到循环起始地址继续进行循环,在这种情况下,可以将循环缓冲区中,与指定指令的标识信息相匹配的循环指令信息的已循环次数增加设定值。比如可以将图5中所示的已循环次数503增加1。
在一些可选的实施例中,本申请实施例的分支预测方法的预测过程与处理器的取指令过程可以处于同一个时钟周期内,进而可以避免因为预测带来的流水线冲刷(Pipeline Flush)问题,有利于实现流水线“零气泡(Zero Bubble)”的预测效果,提高了处理器的处理效率。
在本申请的实施例中,如前所述,步骤S210中的待处理指令块可以是需要进行提取来执行的指令块。因此,如果根据分支目标缓冲区中存储的分支指令信息检测到待处理指令块中包含有分支指令,则将分支指令的预测跳转地址作为下一个待处理指令块的起始地址,然后可以继续执行本申请实施例中的分支检测方案。如果若根据分支目标缓冲区中存储的分支指令信息检测到待处理指令块中不包含有分支指令,则将位于待处理指令块的最后一条指令地址之后的顺序地址作为下一个待处理指令块的起始地址,然后可以继续执行本申请实施例中的分支检测方案。可见,本申请实施例的技术方案针对各种类型的分支指令都能够实现预测跳转地址的预测,实现了对分支指令类型的全覆盖,进而可以提高处理器对指令执行的效率。
综合而言,如图6所示,根据本申请的一个实施例的用于处理器的分支预测方法(该用于处理器的分支预测方法可以由分支预测器来执行,比如可以由图1中所示的分支预测器105来执行),包括以下步骤:
步骤S610,获取待处理指令块,该待处理指令块中包含有至少一条指令。可选地,该步骤S610的具体实施细节与图2中所示步骤S210类似,不再赘述。
步骤S620,若根据分支目标缓冲区中存储的分支指令信息检测到待处理指令块中包含有分支指令,则检测分支指令的类型。
可选地,该步骤S620的具体实施细节与图2中所示步骤S220类似,不再赘述。
步骤S630,若分支指令的类型是除目标类型之外的其它类型,则从分支目标缓冲区中查找得到分支指令的预测跳转地址,该目标类型包括以下至少一种:函数调用指令、函数返回指令和循环指令。
可选地,该步骤S630的具体实施细节与图2中所示步骤S230类似,不再赘述。
步骤S640,如果分支指令的类型为函数调用指令,则将调用的函数地址压入返回地址栈;如果分支指令的类型为函数返回指令,则将压入返回地址栈中的函数地址弹出,以作为预测跳转地址。
可选地,由于函数调用指令与函数返回指令通常都是成对出现的,因此只要指令是在正常执行,那么其函数的调用和返回会成对出现,进而便能够提供较高的预测准确率,并且也可以快速的为函数返回指令预测出跳转地址。
步骤S650,若分支指令的类型为循环指令,则根据循环缓冲区中存储的循环指令信息,获取循环指令的已循环次数与循环总数。
可选地,该步骤S650的具体实施细节与图4中所示步骤S410类似,不再赘述。
步骤S660,若循环指令的已循环次数与循环总数相等,则针对循环指令预测为跳出循环。
可选地,该步骤S660的具体实施细节与图4中所示步骤S420类似,不再赘述。
步骤S670,若循环指令的已循环次数与循环总数不相等,则将循环指令对应的循环起始地址作为预测跳转地址。
可选地,该步骤S670的具体实施细节与图4中所示步骤S430类似,不再赘述。
以下结合图7至对图9对本申请实施例的技术方案的实现细节进行详细阐述:
本申请实施例的技术方案可以应用在人工智能云端推理/训练处理器或通用处理器(CPU)芯片中的指令侧,特别是对于人工智能处理器常用的指令进行了针对性设计,能够显著提升性能效率。
作为一个可选的实施例,如图7所示,处理装置包括多路复用器701、指令缓存单元702、指令译码单元703、指令执行单元704和分支预测器705。分支预测器705中包含了分支目标缓冲区、返回地址栈和循环缓冲区。可选地,图7中所示的处理装置可以是处理器。
其中,多路复用器701的第一输入端连接至分支预测器705的输出端,多路复用器701的第二输入端为顺序取指令端,多路复用器701的输出端连接至指令缓存单元702的输入端和分支预测器705的输入端。指令缓存单元702的输出端连接至指令译码单元703的输入端,指令译码单元703的输出端连接至指令执行单元704的输入端。
在一些可选的实施例中,多路复用器701可以在第一输入端输入预测跳转地址时,输出该预测跳转地址,在第一输入端未输入预测跳转地址时,输出第二输入端输入的指令地址(即顺序取到的指令地址)。
指令缓存单元702用于根据多路复用器701输出的地址,获取对应的指令信息;指令译码单元703用于对指令缓存单元702获取到的指令信息进行译码,得到控制信号;指令执行单元704用于根据指令译码单元703得到的控制信号执行对应的操作。
具体而言,分支预测器705提供一个或多个指令执行单元704执行的分支指令的地址预测,这些地址可以被发送到指令缓存单元702,该指令缓存单元702在所识别的地址处检索指令(如果在指令缓存单元702中检测到输入地址的命中,则可以直接从指令缓存单元702中输出对应的指令,否则指令可以从内存系统的较低级别的层次结构中请求,并且在检索时可以从指令缓存单元702中输出)。从指令缓存单元702中取出的指令被发送到指令译码单元703,在那里被译码以产生用于控制指令执行单元704操作的控制信号,从而实现所需的操作。
分支预测器705可以在每次取指令时进行访问,以预测接下来即将执行的指令块,预测的指令块可以包括存储器地址空间内的一个或多个顺序指令。预测的指令块可以由该指令块内的第一条指令的地址作为标签(该标签即为指令的标识信息)来识别,并且指令块中的指令条数通可以是确定的,例如可以是1、2、4、8、16、32条等。
分支预测器705的预测结果(级预测跳转地址)由多路复用器701输出(多路复用器701的另一输入为顺序取指令端),并提供给指令缓存单元702,同时也被提供给分支预测器705进行新一轮预测。分支预测器705的目的是预测是否有被预测为跳转的、会造成指令流改变的分支指令(比如,指令的运行顺序本来是按照之前排好的1、2、3、4、5、6……的顺序执行,但是由于存在分支指令,导致指令在中间某处跳到其它位置的指令进行执行,例如1、2、3、4、9、10、11)。如果预测的指令块包括一个或多个这样的分支指令,则识别被预测为第一条改变指令流的指令位置,并且该指令的目标地址被用于下一个进行预测的指令块的起始地址。如果在指令块内没有识别出这样的分支指令,则下一个进行预测的指令块的起始地址是当前指令块的最后一条指令地址之后的顺序地址。
在图7所示的结构中,分支预测器705中包含的分支目标缓冲区、返回地址栈和循环缓冲区可以是同时进行访问的,此处所说的分支目标缓冲区、返回地址栈和循环缓冲区可以同时进行访问指的是:对分支目标缓冲区、返回地址栈和循环缓冲区的访问是在同一个时钟周期内完成,即可以在一个时钟周期内实现对分支目标缓冲区、返回地址栈和循环缓冲区的访问,但是在这个时钟周期内,对分支目标缓冲区、返回地址栈和循环缓冲区的访问是可以按照一定的顺序来进行的,比如先访问分支目标缓冲区,在确定分支类型之后,再根据确定的分支类型来访问返回地址栈或者循环缓冲区。同时需要说明的是:之所以在一个时钟周期内实现对分支目标缓冲区、返回地址栈和循环缓冲区的访问,是为了在访问指令缓存单元的同一个时钟周期内完成分支预测,以避免因为预测带来的流水线冲刷问题。
以下对分支目标缓冲区、返回地址栈和循环缓冲区的作用及具体的访问策略进行详细说明:
分支目标缓冲区作为通用的分支预测组件,可以对全部类型的分支指令的跳转进行预测,同时预测的跳转目标地址直接存储在分支目标缓冲区的条目中。条目的具体内容如图8所示,包括:有效位、标签、分支类型、是否跳转和预测跳转地址。
其中,有效位用于表示该条目是否有效;标签即为分支指令的标识信息,主要用于对分支指令进行标识,其可以是指令的地址;分支类型即为分支指令的类型,用于表示分支指令是否是函数调用指令、函数返回指令、循环指令或者其它类型的指令等;预测跳转地址用于表示针对分支指令预测得到的跳转地址。
在一些可选的实施例中,标签和预测跳转地址一般源于程序计数器(通常为一个32位的二进制数)的部分。
在一些可选的实施例中,比如分支目标缓冲区中的一个条目具体可以包括:“有效位”字段的值为“1”,即表示该条目有效;“标签”字段的值为“01111010011110100111101001111010”,即通过一个32位的二进制数来对分支指令进行标识;“分支类型”字段的值为“0”,即表示分支类型为条件跳转类型;“是否跳转”字段的值为“1”,即表示需要跳转;“预测跳转地址”字段的值为“10011011100110111001101110011011”,即通过一个32位的二进制数来表示预测跳转地址。
当在分支目标缓冲区内索引访问指令时,首先要检查指令对应条目中的有效位以及比对条目中的标签(该标签源于指令块的首条指令的地址部分),如果条目的有效位为有效且标签比对通过,则说明当前被预测的指令块中包含有分支指令。如果根据条目中的“是否跳转”字段确定该分支指令需要跳转,此时检查该分支指令的类型,如果该分支指令的类型为函数调用、函数返回指令或者循环指令,则分支目标缓冲区内的“预测跳转地址”不会被使用,而是会参考返回地址栈或循环缓冲区,以获得对应的预测跳转地址;如果该分支指令的类型不是函数调用指令、函数返回指令和循环指令,则将使用条目内存储的预测跳转地址(该地址来源于指令执行单元中对分支指令解析后)。可选地,在本申请的实施例中,分支目标缓冲区中所包含的条目数可以在256之内,当然也可以通过扩容来增加至超过256个。
返回地址栈的主体是一个先入后出的栈结构(Last In First Out,简称LIFO),并且可以循环使用,以存储函数返回地址和访问当前栈顶部的指针。具体地,当遇到函数调用指令时会将返回的函数地址(该地址来源于指令执行单元中对分支指令解析后)压入栈,当遇到函数返回指令时将其预测跳转地址从栈中弹出。当函数调用或者返回完成时,栈顶指针分别加1或者减1。返回地址栈组件是专门用来预测函数返回跳转目标地址的,可选地,本申请实施例中返回地址栈的条目可以在32之内,当然也可以通过扩容来增加至超过32个。
在人工智能处理器的应用中,对于循环指令的应用是非常频繁的(例如卷积运算),因此循环缓冲区是用来专门预测循环跳出或继续的组件。循环缓冲区中的条目的具体内容如图9所示,包括:有效位、标签、循环总数、当前循环次数和循环起始地址。
其中,有效位用于表示该条目是否有效;标签即为循环指令的标识信息,主要用于对循环指令进行标识,其可以是指令的地址;循环总数用于表示循环指令所对应的循环体的循环总次数;当前循环次数即为已循环次数,用于表示循环指令所对应的循环体已经进行循环的次数;循环起始地址用于表示循环体中第一条指令的地址。
在一些可选的实施例中,标签和循环起始地址一般源于程序计数器(通常为一个32位的二进制数)的部分。
在一些可选的实施例中,比如循环缓冲区中的一个条目具体可以包括:“有效位”字段的值为“1”,即表示该条目有效;“标签”字段的值为“01111010011110100111101001111010”,即通过一个32位的二进制数来对循环指令进行标识;“循环总数”字段的值为“110”,即通过二进制来表示循环总数为6次;“当前循环次数”字段的值为“010”,即表示当前已经循环的次数为2次,也说明循环并未结束;“循环起始地址”字段的值为“10011011100110111001101110011011”,即通过一个32位的二进制数来表示循环起始地址。
当在循环缓冲区内索引访问指令时,提取指令块中包含的循环体内的最后一条指令,如果循环缓冲区中与该最后一条指令对应的条目有效且标签匹配(该标签来源于该循环体内最后一条指令的地址部分),则获取当前循环次数和循环总数,然后将当前循环次数与循环总数进行比对,如果它们相等,则该循环被预测为终止,且跳出循环。反之,如果当前循环次数和循环总数不相等,则说明循环未完成,此时返回循环起始地址继续进行循环,同时该条目中的当前循环次数加1。也就是说,当循环指令被预测为终止时,该分支被预测为跳出循环,顺序取指令;否则,分支被预测为跳转,跳转地址为条目内所存的循环起始地址。
在一些可选的实施例中,循环缓冲区内包含的条目数可以基于实际应用场景来确定,当指令集架构中设计专门的循环指令并能够给出循环总数与循环体长度时,循环缓冲区的预测准确率预期为100%。
可见,本申请实施例中的分支预测器的预测结果源于分支目标缓冲区、返回地址栈、循环缓冲区三个组件的综合预测结果,硬件开销较小,实现简便,并且对于各种类型的分支指令的预测实现了全覆盖。同时,预测可以在访问指令缓存单元的同一个时钟周期内完成,避免因为预测带来的流水线冲刷问题,有利于实现流水线“零气泡”的预测效果,提高了处理器的处理效率。此外,本申请实施例的通用性好,不会对指令集架构(InstructionSet Architecture,简称ISA)的设计带来限制,而相关技术中往往会在指令集设计时对分支指令加以限制,例如循环体中不能包含分支指令,循环体本身不能嵌套等等。
以下介绍本申请的装置实施例,可以用于执行本申请上述实施例中的用于处理器的分支预测方法。对于本申请装置实施例中未披露的细节,请参照本申请上述的用于处理器的分支预测方法的实施例。
图10示出了根据本申请的一个实施例的用于处理器的分支预测装置的框图,该分支预测装置可以设置在分支预测器内,该分支预测器中包含有用于存储分支指令信息的分支目标缓冲区。
参照图10所示,根据本申请的一个实施例的用于处理器的分支预测装置1000,包括:获取单元1002、检测单元1004和处理单元1006。
其中,获取单元1002配置为获取待处理指令块,所述待处理指令块中包含有至少一条指令;检测单元1004配置为若根据所述分支目标缓冲区中存储的分支指令信息检测到所述待处理指令块中包含有分支指令,则检测所述分支指令的类型;处理单元1006配置为若所述分支指令的类型是除目标类型之外的其它类型,则从所述分支目标缓冲区中查找得到所述分支指令的预测跳转地址,所述目标类型包括以下至少一种:函数调用指令、函数返回指令和循环指令,并配置为若所述分支指令的类型为所述目标类型,则从所述分支预测器的其它地址区中查找得到所述分支指令的预测跳转地址。
在本申请的一些实施例中,基于前述方案,所述分支目标缓冲区中包含有至少一条分支指令信息,所述分支指令信息包括分支指令标识信息、分支指令的类型和分支指令的预测跳转地址;所述检测单元1004配置为:将所述待处理指令块中所包含指令的标识信息与所述分支目标缓冲区中所包含的分支指令标识信息进行匹配,以确定所述待处理指令块中是否包含有分支指令,以及所包含的分支指令的类型。
在本申请的一些实施例中,基于前述方案,所述检测单元1004还配置为:若根据所述分支目标缓冲区中存储的分支指令信息检测到所述待处理指令块中包含有分支指令,则根据所述分支目标缓冲区中存储的分支指令信息检测所述分支指令是否需要进行跳转;所述处理单元1006配置为,在检测到所述分支指令需要进行跳转时,执行查找得到所述分支指令的预测跳转地址的操作。
在本申请的一些实施例中,基于前述方案,所述其它地址区包括返回地址栈,所述目标类型包括函数调用指令和函数返回指令;所述处理单元1006从所述分支预测器的其它地址区中查找得到所述分支指令的预测跳转地址,包括:若所述分支指令的类型为函数调用指令,则将调用的函数地址压入所述返回地址栈;若所述分支指令的类型为函数返回指令,则将压入所述返回地址栈中的函数地址弹出,以作为所述预测跳转地址。
在本申请的一些实施例中,基于前述方案,所述其它地址区包括用于存储循环指令信息的循环缓冲区,所述目标类型包括循环指令;其中,所述处理单元1006从所述分支预测器的其它地址区中查找得到所述分支指令的预测跳转地址,包括:若所述分支指令的类型为循环指令,则根据所述循环缓冲区中存储的循环指令信息,获取所述循环指令的已循环次数与循环总数;若所述循环指令的已循环次数与所述循环总数相等,则针对所述循环指令预测为跳出循环;若所述循环指令的已循环次数与所述循环总数不相等,则将所述循环指令对应的循环起始地址作为所述预测跳转地址。
在本申请的一些实施例中,基于前述方案,所述循环缓冲区中包含有至少一条循环指令信息,所述循环指令信息包括循环指令标识信息、循环总数、已循环次数和循环起始地址;所述处理单元1006配置为:提取所述循环指令所对应的循环体内的指定指令;将所述指定指令的标识信息与所述循环缓冲区中的循环指令标识信息进行匹配,以确定与所述指定指令的标识信息相匹配的循环指令信息;根据与所述指定指令的标识信息相匹配的循环指令信息,查询得到所述循环指令的已循环次数与循环总数。
在本申请的一些实施例中,基于前述方案,所述指定指令包括所述循环体内的最后一条指令。
在本申请的一些实施例中,基于前述方案,所述处理单元1006还配置为:若所述循环指令的已循环次数与所述循环总数不相等,则将所述循环缓冲区中,与所述指定指令的标识信息相匹配的循环指令信息的已循环次数增加设定值。
在本申请的一些实施例中,基于前述方案,所述分支预测方法的预测过程与所述处理器的取指令过程处于同一个时钟周期内。
在本申请的一些实施例中,基于前述方案,所述处理单元1006还配置为:若根据所述分支目标缓冲区中存储的分支指令信息检测到所述待处理指令块中包含有分支指令,则将所述分支指令的预测跳转地址作为下一个待处理指令块的起始地址;若根据所述分支目标缓冲区中存储的分支指令信息检测到所述待处理指令块中不包含有分支指令,则将位于所述待处理指令块的最后一条指令地址之后的顺序地址作为下一个待处理指令块的起始地址。
图11示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
需要说明的是,图11示出的电子设备的计算机系统1100仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图11所示,计算机系统1100包括中央处理单元(Central Processing Unit,CPU)1101,其可以根据存储在只读存储器(Read-Only Memory,ROM)1102中的程序或者从存储部分1108加载到随机访问存储器(Random Access Memory,RAM)1103中的程序而执行各种适当的动作和处理,例如执行上述实施例中所述的方法。在RAM 1103中,还存储有系统操作所需的各种程序和数据。CPU 1101、ROM 1102以及RAM 1103通过总线1104彼此相连。输入/输出(Input/Output,I/O)接口1105也连接至总线1104。
以下部件连接至I/O接口1105:包括键盘、鼠标等的输入部分1106;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1107;包括硬盘等的存储部分1108;以及包括诸如LAN(Local AreaNetwork,局域网)卡、调制解调器等的网络接口卡的通信部分1109。通信部分1109经由诸如因特网的网络执行通信处理。驱动器1110也根据需要连接至I/O接口1105。可拆卸介质1111,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1110上,以便于从其上读出的计算机程序根据需要被安装入存储部分1108。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的计算机程序。在这样的实施例中,该计算机程序可以通过通信部分1109从网络上被下载和安装,和/或从可拆卸介质1111被安装。在该计算机程序被中央处理单元(CPU)1101执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的计算机程序。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的计算机程序可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该电子设备执行时,使得该电子设备实现上述实施例中所述的方法。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本申请实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的实施方式后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。

Claims (15)

1.一种用于处理器的分支预测方法,其特征在于,所述处理器中包含有分支预测器,所述分支预测器中包含有用于存储分支指令信息的分支目标缓冲区,所述分支预测方法包括:
获取待处理指令块,所述待处理指令块中包含有至少一条指令;
若根据所述分支目标缓冲区中存储的分支指令信息检测到所述待处理指令块中包含有分支指令,则检测所述分支指令的类型;
若所述分支指令的类型是除目标类型之外的其它类型,则从所述分支目标缓冲区中查找得到所述分支指令的预测跳转地址,所述目标类型包括以下至少一种:函数调用指令、函数返回指令和循环指令;
若所述分支指令的类型为所述目标类型,则从所述分支预测器的其它地址区中查找得到所述分支指令的预测跳转地址。
2.根据权利要求1所述的分支预测方法,其特征在于,所述分支目标缓冲区中包含有至少一条分支指令信息,所述分支指令信息包括分支指令标识信息、分支指令的类型和分支指令的预测跳转地址;
所述方法还包括:将所述待处理指令块中所包含指令的标识信息与所述分支目标缓冲区中所包含的分支指令标识信息进行匹配,以确定所述待处理指令块中是否包含有分支指令,以及所包含的分支指令的类型。
3.根据权利要求1所述的分支预测方法,其特征在于,所述方法还包括:若根据所述分支目标缓冲区中存储的分支指令信息检测到所述待处理指令块中包含有分支指令,则根据所述分支目标缓冲区中存储的分支指令信息检测所述分支指令是否需要进行跳转;
其中,在检测到所述分支指令需要进行跳转时,执行查找得到所述分支指令的预测跳转地址的操作。
4.根据权利要求1所述的分支预测方法,其特征在于,所述其它地址区包括返回地址栈,所述目标类型包括函数调用指令和函数返回指令;
从所述分支预测器的其它地址区中查找得到所述分支指令的预测跳转地址,包括:
若所述分支指令的类型为函数调用指令,则将调用的函数地址压入所述返回地址栈;
若所述分支指令的类型为函数返回指令,则将压入所述返回地址栈中的函数地址弹出,以作为所述预测跳转地址。
5.根据权利要求1所述的分支预测方法,其特征在于,所述其它地址区包括用于存储循环指令信息的循环缓冲区,所述目标类型包括循环指令;其中,从所述分支预测器的其它地址区中查找得到所述分支指令的预测跳转地址,包括:
若所述分支指令的类型为循环指令,则根据所述循环缓冲区中存储的循环指令信息,获取所述循环指令的已循环次数与循环总数;
若所述循环指令的已循环次数与所述循环总数相等,则针对所述循环指令预测为跳出循环;
若所述循环指令的已循环次数与所述循环总数不相等,则将所述循环指令对应的循环起始地址作为所述预测跳转地址。
6.根据权利要求5所述的分支预测方法,其特征在于,所述循环缓冲区中包含有至少一条循环指令信息,所述循环指令信息包括循环指令标识信息、循环总数、已循环次数和循环起始地址;
根据所述循环缓冲区中存储的循环指令信息,获取所述循环指令的已循环次数与循环总数,包括:
提取所述循环指令所对应的循环体内的指定指令;
将所述指定指令的标识信息与所述循环缓冲区中的循环指令标识信息进行匹配,以确定与所述指定指令的标识信息相匹配的循环指令信息;
根据与所述指定指令的标识信息相匹配的循环指令信息,查询得到所述循环指令的已循环次数与循环总数。
7.根据权利要求6所述的分支预测方法,其特征在于,所述指定指令包括所述循环体内的最后一条指令。
8.根据权利要求6所述的分支预测方法,其特征在于,还包括:
若所述循环指令的已循环次数与所述循环总数不相等,则将所述循环缓冲区中,与所述指定指令的标识信息相匹配的循环指令信息的已循环次数增加设定值。
9.根据权利要求1所述的分支预测方法,其特征在于,所述分支预测方法的预测过程与所述处理器的取指令过程处于同一个时钟周期内。
10.根据权利要求1至9中任一项所述的分支预测方法,其特征在于,所述方法还包括:
若根据所述分支目标缓冲区中存储的分支指令信息检测到所述待处理指令块中包含有分支指令,则将所述分支指令的预测跳转地址作为下一个待处理指令块的起始地址;
若根据所述分支目标缓冲区中存储的分支指令信息检测到所述待处理指令块中不包含有分支指令,则将位于所述待处理指令块的最后一条指令地址之后的顺序地址作为下一个待处理指令块的起始地址。
11.一种用于处理器的分支预测装置,其特征在于,所述处理器中包含有分支预测器,所述分支预测器中包含有用于存储分支指令信息的分支目标缓冲区,所述分支预测装置包括:
获取单元,配置为获取待处理指令块,所述待处理指令块中包含有至少一条指令;
检测单元,配置为若根据所述分支目标缓冲区中存储的分支指令信息检测到所述待处理指令块中包含有分支指令,则检测所述分支指令的类型;
处理单元,配置为若所述分支指令的类型是除目标类型之外的其它类型,则从所述分支目标缓冲区中查找得到所述分支指令的预测跳转地址,所述目标类型包括以下至少一种:函数调用指令、函数返回指令和循环指令,并配置为若所述分支指令的类型为所述目标类型,则从所述分支预测器的其它地址区中查找得到所述分支指令的预测跳转地址。
12.一种分支预测器,其特征在于,所述分支预测器设置于处理器内,所述分支预测器用于实现如权利要求1至10中任一项所述的分支预测方法。
13.一种处理器,其特征在于,所述处理器包括:
如权利要求12所述的分支预测器;
多路复用器,所述多路复用器的第一输入端连接至所述分支预测器的输出端,所述多路复用器的第二输入端为顺序取指令端,所述多路复用器的输出端连接至指令缓存单元的输入端和所述分支预测器的输入端;其中,所述多路复用器在所述第一输入端输入预测跳转地址时,输出所述预测跳转地址,在所述第一输入端未输入预测跳转地址时,输出所述第二输入端输入的指令地址;
所述指令缓存单元,用于根据所述多路复用器输出的地址,获取对应的指令信息;
指令译码单元,连接至所述指令缓存单元,用于对所述指令缓存单元获取到的指令信息进行译码,得到控制信号;
指令执行单元,连接至所述指令译码单元,用于根据所述指令译码单元得到的控制信号执行对应的操作。
14.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至10中任一项所述的分支预测方法。
15.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述电子设备实现如权利要求1至10中任一项所述的分支预测方法。
CN202210205048.0A 2022-03-02 2022-03-02 分支预测方法、装置、处理器、介质及设备 Active CN116737240B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202210205048.0A CN116737240B (zh) 2022-03-02 2022-03-02 分支预测方法、装置、处理器、介质及设备
PCT/CN2022/134994 WO2023165185A1 (zh) 2022-03-02 2022-11-29 分支预测方法、装置、处理器、介质及设备
US18/339,024 US20230350683A1 (en) 2022-03-02 2023-06-21 Branch prediction method, branch prediction apparatus, processor, medium, and device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210205048.0A CN116737240B (zh) 2022-03-02 2022-03-02 分支预测方法、装置、处理器、介质及设备

Publications (2)

Publication Number Publication Date
CN116737240A true CN116737240A (zh) 2023-09-12
CN116737240B CN116737240B (zh) 2024-08-06

Family

ID=87882916

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210205048.0A Active CN116737240B (zh) 2022-03-02 2022-03-02 分支预测方法、装置、处理器、介质及设备

Country Status (3)

Country Link
US (1) US20230350683A1 (zh)
CN (1) CN116737240B (zh)
WO (1) WO2023165185A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117008979A (zh) * 2023-10-07 2023-11-07 北京数渡信息科技有限公司 一种分支预测器
CN117093267A (zh) * 2023-10-17 2023-11-21 北京开源芯片研究院 分支指令跳转地址的存储方法、装置、设备及存储介质
CN117472798A (zh) * 2023-12-28 2024-01-30 北京微核芯科技有限公司 高速缓存的路预测方法、装置、电子设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020083310A1 (en) * 1998-10-12 2002-06-27 Dale Morris Method and apparatus for predicting loop exit branches
US20120124344A1 (en) * 2010-11-16 2012-05-17 Advanced Micro Devices, Inc. Loop predictor and method for instruction fetching using a loop predictor
US20160092230A1 (en) * 2014-09-29 2016-03-31 Via Alliance Semiconductor, Ltd. Loop predictor-directed loop buffer
CN112368677A (zh) * 2018-06-18 2021-02-12 超威半导体公司 基于分支指令的类型选择性地执行提前分支预测
CN115495155A (zh) * 2022-11-18 2022-12-20 北京数渡信息科技有限公司 一种适用于通用处理器的硬件循环处理装置

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5706491A (en) * 1994-10-18 1998-01-06 Cyrix Corporation Branch processing unit with a return stack including repair using pointers from different pipe stages
US6134654A (en) * 1998-09-16 2000-10-17 Sun Microsystems, Inc. Bi-level branch target prediction scheme with fetch address prediction
US6314514B1 (en) * 1999-03-18 2001-11-06 Ip-First, Llc Method and apparatus for correcting an internal call/return stack in a microprocessor that speculatively executes call and return instructions
US8904155B2 (en) * 2006-03-17 2014-12-02 Qualcomm Incorporated Representing loop branches in a branch history register with multiple bits
US7664941B2 (en) * 2007-06-28 2010-02-16 Faraday Technology Corp. Branch prediction methods and devices capable of predicting first taken branch instruction within plurality of fetched instructions
US9367471B2 (en) * 2012-09-10 2016-06-14 Apple Inc. Fetch width predictor
US9323536B2 (en) * 2013-05-02 2016-04-26 Arm Limited Identification of missing call and return instructions for management of a return address stack
US9465616B2 (en) * 2013-10-06 2016-10-11 Synopsys, Inc. Instruction cache with way prediction
US11055098B2 (en) * 2018-07-24 2021-07-06 Advanced Micro Devices, Inc. Branch target buffer with early return prediction
US10990404B2 (en) * 2018-08-10 2021-04-27 Arm Limited Apparatus and method for performing branch prediction using loop minimum iteration prediction
US10831499B2 (en) * 2018-08-21 2020-11-10 Arm Limited Apparatus and method for performing branch prediction
GB2577051B (en) * 2018-09-11 2021-03-03 Advanced Risc Mach Ltd Branch prediction using branch target buffer
GB2577050B (en) * 2018-09-11 2021-06-16 Advanced Risc Mach Ltd Allocation filter for prediction storage structure
CN111258649B (zh) * 2020-01-21 2022-03-01 Oppo广东移动通信有限公司 处理器、芯片和电子设备
US11693666B2 (en) * 2021-10-20 2023-07-04 Arm Limited Responding to branch misprediction for predicated-loop-terminating branch instruction
US11803390B1 (en) * 2022-07-01 2023-10-31 Arm Limited Prediction class determination

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020083310A1 (en) * 1998-10-12 2002-06-27 Dale Morris Method and apparatus for predicting loop exit branches
US20120124344A1 (en) * 2010-11-16 2012-05-17 Advanced Micro Devices, Inc. Loop predictor and method for instruction fetching using a loop predictor
US20160092230A1 (en) * 2014-09-29 2016-03-31 Via Alliance Semiconductor, Ltd. Loop predictor-directed loop buffer
CN112368677A (zh) * 2018-06-18 2021-02-12 超威半导体公司 基于分支指令的类型选择性地执行提前分支预测
CN115495155A (zh) * 2022-11-18 2022-12-20 北京数渡信息科技有限公司 一种适用于通用处理器的硬件循环处理装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
杜贵然, 窦勇, 徐明, 周兴铭: "支持Trace预构的分支目标提取", 电子学报, no. 02, 25 February 2002 (2002-02-25), pages 5 - 8 *
陈跃跃, 周兴铭: "一种精确的分支预测微处理器模型", 计算机研究与发展, no. 05, 30 May 2003 (2003-05-30) *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117008979A (zh) * 2023-10-07 2023-11-07 北京数渡信息科技有限公司 一种分支预测器
CN117008979B (zh) * 2023-10-07 2023-12-26 北京数渡信息科技有限公司 一种分支预测器
CN117093267A (zh) * 2023-10-17 2023-11-21 北京开源芯片研究院 分支指令跳转地址的存储方法、装置、设备及存储介质
CN117093267B (zh) * 2023-10-17 2023-12-22 北京开源芯片研究院 分支指令跳转地址的存储方法、装置、设备及存储介质
CN117472798A (zh) * 2023-12-28 2024-01-30 北京微核芯科技有限公司 高速缓存的路预测方法、装置、电子设备及存储介质
CN117472798B (zh) * 2023-12-28 2024-04-09 北京微核芯科技有限公司 高速缓存的路预测方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
US20230350683A1 (en) 2023-11-02
WO2023165185A1 (zh) 2023-09-07
CN116737240B (zh) 2024-08-06

Similar Documents

Publication Publication Date Title
CN116737240B (zh) 分支预测方法、装置、处理器、介质及设备
KR100234648B1 (ko) 프로세서내 인스트럭션 실행 방법 및 시스템과 데이타 처리 시스템
JP2744890B2 (ja) ブランチ予測式データ処理装置および動作方法
US10162635B2 (en) Confidence-driven selective predication of processor instructions
US20120079255A1 (en) Indirect branch prediction based on branch target buffer hysteresis
US10353710B2 (en) Techniques for predicting a target address of an indirect branch instruction
US11061683B2 (en) Limiting replay of load-based control independent (CI) instructions in speculative misprediction recovery in a processor
CN110825437B (zh) 用于处理数据的方法和装置
EP4241162B1 (en) Predicting load-based control independent (ci) register data independent (di) (cirdi) instructions as ci memory data dependent (dd) (cimdd) instructions for replay in speculative misprediction recovery in a processor
JP2010509680A (ja) ワーキング・グローバル・ヒストリ・レジスタを備えるシステム及び方法
US9652245B2 (en) Branch prediction for indirect jumps by hashing current and previous branch instruction addresses
CN116048627B (zh) 指令缓冲方法、装置、处理器、电子设备及可读存储介质
US7234046B2 (en) Branch prediction using precedent instruction address of relative offset determined based on branch type and enabling skipping
US6754813B1 (en) Apparatus and method of processing information for suppression of branch prediction
US20230305850A1 (en) Branch prediction using speculative indexing and intraline count
KR20210025677A (ko) 초기 리턴 예측을 갖는 분기 타겟 버퍼
CN113626084B (zh) 一种tage分支预测算法针对超大循环次数指令流优化的方法
US20040003213A1 (en) Method for reducing the latency of a branch target calculation by linking the branch target address cache with the call-return stack
CN113918225A (zh) 指令预测方法、指令数据处理装置、处理器以及存储介质
JP4728877B2 (ja) マイクロプロセッサおよびパイプライン制御方法
US11663126B1 (en) Return address table branch predictor
US11182165B2 (en) Skip-over offset branch prediction
CN109614146B (zh) 一种局部跳转指令取指方法及装置
US11960893B2 (en) Multi-table instruction prefetch unit for microprocessor
US20230205535A1 (en) Optimization of captured loops in a processor for optimizing loop replay performance

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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40092280

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant