CN105320519B - 使用长历史记录的条件分支预测 - Google Patents

使用长历史记录的条件分支预测 Download PDF

Info

Publication number
CN105320519B
CN105320519B CN201510437379.7A CN201510437379A CN105320519B CN 105320519 B CN105320519 B CN 105320519B CN 201510437379 A CN201510437379 A CN 201510437379A CN 105320519 B CN105320519 B CN 105320519B
Authority
CN
China
Prior art keywords
conditional branch
history
prediction
information
index
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
CN201510437379.7A
Other languages
English (en)
Other versions
CN105320519A (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.)
Hai Luo Software Co ltd
Imagination Technologies Ltd
Original Assignee
Imagination Technologies 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 Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Publication of CN105320519A publication Critical patent/CN105320519A/zh
Application granted granted Critical
Publication of CN105320519B publication Critical patent/CN105320519B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/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/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques

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

使用长历史记录的条件分支预测
技术领域
本发明涉及使用长历史记录的条件分支预测。
背景
很多处理器包括分支预测器,分支预测器预测在已知将导致可能的程序流变化的指令(例如分支指令)的情况下程序流将采用的方向。分支预测是有用的,因为它使得指令能够在知道分支指令的结果之前就能够被处理器推测性地执行。
可将分支指令分类为条件性指令或间接指令。条件分支指令(基于常数值的分支指令)需要关于是否采用该分支的二元判定(binary decision)。间接分支指令(基于变量的分支指令)需要关于目标地址的N元判定,其中N为可能的目标地址的数量。
可将用于预测条件分支的结果的方案分类为静态的和动态的预测方案。静态预测方案通常将预测基于诸如分支的操作码或方向的静态值。另一方面,动态预测方案考虑运行时的行为。
最常见的动态分支预测方案是两级自适应预测器的方案,其基于在程序的当前执行期间所执行的分支历史记录来进行分支预测。例如,可保留先前条件分支指令的最近N个结果(采用/未采用)的历史记录,该历史记录被称为采用/未采用历史记录。然后使用该历史记录来更新模式历史记录表(PHT),模式历史记录表具有每个可能的历史记录模式的条目。进行预测之后,用预测结果来更新PHT中对应于当前历史记录模式的条目。然后在下一次该历史记录模式出现的时候,可以进行相同的预测。
通常,历史记录越长,预测越准。然而,随着历史记录增长,PHT也增长。具体地,增加到历史记录的每位都使得PHT的大小翻倍。因此,期望的是通过在不大幅度增加必须存储以进行预测的信息量的条件下使用较长历史记录来提高条件分支预测的准确度。
下面描述的实施例不限于解决已知分支预测器的任何或所有缺点的实现。
发明内容
本发明内容被提供以介绍下面在具体实施方式中进一步描述的所选择的简化形式的一系列概念。该发明内容并不旨在表明所要求保护的主题的关键特征或本质特征,其也不旨在用作在确定所要求保护的主题的范围时的辅助说明。
本文所描述的是用于使用长条件分支历史记录来预测条件分支指令的结果的方法和条件分支预测器。方法包括根据条件分支历史记录的第一部分产生第一索引(index),根据条件分支历史记录的第二部分产生第二索引。然后使用第一索引来识别在第一模式历史记录表中包括第一预测信息的条目;以及使用第二索引来识别在第二模式历史记录表中包括第二预测信息的条目。基于第一和第二预测信息来预测条件分支的结果。
第一方面提供预测由处理器执行的程序中的条件分支指令的结果的方法,方法包括:根据条件分支历史记录的第一部分,在第一索引产生模块中产生第一索引,条件分支历史记录包括关于多个先前预测的条件分支指令中的每一个的历史记录信息,第一部分包括条件分支历史记录中的历史记录信息的第一子集;使用第一索引识别第一模式历史记录表中的条目,第一模式历史记录表中的该条目包括第一预测信息;根据条件分支历史记录的第二部分,在第二索引产生模块中产生第二索引,第二部分包括条件分支历史记录中的历史记录信息的第二子集,第二子集与第一子集不同;使用第二索引识别第二模式历史记录表中的条目,第二模式历史记录表中的该条目包括第二预测信息;以及,基于第一和第二预测信息,使用判定逻辑单元预测条件分支指令的结果。
第二方面提供条件分支预测器逻辑单元,以便预测由处理器执行的程序中的条件分支指令的结果,条件分支预测器逻辑单元包括:第一索引产生模块,其配置成根据条件分支历史记录的第一部分产生第一索引,条件分支历史记录包括关于多个先前预测的条件分支指令中的每一个的历史记录信息,第一部分包括在条件分支历史记录中的历史记录信息的第一子集;第二索引产生模块,其配置成根据条件分支历史记录的第二部分产生第二索引,第二部分包括在条件分支历史记录中的历史记录信息的第二子集,第二子集与第一子集不同;以及判定逻辑单元,其被配置成:使用第一索引识别第一模式历史记录表中的条目,第一模式历史记录表中的条目包括第一预测信息;使用第二索引识别第二模式历史记录表中的条目,第二模式历史记录表中的条目包括第二预测信息;以及基于第一和第二预测信息来预测条件分支指令的结果。
在一些实施方式中,所述第一预测信息包括第一预测结果和识别所述第一预测结果的质量的信息;并且所述第二预测信息包括第二预测结果和识别所述第二预测结果的质量的信息。
在一些实施方式中,预测所述条件分支指令的结果包括选择所述第一预测结果和所述第二预测结果中的一个预测结果作为所预测的结果。
在一些实施方式中,当识别所述第一预测结果的质量的信息指示所述第一预测结果的质量好于预定阈值时,选择所述第一预测结果作为所预测的结果。
在一些实施方式中,当识别所述第一预测结果的质量的信息和识别所述第二预测结果的质量的信息指示所述第一预测结果的质量好于所述第二预测结果的质量时,选择所述第一预测结果作为所预测的结果。
在一些实施方式中,所述判定逻辑单元还被配置成存储与识别所述条件分支指令的信息相关联的所述条件分支历史记录的快照和选择所述第一预测结果和所述第二预测结果中的哪一个作为所预测的结果的指示。
在一些实施方式中,在重排序缓冲器中存储所述条件分支历史记录的快照和选择所述第一预测结果和所述第二预测结果中的哪一个作为所预测的结果的指示。
在一些实施方式中,所述条件分支预测器逻辑单元还包括更新逻辑单元,所述更新逻辑单元配置成:接收识别执行的条件分支指令的信息和指示是否采用了执行的条件分支的信息;以及基于识别所述执行的条件分支指令的信息和指示是否采用了所述执行的条件分支的信息来更新所述第一模式历史记录表和所述第二模式历史记录表中的至少一个。
在一些实施方式中,所述更新逻辑单元还被配置成:响应于接收识别所述执行的条件分支指令的信息,获取与所述执行的条件分支指令相关联的所述条件分支历史记录的快照和选择所述第一预测结果和所述第二预测结果中的哪一个作为所预测的结果的指示。
在一些实施方式中,更新所述第一模式历史记录表和所述第二模式历史记录表中的至少一个包括:根据所述条件分支历史记录的快照的第一部分产生第三索引;使用所述第三索引识别所述第一模式历史记录表中的条目,所述第一模式历史记录表中的所述条目包括第三预测信息;基于指示是否采用了所述执行的条件分支的信息,更新所述第一模式历史记录表中的条目的所述第三预测信息;根据所述条件分支历史记录的快照的第二部分产生第四索引;使用所述第四索引识别所述第二模式历史记录表中的条目,所述第二模式历史记录表中的条目包括第四预测信息;以及基于指示是否采用了所述执行的条件分支的信息,更新所述第二模式历史记录表中的条目的所述第四预测信息。
在一些实施方式中,更新所述第一模式历史记录表和所述第二模式历史记录表中的至少一个还包括:分析选择所述第一预测结果和所述第二预测结果中的哪一个作为所预测的结果的指示,以便确定选择所述第一预测结果和所述第二预测结果中的哪一个作为所预测的结果;响应于确定选择所述第一预测结果作为所预测的结果,只更新所述第一模式历史记录表;并且,响应于确定选择所述第二预测结果作为所预测的结果,只更新所述第二模式历史记录表。
在一些实施方式中,所述第三预测信息和所述第四预测信息中的每一个包括饱和计数器,且更新预测信息包括:如果指示是否采用了所述执行的条件分支的信息指示采用了所述执行的条件分支就增加所述饱和计数器,且如果指示是否采用了所述执行的条件分支的信息指示未采用所述执行的条件分支则减小所述饱和计数器。
在一些实施方式中,与历史记录信息的所述第二子集相比,历史记录信息的所述第一子集包括更多的历史记录信息。
在一些实施方式中,历史记录信息的所述第一子集和历史记录信息的所述第二子集中的每一个包括连续的历史记录信息组。
在一些实施方式中,产生所述第一索引包括将所述条件分支历史记录的第一部分与所述条件分支指令的地址组合。
在一些实施方式中,将所述条件分支历史记录的第一部分与所述条件分支指令的地址组合包括对所述条件分支历史记录的第一部分和所述条件分支指令的地址的至少一部分运用哈希函数。
在一些实施方式中,产生所述第二索引包括将所述条件分支历史记录的第二部分与所述条件分支指令的地址组合。
在一些实施方式中,将所述条件分支历史记录的第二部分与所述条件分支指令的地址组合包括对所述条件分支历史记录的第二部分和所述条件分支指令的地址的至少一部分运用哈希函数。第三方面提供处理器,处理器包括第二方面的条件分支预测器逻辑单元。
第四方面提供计算机可读存储介质,其具有在其上编码的用于产生处理器的计算机可读程序代码,处理器包括第二方面的条件分支预测器逻辑单元。
第五方面提供计算机可读存储介质,其具有在其上编码的用于产生处理器的计算机可读程序代码,处理器被配置成实施第一方面的方法。
本文描述的方法可由配置有软件的计算机执行,软件采用存储在有形存储介质上的机器可读形式,例如采用包括用于配置计算机来执行所述方法的组成部分的计算机可读程序代码的计算机程序的形式、或采用包括适合于当程序在计算机上运行时执行本文所述的任何方法的所有步骤的计算机程序代码工具的计算机程序的形式,且其中的计算机程序可体现在计算机可读存储介质上。有形(或非暂时性)存储介质的例子包括磁盘、拇指驱动器、存储卡等,且并不包括传播信号。软件可适合于在并行处理器或串行处理器上执行,使得方法步骤可以按任何适当的顺序或同时被执行。
本文描述的硬件部件可由非暂时性计算机可读存储介质产生,非暂时性计算机可读存储介质具有在其上编码的计算机可读程序代码。
本文认可固件和硬件可被单独使用并都具有价值。预期包括运行在“哑”硬件或标准硬件上的软件或控制“哑”硬件或标准硬件的软件,以实现期望功能。还预期包括“描述”或定义硬件配置的软件,例如,如用于设计硅片或用于配置通用可编程芯片的HDL(硬件描述语言)软件,以实现期望功能。
优选的特征可在适当时被结合,并可与本发明的任何方面结合,这对技术人员来说将是明显的。
附图说明
将参考下面的附图以例子的方式描述本发明的实施方式,其中:
图1是已知两级自适应预测器方案的原理图;
图2是已知斜分支预测器方案的原理图;
图3是已知YAGS(又一个全局方案(Yet Another Global Scheme))分支预测器方案的原理图;
图4是示例单线程化处理器的方框图;
图5是图4的示例条件分支预测器逻辑单元的方框图;
图6是图5的示例预测逻辑单元的方框图;
图7是示例条件分支历史记录的原理图;
图8是图6的示例索引产生模块的原理图;
图9是示例饱和计数器的原理图;
图10是用于使用图5的条件分支预测器逻辑单元来预测条件分支指令的结果的示例方法的流程图;
图11是图5的示例性更新逻辑单元的方框图;
图12是用于更新图5的模式历史记录表的示例方法的流程图;以及
图13是示例多线程化处理器的方框图。
在全部附图中使用共同的参考数字来指示类似的特征。
具体实施方式
下面仅以例子的方式描述本发明的实施方式。这些例子代表申请人当前已知的实施本发明的最佳方式,但是其不是可实现本发明的唯一方式。该描述阐述例子的功能和用于构造和操作例子的步骤的顺序。然而,可通过不同的例子来实现相同或等效的功能和顺序。
如上所述,很多处理器包括分支预测器,分支预测器预测在已知将导致可能的程序流变化的指令(例如分支指令)的情况下程序流将采用的方向。分支预测是有用的,因为它使得指令能够在知道分支指令的结果之前能够被处理器推测性地执行。
最常见的动态条件分支预测方案是两级自适应预测器方案,其基于在程序的当前执行期间所执行的条件分支的历史记录来进行条件分支预测。图1中示出这种方案。具体地,在图1的两级自适应预测器方案中,保留先前的条件分支指令的最近N个结果(采用/未采用)的历史记录,该历史记录被称为采用/未采用历史记录102。采用/未采用历史记录102提供了程序如何达到条件分支指令的路径。
采用/未采用历史记录102然后被使用于产生用于更新模式历史记录表(PHT)104的索引。具体地,进行预测之后,基于预测来更新对应于索引的条目的预测信息。预测信息可包括指示分支是否被采用的单一位。在其他情况下,预测信息可包括用于跟踪采用和/或未采用条件分支指令的次数的饱和计数器。下一次产生指令时,可使用所存储的预测信息来产生预测。
在一些情况下,通过组合(例如,异或或连接)采用/未采用历史记录102和条件分支指令的地址(例如,程序计数器)106来产生索引。当通过对采用/未采用历史记录102和条件分支指令的程序计数器106进行异或来产生索引时,两级自适应预测器方案被称之为GShare。当通过将采用/未采用历史记录102和条件分支指令的地址(例如,程序计数器)106进行连接来产生索引时,两级自适应预测器方案被称之为Gselect。
通常,历史记录越长(例如,历史记录中的消息越多),预测越准。然而,随着历史记录变长,PHT也变长。具体地,增加到历史记录的每位使得PHT的大小翻倍。因此,期望的是通过在不大幅度增加必须存储以进行预测的信息量的条件下使用较长历史记录来提高条件分支预测的准确度。
已经存在的处理这个问题的一种方法是减少PHT中条目的数量,从而使得多于一个的索引映射到PHT中的每个条目上。这被称之为两个索引中的别名使用(aliasing)。当两个使用别名的索引基于两个不同组的信息时,别名使用可能表现出准确度的降低。为了减少别名使用,已经开发出了斜分支预测器方案。这在图2中示出。具体地,在图2的斜分支预测器方案中,变小的PHT被分为三个相等的PHT库202、204和206。通过组合整个采用/未采用历史记录208和条件分支指令的地址(例如,程序计数器)210来产生通用索引。然后通过三个不同函数(F1 212、F2 214和F3 216)来对通用索引进行哈希运算,以便产生用于每个PHT库202、204和206的一个索引。然后通过对来自三个PHT库202、204和206的预测结果的多数票决218来进行预测。如果预测结果错误,那么更新所有的库,但是如果预测结果正确,那么只更新做出正确预测的库。
尽管实现这种方案需要较少的存储器,但是它往往需要更长的时间来收敛,因此初始预测结果的准确度相当低。
为了减少必须存储以进行预测的信息量而开发出的另一个方案被称之为YAGS(又一个全局方案)分支预测方案。具体地,YAGS分支预测方案尝试通过只存储不同于正常表现的历史记录来消除PHT中的多余的信息。在图3中示出YAGS分支预测方案。这个方案包括选择PHT 302、采用的缓存304和未采用的缓存306。选择PHT 302是指出采用或未采用的双模预测器(例如,两位饱和计数器的阵列)。然后,采用和未采用缓存304和306只有在分支与其偏向不符时才存储实例。
当出现条件分支指令时,使用条件分支指令的地址(例如,程序计数器)308来访问选择PHT 302。如果选择PHT指示分支已被采用,则通过组合采用-未采用历史记录310和条件分支指令的地址(例如,程序计数器)308产生的索引被用于访问未采用缓存306,以便查看其是否为预测结果与偏向不一致的特殊情况。如果在未采用缓存306中没有记录,则选择PHT302被用于预测。否则,未采用缓存306被用于预测。当选择PHT指示未被采用时,发生相似的一组事件,但是在这种情况下,访问采用缓存304以查看其是否为预测结果与偏向不一致的特殊情况。
如果来自缓存304或306的预测结果被使用,或者如果选择PHT和分支结果不一致,那么更新缓存304或306。
然而,YAGS分支预测方案的采用和未采用缓存304和306是完全关联的结构,意味着每次访问中需要读所有的元素。这只对于小缓存是可能的。如果需要大的预测器,那么完全关联的缓存将导致时序、功率和区域问题。
本文所述的是用于根据条件分支历史记录预测条件分支指令的结果(采用/未采用)的方法和分支预测器,该预测通过使用条件分支历史记录的不同部分识别多个模式历史记录表中的预测结果来进行。具体地,使用条件分支历史记录的第一部分识别主模式历史记录表中的第一预测结果,并且使用条件分支历史记录的第二部分识别副模式历史记录表中的第二预测结果。随后基于第一和第二预测结果得到结果。
本文所描述的方法和分支预测器允许使用更长历史记录,而不增加存储以进行预测的信息量。具体地,通过代替一个较大的模式历史记录表使用两个或多于两个存储了更少信息的更小的模式历史记录表。对于较长的历史记录,这允许以较少的存储信息来进行更准确的预测。另外,通过不使用YAGS分支预测方案的缓存结构,避免了与之相关的时序、功率和区域问题。
现在参考图4,图4中示出了单线程化处理器400,其中通过使用条件分支历史记录的不同部分识别多个模式历史记录表中的预测来预测条件分支指令的结果。处理器400包括:取指级402,其被配置成从如由程序计数器(PC)所指示的程序中(以程序顺序)提取指令;以及译码和重命名级404,其被安排成解释指令并进行寄存器重命名。
在通过译码和重命名级404之后,指令:(a)被插入重排序缓冲器(ROB)406及(b)分派给流水线408用于执行。
重排序缓冲器406是使指令能够被乱序地执行、但有序地提交的缓冲器。重排序缓冲器406保存以程序顺序插入其中的指令,但多个流水线408可以乱序地执行ROB 406中的指令。在一些示例中,重排序缓冲器406可被形成为循环缓冲器,其具有指向ROB 406中的最早的指令的头和指向ROB 406中的最新的指令的尾。将指令从重排序缓冲器406以程序的顺序输出。换言之,当流水线408已经执行了指令时,将指令从ROB 406的头输出,并且在ROB406中将头递增到下个指令。将输出自重排序缓冲器406的指令提供给提交级410,提交级将指令的结果提交给寄存器/存储器。
处理器400还可包括分支预测器412,分支预测器412被配置成预测在已知导致可能的流变化的指令(诸如分支指令)的情况下程序流将采取哪个方向。分支预测是有用的,因为它使得指令能够在知道分支指令的结果之前就被处理器400推测地执行。分支预测器412可与取指级402和/或流水线408进行通信。例如,取指级402可向分支预测器412提供指示哪个指令是分支指令的信息,并可使用来自分支预测器412的信息来确定接下来提取哪个指令;并且,流水线408可向分支预测器412提供指示对程序计数器进行更新的信息。
当分支预测器412精确地预测程序流时,这提高了处理器400的性能。然而,如果分支预测器412没有正确地预测分支方向,那么就出现了误预测,在程序能继续进行之前需要纠正误预测。为了纠正误预测,丢弃发送给ROB 406的推测性指令,且取指级402开始从正确的程序分支提取指令。
分支预测器412包括:间接分支预测器逻辑单元(未示出),其被用于预测间接分支(基于变量的分支指令);以及条件分支预测器逻辑单元414,其被用于预测条件分支(基于常数的分支指令)。
条件分支预测器逻辑单元414通过使用条件分支历史记录的不同部分识别多个模式历史记录表中的预测结果来预测条件分支指令的结果(采用/未采用)。
现在参考图5,图5示出示例条件分支预测器逻辑单元414。图5的示例条件分支预测器逻辑单元414包括:多个模式历史记录表(PHT)502和504,模式历史记录表(PHT)502和504被配置成存储用于条件分支指令的预测信息,其中每个表502和504通过条件分支历史记录506的不同部分进行索引;预测逻辑单元508,其被配置成基于模式历史记录表502和504中的预测信息来预测条件分支指令的结果(采用/未采用);以及更新逻辑单元510,其被配置成在已执行条件分支指令并已知实际结果之后更新模式历史记录表502和504中的预测信息。
条件分支历史记录506是先前条件分支指令的记录。具体地,条件分支历史记录506包括关于预定数量的先前的条件分支指令中的每一个的历史记录信息。例如,历史记录信息可包括条件分支指令的结果和/或条件分支指令的目标地址或其部分。条件分支历史记录506中表示的条件分支数量被称之为路径长度。例如,如果条件分支历史记录506的路径长度为十,那么条件分支历史记录506包括十个先前条件分支指令的历史记录信息。在一些情况下,条件分支历史记录被实现为移位寄存器。参考图7描述了示例条件分支历史记录。
本文所描述的示例中,条件分支历史记录506是全局性的,意味着具有仅仅一个用于所有条件分支指令的条件分支历史记录506。具体地,用于所有条件分支指令的历史记录信息被存储在相同的条件分支历史记录中。然而,在其他示例中,条件分支历史记录506可专用于特定的条件分支指令或一组条件分支指令。在这些示例中,可具有包括若干个条件分支历史记录的条件分支历史记录表,每个特定条件分支指令用一个条件分支历史记录或者每组条件分支指令用一个条件分支历史记录。当对于每个特定条件分支指令有一个条件分支历史记录或者对于每组条件分支指令有一个条件分支历史记录的情况时,条件分支指令的地址(或其部分)可被用于选择使用哪个条件分支历史记录来产生索引。
与图1-3的PHT相似地,PHT 502和504为被配置成存储用于条件分支指令的预测信息的表。具体地,PHT的每个条目或每行存储预测信息。例如,预测信息可包括指示预测结果(采用/未采用)的单一位。在其他情况下,预测信息可包括饱和计数器,饱和计数器指示预测结果(采用/未采用)和预测结果的质量(例如,强或弱)。参考图9描述了示例饱和计数器。
然而,与图1到3的PHT形成对照,PHT 502和504由条件分支历史记录的单独的部分索引。这允许PHT 502和504比这两个PHT均被整个条件分支历史记录索引时更小。例如,如果条件分支历史记录包括十位,那么由整个条件分支历史记录索引的PHT将具有210=1024个条目。相比之下,如果条件分支历史记录的六位被用于索引第一PHT(例如,主PHT502),且条件分支历史记录的四位被用于索引第二PHT(例如,副PHT504),那么第一PHT将具有26=64个条目,且第二PHT将具有24=16个条目。因此,两个PHT之间总共会有80个条目。相应地,与使用整个条件分支历史记录索引单一表相比,使用条件分支历史记录506的不同部分索引多个表大幅减少存储的数据量。
预测逻辑单元508被配置成基于PHT 502和504中的信息来产生条件分支指令的预测结果512。具体地,预测逻辑单元508获得条件分支历史记录506并产生用于每个PHT的索引514和516。具体地,预测逻辑单元508使用条件分支历史记录506的第一部分来产生用于第一或主PHT 502的第一索引514,并使用条件分支历史记录506的第二部分(与第一部分不同)来产生用于第二或副PHT 504的第二索引516。
如在下文中更详细地描述的,在一些情况下,条件分支历史记录506被分成两个部分,并且使用包括最低有效位的部分来产生用于主PHT 502的索引514,并且使用包括最高有效位的部分来产生用于副PHT 504的索引516。
在一些情况下,通过将条件分支历史记录的相关部分与正被预测的条件分支指令的程序计数器(PC)518组合,产生一个或多个索引。
然后使用产生的索引514和516的每一个来识别对应的PHT 502或504中的特定的条目。然后由预测逻辑单元508使用由索引514或516标识的每个条目中的预测信息520和522,以便产生关于条件分支指令的结果(采用/未采用)的预测结果512。如上所述,预测信息520和522的每一条都包括一个预测结果。在一些情况下,如在下文中更详细地描述的,预测逻辑单元508被配置成使用一个或多个标准将预测信息中的其中一个预测结果选择为条件分支指令的预测结果。可向取指级402提供预测结果512,从而使取指级402知道接下来提取哪条指令。
预测逻辑单元508也可被配置成更新条件分支历史记录506以包含所预测的结果。例如,可更新条件分支历史记录,从而使路径中最新的结果成为所预测的结果。预测逻辑单元508还可被配置成向ROB 524发送更新,从而使ROB包括条件分支历史记录、预测结果和预测所依据的表的记录。存储于ROB中的条件分支历史记录反映条件分支指令的结果被预测时的条件分支历史记录,并且在本文中可被称为条件分支历史记录的快照(snapshot)。如下文中所述,这个信息可被用于在已执行条件分支指令且已知实际结果之后更新PHT。
将参考图6更详细地描述示例预测逻辑单元508。
更新逻辑单元510被配置成接收关于被执行的条件分支指令的信息并相应地更新PHT表502和504。例如,在一些情况下,更新逻辑单元510被配置成接收被执行的条件分支指令的程序计数器(PC)526和指示采用或未采用分支的信息528。然后更新逻辑单元510使用程序计数器526来获取所存储的条件分支历史记录530、来自ROB的指示用于预测的PHT的信息532和所预测的结果。如上所述,所存储的条件分支历史记录530反映了条件分支指令的结果被预测时的条件分支历史记录。
然后更新逻辑单元510使用所存储的条件分支历史记录530,以与由预测逻辑单元508产生用于预测的索引514和516所用的方式相似的方式,产生用于每个PHT的索引534和536。具体地,更新逻辑单元510使用所存储的条件分支历史记录530的一部分来产生用于第一或主PHT 502的第一索引534,并且使用所存储的条件分支历史记录530的第二部分(与第一部分不同)来产生用于第二或副PHT 504的第二索引536。
然后使用产生的索引534和536中的每一个来识别对应的PHT 502或504中的特定的条目。结合实际结果信息528和用于预测的表532,使用通过索引534或536标识的一个或多个条目中的预测信息538和540,产生用于一个或多个表的更新542和544。如上所述,预测信息538和540中的每一条都可包括一个饱和计数器。在这些情况下,产生更新可包括基于实际结果产生新的饱和计数器值。
一旦产生了更新542或544,就使用为该PHT 502或504产生的索引534或536将其写入对应的PHT中。
将参考图11更详细地描述示例更新逻辑单元510。
现在参考图6,图6示出示例预测逻辑单元508。预测逻辑单元508被配置成基于PHT502和504两者中的预测信息产生条件分支指令的预测结果512,其中基于条件分支历史记录的不同部分指示PHT 502和504中的每一个。
在图6的示例中,条件分支历史记录506被分为两个连续的部分602和604。每个部分包括条件分支历史记录506的历史记录信息的子集。本文中使用的一组部件的子集,表示该组部件中的一些部件,而不是全部部件。具体地,条件分支历史记录的历史记录信息的子集包括条件分支历史记录的一些历史记录信息,而不是条件分支历史记录的所有历史记录信息。
使用第一部分602产生用于第一PHT 502的索引514,以及使用第二部分604产生用于第二PHT 504的索引516。在一些情况下,第一部分是具有历史记录的最低有效位的部分,而第二部分是具有历史记录的最高有效位的部分。两个部分可具有相同数量的位或不同数量的位。测试表明,在第一部分602大于第二部分604(例如,包含更多的历史记录信息(例如,用于更多条件分支的历史记录信息)或更多位)时的一些示例中,可提高预测的准确度。然而,可基于分支预测器将要运行其中的应用程序来选择在602和604两个部分之间的条件分支历史记录的位的实际分配。在一些情况下,可基于测试来选择两个部分之间的位的分配。
可一起或分开存储第一和第二部分602和604。然而,在第一和第二部分602和604被分开存储时,为了更新条件分支历史记录的目的,第一和第二部分602和604被看作一个历史记录。例如,如参考图7所描述的,当已预测了新的条件分支指令时,可通过将条件分支历史记录的所有位移位到历史记录中下一个更高的有效位并将新条件分支指令的所预测的结果加到历史记录中的最末有效位或最低有效位来更新条件分支历史记录。出于移位的目的,两个部分被看作一个部分。具体地,在第一部分包含最低有效位的情况下,在已经预测新条件分支指令之后,第一部分的最高有效位被移位到第二部分的最低有效位。
预测逻辑单元508包括:第一索引产生模块606,其根据条件分支历史记录506的第一部分602产生用于第一PHT 502的索引514;第二索引产生模块608,其根据条件分支历史记录506的第二部分产生用于第二PHT502的索引516;以及判定逻辑单元610,其用于基于PHT 502和504中对应于由第一和第二索引产生模块606和608产生的索引514和516的预测信息来预测条件分支指令的结果512。
第一索引产生模块606被配置成根据条件分支历史记录506的第一部分602产生用于第一PHT 502的第一索引514。在一些情况下,第一索引产生模块606被配置成通过将条件分支历史记录506的第一部分602和要被预测的条件分支指令的程序计数器518或其一部分组合来产生第一索引514。可通过使用诸如但不限于异或函数的哈希函数来获得该组合。然而,可使用其他合适的组合和/或哈希函数。将参考图8描述用于产生索引的示例方法。
第二索引产生模块608被配置成根据条件分支历史记录506的第二部分604产生用于第二PHT 504的第二索引516。在一些情况下,第二索引产生模块608被配置成通过将条件分支历史记录506的第二部分604和要被预测的条件分支指令的程序计数器518或其一部分组合来产生第二索引516。可通过使用诸如但不限于异或函数的哈希函数来获得该组合。然而,可使用其他合适的组合和/或哈希函数。
判定逻辑模块610被配置成从第一和第二PHT 502和504接收预测信息520和522,并且配置成根据所接收的预测信息520和522预测条件分支指令的结果512,预测信息520和522对应由第一和第二索引产生模块606和608产生的第一和第二索引514和516。
如上所述,预测信息520和522通常包括预测结果(采用/未采用),并且它还可包括指示预测结果强度的信息(例如,其中的预测信息为饱和计数器)。通常,判定逻辑模块610实现当两个预测结果不同时在它们之间进行选择的机制。在一些情况下,判定逻辑模块610可被配置成在根据接收自第一或主PHT的预测信息的预测结果为强预测结果时,将该预测结果选择为输出预测结果512,否则,将根据接收自第二或副PHT的预测信息的预测结果选择为输出预测结果。在其他情况下,判定逻辑模块610可配置成选择具有较高质量的预测结果的预测结果。然而,用于在接收自两个PHT的预测结果中进行选择的其他合适的方法可被使用。
现在参考图7,图7示出示例条件分支历史记录506。在此示例中,条件分支历史记录506包括M个最近预测的条件分支指令的所预测的结果(采用/未采用)的记录,其中M是路径长度。例如,如果M为五,那么条件分支历史记录506记录五个最近预测的条件分支指令的预测结果。
图7的示例条件分支历史记录506的长度为十二位,且路径长度M为十二。因此,条件分支历史记录506使用一位来记录十二个最近预测的条件分支指令中的每一个的结果(采用/未采用)。在一些情况下,使用一(“1”)来指示已采用分支,并使用零(“0”)来指示未采用分支。对于本领域技术人员将明显的是,条件分支历史记录可包括更多或更少的位,可具有更长或更短的路径长度(M),并且可具有用于每个预测的条件分支指令的额外的信息(例如,目标地址或其一部分)。
在此示例中,条件分支历史记录506可被分成十二个块702-724,其中每个块是代表最近预测的条件分支的结果的单一位。各个块以对应条件分支的预测结果的顺序,其中最左边的块(块702)代表在历史记录506中的最早的预测的条件分支指令的结果,且最右边的块(块724)代表在历史记录506中的最新的(或最近的)预测的条件分支指令的结果。
在此示例中,七个最低有效位(块712-724)形成条件分支历史记录的第一部分602,而五个最高有效位(块702-710)形成条件分支历史记录的第二部分604。然而,对于本领域技术人员将明显的是,两个部分602和604可包括条件分支历史记录506的更多的、更少的或不同的位。
在一些情况下,如图7a中所示,条件分支历史记录506最初被设为全部为零,并且当条件分支预测器逻辑单元414预测条件分支指令的结果时,条件分支预测器逻辑单元414将块704-724中的数据分别向左移位一位到块702-722,并且新条件分支指令的所预测的结果被插入到最低有效位中(块724)。
例如,如果条件分支预测器逻辑单元414预测采用条件分支(例如,所预测的结果为“1”),那么条件分支预测器逻辑单元414可将块704-724中的数据“00000000000”分别移位到块702-722,并将所预测的结果(“1”)插入块724中,从而使得条件分支历史记录506如图7b中所示包含数据“000000000001”。
如果条件分支预测器逻辑单元414随后接着预测未采用下一个条件分支(例如,所预测的结果为“0”),那么条件分支预测器逻辑单元414可将块704-724中的数据“00000000001”分别移位到块702-722,并将所预测的结果(“0”)插入块724中,从而使得条件分支历史记录506如图7c中所示包含数据“000000000010”。
相似地,如果条件分支预测器逻辑单元414随后接着预测采用下一个条件分支(例如,所预测的结果为“1”),那么条件分支预测器逻辑单元414可将块704-724中的数据“00000000010”分别移位到块702-722,并将所预测的结果(“1”)插入块724中,从而使得条件分支历史记录506如图7d中所示包含数据“000000000101”。
可从图7中的示例看出,出于更新条件分支历史记录506的目的,将条件分支历史记录506的两个部分602和604看作单一历史记录。具体地,将位从一个部分602移位到另一个部分604,就像它们是一个历史记录。
现在将参考图8,图8示出图6的示例第一索引产生模块606。如在上文中参考图6所述,第一索引产生模块606从取指级402接收识别程序中的条件分支指令的信息。一些情况下,识别条件分支指令的信息是条件分支指令的地址(例如,程序计数器)。然后第一索引产生模块606获取条件分支历史记录506的第一部分602,并根据第一部分602产生用于第一PHT 502的索引。在一些情况下,第一索引产生模块606被配置成通过将条件分支历史记录506的第一部分602和要预测的条件分支指令的PC518组合来产生第一索引。
在图8所示的示例中,第一索引产生模块606对条件分支历史记录506的第一部分602和条件分支指令的PC 518的一部分进行逐位异或(XOR)运算,以产生第一索引514。例如,在图8中,第一索引产生模块606使用条件分支指令的PC的位2到8。通常,索引产生模块606被配置成选择在PC的中间位置的条件分支指令的PC的位,因为已经证实最高有效位和最低有效位提供相关性较小的信息。
如本领域的技术人员已知的,如果两个对应位相同,那么逐位XOR产生“0”,且如果两个对应位不同,那么逐位XOR产生“1”。例如,如图8中所示的,条件分支历史记录的第一部分为“0101001”,且条件分支指令的PC的位2到8为“1100110”,产生的索引514为“1001111”。
现在参考图9,图9示出示例饱和计数器900,其可被用在本文所述的PHT 502和504中。饱和计数器为具有多个状态的状态机,其中状态的数量基于计数器中的位数。具体地,状态机通常具有2X个状态,其中X是计数器中的位数。计数器的第一位表示预测结果,例如,采用或未采用分支。在一些情况下,一表示采用分支,而零表示未采用分支。计数器的剩余位表示预测结果的强度。采用或未采用分支之后,更新状态机。在一些情况下,当采用分支时,饱和计数器被增加,当未采用分支时,饱和计数器被减小。
在图9的示例中,计数器具有两位,因此状态机具有s2=4个可能的状态:“00”902、“01”904、“10”906和“11”908。前两个状态“00”902和“01”904预测未采用分支;而随后的两个状态“10”906和“11”908预测采用分支。第一和第四状态“00”902和“11”908为强预测,而第二和第三状态“01”904和“10”906为弱预测。
尽管图9示出两位的饱和计数器,但对于本领域的技术人员将明显的是,可实现多于两位的饱和计数器。
现在参考图10,图10是示出了用于预测条件分支指令的结果的示例方法1000,该示例方法可由图4和图5的条件分支预测器逻辑单元414执行。在块1002中,条件分支预测器逻辑单元414从取指级402接收识别要预测的条件分支指令的信息。识别条件分支指令的信息可以是条件分支指令的地址(例如,程序计数器)。一旦识别条件分支指令的信息被接收到,方法1000就继续进行到框1004。
在框1004中,条件分支预测器逻辑单元414获取条件分支历史记录。一旦获取到条件分支历史记录,方法1000就继续进行到框1006和1008。
在框1006中,根据所预定的条件分支历史记录的第一部分产生第一索引。在一些情况下,通过将条件分支历史记录的第一部分与条件分支指令的地址(例如,程序计数器)或其一部分组合,产生第一索引。相似地,在框1008中,根据所预定的条件分支历史记录的第二部分产生第二索引。第二部分与第一部分不同(例如,第一和第二部分不包括历史记录信息的相同子集)。如上所述,第二部分可包括具有高有效位的部分。在一些情况下,通过将条件分支历史记录的第二部分与条件分支指令的地址(例如,程序计数器)或其一部分组合,产生第二索引。一旦产生了索引,方法就分别继续进行到框1010和1012。
在框1010和1012中,使用框1006和1008中产生的索引分别从第一和第二PHT获取预测信息。使用第一索引从第一PHT获取的预测信息被称为第一预测信息,而使用第二索引从第二或副PHT获取的预测信息被称为第二预测信息。一旦获取了第一和第二预测信息,方法就继续进行到框1014。
在框1014中,基于第一和第二预测信息来预测条件分支指令的结果。如上所述,预测信息包括预测结果,并还可包括表示预测结果强度的信息。当预测信息包括表示预测结果强度的信息时,可使用预测结果的相对强度来决定选择哪个预测结果作为所预测的结果。在一些情况下,相比第二预测信息的预测结果,更偏向第一预测信息的预测结果。例如,如果第一预测信息的预测结果为强预测结果,则可将其选为预测结果,否则可将第二预测信息的预测结果选为预测结果。一旦得出了预测结果,方法1000就继续进行到框1016,在框1016处预测结果被输出。一旦输出了预测结果,方法1000就继续进行到框1018。
在框1018中,重排序缓冲器(ROB)被更新(使用识别条件分支指令的信息),以存储条件分支历史记录、所预测的结果和用于得出预测结果的PHT的副本。这个信息稍后可被用于在已执行条件分支指令且已知结果之后更新PHT。一旦更新了ROB,方法1000就结束。
现在参考图11,图11示出示例更新逻辑单元510。更新逻辑单元510被配置成在已经执行条件分支指令且因此已知结果之后更新PHT 502和504中的预测信息。具体地,更新逻辑单元510使用存储于ROB中的用于条件分支指令的条件分支历史记录530,以更新PHT。所存储的条件分支历史记录530表示条件分支指令的结果被预测时的条件分支历史记录。以与预测逻辑单元508保存的条件分支历史记录506相同的方式,所存储的条件分支历史记录530被分成第一部分1108和第二部分1110。
更新逻辑单元510包括:第一索引产生模块1102,其被用于根据所存储的条件分支历史记录530(例如,用于预测条件分支指令的结果的条件分支历史记录)的第一部分1108产生用于第一PHT 502的索引534;第二索引产生模块1104,其被用于根据所存储的条件分支历史记录530的第二部分1110产生用于第二PHT 504的索引536;以及,状态机更新逻辑单元1106,其被用于基于条件分支指令的实际结果更新PHT 502和504。
第一索引产生模块1102被配置成根据所存储的条件分支历史记录530的第一部分1008产生用于第一PHT 502的第一索引534。在一些情况下,第一索引产生模块1102被配置成通过将第一部分534和用于所执行的条件分支指令的程序计数器526或其一部分组合来产生第一索引534。可通过使用诸如但不限于异或函数的哈希函数来获得该组合。然而,可使用其他合适的组合和/或哈希函数。
第二索引产生模块1104被配置成根据所存储的条件分支历史记录530的第二部分1110产生用于第二PHT 504的第二索引536。在一些情况下,第二索引产生模块1104被配置成通过将第二部分1110和用于所执行的条件分支指令的程序计数器或其一部分组合来产生第二索引536。可通过使用诸如但不限于异或函数的哈希函数来获得该组合。然而,可使用其他合适的组合和/或哈希函数。
状态机更新逻辑单元1106被配置成接收对应第一和第二索引534和536的预测信息538和540,并基于条件分支指令的实际结果528和表示为预测532使用了哪个表的信息来更新PHT 502和504。
在一些情况下,只更新用于预测532的PHT。例如,当预测正确的时候,可只更新用于预测532的PHT。通过只更新用于预测的PHT,加强了给出正确结果的预测。否则,可改变产生正确预测的路径。在其他情况下,可更新两个PHT。例如,当预测错误的时候,可更新两个PHT。具体地,如果预测不正确或误预测,则之前的预测具有高置信度,那么有利的是更新两个PHT,这是因为分支的行为已经有了变化且该变化应该记录在两个PHT中。
更新PHT 502和504可包括:从所接收到的预测信息538或540产生用于PHT 502和504的新预测信息;以及用新预测信息更新由索引534或536表示的PHT 502或504的条目。
当预测信息538和540包括饱和计数器时,更新预测信息可包括在采用了条件分支指令时增加饱和计数器,且在未采用条件分支指令时减小饱和计数器。
现在将参考图12,图12示出用于在已执行条件分支指令且已知实际结果之后更新一个或多个PHT的方法1200。方法1200可由图4和图5的条件分支预测器逻辑单元414执行。
在框1202中,条件分支预测器逻辑单元414从流水线408接收识别所执行条件分支指令的信息和指示采用或未采用该分支的信息。识别所执行的条件分支指令的信息可以是条件分支指令的地址(例如,程序计数器)。指示是否采用了分支的信息可能是单一位,其中一(“1”)表示采用了分支,以及零(“0”)表示未采用分支。一旦已接收到识别条件分支指令的信息和指示采用了或未采用分支的信息,方法1200就继续进行到框1204。
在框1204中,条件分支预测器逻辑单元414从ROB获取所存储的条件分支历史记录、指示哪个PHT被用于预测的信息和预测结果。在一些情况下,使用所执行的条件分支指令的程序计数器来从ROB获取该信息。如在上文中参考图10所描述的,已经预测条件分支指令的结果之后,该时刻的条件分支历史记录被存储,以便允许在已经执行条件分支指令之后更新PHT的适当的条目。一旦从ROB获取了所存储的信息,方法继续就进行到框1206和1208。
在框1206中,从所存储的条件分支历史记录的预定第一部分产生第一索引。在一些情况下,通过将存储的条件分支历史记录的第一部分与执行的条件分支指令的地址(例如,程序计数器)或其一部分组合,产生第一索引。相似地,在框1208中,从所存储的条件分支历史记录的预定第二部分产生第二索引。第二部分与第一部分不同(例如,第一和第二部分包括历史记录信息的不同子集(即,属于先前条件分支指令的不同子集的历史记录信息))。在一些情况下,第一和第二部分共同组成完整的所存储的条件分支历史记录。在一些情况下,通过将条件分支历史记录的第二部分与条件分支指令的地址(例如,程序计数器)或其一部分组合,产生第二索引。一旦产生了索引,方法1200就分别继续进行到框1210和1212。
在框1210和1212中,使用框1206和1208中产生的索引分别从第一和第二PHT获取预测信息。使用第一索引从第一PHT获取的预测信息被称为第一预测信息,且使用第二索引从第二或副PHT获取的预测信息被称为第二预测信息。一旦获取了第一和第二预测信息,方法1200就继续进行到框1214。
在框1214中,基于所接收到的预测信息、条件分支指令的实际结果和指示哪个表被用于预测的信息来为一个或多两个PHT产生更新。在一些情况下,只为用于预测的PHT产生更新信息。在其他情况下,可为两个PHT产生更新信息。当预测信息包括饱和计数器时,为PHT产生更新可包括在采用了条件分支指令时增加饱和计数器,且在未采用条件分支指令时减小饱和计数器。一旦产生了一个或多个更新,方法1200就继续进行到框1216。
在框1216中,用在框1214中产生的更新信息更新PHT中的任一个或两个。例如,在为PHT产生更新信息时,通过将更新信息写入由框1206或框1208中产生的索引所指的PHT的条目来更新PHT。一旦更新了PHT,方法就1200结束。
可在单线程化或多线程化有序或乱序处理器中实现本文所述的方法和条件分支预测器逻辑单元414。
现在将参考图13,图13示出多线程处理器1300的原理图。处理器1300包括两个线程1302和1304,其在本文中将被分别称之为线程0和线程1。如在上文中参考图4描述的,每个线程1302和1304包括取指级1306或1308、译码和重命名级1310或1312、重排序缓冲器1314或1316、提交级1318或1320和分支预测器1322或1324。线程1302和1304共用流水线1326。每个分支预测器1322或1324包括条件分支预测器逻辑单元1328或1330,条件分支预测器逻辑单元1328或1330如在上文中参考图5到12描述地预测条件分支指令的结果。
尽管上述方法和条件分支预测器逻辑单元使用两个PHT,但在其他示例中可具有多于两个的PHT。在这些情况下,条件分支历史记录仍然被分为两个部分,并且其中一个部分被用于索引一个表,另一个索引将被用于索引两个表。例如,可通过将条件分支历史记录的有关部分与条件分支指令的PC以不同于用于产生第一或第二索引的方式组合来产生第三索引。来自所有PHT的预测信息然后被用于产生预测结果。
术语“处理器”和“计算机”在本文用于指代具有使其可执行指令的处理能力的任何设备或其部分。例如,术语“处理器”可包括中央处理器(CPU)、图形处理器(GPU或VPU)、物理处理器(PPU)、数字信号处理器(DSP)、通用处理器(例如,通用GPU)、微处理器、设计成在CPU外部加速任务的任何处理单元等。本领域中的技术人员将认识到,这样的处理能力合并到很多不同的设备中,且因此术语“计算机”包括机顶盒、媒体播放器、数字无线电装置、PC、服务器、移动电话、个人数字助理和很多其它设备。
本领域中的技术人员将认识到,用于存储程序指令的存储设备可分布在网络当中。例如,远程计算机可存储被描述为软件的过程的例子。本地或终端计算机可访问远程计算机并下载软件的一部分或全部以运行程序。可选地,本地计算机可按需要下载软件的片段,或执行在本地终端处的一些软件指令和在远程计算机(或计算机网络)处的一些软件指令。本领域中的技术人员也将认识到,通过利用本领域中的技术人员已知的常规技术,软件指令的全部或一部分可由专用电路例如DSP、可编程逻辑阵列等执行。
存储用于实现所公开的方面的机器可执行数据的存储器可以是非暂时性介质。非暂时性介质可以是易失性的或非易失性的。易失性非暂时性介质的例子包括基于半导体的存储器,例如SRAM或DRAM。可用于实现非易失性存储器的技术的例子包括光学和磁性存储器技术、闪存、相变存储器、电阻性RAM。
对“逻辑”的特定引用指执行一种或多种功能的结构。逻辑的例子包括布置成执行那些功能的电路系统。例如,这样的电路系统可包括晶体管和/或在制造过程中可用的其它硬件元件。作为例子,这样的晶体管和/或其它元件可用于形成实现和/或包含例如寄存器、触发器或锁存器的存储器、例如布尔运算的逻辑运算器、例如加法器、乘法器或移位器的数学运算器和互连的电路系统或结构。这样的元件可被提供为定制电路或标准单元库、宏或提供在其它抽象级处。可以特定的布置使这样的元件互连。逻辑可包括固定功能的电路系统,且电路系统可被编程以执行一种或多种功能;这样的编程可从固件或软件更新或控制机制提供。被识别为执行一种功能的逻辑也可包括实现组成部分的功能或子过程的逻辑。在例子中,硬件逻辑具有实现固定功能操作或多个操作、状态机或过程的电路系统。
本文给出的任何范围或设备值可扩展或改变而不失去所寻求的效果,这对技术人员将是明显的。
将理解,上面描述的益处和优点可涉及一个实施方式或可涉及几个实施方式。实施方式不限于解决任何或所有所陈述的问题的那些实施方式或具有任何或全部所陈述的益处和优点的那些实施方式。
对“一个”项目的任何引用指那些项目中的一个或多个。术语“包括”在本文用于意指包括所标识的方法框或元件,但这样的框或元件并不包括排他列表,且装置可包含附加框或元件,并且方法可包含附加操作或元件。此外,框、元件和操作本身并不隐含地是封闭的。
本文描述的方法的步骤可在适当时以任何适当的顺序或同时被执行。在附图中的方框之间的箭头示出方法步骤的一个示例顺序,但并不意欲排除其它顺序或并行的多个步骤的执行。此外,单独的框可从任何方法删除而不偏离本文描述的主题的精神和范围。上面描述的任何例子的方面可与所描述的其它例子中的任一个的方面结合以形成另外的例子,而不失去所寻求的效果。在附图的元件被示为由箭头连接的场合,将认识到,这些箭头示出在元件之间的通信(包括数据和控制消息)的仅仅一个示例流向。元件之间的流向可以在任一方向上或在两个方向上。
将理解的是,优选实施方式的上述描述仅作为例子被给出,并且各种修改可由本领域中的技术人员做出。虽然上面结合某种程度的特殊性或参考一个或多个单独的实施方式描述了各种实施方式,但是本领域中的技术人员可对所公开的实施方式做出很多变更而不偏离本发明的精神或范围。

