CN103927149B - 间接分支预测 - Google Patents

间接分支预测 Download PDF

Info

Publication number
CN103927149B
CN103927149B CN201410058279.9A CN201410058279A CN103927149B CN 103927149 B CN103927149 B CN 103927149B CN 201410058279 A CN201410058279 A CN 201410058279A CN 103927149 B CN103927149 B CN 103927149B
Authority
CN
China
Prior art keywords
register
instruction
jump list
value
monitored
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
Application number
CN201410058279.9A
Other languages
English (en)
Other versions
CN103927149A (zh
Inventor
H·杰克逊
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.)
Hai Luo Software Co ltd
Imagination Technologies Ltd
Original Assignee
MIPS Tech LLC
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 MIPS Tech LLC filed Critical MIPS Tech LLC
Publication of CN103927149A publication Critical patent/CN103927149A/zh
Application granted granted Critical
Publication of CN103927149B publication Critical patent/CN103927149B/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/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
    • 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/30054Unconditional branch instructions
    • 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/30061Multi-way branch instructions, e.g. CASE
    • 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/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
    • 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

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)
  • Devices For Executing Special Programs (AREA)

Abstract

用于预测程序中跳转表switch语句的目标位置的方法和分支预测器。所述方法包括在分支预测器处连续地监控指令,以便确定它们是否写入存储跳转表switch语句的输入变量的寄存器。将对于被监控的寄存器的任何更新存储在由所述分支预测器维持的寄存器表中。然后,当到了对于跳转表switch语句指令做出预测的时间时,所述分支预测器使用存储在所述表中的寄存器值来预测所述跳转表switch语句将分支到哪里。

Description

间接分支预测
背景技术
乱序处理器典型地包括分支预测器,该分支预测器在诸如分支指令的被已知为产生可能的流改变的指令的情况下预测程序流将采取哪个方向。分支预测是有用的,因为它在知道分支指令的结果之前能够使指令由处理器推测性地执行。
然而,间接分支(例如,以变量而非常量值为基础的分支)是难于预测的,因为分支预测器必须同时预测分支是否被采用以及目标在哪里二者。因此,许多分支预测器无法精确地预测间接分支。
一种解决方案是改进由分支预测器使用的预测算法。然而,这通常相当困难而且是时间密集的。
另一种解决方案是实现一种编译器,该编译器配置为移除与任何类似于switch结构的代码,因而不需要间接分支。然而,识别能够移除代码的情况是困难的。
下面描述的实施例并不局限于解决已知的乱序处理器的任何或全部缺点的实现。
发明内容
提供这一发明内容部分以便按照简化的形式引入下面在具体实施方式中进一步描述的概念的选择。这一发明内容部分并不意在识别请求保护的主题的关键特征或基本特征,也并不意在作为确定请求保护的主题的范围时使用的辅助手段。
本文描述了用于预测程序中跳转表switch语句的目标位置的方法和分支预测器。所述方法包括在所述分支预测器处连续地监控指令以便确定它们是否写入用于存储跳转表switch语句的输入变量的寄存器。将对于被监控的寄存器的任何更新存储在由所述分支预测器维护的寄存器表中。然后,当到了对于跳转表switch语句指令进行预测的时间时,所述分支预测器使用存储在所述表中的寄存器值来预测所述跳转表switch语句将分支到哪里。
第一方面提供一种用于预测由处理器执行的程序中的switch语句的目标位置的方法,所述方法包括:将对于至少一个被监控的寄存器的当前值存储在由分支预测器维持的寄存器表中,每一个被监控的寄存器已经被识别为存储跳转表switch语句的输入变量,跳转表switch语句是已经被编译到跳转表的switch语句;在分支预测器处接收指令用于预测;使用所述分支预测器确定接收到的指令是否写入具有更新值的被监控的寄存器之一;对确定接收到的指令写入具有更新值的被监控的寄存器之一做出响应,,更新对于被写入的具有更新值的所述寄存器的所述寄存器表中的当前值;并且使用所述分支预测器,使用所述当前值来预测跳转表switch语句指令的目标位置。
第二方面提供一种分支预测器,所述分支预测器包括:寄存器表(116、534、536),所述寄存器表存储对于至少一个被监控的寄存器的当前值,每一个被监控的寄存器已经被识别为存储跳转表switch语句的输入变量,跳转表switch语句是已经被编译到跳转表的switch语句;以及与所述寄存器表(116、534、536)通信的逻辑单元,所述逻辑单元配置为:接收指令用于预测;确定接收到的指令是否写入具有更新值的被监控的寄存器之一;对确定接收到的指令写入具有更新值的被监控的寄存器之一做出响应,更新对于被写入的具有更新值的所述寄存器的所述寄存器表中的当前值;并且使用所述当前值来预测跳转表switch语句指令的目标位置。
第三方面提供一种处理器,所述处理器包括根据第二方面的分支预测器。
第四方面提供一种基本上参照图1和图2描述的处理器。
第五方面提供一种基本上参照图4描述的预测switch语句指令的目标位置的方法。
第六方面提供一种基本上参照图2和图5描述的处理器。
本文描述的方法可以通过以有形存储介质上的机器可读形式的软件来执行,例如以包括计算机程序代码模块的计算机程序的形式,当所述程序在计算机上运行时并且在可以将所述计算机程序体现在计算机可读介质上的情况下,所述计算机程序代码模块适于执行本文描述的任何方法的全部步骤。有形(或非暂态)存储介质的示例包括磁盘、拇指驱动、存储卡等等,并且不包括传播的信号。软件可以适合于在并行处理器或串行处理器二者上执行,以使得能够按照任何合适的顺序或者同时执行所述方法步骤。
这承认了固件和软件可以是有价值的,可单独销售的商品。意在包含在“哑”或标准硬件上运行的或者控制该“哑”或标准硬件的软件,以便执行期望的功能。还意在包括诸如HDL(硬件描述语言)软件的“描述”或定义硬件配置的软件,例如用于设计硅芯片,或者用于配置通用可编程芯片,以便实现期望的功能。
可以适当地组合优选的特征,这对于本领域的普通技术人员来说是显而易见的,并且可以将优选的特征与本发明的任何方面进行组合。
附图说明
将参照附图通过示例的方式来描述本发明的实施例,在附图中:
图1是示例单线程乱序处理器的示意图;
图2是图1的示例寄存器表的示意图;
图3是用于监控用于switch语句变量的寄存器的方法的流程图;
图4是用于使用图1和图2的寄存器表中的数据来预测switch语句指令的目标位置的方法的流程图;并且
图5是示例多线程乱序处理器的示意图。
贯穿附图使用共同的附图标记来指示类似的特征。
具体实施方式
下面仅通过示例的方式来描述本发明的实施例。这些示例代表申请人目前已知的实践本发明的最佳方式,尽管这不是能够实现本发明的唯一方式。该描述阐释了该示例的功能以及用于构建和操作该示例的步骤序列。然而,可以通过不同的示例来实现相同或等效的功能和序列。
如上所述,间接分支(例如,以变量而非常量值为基础的分支)难于预测,因为分支预测器必须同时预测分支是否被采用以及目标在哪里二者。该目标尤其难于预测,因为其典型地以周期性改变的寄存器值为基础。
间接分支通常用于有限状态机中,可以将该有限状态机看作是其中具有C switch语句的循环。如本领域的普通技术人员已知的,switch语句用作将变量与一个值进行比较的长if语句的替代。下面示出了switch语句的基本格式。
switch语句可以包括任何数量的case实例。将switch中给出的变量的值(例如上述示例中的“<variable>”)与分配到每一个case的值(例如上述示例中的值A和值B)进行比较,并且当变量与所述值中的一个匹配时,处理器从该点执行程序,直到主体的结束或者直到break语句。如果变量不与任何case值匹配,则执行default语句。如果省去default语句,并且没有发现case匹配,则不执行switch主体中的语句。
当产生有限状态机时,在每一个case语句内更新在switch语句中使用的变量。这一switch语句难于预测,尽管可能最近设置了所述变量。
下面是实现有限状态机(FSM)的示例代码(包括switch语句),用于对数字进行解析。
该示例代码的目标在于确定数字是否是整数或浮点数(例如,具有小数点的数字)。具体地说,在所述示例代码中,将状态变量最初设置为INT,以便指示该数字为整数。然后,将该数字的每一个字符一次读取一个,直到其中一个字符是逗号或达到无效状态(例如,具有多个小数点的数字)。对于每一个字符,确定该字符是否是句号(“。”),如果其中一个字符是句号(“。”),则将该状态变量设置为POINT,以便指示发现了小数点。一旦发现了一个句号(“。”),该算法就确定紧接在该句号(“。”)之后的字符是否是句号(“。”)(。如果紧接在第一个句号(“。”)之后的字符也是句号(“。”),则将该状态变量设置为INVALID,以便指示该数字是无效的。如果紧接在第一个句号(“。”)之后的字符不是句号(“。”),则将该状态变量设置为FLOAT,以指示该数字是浮点数。所述算法然后检查每一个剩余的字符以便确定它们不是句号(“。”)。一旦将状态设置到INVALID或到达逗号(“,”),则该算法停止检查字符。
一些编译器配置为在编译时将switch语句转换为一系列比较和直接条件分支。例如,可以将下面的switch语句转换为如表1中示出的机器代码。
表1
一些编译器配置为在编译时通过将这样的switch语句转换为跳转表而利用相对小数量的基本为顺序的case值来优化switch语句。如本领域中的普通技术人员公知的,跳转表是具有对于switch语句变量(例如上述示例中的“state”)的每一个可能值的元素的阵列。每一个跳转表元素的值是地址,即,相对应的case语句的代码位于存储器中的位置。所述代码将使用变量(例如“state”)来从跳转表中读取元素。
下面示出了实现用于上述FSM示例的跳转表的示例伪代码。
unsigned int jump Table[3]{case_INT,case_POINT;case_FLOAT}
goto jumpTable[state]#
这里,跳转表的每一个元素是实现相对应的case的代码的地址。例如,jumpTable[0]包含地址case_INT,其指向执行case INT的指令块,jumpTable[1]包含地址case_POINT,其指向执行case POINT的指令块,而j umpTable[2]包含地址case_FLOAT,其指向执行case FLOAT的指令块。
在本文中将已经被转换到跳转表的switch语句(例如,因为其具有基本上为顺序的小数量的case值)称为跳转表switch语句。
在一些情况下,使用非条件分支指令的串列来实现跳转表,该非条件分支指令使用通过将顺序索引与指令长度(由每一个指令占用的存储器中的字节数目)相乘产生的偏移量来进行分支。当将switch语句转换为跳转表时,到跳转表的索引是switch语句变量(例如,上述示例中的“state”),并且每一个跳转表元素的值是非条件分支指令,以便跳转到在其中相对应的case语句的代码位于存储器中的位置的地址。因此,该switch语句变量(例如“state”)用于选择正确的跳转表元素,并且一旦选择了正确的跳转表元素,该程序就跳转到由该跳转表元素指定的地址。
例如,可以将下面的switch语句(仅具有两个顺序的case值(0和1))转换为表2中示出的机器代码。
表2
在本文中将已经被编译为使用非条件分支指令的串列实现的跳转表的switch语句称为相对跳转表switch语句,因为该跳转相对于switch语句的地址。
在其它情况下,代替将跳转表实现为如表2所示的跳转语句的串列,可以将该跳转表作为一系列地址存储在存储器中。在这些情况下,将存储在存储器中的地址加载到程序计数器中,例如通过诸如PC=memory[JUMPTABLEBASE+INDEX]的语句,其中JUMPTABLEBASE是指向switch语句中的每一个case的指针阵列的指针,并且INDEX是switch语句变量的值(即,传递到switch语句的变量的值)。在本文中将已经被编译到存储器跳转表中的switch语句称为索引的跳转表switch语句。
不同的编译器使用用于确定何时将switch语句实现为跳转表的不同准则。具体地说,不同的编译器具有用于确定case语句何时具有小数量的case值以及是否能够将这些case值转换为基本上顺序的值的不同准则。跳转表典型地具有用于最小case值与最大case值之间的每一个值的条目,因此典型地对于switch语句中未使用的任何case值,在该表中存在空条目。例如,将具有case值0和5的switch语句转换为具有用于case0、case1、case2、case3、case4和case5的条目的跳转表。用于case1、2、3和4的条目将为空或者以其它方式无效。因此,在switch语句的case值不是直接为顺序的情况下,存在跳转表的效率与存储对于未使用的case值的空值所要求的额外存储器之间的折中。
由于相对或索引的跳转表switch语句指令的目标地址以switch语句变量的值为基础,因此,如果switch语句变量的值为已知或被预测,则可以做出跳转表switch语句指令的目标地址的更加精确的预测。
因此,本文描述的实施例涉及方法和分支预测器,其在早期阶段监控指令以便确定它们是否写入用于跳转表switch语句变量的寄存器并且将写入这些寄存器的最近的值存储在由所述分支预测器维持的表中。当到了对于特定的跳转表switch语句指令做出预测的时间时,所述分支预测器使用存储在所述表中的寄存器值来预测该跳转表switch语句将分支到哪里。
现在参照图1,说明了单线程乱序处理器100,其中到被识别为用于跳转表switch语句变量的寄存器的写入被监控并且用于确定该跳转表switch语句指令将分支到哪里。处理器100包括配置为从由程序计数器(PC)指示的程序(按照程序顺序)获取指令的获取级102,以及布置为解释所述指令并且执行寄存器重命名的解码和重命名级104。
当指令经过解码和重命名级104时,其被插入到重排序缓冲器106(ROB)。重排序缓冲器106是使指令能够被乱序执行但是被顺序呈交的缓冲器。重排序缓冲器106按照程序的顺序保持插入在其中的指令,但是ROB106内的指令可以由多个乱序管线108乱序地执行。在某些示例中,能够将重排序缓冲器106形成为环形缓冲器,其具有指向ROB106中最旧指令的头部和指向ROB106最新指令的尾部。按照程序的顺序从重排序缓冲器106输出指令。换句话说,当指令由乱序管线108执行时,该指令被从ROB106的头部输出,并且该头部被递增到ROB106中的下一条指令。将从重排序缓冲器106输出的指令提供到呈交级110,该呈交级110将指令的结果呈交到寄存器/存储器。
乱序管线108典型地访问一个或多个寄存器文件112以便执行对物理寄存器的读取和/或写入。
处理器100还包括分支预测器114,该分支预测器114配置为在诸如分支指令的被已知为产生可能的流改变的指令的情况下,预测程序流将采用哪一个方向。分支预测是有用的,因为其能够在分支指令的结果已知之前使指令通过处理器100被推测性地执行。分支预测器114能够接收来自获取级102以及解码和重命名级104的与新指令相关的输入,以及来自乱序管线108的输入。
当分支预测器114精确地预测程序流时,这改进了处理器100的性能。然而,如果分支预测器114没有正确地预测分支方向,则发生误预测,这需要在程序继续之前被校正。为了校正该误预测,发送至ROB106的推测性指令被放弃,并且获取级102开始从正确的程序分支获取指令。
为了改善间接分支预测的精确度,分支预测器114包括至少一个逻辑单元115,该逻辑单元115配置为检测程序中的跳转表switch语句并且识别用作到检测到的switch语句的输入的寄存器。在本文中将到switch语句的输入称为switch语句变量。然后,逻辑单元115查找将立即数(例如,常量值)写入任何被识别的寄存器的指令。然后,将被写入被监控的寄存器的任何立即数存储在由分支预测器114维持的寄存器表116中。寄存器表116与上述的主寄存器文件112分离且不同。参照图2来描述示例寄存器表116。
例如,逻辑单元115可以监控从获取级102获取的指令。如果逻辑单元115检测到将立即数写入寄存器的指令,则逻辑单元115对该指令进行解码以便确定被写入的寄存器和立即数。如果解码的寄存器是被识别的寄存器之一(用作到跳转表switch语句的输入的寄存器),则将立即数存储在寄存器表116中。由于逻辑单元115在管线中在非常早的阶段监控指令,因此寄存器表116比主寄存器文件112被更早地写入/更新,这允许跳转表switch语句指令的目标地址被更早地且更加精确地预测。具体地说,与在获取到指令之后被更新的寄存器表116不同,主寄存器文件112典型地不被写入/更新,直到指令的解码和执行之后为止。
当到了对于特定的跳转表switch语句指令做出预测的时间时,逻辑单元115使用存储在寄存器表116中的寄存器值来预测switch语句将分支到哪里。将分别参照图3和图4来描述用于(a)监控到寄存器的写入;以及(b)使用存储的寄存器值来预测跳转表switch语句指令将分支到哪里的示例方法。
逻辑单元115可以使用任何合适的硬件逻辑来实现。
现在参照图2,说明了图1的示例寄存器表116。寄存器表116用于存储:(a)程序中检测到的跳转表switch语句指令的列表;(b)用作到跳转表switch语句的输入的寄存器;以及(c)被写入这些寄存器中的每一个的最近的值。
在图2中,寄存器表116被划分为多个行202、204、206和208以及列210、212、214和216。每一个行202、204、206和208代表程序中检测到的跳转表switch语句指令。在图2示出的示例中,在程序中检测到四个跳转表switch语句指令,并且因而存在四个行202、204、206和208,分别用于每一个检测到的跳转表switch语句指令。
每一个列210、212、214和216保持与检测到的指令相关的具体信息段。在图2所示的示例中,存在四个列:指令识别标签列210、自变量寄存器ID列212、自变量寄存器值列214和自变量有效列216。在其它情况下,寄存器表116可以具有更多、更少或不同的列。
指令识别标签列210存储识别检测到的跳转表switch语句指令的标签。该标签可以由分支预测器114使用,以便确定寄存器表116是否包括用于特定的跳转表switch语句指令的条目。如果寄存器表116包括用于特定的switch语句指令的条目,则可以使用寄存器表116中的数据来预测该switch语句指令的目标。
在一些情况下,该标签是对于该指令的程序计数器。在其它情况下,该标签仅是程序计数器的一部分(例如,后16位)。与使用整个程序计数器的情况相比较,仅使用程序计数器的一部分降低了寄存器表116的尺寸,然而,在这些情况下,分支预测器114不能百分之百地确认检测到的跳转表switch语句指令位于寄存器表116中,因为多个指令可以具有相同的标签。在又一种情况下,其它合适的信息可以用于识别指令的位置。
在一些情况下,寄存器表116可以不包括指令识别标签列210。在这些情况下,分支预测器可以使用存储在自变量寄存器ID列212中的自变量寄存器ID,以便确定寄存器表116是否包括用于特定的跳转表switch语句指令的条目。
自变量寄存器ID列212存储识别寄存器的信息,该寄存器用于将自变量输入或变量提供到相关联的跳转表switch语句(例如,在上述的FSM示例中用于“state”变量的寄存器)。在一些情况下,识别信息是寄存器ID(例如R8或D0.8)。一旦将对于寄存器的识别信息添加到所述表中,该特定寄存器就变为被监控的寄存器,并且分支预测器监控用于写入这一寄存器的指令。
自变量寄存器值列214存储被写入在相对应的自变量寄存器ID列212中识别的寄存器的最近的立即数(例如,当前值)。在一些情况下,每一个自变量寄存器值被初始分配默认值(例如在图2所示的示例中为“NA”),以便指示寄存器还没有被写入。一旦寄存器被写入,就利用更新值来更新该自变量寄存器值。在一些情况下,每次在相关联的寄存器被写入时,就更新自变量寄存器值列214。
自变量有效列216存储关于存储在相关联的寄存器值列214中的寄存器值是否有效的信息。在一些情况下,如果立即数(例如,常量值)已经被至少一次写入在自变量寄存器ID列212中识别的寄存器,则认为自变量寄存器值有效。在这些情况下,可以初始设置每一个自变量有效值以便指示自变量寄存器值无效,并且仅在将常量值写入寄存器之后才被更新以便指示自变量寄存器值有效。在这些情况下,自变量有效列216在执行期间可以仅被更新一次(例如寄存器被第一次写入常量值时)或者,如果没有从来没有将常量值写入寄存器,则可以根本不进行更新。
在一些情况下,自变量有效列可以通过被禁止(例如设置为0)或被使能(例如设置为1)的单个位,或者被设置为TRUE或FALSE的布尔值来实现。在一些情况下,一旦将有效位从初始状态改变到另一状态,在预定的时间段之后,可以将其自动地改变回到初始状态。
在一些情况下,代替具有自变量有效列216的寄存器表116,寄存器表116可以具有计数器列(未示出),该计数器列存储关于相关联的自变量寄存器值列214中的值自从被更新以来用于预测目标位置的次数的信息。每次在更新相关联的自变量寄存器值列214中的值时,可以将该计数器复位到最大值。然后在每次使用相关联的自变量寄存器值列214中的值来预测switch语句指令的目标时,可以使该计数器自减。这一信息可以然后由分支预测器114使用,以便确定相对应的自变量寄存器值列214中的数据是否有效。例如,在一些情况下,如果计数器还没有自减到门限值(例如,零)或者低于该门限值,则分支预测器114可以仅使用相对应的自变量寄存器值列214中的数据来预测目标位置。
选择分配到计数器的位数,以使得其足够大以便确保分支预测器114仍然能够使用有效数据。例如,在一些情况下,可以对该计数器分配两个位。在每次更新相关联的自变量寄存器值列214中的值时,将该计数器设置为3(二进制“11”),并且在每次使用相关联的自变量寄存器值列214中的值来预测switch语句指令的目标位置时,该计数器自减。
在其它情况下,代替具有自变量有效列216的寄存器表116,寄存器表116可以具有存储置信度值的置信度列(未示出)。置信度值可以指示相关联的自变量寄存器值列214中的数据将预测正确的目标位置的可能性。
在一些情况下,当switch语句指令被初始检测到并且被添加到寄存器表116时,可以将该置信度值设置为零(例如,指示存储在相对应的自变量寄存器值列214中的寄存器值中低置信度或没有置信度)。当switch语句随后由乱序管线108执行时,乱序管线108可以为分支预测器114提供对程序计数器的更新。分支预测器然后可以将更新的程序计数器值与存储在相关的自变量寄存器值列214中的寄存器值进行比较。如果更新的程序计数器与存储的寄存器值相匹配,则可以增加该置信度值。如果更新的程序计数器与存储的寄存器值不匹配,则可以降低该置信度值或者将其设置为0。在一些情况下,如果置信度值高于预定义的门限(例如0或1),则分支预测器114可以仅使用相对应的自变量寄存器值列214中的数据来预测目标位置。使用置信度度量来确定是否使用存储的寄存器值来预测目标,这可以降低被不正确预测的目标的数量。
在又一种情况下,代替具有自变量有效列的寄存器表116,可以同时具有上述的计数器列(未示出)和置信度列(未示出)二者。
在一些情况下,寄存器表116可以进一步包括switch有效列(未示出),指示所述行是否有效。在其它情况下,可以将所述标签设置为预定义值(0x00000000)以便指示相对应的行无效。在一些情况下,可以将寄存器表116中的switch有效列或标签设置到指示在分支预测器114的初始化或复位时相对应的行中的数据无效的值。分支预测器114的初始化或复位可以例如在处理器被复位或线程被停止时发生。在这些情况下,一旦将有效数据写入行(例如,在识别switch语句指令之后),就利用指示该行中的数据有效的值来更新switch有效列和/或标签。当寄存器表116具有固定尺寸时,switch有效列和/或标签信息可以用于确定将新数据放置到哪一行中。
在一些情况下,编译器可以配置为将合适的switch语句(即,具有小数量的基本上为顺序的case值的switch语句)转换为仅相对跳转表(即跳转语句的串列)。然而,在编译器可以配置为将合适的switch语句转换为相对跳转表或索引的跳转表时,寄存器表116可以具有指示检测到的跳转表switch语句是否是相对跳转表switch语句或索引的跳转表switch语句的列(未示出)。例如,寄存器表116可以包括相对/索引的列,该列包括单个位,例如当分支预测器114检测到跳转表switch语句是相对跳转表switch语句(即,跳转表switch语句已经被编译器转换为跳转语句的串列)时被设置,并且例如当分支预测器114检测到跳转表switch语句是索引的跳转表switch语句(即,跳转表switch语句已经被编译器转换为地址的存储器列表)时不被设置。在这些情况下,寄存器表116也可以具有用于存储索引的跳转表的基地址的列,该基地址可以在预测索引的跳转表switch语句指令的目标地址时使用(如下所述)。
在一些情况下,每一个行202、204、206和208的长度在32和64位之间。在其它情况下,行202、204、206和208可以具有高于或低于该范围的长度。
在一些情况下,以寄存器表116中的条目(例如,行)被添加到寄存器表116的时间为基础来组织该条目。例如,在一些情况下,将任何新条目添加到表的顶部,并且将较旧的条目推到表的底部。
在其它情况下,以如何近期地访问寄存器表116中的条目(例如,行)为基础来组织该条目。例如,在一些情况下,将最近期访问的条目(例如,行)放置在寄存器表116的顶部并且将不太近期访问的条目(例如,行)放置在寄存器表116的底部。如果按照这一方式来组织图2中示出的示例,则第一行202将是最近期访问的条目而第四行208将是最不近期访问的条目。在这些情况下,一旦添加、修改(例如,更新)或者以其它方式访问(例如,读取)了条目(例如,行),就将该行添加/移动到寄存器表116的顶部。
在一些情况下,寄存器表可以具有固定的尺寸(例如,两个或四个条目)。以如何近期地访问条目为基础来组织寄存器表116,这允许固定尺寸的寄存器表116维持最近期访问的条目并且重写较旧的、不太近期访问的条目。
物理地移动寄存器表中的条目消耗功率。因此,为了降低与组织寄存器表116中的条目相关联的功率,在另一示例中,寄存器表可以包括存储关于条目的顺序的信息的顺序列(未示出)。该顺序列中的数据然后用于将最旧的条目与最新的条目区分开。例如,顺序列可以存储代表寄存器表116中条目的顺序的数字。该数字可以代表如何近期地添加该条目和/或如何近期地访问该条目。
现在参照图3,说明了可以由分支预测器114实现的用于监控用于跳转表switch语句变量的寄存器的方法300。在步骤302,从获取级102接收下一条指令用于预测。当接收到下一条指令时,方法300进行到步骤304。
在步骤304,确定指令是否将立即数(例如,常量值)写入被监控的寄存器之一(例如,在寄存器表116中列出的寄存器之一)。确定指令是否将立即数写入被监控的寄存器之一可以包括首先确定该指令是否是写入指令。如果确定该指令是写入指令,则可以确定该写入指令是否将立即数(例如,常量值)写入寄存器。如果该写入指令将立即数(例如,常量值)写入寄存器,则确定该写入指令是否将立即数写入被监控的寄存器之一。确定该写入指令是否写入被监控的寄存器之一可以包括解码该指令并且将在寄存器表中列出的寄存器ID与在解码的写入指令中指代的写入寄存器ID进行比较。
在一些情况下,解码可以由诸如分支预测器114的分支预测器执行。例如,分支预测器可以估计该指令的预定位数(例如,9位)以便确定其是否是立即数写入,并且然后估计该指令的另一预定位数(例如,5位)以便确定寄存器ID,并且再估计该指令的另一预定位数(例如,16位)以便确定立即数。
如果确定该指令将立即数写入被监控的寄存器之一,则该方法进行到步骤306。然而,如果确定该指令没有将立即数写入被监控的寄存器之一,则方法300回到步骤302,在其中接收下一条指令。
在步骤306,将更新值(例如,被写入被监控的寄存器的值)存储在寄存器表116中。将更新值存储在寄存器表116中可以包括以寄存器ID为基础来定位寄存器表116中的相关行,并且然后利用该更新值来更新当前寄存器值。一旦将更新值存储在寄存器表116中,就可以更新任何有效位和/或计数器以便反映寄存器值已经被更新的事实。一旦更新了寄存器表116,方法300就回到步骤302,在其中对于下一条指令重复该过程。
如果连续地执行方法300,则操作处理器100的功率需求仅存在微小的增加。
现在参照图4,说明了用于使用寄存器表116中的数据来预测跳转表switch语句指令的目标位置的方法400。在步骤402,从获取级102接收下一条指令用于预测。在一些情况下,在诸如分支预测器114的分支预测器处接收指令。一旦接收到下一条指令,方法400就进行到步骤404。
在步骤404,确定接收到的指令是否是跳转表switch语句指令。在一些情况下,确定接收到的指令是否是跳转表switch语句指令包括确定该指令是否具有预定义的模式。例如,在一些情况下,确定指令是否是跳转表switch语句指令包括确定该指令是否具有指示其是跳转表指令的模式。在一些情况下,由诸如分支预测器114的分支预测器来做出接收到的指令是否是跳转表switch语句指令的确定。如果确定该指令是跳转表switch语句指令,则方法400进行到步骤406。然而,如果确定该指令不是跳转表switch语句指令,则方法400回到步骤402,在其中接收下一条指令用于预测。
在步骤406,利用识别该指令的位置的信息(例如,指令的程序计数器)和识别自变量寄存器的ID的信息(例如,用于switch语句/跳转表变量的寄存器的寄存器ID)来更新诸如寄存器表116的寄存器表。
如果寄存器表已经包含用于该指令的条目(例如,行),则可以将寄存器表中的相关条目(例如,行)移动到该寄存器表的顶部或者更新顺序数字以便反映该条目最近被访问的事实。在一些情况下,确定该寄存器表是否已包含用于该指令的条目(例如,行)包括对用于该switch语句指令的程序计数器与寄存器表116中的指令识别标签进行比较。在其它情况下,确定该寄存器表已经包含用于该指令的条目(例如,行)包括将用于该switch语句变量的寄存器的寄存器ID与在寄存器表中列出的寄存器ID进行比较。
在一些情况下,由诸如分支预测器114的分支预测器来更新寄存器表。一旦已经更新了寄存器表,方法400就进行到步骤408。
在步骤408,确定是否要使用存储在寄存器表(例如,寄存器表116)中的相关自变量寄存器值来预测目标位置。在一些情况下,确定是否要使用存储在寄存器表中的相关自变量寄存器值来预测目标位置包括查看自变量有效值以便确定其是否指示寄存器表中的寄存器值数据有效。在这些情况下,如果自变量有效值指示寄存器表中的寄存器值有效,则可以确定将使用存储的寄存器值来预测该目标位置。相反,如果自变量有效值指示寄存器表中相对应的寄存器值无效,则可以确定将不使用存储的寄存器值来预测该目标位置。
在其它情况下,确定是否将使用存储在寄存器表中的相关自变量寄存器值来预测目标位置可以包括分析寄存器表中的计数器和/或置信度值。例如,如果计数器和/或置信度级别高于预定的门限值,则可以确定将使用存储的寄存器值来预测目标位置。如上所述,计数器和置信度级别可以具有不同的门限值,其可以是零或非零值。
在一些情况下,可以由诸如分支预测器114的分支预测器来做出要使用存储的自变量寄存器值来预测目标位置的确定。如果确定要使用存储的自变量寄存器值来预测该目标位置,则方法400进行到步骤410。然而,如果确定将不使用存储的自变量寄存器值来预测目标位置,则方法400进行到步骤412。
在步骤410,使用存储在寄存器表中的相关寄存器值来预测目标位置。在一些情况下,通过组合用于switch语句指令的程序计数器和存储在寄存器表中的寄存器值(也被称为当前值)来预测该目标位置。
通常,switch语句变量(存储在相关寄存器中)包括switch语句中的一个值(例如上面的基本switch语句示例中的“值A”或“值B”)。
在该switch语句是相对跳转表switch语句(即,switch语句已经被转换为上述的一系列跳转语句)的情况下,该目标位置将是当前程序计数器之前的X个指令,其中X是变量(例如,寄存器)值。在每一个指令是N个字节长度的情况下,可以通过确定在程序计数器之后下一指令的位置(switch指令的程序计数器+N)并且加上寄存器值乘以N(每一个指令的字节长度)来计算。这可以由下面的公式(1)或(2)来表示,其中T是目标位置,PC是switch语句指令的程序计数器,N是每一个指令的字节长度,并且“当前值”是存储在寄存器表116中的寄存器值。
T=(PC+N)+N*当前值 (1)
T=PC+N*(当前值+1) (2)
对于使用传统预测方法可预测的情况,该目标位置将然后包括到代码主体的直接非条件分支。
例如。表3示出了具有两个case的(case 0和case 1)示例相对跳转表switch语句。在该示例中,每一个指令是四个字节长,并且switch语句在地址0x20处。根据公式(1),对于R8,目标位置等于(0x20+4)+4*存储的寄存器值。因而,如果对于R8存储的寄存器值为0,则目标将是0x24。这一地址将直接非条件分支提供到地址0x40,其包括对于case 0的代码。类似地,如果对于R8存储的寄存器值为1,则目标将是0x28。该地址将直接非条件分支提供到地址0x80,其包括对于case 1的代码。
表3
在switch语句是索引的跳转表switch语句(即,switch语句已经被转换为如上所述的存储器跳转表)的情况下,下一条指令的地址位于存储器地址JUMPTABLEBASE+INDEX处,其中JUMPTABLEBASE是指向switch语句中每一个case的指针阵列的指针,并且INDEX是switch语句变量的值(到switch语句/跳转表的输入)。对于这些跳转表switch语句的类型,可以根据寄存器表116中的数据来预测INDEX。在一些情况下,将预测的索引用作对于传统的间接分支预测器的暗示。在其它情况下(如上所述),还将JUMPTABLEBASE地址存储在寄存器表116中并且可以结合INDEX来使用,以便预测下一个地址。
在一些情况下,通过诸如分支预测器114的分支预测器来预测目标位置。一旦预测了目标位置,方法400就回到步骤402,以便接收下一条指令用于预测。
在步骤412,使用已知的间接分支预测手段来预测目标位置。例如,在一些情况下,可以使用分支目标缓冲器(BTB)来这样地预测目标位置。如本领域中的普通技术人员公知的,BTB是将间接分支地址映射到预测的目标地址的小型缓存。一旦预测了目标位置,方法400就回到步骤402,以便接收下一条指令用于预测。
图3的方法300和图4的方法400可以并行执行。
在有限状态机的情况下,跳转表switch语句位于循环中,并且将执行多次。在方法400中,在第一次检测到跳转表switch语句时,将其添加到寄存器表。一旦将switch语句指令添加到寄存器表,方法300将监控写入该自变量寄存器的指令并且将被写入该寄存器中的任何立即数(例如常量值)存储在寄存器表中。然后,在方法400中,当随后检测到跳转表switch语句时,如上所述,可以使用存储在寄存器表中的自变量寄存器值来预测目标。
在一些情况下,实现本文描述的方法和技术可以允许降低传统分支预测器的尺寸。具体地说,如果本文描述的方法和技术用于预测至少间接分支的子集,则不需要使用传统的技术(即,BTB)来预测这些间接分支。因此,能够降低BTB的尺寸以便将其考虑在内,从而至少部分地补偿附加区域以便实现本文描述的方法和技术。
在用于对文件(例如,文本文件)进行解析的代码中经常使用switch语句,包括连续地读取新的字符或变量并且以当前字符/变量为基础来设置该状态/变量。本文描述的方法和原理降低了对于switch语句的不正确预测的可能性(并且因而降低了倒回的机会),并且因此可以增加执行这一类型的代码的速度。因此,在其中可以实现本文描述的方法和原理的基于计算机的设备可以产生对于在基于计算机的设备的启动或者在应用的启动时使用的配置文件的更加快速的解析。这可以显著地降低对于基于计算机的设备自身启动或引导或者运行在所述基于计算机的设备上的应用的启动或引导所花费的时间量。
将使用图5来说明如何将本文描述的技术和方法应用于多线程乱序处理器。
现在参照图5,说明了多线程乱序处理器500的示意图。处理器500包括两个线程502和504,在本文中分别被称为线程0和线程1。如上面参照图1描述的,每一个线程502和504包括获取级506或508、解码和重命名级510或512、重排序缓冲器514或516、呈交级518或520、一个或多个寄存器文件522或524,以及分支预测器526或528。线程502和504共享如上面参照图1描述的乱序管线528。在图5示出的示例中,每一个分支预测器526或528包括逻辑单元530或532,该逻辑单元530或532对于每一个线程502和504如上所述地维持自身的寄存器表534和536。每一个逻辑单元530或532然后使用相对应的寄存器表534或536中的条目,以便预测对于特定线程502或504的switch语句指令的目标位置。
在其它情况下,分支预测器526和528可以共享单个寄存器表,该单个寄存器表包括指示该指令与哪一个线程502或504相关联的附加的列。这可以降低实现寄存器表所要求的物理空间的量,然而,如果单个寄存器表的尺寸受限,则一个线程排斥或重写另一线程的条目的机会则会被增加。在这些情况下,逻辑单元530或532使用单个寄存器表中的条目来预测对于特定线程502或504的switch语句指令的目标位置。
尽管参照乱序处理器描述了本文描述的技术和方法,但是对于本领域的普通技术人员显而易见的是,可以将本文描述的技术和方法等效地应用于其它处理器,例如有序处理器。
在不丧失寻求的效果的情况下,可以扩展或者改变本文给出的任何范围或设备值,这对于本领域的普通技术人员来说是显而易见的。
应当理解,上述的益处和优点可以涉及一个实施例,或者可以涉及几个实施例。所述实施例并不局限于解决任何或全部所陈述的问题或具有任何或全部所陈述的益处和优点的实施例。
对“一”项目的任何引用指代这些项目中的一个或多个。术语“包括”在本文中用于表示包括所识别的方法块或元素,但是这样的块或元素不包括排它性列表,并且方法或装置可以包含附加的块或元素。
本文描述的方法步骤可以按照任何合适的顺序执行,或者在适当的时候同时执行。此外,在不偏离本文描述的主题的精神和范围的情况下,可以从任意方法中删除单个块。可以将以上描述的示例的任何方面与所描述的其它示例的任何方面进行组合,以便形成进一步的示例,而不丧失所追求的效果。在将图中的元素表示为以箭头连接的情况下,应当理解,这些箭头只是元素之间的通信(包括数据和控制消息)的一个示例流。元素之间的流可以是任一方向或双方向。
应当理解,仅通过示例的方式给出了对优选实施例的上面描述,并且本领域的普通技术人员可以做出许多修改。尽管利用某种程度的特定性或者参照一个或多个单独实施例描述了各种实施例,但是本领域的普通技术人员能够在不偏离本发明的精神或范围的情况下对所公开的实施例做出各种修改。

Claims (16)

1.一种预测由处理器执行的程序中的switch语句的目标位置的方法(300,400),所述方法包括:
在由分支预测器维护的寄存器表中存储对于至少一个被监控的寄存器的当前值,每一个被监控的寄存器已被识别为存储跳转表switch语句的输入变量,跳转表switch语句是被编译到跳转表的switch语句;
在所述分支预测器处接收指令用于预测(302);
在接收到的指令被执行之前,使用所述分支预测器确定所述接收到的指令是否以更新值写入被监控的寄存器之一(304);
对确定所述接收到的指令以更新值写入被监控的寄存器之一做出响应,利用所述更新值来更新对于所述接收到的指令写入的所述被监控的寄存器的所述寄存器表中的当前值(306);并且
当在所述分支预测器处确定接收到跳转表switch语句指令(404)时,使用所述分支预测器来使用所述当前值预测跳转表switch语句指令的目标位置(410)。
2.根据权利要求1所述的方法(300,400),进一步包括:
在所述分支预测器处接收另一指令用于预测(402);
在所述分支预测器处确定所述另一指令是否是跳转表switch语句指令(404);
对确定所述另一指令是跳转表switch语句指令做出响应,确定所述寄存器表是否包括对于所述跳转表switch语句指令的输入变量的当前值;并且
对确定所述寄存器表包括对于所述跳转表switch语句指令的输入变量的当前值做出响应,使用所述当前值预测所述跳转表switch语句指令的目标位置(410)。
3.根据权利要求2所述的方法(300,400),其中,确定所述另一指令是否是跳转表switch语句指令包括确定所述另一指令是否具有预定的模式。
4.根据权利要求2或3所述的方法(300,400),进一步包括:
对确定所述另一指令是跳转表switch语句指令做出响应,使用于存储所述跳转表switch语句指令的所述输入变量的寄存器作为被监控的寄存器。
5.根据权利要求4所述的方法(300,400),其中,使用于存储所述跳转表switch语句指令的所述输入变量的寄存器作为被监控的寄存器包括,在所述寄存器表中存储识别用于存储所述跳转表switch语句指令的所述输入变量的所述寄存器的信息。
6.根据权利要求5所述的方法(300,400),其中,确定接收到的指令是否写入被监控的寄存器之一包括,将所述寄存器表中识别用于存储所述跳转表switch语句的所述输入变量的所述寄存器的信息与接收到的指令中识别写入寄存器的信息进行比较。
7.根据权利要求2或3所述的方法(300,400),进一步包括:
对确定所述另一指令是跳转表switch语句指令做出响应,确定所述当前值是否要用于预测所述目标位置(408);并且
对确定所述当前值要用于预测所述目标位置做出响应,使用所述当前值来预测所述跳转表switch语句指令的所述目标位置。
8.根据权利要求7所述的方法(300,400),其中:
所述寄存器表进一步包括对于每一个被监控的寄存器的有效位、计数器和置信度值中的至少一个;并且
确定所述当前值是否要用于预测所述目标位置包括分析所述有效位、所述计数器和所述置信度值中的至少一个。
9.根据权利要求8所述的方法(300,400),其中,所述寄存器表包括对于每一个被监控的寄存器的有效位,每一个有效位指示对于被监控的寄存器的所述当前值是否有效。
10.根据权利要求8所述的方法(300,400),其中,所述寄存器表包括对于每一个被监控的寄存器的计数器,每一个计数器指示对于被监控的寄存器的当前值自从被更新以来已经被使用多少次来预测目标位置;并且确定在预测所述目标位置时是否要使用所述当前值包括,将所述计数器与门限值进行比较。
11.根据权利要求8所述的方法(300,400),其中,所述寄存器表包括对于每一个被监控的寄存器的置信度值,每一个置信度值指示对于被监控的寄存器的当前值将正确地预测对于相关联的跳转表switch语句的目标位置的可能性;并且确定在预测所述目标位置时是否要使用所述当前值包括,将所述置信度值与门限值进行比较。
12.根据权利要求1至3中的任意一项所述的方法(300,400),其中,使用所述当前值来预测所述跳转表switch语句指令的目标位置包括,组合用于所述跳转表switch语句指令的程序计数器以及所述当前值。
13.根据权利要求12所述的方法(300,400),其中,组合用于所述跳转表switch语句指令的程序计数器以及所述当前值包括:
以用于所述跳转表switch语句指令的程序计数器为基础,确定用于紧接在所述跳转表switch语句指令之后的指令的程序计数器;并且
将所述当前值乘以因子N以便生成换算的当前值,其中,N是指令的尺寸;并且
使用于紧接在所述跳转表switch语句指令之后的指令的程序计数器与所述换算的当前值进行加和。
14.根据权利要求1至3中的任意一项所述的方法(300,400),其中,所述寄存器表包括多个行,并且在所述寄存器表中以如何近期地被访问为基础来对所述行进行排序。
15.一种分支预测器(114,526,528),包括:
寄存器表(116,534,536),所述寄存器表(116,534,536)存储用于至少一个被监控的寄存器的当前值,每一个被监控的寄存器存储跳转表switch语句的输入变量,跳转表switch语句是已经被编译到跳转表的switch语句;以及
逻辑单元(115,530,532),与所述寄存器表(116,534,536)通信,所述逻辑单元(115,530,532)配置为:
接收指令用于预测;
在接收到的指令被执行之前,确定所述接收到的指令是否以更新值写入被监控的寄存器之一;
对确定所述接收到的指令以更新值写入被监控的寄存器之一做出响应,利用所述更新值来更新对于所述接收到的指令写入的所述被监控的寄存器的所述寄存器表(116,534,536)中的当前值;并且
当在所述分支预测器处确定接收到跳转表switch语句指令时,使用所述当前值来预测跳转表switch语句指令的目标位置。
16.一种处理器(100,500),包括根据权利要求15所述的分支预测器(114,526,528)。
CN201410058279.9A 2013-01-14 2014-01-14 间接分支预测 Active CN103927149B (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
GBGB1300608.5A GB201300608D0 (en) 2013-01-14 2013-01-14 Indirect branch prediction
GB1300608.5 2013-01-14
GB1322389.6 2013-12-18
GB1322389.6A GB2510966B (en) 2013-01-14 2013-12-18 Indirect branch prediction

Publications (2)

Publication Number Publication Date
CN103927149A CN103927149A (zh) 2014-07-16
CN103927149B true CN103927149B (zh) 2018-10-16

Family

ID=47757932

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410058279.9A Active CN103927149B (zh) 2013-01-14 2014-01-14 间接分支预测

Country Status (4)

Country Link
US (1) US9298467B2 (zh)
CN (1) CN103927149B (zh)
DE (1) DE102014000382A1 (zh)
GB (2) GB201300608D0 (zh)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150206596A1 (en) * 2014-01-21 2015-07-23 Nvidia Corporation Managing a ring buffer shared by multiple processing engines
WO2016100142A2 (en) * 2014-12-15 2016-06-23 Hyperion Core Inc. Advanced processor architecture
US20170046159A1 (en) * 2015-08-14 2017-02-16 Qualcomm Incorporated Power efficient fetch adaptation
EP3244300B1 (fr) * 2016-02-24 2022-02-09 STMicroelectronics (Rousset) SAS Procédé et outil de génération d'un code programme configuré pour effectuer une vérification du flot de contrôle d'un autre code programme contenant des instructions de branchements indirects
CN108062236A (zh) * 2016-11-07 2018-05-22 杭州华为数字技术有限公司 一种软硬件协同分支指令预测方法及装置
CN107203403B (zh) * 2017-04-28 2020-08-07 李朝波 一种处理c语言switch/case语句的方法
US10884746B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US10248394B2 (en) * 2017-08-18 2019-04-02 International Business Machines Corporation Utilizing created character index for switch statements
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US10884747B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US10884745B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US11150904B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10908911B2 (en) 2017-08-18 2021-02-02 International Business Machines Corporation Predicting and storing a predicted target address in a plurality of selected locations
US11150908B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US11061575B2 (en) 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
CN111176729A (zh) * 2018-11-13 2020-05-19 深圳市中兴微电子技术有限公司 一种信息处理方法、装置及计算机可读存储介质
CN109783143B (zh) * 2019-01-25 2021-03-09 贵州华芯通半导体技术有限公司 用于流水线指令流的控制方法和控制设备
CN111258649B (zh) * 2020-01-21 2022-03-01 Oppo广东移动通信有限公司 处理器、芯片和电子设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1520547A (zh) * 2001-06-29 2004-08-11 �ʼҷ����ֵ������޹�˾ 预测间接分支目标地址的方法、装置和编译器

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5608886A (en) * 1994-08-31 1997-03-04 Exponential Technology, Inc. Block-based branch prediction using a target finder array storing target sub-addresses
US7743238B2 (en) * 2003-05-09 2010-06-22 Arm Limited Accessing items of architectural state from a register cache in a data processing apparatus when performing branch prediction operations for an indirect branch instruction
US8639913B2 (en) * 2008-05-21 2014-01-28 Qualcomm Incorporated Multi-mode register file for use in branch prediction
US20110078425A1 (en) * 2009-09-25 2011-03-31 Shah Manish K Branch prediction mechanism for predicting indirect branch targets
US8555040B2 (en) * 2010-05-24 2013-10-08 Apple Inc. Indirect branch target predictor that prevents speculation if mispredict is expected
US20110320787A1 (en) * 2010-06-28 2011-12-29 Qualcomm Incorporated Indirect Branch Hint
US8935694B2 (en) * 2012-01-23 2015-01-13 International Business Machines Corporation System and method for selectively saving and restoring state of branch prediction logic through separate hypervisor-mode and guest-mode and/or user-mode instructions

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1520547A (zh) * 2001-06-29 2004-08-11 �ʼҷ����ֵ������޹�˾ 预测间接分支目标地址的方法、装置和编译器

Also Published As

Publication number Publication date
DE102014000382A1 (de) 2014-07-17
CN103927149A (zh) 2014-07-16
GB201300608D0 (en) 2013-02-27
GB2510966B (en) 2015-06-03
GB201322389D0 (en) 2014-02-05
US9298467B2 (en) 2016-03-29
GB2510966A (en) 2014-08-20
US20140201509A1 (en) 2014-07-17

Similar Documents

Publication Publication Date Title
CN103927149B (zh) 间接分支预测
US7003629B1 (en) System and method of identifying liveness groups within traces stored in a trace cache
US8069336B2 (en) Transitioning from instruction cache to trace cache on label boundaries
US20020144101A1 (en) Caching DAG traces
TWI617980B (zh) 具有動態配送窗以及分散式架構的虛擬載入儲存佇列
TWI637318B (zh) 用於在使用共享記憶體資源的記憶體一致性模型內失序載入之鎖定式與同步式方法
CN112559049A (zh) 用于指令高速缓存的路预测方法、访问控制单元以及指令处理装置
KR20130124221A (ko) 로드―저장 의존성 예측기 내용 관리
KR20000062468A (ko) 다수의 예측 분기 명령을 통한 명령 페치의 정렬 명령캐시 제어
JP2007536626A (ja) ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法
US20070033385A1 (en) Call return stack way prediction repair
US20030182536A1 (en) Instruction issuing device and instruction issuing method
TW201428616A (zh) 具備免消歧義失序載入儲存佇列的重新排序推測性指令序列
TW201421239A (zh) 免消歧義失序載入儲存佇列
TW201423580A (zh) 具備使用統一結構的動態派遣窗之虛擬載入儲存佇列
US6381691B1 (en) Method and apparatus for reordering memory operations along multiple execution paths in a processor
TW201804322A (zh) 用於實施載入儲存重新排序與最佳化之指令定義
CN116302106A (zh) 用于促进分支预测单元的改善的带宽的设备、方法和系统
CN115454504A (zh) 一种四发射risc-v处理器微架构及其工作方法
KR102635965B1 (ko) 마이크로 프로세서의 프론트 엔드 및 이를 이용한 컴퓨터 구현 방법
US7197630B1 (en) Method and system for changing the executable status of an operation following a branch misprediction without refetching the operation
US7694110B1 (en) System and method of implementing microcode operations as subroutines
CN113448626B (zh) 推测分支模式更新方法和微处理器
US20230205535A1 (en) Optimization of captured loops in a processor for optimizing loop replay performance
US11687347B2 (en) Microprocessor and method for speculatively issuing load/store instruction with non-deterministic access time using scoreboard

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: Hertfordshire

Applicant after: Mex Technology Co.,Ltd.

Address before: Hertfordshire

Applicant before: Hai Luo Software Co.,Ltd.

TA01 Transfer of patent application right

Effective date of registration: 20180717

Address after: California, USA

Applicant after: Imagination Technologies Ltd.

Address before: Hertfordshire

Applicant before: Mex Technology Co.,Ltd.

Effective date of registration: 20180717

Address after: Hertfordshire

Applicant after: Hai Luo Software Co.,Ltd.

Address before: Hertfordshire

Applicant before: Imagination Technologies Ltd.

GR01 Patent grant
GR01 Patent grant