CN103488461A - 使用快速索引树实现加速分支预测的系统和方法 - Google Patents

使用快速索引树实现加速分支预测的系统和方法 Download PDF

Info

Publication number
CN103488461A
CN103488461A CN201310231248.4A CN201310231248A CN103488461A CN 103488461 A CN103488461 A CN 103488461A CN 201310231248 A CN201310231248 A CN 201310231248A CN 103488461 A CN103488461 A CN 103488461A
Authority
CN
China
Prior art keywords
fit
search
branch
target buffer
list item
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.)
Granted
Application number
CN201310231248.4A
Other languages
English (en)
Other versions
CN103488461B (zh
Inventor
J·J·博南诺
B·R·普拉斯基
A·萨珀里托
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN103488461A publication Critical patent/CN103488461A/zh
Application granted granted Critical
Publication of CN103488461B publication Critical patent/CN103488461B/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/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
    • 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

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

本发明涉及一种使用快速索引树实现加速分支预测的系统和方法。所述系统包括分支目标缓冲器、FIT结构以及处理电路,所述处理电路被配置为执行一种方法。所述方法包括:确定要在FIT控制下执行所述分支目标缓冲器的搜索;保存用于所述分支目标缓冲器的搜索的当前搜索地址;在所保存的当前搜索地址处搜索所述分支目标缓冲器以获得分支预测;根据从所述FIT结构读取下一搜索级别的预测分支的分支跳转和分支不跳转路径,确定FIT下一搜索地址;根据所述FIT下一搜索地址,重新索引所述分支目标缓冲器的搜索;以及确定在所保存的当前搜索地址处的搜索是否查找到所述分支预测。

Description

使用快速索引树实现加速分支预测的系统和方法
技术领域
本发明一般地涉及计算机处理系统,更具体地说,涉及用于加速分支预测的快速索引树。
背景技术
计算机处理器中的指令流水线通过使用多个流水线级处理指令,提高指令执行吞吐量,其中多个级可以并行处理指令流的不同指令。指令流中的条件分支指令可能在以下情况下导致流水线停顿(pipeline stall):如果处理器进行等待直到在流水线中的执行级解析条件分支指令,然后在流水线的指令取回级取回下一条指令。分支预测器可以尝试猜测是否跳转条件分支。分支预测器还可以包括分支目标预测,该预测在通过对指令本身进行解码和执行来计算目标之前,尝试猜测跳转的条件或无条件分支的目标。分支目标可以是基于偏移和/或通过寄存器的间接引用的所计算的地址。
分支目标缓冲器(BTB)可以用于根据分支指令的地址,预测所预测的跳转分支指令的目标。预测分支指令的目标可以防止流水线停顿,因为无需等待分支指令到达流水线的执行级以计算分支目标地址。通过执行分支目标预测,可以在同一周期或分支指令之后的周期执行分支的目标指令解码,而不会在分支指令与所预测的跳转分支指令的目标之间具有多个气泡/空周期。可以包括在BTB中或单独实现的其它分支预测组件包括分支历史表和模式历史表。分支历史表可以根据分支地址预测分支的方向(跳转与不跳转)。模式历史表可以根据遇到的分支模式(导向要预测的给定分支)而帮助分支的方向预测。
发明内容
示例性实施例包括一种使用快速索引树(FIT)实现加速分支预测的系统。所述系统包括分支目标缓冲器、FIT结构以及处理电路,所述处理电路被配置为执行一种方法。所述方法包括确定要在FIT控制下执行所述分支目标缓冲器的搜索。保存用于所述分支目标缓冲器的搜索的当前搜索地址。在所保存的当前搜索地址处搜索所述分支目标缓冲器以获得分支预测。根据从所述FIT结构读取下一搜索级别的预测分支的分支跳转和分支不跳转路径,确定FIT下一搜索地址。根据所述FIT下一搜索地址,重新索引所述分支目标缓冲器的搜索。确定在所保存的当前搜索地址处的搜索是否查找到所述分支预测。根据在所保存的当前搜索地址处的搜索查找到所述分支预测,使用基于所述FIT下一搜索地址设置的当前搜索地址,在FIT控制下继续所述分支目标缓冲器的搜索。根据在所保存的当前搜索地址处的搜索无法查找到所述分支预测,使用所保存的当前搜索地址重新索引所述分支目标缓冲器的搜索,并在没有FIT控制的情况下执行所述分支目标缓冲器的搜索。
另一示例性实施例包括一种使用快速索引树实现加速分支预测的计算机实现的方法。所述方法包括由计算机确定要在FIT控制下执行分支目标缓冲器的搜索。保存用于所述分支目标缓冲器的搜索的当前搜索地址。所述方法还包括在所保存的当前搜索地址处搜索所述分支目标缓冲器以获得分支预测。所述计算机根据从FIT结构读取下一搜索级别的预测分支的分支跳转和分支不跳转路径,确定FIT下一搜索地址。根据所述FIT下一搜索地址,重新索引所述分支目标缓冲器的搜索。所述计算机确定在所保存的当前搜索地址处的搜索是否查找到所述分支预测。根据在所保存的当前搜索地址处的搜索查找到所述分支预测,使用基于所述FIT下一搜索地址设置的当前搜索地址,在FIT控制下继续所述分支目标缓冲器的搜索。根据在所保存的当前搜索地址处的搜索无法查找到所述分支预测,使用所保存的当前搜索地址重新索引所述分支目标缓冲器的搜索,并在没有FIT控制的情况下执行所述分支目标缓冲器的搜索。
其它示例性实施例包括一种使用快速索引树实现加速分支预测的计算机程序产品。所述计算机程序产品包括有形存储介质,所述有形存储介质可由处理电路读取并存储由所述处理电路执行以执行一种方法的指令。所述方法包括由所述处理电路确定要在FIT控制下执行分支目标缓冲器的搜索。保存用于所述分支目标缓冲器的搜索的当前搜索地址。所述方法还包括在所保存的当前搜索地址处搜索所述分支目标缓冲器以获得分支预测。所述处理电路根据从FIT结构读取下一搜索级别的预测分支的分支跳转和分支不跳转路径,确定FIT下一搜索地址。根据所述FIT下一搜索地址,重新索引所述分支目标缓冲器的搜索。所述处理电路确定在所保存的当前搜索地址处的搜索是否查找到所述分支预测。根据在所保存的当前搜索地址处的搜索查找到所述分支预测,使用基于所述FIT下一搜索地址设置的当前搜索地址,在FIT控制下继续所述分支目标缓冲器的搜索。根据在所保存的当前搜索地址处的搜索无法查找到所述分支预测,使用所保存的当前搜索地址重新索引所述分支目标缓冲器的搜索,并在没有FIT控制的情况下执行所述分支目标缓冲器的搜索。
附图说明
在说明书结尾处的权利要求中具体指出并明确要求保护了被视为实施例的主题。从下面结合附图的详细描述,各实施例的上述和其它特性和优点将变得显而易见,这些附图是:
图1示出了根据一个实施例的处理系统;
图2示出了根据一个实施例的分支预测器;
图3示出了根据一个实施例的分支目标缓冲器表项;
图4示出了根据一个实施例的各种FIT表项的实例;
图5示出了根据一个实施例的树表示中的实例FIT;
图6是示出根据一个实施例的在FIT控制下转换BTB搜索的过程的流程图;
图7是示出根据一个实施例的当BTB搜索未在FIT控制下时进行预测时FIT写入的过程的流程图;
图8是示出根据一个实施例的当在FIT控制下时进行BTB搜索的过程的流程图;
图9是示出根据一个实施例的FIT搜索的过程的流程图;
图10示出了根据一个实施例的实例分支预测流水线时序;
图11示出了根据一个实施例的FIT搜索流水线的实例流水线时序;
图12示出了根据一个实施例的实例FIT BTB指针树;
图13示出了根据一个实施例的用于选择性地使FIT结构无效以实现BTB同步的逻辑;
图14是示出根据一个实施例的实现BTB写入时使FIT无效(类型1)的无效逻辑的过程的流程图;
图15示出了根据一个实施例的节点删除之后的树表示中的实例FIT;
图16是示出根据一个实施例的实现意外分支(surprise branch)时使FIT无效(类型2)的无效逻辑的过程的流程图;
图17示出了根据一个实施例的路径修改之后的树表示中的实例FIT;
图18是示出根据一个实施例的实现FIT替换时使FIT无效(类型3)的无效逻辑的过程的流程图;
图19示出了根据一个实施例的节点替换之后的树表示中的实例FIT;
图20示出了根据一个实施例的计算系统;以及
图21示出了根据一个实施例的计算机可读介质。
具体实施方式
示例性实施例提供了一种用于加速分支预测的快速索引树。分支预测器可以包括分支目标缓冲器(BTB)结构,以及多个结构和缓冲器以支持分支预测和分支目标预测。可以并行于并独立于指令取回搜索BTB,以便发现即将到来的分支,在这种情况下称为超前分支预测(lookahead branchprediction)。备选地,可以在取回指令并确定指令边界的同时或之后访问BTB,以便为每个遇到的分支指令提供预测,在这种情况下称为同步分支预测。在两种情况下,BTB的性能优势都取决于从BTB提供的预测准确性以及访问BTB所需的延迟。
在示例性实施例中,快速索引树(FIT)可加速分支预测。FIT是一种表,其保存有关BTB中的分支子集的信息。FIT中的每个表项表示二进制树中的节点,所述表项从FIT中的每个分支指定哪个下一预测分支沿着不跳转路径,哪个下一预测分支沿着跳转路径。FIT通过加速BTB搜索的重新索引,提高超前分支预测器中的分支预测吞吐量。
当在BTB中预测分支子集(在FIT中对这些分支进行跟踪)时,FIT可加速分支预测吞吐量。还可以节省电力,因为避免了不必要的BTB顺序搜索,并在不需要辅助结构(例如模式历史表和多目标表)时将它们关闭。
图1示出了根据一个实施例的处理系统100的框图。处理系统100包括存储器102、指令高速缓存104、指令取回单元108、分支预测器118以及处理流水线106。处理系统100可以包括在计算机处理器中,或者以其它方式分布在计算机系统中。指令和数据可以存储在存储器102中,指令高速缓存104可以访问存储器102中的指令并存储要取回的指令。存储器102可以包括任意类型的易失性或非易失性存储器,例如高速缓冲存储器。存储器102和指令高速缓存104可以包括多个高速缓存级别。处理系统100中还可以包括数据高速缓存(未示出)。
在图1中,示出了指令取回单元108和处理流水线106的简化实例。处理系统100可以还包括多个处理流水线106和指令取回单元108。处理流水线106包括解码单元110、发出单元112、执行级114以及写回逻辑116。整个指令取回单元108或分支预测器118也可以是处理流水线106的一部分。处理流水线106可以包括其它特性,例如错误检查和处理逻辑、一个或多个通过处理流水线106的并行路径以及所属技术领域公知的其它特性。虽然图1中示出了通过处理系统100的正向路径,但可以在处理系统100的元件之间包括其它反馈路径和信令路径。
指令取回单元108从指令高速缓存104取回指令,以便由解码单元110进一步处理。在一个示例性实施例中,指令取回单元108包括分支预测器118。备选地,分支预测器118可以与指令取回单元108分离。指令取回单元108还可以包括其它分支预测逻辑(未示出)。分支预测器118是用于实现快速索引树以获得加速分支预测的处理电路的一个实例。
解码单元110对指令进行解码并将解码后的指令、指令各部分或其它解码后的数据传送到发出单元112。发出单元112分析指令或其它数据,并根据分析将解码后的指令、指令各部分或其它数据传输到执行级114中的一个或多个执行单元。执行级114执行指令。执行级114可以包括多个执行单元,例如定点执行单元、浮点执行单元、加载/存储执行单元以及向量执行单元。写回逻辑116将指令执行的结果写回到目的地资源120。目的地资源120可以是任意类型的资源,包括寄存器、高速缓冲存储器、其它存储器、用于与其它设备通信的I/O电路、其它处理电路,或者任何其它类型的被执行指令或数据的目的地。
图2更详细地示出了图1的分支预测器118的一个实例。图2的实例分支预测器118包括BTB搜索和命中逻辑202、BTB204、FIT内容可寻址存储器(CAM)206、FIT搜索逻辑208、FIT指针210、FIT BTB指针212以及FIT BTB指针树214。分支预测器118还可以包括多个辅助结构以支持分支预测,例如多目标表(MTT)216和模式历史表(PHT)218。FIT CAM206、FIT指针210以及FIT BTB指针212统称为FIT结构200。FIT结构200的容量小于BTB204。BTB搜索和命中逻辑202在BTB204中搜索BTB表项,而FIT搜索逻辑208在FIT指针210和FIT BTB指针212中搜索FIT表项。尽管分别示出BTB搜索和命中逻辑202以及FIT搜索逻辑208,但应当理解,它们可以组合为单个逻辑方框或进一步细分。
BTB204是组相联(set associative)的,包括多个BTB表项组。BTB表项的一个通用实例在图3中被示为BTB表项300(也称为表项300),其包括分支地址标记302和预测的目标地址306。继续参考图1-3,分支地址标记302用于在BTB行310中查找表项,其中图2的BTB204可以在每个BTB行310中包括多个BTB行312和多个组相联BTB表项。每个BTB表项300可以包括其它分支预测信息(未示出),例如用于指示是否跳转关联分支的分支方向。最近最少使用(LRU)标识符可以用于在BTB行310中标识最近最少使用的BTB表项300,以便支持BTB204中的替换策略。尽管图3的实例在每个BTB行310中包括两个BTB表项300(列),但其它实施例可以在每个BTB行310中包括不同数量的BTB表项300,例如四个或更多个。
在一个示例性实施例中,图1的指令取回单元108取回的指令的地址被用作起始搜索地址,以便访问分支预测器118并预测分支目标地址。当查找分支预测时,读取BTB204,并且如果BTB204包含具有与搜索地址匹配的分支地址标记302的表项,则它可以提供分支预测。BTB204为BTB搜索和命中逻辑202提供输入,以便确定是否根据搜索地址查找到匹配或“命中”。如果发现匹配,则BTB搜索和命中逻辑202输出预测的目标地址。当预测不跳转分支时,逻辑202使用与预测的分支地址按顺序排列的新搜索地址重定向它自身。当预测跳转分支时,逻辑202使用是预测的目标地址的新搜索地址重定向它自身。FIT结构200可以用于加速分支预测,方式为:为BTB搜索和命中逻辑202提供预测,所述预测沿着可能的跳转和不跳转分支路径向前查找。
与BTB204类似,FIT结构200是全相联(full associative)分支高速缓存,并且可以实现任何替换策略以管理FIT结构200中的FIT表项,例如FIFO或LRU或伪LRU策略。FIT CAM206用于在BTB位置信息(BTB204中的行和列)和FIT位置(FIT指针210和FIT BTB指针212中的行)之间转换。FIT BTB指针212用于在FIT搜索逻辑208进行控制之后重定向BTB搜索。FIT结构200中的FIT指针210用于重定向由FIT搜索逻辑208执行的FIT搜索。FIT BTB指针树214保存可能的未来分支预测的树,根据由FIT搜索逻辑208执行的FIT搜索,针对多个搜索级别从FIT结构200提取这些未来分支预测。
图4示出了FIT CAM表项400、FIT指针表项420以及FIT BTB指针表项440的一个实例。FIT CAM表项400是来自图2的FIT CAM206的实例表项格式,并且包括FIT CAM有效字段402、BTB行索引404以及BTB列索引406。FIT CAM有效字段402指示关联的FIT表项是否有效,并且可以使用单个位实现。BTB行索引404是对应于在FIT表项中跟踪的分支的BTB同余类的索引。BTB列索引406是对应于在FIT表项中跟踪的分支的BTB列/路。FIT指针表项420是来自图2的FIT指针210的实例表项格式,并且包括不跳转指针有效字段422、不跳转指针值(FIT索引)424、跳转指针有效字段426以及跳转指针值(FIT索引)428。不跳转指针值424是FIT表项的FIT索引,其表示沿着当前FIT表项表示的分支的不跳转(NotTaken)路径遇到的第一分支。跳转指针值428是FIT表项的FIT索引,其表示沿着当前FIT表项表示的分支的跳转(Taken)路径遇到的第一分支。不跳转指针有效字段422指示由当前FIT表项表示的节点是否在不跳转指针值424中具有有效的不跳转(NotTaken)子指针。同样,跳转指针有效字段426指示由当前FIT表项表示的节点是否在跳转指针值428中具有有效的跳转(Taken)子指针。不跳转指针有效字段422和跳转指针有效字段426指示关联指针的有效性,其中无效指针可以表示为NULL。FIT BTB指针表项440是来自图2的FIT BTB指针212的实例表项格式,并且包括不跳转指针BTB行索引444、不跳转指针BTB列索引446、跳转指针BTB行索引448以及跳转指针BTB列索引450。不跳转指针BTB行索引444和跳转指针BTB行索引448均映射到BTB204的行/同余类。不跳转指针BTB列索引446和跳转指针BTB列索引450均映射到BTB204的列/路。
为了更好地理解如何使用图2的FIT结构200形成和管理FIT,考虑以下实例代码,其示出了包括分支指令的代码序列。
Figure BDA00003331247300081
图5示出了如何可以将实例代码中的分支表示为树500。在树表示中,代码中的每个分支由节点表示。每个节点具有左子指针和右子指针。左子指针指向表示沿着父节点分支的不跳转路径遇到的第一分支的节点。右子指针指向表示沿着父节点分支的跳转路径遇到的第一分支的节点。如果从未遇到来自父节点的该路径,则指针为NULL(无效)。在该实例中,节点A502具有到节点B504的分支不跳转路径以及到节点C506的分支跳转路径。节点B504具有为NULL的分支不跳转路径以及到节点A502的分支跳转路径。节点C506具有到节点D508的分支不跳转路径以及到节点E510的分支跳转路径。节点D508具有为NULL的分支不跳转路径以及到节点A502的分支跳转路径。节点E510具有为NULL的分支不跳转路径以及到节点A502的分支跳转路径。来自节点B504、D508和E510的NULL指针指示从未将这些分支预测为不跳转。
在图2的分支预测器118中,将上面实例代码中遇到的分支安装到BTB204。取决于实施方式,仅可以安装出现的分支子集。继续该实例,假设将所有遇到的分支安装到BTB204,并且假设BTB204是2路组相联高速缓存。FIT结构200的访问速度快于BTB204。在该实例中,当未在FIT结构200的指导下时,BTB204具有4周期重新索引循环,如图10的BTB搜索流水线1000的流水线时序1020中所示。FIT结构200具有2周期重新索引循环,如图11的实例流水线时序1102中所示,因此FIT结构200比BTB204快2个周期。因为FIT的访问速度快于BTB,一旦它控制BTB搜索,便可加速BTB搜索流水线,使其具有如图10的1050中所示的2周期重新索引循环。
表1和2示出了如何将实例代码中的分支放置在BTB204和FIT结构200中。在该实例中,FIT CAM206中的表项指示每个分支节点在BTB204的行和列中的分支目标节点。FIT BTB指针212中的表项将节点的跳转和不跳转路径映射到BTB204的行和列。FIT指针210中的表项将跳转和不跳转路径映射回FIT CAM206的行(FIT索引值)。
表1—实例代码的实例BTB状态
Figure BDA00003331247300111
表2—实例代码的实例FIT状态
图6示出了参考图2的当未在FIT控制下时BTB搜索过程600如何操作。当在方框602重新启动时,在方框604,BTB搜索未在FIT控制下。针对搜索级别0,使用重新启动地址作为搜索地址来索引BTB204。在方框606,如果未发现分支,则在方框608将搜索地址递增到下一行,并且再次在方框604开始所述搜索过程。如果发现分支,则在方框610进行预测时FIT写入,如参考图7进一步描述的那样。在方框612,判定FIT搜索是否与BTB搜索同步。对于来自BTB搜索级别n的预测,每当FIT BTB指针树214具有来自同一搜索级别n的FIT搜索的结果时,搜索便会同步。在两种情况下,如果在方框614和616预测跳转分支,则分别在方框618和620使用预测的目标地址重新索引BTB搜索。如果在方框614和616预测不跳转分支,则分别在方框622和624使用顺序地址重新索引BTB搜索。如果在方框612,FIT搜索不与BTB搜索同步,则在方框604,所述搜索过程继续未在FIT控制下。如果在方框612,FIT搜索与BTB搜索同步,则在方框626,所述搜索过程在FIT控制下继续,如参考图8进一步描述的那样。
图7示出了当BTB搜索未在FIT控制下时如何进行预测时FIT写入。图7从图6的过程600的方框610继续。在方框702,如果当前预测不属于FIT结构200,则不进行操作,并且在方框704,所述过程流程返回。某些类型的分支可以被定义为没有资格进行FIT加速。一个此类实例是展现多个目标的分支。当识别误预测的目标地址时,可以在BTB204中将指示多目标分支的位写为“1”。当预测这种分支时,可以通过查看多目标分支位的值为1而识别分支不属于FIT结构200。对于属于FIT结构200的分支,如果在方框706,FIT搜索当前不活动,则在方框708,激活FIT搜索。参考图9进一步描述FIT搜索过程。对于属于FIT结构200的预测分支,在方框710,询问FIT CAM206以查看分支是否在FIT结构200中。如果不在,则在方框712,在FIT结构200中安装分支。在方框714,如果前一分支预测也属于FIT结构200,则在方框716,则将从前一分支预测到当前预测分支的FIT指针写入FIT结构200。
图8示出了当在FIT控制下时BTB搜索如何操作。图8从图6的过程600的方框626继续。在方框802,将当前搜索地址保存为“s”。当前搜索级别称为“n”。在方框804,从来自级别n的FIT搜索结果,针对搜索级别n+1重新索引BTB搜索。BTB搜索在BTB204中使用至少2个读取端口,以便在知道级别n搜索的结果之前进行索引。一个读取端口假设级别n不跳转。另一个读取端口假设级别n跳转。如果知道级别n-1预测,则在BTB204中2个读取端口便已足够。如果尚未知道级别n-1预测,则在BTB204中需要4个读取端口。在图10的实例流水线时序1020中,其中图10的BTB搜索流水线1000包括索引周期、look1周期、look2周期、hit1周期、hit2周期以及预测周期,如果在hit2周期中知道预测分支的方向,则对于BTB204而言,2个BTB读取端口便已足够。
在方框806和808,当重新索引时,在FIT结构200活动时未使用的辅助结构(例如MTT216和PHT218)可以被关闭/断电。在MTT216的情况下,对于展现多个目标的分支,排除将它们写入FIT结构200,如前所述。FIT指针210可以包括下一预测分支是否可以使用PHT218的指示。如果曾将下一预测分支写入PHT218,则该指示为“1”。如果已将下一预测分支写入PHT218,则必须为PHT218供电。如果从未将下一预测分支写入PHT218,则PHT218被断电。当在FIT控制下时,如果PHT218因为FIT结构200而被断电,并且BTB204指示过去已将分支写入PHT218,则更新FIT指针PHT使用信息以便与BTB204中的信息匹配。同样,如果FIT结构200指示需要PHT218,但BTB204指示不需要PHT218,则更新FIT指示以便与BTB204的该指示匹配。可能出现此第二种情况的一种方式是:如果分支在一段时间内有资格使用PHT218,但随后通过清除BTB表项的应该针对该分支使用PHT的指示,而将其从PHT218清除。
在方框810,判定针对搜索地址“s”的搜索是否在BTB204行和列中发现FIT结构200所期望的预测。可能出现这种情况的原因是FIT结构200预测不会始终与BTB204的预测匹配,因为将信息写入FIT结构200之后,BTB状态可能更改。此外,FIT结构200如果遇到死端,则沿着预测路径可能没有任何信息。在方框810,如果未在BTB搜索中发现FIT期望的分支,或者当沿着BTB预测路径遇到FIT NULL指针时由于FIT死端而没有FIT期望的分支,则在方框812,使用搜索地址“s”重新索引BTB搜索。流程返回到方框604,其中BTB搜索未在FIT控制下。在方框810,如果在BTB204中发现FIT期望的分支,则在方框626,BTB搜索继续在FIT控制下。当BTB搜索在FIT控制下时,仅在FIT指定的列中检测到BTB命中。
图9示出了如何进行FIT搜索。如先前参考图7所述,根据当未在FIT控制下搜索BTB204时发现属于FIT结构200的预测,并且FIT搜索尚未活动,在图7的方框708启动FIT搜索。当FIT搜索活动时,在图9的方框902,搜索FIT结构200以获得当前搜索级别。当启动时,FIT搜索地址是对应于预测分支的BTB204行和列的FIT索引。每当来自被搜索的FIT表项的任何指针有效(非NULL)时,便会存在FIT命中。在方框904,如果没有命中,则这是FIT死端,并且在方框906,停止FIT搜索。在方框904,如果存在命中,则在方框908,只要BTB没有太过于落后(在预定数量的搜索级别内),则在方框910,递增FIT搜索级别,并且针对所有相关命中重新索引FIT。因此,FIT结构200需要多个读取端口。为了实现图10中所示的实例流水线时序1050,FIT中的4个读取端口便已足够。这可以导致多达8个命中,其表示搜索级别n+1中来自搜索级别n的分支。针对搜索级别n-2的预测将减少命中数量。如果BTB204尚未提供来自搜索级别n-2的预测,则在方框908,BTB204太过于落后。在这种情况下,仍然不能重新索引FIT结构200。在每个周期中,执行重新评估以判定BTB搜索是否赶上。可以将来自FIT搜索的BTB索引指针和节电信息存储在FIT BTB指针树214中。
图10示出了BTB搜索流水线1000的实例分支预测流水线时序1020(没有FIT)、1050(具有FIT)。在该实例中,流水线时序1020没有FIT,在预测分支(跳转或不跳转)上,在初始索引之后的4个周期(周期4与周期0)重新索引BTB204。这在以下操作之后进行:已读取BTB204和辅助预测数组(例如PHT218和MTT216),已发现预测分支,并且已获得方向和目标预测。BTB搜索流水线1000的该时序1020每4个周期提供一个分支预测。FIT使重新索引加速2个周期,如流水线时序1050中所示,从而当预测在FIT结构200中的分支时,每2个周期提供一个分支预测。在知道预测是否跳转第一分支(周期2)之前,进行重新索引。因此,使用来自FIT结构200的BTB索引信息,沿着两个路径索引BTB204。
图11示出了FIT搜索流水线1100的实例流水线时序1102,其与图10中的BTB搜索流水线1000的流水线时序1050相对应。在f0周期中,索引FIT指针210。在f1周期中,从FIT结构200中读出结果。在f2周期中,针对下一搜索级别重新索引FIT结构200。在该实例中,FIT结构200包含4个读取端口。在f1周期内,将FIT搜索的结果写入FIT BTB指针树214。对于搜索级别0,f0周期在周期0处发生,f1周期在周期1处发生,f2周期在周期2处发生。对于搜索级别1,f0周期在周期2处发生,从而在时间上与搜索级别0的周期f2重叠,而搜索级别1的f2周期在周期4处发生。对于搜索级别2,f0周期在周期4处发生,从而在时间上与搜索级别1的周期f2重叠,而搜索级别2的f2周期在周期6处发生。
图12示出了实例FIT BTB指针树214,其用于支持图10和11的BTB搜索流水线1000和FIT搜索流水线1100。在来自FIT搜索流水线1100的f1周期中,将FIT搜索结果写入级31202。将级31202信息写入级21204、级11206或级01208,具体取决于BTB搜索的状态。同样,将级21204写入级11206或级01208。将级11206写入级01208。每个级1202-1208表示一个搜索级别。级01208表示已经预测的搜索级别(过去预测),也称为搜索级别x。级11206包含来自搜索级别x的FIT搜索的FIT结果。因此,级11206包含来自搜索级别x的NotTaken和Taken FITBTB指针。这是用于针对搜索级别x+1进行索引的索引信息。同样,级21204包含从搜索级别x+1到级别x+2的FIT BTB指针。
图13示出了用于选择性地使FIT结构无效以实现BTB同步的逻辑。图13的分支预测器118’是图2的分支预测器118的一个备选实施例,并且可以是图2的分支预测器118的扩展。与图2的分支预测器118类似,分支预测器118’包括BTB搜索和命中逻辑202以及BTB204。也与图2的分支预测器118类似,分支预测器118’可以包括(未示出):FIT BTB指针树214、MTT216以及PHT218。图13中示出了FIT结构1300的一部分,该部分包括FIT CAM1306和FIT指针1310。FIT CAM1306和FIT指针1310与图2的FIT CAM206和FIT指针210类似,但由其它无效逻辑更新/修改。分支预测器118’还包括FIT安装和更新逻辑1308、完成逻辑1320、BTB写入时使FIT无效(类型1)的无效逻辑1322、意外分支时使FIT无效(类型2)的无效逻辑1324,以及FIT替换时使FIT无效(类型3)的无效逻辑1326。类型1无效逻辑1322可以使FIT CAM1306和FIT指针1310中的表项无效。类型2和类型3无效逻辑1324和1326可以使FIT指针1310中的表项无效。类型1和类型2无效逻辑1322和1324由完成逻辑1320控制。类型3无效逻辑1326由FIT安装和更新逻辑1308控制。类型1和2在BTB写入BTB204时发生,它们可以在完成时发生,但不需要如此。类型3无效在FIT安装时发生,它将替换/覆盖旧的FIT表项。类型1、类型2以及类型3无效逻辑1322、1324以及1326可以并行实现。
FIT CAM1306的表项格式可以与针对图4的FIT CAM表项400示出的表项格式相同。同样,FIT指针1310的表项格式可以与针对图4的FIT指针表项420示出的表项格式相同。此外,图4的FIT CAM有效字段402指示关联的FIT表项是否有效。不跳转指针有效字段422和跳转指针有效字段426指示关联指针的有效性,其中无效指针可以表示为NULL。类型1、类型2以及类型3无效逻辑1322、1324以及1326可以修改有效字段402、422以及426,以便选择性地使FIT表项无效,如在此进一步描述的那样。
图14示出了实现图13的BTB写入时使FIT无效(类型1)的无效逻辑1322的过程1500的一个实例。响应于BTB写入,发生类型1FIT无效。在方框1502,将BTB写入BTB204(这可以是替换旧BTB表项的新安装,或者是更新诸如目标地址之类的预测信息)时,FIT结构1300中引用BTB204中的该位置的信息变得陈旧。为了使任何这种信息无效,在方框1504,使用BTB行和列索引访问FIT CAM1306,以便确定覆盖的BTB表项是否在FIT结构1300中。如果FIT CAM1306中的表项有效并且与BTB写入具有相同的BTB行和列,则在方框1506,发生有效CAM匹配。这种CAM查找还提供对应的FIT索引。如果对应的FIT索引在FIT结构1300中,则在方框1510,使对应的FIT CAM有效字段402无效。此外,将从CAM查找返回的FIT索引与FIT指针表1310中的所有FIT指针值相比较。在方框1512,使所有匹配的有效FIT指针无效。例如,可以将对应的不跳转指针有效字段422和/或跳转指针有效字段426设置为0。在方框1506,如果未在FIT CAM1306中发现有效匹配,则在方框1508,过程1500完成。
为了更好地通过实例示出类型1无效逻辑1322和图14的过程1500,考虑参考表1和2以及图5描述的前一实例作为BTB204的起始点,并且FIT CAM1306和FIT指针1310的状态与FIT CAM206和FIT指针210的状态对齐,并相应地设置了有效性。假设进行BTB写入,该写入在BTB204中使用分支“F”替换分支“C”。在表1中,分支C(节点C506)在BTB行200、列1中。在FIT CAM1306中执行查找。在FIT CAM索引2中发现有效匹配。因此,使FIT CAM索引2无效。在FIT指针1310中,来自FIT索引0的跳转指针指向FIT索引2(对于C506);因此,使FIT索引0处的跳转指针无效。表3和4提供了根据在BTB204中由分支“F”替换分支“C”,执行类型1无效逻辑1322之后的BTB204和FIT结构1300的状态的实例。图15示出了从基于图5的树500的树1600删除节点C506。
Figure BDA00003331247300171
表3—由分支“F”替换分支“C”之后的实例BTB状态
Figure BDA00003331247300172
Figure BDA00003331247300181
表4—分支“C”无效之后的实例FIT状态
图16示出了实现图13的意外分支时使FIT无效(类型2)的无效逻辑1324的过程1700的一个实例。响应于沿着FIT预测路径遇到意外分支,发生类型2FIT无效。意外分支是BTB204没有为其提供预测的分支。如果从未在BTB204中安装分支,则可能发生这种情况。如果导致预测的陈旧FIT指针缺失,则也可能发生这种情况。在方框1702和1704,完成由FIT结构1300加速的正确预测的分支,在方框1706,分支沿着预测路径具有有效的FIT指针,在方框1708,保存下一FIT指针,并且在方框1710,过程1700完成。在方框1712,如果下一完成的分支是属于BTB204的意外分支(例如已解决的跳转分支),则发生类型2FIT无效。在方框1714,判定是否存在保存的下一FIT指针。在方框1716,使具有与保存的下一FIT指针值匹配的值的任何有效FIT指针无效;否则,在方框1718,过程1700完成。如果在方框1706,FIT结构1300没有有效的下一FIT指针,或者在方框1712,没有意外分支,或者如果执行方框1716,则在方框1720,清除任何先前保存的下一FIT指针,并且在方框1710,过程1700完成。
为了更好地通过实例示出类型2无效逻辑1324和图16的过程1700,考虑参考表1和2以及图5描述的前一实例作为BTB204的起始点,并且FIT CAM1306和FIT指针1310的状态与FIT CAM206和FIT指针210的状态对齐,并相应地设置了有效性。假设沿着分支“C”(节点C506)的NotTaken路径遇到意外分支“G”。在完成FIT影响的预测出现的分支“C”时,该分支具有有效的下一FIT指针。下一FIT指针的值为3,指向节点D508。保存下一FIT指针值。在完成意外跳转分支“G”时,该分支属于BTB204并具有保存的下一FIT指针。因此,在FIT指针1310中,使所有匹配的有效FIT指针(值=3)无效。具体地说,使从节点C506到节点D508的NotTaken指针无效。表5和6提供了在分支“C”的NotTaken路径上的意外分支“G”之后,执行类型2无效逻辑1324之后的BTB204和FIT结构1300的状态的实例。图17示出了从基于图5的树500的树1800中的节点C506的NotTaken路径删除节点D508。
Figure BDA00003331247300191
表5—意外分支“G”之后的实例BTB状态
Figure BDA00003331247300192
Figure BDA00003331247300201
表6—分支“C”的NotTaken路径上的意外分支“G”之后的实例FIT状态
图18示出了实现图13的FIT替换时使FIT无效(类型3)的无效逻辑1326的过程1900的一个实例。根据向FIT CAM1306中写入新遇到的分支预测(先前未在FIT结构1300中但属于该结构),发生类型3FIT无效。替换算法(例如最近最少使用的(LRU)或伪LRU)选择要删除的FIT表项(例如,牺牲品)。在方框1902,在FIT结构1300中安装新FIT表项。在方框1904,使指向新FIT表项的任何具有匹配指针值的有效指针无效。
为了更好地通过实例示出类型3无效逻辑1326和图18的过程1900,考虑参考表5和6以及图17描述的前一实例作为BTB204的起始点以及FIT CAM1306、FIT BTB指针212和FIT指针1310(基于意外分支“G”)的状态。假设随后将分支“C”(节点C506)预测为不跳转(NotTaken)。然后将分支“G”预测为跳转(Taken)。假设分支“G”有资格安装在FIT结构1300中,将该分支写入选择进行替换的任何一个FIT位置。在该实例中,选择FIT索引0进行替换,该索引是分支“A”(节点A502)的FIT表项。使所有指向FIT索引0的指针无效。具体地说,这些指针是表示分支“B”、“D”和“E”的FIT表项中的跳转指针。将“G”安装到FIT索引0。更新来自分支“C”的NotTaken指针以指向分支“G”。表7提供了执行类型3无效逻辑1326之后的FIT结构1300的状态的实例,其中意外分支“G”替换分支“A”。图19示出了在基于图17的树1800的树2000中,删除节点A502并将节点G2002安装到节点C506的NotTaken路径。
Figure BDA00003331247300211
表7—意外分支“G”替换分支“A”之后的实例FIT状态
图20示出了用于处理器2105中的快速索引树分支预测器的系统2100的框图。在此描述的方法可以以硬件、软件(例如,固件)或它们的组合实现。在一个示例性实施例中,在此描述的方法以硬件实现,该硬件作为专用或通用数字计算机(例如个人计算机、工作站、小型计算机或大型计算机)的微处理器的一部分。因此,系统2100包括通用计算机2101,如图20中所示。
在一个示例性实施例中,在硬件架构方面,如图20中所示,计算机2101包括处理器2105,它是包括图1的处理流水线106以及分支预测器118、118’的处理电路。计算机2101还包括耦合到存储控制器2115的存储器2110,以及一个或多个输入和/或输出(I/O)设备2140、2145(或外围设备),它们以通信方式通过本地输入/输出控制器2135耦合。输入/输出控制器2135例如可以是—但不限于—一条或多条总线或其它有线或无线连接,如本领域公知的那样。输入/输出控制器2135可以具有其它元件(为简单起见而被省略),例如控制器、缓冲器(高速缓存)、驱动器、中继器和接收器,以实现通信。此外,本地接口可以包括地址、控制和/或数据连接以便在上述组件之间实现适当的通信。
处理器2105是用于执行软件(具体地说,存储在存储装置2120(例如高速缓存存储装置)或存储器2110中的软件)的硬件设备。处理器2105可以是任何定制或商用处理器、中央处理单元(CPU)、与计算机2101关联的多个处理器之间的辅助处理器、基于半导体的微处理器(以微芯片或芯片组的形式)、宏处理器,或者通常用于执行指令的任何设备。
存储器2110可以包括以下各项的任何一个或组合:易失性存储元件(例如,随机存取存储器(RAM,例如DRAM、SRAM、SDRAM等))和非易失性存储元件(例如,ROM、可擦式可编程只读存储器(EPROM)、电可擦式可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁带、紧凑盘只读存储器(CD-ROM)、磁盘、软盘、盒带、卡带等)。此外,存储器2110可以包括电、磁、光和/或其它类型的存储介质。要指出的是,存储器2110可以具有分布式架构,其中各种组件可以彼此远离,但可以由处理器2105访问。
存储器2110中的指令可以包括一个或多个单独程序,每个程序包括用于实现逻辑功能的可执行指令的有序列表。在图20的实例中,存储器2110中的指令包括合适的操作系统(O/S)2111。操作系统2111基本上控制其它计算机程序的执行,并且提供调度、输入输出控制、文件和数据管理、存储器管理以及通信控制和相关服务。
在一个示例性实施例中,常规键盘2150和鼠标2155可以连接到输入/输出控制器2135。其它输出设备(例如I/O设备2140、2145)可以包括输出设备,例如但不限于打印机、扫描仪、麦克风等。最后,I/O设备2140、2145可以还包括传送输入和输出的设备,例如但不限于网络接口卡(NIC)或调制器/解调器(用于访问其它文件、设备、系统或网络)、射频(RF)或其它收发器、电话接口、桥接器、路由器等。系统2100可以还包括连接到显示器2130的显示控制器2125。在一个示例性实施例中,系统2100可以还包括网络接口2160以便耦合到网络2165。网络2165可以是基于IP的网络,以便通过宽带连接在计算机2101和任何外部服务器、客户机等之间通信。网络2165在计算机2101和外部系统之间发送和接收数据。在一个示例性实施例中,网络2165可以是由服务提供商管理的受管IP网络。网络2165可以以无线方式实现,例如使用无线协议和技术(例如WiFi、WiMax等)。网络2165还可以是分组交换网络,例如局域网、广域网、城域网、因特网或其它类似类型的网络环境。网络2165可以是固定无线网络、无线局域网(LAN)、无线广域网(WAN)、个人区域网络(PAN)、虚拟专用网络(VPN)、内联网或其它合适的网络系统,并且包括用于接收和发送信号的设备。
如果计算机2101是个人电脑、工作站、智能设备等,则存储器2110中的指令可以还包括基本输入输出系统(BIOS)(为简单起见而被省略)。BIOS是一组必需软件例程,可在启动时初始化和测试硬件,启动OS2111,并支持硬件设备之间的数据传输。BIOS存储在ROM中,以便可以在激活计算机2101时执行BIOS。
当计算机2101操作时,处理器2105被配置为取回并执行存储在存储器2110中的指令,以便向存储器42传送数据和从存储器42接收数据,并且总体上根据指令控制计算机2101的操作。
在一个示例性实施例中,其中图2的分支预测器118和/或图13的分支预测器118’以硬件实现,可以使用以下技术的任何一种或组合(每种技术都是本领域公知的)实现在此描述的方法和过程:具有用于针对数据信号实现逻辑功能的逻辑门的离散逻辑电路(多个)、具有适当的组合逻辑门的专用集成电路(ASIC)、可编程门阵列(多个)(PGA)、现场可编程门阵列(FPGA)等。
所属技术领域的技术人员知道,本发明的一个或多个方面可以实现为系统、方法或计算机程序产品。因此,本发明的一个或多个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,本发明的一个或多个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读存储介质。计算机可读存储介质例如可以是—但不限于—电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
现在参考图21,在一个实例中,计算机程序产品2200例如包括一个或多个存储介质2202,其中介质可以是有形和/或非瞬时性的,以便在其上存储计算机可读程序代码装置或逻辑2204,从而提供和促进在此描述的实施例的一个或多个方面。
当在有形介质(包括但不限于电子存储模块(RAM)、闪存、紧凑盘(CD)、DVD、磁带等)上创建和存储时,程序代码通常称为“计算机程序产品”。计算机程序产品介质通常可由处理电路(优选地在计算机系统中)读取,以便由处理电路执行。可以例如使用编译器或汇编器创建这种程序代码以便汇编指令,当执行所述指令时,执行本发明的各方面。
各示例性实施例包括一种使用快速索引树(FIT)实现加速分支预测的系统、方法和计算机程序产品。所述系统包括分支目标缓冲器、FIT结构以及处理电路,所述处理电路被配置为执行一种方法。所述方法包括确定要在FIT控制下执行所述分支目标缓冲器的搜索。保存用于所述分支目标缓冲器的搜索的当前搜索地址。在所保存的当前搜索地址处搜索所述分支目标缓冲器以获得分支预测。根据从所述FIT结构读取下一搜索级别的预测分支的分支跳转和分支不跳转路径,确定FIT下一搜索地址。根据所述FIT下一搜索地址,重新索引所述分支目标缓冲器的搜索。确定在所保存的当前搜索地址处的搜索是否查找到所述分支预测。根据在所保存的当前搜索地址处的搜索查找到所述分支预测,使用基于所述FIT下一搜索地址设置的当前搜索地址,在FIT控制下继续所述分支目标缓冲器的搜索。根据在所保存的当前搜索地址处的搜索无法查找到所述分支预测,使用所保存的当前搜索地址重新索引所述分支目标缓冲器的搜索,并在没有FIT控制的情况下执行所述分支目标缓冲器的搜索。
在一个实施例中,所述系统的所述处理电路还被配置为根据确定要在FIT控制下执行所述分支目标缓冲器的搜索,断开包括多目标表和模式历史表中的一个或多个的辅助结构。
在一个实施例中,所述FIT结构包括:FIT内容可寻址存储器,其用于在分支目标缓冲器位置与FIT位置之间进行转换;分支目标缓冲器指针,其用于当所述分支目标缓冲器的搜索在FIT控制下时,针对所述分支跳转和分支不跳转路径重定向所述分支目标缓冲器的搜索;以及FIT指针,其用于针对所述分支跳转和分支不跳转路径重定向所述FIT结构的搜索。在一个实施例中,所述系统的所述处理电路还被配置为根据确定在没有FIT控制的情况下执行所述分支目标缓冲器的搜索,确定是否发现属于所述FIT结构的分支。可以根据确定FIT搜索不活动并且发现属于所述FIT结构的分支,启动FIT搜索。根据确定发现属于所述FIT结构的分支并且未在所述FIT内容可寻址存储器中标识所述分支,可以在所述FIT结构中安装所述分支。根据确定在所述FIT内容可寻址存储器中标识所述分支并且导向所述分支的前一分支属于所述FIT结构,更新所述FIT结构以链接所述前一分支和所述分支。在一个实施例中,所述系统的所述处理电路还被配置为确定所述分支目标缓冲器的搜索是否与所述FIT搜索同步。可以根据是否跳转所述分支,重新索引所述分支目标缓冲器的搜索。根据确定所述分支目标缓冲器的搜索与所述FIT搜索同步,在FIT控制下执行所述分支目标缓冲器的搜索。
在一个实施例中,所述系统的所述处理电路还被配置为搜索所述FIT结构以获得当前搜索级别,并确定用于当前级别的FIT表项中的一个或多个指针是否有效。可以根据确定用于当前级别的FIT表项中的指针无效,停止所述FIT搜索。在一个实施例中,所述系统的所述处理电路还被配置为确定是否在预定数量的搜索级别内接收到来自所述分支目标缓冲器的预测。根据确定在所述预定数量的搜索级别内接收到来自所述分支目标缓冲器的预测,递增所述当前搜索级别,并根据所递增的当前搜索级别重新索引所述FIT结构。
在一个实施例中,所述系统的所述处理电路还被配置为根据确定在所述分支目标缓冲器中写入表项,访问所述FIT内容可寻址存储器以确定所述表项是否在所述FIT结构中。根据确定所述表项在所述FIT结构中,根据对应于所述FIT内容可寻址存储器中的所述表项的FIT CAM有效字段,确定所述表项是否是有效匹配。根据确定所述表项有效,使所述FIT内容可寻址存储器中的所述表项以及与所述表项关联的所有匹配FIT指针无效。
在一个实施例中,所述系统的所述处理电路还被配置为根据确定使用有效FIT指针沿着预测的路径完成分支,保存下一FIT指针。根据确定下一完成的分支是属于所述分支目标缓冲器的意外分支,使与所保存的下一FIT指针匹配的所有有效FIT指针无效。
在一个实施例中,所述系统的所述处理电路还被配置为根据在所述FIT内容可寻址存储器中写入新表项,选择要从所述FIT结构删除的表项。使所述FIT结构中具有要从所述FIT结构删除的所述表项的匹配指针值的任何有效指针无效。
技术效果和优势包括提供快速索引树以提高分支预测吞吐量。FIT通过加速BTB搜索的重新索引,提高超前分支预测器中的分支预测吞吐量。当FIT表项随着BTB和FIT更新而变得陈旧时,无效逻辑选择性地使FIT表项无效。删除陈旧FIT表项可进一步提高性能,因为避免了死端FIT搜索和/或跳过的BTB预测。
在此使用的术语只是为了描述特定的实施例并且并非旨在作为实施例的限制。如在此所使用的,单数形式“一”、“一个”和“该”旨在同样包括复数形式,除非上下文明确地另有所指。还将理解,当在此说明书中使用时,术语“包括”和/或“包含”指定了声明的特性、整数、步骤、操作、元素和/或组件的存在,但是并不排除一个或多个其它特性、整数、步骤、操作、元素、组件和/或其组的存在或增加。
下面权利要求中的对应结构、材料、操作以及所有装置或步骤和功能元件的等同替换,旨在包括任何用于与在权利要求中具体指出的其它元件相组合地执行该功能的结构、材料或操作。出于示例和说明目的给出了对实施例的描述,但所述描述并非旨在是穷举的或是将实施例限于所公开的形式。在不偏离实施例的范围和精神的情况下,对于所属技术领域的普通技术人员来说许多修改和变化都将是显而易见的。实施例的选择和描述是为了最佳地解释原理和实际应用,并且当适合于所构想的特定使用时,使得所属技术领域的其它普通技术人员能够理解具有各种修改的实施例。
可以以一种或多种程序设计语言的任意组合来编写用于执行实施例的各个方面的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
上面参照根据实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了实施例的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其它设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article ofmanufacture)。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令提供实现流程图和/或框图中的一个或多个方框中规定的功能/动作的过程。
附图中的流程图和框图显示了根据不同实施例的系统、方法和计算机程序产品的可能实现的体系结构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