Claims (18)

1.一种预测由处理器执行的程序中的条件分支指令的结果的方法,所述方法包括:
根据条件分支历史记录的第一部分,在第一索引产生模块中产生第一索引,所述条件分支历史记录包括多个先前预测的条件分支指令中的每一个先前预测的条件分支指令的历史记录信息,所述第一部分包括在所述条件分支历史记录中的历史记录信息的第一子集;
使用所述第一索引识别第一模式历史记录表中的条目,所述第一模式历史记录表中的条目包括第一预测信息,所述第一预测信息包括第一预测结果和识别所述第一预测结果的质量的信息;
根据所述条件分支历史记录的第二部分,在第二索引产生模块中产生第二索引,所述第二部分包括在所述条件分支历史记录中的所述历史记录信息的第二子集,所述第二子集与所述第一子集不同;
使用所述第二索引识别第二模式历史记录表中的条目,所述第二模式历史记录表中的条目包括第二预测信息,所述第二预测信息包括第二预测结果和识别所述第二预测结果的质量的信息;以及
基于所述第一预测信息和所述第二预测信息,使用判定逻辑单元,通过选择所述第一预测结果和所述第二预测结果中的一个预测结果作为所预测的结果,预测所述条件分支指令的结果,
其中所述第一模式历史记录表和所述第二模式历史记录表都具有每个可能的历史记录模式的条目,并且每个条目存储用于所述条件分支指令的预测信息。
2.一种用于预测由处理器执行的程序中的条件分支指令的结果的条件分支预测器逻辑单元,所述条件分支预测器逻辑单元包括:
第一索引产生模块,所述第一索引产生模块配置成根据条件分支历史记录的第一部分产生第一索引,所述条件分支历史记录包括多个先前预测的条件分支指令中的每一个先前预测的条件分支指令的历史记录信息,所述第一部分包括在所述条件分支历史记录中的历史记录信息的第一子集;
第二索引产生模块,所述第二索引产生模块配置成根据条件分支历史记录的第二部分产生第二索引,所述第二部分包括在所述条件分支历史记录中的历史记录信息的第二子集,所述第二子集与所述第一子集不同;以及
判定逻辑单元,所述判定逻辑单元配置成:
使用所述第一索引识别第一模式历史记录表中的条目,所述第一模式历史记录表中的条目包括第一预测信息,所述第一预测信息包括第一预测结果和识别所述第一预测结果的质量的信息;
使用所述第二索引识别第二模式历史记录表中的条目,所述第二模式历史记录表中的条目包括第二预测信息,所述第二预测信息包括第二预测结果和识别所述第二预测结果的质量的信息;以及
基于所述第一预测信息和所述第二预测信息,通过选择所述第一预测结果和所述第二预测结果中的一个预测结果作为所预测的结果,预测所述条件分支指令的结果,
其中所述第一模式历史记录表和所述第二模式历史记录表都具有每个可能的历史记录模式的条目,并且每个条目存储用于所述条件分支指令的预测信息。
3.根据权利要求2所述的条件分支预测器逻辑单元,其中,当识别所述第一预测结果的质量的信息指示所述第一预测结果的质量好于预定阈值时,选择所述第一预测结果作为所预测的结果。
4.根据权利要求2所述的条件分支预测器逻辑单元,其中,当识别所述第一预测结果的质量的信息和识别所述第二预测结果的质量的信息指示所述第一预测结果的质量好于所述第二预测结果的质量时,选择所述第一预测结果作为所预测的结果。
5.根据权利要求2到4中的任一项所述的条件分支预测器逻辑单元,其中,所述判定逻辑单元还被配置成存储与识别所述条件分支指令的信息相关联的所述条件分支历史记录的快照和选择所述第一预测结果和所述第二预测结果中的哪一个作为所预测的结果的指示。
6.根据权利要求5所述的条件分支预测器逻辑单元,其中,在重排序缓冲器中存储所述条件分支历史记录的快照和选择所述第一预测结果和所述第二预测结果中的哪一个作为所预测的结果的指示。
7.根据权利要求5所述的条件分支预测器逻辑单元,还包括更新逻辑单元,所述更新逻辑单元配置成:
接收识别执行的条件分支指令的信息和指示是否采用了执行的条件分支的信息;以及
基于识别所述执行的条件分支指令的信息和指示是否采用了所述执行的条件分支的信息来更新所述第一模式历史记录表和所述第二模式历史记录表中的至少一个。
8.根据权利要求7所述的条件分支预测器逻辑单元,其中,所述更新逻辑单元还被配置成:响应于接收识别所述执行的条件分支指令的信息,获取与所述执行的条件分支指令相关联的所述条件分支历史记录的快照和选择所述第一预测结果和所述第二预测结果中的哪一个作为所预测的结果的指示。
9.根据权利要求8所述的条件分支预测器逻辑单元,其中,更新所述第一模式历史记录表和所述第二模式历史记录表中的至少一个包括:
根据所述条件分支历史记录的快照的第一部分产生第三索引;
使用所述第三索引识别所述第一模式历史记录表中的条目,所述第一模式历史记录表中的所述条目包括第三预测信息;
基于指示是否采用了所述执行的条件分支的信息,更新所述第一模式历史记录表中的条目的所述第三预测信息;
根据所述条件分支历史记录的快照的第二部分产生第四索引;
使用所述第四索引识别所述第二模式历史记录表中的条目,所述第二模式历史记录表中的条目包括第四预测信息;以及
基于指示是否采用了所述执行的条件分支的信息,更新所述第二模式历史记录表中的条目的所述第四预测信息。
10.根据权利要求9所述的条件分支预测器逻辑单元,其中,更新所述第一模式历史记录表和所述第二模式历史记录表中的至少一个还包括:分析选择所述第一预测结果和所述第二预测结果中的哪一个作为所预测的结果的指示,以便确定选择所述第一预测结果和所述第二预测结果中的哪一个作为所预测的结果;响应于确定选择所述第一预测结果作为所预测的结果,只更新所述第一模式历史记录表;并且,响应于确定选择所述第二预测结果作为所预测的结果,只更新所述第二模式历史记录表。
11.根据权利要求9所述的条件分支预测器逻辑单元,其中,所述第三预测信息和所述第四预测信息中的每一个包括饱和计数器,且更新预测信息包括:如果指示是否采用了所述执行的条件分支的信息指示采用了所述执行的条件分支就增加所述饱和计数器,且如果指示是否采用了所述执行的条件分支的信息指示未采用所述执行的条件分支则减小所述饱和计数器。
12.根据权利要求2到4中的任一项所述的条件分支预测器逻辑单元,其中,与历史记录信息的所述第二子集相比,历史记录信息的所述第一子集包括更多的历史记录信息。
13.根据权利要求2到4中的任一项所述的条件分支预测器逻辑单元,其中,历史记录信息的所述第一子集和历史记录信息的所述第二子集中的每一个包括连续的历史记录信息组。
14.根据权利要求2到4中的任一项所述的条件分支预测器逻辑单元,其中,产生所述第一索引包括将所述条件分支历史记录的第一部分与所述条件分支指令的地址组合。
15.根据权利要求14所述的条件分支预测器逻辑单元,其中,将所述条件分支历史记录的第一部分与所述条件分支指令的地址组合包括对所述条件分支历史记录的第一部分和所述条件分支指令的地址的至少一部分运用哈希函数。
16.根据权利要求2到4中的任一项所述的条件分支预测器逻辑单元,其中,产生所述第二索引包括将所述条件分支历史记录的第二部分与所述条件分支指令的地址组合。
17.根据权利要求16所述的条件分支预测器逻辑单元,其中,将所述条件分支历史记录的第二部分与所述条件分支指令的地址组合包括对所述条件分支历史记录的第二部分和所述条件分支指令的地址的至少一部分运用哈希函数。
18.一种处理器,所述处理器包括如权利要求2所述的条件分支预测器逻辑单元。
CN201510437379.7A 2014-07-25 2015-07-23 使用长历史记录的条件分支预测 Active CN105320519B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1413264.1 2014-07-25
GB1413264.1A GB2528676B (en) 2014-07-25 2014-07-25 Conditional Branch Prediction Using A Long History

