CN115993992A - 提前取出分支目标缓冲器 - Google Patents

提前取出分支目标缓冲器 Download PDF

Info

Publication number
CN115993992A
CN115993992A CN202310137671.1A CN202310137671A CN115993992A CN 115993992 A CN115993992 A CN 115993992A CN 202310137671 A CN202310137671 A CN 202310137671A CN 115993992 A CN115993992 A CN 115993992A
Authority
CN
China
Prior art keywords
fetch
branch
branch instruction
instruction
entry
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.)
Pending
Application number
CN202310137671.1A
Other languages
English (en)
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.)
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 CN115993992A publication Critical patent/CN115993992A/zh
Pending legal-status Critical Current

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, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Abstract

本发明公开了一种提前取出分支目标缓冲器。提前取出分支目标缓冲器由分支预测器使用以基于用于前一取出束、即在包括分支指令的取出束之前取出的取出束的取出指针来确定分支指令的目标地址。在提前取出分支目标缓冲器中的条目相应于一个分支指令,并包括识别那个分支指令的目标地址的数据部分。在各种例子中,条目还包括存储识别取出指针的数据的标签部分,该条目由该取出指针编索引。通过将使用所接收的取出指针生成的索引与标签部分匹配来识别匹配条目并接着从匹配条目的数据部分确定用于分支指令的目的地址来执行分支预测。

Description