Claims (15)

1.一种使用快速索引树FIT实现加速分支预测的系统,所述系统包括:
分支目标缓冲器;
FIT结构;以及
处理电路,其被配置为执行一种方法,所述方法包括:
确定要在FIT控制下执行所述分支目标缓冲器的搜索;
保存用于所述分支目标缓冲器的搜索的当前搜索地址;
在所保存的当前搜索地址处搜索所述分支目标缓冲器以获得分支预测;
根据从所述FIT结构读取下一搜索级别的预测分支的分支跳转和分支不跳转路径,确定FIT下一搜索地址;
根据所述FIT下一搜索地址,重新索引所述分支目标缓冲器的搜索;
判定在所保存的当前搜索地址处的搜索是否查找到所述分支预测;
根据在所保存的当前搜索地址处的搜索查找到所述分支预测,使用基于所述FIT下一搜索地址设置的当前搜索地址,在FIT控制下继续所述分支目标缓冲器的搜索;以及
根据在所保存的当前搜索地址处的搜索无法查找到所述分支预测,使用所保存的当前搜索地址重新索引所述分支目标缓冲器的搜索,并在没有FIT控制的情况下执行所述分支目标缓冲器的搜索。
2.根据权利要求1的系统,其中所述处理电路还被配置为执行:
根据确定要在FIT控制下执行所述分支目标缓冲器的搜索,断开包括多目标表和模式历史表中的一个或多个的辅助结构。
3.根据权利要求1的系统,其中所述FIT结构进一步包括:FIT内容可寻址存储器,其用于在分支目标缓冲器位置与FIT位置之间进行转换;分支目标缓冲器指针,其用于当所述分支目标缓冲器的搜索在FIT控制下时,针对所述分支跳转和分支不跳转路径重定向所述分支目标缓冲器的搜索;以及FIT指针,其用于针对所述分支跳转和分支不跳转路径重定向所述FIT结构的搜索。
4.根据权利要求3的系统,其中所述处理电路还被配置为执行:
根据确定要在没有FIT控制的情况下执行所述分支目标缓冲器的搜索,判定是否发现属于所述FIT结构的分支;
根据确定FIT搜索不活动并且发现属于所述FIT结构的分支,启动FIT搜索;
根据确定发现属于所述FIT结构的分支并且未在所述FIT内容可寻址存储器中标识所述分支,在所述FIT结构中安装所述分支;
根据确定在所述FIT内容可寻址存储器中标识所述分支并且导向所述分支的前一分支属于所述FIT结构,更新所述FIT结构以链接所述前一分支和所述分支;
确定所述分支目标缓冲器的搜索是否与所述FIT搜索同步;
根据是否跳转所述分支,重新索引所述分支目标缓冲器的搜索;以及
根据确定所述分支目标缓冲器的搜索与所述FIT搜索同步,在FIT控制下执行所述分支目标缓冲器的搜索。
5.根据权利要求4的系统,其中所述FIT搜索进一步包括:
搜索所述FIT结构以获得当前搜索级别;
确定用于当前级别的FIT表项中的一个或多个指针是否有效;
根据确定用于当前级别的FIT表项中的指针均无效,停止所述FIT搜索;
确定是否在预定数量的搜索级别内接收到来自所述分支目标缓冲器的预测;以及
根据确定在所述预定数量的搜索级别内接收到来自所述分支目标缓冲器的预测,递增所述当前搜索级别并根据所递增的当前搜索级别重新索引所述FIT结构。
6.根据权利要求3的系统,其中所述处理电路还被配置为执行:
根据确定已在所述分支目标缓冲器中写入表项,访问所述FIT内容可寻址存储器以确定所述表项是否在所述FIT结构中;
根据确定所述表项在所述FIT结构中,基于与所述FIT内容可寻址存储器中的所述表项对应的FIT CAM有效字段,确定所述表项是否是有效匹配;以及
根据确定所述表项有效,使所述FIT内容可寻址存储器中的所述表项以及与所述表项关联的所有匹配FIT指针无效。
7.根据权利要求3的系统,其中所述处理电路还被配置为执行:
根据确定使用有效FIT指针沿着预测的路径完成分支,保存下一FIT指针;以及
根据确定下一完成的分支是属于所述分支目标缓冲器的意外分支,使与所保存的下一FIT指针匹配的所有有效FIT指针无效。
8.根据权利要求3的系统,其中所述处理电路还被配置为执行:
根据在所述FIT内容可寻址存储器中写入新表项,选择要从所述FIT结构删除的表项;以及
使所述FIT结构中具有要从所述FIT结构删除的所述表项的匹配指针值的任何有效指针无效。
9.一种使用快速索引树FIT实现加速分支预测的计算机实现的方法,所述方法包括:
由计算机确定要在FIT控制下执行分支目标缓冲器的搜索;
保存用于所述分支目标缓冲器的搜索的当前搜索地址;
在所保存的当前搜索地址处搜索所述分支目标缓冲器以获得分支预测;
由所述计算机根据从所述FIT结构读取下一搜索级别的预测分支的分支跳转和分支不跳转路径,确定FIT下一搜索地址;
根据所述FIT下一搜索地址,重新索引所述分支目标缓冲器的搜索;
由所述计算机判定在所保存的当前搜索地址处的搜索是否查找到所述分支预测;
根据在所保存的当前搜索地址处的搜索查找到所述分支预测,使用基于所述FIT下一搜索地址设置的当前搜索地址,在FIT控制下继续所述分支目标缓冲器的搜索;以及
根据在所保存的当前搜索地址处的搜索无法查找到所述分支预测,使用所保存的当前搜索地址重新索引所述分支目标缓冲器的搜索,并在没有FIT控制的情况下执行所述分支目标缓冲器的搜索。
10.根据权利要求9的计算机实现的方法,还包括:
根据确定要在FIT控制下执行所述分支目标缓冲器的搜索,断开包括多目标表和模式历史表中的一个或多个的辅助结构。
11.根据权利要求9的计算机实现的方法,其中所述FIT结构进一步包括:FIT内容可寻址存储器,其用于在分支目标缓冲器位置与FIT位置之间进行转换;分支目标缓冲器指针,其用于当所述分支目标缓冲器的搜索在FIT控制下时,针对所述分支跳转和分支不跳转路径重定向所述分支目标缓冲器的搜索;以及FIT指针,其用于针对所述分支跳转和分支不跳转路径重定向所述FIT结构的搜索。
12.根据权利要求11的计算机实现的方法,还包括:
根据确定要在没有FIT控制的情况下执行所述分支目标缓冲器的搜索,判定是否发现属于所述FIT结构的分支;
根据确定FIT搜索不活动并且发现属于所述FIT结构的分支,启动FIT搜索;
根据确定发现属于所述FIT结构的分支并且未在所述FIT内容可寻址存储器中标识所述分支,在所述FIT结构中安装所述分支;
根据确定在所述FIT内容可寻址存储器中标识所述分支并且导向所述分支的前一分支属于所述FIT结构,更新所述FIT结构以链接所述前一分支和所述分支;
确定所述分支目标缓冲器的搜索是否与所述FIT搜索同步;
根据是否跳转所述分支,重新索引所述分支目标缓冲器的搜索;以及
根据确定所述分支目标缓冲器的搜索与所述FIT搜索同步,在FIT控制下执行所述分支目标缓冲器的搜索。
13.根据权利要求12的计算机实现的方法,其中所述FIT搜索进一步包括:
搜索所述FIT结构以获得当前搜索级别;
确定用于当前级别的FIT表项中的一个或多个指针是否有效;
根据确定用于当前级别的FIT表项中的指针均无效,停止所述FIT搜索;
确定是否在预定数量的搜索级别内接收到来自所述分支目标缓冲器的预测;以及
根据确定在所述预定数量的搜索级别内接收到来自所述分支目标缓冲器的预测,递增所述当前搜索级别并根据所递增的当前搜索级别重新索引所述FIT结构。
14.根据权利要求11的计算机实现的方法,还包括:
根据确定已在所述分支目标缓冲器中写入表项,访问所述FIT内容可寻址存储器以确定所述表项是否在所述FIT结构中;
根据确定所述表项在所述FIT结构中,基于与所述FIT内容可寻址存储器中的所述表项对应的FIT CAM有效字段,确定所述表项是否是有效匹配;
根据确定所述表项有效,使所述FIT内容可寻址存储器中的所述表项以及与所述表项关联的所有匹配FIT指针无效;
根据确定使用有效FIT指针沿着预测的路径完成分支,保存下一FIT指针;以及
根据确定下一完成的分支是属于所述分支目标缓冲器的意外分支,使与所保存的下一FIT指针匹配的所有有效FIT指针无效。
15.根据权利要求11的计算机实现的方法,还包括:
根据在所述FIT内容可寻址存储器中写入新表项,选择要从所述FIT结构删除的表项;以及
使所述FIT结构中具有要从所述FIT结构删除的所述表项的匹配指针值的任何有效指针无效。
CN201310231248.4A 2012-06-12 2013-06-09 使用快速索引树实现加速分支预测的系统和方法 Active CN103488461B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/494,443 2012-06-12
US13/494,443 US9250912B2 (en) 2012-06-12 2012-06-12 Fast index tree for accelerated branch prediction

Publications (2)

Publication Number Publication Date
CN103488461A true CN103488461A (zh) 2014-01-01
CN103488461B CN103488461B (zh) 2016-04-20

Family

ID=49716246

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310231248.4A Active CN103488461B (zh) 2012-06-12 2013-06-09 使用快速索引树实现加速分支预测的系统和方法

Country Status (2)

Country Link
US (1) US9250912B2 (zh)
CN (1) CN103488461B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104463027A (zh) * 2014-08-27 2015-03-25 北京中电华大电子设计有限责任公司 一种实现软件条件分支功耗均衡的方法
WO2017103740A1 (en) * 2015-12-15 2017-06-22 International Business Machines Corporation Auxiliary branch prediction with usefulness tracking
CN108132893A (zh) * 2017-12-06 2018-06-08 中国航空工业集团公司西安航空计算技术研究所 一种支持流水的常量Cache
CN108255744A (zh) * 2017-12-06 2018-07-06 中国航空工业集团公司西安航空计算技术研究所 一种全相联指令Cache
CN109791494A (zh) * 2016-12-13 2019-05-21 国际商业机器公司 使用流长度预测的分支预测器搜索资格
CN109783143A (zh) * 2019-01-25 2019-05-21 贵州华芯通半导体技术有限公司 用于流水线指令流的控制方法和控制设备
CN111124493A (zh) * 2019-12-17 2020-05-08 天津国芯科技有限公司 一种cpu中用于减少程序跳转开销的方法及电路

Families Citing this family (5)

* 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
KR102635965B1 (ko) * 2015-06-26 2024-02-13 삼성전자주식회사 마이크로 프로세서의 프론트 엔드 및 이를 이용한 컴퓨터 구현 방법
US10402200B2 (en) * 2015-06-26 2019-09-03 Samsung Electronics Co., Ltd. High performance zero bubble conditional branch prediction using micro branch target buffer
US10691460B2 (en) 2016-12-13 2020-06-23 International Business Machines Corporation Pointer associated branch line jumps for accelerated line jumps
US11182165B2 (en) 2018-11-19 2021-11-23 International Business Machines Corporation Skip-over offset branch prediction

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5805876A (en) * 1996-09-30 1998-09-08 International Business Machines Corporation Method and system for reducing average branch resolution time and effective misprediction penalty in a processor
CN1328664A (zh) * 1998-09-08 2001-12-26 英特尔公司 利用第二级分支预测表的分支预测的方法和设备
US20030212882A1 (en) * 2002-05-09 2003-11-13 International Business Machines Corporation BTB target prediction accuracy using a multiple target table (MTT)
CN1667570A (zh) * 2004-03-09 2005-09-14 国际商业机器公司 用最近条目队列补充分支目标缓冲器的方法和系统
CN1725175A (zh) * 2004-07-16 2006-01-25 三星电子株式会社 分支目标缓冲器及其使用方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04321130A (ja) * 1991-04-22 1992-11-11 Toshiba Corp 分岐予測装置
US5434985A (en) * 1992-08-11 1995-07-18 International Business Machines Corporation Simultaneous prediction of multiple branches for superscalar processing
US5423048A (en) * 1992-08-27 1995-06-06 Northern Telecom Limited Branch target tagging
US6256729B1 (en) * 1998-01-09 2001-07-03 Sun Microsystems, Inc. Method and apparatus for resolving multiple branches
US6263427B1 (en) * 1998-09-04 2001-07-17 Rise Technology Company Branch prediction mechanism
US6279105B1 (en) * 1998-10-15 2001-08-21 International Business Machines Corporation Pipelined two-cycle branch target address cache
US6912650B2 (en) * 2000-03-21 2005-06-28 Fujitsu Limited Pre-prefetching target of following branch instruction based on past history
US6732260B1 (en) * 2000-03-06 2004-05-04 Intel Corporation Presbyopic branch target prefetch method and apparatus
US6772279B1 (en) * 2002-03-07 2004-08-03 Cypress Semiconductor Corporation Method and apparatus for monitoring the status of CAM comparand registers using a free list and a busy list
US7266676B2 (en) * 2003-03-21 2007-09-04 Analog Devices, Inc. Method and apparatus for branch prediction based on branch targets utilizing tag and data arrays
US8909907B2 (en) 2008-02-12 2014-12-09 International Business Machines Corporation Reducing branch prediction latency using a branch target buffer with a most recently used column prediction

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5805876A (en) * 1996-09-30 1998-09-08 International Business Machines Corporation Method and system for reducing average branch resolution time and effective misprediction penalty in a processor
CN1328664A (zh) * 1998-09-08 2001-12-26 英特尔公司 利用第二级分支预测表的分支预测的方法和设备
US20030212882A1 (en) * 2002-05-09 2003-11-13 International Business Machines Corporation BTB target prediction accuracy using a multiple target table (MTT)
CN1667570A (zh) * 2004-03-09 2005-09-14 国际商业机器公司 用最近条目队列补充分支目标缓冲器的方法和系统
CN1725175A (zh) * 2004-07-16 2006-01-25 三星电子株式会社 分支目标缓冲器及其使用方法

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104463027A (zh) * 2014-08-27 2015-03-25 北京中电华大电子设计有限责任公司 一种实现软件条件分支功耗均衡的方法
WO2017103740A1 (en) * 2015-12-15 2017-06-22 International Business Machines Corporation Auxiliary branch prediction with usefulness tracking
GB2562651A (en) * 2015-12-15 2018-11-21 Ibm Auxiliary branch prediction with usefulness tracking
GB2562651B (en) * 2015-12-15 2019-04-10 Ibm Auxiliary branch prediction with usefulness tracking
CN109791494A (zh) * 2016-12-13 2019-05-21 国际商业机器公司 使用流长度预测的分支预测器搜索资格
CN109791494B (zh) * 2016-12-13 2023-08-11 国际商业机器公司 分支预测器搜索资格的流长度预测方法及系统
CN108132893A (zh) * 2017-12-06 2018-06-08 中国航空工业集团公司西安航空计算技术研究所 一种支持流水的常量Cache
CN108255744A (zh) * 2017-12-06 2018-07-06 中国航空工业集团公司西安航空计算技术研究所 一种全相联指令Cache
CN109783143A (zh) * 2019-01-25 2019-05-21 贵州华芯通半导体技术有限公司 用于流水线指令流的控制方法和控制设备
CN109783143B (zh) * 2019-01-25 2021-03-09 贵州华芯通半导体技术有限公司 用于流水线指令流的控制方法和控制设备
CN111124493A (zh) * 2019-12-17 2020-05-08 天津国芯科技有限公司 一种cpu中用于减少程序跳转开销的方法及电路