Publications (2)

Publication Number Publication Date
CN105320519A CN105320519A (zh) 2016-02-10
CN105320519B true CN105320519B (zh) 2020-08-25

Family

ID=51587281

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201520538764.6U Active CN205176828U (zh) 2014-07-25 2015-07-23 条件分支预测器逻辑单元
CN201510437379.7A Active CN105320519B (zh) 2014-07-25 2015-07-23 使用长历史记录的条件分支预测

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201520538764.6U Active CN205176828U (zh) 2014-07-25 2015-07-23 条件分支预测器逻辑单元

Country Status (4)

Country Link
US (1) US10318304B2 (zh)
CN (2) CN205176828U (zh)
DE (1) DE102015111363A1 (zh)
GB (2) GB2534522B (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9983878B2 (en) 2014-05-15 2018-05-29 International Business Machines Corporation Branch prediction using multiple versions of history data
US20170083333A1 (en) * 2015-09-21 2017-03-23 Qualcomm Incorporated Branch target instruction cache (btic) to store a conditional branch instruction
US10175982B1 (en) * 2016-06-16 2019-01-08 Apple Inc. Storing taken branch information
US10896130B2 (en) * 2016-10-19 2021-01-19 International Business Machines Corporation Response times in asynchronous I/O-based software using thread pairing and co-execution
CN106528049B (zh) * 2016-11-17 2019-06-11 上海兆芯集成电路有限公司 在多存储体条件分支预测器中用于更新事件的随机数产生
US10318303B2 (en) 2017-03-28 2019-06-11 Oracle International Corporation Method and apparatus for augmentation and disambiguation of branch history in pipelined branch predictors
US10261797B2 (en) * 2017-04-27 2019-04-16 International Business Machines Corporation Indirect target tagged geometric branch prediction using a set of target address pattern data
US20190004805A1 (en) * 2017-06-28 2019-01-03 Qualcomm Incorporated Multi-tagged branch prediction table
CN110462587A (zh) * 2018-03-29 2019-11-15 深圳市大疆创新科技有限公司 分支预测的方法与装置
US10732979B2 (en) 2018-06-18 2020-08-04 Advanced Micro Devices, Inc. Selectively performing ahead branch prediction based on types of branch instructions
GB2577050B (en) * 2018-09-11 2021-06-16 Advanced Risc Mach Ltd Allocation filter for prediction storage structure
US10956164B2 (en) 2018-11-27 2021-03-23 International Business Machines Corporation Gating updates to branch predictors to reduce pollution from infrequently executed branches
CN113544640A (zh) * 2019-03-30 2021-10-22 华为技术有限公司 分支指令的处理方法、分支预测器及处理器
US11294684B2 (en) 2020-01-31 2022-04-05 Apple Inc. Indirect branch predictor for dynamic indirect branches
US11379240B2 (en) 2020-01-31 2022-07-05 Apple Inc. Indirect branch predictor based on register operands
CN111209047B (zh) * 2020-02-24 2023-08-15 江苏华创微系统有限公司 支持混合模式的分支历史计数器
US20230244494A1 (en) * 2022-02-01 2023-08-03 Apple Inc. Conditional Instructions Prediction
US11809874B2 (en) 2022-02-01 2023-11-07 Apple Inc. Conditional instructions distribution and execution on pipelines having different latencies for mispredictions

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090210686A1 (en) * 2008-02-15 2009-08-20 International Business Machines Corporation Method and system for purging pattern history tables as a function of global accuracy in a state machine-based filtered gshare branch predictor
CN101763248A (zh) * 2008-12-25 2010-06-30 世意法(北京)半导体研发有限责任公司 用于多模式分支预测器的系统和方法
US20120124349A1 (en) * 2010-11-16 2012-05-17 Advanced Micro Devices, Inc. Power efficient pattern history table fetch in branch predictor
CN102483696A (zh) * 2009-08-19 2012-05-30 高通股份有限公司 用以预测有条件非分支指令的不执行的方法和设备

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5574871A (en) * 1994-01-04 1996-11-12 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
US6108775A (en) * 1996-12-30 2000-08-22 Texas Instruments Incorporated Dynamically loadable pattern history tables in a multi-task microprocessor
US7831817B2 (en) * 2003-04-15 2010-11-09 Arm Limited Two-level branch prediction apparatus
US20050223203A1 (en) * 2004-03-30 2005-10-06 Gabriel Loh Segmented branch predictor
US20050228977A1 (en) * 2004-04-09 2005-10-13 Sun Microsystems,Inc. Branch prediction mechanism using multiple hash functions
JP2006053830A (ja) * 2004-08-13 2006-02-23 Toshiba Corp 分岐予測装置および分岐予測方法
US8205068B2 (en) * 2008-07-29 2012-06-19 Freescale Semiconductor, Inc. Branch target buffer allocation
US8181005B2 (en) * 2008-09-05 2012-05-15 Advanced Micro Devices, Inc. Hybrid branch prediction device with sparse and dense prediction caches
US20110078425A1 (en) * 2009-09-25 2011-03-31 Shah Manish K Branch prediction mechanism for predicting indirect branch targets
US8788797B2 (en) * 2010-12-22 2014-07-22 Advanced Micro Devices, Inc. Combined level 1 and level 2 branch predictor
HUE038608T2 (hu) * 2011-08-24 2018-10-29 Grifols Therapeutics Llc Kompozíciók és eljárások nukleinsav-hibridizáltatáshoz
US10209992B2 (en) * 2014-04-25 2019-02-19 Avago Technologies International Sales Pte. Limited System and method for branch prediction using two branch history tables and presetting a global branch history register

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090210686A1 (en) * 2008-02-15 2009-08-20 International Business Machines Corporation Method and system for purging pattern history tables as a function of global accuracy in a state machine-based filtered gshare branch predictor
CN101763248A (zh) * 2008-12-25 2010-06-30 世意法(北京)半导体研发有限责任公司 用于多模式分支预测器的系统和方法
CN102483696A (zh) * 2009-08-19 2012-05-30 高通股份有限公司 用以预测有条件非分支指令的不执行的方法和设备
US20120124349A1 (en) * 2010-11-16 2012-05-17 Advanced Micro Devices, Inc. Power efficient pattern history table fetch in branch predictor

Also Published As

Publication number Publication date
GB2528676B (en) 2016-10-26
CN205176828U (zh) 2016-04-20
CN105320519A (zh) 2016-02-10
DE102015111363A1 (de) 2016-01-28
GB201413264D0 (en) 2014-09-10
GB201607643D0 (en) 2016-06-15
GB2534522A (en) 2016-07-27
US20160026470A1 (en) 2016-01-28
GB2534522B (en) 2016-12-28
US10318304B2 (en) 2019-06-11
GB2528676A (en) 2016-02-03

Similar Documents

Publication Publication Date Title
CN105320519B (zh) 使用长历史记录的条件分支预测
US10261798B2 (en) Indirect branch prediction
US9361242B2 (en) Return stack buffer having multiple address slots per stack entry
US9298467B2 (en) Switch statement prediction
US9672039B2 (en) Register file having a plurality of sub-register files
US10664280B2 (en) Fetch ahead branch target buffer
US7962733B2 (en) Branch prediction mechanisms using multiple hash functions
CN105302543A (zh) 在64位机器上运行32位操作系统
US10318172B2 (en) Cache operation in a multi-threaded processor
US11442727B2 (en) Controlling prediction functional blocks used by a branch predictor in a processor
US10642527B2 (en) Check pointing a shift register with a circular buffer
US20050149710A1 (en) Information processing device
JP3725547B2 (ja) 限定ラン分岐予測
US20070061554A1 (en) Branch predictor for a processor and method of predicting a conditional branch
GB2540189A (en) Check pointing a shift register
GB2540190A (en) Check pointing a shift register

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for 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: 20180713

Address after: California, USA

Applicant after: Imagination Technologies Ltd.

Address before: Hertfordshire

Applicant before: Mex Technology Co.,Ltd.

Effective date of registration: 20180713

Address after: Hertfordshire

Applicant after: Hai Luo Software Co.,Ltd.

Address before: Hertfordshire

Applicant before: Imagination Technologies Ltd.

GR01 Patent grant
GR01 Patent grant