提前取出分支目标缓冲器
本申请是申请日为2016年11月07日,申请号为201610977366.3,发明名称为“提前取出分支目标缓冲器”的申请的分案申请。
技术领域
本申请总体上涉及提前取出分支目标缓冲器。
背景技术
分支目标缓冲器(BTB)是与处理器中的管线相关联并存储关于计算机程序的以前执行的分支指令的信息的存储元件。分支预测器使用存储在BTB中的数据来预测在已知引起可能的流变化的指令(诸如分支指令)的情况下程序流将采用的方向。BTB因此使用关于在过去的程序流的信息来预测当前程序流。分支预测是有用的,因为它在预测的结果是已知的之前使指令能够由处理器推测地执行。
下面所述的实施方式仅作为例子被提供且不是解决已知分支预测器和BTB的任何或所有缺点的实现的限制。
发明内容
这个概述被提供来以简化的形式介绍一系列概念,其在下面在详细描述中被进一步描述。这个概述并不打算识别所要求保护的主题的关键特征或必要特征,也不打算被用作帮助确定所要求保护的主题的范围。
提前取出分支目标缓冲器由分支预测器使用以基于用于前一取出束(即,在包括分支指令的取出束之前取出的取出束)的取出指针来确定用于分支指令的目标地址。在提前取出分支目标缓冲器中的条目相应于一个分支指令,并包括识别那个分支指令的目标地址的数据部分。在各种例子中,条目还包括存储识别取出指针的数据的标签部分,该条目由该取出指针编索引。通过将使用所接收的取出指针生成的索引与标签部分匹配以识别匹配条目并接着从匹配条目的数据部分确定用于分支指令的目的地址来执行分支预测。
第一方面提供分支预测器,其包括:提前取出分支目标缓冲器,其包括使用取出指针编索引的多个数据条目,每个条目相应于分支指令并包括被布置成存储识别条目所相应于的分支指令的目标地址的数据的数据部分,其中条目由取出束的取出指针编索引,该取出束在包括条目所相应于的分支指令的取出束之前被取出;输入端,其被配置成接收来自处理器中的取出级的取出指针;分支预测逻辑,其被配置成使用提前取出分支目标缓冲器和所接收的取出指针来确定用于分支指令的目标地址;以及输出端,其被配置成向取出级提供用于分支指令的目标地址,其中分支指令是在由所接收的取出指针识别的取出束之后取出的取出束的部分。
第二方面提供在硬件逻辑中实现的分支预测的方法,该方法包括:在分支预测器的输入端处接收来自处理器中的取出级的取出指针;使用提前取出分支目标缓冲器和所接收的取出指针来确定用于分支指令的目标地址,提前取出分支目标缓冲器包括使用取出指针来编索引的多个数据条目,每个条目相应于分支指令并包括布置成存储识别分支指令的目标地址的数据的数据部分,其中条目由取出束的取出指针编索引,该取出束在包括条目所相应于的分支指令的取出束之前被取出;以及经由分支预测器的输出端向取出级输出用于分支指令的目标地址,其中分支指令是在由所接收的取出指针识别的取出束之后取出的取出束的部分。
第三部分提供非临时计算机可读存储介质,其具有存储在其上的计算机可读指令,所述指令当在用于生成集成电路的表现形式的计算机系统处被执行时使计算机系统生成集成电路的表现形式,该集成电路包括分支预测器,分支预测器包括:提前取出分支目标缓冲器,其包括使用取出指针编索引的多个数据条目,每个条目相应于分支指令并包括布置成存储识别条目所相应于的分支指令的目标地址的数据的数据部分,其中条目由取出束的取出指针编索引,该取出束在包括条目所相应于的分支指令的取出束之前被取出;输入端,其被配置成接收来自处理器中的取出级的取出指针;分支预测逻辑,其被配置成使用提前取出分支目标缓冲器和所接收的取出指针来确定用于分支指令的目标地址;以及输出端,其被配置成向取出级提供用于分支指令的目标地址,其中分支指令是在由所接收的取出指针识别的取出束之后取出的取出束的部分。
优选特征可在适当时被组合,如对技术人员明显的,并可与本发明的任何方面组合。
附图说明
本发明的实施方式将参考下面的附图通过示例的方式来描述,其中:
图1A-1C示出说明提前取出分支目标缓冲器的操作的示意图;
图2示出包括提前取出分支目标缓冲器的示例处理器的示意图;
图3是示例提前取出分支目标缓冲器的示意图;
图4是更详细示出图2的分支预测器的示意图;
图5是预测分支指令的目标地址的示例方法的流程图;以及
图6是更新提前取出分支目标缓冲器的示例方法的流程图。
共同的参考数字在全部附图中用于指示类似的特征。
具体实施方式
下面仅作为例子描述本发明的实施方式。这些例子代表申请人当前已知的实施本发明的最佳方式,但是它们不是这可被实现的唯一方式。该描述阐述了例子的功能和用于构造并操作例子的步骤的顺序。然而,相同或等效的功能和顺序可由不同的例子实现。
指令以可包括一个或多个指令(例如,取决于被支持的每循环取指令的数量)的被称为“取出束”或“取出块”的束的形式由处理器取出。在示例实现中,取出束可包括多达4个指令。
分支预测器使用索引来在存储对于分支指令的最近目标地址的分支目标缓冲器(BTB)中执行查找。在BTB中的索引和条目之间的匹配(这可被称为“命中”)的情况下,分支预测器使用在匹配条目中的数据来确定(例如,预测)对于分支指令的目标地址。在各种例子中,用于访问BTB的索引可以是用于包含分支指令的取出束的取出指针(其中取出指针是在取出束中的开始指令的地址)或它可从取出指针中生成。在开始指令是分支指令的情况下(例如,在分支指令是在取出束中的唯一指令或在取出束中的第一指令的情况下),用于访问BTB的索引可以是分支指令的地址,或它可使用分支指令的地址来生成。分支预测器(和因而的BTB)可用以生成命中的频率直接影响指令可被执行的速度,且所以性能可通过增加在BTB中的条目的数量来提高。增加BTB中的条目的数量一般暗示增加BTB的尺寸,这需要更多的存储器且可增加查找过程的时延(即,可能花费两个时钟周期来执行在BTB中的查找而不是仅仅一个周期)。如果未被寻址到,则时延可导致在指令取出管线中的暂停(也被称为“气泡”)。
BTB可在分支指令的每次执行之后被更新。例如,在分支指令被执行之后,执行管线可以给分支预测器提供跟随分支指令的指令的地址(其也可被称为程序计数器)。分支预测器可接着用所接收的地址代替在BTB中的预测目标值。可选地,BTB可包括用于每个分支指令的计数器(例如,2位计数器)并跟踪对于分支指令的误预测的数量。在这些情况下,预测目标地址可以只在两个连续误预测之后被更新。
在本文描述了提前取出分支目标缓冲器,其可用于补偿在BTB中执行查找时的任何时延且因此减少或消除由时延引起的暂停。在包括提前取出BTB的分支预测器中,不是使用用于包含分支指令的取出束的取出指针(其如上所述在一些情况下可以是分支指令本身的地址)来确定(例如,预测)对于那个特定的分支指令的目标地址(对于常规BTB,情况将是这样),而是使用对于前一取出束的取出指针来提前确定目标地址,且随后BTB被称为提前取出BTB。例如,第n-α个取出束的取出指针(或从第n-α个取出束的取出指针得到的信息)可用于预测对于在第n个取出束中的第一个采用的分支指令的目标地址。在各种例子中,α=1,且提前取出BTB作为一个提前取出BTB(1ABTB)来操作,且在这样的例子中,第n-1个取出束的取出指针用于预测对于在第n个取出束中的第一个采用的分支指令(其可以是唯一的分支指令)的目标地址,即目标地址在其中它照惯例被生成的取出束之前一个取出束被预测。
可参考图1A-1C来描述提前取出BTB的操作。图1A示出包括三个N指令取出束110、112和114的示例指令取出序列102。指令取出束110-114被标记为X、Y、Z,其中X、Y和Z是相应的N指令束块的取出指针(即,开始地址)。在这个例子中,在N指令取出束112(具有取出指针Y)中的指令YBR中的一个是具有Z的目标地址(即,取出束Z的取出指针)的分支指令。从X到Y的取出指针的转变可以是由于分支指令(例如,在具有取出指针X的N指令取出束110中的分支指令XBR,该分支指令具有Y的目标地址)或连续下降通过取出(例如,作为分支未被采用的结果)导致的。
为了预测用于指令YBR的分支目标地址,包括提前取出BTB(其在这个特定的例子中是1ABTB)的分支预测器不使用与取出指针Y有关的信息在提前取出BTB中执行查找,但反而已经通过使用与前一取出指针(例如,取出指针X)有关的信息在提前取出BTB中执行查找来预测目标地址。
假设预测充分提前于对指令YBR的目标地址的需要发生以适应在BTB访问中的任何时延,则作为在BTB中查找的结果不存在延迟,且在目标地址Z处的指令可被立即取出。
通过使用如在本文所述的提前取出BTB,代替常规BTB,BTB的尺寸(和因而在BTB中执行单独查找的时延)在各种例子中不被影响。根据提前取出BTB操作的分支指令的类型和/或在预测被做出之前取出束的数量(例如,α的值),给BTB编索引的方法可被修改和/或BTB的尺寸可被增加(例如,以提高对α的较大值和/或动态分支的预测的准确度)。
图1B和图1C示出可如何消除在取出管线中的由在BTB查找中的时延引起的暂停。在图1B中示出对于作为连续下降通过取出(其不需要BTB查找)的结果的取出序列102的指令取出管线104。然而,从块Y到块Z的转变需要BTB查找(即,以确定指令YBR的目标地址),且在这个例子中,在BTB中的查找花费两个时钟周期。这个时延造成BTB命中气泡116,其中管线暂停,这是因为,由于目标地址Z还不是已知的,因此不可能执行在该地址处的指令的取出。图1C的指令取出管线106示出使用1ABTB实现的改进。如上所述,使用前一取出束的取出指针来预测指令YBR的目标地址,且所以消除了在从块Z取出指令时的延迟。
图2示出示例处理器200的示意图,处理器200包括如上所述的提前取出分支目标缓冲器220,以及其中本文所述的方法可被实现。虽然图2示出按次序处理器,但方法也可在无序地处理指令的处理器中(即,在无序处理中)实现。在这个例子中,处理器200是单线程处理器,然而方法也可应用于多线程处理器。
处理器200包括取出级202、解码级204、执行级206和写入级208。处理器管线202-204-206-208可用于并行地执行几个指令,且操作由取出级202取出并按次序流经每个级(取出-解码-执行-写入)。在任何时间处,单独的独立操作可存在于管线的每个级202-208中。
取出级202被配置成按由程序计数器(PC)指示地从程序(以程序顺序)取出指令。如上所述,在包括一个或多个指令的取出束中取出指令。一旦指令被取出,它就被提供到被布置成解释指令的解码级204。特别是,每个指令可包括寄存器写入操作、一个或多个寄存器读出操作和/或算术或逻辑操作。寄存器写入操作写到目的地寄存器,且寄存器读出操作从源寄存器读出。
执行级206负责执行指令,并可包括被配置成执行特定类型的指令的多个功能单元(或执行管线)。例如,执行级206可包括负载存储单元、整数单元、浮点单元(FPU)、数字信号处理(DSP)/单指令多数据(SIMD)单元或乘积累加(MAC)单元中的一个或多个。写入级208将执行的结果写入到存储器。
处理器200还包括被配置成在已知引起可能的流变化的指令(诸如分支指令)的情况下预测程序流将采用的方向的分支预测器212。分支预测是有用的,这是由于它使指令能够在分支指令的结果是已知的之前由处理器200推测地执行。当分支预测器准确地预测程序流时,这提高了处理器200的性能。然而,如果分支预测器不正确地预测分支方向,则误预测出现,这在程序可继续之前需要被校正。为了校正误预测,推测性指令被放弃,且取出级202开始从正确的程序分支取出指令。
分支预测器212包括提前取出BTB 220和分支预测逻辑单元216,其包括被配置成在提前取出BTB 220中执行查找的硬件逻辑和还包括被配置成更新在提前取出BTB 220中的条目的硬件逻辑。下面参考图3-6更详细地描述分支预测逻辑单元216和提前取出BTB220的操作和结构。
将认识到,其它处理器可以不包括图2中所示的所有功能元件(即,图2中所示的功能元件中的一个或多个可被省略),且处理器可包括未在图2中示出的额外功能元件。
图3是示例提前取出BTB 220的示意图。提前取出BTB 220包括多个条目302(虽然图3只示出5个条目,但将认识到,提前取出BTB可包括更多的条目)。每个条目可包括标签部分304和数据部分306,但是在一些例子(例如,对于直接映射的BTB)中,可省略标签部分。在提前取出BTB中的每个条目相应于分支指令;然而,如上所述,使用取出指针(其可以或可以不是分支指令的地址)来给条目编索引。条目的标签部分304(在被提供时)包含识别取出指针并用于通过对照标签部分304匹配索引(其可以是取出指针或可使用取出指针来生成)来识别条目的信息。在各种例子中,标签部分304可包含索引(例如,使得匹配操作正寻找在索引和标签部分之间的确切匹配),且在其它例子中,标签部分304可以不包括索引,且所以匹配可以以不同地方式操作。对于多线程处理器,标签部分304也可识别线程(例如,通过标签部分,其为线程ID和取出指针的某个函数)。
条目的数据部分306包含识别在取出束中的分支指令的目标地址的信息,该分支指令在由在同一条目中的标签部分304识别的取出束中的指令之后被执行。在各种例子中,数据部分306可包含目标地址,且在其它例子中,它们可包含从其中可得到目标地址的信息。
存储在提前取出BTB中的数据基于以前执行的分支指令被生成并被存储,但用于预测当前/未来程序流。
如在图3中所示的,如果条目302的标签部分304识别出取出指针n-α,则同一条目302的数据部分306识别出在随后的取出束n中的分支指令的目标地址,其中α是正(和因而非零)整数。不同条目302的标签部分304识别不同的取出指针,且由数据部分306识别的目标地址可以是相同的或不同的(例如,两个或更多个分支指令可具有相同的目标地址)。
图4是更详细示出图2的分支预测器212的示意图。如图4所示,分支预测逻辑单元216包括索引生成器逻辑402、目标地址预测逻辑404和更新逻辑406。在分支预测器212内的这三个功能元件402-406在硬件逻辑中实现,且虽然它们单独地被示出和描述,但当在硬件中实现时,它们可以用任何方式组合。可参考图5描述分支预测器212及其组成部分的操作。
图5是预测分支指令的目标地址的示例方法的流程图。分支预测器212在输入端处从处理器200中的取出级202接收取出指针(块502)。分支预测器212和更具体地索引生成器硬件逻辑402使用取出指针来生成索引(块504)。在各种例子中且如上所述,索引可与取出指针相同,且在其它例子中,可使用特定分支指令的历史表来生成索引,其中历史表可以是采用/未采用的历史或全局历史寄存器。分支预测器212和更具体地目标地址预测逻辑404比较已被生成的索引(在块504中)与在提前取出BTB 220中的条目的标签部分(块506)。可对照所有条目(例如,对于完全关联BTB)或对照条目的真子集(例如,对于单向关联BTB)来执行比较。
如上所述,在一些例子中,可能没有在提前取出BTB 220中的条目中的标签部分,且在这样的例子中,所生成(在块504中)的且可与取出指针相同的索引可直接识别在提前取出BTB 220中的特定条目(即,对于直接映射的BTB),使得比较操作是不被需要的(即,块508被省略,且该方法继续进行到块510)。
如果识别出匹配(在块508中的“是”),则使用在匹配条目的数据部分中的信息(通过目标地址预测逻辑404)来确定目标地址(块510)。如上所述,这个目标地址不是在具有在块502中接收的取出指针的取出束(其可被称为取出束n-α)中的指令的目标地址,但反而是在随后的取出束(其可被称为取出束n)中的分支指令的目标地址,且这个目标地址经由输出端被提供到取出级202(块512)。取出级202在它取出它所相关的分支指令(即,在取出束n中的第一个采用的分支指令)之后随后使用目标地址来取出下一指令。在匹配在提前取出BTB中没有被识别出(在块508中的“否”)的情况下,取出级202将随后需要被暂停(块514),一旦它到达随后的分支指令(即,在取出束n中的第一个采用的分支指令),对于该指令没有目标地址被预测(作为在块508中的“否”的结果),直到指令的目标地址(即,在取出束n中的第一个采用的分支指令)是可用的为止。
可存在索引可从与分支指令有关的信息中(在块504中且通过索引生成器逻辑402)生成的很多不同的方式。如上所述,在各种例子中,取出指针(如在块502中接收的)或取出指针的一部分(其中如上所述,是地址或程序计数器)可用作索引。在其它例子中,提前取出BTB可由包含分支指令的取出束的取出指针和对于之前的分支指令的历史信息的组合(例如,散列)来编索引。分支预测器212可因此包括被配置成存储历史信息的额外的数据结构(未在图4中示出)。
历史信息提供程序如何到达分支指令的路径,且可以是路径历史(即,以前的分支指令目标的历史)或采用/未采用的历史(即,以前的条件分支的结果的历史,其中对于每个分支的每个结果是分支被采用或未被采用)。例如,路径历史可包括N个前面的分支指令的目标地址的最后B个位(例如,B=N=4),且采用/未采用的历史可包括M个位,每个位代表M个前面的条件分支之一的结果(例如,M=12或14)。
GB专利No.2506462描述了生成索引的另外的方法,其不使用分支指令的地址,而是使用间接路径历史和采用/未采用的历史的组合。
图6是更新提前取出BTB 220的示例方法的流程图600,且该方法可由在分支预测器212内的更新逻辑406实现。当(在图5的块510中由目标地址预测逻辑404使用对于第n-α个取出束的取出指针)做出预测时,关于预测和在块502中接收的取出指针和/或在块504中生成的索引的信息由分支预测器212且更具体地由更新逻辑块406缓存(块602)。
当分支预测器212(例如,更新逻辑406)从例如执行级206(例如,对于在第n个取出束中的第一个采用的分支指令)接收到与所执行的分支指令有关的信息(块604)时,所缓存的信息(来自块602)用于识别在提前取出BTB中的条目,其用于预测所执行的分支指令的目标地址(块606,例如,对于第n-α个取出束的取出指针的条目)。在识别出在提前取出BTB中的适当条目(在块606中)后,所识别的条目的数据部分被更新以识别在块604中接收的目标地址(块608)。
上面所述的方法可用于一种或多种不同类型的分支指令,包括下列中的一个或多个:条件分支指令、无条件分支指令和返回类型分支指令。在各种例子中,方法也可用于动态分支。根据不同类型的分支指令(对于其实现本方法),可使用用于生成索引(例如,在图5的块504中)的不同技术(例如,当生成用于动态分支指令的索引时可使用全局历史寄存器)。在各种例子中,处理器可包括多于一个分支预测器212,其中不同的分支预测器用于不同类型的分支指令(例如,包括提前取出BTB的分支预测器可被提供以预测对于有条件、无条件和返回类型分支指令的目标地址,且单独的跳转寄存器高速缓存器和相关联的硬件逻辑可用于预测对于动态分支指令的目标地址)。在提前取出BTB被提供以预测对于返回类型的分支指令的目标地址的情况下,提前取出BTB不需要存储目标地址,且目标地址可改为来自返回预测栈(RPS)。在各种例子中,可提供一个或多个提前取出BTB,例如,不同的提前取出BTB用于不同类型的分支指令。
使用如上所述的提前取出BTB 220使在BTB中执行查找时的任何时延能够被隐藏,使得时延在取出级202的操作中不引起暂停。
术语“处理器”和“计算机”在本文用于指具有处理能力的任何设备或其部分,使得它可执行指令。术语“处理器”可例如包括中央处理单元(CPU)、图形处理单元(GPU或VPU)、物理处理单元(PPU)、无线电处理单元(RPU)、数字信号处理器(DSP)、通用处理器(例如,通用GPU)、微处理器、设计成使在CPU外部的任务加速的任何处理单元等。本领域中的技术人员将认识到,这样的处理能力合并到很多不同的设备内,且因此术语“计算机”包括机顶盒、媒体播放器、数字收音机、PC、服务器、移动电话、个人数字助理和很多其它设备。
本领域中的技术人员将认识到,用于存储程序指令的存储设备可分布在网络当中。例如,远程计算机可存储被描述为软件的过程的例子。本地或终端计算机可访问远程计算机并下载软件的一部分或全部以运行程序。可选地,本地计算机可按需要下载软件片段,或在本地终端处执行一些软件指令并在远程计算机(或计算机网络)处执行一些软件指令。本领域中的技术人员也将认识到,通过利用本领域中的技术人员已知的常规技术,软件指令的全部或一部分可由专用电路(诸如DSP、可编程逻辑阵列等)执行。
本文所述的方法可由配置有软件的计算机执行,软件是以存储在有形存储介质上的机器可读形式,例如以包括用于配置计算机来执行所述方法的组成部分的计算机可读程序代码的计算机程序的形式或以包括适合于当程序在计算机上运行时执行本文所述的任何方法的所有步骤的计算机程序代码装置的计算机程序的形式,且其中计算机程序可体现在计算机可读存储介质上。有形(或非临时)存储介质的例子包括磁盘、拇指驱动器、存储卡等,且并不包括传播信号。软件可适合于在并行处理器或串行处理器上执行,使得方法步骤可以按任何适当的顺序或同时被执行。
本文描述的硬件部件可由非临时计算机可读存储介质生成,非临时计算机可读存储介质具有在其上编码的计算机可读程序代码。
还意图包括“描述”或定义实现上面所述的模块、功能、部件或逻辑的硬件的配置的软件,诸如HDL(硬件描述语言)软件,如对设计集成电路或对配置可编程芯片使用的,以实现期望功能。也就是说,可提供计算机可读存储介质,其具有存储在其上的用于生成配置成执行本文所述的任何方法的处理单元或用于生成包括本文所述的任何装置的处理单元的计算机可读程序代码。也就是说,计算机系统可配置成从电路元件的定义和定义用于组合那些电路元件的规则的数据生成数字电路的表示,其中非临时计算机可读存储介质可具有存储在其上的处理器可执行指令,其当在这样的计算机系统处被执行时使计算机系统生成如本文所述的处理单元。例如,非临时计算机可读存储介质可具有存储在其上的计算机可读指令,其当在用于生成集成电路的表现形式的计算机系统处被执行时使计算机系统生成如在本文的例子中所述的处理器的表现形式或生成配置成执行如在本文的例子中所述的方法的处理器的表现形式。处理器的表现形式可以是处理器本身或处理器(例如,模板)的表示,其可用于生成处理器。
存储用于在实现所公开的方面时使用的机器可执行数据的存储器可以是非临时介质。非临时介质可以是易失性的或非易失性的。易失性非临时介质的例子包括基于半导体的存储器,例如SRAM或DRAM。可用于实现非易失性存储器的技术的例子包括光学和磁性存储器技术、闪存、相变存储器、电阻式RAM。
对“逻辑”的特定提及指执行一种或多种功能的结构。逻辑的例子包括布置成执行那些功能的电路。例如,这样的电路可包括晶体管和/或在制造过程中可用的其它硬件元件。作为例子,这样的晶体管和/或其它元件可用于形成实现和/或包含存储器(诸如寄存器)、触发器或锁存器、逻辑运算符(诸如布尔运算)、数学运算符(诸如加法器、乘法器或移位器)和互连的电路或结构。这样的元件可作为定制电路或标准单元库、宏或在其它抽象级处被提供。可在特定的布置中使这样的元件互连。逻辑可包括固定功能的电路,且电路可被编程以执行一种或多种功能;这样的编程可从固件或软件更新或控制机制提供。被识别为执行一种功能的逻辑也可包括实现组成功能或子过程的逻辑。在例子中,硬件逻辑具有实现固定功能操作或多个操作、状态机或过程的电路。
本文给出的任何范围或设备值可扩展或改变而不失去所寻求的效果,如对技术人员将明显的。
将理解,上面所述的益处和优点可与一个实施方式有关或可与几个实施方式有关。实施方式不限于解决任何或全部所陈述的问题的实施方式或具有任何或所有所陈述的益处和优点的实施方式。
对“一个”项目的任何提及指那些项目中的一个或多个。术语“包括”在本文用于意指包括所识别的方法块或元件,但这样的块或元件不包括排他列表,且装置可包含额外的块或元件,以及方法可包含额外的操作或元件。此外,块、元件和操作本身不是隐含地封闭的。
本文描述的方法的步骤可在适当时以任何适当的顺序或同时被执行。在附图中的方框之间的箭头示出方法步骤的一个示例顺序,但并不旨在排除其它顺序或多个步骤的并行执行。此外,单独的块可从方法的任一个中删除而不偏离本文描述的主题的精神和范围。上面描述的任何例子的方面可与所描述的其它例子中的任一个的方面组合以形成另外的例子,而不失去所寻求的效果。在附图的元件被示为由箭头连接的情况下,将认识到,这些箭头示出在元件之间的通信(包括数据和控制消息)的仅仅一个示例流。在元件之间的流可以在任一方向上或在两个方向上。
将理解,优选实施方式的上述描述仅作为例子被给出,以及各种修改可由本领域中的技术人员做出。虽然上面以某个详细程度或参考一个或多个单独的实施方式描述了各种实施方式,但本领域中的技术人员可对所公开的实施方式进行很多变更而不偏离本发明的精神或范围。
在下文的一个或多个实施方式中可实现本公开的各方面:
1)一种分支预测器,包括:
提前取出分支目标缓冲器,其具有使用取出指针编索引的多个数据条目,每个条目相应于分支指令并包括被布置成存储识别所述条目所相应于的分支指令的目标地址的数据的数据部分,其中条目由取出束的取出指针编索引,所述取出束在包括所述条目所相应于的分支指令的取出束之前被取出;
输入端,其被配置成接收来自处理器中的取出级的取出指针;
分支预测逻辑,其被配置成使用所述提前取出分支目标缓冲器和所接收的取出指针来确定用于分支指令的目标地址;以及
输出端,其被配置成向所述取出级提供用于所述分支指令的所述目标地址,其中所述分支指令是在由所述接收的取出指针识别的取出束之后取出的取出束的部分。
2)如1)所述的分支预测器,其中,每个条目还包括被布置成存储识别所述取出指针的数据的标签部分,所述条目通过所述取出指针被编索引。
3)如2)所述的分支预测器,其中,所述分支预测逻辑包括:
索引生成器逻辑,其被配置成使用与所述接收的取出指针有关的信息来生成索引;以及
目标地址预测逻辑,其被配置成通过使所述索引与标签部分匹配来识别在所述提前取出分支目标缓冲器中的匹配条目并使用所述匹配条目的所述数据部分来确定用于所述分支指令的所述目标地址。
4)如3)所述的分支预测器,其中,所述索引是所述接收的取出指针的至少部分。
5)如3)所述的分支预测器,其中,所述索引是所述接收的取出指针的全部。
6)如3)所述的分支预测器,其中,与所述分支指令有关的信息包括历史数据。
7)如1)所述的分支预测器,还包括:
更新逻辑,其被配置成基于与所述接收的取出指针有关的所缓存的信息、由所述分支预测逻辑确定的用于所述分支指令的所述目标地址和与从在所述处理器中的执行级接收的所述分支指令的执行有关的信息来更新在所述提前取出分支目标缓冲器中的条目的所述数据部分。
8)一种在硬件逻辑中实现的分支预测的方法,所述方法包括:
在分支预测器的输入端处接收来自处理器中的取出级的取出指针;
使用提前取出分支目标缓冲器和所接收的取出指针来确定用于分支指令的目标地址,所述提前取出分支目标缓冲器包括使用取出指针来编索引的多个数据条目,每个条目相应于分支指令并包括被布置成存储识别所述分支指令的目标地址的数据的数据部分,其中条目由取出束的取出指针编索引,所述取出束在包括所述条目所相应于的分支指令的取出束之前被取出;以及
经由所述分支预测器的输出端向所述取出级输出用于所述分支指令的目标地址,其中所述分支指令是在由所述接收的取出指针识别的取出束之后取出的取出束的部分。
9)如8)所述的方法,其中,每个条目还包括被布置成存储识别所述取出指针的数据的标签部分,所述条目通过所述取出指针被编索引。
10)如9)所述的方法,其中,使用提前取出分支目标缓冲器确定用于分支指令的目标地址包括:
使用与所述接收的取出指针有关的信息来生成索引;以及
比较所述索引与在所述提前取出分支目标缓冲器中的标签部分;以及
响应于识别出在所述索引和在所述提前取出分支目标缓冲器中的条目的标签部分之间的匹配,使用匹配条目的所述数据部分来确定用于所述分支指令的所述目标地址。
11)如10)所述的方法,还包括:
缓存与所述接收的取出指针和用于所述分支指令的所述目标地址有关的信息;以及
响应于从所述处理器中的执行级接收到与所述分支指令的执行有关的信息,基于所接收的信息来更新在所述提前取出分支目标缓冲器中的所述匹配条目的所述数据部分。

