CN113448626B - 推测分支模式更新方法和微处理器 - Google Patents
推测分支模式更新方法和微处理器 Download PDFInfo
- Publication number
- CN113448626B CN113448626B CN202110793062.2A CN202110793062A CN113448626B CN 113448626 B CN113448626 B CN 113448626B CN 202110793062 A CN202110793062 A CN 202110793062A CN 113448626 B CN113448626 B CN 113448626B
- Authority
- CN
- China
- Prior art keywords
- branch
- cache
- address
- cache address
- predictor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 23
- 230000006870 function Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 7
- 238000013461 design Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000003111 delayed effect Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30029—Logical and Boolean instructions, e.g. XOR, NOT
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/321—Program or instruction counter, e.g. incrementing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/323—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3848—Speculative 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
技术领域
本发明通常涉及微处理器,并且具体地涉及微处理器中的分支预测。
背景技术
微处理器如今使用流水线处理方案来操作,由此编程指令被分解为在流水线的多个级中并发执行的步骤。指令通常(例如,编程代码的10-20%)包括分支指令或简单的分支,其中包括无条件分支(例如,始终采取的分支)和条件分支(例如,根据对指定条件的评估而采取或不采取)。直到计算出条件并且条件跳转经过指令流水线中的执行级之前,通常不确定地知道采取还是不采取条件跳转,这可能导致获取下一条指令的延迟。已经开发了分支预测器以试图在流水线的前端猜测条件分支将去向哪个方向(采取、不采取)以及到达哪个目标地址,并且这样改善了整个流水线中的指令流。
在微处理器中常用的一个分支预测器被称为分支目标地址高速缓存(BTAC)。BTAC包括硬件逻辑,该硬件逻辑可以包括使用过去的分支指令行为的全局历史模式以实现对所拾取的分支指令的目标地址的预测。一般而言,用于BTAC的分支预测器可以包括与多个经常用字母表示的、多集关联的高速缓存存储器或边(诸如在BTAC的两个高速缓存存储器的情况下,边A和边B等)相结合使用的多个预测器表。各边可以包括多个路(例如2路、4路等)。用于一些示例BTAC阵列的信息可以在美国专利No.8,832,418和No.7,707,397中找到。
对于条件分支预测,BTAC可使用标签几何(TAGE)预测器,其包括各自具有不同长度的全局分支历史模式的多个表。关于TAGE预测器的附加信息可以在“ANew Case for theTAGE Branch Predictor(Andre Seznec,MICRO2011:The 44th Annual IEEE/ACMInternational Symposium on Microarchitecture,2011,ACM/IEEE,2011年12月,PortoAllegre,巴西)中找到,其通过引用而全文并入于此。对于一些微处理器,TAGE预测器通常使用由第三先前取指更新的分支模式。该特征工作良好,但有时可能在两个取指内遇到同一分支且没有最近条件分支时产生不良预测。因而,相同模式可用于相同分支的多个实例,并且如果分支的两个实例不同地解析(例如,采取或不采取),则可能出现误预测。
发明内容
在一个实施例中,一种微处理器包括:第一逻辑,所述第一逻辑被配置为检测为拾取到的高速缓存地址与两个先前高速缓存地址其中至少之一匹配;以及第二逻辑,其被配置为基于所述匹配调整用于条件分支预测的分支模式并且将所述高速缓存地址与调整后的分支模式进行组合以形成条件分支预测器地址。
在检查以下附图和详细描述时,本发明的其它系统、方法、特征和优点对于本领域的技术人员将是明显的或变得明显。所有这样的附加系统、方法、特征和优点旨在被包括在本说明书内、本发明的范围内,并且受所附权利要求的保护。
附图说明
参考以下附图,可以更好地理解本发明的各个方面。不必按比例绘制附图中的组件,而是将重点放在清楚地例示本发明的原理上。此外,在附图中,相同的附图标记在多个视图中表示相应部件。
图1A是示出实现推测分支模式更新系统的实施例的微处理器所用的示例分支单元流水线的框图。
图1B是示出图1A中所示的分支单元流水线的示例前端的示意图。
图2A是示出在推测分支模式更新系统的实施例中使用的示例分支模式调整逻辑的实施例的示意图。
图2B是示出在示例推测分支模式更新系统的实施例中使用的条件分支预测器和表的示意图。
图3是示出示例推测分支模式更新方法的实施例的流程图。
具体实施方式
公开了一种推测分支模式更新系统和方法的某些实施例,该推测分支模式更新系统和方法通过在遇到与来自两个先前取指的高速缓存地址匹配的分支时调整所使用的分支模式来改进分支预测。在一个实施例中,推测分支模式更新系统包括第一逻辑,该第一逻辑检测高速缓存地址是否与两个先前高速缓存地址其中至少之一匹配。推测分支模式更新系统还包括第二逻辑,该第二逻辑基于匹配来调整用于条件分支预测的分支模式并且将高速缓存地址与调整后的位模式进行组合以形成条件分支预测器地址。通过改变后的条件分支预测器地址,分支预测基于与先前分支不同的分支模式历史,从而得到较少的误预测。
简而言之,条件分支预测器使用可能是两次或三次之前的取指的分支模式,这可能导致将相同的旧分支模式用于两次分支发生,潜在地导致误预测。相比之下,推测分支模式更新系统的某些实施例检测用于条件分支预测的给定高速缓存地址是否与两个先前高速缓存地址中的一个或多个匹配,并且调整用于形成条件分支预测器(例如,TAGE)地址的分支模式。分支模式以及因此的TAGE地址不同于用于基于先前高速缓存地址的分支预测的分支模式,因此提供不同的分支预测。
在总结了本发明的推测分支模式更新系统的某些特征之后,现在将详细参考如附图中所例示的推测分支模式更新系统的描述。虽然将结合这些附图来描述推测分支模式更新系统,但并不意在将其限制于这里所公开的实施例。即,虽然本发明容许修改和替代形式,但是其具体实施例在附图中以示例的方式示出并且本文将详细描述为足以使本领域技术人员理解。然而,应当理解,附图及其详细描述不旨在将本发明限制为所公开的特定形式。相反,本发明将覆盖落在由所附权利要求限定的本发明的精神和范围内的所有修改、等同物和替代物。如贯穿本申请所使用的,词语“可以”是以许可的意义(即,意味着具有潜在性)而不是强制的意义(即,意味着必须)来使用的。类似地,词语“包括”意味着包括但不限于。
各种单元、模块、电路、逻辑或其它组件可被描述为“被配置为”进行一个或多个任务。在这样的上下文中,“被配置为”是对结构的广泛叙述,其一般意味着“具有在操作期间进行或能够进行一个或多个任务的电路或其它物理结构”。电路可以是专用电路、或在编码指令的控制下操作的更通用处理电路。也就是说,在描述本发明的各种实现的某些方面或特征时,这里可以使用诸如“单元”、“模块”、“电路”、“逻辑”和“组件”等的术语。本领域技术人员将理解,利用电路实现相应的特征,无论该电路是专用电路还是在微编码指令控制下操作的更通用电路。
此外,单元/模块/电路/逻辑/组件可以被配置为即使在该单元/模块/电路/逻辑/组件当前不在操作中时也进行任务。叙述被配置为进行一个或多个任务的单元/模块/电路/逻辑/组件明确地不旨在针对该单元/模块/电路/逻辑/组件进行功能性限定。对此,本领域技术人员将了解,电路元件的具体结构或互连将通常由设计自动化工具的编译器(诸如寄存器传送语言(RTL)编译器等)来确定。RTL编译器对非常类似于汇编语言代码的脚本进行操作,以将脚本编译成用于最终电路的布局或制造的形式。
即,使用更高级软件工具来设计集成电路(诸如本发明的集成电路等),以对电路的期望功能操作进行建模。如众所周知的,“电子设计自动化”(或EDA)是用于设计电子系统(诸如集成电路等)的软件工具的类别。EDA工具还用于将设计功能编程到现场可编程门阵列(FPGA)中。如Verilog和甚高速集成电路硬件描述语言(VHDL)的硬件描述语言(HDL)被用于创建电路的高级表示,从该高级表示可以得到低级表示和最终的实际布线。实际上,由于现代半导体芯片可以具有数十亿个组件,因此EDA工具被认为对于它们的设计是必要的。实际上,电路设计者使用如C/C++的编程语言来指定操作功能。EDA软件工具将该指定功能转换成RTL。然后,硬件描述语言(例如Verilog)将RTL转换成离散的门网表。该网表定义由例如铸造厂生产的实际电路。实际上,这些工具因其在促进电子和数字系统的设计工艺中的作用和用途而众所周知和理解,因此本文不需要描述。
图1A示出微处理器10所用的示例分支单元流水线的实施例。应当理解,为了简洁和易于解释和例示,这里省略了微处理器10的某些已知组件。众所周知,流水线架构提供了在执行中重叠的多个指令,其中各级称为管道级。分支单元流水线中所示的块各自可以根据一个或多个级来实现,这些级显示在块的左边并且在所描绘的实施例中由从上至下按顺序前进并且被重定向(如箭头所示)的大写字母C、I、B、U、L、M、F、G、W、X、E、S、W、Y和Z表示。本领域普通技术人员应当理解,图1A中所描绘的级的数量和/或布置仅仅例示一个示例实施例,并且在一些实施例中,级的不同数量和/或布置可被实现,因此预期在本发明的范围内。本领域普通技术人员还应当理解,这些块提供了对分支流水线的功能的一般描述,并且为了简洁,这里省略了本领域普通技术人员已知的相关逻辑或电路。例如,本领域普通技术人员应当理解,如已知的,流水线的各级可以由时钟流水线寄存器或锁存器分开。作为另一示例,尽管在图1A中未明确示出,但本领域普通技术人员应当理解,前端处的操作涉及与指令高速缓存的数据交换或交互。
指令高速缓存是微处理器内的随机存取存储器装置,微处理器将最近从较大高速缓存(例如,L2高速缓存、L3高速缓存)或系统存储器获取和/或预获取(例如,通过总线接口单元从DRAM获取和/或预获取)并且由微处理器在运行ISA机器语言程序的过程中进行的ISA机器语言程序的指令(诸如x86 ISA机器语言指令等)放入指令高速缓存中。ISA定义保持要进行的下一ISA指令的存储器地址(由x86 ISA定义为指令指针(IP),但有时称为程序计数器(PC))的指令地址寄存器,并且微处理器在其运行机器语言程序以控制程序的流程时更新指令地址寄存器内容。为了随后在下一次机器语言程序流执行时基于指令地址寄存器内容从指令高速缓存而不是从系统存储器更快地拾取ISA指令的目的,对ISA指令进行高速缓存,使得寄存器保持指令高速缓存中所存在的ISA指令的存储器地址。特别地,基于保持在指令地址寄存器中的存储器地址(例如,IP)而非排他性地基于由加载或存储指令指定的存储器地址来访问指令高速缓存。因此,将ISA指令保持为数据(诸如可存在于采用软件转译器的系统的硬件部分中等)、并且排他地基于加载/存储地址而不是通过指令地址寄存器值来访问的专用数据高速缓存不是指令高速缓存。此外,为了本发明的目的,对指令和数据进行高速缓存(即,基于指令地址寄存器值和加载/存储地址,而不是排他地基于加载/存储地址所访问)的统一高速缓存旨在被包括在指令高速缓存的定义中。
特别注意图1A的微处理器10的分支单元流水线,微处理器10包括流水线微处理器,在一个实施例中,该流水线微处理器的指令集基本上符合x86架构指令集。如本领域的普通技术人员从本文提供的描述中将了解的,本发明可以以各种不同的电路结构和架构来实现,并且图1A中所示的架构仅是许多合适的架构之一。示例性微处理器10包括快速预测器12、分支目标地址高速缓存(BTAC)14、指令字节队列(XIB)16、分支解码器18、格式指令队列(FIQ)/循环队列20、指令转译器22、寄存器别名表(RAT)/保留站(RS)24、功能单元(例如,整数单元、浮点单元等)26、以及分支表更新28。微处理器10的各附图标记的框对应于在相应的多个级C、I、B、U、L、M、F、G、W、X、E、S、W、Y和Z上实现的逻辑电路,其中流水线架构在每个级启用不同指令组。在一个实施例中,可以在每个级处运行四个或更多个指令,其中控制信号沿着流水线标记各级。与快速预测器12、BTAC 14和XIB 16相关联的级涉及对指令高速缓存(I高速缓存,图1A中未示出)的访问。
快速预测器12包括单周期分支预测器,该单周期分支预测器提供单周期预测(例如,花费一个周期来产生目标地址,在一个实施例中在I级提供该预测)。在一个实施例中,快速预测器12包括存储先前执行的分支指令的分支目标地址的表(本文也被称为阵列或目标阵列),该表在随后遇到所存储的分支指令时实现分支预测。在一个实施例中,表包括128个条目,但是在一些实施例中可以使用其它大小(例如,64个条目、32个条目等)的表。该表被组织为n路(例如,n是大于1的整数)的集关联高速缓存。一般而言,n路的集关联高速缓存在这里也称为多集关联高速缓存。在一个实施例中,各条目存储八(8)个3位计数器和当前局部分支模式,该计数器是由3位局部分支模式而选择的。快速预测器12还包括条件分支预测器,该条件分支预测器与该表并行地被访问并且为条件分支提供采取/不采取的方向。快速预测器还包括返回堆栈,该返回堆栈可以提供目标而不是表。在一个实施例中,返回堆栈包括四(4)个条目,并且为返回指令提供目标。注意,以上列出的规范仅用于说明,并且一些实施例可以在不同的规范下进行,因此预期在本发明的范围内。快速预测器12被配置为立即(在单个周期内)递送预测分支目标,而没有采用分支惩罚。在一些实施例中,快速预测器12可以根据其预测机制和/或表配置的其它规范来操作,或者在一些实施例中,可以省略快速预测器12。大多数分支被快速预测器12正确地预测。在一些实施例中,在快速预测器12基于同一所获取的分支指令而提供与BTAC 14的分支预测不同(例如,在方向和/或目标上不同)的分支预测的情况下,BTAC 14利用BTAC 14所提供的分支预测信息(例如,方向、目标地址、分支预测类型)来在BTAC 14的一组级内(例如,在U级)重写快速预测器12的分支预测并更新快速预测器表。
I级和/或B级对应于对分支单元流水线的各种表(包括I高速缓存、标签阵列、转译后备缓存器(TLB)阵列、BTAC阵列、返回堆栈阵列等)的访问、(例如,基于标签)通过多路复用给出方向或路、以及读出指令。
BTAC 14保持其用于预测后续执行期间的目标地址、方向和类型的与先前执行分支指令有关的信息。BTAC 14包括比快速预测器12的表大得多的一个或多个表。在一个实施例中,BTAC 14包括4k条目、m路的集关联表(这里也称为阵列或目标阵列),其中m是大于1的整数。类似于n路集关联表,m路集关联表在这里也可以被称为多集关联表。BTAC 14的各条目包括有效位、分支目标地址预测、方向预测和分支类型。分支类型指定分支指令是呼叫/返回、是间接分支、是条件相对分支、还是无条件相对分支。在一个实施例中,BTAC 14包括具有多条目(例如,12k)的基于标签几何(TAGE)的条件分支预测器的条件相对分支预测器(或者简称为条件分支预测器)、多个表、多位(例如,3位)、采取/不采取(T/NT)计数器以及多位全局分支历史,或者与上述这些协作。也就是说,如已知的,TAGE条件分支预测器包括具有几何上增加的分支历史长度的标签表。作为另一示例,间接预测包括多条目(例如,1.5k)TAGE预测器,并且将表条目用于静态间接分支。在一个实施例中,使用了两个TAGE条件分支预测器,一个用于预测器阵列中的边A,以及一个用于预测器阵列中的边B。TAGE条件分支预测器可以是BTAC的一部分或与BTAC 14结合使用。
在一个实施例中,BTAC 14包括具有比TAGE条件分支预测器低的复杂度的第二类型的条件分支预测器(例如与预测器阵列的边C相关联的gshare预测器)或与之协作。gshare条件分支预测器可以是BTAC 14的一部分或与BTAC 14结合使用。gshare条件分支预测器包括在快速预测器12的复杂度与TAGE条件分支预测器的复杂度之间的复杂度(例如,大约TAGE条件分支预测器的大小的1/10)。在一个实施例中,gshare条件分支预测器包括单个表(例如,包括最后m个执行的分支指令的分支模式的m位全局历史寄存器,其中,m通常为10-12位,但不限于该数量)。gshare条件分支预测器使用全局分支历史和分支指令的位置(例如IP)来(经由XOR逻辑运算)创建到计数器(例如2位计数器)的表中的索引,其中索引的结果是针对当前分支的预测。由于TAGE和gshare类型的条件分支预测器在本领域中是已知的,因此为简洁起见,在此省略对其的进一步描述。此外,尽管这里强调了边A、B和C,但是在一些实施例中,可以使用更少的或额外的边。注意,在一些实施例中,可以使用其它类型的预测机制,包括基于相关性的预测机制、使用全局和局部分支历史的组合的条件分支预测器等。对于指令高速缓存的高速缓存行的各部分或各取指单位(quantum)(例如,16字节),BTAC 14可以保持三个条目(例如,边A、B和C,尽管在一些实施例中可以使用更少的边来存储针对更少的分支指令的预测信息),该三个条目可以保持针对可能存在于高速缓存行的一部分中的多达三个分支指令的预测信息。注意,示例BTAC的进一步信息可以在美国专利8,832,418和7,707,397中找到,这些专利在与本发明一致的程度上通过引用结合在此。BTAC 14包括通过一组级(例如,I级、B级和U级)的操作。实际上,分支指令的U级用作目标的C级(例如,从B级到C级的箭头反映B级处的分支指令的情况,并且下一个时钟是目标的C级,或者在这里也是高速缓存地址),从而导致BTAC预测的二时钟延迟。
BTAC 14具有二时钟采取惩罚(two-clock taken penalty),这也揭示快速预测器12通过立即将新高速缓存地址引导为目标来提供快速分支预测(无采取惩罚)的益处。在一个实施例中,BTAC 14大于快速预测器12且具有更复杂的分支预测机制,其被配置为(例如,总是)在分支预测中存在不一致(例如,BTAC 14确定的分支预测与快速预测器12所确定的采取判断和/或分支目标地址不同)时重写快速预测器12的分支预测。在一些实施例中,BTAC 14被配置为通过将分支预测信息写入到快速预测器12的表中(且还写入BTAC 14的表中)来在BTAC级其中之一(例如,U级)期间更新快速预测器12。在一些实施例中,延迟对BTAC14的更新,直到分支被执行或引退为止,其中对BTAC14的更新涉及对BTAC 14的预测器表的写入。在一个实施例中,更新涉及目标信息更新和/或计数器更新。然而,对快速预测器12的更新不等待那么久,而在BTAC级期间发生。注意,不在快速预测器12中的分支在两个周期之后在与BTAC级相对应的时间(例如,在BTAC级期间)被写入快速预测器12中。
XIB 16是条目队列,各条目保持来自指令高速缓存的16个字节的数据。例如,来自XIB 16的高速缓存数据仅是采用16个字节的块的指令字节流,并且鉴于指令具有可变长度,给定x86指令在流内或给定块内在何处开始或结束是未知的。XIB 16包括用以确定和标记各指令在流内的开始和结束字节、从而将字节流分解成x86指令流的已知逻辑,其中该x86指令流被提供给FIQ/循环队列20并存储在FIQ/循环队列20中以供微处理器流水线的其余部分处理。在L(长度)级,XIB 16确定指令长度。在一个实施例中,预解码器(图1A中未示出)在U级处实现,并且被配置为检测潜在分支指令并且在队列中针对各指令字节来如此地标记它们。注意,在该级,存在关于给定字节是否为指令的开始的模糊性。如果字节是在稍后(M级)确定的分支指令的操作码字节,则该指令被确认为分支指令。例如,分支解码器18包括用于在多路复用或M级中对指令进行多路复用的指令多路复用(未示出),其中分支指令被这样确认。注意,关于分支解码的附加信息可以在美国专利8,473,726中找到,其全文在与本发明一致的程度上通过引用结合在此。
在F级中,如以上所说明的对这些指令进行格式化。在一个实施例中,格式化指令包括基本上符合x86架构指令集的指令。此外,在M级确定给定指令(可能由预解码器预先标记)是否确实是分支。例如,在快速预测器12或BTAC 14中发生未命中的情况下(例如,在初始启动时),分支解码器18(例如,指令多路复用)决定为当前指令是分支,向BOT写入,并且在G级将高速缓存地址重定向到新目标并更新微处理器10的前端中的表。实际上,当在快速预测器12或BTAC 14处未命中时,分支解码器18提供分支预测,其中分支指令在C级转向目标。在一些情况下,诸如在BTAC 14处针对各取指存在多于有限或预定最大数量的分支(例如,针对各16字节取指存在多于三个分支)的情况下,延迟额外分支的分支预测,直到解码时间为止。
FIQ/循环队列20接收格式化指令并且对它们进行缓存,直到它们可以被转译成微指令为止。FIQ/循环队列20还提供初步解码和快速循环功能(例如,在BTAC循环分支上,循环队列被激活并且循环指令被重复发送),后者由框20右侧的箭头表示。
W级提供可选的额外定时时钟。
在X级,指令转译器22(在X级或转译级中)将FIQ/循环队列20中所存储的格式化指令转译为微指令。
指令以程序顺序被提供至寄存器别名表/保留站(RAT/RS)表24。RAT/RS24的RAT功能维持和生成针对各指令的依赖性信息。RAT/RS 24的RAT功能将指令的源和目的地重命名到内部寄存器上,并且将指令分派到RAT/RS 24的保留站,该保留站(可能不按照程序顺序)向功能单元26发出指令。包括整数单元的功能或执行单元26在E(执行)级执行分支指令。执行单元、分支单元和整数单元是本文中可互换使用的术语。在一个实施例中,执行单元26(例如,两个执行单元)在单个时钟周期中执行两个分支。执行单元26还指示BTAC 14是否已正确地预测分支指令。
在一个实施例中,将执行的结果提供给重排序缓存器(未示出),该重排序缓存器包括与已经执行的指令有关的信息。众所周知,重排序缓存器在指令发出之后保持指令的原始程序顺序,并允许在退出级期间对结果进行序列化。在一个实施例中,可以将重排序缓存器的信息中的一些存储在沿着流水线的其它地方,诸如在解码器18处等。存储在重排序缓存器中的信息可以包括分支信息,诸如分支的类型、分支模式、目标、预测中使用的表以及高速缓存替换策略信息(例如,最近最少使用或LRU)等。
分支表更新28包括S、W、Y和Z级,并且被配置为用与完全解码和执行的分支指令有关的信息(例如,分支的最终结果)来(例如,在S级处)对前端的各种表(例如,BTAC、TAGE)进行更新。在S、W、Y和Z级,更新可能涉及表读取、目标地址写入以及计数器递增或递减,这可能涉及一些延迟。在一个实施例中,分支表更新28针对给定条件分支指令和缓存有该条件分支指令的边(例如,A、B或C)提供错误预测的指示。
现在参考图1B并继续参考图1A,示出在针对图1A的微处理器10示出的分支单元流水线的前端30处使用的示例快速预测器12和其它示例性源。前端30包括获取单元32(例如,包括多路复用和时钟寄存器)、转译后备缓存器(TLB)34、指令高速缓存(I高速缓存数据)36、I高速缓存标签38(或标签阵列)、BTAC 14以及快速预测器12。获取单元32接收多个高速缓存指令地址源,包括顺次的指令地址(例如,来自I级)、经校正指令地址(例如,来自S级)、解码时间指令地址(例如,来自G级)以及来自BTAC 14和快速预测器12的地址。获取单元32的输出是作为对TLB 34、I高速缓存数据36、I高速缓存标签38、BTAC 14和用于访问I高速缓存数据36的下一指令的快速预测器12的输入而提供的高速缓存地址。
TLB 34在存储器管理单元(未示出)的管理下提供如已知的虚拟到物理页地址转译。即,TLB 34存储最近使用的虚拟地址的物理地址。TLB 34从分段单元(其将来自程序的逻辑地址转换成线性地址)接收线性地址,并且将该线性地址的一部分与TLB 34的条目进行比较以查找匹配。如果存在匹配,则根据TLB条目计算物理地址。如果不存在匹配,则拾取来自存储器的页表条目且将该页表条目放置到TLB 34中。
I高速缓存数据36包括已经从L2、L3或主存储器拾取或预拾取的指令的1级高速缓存。I高速缓存数据36包括多个时钟寄存器。
I高速缓存标签38包括与I高速缓存数据36中的指令相对应的标签阵列,并且包括多个时钟寄存器,并且用于确定与所拾取的高速缓存指令相关联的信息(例如,高速缓存地址的标签或部分)与I高速缓存数据36和BTAC 14之间的匹配。
上文结合图1A说明了BTAC 14,并且该BTAC 14具有多个时钟寄存器和二(2)时钟采取惩罚。同样在上文中说明的快速预测器12具有零(0)时钟采取惩罚。例如,假定沿着I高速缓存以每周期16个字节进行拾取,并且假设高速缓存地址20至高速缓存地址95的分支指令。注意,在该示例中由地址描述暗示十六进制表示法(例如,0x0、0x10、0x20等)。由此,取指在高速缓存地址0、高速缓存地址10、高速缓存地址20(分支指令,但由于BTAC 14跨越多个周期进行读取和多路复用因而尚未解决,其中在一些实施例中,该多个周期是与I高速缓存相同的定时)、高速缓存地址30(相对时钟1)、高速缓存地址40(相对时钟2)、然后在第3时钟(相对时钟3)上发生,高速缓存指令取指被重定向到缓存地址95。因此在该示例中采取的分支惩罚包括两个时钟周期,因为高速缓存地址30和40发生在分支之后。换言之,在没有快速预测器12的情况下,对于该特定设计示例,采用的分支惩罚总是两个时钟。利用更小且更快的快速预测器12,高速缓存地址获取(在以上示例中)包括0、10、20和95,对高速缓存地址没有延迟且采取的惩罚为零。如上所述,在一些实施例中,快速预测器12可以被省略。
前端30还包括分支模式调整逻辑40,如以下结合图2进一步说明的,该分支模式调整逻辑40被配置为检测条件分支指令的高速缓存地址是否与两个先前高速缓存地址中的一个或多个相匹配,并且还被配置为调整由所拾取的高速缓存地址使用的分支模式。然而,在进一步详细描述分支模式调整逻辑40之前,一些附加背景可以促进进一步理解由分支模式调整逻辑40解决的分支预测缺点。如所知的,超标量微处理器架构利用多个指令流水线来在给定时钟周期期间同时执行若干指令。参考图1A,可以在C、I、B和U级处同时实现高速缓存地址00、10、20、30、40等处的指令(例如,为了便于说明而使用速记的十六进制的格式)。例如,在U级处,微处理器可以检测高速缓存地址10处的指令的分支(例如,具有不采取(NT)的方向预测),而高速缓存地址40处的指令正开始被处理(例如,在C级处)。尽管编程流不受NT分支的影响(例如,由于高速缓存地址20和30已经进入流水线),但需要存在分支模式更新。由于在至少一些微处理器中更新直到针对高速缓存地址20和30的第三取指之前都不会发生,因此更新太晚。然而,与NT条件分支相对应的高速缓存地址10影响与在C级处的高速缓存地址40一起使用的模式。由此,由于C级处的高速缓存地址40是在从U级处的高速缓存地址10起的三次取指之前,因此高速缓存地址40遇到基于高速缓存地址10处的NT分支的经更新位模式。相应高速缓存地址20和30处的高速缓存行取指中的任何分支遇到过去的分支模式(不是基于高速缓存地址10处的NT分支的经更新分支模式),这是因为这些地址在三个取指延迟内。类似地,如果(例如)高速缓存地址30为采取分支(到高速缓存地址95),则丢弃后续的高速缓存地址40和50(例如,丢弃30与95之间的高速缓存地址),然后跟随的高速缓存地址包括(从高速缓存地址95起的)高速缓存地址100、110、120等。在给定三次取指之前更新的情况下,高速缓存地址110处的取指看到高速缓存地址30处的分支模式改变,而高速缓存地址95处的采用分支影响高速缓存地址110的模式(在三次取指之前更新的情况下在高速缓存地址110处未被看到)。这种延迟更新对于推测分支处理而言是固有的,但是一些微处理器可能具有不同程度的延迟(例如,两次取指延迟)。注意,一些研究者通过推荐并行地预测每个可能的结果来解决这个问题,但是这种方法的一个不利方面是使用增加的读取端口并且因此增加的芯片大小来将更近的分支更新到模式中。
在上述情况下,推测分支预测的固有处理可能面临的挑战是,当相同分支模式用于需要不同地预测的分支时,这导致误预测。例如,假定顺序拾取高速缓存地址100、110、120、130和140并且全部不包括分支(并且因此不包括模式改变),然后拾取包括NT条件分支的高速缓存地址150。在该情况下,NT条件分支的高速缓存地址150使用三次之前的高速缓存地址(例如,高速缓存地址120)的分支模式。假定存在导致从相同高速缓存地址(例如,在高速缓存地址150处,诸如重定向到高速缓存地址150的在高速缓存地址160处的分支指令)拾取的稍后的分支指令,从而导致高速缓存地址150的第二次发生,但这次程序流需要重定向高速缓存地址(例如200)的采取条件分支。在三次取指回顾的情况下,分支模式更新基于高速缓存地址140(例如,给定140、150、160、150的高速缓存拾取序列)。然而,在该示例中想到在高速缓存地址范围100-140中不存在分支。换言之,高速缓存地址120处的分支模式(由高速缓存地址150的第一次发生使用的更新)与140处的分支模式(由高速缓存地址150的第二次发生使用的更新)相同。条件分支预测器不能区分这些不同的预测方向(采取的与不采用的),这是因为所使用的分支模式是相同的,从而导致利用正在使用的分支模式形成的相同的条件分支预测器(TAGE)地址,从而导致相同的预测(或者两者都采取,或者两者都不采取)。显然,在该示例中,这些预测中的一个是错误的,从而导致误预测。
作为另一示例,可能存在如下实例,其中拾取高速缓存地址150然后在高速缓存地址160处分支向后返回(例如,返回到在高速缓存地址150处的分支)。实际上,这样的情形可以发生在分支取指自身内(例如,代替高速缓存地址160,例如在150处的取指内的高速缓存地址,例如高速缓存地址159、15F等,其中分支将处理重定向到高速缓存地址150)。无论如何,存在可能发生不同的分支方向的重复的取指地址。
结合图2A描述了上述问题的一个解决方案,其中,检测重复的取指地址,并且分支预测基于调整后的分支模式。具体地,图2A示出图1B中所示的被配置为从取指单元32接收高速缓存地址的分支模式调整逻辑40的一个实施例。分支模式调整逻辑40包括:第一逻辑,该第一逻辑用于检测当前高速缓存地址与两个先前高速缓存地址中的一个或多个的匹配;以及第二逻辑,该第二逻辑用于调整用于先前高速缓存地址的分支模式并且使用调整后的分支模式来形成条件分支预测器(例如,TAGE)地址,该条件分支预测器地址被发送到TAGE表以提供与从先前高速缓存地址导出的预测不同的预测。在一个实施例中,分支模式调整逻辑40包括第一寄存器42、第二寄存器44和与第一逻辑相对应的比较器逻辑46。分支模式调整逻辑40还包括逻辑48,该逻辑48被配置为翻转示出与对高速缓存地址的先前取指相关联的先前分支的影响的分支模式的多个位。寄存器42被配置为存储前一周期使用的高速缓存地址,并且寄存器44被配置为存储两个周期前使用的高速缓存地址。寄存器42、44的输出被输入到比较器逻辑46,其中,在所拾取的高速缓存地址与来自寄存器42的前一周期的高速缓存地址之间进行比较,并且在所拾取的高速缓存地址与来自寄存器44的两个周期前的高速缓存地址之间进行进一步的比较。任一匹配(例如,OR逻辑)意味着用于可能潜在地引起误预测的不同采取或不采取方向的条件分支的重复分支模式的可能性。
第二逻辑包括逻辑48,该逻辑48被配置为进行分支模式更新。逻辑48接收当前分支模式、所拾取的高速缓存地址和匹配的指示,并翻转分支模式的一个或多个位。例如,逻辑48翻转分支模式的两位,并且通过将经更新的分支模式与高速缓存地址进行组合(例如,经由XOR运算)来形成新的TAGE地址,该TAGE地址用于访问TAGE预测器的表。因此,所拾取的高速缓存地址获得不同的预测,这是因为其使用不同的分支模式(其用于形成与先前高速缓存地址取指所使用的TAGE表地址不同的TAGE表地址)。如图2B中所示,BTAC 14具有或耦合到分支预测表50。在一个实施例中,分支预测表50(或简称为表)包括第一边(A)、第二边(B)和第三边(C),但是在一些实施例中可以使用不同数量的边。第一边A和第二边B各自包括与相应第一条件分支预测器(或更具体地,TAGE条件分支预测器(一个用于边A,一个用于边B))相对应的一组多集关联表。第三边包括包含单个条件分支预测器(例如,gshare条件分支预测器)的单个表,但是在一些实施例中,第三边可以省略或与不同的条件分支预测器和/或不同数量的表相关联。多个表T0-TN在相应的边A和B中,其中,N是大于一的整数。本领域的技术人员应了解,BTAC 14和条件分支预测器(TAGE、gshare)这两者具有多边阵列(各自具有边A、B和C)。例如,如果分支存在于BTAC 14的边B中,则分支也存在于条件预测器的边B中。如图2B中所示,预测表50的各个边A、B具有单独的TAGE条件预测器,并且边C具有gshare条件分支预测器。
进一步说明匹配和位翻转,并且继续参考图2A-2B并且使用以上所描述的示例,来自两个周期前的高速缓存地址150没有获得地址匹配,因此没有位被翻转。例如,分支模式是全零。发送到TAGE预测器表50的与缓存地址150相对应的TAGE地址被发送到TAGE表中,并且从那里得到预测。第二次,存在地址匹配(例如,针对所拾取的高速缓存地址150),分支模式调整逻辑40检测到该场景,并且翻转分支模式的位,例如位[8]和[2],其用于形成与用于高速缓存地址150的先前发生的TAGE地址不同的TAGE地址。基于该处理,存在不同的分支模式(因此借助于由不同分支模式形成的不同的TAGE地址,存在不同的TAGE表条目),从而得到不同的预测。
再次参考图2B,利用针对边A和B的表T0-TN示出TAGE表。在一个实施例中,表50包括TAGE表T1-T8,各自具有512个条目。T1-T8的TAGE地址根据cache_address[8:0]XORbranch_pattern[8:0]形成,其中分支模式对于各个表是不同的(还存在表T0,其包括2k个没有分支模式的条目)。在T1-T8的各个TAGE地址处,存在11位标签和3位计数器值。表的读取需要标签匹配以命中。在一个实施例中,被翻转的两个位包括位[8]和[2],但是取决于根据性能测试或其它测量的评估,可以翻转其它位和/或更少的或额外的位。如上文类似地说明的,基于cache_address[8:0]XOR branch_pattern[8:0]XOR spec_adjust[8:0]形成TAGE地址,其中spec_adjust等于二进制值:100000100(其翻转位[8]和[2])。注意,以上公开的XOR运算可以包括添加cache_address[17:9],其可以用于使访问更均匀地分布。此外,由于TAGE地址是通过将高速缓存地址与分支模式的变化进行XOR而形成的,因此本领域技术人员应了解,这样的运算在逻辑上等效于翻转高速缓存地址的位[8]和[2],或翻转TAGE地址的位[8]和[2]。无论如何,在形成TAGE地址(例如,cache_address XOR branch_pattern XOR spec_adjust)的同时进行分支模式调整。在本发明的上下文中,本领域普通技术人员应当理解,上述规范提供说明性示例,并且一些实施例可以使用不同的规范。实际上,分支的第二次发生被视为不同的单独分支,这使得TAGE预测器能够学习以正确地预测两次发生。当存在第二次发生的误预测时,预测被校正。在没有地址调整的情况下,当该预测被校正时,它还改变两个周期前的高速缓存地址的预测,这是因为两者都使用针对表中的同一条目的TAGE地址——这可能导致第一次发生被误预测。注意,在一些实例中,正确预测可以是两者都采取或两者都不采取,但是除了使用表中的额外条目之外不存在损害。
上述处理的一个值得注意的特殊情况是分支没有被看到两次。例如,根据上面假定高速缓存地址150的示例,其中,处理分支到经过该分支的点的高速缓存地址150处。假定高速缓存地址取指100、110、120、130(其分支到158)、158(未见条件分支)、160(分支到150)、150(采取条件分支到200)和200。因此,从130,存在到158的分支,在158处不存在分支,但是在150处存在未被看到的分支。稍后在高速缓存地址160处,存在返回到高速缓存地址150的分支,在150处地址匹配被触发。然而,如果在158处的高速缓存地址是分支的目标,并且没有看到条件分支,则实际上条件分支没有被看到两次。为了解决这一点,在一个实施例中,如果仅看到条件分支一次(例如,检测到高速缓存地址被看到两次,但是由于分支的第一次发生已经被不同的分支跳过,因此仅看到分支一次),则分支模式调整逻辑40暂停分支模式调整。换句话说,对于取指地址匹配但取指是分支的目标的特殊情况,如果由于分支目标跳过条件分支而导致条件分支没有被看到,则暂停调整(例如,停用或关闭)。注意,在比较中通常不使用地址位[3:0],因此高速缓存地址158应通常与高速缓存地址150匹配。
如上所述,推测分支模式更新系统的某些实施例调整分支模式,当与高速缓存地址组合时,这产生了调整后的TAGE地址。这些TAGE地址用于读取TAGE表。
鉴于以上描述,本领域普通技术人员应当理解,推测分支模式更新方法(在图3中表示为方法52并且在一个实施例中由微处理器实现)包括:检测为拾取到的高速缓存地址与两个先前高速缓存地址其中至少之一匹配(54);基于所述匹配来调整用于条件分支预测的分支模式(56);以及将所述高速缓存地址与调整后的分支模式进行组合以形成条件分支预测器地址(58)。
流程图中的任何处理描述或框应被理解为表示代码的模块、段、逻辑或部分(其包括用于在过程中实现特定逻辑功能或步骤的一个或多个可执行指令),并且替代实现包括在实施例的范围内,其中如本发明领域技术人员将理解的,功能可以不按所示或讨论的顺序地执行(包括基本上并发执行或以不同顺序执行),这取决于所涉及的功能。
虽然已经在附图和前面的描述中详细示出和描述了本发明,但是这样的示出和描述应被认为是说明性的或示例性的而不是限制性的;本发明不限于所公开的实施例。本领域技术人员通过研究附图、公开内容和所附权利要求书,在实践要求保护的发明时可以理解并实现所公开的实施例的其它变化。
注意,可以使用所公开的实施例的不同组合,因此参考实施例或一个实施例并不意味着排除来自该实施例的特征与来自其它实施例的特征一起使用。在权利要求书中,词语“包括”不排除其它元件或步骤。
Claims (20)
1.一种微处理器,包括:
第一逻辑,其被配置为检测为拾取到的高速缓存地址与两个先前高速缓存地址其中至少之一匹配;以及
第二逻辑,其被配置为基于所述匹配来调整用于条件分支预测的分支模式并且将所述高速缓存地址与调整后的分支模式进行组合以形成条件分支预测器地址。
2.根据权利要求1所述的微处理器,其中,所述第一逻辑包括:第一寄存器,所述第一寄存器用于存储所述先前高速缓存地址中的两个周期前使用的高速缓存地址的第一高速缓存地址;以及第二寄存器,所述第二寄存器用于存储所述先前高速缓存地址中的一个周期前使用的另一高速缓存地址的第二高速缓存地址。
3.根据权利要求2所述的微处理器,其中,所述第一逻辑还包括比较逻辑,所述比较逻辑用于将拾取到的高速缓存地址与所述第一高速缓存地址进行比较并且将拾取到的高速缓存地址与所述第二高速缓存地址进行比较。
4.根据权利要求3所述的微处理器,其中,所述第一逻辑被配置为基于所述比较逻辑的输出来确定所述匹配。
5.根据权利要求4所述的微处理器,其中,所述第二逻辑被配置为通过翻转所述分支模式的一个或多个位来调整所述分支模式。
6.根据权利要求5所述的微处理器,其中,所述第二逻辑被配置为经由所翻转的一个或多个位与所述高速缓存地址之间的XOR运算来形成所述条件分支预测器地址。
7.根据权利要求5所述的微处理器,其中,与所述两个先前高速缓存地址相对应的分支的预测被高速缓存在TAGE预测器的条件分支表中。
8.根据权利要求7所述的微处理器,其中,所述第二逻辑将所述条件分支预测器地址发送到所述条件分支表,所述条件分支预测器地址用于在与基于所述第一高速缓存地址的条件分支预测所用的条目不同的条目处读取所述条件分支表。
9.根据权利要求8所述的微处理器,其中,所述条件分支表的不同条目包括与基于所述第一高速缓存地址的条件分支预测所用的分支预测计数器值不同的分支预测计数器值。
10.根据权利要求1所述的微处理器,其中,所述第一逻辑被配置为检测为第二拾取到的高速缓存地址包括分支的目标且没有看到条件分支,其中所述第二逻辑被配置为暂停分支模式调整。
11.一种由微处理器实现的推测分支模式更新方法,所述推测分支模式更新方法包括:
检测为拾取到的高速缓存地址与两个先前高速缓存地址其中至少之一匹配;
基于所述匹配来调整用于条件分支预测的分支模式;以及
将所述高速缓存地址与调整后的分支模式进行组合以形成条件分支预测器地址。
12.根据权利要求11所述的推测分支模式更新方法,还包括:存储所述先前高速缓存地址中的两个周期前使用的高速缓存地址的第一高速缓存地址,并且存储所述先前高速缓存地址中的一个周期前使用的另一高速缓存地址的第二高速缓存地址。
13.根据权利要求12所述的推测分支模式更新方法,还包括将拾取到的高速缓存地址与所述第一高速缓存地址进行比较并且将拾取到的高速缓存地址与所述第二高速缓存地址进行比较。
14.根据权利要求13所述的推测分支模式更新方法,还包括基于所述比较来确定所述匹配。
15.根据权利要求14所述的推测分支模式更新方法,还包括通过翻转所述分支模式的一个或多个位来调整所述分支模式。
16.根据权利要求15所述的推测分支模式更新方法,还包括经由所翻转的一或多个位与所述高速缓存地址之间的XOR运算来形成所述条件分支预测器地址。
17.根据权利要求15所述的推测分支模式更新方法,其中,与所述两个先前高速缓存地址相对应的分支的预测被高速缓存在TAGE预测器的条件分支表中。
18.根据权利要求15所述的推测分支模式更新方法,还包括将所述条件分支预测器地址发送到条件分支表并且在与基于所述第一高速缓存地址的条件分支预测所用的条目不同的条目处读取所述条件分支表。
19.根据权利要求18所述的推测分支模式更新方法,其中,所述条件分支表的不同条目包括与基于所述第一高速缓存地址的条件分支预测所用的分支预测计数器值不同的分支预测计数器值。
20.根据权利要求11所述的推测分支模式更新方法,还包括检测为第二拾取到的高速缓存地址包括分支的目标且没有看到条件分支,并且暂停分支模式调整。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/099,852 | 2020-11-17 | ||
US17/099,852 US11113067B1 (en) | 2020-11-17 | 2020-11-17 | Speculative branch pattern update |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113448626A CN113448626A (zh) | 2021-09-28 |
CN113448626B true CN113448626B (zh) | 2023-05-16 |
Family
ID=77558996
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110793062.2A Active CN113448626B (zh) | 2020-11-17 | 2021-07-14 | 推测分支模式更新方法和微处理器 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11113067B1 (zh) |
CN (1) | CN113448626B (zh) |
TW (1) | TWI793739B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114090077B (zh) * | 2021-11-24 | 2023-01-31 | 海光信息技术股份有限公司 | 调取指令的方法及装置、处理装置及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1439460A2 (en) * | 2003-01-14 | 2004-07-21 | IP-First LLC | Apparatus and method for invalidation of redundant entries in a branch target address cache |
CN105612499A (zh) * | 2013-10-29 | 2016-05-25 | 华中科技大学 | 混合高速缓存管理 |
CN106406823A (zh) * | 2016-10-10 | 2017-02-15 | 上海兆芯集成电路有限公司 | 分支预测器和用于操作分支预测器的方法 |
CN111459550A (zh) * | 2020-04-14 | 2020-07-28 | 上海兆芯集成电路有限公司 | 具高度领先分支预测器的微处理器 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6886093B2 (en) * | 2001-05-04 | 2005-04-26 | Ip-First, Llc | Speculative hybrid branch direction predictor |
US6938151B2 (en) * | 2002-06-04 | 2005-08-30 | International Business Machines Corporation | Hybrid branch prediction using a global selection counter and a prediction method comparison table |
US20060190710A1 (en) * | 2005-02-24 | 2006-08-24 | Bohuslav Rychlik | Suppressing update of a branch history register by loop-ending branches |
US7461243B2 (en) * | 2005-12-22 | 2008-12-02 | Sun Microsystems, Inc. | Deferred branch history update scheme |
US8566569B2 (en) * | 2010-06-24 | 2013-10-22 | International Business Machines Corporation | State machine-based filtering of pattern history tables based on distinguishable pattern detection |
US9201654B2 (en) * | 2011-06-28 | 2015-12-01 | International Business Machines Corporation | Processor and data processing method incorporating an instruction pipeline with conditional branch direction prediction for fast access to branch target instructions |
US9268569B2 (en) * | 2012-02-24 | 2016-02-23 | Apple Inc. | Branch misprediction behavior suppression on zero predicate branch mispredict |
US9430243B2 (en) * | 2012-04-30 | 2016-08-30 | Apple Inc. | Optimizing register initialization operations |
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 |
-
2020
- 2020-11-17 US US17/099,852 patent/US11113067B1/en active Active
-
2021
- 2021-07-14 CN CN202110793062.2A patent/CN113448626B/zh active Active
- 2021-08-30 TW TW110132014A patent/TWI793739B/zh active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1439460A2 (en) * | 2003-01-14 | 2004-07-21 | IP-First LLC | Apparatus and method for invalidation of redundant entries in a branch target address cache |
CN105612499A (zh) * | 2013-10-29 | 2016-05-25 | 华中科技大学 | 混合高速缓存管理 |
CN106406823A (zh) * | 2016-10-10 | 2017-02-15 | 上海兆芯集成电路有限公司 | 分支预测器和用于操作分支预测器的方法 |
CN111459550A (zh) * | 2020-04-14 | 2020-07-28 | 上海兆芯集成电路有限公司 | 具高度领先分支预测器的微处理器 |
Also Published As
Publication number | Publication date |
---|---|
TWI793739B (zh) | 2023-02-21 |
TW202221702A (zh) | 2022-06-01 |
CN113448626A (zh) | 2021-09-28 |
US11113067B1 (en) | 2021-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20070033385A1 (en) | Call return stack way prediction repair | |
US10310859B2 (en) | System and method of speculative parallel execution of cache line unaligned load instructions | |
KR20130141396A (ko) | 루프 버퍼 패킹 | |
TWI783582B (zh) | 利用間接有效表的Spectre修復的方法和微處理器 | |
CN116302106A (zh) | 用于促进分支预测单元的改善的带宽的设备、方法和系统 | |
KR102635965B1 (ko) | 마이크로 프로세서의 프론트 엔드 및 이를 이용한 컴퓨터 구현 방법 | |
TWI807371B (zh) | 利用預測器模式標籤的Spectre修復方法和微處理器 | |
US11614944B2 (en) | Small branch predictor escape | |
CN113448626B (zh) | 推测分支模式更新方法和微处理器 | |
TWI780804B (zh) | 微處理器和預取指調整方法 | |
TWI788912B (zh) | 可調整分支預測方法和微處理器 | |
US11995447B2 (en) | Quick predictor override and update by a BTAC | |
TWI844775B (zh) | 快速預測器覆寫方法和微處理器 | |
TWI786691B (zh) | 微處理器和分支處理方法 | |
TWI773391B (zh) | 微處理器和分支處理方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |