CN109643237B - 分支目标缓冲器压缩 - Google Patents
分支目标缓冲器压缩 Download PDFInfo
- Publication number
- CN109643237B CN109643237B CN201680088628.9A CN201680088628A CN109643237B CN 109643237 B CN109643237 B CN 109643237B CN 201680088628 A CN201680088628 A CN 201680088628A CN 109643237 B CN109643237 B CN 109643237B
- Authority
- CN
- China
- Prior art keywords
- branch
- target buffer
- branch target
- compressed
- uncompressed
- 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
- 239000000872 buffer Substances 0.000 title claims abstract description 106
- 230000006835 compression Effects 0.000 title description 16
- 238000007906 compression Methods 0.000 title description 16
- 238000000034 method Methods 0.000 claims abstract description 32
- 238000012545 processing Methods 0.000 claims description 10
- 239000002699 waste material Substances 0.000 abstract description 2
- 210000005100 blood-tumour barrier Anatomy 0.000 description 127
- 238000010586 diagram Methods 0.000 description 11
- 230000008859 change Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
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/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/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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本公开涉及用于改进分支目标缓冲器(“BTB”)操作的技术。压缩BTB连同未压缩BTB一起被包括在分支预测单元内。为了支持每循环多达两个分支指令的预测,所述未压缩BTB包括各自存储用于多达两个分支预测的数据的条目。对于其中将单个分支指令存储在所述未压缩BTB中将会浪费所述缓冲器中的空间的情况,所述压缩BTB包括存储仅单个分支指令的数据的条目。所述未压缩BTB中的空间将被浪费是由以下事实所致:为了支持每循环两次分支查找,两个分支的预测数据必须具有某些共同的特征(诸如,高速缓存行地址)以便一起存储在单个条目中。
Description
相关申请的交叉引用
本申请要求2016年8月30日提交的美国非临时专利申请号15/252,164的权益,所述申请以引用方式并入,如同在本文中完全阐述一般。
背景技术
在微处理器中,顺序地提取用于执行的指令,直到出现分支。分支导致提取指令的地址变化并且可能与指令提取吞吐量的延迟相关联。例如,可能需要评估分支以确定是否采用分支以及分支目的地是哪里。然而,直到分支实际上已经进入指令执行流水线才可以评估分支。分支延迟跟提取分支的时间与评估分支以确定该分支的结果和因此下一次需要提取什么指令的时间之间的差异相关联。
分支预测有助于通过基于指令地址和分支评估历史预测分支指令的存在和结果来缓解这个延迟。分支预测技术可以使用分支条件决策(例如,采用或不采用)的全局历史和当前程序计数器值来作出是否存在分支和是否应采用该分支的预测。分支目标缓冲器存储将程序计数器地址与分支目标相关联的信息。分支目标缓冲器中存在条目隐式地指示在与该条目相关联的程序计数器处存在分支。分支预测器可以使用全局历史和分支目标缓冲器数据来作出分支预测决策。由于与分支指令相关联的延迟,有效的分支预测和良好设计的分支预测逻辑在微处理器设计中很重要。
附图说明
从结合附图通过示例给出的以下描述中可以获得更详细的理解,在附图中:
图1是可以实施一个或多个公开的实施例的示例装置的框图;
图2是位于图1的处理器内的指令执行流水线的框图;
图3是示出示例分支预测单元的框图;
图4是示出根据示例的未压缩分支目标缓冲器和压缩分支目标缓冲器两者的条目的图;
图5是根据示例的用于使用压缩和未压缩分支目标缓冲器来获得分支目标预测数据的方法的流程图;并且
图6是根据示例的用于更新未压缩分支目标缓冲器和压缩分支目标缓冲器的方法的流程图。
具体实施方式
压缩分支目标缓冲器连同未压缩分支目标缓冲器一起被包括在分支预测单元内。为了支持每循环多达两个分支指令的预测,未压缩分支目标缓冲器包括各自存储用于多达两个分支预测的数据的条目。对于其中将单个分支指令存储在未压缩分支目标缓冲器中将会浪费该缓冲器中的空间的情况,压缩分支目标缓冲器包括存储仅单个分支指令的数据的条目。未压缩分支目标缓冲器中的空间将被浪费是由以下事实所致:用于两个分支的预测数据必须具有某些共同的特征(诸如,高速缓存行地址)以便一起存储在单个条目中。如果一个分支不与另一分支共享此类特征,则该分支在未压缩分支目标缓冲器中将需要它自己的条目。相反,该分支被存储在压缩分支目标缓冲器中。
图1是实施本公开的各方面的示例装置100的框图。装置100包括例如计算机、游戏装置、手持装置、机顶盒、电视、手机或者平板计算机。装置100包括处理器102、存储器104、存储装置106、一个或多个输入装置108以及一个或多个输出装置110。装置100还可以可选地包括输入驱动器112和输出驱动器114。应当理解,装置100可以包括图1中未示出的另外部件。
处理器102包括中央处理单元(CPU)、图形处理单元(GPU)、位于相同裸片上的CPU和GPU或者一个或多个处理器核心,其中每个处理器核心是CPU或GPU。存储器104可以与处理器102位于相同的裸片上,或者可以与处理器102分开定位。存储器104包括易失性或非易失性存储器,例如,随机存取存储器(RAM)、动态RAM或高速缓存。
存储装置106包括固定或可移除存储设备,例如,硬盘驱动器、固态驱动器、光盘或闪存盘。输入装置108包括键盘、按键、触摸屏、触控板、检测器、麦克风、加速计、陀螺仪、生物特征扫描仪或者网络连接(例如,用于发射和/或接收无线IEEE 802信号的无线局域网卡)。输出装置110包括显示器、扬声器、打印机、触觉反馈装置、一个或多个灯、天线或者网络连接(例如,用于发射和/或接收无线IEEE 802信号的无线局域网卡)。
输入驱动器112与处理器102和输入装置108通信,并且准许处理器102从输入装置108接收输入。输出驱动器114与处理器102和输出装置110通信,并且准许处理器102将输出发送到输出装置110。应注意,输入驱动器112和输出驱动器114是可选的部件,并且如果输入驱动器112和输出驱动器114不存在,则装置100将以相同的方式操作。
图2是位于图1的处理器102内的指令执行流水线200的框图。指令执行流水线200从存储器中检索指令并且执行所述指令,从而将数据输出到存储器并且更改指令执行流水线200内的元件的状态,诸如寄存器文件218内的寄存器。
指令执行流水线200包括:指令提取单元204,其被配置成经由指令高速缓存202从系统存储器(诸如存储器104)提取指令;解码器208,其被配置成将所提取的指令解码;功能单元216,其被配置成执行计算来处理所述指令;加载存储单元214,其被配置成经由数据高速缓存220从系统存储器加载数据或将数据存储到系统存储器;以及寄存器文件218,其包括存储指令的工作数据的寄存器。重排序缓冲器210跟踪当前悬空(in-flight)的指令,并且尽管在悬空时允许无序执行,但确保指令的按序引退。“悬空”指令指的是已经被重排序缓冲器210接收但尚未产生专用于处理器的架构状态的结果(例如,写入寄存器文件的结果等等)的指令。保留站212维护悬空指令并且跟踪指令操作数。当所有的操作数准备好执行特定指令时,保留站212将所述指令发送到功能单元216或加载/存储单元214以供执行。完成的指令被标记以用于在重排序缓冲器210中引退,并且在处于重排序缓冲器队列210的前头时引退。引退指的是将指令的结果提交到处理器的架构状态的动作。例如,由加法指令将加法结果写到寄存器、由加载指令将加载的值写到寄存器或者由分支指令致使指令流转移到新位置全部都是指令的引退示例。
指令执行流水线200的各种元件经由公用数据总线222进行通信。例如,功能单元216和加载/存储单元214将结果写到公用数据总线222,所述结果可以由保留站212读取以供执行相关指令并且由重排序缓冲器210读取作为已经完成执行的悬空指令的最终处理结果。加载/存储单元214也从公用数据总线222读取数据。例如,加载/存储单元214从公用数据总线222读取来自所完成的指令的结果,并且针对存储指令而经由数据高速缓存220将所述结果写到存储器。
通常,指令提取单元204顺序地提取存储器中的指令。顺序控制流可以被分支指令打断,这导致指令流水线200从非顺序地址提取指令。分支指令可以是有条件的,从而只有满足特定条件才产生分支,或者无条件的,并且可以直接地或间接地指定目标。直接目标由指令字节本身中的常量指定,并且间接目标由一些计算指定。直接和间接分支可以是有条件或无条件的。
对于指令执行流水线200而言,指令的顺序提取相对简单。指令提取单元204顺序地提取大块的连续地存储的指令以便执行。然而,出于一些原因,分支指令可能会打断这样的提取。更具体地,取决于分支指令的类型,分支指令的执行可能会发生以下情况中的任一个或全部:指令解码器208确定指令实际上是分支指令,功能单元216计算分支指令的目标,以及功能单元216评估分支指令的条件。由于在由指令提取单元204提取分支指令并发布以供执行时与在分支指令实际上被指令执行流水线200执行时之间存在延迟,因此指令提取单元204包括分支预测单元206。
分支预测单元206基于将要提取的指令的地址而生成分支条件预测(例如,采用或不采用)和分支目标预测。分支预测单元206可以使用经由多种已知技术中的任一种来维护和操纵的分支条件历史,以及将指令程序计数器与分支目标地址相关联的分支目标历史。在检测到所预测的分支、识别所预测的分支的所预测的目标地址并且预测采用目标路径后,分支预测单元206致使指令提取单元204开始从所预测的目标地址提取指令。因此,分支预测单元206有助于减少由于分支指令而产生的延迟。
尽管分支预测单元206预测到分支,但此类预测可能不准确。因此,分支指令仍发送到剩下的指令执行流水线200以便执行。确定分支预测是正确的导致不校正处理器指令流。然而,确定分支预测不正确(“误预测”)将导致校正动作,包括重置指令执行流水线状态以及修正由分支预测单元206存储的分支预测数据。
更具体地,通过由指令执行流水线200执行分支指令以及将结果与分支预测进行比较来检测误预测。在确定分支被误预测后,指令执行流水线200校正处理器状态,包括程序计数器,并且基于现在校正的程序计数器而开始提取指令。校正处理器状态可以包括将来自与误预测的分支指令相关联的控制流路径的任何悬空指令转储清除,以及恢复任何其他流水线状态数据以考虑到与误预测的控制流路径相关联的任何指令,并且表示显著的性能损失。出于这个原因,准确的分支预测会提高整体处理性能。
图3是示出示例分支预测单元206的框图。如图所示,分支预测单元206包括条件预测器304、未压缩分支目标缓冲器(“BTB”)310、压缩BTB 312、全局历史存储器308以及预测器306。压缩BTB 312和未压缩BTB 310共同包括BTB 302。
分支预测单元206的单元一起工作以预测在检查中的分支预测的结果,并且基于所预测的分支结果而将用于指令提取的所预测的地址提供到指令提取单元204。从预测器306输出的预测信息包括用于提取接下来的指令的所预测的地址和代表预测采用还是不采用条件分支的所预测的条件决策。预测器306将地址和条件决策提供到全局历史存储器308、条件预测器304以及未压缩BTB 310和压缩BTB 312以进行进一步预测。全局历史308基于预测信息来更新分支预测历史的内部存储并且将全局历史值输出到条件预测器304。条件预测器304也从预测器306接收所预测的下一地址,以便提供条件预测。条件预测器304可以根据任何已知的技术来提供条件预测。在一个示例中,条件预测器304基于BTB 312中的条目来识别特定指令被预测为分支指令、从全局历史存储器308获得全局分支历史位值、基于预测算法来处理全局分支历史位值的位,并且基于经处理的位来获得预测结果。所预测的下一地址也并行地提供到未压缩BTB 310和压缩BTB 312,以用于识别指令流中的分支指令并且用于确定那些分支指令的所预测的目标地址。
为了支持高预测吞吐量,未压缩BTB 310允许每循环查找多达两个分支。通过在未压缩BTB 310的每个条目中包括多达两个分支的数据来实现这种能力。更具体地,未压缩BTB 310中的条目被标记指令高速缓存行地址。因此,单个提供的指令高速缓存行地址的命中允许每循环提供多达两个所预测的分支目标和被预测为分支指令的两个指令。然而,可能会存在未压缩BTB 310中的单个条目无法存储用于一个以上所预测的分支指令的数据的情形。例如,如果高速缓存行只包括一个分支指令,则BTB条目(被标记高速缓存行地址)可以只包括一个分支指令的数据。在这样的情形下,浪费了条目中的与第二所预测的分支指令对应的额外空间。
因此,还包括压缩BTB 312。压缩BTB 312包括大小设定为仅单个分支预测目标的数据的条目。因此,当特定高速缓存行不存在足够的分支目标预测数据时可以使用压缩BTB312中的条目,以填充未压缩BTB 310中的整个条目。与未压缩BTB 310一样,使用针对其执行分支预测的高速缓存行的高速缓存行地址来查找压缩BTB 312中的条目。
通过压缩将存储在未压缩BTB 310中的分支属性数据的一个或多个项可以节省压缩BTB 312中的条目中的额外空间。在一些示例中,通过假定特定属性的“常见情况”值来完成这个压缩。不匹配常见情况的所有分支指令都无法存储在压缩BTB 312内,并且假定具有压缩BTB 312中的对应条目的所有分支指令都具有常见情况值。也可以采用更复杂的方式通过以下方式来完成压缩:用需要某些量的位的值代替需要更少位的其他值,或者将两个或更多个独立属性字段转换成指示两个或更多个独立属性字段的常见组合的共享字段,其中共享字段比独立属性字段具有更少位。只有被视作“常见”的属性值才被允许存储在压缩BTB 312中,并且具有非常见属性值的分支的分支预测数据存储在未压缩BTB 310中。尽管示出只具有单个压缩BTB312,但分支预测单元206可以替代地包括多个压缩BTB,每个压缩BTB具有不同压缩方案。例如,一个压缩BTB中的条目的属性可以被假定为具有一个具体值,而另一压缩BTB中的条目的属性可以被假定为具有不同具体值。压缩方案也可以在其他方面不同。
除了由于具有“非常见属性值”而无法压缩的条目之外,一个其他类型的条目也无法存储在压缩BTB 312中。更具体地,一些分支目标缓冲器条目被视作“大”分支目标缓冲器条目。大条目是包括完整长度的目标地址而不是缩短的目标地址的那些条目。更具体地,分支指令通常具有相对靠近分支指令本身的地址的目标。因此,分支指令的目标无法利用比完整地址大小少的位数来存储在分支目标缓冲器中。然而,当分支指令具有充分远离分支指令的地址的目标时,分支目标缓冲器必须存储更大数量的地址位。由于存储需要更大数量的位,因此此类类型的分支指令存储在未压缩BTB 310中并且无法存储在压缩BTB 312中。
压缩BTB 312和未压缩BTB 310可以体现为高速缓存,所述高速缓存以出于分支预测目的而当前在检查的高速缓存行的高速缓存行地址为索引。在一个示例中,压缩BTB 312和未压缩BTB 310形成n通路相关联高速缓存,其中n通路中的第一数量包括压缩BTB312并且n通路中的另一数量包括未压缩BTB 310。因此,可以通过以下方式在未压缩BTB 310和压缩BTB 312上并行地执行查找:提供高速缓存行地址作为标签,并且识别来自任一未压缩BTB 312或压缩BTB 310的匹配条目以用于进一步处理。其中给定的标签存在不止一个条目的冲突查找将导致从单个条目选择和输出数据以用于分支预测。如果预测不采用当前查找的所有分支,则在下一循环中查找相同的高速缓存行以获得剩余数据。这个顺序查找继续进行,直到给定的高速缓存行不存在更多条目,或者直到预测出现到另一高速缓存行的分支或者PC或所预测的PC因一些其他原因而改变。
图4是示出根据示例的未压缩BTB 310和压缩BTB 312两者的条目的图。示出了单分支(压缩)BTB条目402、双分支(未压缩)BTB条目404以及单分支大目标(未压缩)BTB条目406。
单分支(压缩)BTB条目402包括标签、压缩属性、类型、偏移和目标。所述标签是发现分支指令的高速缓存行的地址。所述压缩属性包括压缩属性值。如上文所述,可以通过省略属性数据来压缩一些属性,以便压缩BTB 312中的任何条目的对应属性被假定为具有该属性的特定值。可以通过以下方式来压缩其他属性:减少与属性对应的位的数量,并且只允许与具有某些属性值的所预测的分支对应的分支预测数据存储在压缩BTB 312中。可以通过以下方式来压缩另外的其他属性:将两个属性字段组合到具有与这两个不同属性的值的特定组合对应的值的共享属性字段。
所述类型字段存储分支的类型。所述类型字段的一些示例包括所述分支是无条件转移、条件转移、间接调用、调用、返回或间接转移的指示。
所述偏移字段指示高速缓存行中的发现分支指令的位置。所述目标字段指示分支指令的所预测的目标地址。如上文所述,所述目标字段可以比目标的完整地址短,因为分支通常具有附近目标。事实上,压缩BTB 312中的所有条目都存储此类缩短的目标。如果条目需要不是短的目标字段(即,是“大目标”),则所述条目存储为未压缩BTB 310中的大目标BTB条目406。
双分支BTB条目404包括两个分支的数据。应注意,在相同高速缓存行中发现这两个分支,因为双分支BTB条目404仅存在一个标签。另外,以未压缩方式存储双分支BTB条目404中的数据。更具体地,显式地存储每个属性的数据,所述类型字段是未压缩,并且不压缩将被压缩在压缩BTB 312中的其他数据。双分支BTB条目404还包括用于两个存储的分支目标中的每一者的一个类型字段和一个偏移字段。
因此,包括将从压缩BTB 312中的条目省略的位,以未压缩形式存储将被压缩的值,并且将共享字段分成单独字段。在压缩BTB312中可以是压缩或共享的类型字段在双分支BTB条目404中是未压缩。
大目标BTB条目406存储单分支目标的标签、属性、类型字段和单个大目标字段,它们全部都是未压缩形式。大目标BTB条目406与双分支BTB条目404类似,除了大目标BTB条目406包括仅一个分支的数据并且目标值较大并包括比双分支BTB条目404中的目标字段更多的位。
现在描述一些示例属性压缩。应注意,除了“属性”字段之外,这些压缩中的一些还可以涉及“类型”字段。可以被压缩的属性的一个示例是高速缓存行中最后字段(“LIC字段”)。这个字段指示特定条目是否存储作为特定高速缓存行中的最后分支的分支的数据。这个字段的目的是允许分支预测单元206在获得特定BTB条目之后知道在下一循环上是否继续针对分支来扫描特定高速缓存行,或者在下一循环上是否行进到下一高速缓存行,因为该特定高速缓存行中再没有分支。
在常见情况下,LIC字段的值指示特定分支是高速缓存行中的最后分支,因为特定高速缓存行中具有大量分支的情况不常见。因此,压缩BTB中的条目被假定为是高速缓存行中的最后分支指令的这种常见情况。如果BTB条目不包括高速缓存行中最后分支,则BTB条目必须存储为未压缩BTB 310中的未压缩BTB条目。然而,如果条目包括作为高速缓存行中最后分支的分支,并且所述条目否则可以存储在压缩BTB 312中,则针对压缩BTB 312创建这样的条目,并且不包括LIC字段的值。压缩BTB 312中的所有条目都被假定为含有高速缓存行中最后分支。(应注意,术语“高速缓存行中最后”是指高速缓存行中的最后所预测的分支)。
另一示例压缩技术是压缩有效字段并且使用类型字段中的具体值来指示无效条目。指示分支的类型的类型字段可以具有多个值中的一个。某些分支类型被视作稀有。在压缩BTB 312中,代替指示稀有类型中的一种,具有稀有类型中的一种的值的类型字段反而指示条目无效。具有稀有类型的分支无法存储在压缩BTB 312中并且反而必须存储在未压缩BTB 310中。
因此在压缩BTB条目中必须完全省略有效字段。更具体地,在未压缩BTB条目中,有效字段可以指示是否只有一组所预测的分支数据有效、是否两组都有效、所述条目是否用于大目标分支,或者整个条目是否无效。由于压缩BTB条目无法存储两个分支的数据并且无法存储大目标分支的数据,因此对这些条目类型的“有效字段”编码是不必要的。需要对压缩BTB条目进行的唯一区别是有效和无效。如上文所述,无效条目由具体类型字段编码指示。因此,不指示无效字段的任何类型字段编码都指示条目有效。出于这个原因,压缩BTB条目不需要单独的有效字段。应注意,有效字段编码是上文论述的共享字段压缩的示例,类型字段和有效字段被压缩成单个共享类型/有效字段。
可以被压缩的字段的另一示例是线程之间共享字段。在未压缩BTB 310中,线程之间共享字段用来指示特定条目在指令执行流水线200中执行的两个线程之间共享。在执行期间,执行流水线200可以处理来自不同线程的指令并且保持跟踪指令(包括分支)属于哪些线程。在共享执行模式下,两个线程同时执行并且运行相同的指令集。在分支预测单元206中,在共享执行模式下运行的两个线程共享BTB条目,使得不针对所述两个线程复制条目。由于共享执行不常见,因此线程之间共享字段可以压缩在压缩BTB 312中。因此,不针对压缩BTB 312中的条目存储共享值。相反,压缩BTB 312中的所有条目都被假定为独享。共享分支的条目存储在未压缩BTB 310。
上述压缩仅仅是示例。本文中描述的技术的不同实现方式可以压缩其他属性和/或采用不同方式压缩上述属性。
为了将数据写到压缩BTB 312,分支预测单元206中包括压缩或移除属性位的逻辑。类似地,为了从压缩BTB 312读取数据,分支预测单元206中包括恢复或解压缩属性位的逻辑。
尽管标签被描述为高速缓存行地址,但这仅仅是标签的格式的一个示例。所述标签可以只包括高速缓存行地址的一部分,或者可以是与数据被存储在BTB中的所预测的分支的高速缓存行地址相关或无关的某一其他值。
图5是根据示例的用于使用压缩和未压缩分支目标缓冲器来获得分支目标预测数据的方法500的流程图。尽管相对于图1至图4所示并关于其描述的系统进行了描述,但应理解,被配置成以任何技术上可行的顺序执行所述方法的任何系统都落在本公开的范围内。
如图所示,方法500在步骤502处开始,其中预测器306识别查找的下一地址。这个下一地址包括为了分支预测而要检查的下一高速缓存行的高速缓存行地址。预测器306基于先前分支预测操作来识别这个高速缓存行地址。例如,如果预测器306先前预测已经采用分支并且获得该分支的所预测的目标地址,则预测器306提供与分支目标的高速缓存行对应的高速缓存行。如果预测器306先前预测不采用分支,则预测器306提供为了预测而检查的下一顺序高速缓存行的地址。如果由于压缩BTB 312和未压缩BTB 310中的单个高速缓存行存在多个命中,为了预测仍在检查当前高速缓存行,则预测器306提供当前高速缓存行的地址。
在步骤504处,未压缩BTB 310和压缩BTB 312从预测器306接收高速缓存行地址。高速缓存行地址充当用于查找压缩BTB 312和未压缩BTB 310中的条目的标签。在步骤506处,未压缩BTB 310和压缩BTB 312识别与所述标签匹配的条目,并且将所述条目提供到预测器306以进行进一步处理。如上文所述,未压缩BTB 310和压缩BTB 312对应于由未压缩BTB 310和压缩BTB 312共同组成的n通路相关联高速缓存的不同通路。因此,可以在相同循环中并行地将所述标签提供到未压缩BTB 310和压缩BTB 312两者。如果没有出现命中,则未压缩BTB 310和压缩BTB 312都不指示被查找的高速缓存行的预测匹配。如果压缩BTB312或未压缩BTB 310中出现单个命中,则出现命中的BTB将所预测的分支数据提供到预测器306以用于预测。如果出现多个命中,则压缩BTB 312或未压缩BTB 310将来自单个条目的数据提供到预测器306以用于预测。如下文关于步骤508所述,在这种情形下,压缩BTB 312和未压缩BTB 310在下一循环中利用相同高速缓存行地址执行另一查找,因为该高速缓存行的分支预测数据仍存在。在一个示例中,压缩BTB 312和未压缩BTB310选择与预测数据尚未提供到预测器306的当前高速缓存行中的“最早”(即,最低PC)条目对应的条目。
在步骤508处,压缩BTB 312和未压缩BTB 310确定是否存在与相同高速缓存行地址对应的额外条目。如果存在额外的此类条目,则方法500返回到步骤504,其中再次提供相同标签以针对相同高速缓存行地址来查找额外的条目。如果不存在此类额外的条目,则方法500返回到步骤502,其中预测器306获得另一高速缓存行地址以用于预测。
将高速缓存行地址作为标签查找提供到BTB仅仅是示例,并且可以使用其他标签类型。例如,所述标签可以替代地只包括高速缓存行地址的一部分、从高速缓存行地址或其部分中导出的某一值,或者可以是与数据存储在BTB中的所预测的分支的高速缓存行地址相关或无关的某一其他值。
图6是根据示例的用于更新未压缩BTB 310和压缩BTB 312的方法600的流程图。尽管相对于图1至图4中所示并描述的系统进行了描述,但应理解,被配置成以任何技术上可行的顺序执行所述方法的任何系统都落在本公开的范围内。
如图所示,方法600在步骤602处开始,其中分支预测单元206确定执行对未压缩BTB 310压缩、压缩BTB 312或这两者的更改。分支预测单元206在检测到已经发生分支误预测后作出这样的确定。分支误预测可以是不正确的方向(例如,不准确地预测采用/不采用决策)、不正确的目标(存储在BTB中的目标地址是错误的)、所预测的分支的不正确类型(所预测的分支类型是错误的),或者不是分支(被预测为分支的指令结果反而不是分支)。指令执行流水线200通过执行分支指令并且将所执行的分支指令的结果与先前发生的分支预测进行比较来检测分支误预测。预测与执行之间的差异意味着已经出现分支误预测。指令执行流水线200将关于误预测的信息提供到分支预测单元206以校正它的内部状态,以便将来分支预测的准确性更好。
在步骤604处,响应于接收到压缩BTB 312、未压缩BTB 310或这两者将被更改的指示,分支预测单元206识别将被更改的一个或多个条目。更改可以包括删除特定分支指令的数据、更改分支指令的数据,或者添加分支指令的数据。另外,分支预测单元206基于高速缓存行地址、基于同一高速缓存行是否已存在其他分支预测数据并且基于分支预测数据是否可以被压缩来识别压缩BTB 312或未压缩BTB 310中的条目。对于删除和更改,分支预测单元206识别具有与讨论中的分支的高速缓存行地址和讨论中的分支的高速缓存行内的偏移匹配的标签的条目。
对于删除分支数据,分支预测单元206基于分支指令的地址而将先前存在的BTB条目识别为将被无效或更改的条目。
对于更改分支数据,分支预测单元206基于分支指令的地址来识别先前存在的条目,并且还可以识别其他条目,具体取决于所更改的条目由于诸如导致条目不再可压缩的更改等原因或由于其他原因而是否必须在压缩BTB 312与未压缩BTB 310之间移动。
在步骤606处,分支预测单元206更改一个或多个所识别的条目,以适应所需要的更改。如果更改需要从压缩BTB 312或未压缩BTB310删除分支的数据,则分支预测单元206删除整个BTB条目。
如果更改需要改变存储在特定条目内的特定分支的数据,则分支预测单元206确定所改变的条目由于所改变的条目是否可以被压缩的变化而是否应从压缩BTB 312移动到未压缩BTB 310。例如,如果被压缩的条目在更改后无法再压缩,则分支预测单元206将所述条目从压缩BTB 312移动到未压缩BTB 310。如果没有做出此类变化,则分支预测单元206简单地按所规定的那样改变条目中的数据。如果做出此类变化,则分支预测单元206移动对应数据,从而使原始条目无效并且在目的地处写入新条目。
如果更改需要添加先前未存储在压缩BTB 312或未压缩BTB310中的分支的数据,则分支预测单元206确定所述分支的所述数据是否可以与另一分支的数据一起存储在双分支BTB条目404中。如果待添加的分支的数据可以与另一分支的数据一起存储,并且所述另一分支存储在压缩BTB 312中,则分支预测单元206使所述另一分支的单分支BTB条目402无效并且创建用于存储两个分支的数据的新双分支BTB条目404。如果分支共享高速缓存行地址并且任一分支都不需要大目标BTB条目406,则两个分支的数据可以存储在一起。
如果待添加的分支的数据无法与另一分支的数据一起数据但可以压缩,则分支预测单元206在压缩BTB 312中创建新单分支BTB条目402并且将新分支的数据存储在该条目中。如果待添加的分支的数据无法与另一分支的数据一起数据并且无法压缩,则分支预测单元206在未压缩BTB 310中创建新条目并且将新分支的数据存储在该新条目中。如果数据的属性匹配如上文关于图3和图4所述的分支的“常见情况”并且如果数据不需要大目标BTB条目406,则数据可以被压缩。
本文中描述的技术改进了计算机处理器中的分支预测操作。更具体地,通过提供可以并行地搜索的压缩和未压缩BTB,可以获得每循环多达两个分支的预测数据而不大量浪费与未使用的分支数据空间相关联的空间。
应理解,基于本文中的公开,很多变化是可能的。尽管上文在特定组合中描述了特征和元件,但每个特征或元件可以在没有其他特征和元件的情况下单独使用或者在有或没有其他特征和元件的各种组合中使用。
所提供的方法可以在通用计算机、处理器或处理器核心中实施。合适的处理器包括,例如,通用处理器、专用处理器、传统处理器、数字信号处理器(DSP)、多个微处理器、与DSP核心相关联的一个或多个微处理器、控制器、微控制器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)电路、任何其他类型的集成电路(IC)和/或状态机。此类处理器可以通过使用处理硬件描述语言(HDL)指令和包括网表的其他中间数据的结果来配置制造过程进行制造(此类指令能够存储在计算机可读介质上)。这样处理的结果可以是掩模件,所述掩模件随后在半导体制造过程中用来制造实现实施例的各方面的处理器。
本文中提供的方法或流程可以在合并在非暂时性计算机可读存储介质中的计算机程序、软件或固件中实施,以便由通用计算机或处理器执行。非暂时性计算机可读存储介质的示例包括只读存储器(ROM)、随机存取存储器(RAM)、寄存器、高速缓冲存储器、半导体存储器装置、诸如内部硬盘和可移除磁盘的磁介质、磁光介质以及诸如CD-ROM光盘和数字通用盘(DVD)的光学介质。
***
Claims (20)
1.一种用于操纵分支目标缓冲器数据的方法,所述方法包括:
向压缩分支目标缓冲器和未压缩分支目标缓冲器提供查找标签,其中所述未压缩分支目标缓冲器被配置成存储包括一个以上分支的数据的条目,并且其中所述压缩分支目标缓冲器被配置成存储各自包括仅单个分支的数据的条目;
基于所述查找标签从所述压缩分支目标缓冲器和所述未压缩分支目标缓冲器中的一者或两者中识别分支目标缓冲器条目;以及
将与所述分支目标缓冲器条目对应的数据输出到分支预测逻辑以用于预测分支。
2.如权利要求1所述的方法,其中:
所述查找标签包括与被检查用于分支预测的高速缓存行的高速缓存行地址相关的值;并且
所述未压缩分支目标缓冲器被配置成存储共享相同高速缓存行地址的分支的条目。
3.如权利要求1所述的方法,其中:
所述压缩分支目标缓冲器被配置成存储一个或多个属性被压缩的条目;并且
所述未压缩分支目标缓冲器被配置成存储属性未被压缩的条目。
4.如权利要求1所述的方法,其中:
所述未压缩分支目标缓冲器的条目包括第一属性字段的第一属性值;并且
所述压缩分支目标缓冲器的条目不包括所述第一属性字段的属性值,
其中所述压缩分支目标缓冲器的所有条目具有所述第一属性字段的相同值。
5.如权利要求1所述的方法,其中:
所述未压缩分支目标缓冲器的条目的第一属性字段包括高速缓存行中最后字段,所述高速缓存行中最后字段指示条目是否包括作为高速缓存行中的最后预测分支的分支的数据;并且
所述压缩分支目标缓冲器的所述条目全部被配置成存储作为高速缓存行中的最后预测分支的分支的数据但不包括所述高速缓存行中最后字段。
6.如权利要求1所述的方法,其中识别所述分支目标缓冲器条目包括:
检测所述压缩分支目标缓冲器或所述未压缩分支目标缓冲器中的一个以上分支目标缓冲器条目与所述查找标签共享标签,并且
所述方法还包括选择所述一个以上分支目标缓冲器条目中的一者以用于输出。
7.如权利要求6所述的方法,其还包括:
在选择一个或多个分支目标缓冲器条目中的所述一者的第一循环之后的处理循环上,选择所述一个以上分支目标缓冲器条目中的第二分支目标缓冲器条目以用于输出。
8.一种分支预测单元,其包括:
压缩分支目标缓冲器,其被配置成存储各自包括仅单个分支的数据的条目;以及
未压缩分支目标缓冲器,其被配置成存储包括一个以上分支的数据的条目,
其中所述压缩分支目标缓冲器和所述未压缩分支目标缓冲器两者被配置成:
基于提供的查找标签来识别一个或多个分支目标缓冲器条目,以及
将与识别的一个或多个分支目标缓冲器条目对应的数据输出到预测逻辑以用于预测分支。
9.如权利要求8所述的分支预测单元,其中:
所述查找标签包括与被检查用于分支预测的高速缓存行的高速缓存行地址相关的值;并且
所述未压缩分支目标缓冲器被配置成存储共享相同高速缓存行地址的分支的条目。
10.如权利要求8所述的分支预测单元,其中:
所述压缩分支目标缓冲器被配置成存储一个或多个属性被压缩的条目;并且
所述未压缩分支目标缓冲器被配置成存储属性未被压缩的条目。
11.如权利要求8所述的分支预测单元,其中:
所述未压缩分支目标缓冲器的条目包括第一属性字段的第一属性值;并且
所述压缩分支目标缓冲器的条目不包括所述第一属性字段的属性值,
其中所述压缩分支目标缓冲器的所有条目具有所述第一属性字段的相同值。
12.如权利要求8所述的分支预测单元,其中:
所述未压缩分支目标缓冲器的条目的第一属性字段包括高速缓存行中最后字段,所述高速缓存行中最后字段指示条目是否包括作为高速缓存行中的最后预测分支的分支的数据;并且
所述压缩分支目标缓冲器的所述条目全部被配置成存储作为高速缓存行中的最后预测分支的分支的数据但不包括所述高速缓存行中最后字段。
13.如权利要求8所述的分支预测单元,其中:
所述压缩分支目标缓冲器和所述未压缩分支目标缓冲器被配置成通过检测所述压缩分支目标缓冲器或所述未压缩分支目标缓冲器中的一个以上分支目标缓冲器条目与所述查找标签共享标签来识别一个或多个分支目标缓冲器条目;并且
所述压缩分支目标缓冲器和所述未压缩分支目标缓冲器被配置成选择所述一个以上分支目标缓冲器条目中的一者以用于输出。
14.如权利要求13所述的分支预测单元,其中所述压缩分支目标缓冲器和所述未压缩分支目标缓冲器进一步被配置成:
在选择所述一个或多个分支目标缓冲器条目中的所述一者的第一循环之后的处理循环上,选择所述一个以上分支目标缓冲器条目中的第二分支目标缓冲器条目以用于输出。
15.一种处理器,其包括:
分支预测单元,其被配置成输出分支预测结果;
指令提取单元,其被配置成基于所述分支预测结果来输出用于执行的指令;以及
指令执行流水线,其被配置成执行从所述指令提取单元输出的所述指令,
其中所述分支预测单元包括:
压缩分支目标缓冲器,其被配置成存储各自包括仅单个分支的数据的条目;以及
未压缩分支目标缓冲器,其被配置成存储包括一个以上分支的数据的条目,
其中所述压缩分支目标缓冲器和所述未压缩分支目标缓冲器两者被配置成:
基于提供的查找标签来识别一个或多个分支目标缓冲器条目,以及
将与识别的一个或多个分支目标缓冲器条目对应的数据输出到预测逻辑以用于预测分支。
16.如权利要求15所述的处理器,其中:
所述查找标签包括与被检查用于分支预测的高速缓存行的高速缓存行地址相关的值;并且
所述未压缩分支目标缓冲器被配置成存储共享相同高速缓存行地址的分支的条目。
17.如权利要求15所述的处理器,其中:
所述压缩分支目标缓冲器被配置成存储一个或多个属性被压缩的条目;并且
所述未压缩分支目标缓冲器被配置成存储属性未被压缩的条目。
18.如权利要求15所述的处理器,其中:
所述未压缩分支目标缓冲器的条目包括第一属性字段的第一属性值;并且
所述压缩分支目标缓冲器的条目不包括所述第一属性字段的属性值,
其中所述压缩分支目标缓冲器的所有条目具有所述第一属性字段的相同值。
19.如权利要求15所述的处理器,其中:
所述未压缩分支目标缓冲器的条目的第一属性字段包括高速缓存行中最后字段,所述高速缓存行中最后字段指示条目是否包括作为高速缓存行中的最后预测分支的分支的数据;并且
所述压缩分支目标缓冲器的所述条目全部被配置成存储作为高速缓存行中的最后预测分支的分支的数据但不包括所述高速缓存行中最后字段。
20.如权利要求15所述的处理器,其中:
所述压缩分支目标缓冲器和所述未压缩分支目标缓冲器被配置成通过检测所述压缩分支目标缓冲器或所述未压缩分支目标缓冲器中的一个以上分支目标缓冲器条目与所述查找标签共享标签来识别一个或多个分支目标缓冲器条目;并且
所述压缩分支目标缓冲器和所述未压缩分支目标缓冲器被配置成选择所述一个以上分支目标缓冲器条目中的一者以用于输出。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/252,164 | 2016-08-30 | ||
US15/252,164 US10592248B2 (en) | 2016-08-30 | 2016-08-30 | Branch target buffer compression |
PCT/US2016/051527 WO2018044333A1 (en) | 2016-08-30 | 2016-09-13 | Branch target buffer compression |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109643237A CN109643237A (zh) | 2019-04-16 |
CN109643237B true CN109643237B (zh) | 2023-11-03 |
Family
ID=61242686
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680088628.9A Active CN109643237B (zh) | 2016-08-30 | 2016-09-13 | 分支目标缓冲器压缩 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10592248B2 (zh) |
EP (1) | EP3507688B1 (zh) |
JP (1) | JP6796717B2 (zh) |
KR (1) | KR20190039290A (zh) |
CN (1) | CN109643237B (zh) |
WO (1) | WO2018044333A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7010683B2 (ja) * | 2017-12-08 | 2022-01-26 | キオクシア株式会社 | データ処理装置、メモリシステム及びデータ処理方法 |
US10732979B2 (en) * | 2018-06-18 | 2020-08-04 | Advanced Micro Devices, Inc. | Selectively performing ahead branch prediction based on types of branch instructions |
US11238155B2 (en) * | 2018-06-28 | 2022-02-01 | Intel Corporation | Microarchitectural mechanisms for the prevention of side-channel attacks |
US10713054B2 (en) * | 2018-07-09 | 2020-07-14 | Advanced Micro Devices, Inc. | Multiple-table branch target buffer |
WO2021108007A1 (en) * | 2020-05-30 | 2021-06-03 | Futurewei Technologies, Inc. | Apparatus and method for dual branch prediction |
US20220197662A1 (en) * | 2020-12-22 | 2022-06-23 | Niranjan Kumar Soundararajan | Accessing A Branch Target Buffer Based On Branch Instruction Information |
US11915002B2 (en) * | 2022-06-24 | 2024-02-27 | Microsoft Technology Licensing, Llc | Providing extended branch target buffer (BTB) entries for storing trunk branch metadata and leaf branch metadata |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5805878A (en) * | 1997-01-31 | 1998-09-08 | Intel Corporation | Method and apparatus for generating branch predictions for multiple branch instructions indexed by a single instruction pointer |
CN101187863A (zh) * | 2006-11-17 | 2008-05-28 | 国际商业机器公司 | 数据处理系统、处理器和进行数据处理的方法 |
CN105867880A (zh) * | 2016-04-01 | 2016-08-17 | 中国科学院计算技术研究所 | 一种面向间接跳转分支预测的分支目标缓冲器及设计方法 |
Family Cites Families (18)
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 |
US5794028A (en) * | 1996-10-17 | 1998-08-11 | Advanced Micro Devices, Inc. | Shared branch prediction structure |
JPH10133874A (ja) | 1996-11-01 | 1998-05-22 | Mitsubishi Electric Corp | スーパスカラプロセッサ用分岐予測機構 |
US6427192B1 (en) | 1998-09-21 | 2002-07-30 | Advanced Micro Devices, Inc. | Method and apparatus for caching victimized branch predictions |
US20020194462A1 (en) * | 2001-05-04 | 2002-12-19 | Ip First Llc | Apparatus and method for selecting one of multiple target addresses stored in a speculative branch target address cache per instruction cache line |
US7234045B2 (en) * | 2001-07-03 | 2007-06-19 | Ip-First, Llc | Apparatus and method for handling BTAC branches that wrap across instruction cache lines |
US7203824B2 (en) * | 2001-07-03 | 2007-04-10 | Ip-First, Llc | Apparatus and method for handling BTAC branches that wrap across instruction cache lines |
US7152154B2 (en) * | 2003-01-16 | 2006-12-19 | Ip-First, Llc. | Apparatus and method for invalidation of redundant branch target address cache entries |
US7124287B2 (en) * | 2003-05-12 | 2006-10-17 | International Business Machines Corporation | Dynamically adaptive associativity of a branch target buffer (BTB) |
US7752426B2 (en) * | 2004-08-30 | 2010-07-06 | Texas Instruments Incorporated | Processes, circuits, devices, and systems for branch prediction and other processor improvements |
US20060218385A1 (en) * | 2005-03-23 | 2006-09-28 | Smith Rodney W | Branch target address cache storing two or more branch target addresses per index |
JP5145809B2 (ja) * | 2007-07-31 | 2013-02-20 | 日本電気株式会社 | 分岐予測装置、ハイブリッド分岐予測装置、プロセッサ、分岐予測方法、及び分岐予測制御プログラム |
US7873819B2 (en) * | 2008-01-03 | 2011-01-18 | Freescale Semiconductor, Inc. | Branch target buffer addressing in a data processor |
US8458447B2 (en) * | 2011-06-17 | 2013-06-04 | Freescale Semiconductor, Inc. | Branch target buffer addressing in a data processor |
JP2013214832A (ja) * | 2012-03-30 | 2013-10-17 | Fujitsu Ltd | 圧縮及び伸長システム、圧縮装置、伸長装置、圧縮及び伸長方法、圧縮プログラム及び伸長プログラム |
US9235419B2 (en) | 2012-06-11 | 2016-01-12 | International Business Machines Corporation | Branch target buffer preload table |
US9372696B2 (en) * | 2013-10-18 | 2016-06-21 | Via Technologies, Inc. | Microprocessor with compressed and uncompressed microcode memories |
US9996358B2 (en) * | 2015-09-30 | 2018-06-12 | Ecole Polytechnique Federale De Lausanne | Unified prefetching into instruction cache and branch target buffer |
-
2016
- 2016-08-30 US US15/252,164 patent/US10592248B2/en active Active
- 2016-09-13 KR KR1020197007765A patent/KR20190039290A/ko not_active Application Discontinuation
- 2016-09-13 EP EP16915404.4A patent/EP3507688B1/en active Active
- 2016-09-13 CN CN201680088628.9A patent/CN109643237B/zh active Active
- 2016-09-13 JP JP2019532918A patent/JP6796717B2/ja active Active
- 2016-09-13 WO PCT/US2016/051527 patent/WO2018044333A1/en unknown
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5805878A (en) * | 1997-01-31 | 1998-09-08 | Intel Corporation | Method and apparatus for generating branch predictions for multiple branch instructions indexed by a single instruction pointer |
CN101187863A (zh) * | 2006-11-17 | 2008-05-28 | 国际商业机器公司 | 数据处理系统、处理器和进行数据处理的方法 |
CN105867880A (zh) * | 2016-04-01 | 2016-08-17 | 中国科学院计算技术研究所 | 一种面向间接跳转分支预测的分支目标缓冲器及设计方法 |
Also Published As
Publication number | Publication date |
---|---|
EP3507688A4 (en) | 2020-04-22 |
JP2019526873A (ja) | 2019-09-19 |
US20180060073A1 (en) | 2018-03-01 |
JP6796717B2 (ja) | 2020-12-09 |
US10592248B2 (en) | 2020-03-17 |
WO2018044333A1 (en) | 2018-03-08 |
EP3507688A1 (en) | 2019-07-10 |
EP3507688B1 (en) | 2021-07-14 |
KR20190039290A (ko) | 2019-04-10 |
CN109643237A (zh) | 2019-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109643237B (zh) | 分支目标缓冲器压缩 | |
US10255074B2 (en) | Selective flushing of instructions in an instruction pipeline in a processor back to an execution-resolved target address, in response to a precise interrupt | |
US7478228B2 (en) | Apparatus for generating return address predictions for implicit and explicit subroutine calls | |
KR20190049743A (ko) | 메모리 위반 예측 | |
US9201654B2 (en) | Processor and data processing method incorporating an instruction pipeline with conditional branch direction prediction for fast access to branch target instructions | |
CN106681695B (zh) | 提前取出分支目标缓冲器 | |
US11579884B2 (en) | Instruction address translation and caching for primary and alternate branch prediction paths | |
GB2577051A (en) | Branch prediction circuitry | |
US20140250289A1 (en) | Branch Target Buffer With Efficient Return Prediction Capability | |
US10747540B2 (en) | Hybrid lookahead branch target cache | |
US11442727B2 (en) | Controlling prediction functional blocks used by a branch predictor in a processor | |
US10896044B2 (en) | Low latency synchronization for operation cache and instruction cache fetching and decoding instructions | |
US11526359B2 (en) | Caching override indicators for statistically biased branches to selectively override a global branch predictor | |
US11782897B2 (en) | System and method for multiplexer tree indexing | |
US11875155B2 (en) | Processing device with a microbranch target buffer for branch prediction using loop iteration count | |
US20220113976A1 (en) | Restoring speculative history used for making speculative predictions for instructions processed in a processor employing control independence techniques | |
US20230195468A1 (en) | Predicting upcoming control flow | |
US11620224B2 (en) | Instruction cache prefetch throttle | |
US11687342B2 (en) | Way predictor and enable logic for instruction tightly-coupled memory and instruction cache | |
US20190294443A1 (en) | Providing early pipeline optimization of conditional instructions in processor-based systems |
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 |