Claims (12)

1.一种分支预测器,包括:
提前取出分支目标缓冲器,其具有使用取出指针X、Y编索引的多个数据条目,每个条目相应于分支指令XBR、YBR并包括数据部分,所述数据部分被布置成存储识别所述条目所相应于的分支指令XBR、YBR的目标地址Y、Z的数据,其中用于第二分支指令YBR的条目由取出束的起始指令的取出指针X编索引,所述取出束包括多个指令,所述多个指令包括第一分支指令XBR,所述取出束在包括所述条目所相应于的第二分支指令YBR的另一个取出束之前被取出;
输入端,其被配置成接收来自处理器中的取出级的用于所述取出束中的起始指令的取出指针X,所述取出束包括多个指令,所述多个指令包括所述第一分支指令XBR
分支预测逻辑,其被配置成使用所述提前取出分支目标缓冲器和所接收的取出指针X来确定用于所述第二分支指令YBR的目标地址Z,所述第二分支指令YBR包括在所述另一个取出束中;以及
输出端,其被配置成向所述取出级提供用于所述第二分支指令YBR的所述目标地址Z,其中所述第二分支指令YBR是在由所述接收的取出指针X识别的取出束之后取出的另一个取出束的部分。
2.如权利要求1所述的分支预测器,其中,每个条目还包括被布置成存储识别所述取出指针的数据的标签部分,所述条目通过所述取出指针被编索引。
3.如权利要求2所述的分支预测器,其中,所述分支预测逻辑包括:
索引生成器逻辑,其被配置成使用与所述接收的取出指针X有关的信息来生成索引;以及
目标地址预测逻辑,其被配置成通过使所述索引与标签部分匹配来识别在所述提前取出分支目标缓冲器中的匹配条目并使用所述匹配条目的所述数据部分来确定用于所述第二分支指令YBR的所述目标地址Z。
4.如权利要求3所述的分支预测器,其中,所述索引是所述接收的取出指针X的至少部分。
5.如权利要求3所述的分支预测器,其中,所述索引是所述接收的取出指针X的全部。
6.如权利要求3所述的分支预测器,其中,与所述分支指令有关的信息包括历史数据。
7.如权利要求1所述的分支预测器,还包括:
更新逻辑,其被配置成基于与所述接收的取出指针X有关的所缓存的信息、由所述分支预测逻辑确定的用于所述第二分支指令YBR的所述目标地址Z和与从在所述处理器中的执行级接收的所述第二分支指令YBR的执行有关的信息来更新在所述提前取出分支目标缓冲器中的条目的所述数据部分。
8.一种在硬件逻辑中实现的分支预测的方法,所述方法包括:
在分支预测器的输入端处接收来自处理器中的取出级的取出指针X;
使用提前取出分支目标缓冲器和所接收的取出指针X来确定用于第二分支指令YBR的目标地址Z,所述提前取出分支目标缓冲器包括使用取出指针X,Y来编索引的多个数据条目,每个条目相应于分支指令XBR、YBR并包括数据部分,所述数据部分被布置成存储识别所述分支指令XBR、YBR的目标地址的数据,其中一条目由包括多个指令的取出束的起始指令的取出指针X编索引,所述取出束在包括所述条目所相应于的所述第二分支指令YBR的另一个取出束之前被取出;以及
经由所述分支预测器的输出端向所述取出级输出用于所述第二分支指令YBR的目标地址Z,其中所述第二分支指令YBR是在由所述接收的取出指针X识别的取出束之后取出的另一个取出束的部分,所述取出束包括多个指令,所述多个指令包括起始指令。
9.如权利要求8所述的方法,其中,每个条目还包括被布置成存储识别所述取出指针的数据的标签部分,所述条目通过所述取出指针被编索引。
10.如权利要求9所述的方法,其中,使用提前取出分支目标缓冲器确定用于第二分支指令YBR的目标地址Z包括:
使用与所述接收的取出指针X有关的信息来生成索引;以及
比较所述索引与在所述提前取出分支目标缓冲器中的标签部分;以及
响应于识别出在所述索引和在所述提前取出分支目标缓冲器中的条目的标签部分之间的匹配,使用匹配条目的所述数据部分来确定用于所述第二分支指令YBR的所述目标地址Z。
11.如权利要求10所述的方法,还包括:
缓存与所述接收的取出指针X和用于所述第二分支指令YBR的所述目标地址Z有关的信息;以及
响应于从所述处理器中的执行级接收到与所述第二分支指令YBR的执行有关的信息,基于所接收的信息来更新在所述提前取出分支目标缓冲器中的所述匹配条目的所述数据部分。
12.一种非临时计算机可读存储介质,其具有存储在其上的计算机可读指令,所述计算机可读指令当在用于生成集成电路的表现形式的计算机系统处被处理时使所述计算机系统生成包括如权利要求1所述的分支预测器的集成电路的表现形式。
CN202310137671.1A 2015-11-09 2016-11-07 提前取出分支目标缓冲器 Pending CN115993992A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/935,579 US10664280B2 (en) 2015-11-09 2015-11-09 Fetch ahead branch target buffer
US14/935,579 2015-11-09
CN201610977366.3A CN106681695B (zh) 2015-11-09 2016-11-07 提前取出分支目标缓冲器

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201610977366.3A Division CN106681695B (zh) 2015-11-09 2016-11-07 提前取出分支目标缓冲器

Publications (1)

Publication Number Publication Date
CN115993992A true CN115993992A (zh) 2023-04-21

Family

ID=57326187

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202310137671.1A Pending CN115993992A (zh) 2015-11-09 2016-11-07 提前取出分支目标缓冲器
CN201610977366.3A Active CN106681695B (zh) 2015-11-09 2016-11-07 提前取出分支目标缓冲器

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201610977366.3A Active CN106681695B (zh) 2015-11-09 2016-11-07 提前取出分支目标缓冲器

Country Status (4)

Country Link
US (1) US10664280B2 (zh)
EP (1) EP3166015A1 (zh)
CN (2) CN115993992A (zh)
GB (1) GB2545796B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI645286B (zh) 2017-08-31 2018-12-21 慧榮科技股份有限公司 記憶體控制裝置和方法
US10732979B2 (en) 2018-06-18 2020-08-04 Advanced Micro Devices, Inc. Selectively performing ahead branch prediction based on types of branch instructions
US10713054B2 (en) 2018-07-09 2020-07-14 Advanced Micro Devices, Inc. Multiple-table branch target buffer
US10838731B2 (en) 2018-09-19 2020-11-17 Qualcomm Incorporated Branch prediction based on load-path history
CN110069285B (zh) * 2019-04-30 2021-06-01 成都海光微电子技术有限公司 一种检测分支预测的方法及处理器
US20230195468A1 (en) * 2021-12-21 2023-06-22 Arm Limited Predicting upcoming control flow
CN114116010B (zh) * 2022-01-27 2022-05-03 广东省新一代通信与网络创新研究院 一种针对处理器循环体的体系结构优化方法及装置

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2603626B2 (ja) * 1987-01-16 1997-04-23 三菱電機株式会社 データ処理装置
JPH0769811B2 (ja) * 1988-12-21 1995-07-31 松下電器産業株式会社 データ処理装置
US5265213A (en) 1990-12-10 1993-11-23 Intel Corporation Pipeline system for executing predicted branch target instruction in a cycle concurrently with the execution of branch instruction
GB2285154B (en) * 1993-12-24 1998-04-01 Advanced Risc Mach Ltd Branch cache
US5701448A (en) 1995-12-15 1997-12-23 Cyrix Corporation Detecting segment limit violations for branch target when the branch unit does not supply the linear address
US5842008A (en) * 1996-06-18 1998-11-24 Intel Corporation Method and apparatus for implementing a branch target buffer cache with multiple BTB banks
US6148396A (en) * 1997-11-26 2000-11-14 Compaq Computer Corporation Apparatus for sampling path history in a processor pipeline
US20050278505A1 (en) 2004-05-19 2005-12-15 Lim Seow C Microprocessor architecture including zero impact predictive data pre-fetch mechanism for pipeline data memory
US7752426B2 (en) * 2004-08-30 2010-07-06 Texas Instruments Incorporated Processes, circuits, devices, and systems for branch prediction and other processor improvements
US7234046B2 (en) * 2004-12-01 2007-06-19 Faraday Technology Corp. Branch prediction using precedent instruction address of relative offset determined based on branch type and enabling skipping
US20060200655A1 (en) 2005-03-04 2006-09-07 Smith Rodney W Forward looking branch target address caching
US20070294518A1 (en) 2006-06-14 2007-12-20 Shen-Chang Wang System and method for predicting target address of branch instruction utilizing branch target buffer having entry indexed according to program counter value of previous instruction
US20110078425A1 (en) * 2009-09-25 2011-03-31 Shah Manish K Branch prediction mechanism for predicting indirect branch targets
CN102306093B (zh) * 2011-08-04 2014-03-05 北京北大众志微系统科技有限责任公司 实现现代处理器间接转移预测的装置及方法
US9146739B2 (en) * 2012-06-14 2015-09-29 International Business Machines Corporation Branch prediction preloading
US9298465B2 (en) * 2012-06-15 2016-03-29 International Business Machines Corporation Asynchronous lookahead hierarchical branch prediction
GB2506462B (en) 2013-03-13 2014-08-13 Imagination Tech Ltd Indirect branch prediction
US10481912B2 (en) * 2016-06-24 2019-11-19 International Business Machines Corporation Variable branch target buffer (BTB) line size for compression

Also Published As

Publication number Publication date
EP3166015A1 (en) 2017-05-10
GB2545796B (en) 2019-01-30
GB2545796A (en) 2017-06-28
CN106681695B (zh) 2023-02-28
CN106681695A (zh) 2017-05-17
US20170132009A1 (en) 2017-05-11
US10664280B2 (en) 2020-05-26

Similar Documents

Publication Publication Date Title
CN106681695B (zh) 提前取出分支目标缓冲器
US10261798B2 (en) Indirect branch prediction
US9367471B2 (en) Fetch width predictor
US8959320B2 (en) Preventing update training of first predictor with mismatching second predictor for branch instructions with alternating pattern hysteresis
US9201654B2 (en) Processor and data processing method incorporating an instruction pipeline with conditional branch direction prediction for fast access to branch target instructions
EP3079068A1 (en) Cache operation in a multi-threaded processor
US10360037B2 (en) Fetch unit for predicting target for subroutine return instructions
US20140250289A1 (en) Branch Target Buffer With Efficient Return Prediction Capability
US20070174592A1 (en) Early conditional selection of an operand
US20240152360A1 (en) Branch Prediction Using loop Iteration Count
JP3725547B2 (ja) 限定ラン分岐予測
US10963260B2 (en) Branch predictor
US20020078333A1 (en) Resource efficient hardware loops
CN112740175A (zh) 基于加载路径历史的分支预测
TW201905683A (zh) 多標籤分支預測表
US20090070569A1 (en) Branch prediction device,branch prediction method, and microprocessor
US10318303B2 (en) Method and apparatus for augmentation and disambiguation of branch history in pipelined branch predictors
JP2006053830A (ja) 分岐予測装置および分岐予測方法
US11687342B2 (en) Way predictor and enable logic for instruction tightly-coupled memory and instruction cache
US20060112262A1 (en) Branch prediction of unconditionally executed branch instructions

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40086051

Country of ref document: HK