Also Published As

Publication number Publication date
US20130332713A1 (en) 2013-12-12
US9250912B2 (en) 2016-02-02
CN103488461B (zh) 2016-04-20

Similar Documents

Publication Publication Date Title
CN103488461B (zh) 使用快速索引树实现加速分支预测的系统和方法
US10185570B2 (en) Dynamic thread sharing in branch prediction structures
CN102110011B (zh) 局部仿真环境中从源指令集架构代码向转换后代码的转换
JP6796468B2 (ja) 分岐予測器
CN108351777B (zh) 用于管理处理系统中的辅助分支预测的方法和系统
US9378020B2 (en) Asynchronous lookahead hierarchical branch prediction
JP4027620B2 (ja) 分岐予測装置、プロセッサ、及び分岐予測方法
CN101460922B (zh) 滑动窗口、基于区块的分支目标地址高速缓冲存储器
US9244688B2 (en) Branch target buffer preload table
CN102662640B (zh) 双重分支目标缓冲器和分支目标处理系统及处理方法
JP7034159B2 (ja) ストリーム長予測を使用する分岐予測器検索限定
US10423420B2 (en) Stream based branch prediction index accelerator for multiple stream exits
US8909907B2 (en) Reducing branch prediction latency using a branch target buffer with a most recently used column prediction
US9619385B2 (en) Single thread cache miss rate estimation
US20160011889A1 (en) Simulation method and storage medium
US9250909B2 (en) Fast index tree for accelerated branch prediction
KR102358108B1 (ko) 소스코드 내 cpu 취약점 탐색 방법
US11182165B2 (en) Skip-over offset branch prediction
JP2006134186A (ja) データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant