用最近条目队列补充分支目标缓冲器的方法和系统 【技术领域】
本发明涉及计算机处理系统,并特别涉及通过一队列结构来控制条目插入到分支目标缓冲器(Branch Target Buffer)内,该队列结构也用于在计算机处理系统中在异步的分支预测和指令译码之间产生同步以克服启动迟延效应。
背景技术
微处理器的基本流水线微体系结构每次处理一条指令。一条指令的基本数据流遵循下列步骤:指令取、译码、地址计算、数据读、执行和写回。流水线或管道中的每个阶段按顺序发生,因此,除非一个给定阶段前面的那个阶段进行,否则该给定阶段不会进行。为了对给定的基(base)获得最高的性能,每个周期将有一条指令进入流水线。每当流水线必须被延迟或清除,这都会增加迟延,而该迟延又能通过微处理器执行一个任务的性能监视到。尽管有很多复杂细节可以添加到这种管道设计中,它却建立了与所述本发明相关的分支预测理论的基础。
在指令之间有许多相关性,这阻止了在每一循环新指令都进入管道的最优情形。这些相关性向管道增加了迟延。一种类别的造成迟延地因素涉及分支。当分支被译码时,它可以“被采取”也可以“不被采取”。分支是这样一种指令,它可以或者进行到下一个相继的指令,这是“不被采取”,或者分支到另一个指令地址,就是“被采取”,并在一个不同的代码序列上执行。
在译码期间,分支被检测,并且必须等待被解决,以便知道指令流正确的行进方向。由于等待可能多个流水线阶段以便分支解决行进的方向,迟延被加进流水线。为了克服等待分支解决的迟延,可预测分支的方向,从而流水线沿着“被采取”或者“不被采取”的路径开始译码。在分支解决时,将被预测的方向和分支实际将采取的方向相比较。如果实际方向和预测的方向相同,那么在这种情况下,等待分支解决的迟延就被从流水线中去出。如果实际方向和预测的方向不同,则译码是沿着不正确路径行进的,并且该路径上位于不正确预测分支方向的指令后面的所有指令都必须被清出流水线,并且该流水线必须在正确的指令地址处重新开始,以开始对给定分支的实际路径进行译码。
由于清空流水线和从头开始所涉及的控制,会存在一个与不正确的预测相关的惩罚,并且与在更进一步译码之前简单地等待分支去解决相比,迟延被加入流水线。通过拥有适当高比率的正确猜测路径,由于猜测出正确的方向从流水线中消除迟延的能力胜过了由于不正确地猜测方向增加到流水线中的迟延。
为了提高与分支预测相关的预测的准确度,可实现一个分支历史表(BHT),它允许根据分支以前行进的方向的过去行为来猜测该分支的方向。如果分支总是被采取,如子程序返回的情形那样,那么该分支将总被预测为被采取。IF/THEN/ELSE结构在它们的行为中变得更复杂。一分支可能总是“被采取”,有时“被采取”而有时“不被采取”,或者总是“不被采取”。根据一动态分支预测器的实现,将确定分支历史表预测分支的方向做得如何好。
当分支被预测为被采取时,分支的目标将被译码。通过向指令高速缓存做出对于作为给定分支目标的地址的取请求来获得该分支目标。如果目标地址在第一级高速缓存中被找到,则向高速缓存做出的取请求需要最少的迟延。如果在第一级高速缓存中没有命中,则将继续在计算机的存储器和存储设备的整个层级结构中索取,直到得到目标分支的指令文本。因此,任何给定的在译码时检测到的被采取的分支有和它相关的最小迟延,该迟延被添加到流水线处理给定指令所需要的时间量。当取请求在存储器层级结构的第一级中没有成功时,流水线所要付出的迟延惩罚会随着取请求直到命中为止所必须沿该层级结构行进的深度而变得越来越高。为了隐藏与取分支目标相关的迟延的一部分或全部,一分支目标缓冲器(BTB)可以和一个分支历史表并行地工作。
给定一个目前正在从中译码的当前地址,分支目标缓冲器可以从这一点向前寻找包含一个分支的下一个指令地址。随着把分支的指令地址存入分支目标缓冲器,分支的目标也与每个条目一起被存储。由于目标已经被存储,目标的地址在分支被译码之前就可取到。通过在译码之前取目标地址,和高速缓存未命中相关的迟延将被最小化到在取请求和分支目标的译码之间所耗费的时间的程度。
在设计分支目标缓冲器时,可以被存储于其中的分支的数量是确定这种结构有多大益处的方程式的一部分。一般来说,分支目标缓冲器是由处理器中一指令地址的一部分所索引的,并且标记位被存储在分支目标缓冲器中,从而标志位必须匹配没有用来索引的剩下的地址位。为了提高分支目标缓冲器的效率,可以使创建的分支目标缓冲器具有大于1的结合性(associativity)。通过生成大于1的结合性,对于一给定的索引可以有多个分支/目标对被存入该阵列。为了确定哪个为正确的条目(如果有这样的条目的话),使用标志位来从为一给定索引存储的多个条目中选择至多一个条目。
当分支在译码时被确定并且没有被异步的分支目标缓冲器/分支历史表机制提前发现时,这个分支被判定为一个意外分支。意外分支是没有被动态分支预测逻辑在译码之前发现的任何分支。一个分支没有被分支预测逻辑预测到是因为它没有被在分支目标缓冲器/分支历史表中找到。一个分支没有被在分支目标缓冲器/分支历史表找到有两个原因。如果一个分支没有被装入分支目标缓冲器/分支历史表,就不能找到它,因为没有地方找到它。第二种情况是当一个分支存在于分支目标缓冲器/分支历史表中,然而,没有出现充足的处理时间来使搜索在它被译码之前找到它。一般来说,分支预测搜索算法可以有很高的吞吐量,然而,相对于指令译码的时间段,开始一搜索所要求的迟延时间可能相当长,比在流水线中启动指令更长。
每当在译码时检测到一个分支,如果该分支是个意外分支,则在随后的时间知道它的目标和方向后,可将它写入分支目标缓冲器和分支历史表。在把该条目写入表中后,下次在所指定的分支的区域搜索时就能很快地找到该条目。
当一个分支存在于分支目标缓冲器/分支历史表中,但迟延效应使该分支不能被及时找到,这个分支就被当作一个意外分支,因为这个分支和没有在表中的分支没有什么区别。在确定分支的目标和方向后,它将被写入表中。把分支输入表中的一个标准方法是把其放入到最近最少使用的给定列中(结合性);从而,那些最近被访问的分支就会保留在表中。写之前不读取列以检查重复,因为大量的除了正常操作之外不得不执行的读操作将会足以导致额外的迟延,这种迟延进一步阻止了分支被发现进而被预测;因此这将增加在一系列的代码中意外分支的数量。增加意外分支的数量导致性能降低。为了绕开提高的迟延问题,设计了一个最近条目队列来跟踪进入分支目标缓冲器中的最近条目。通过这个队列的过程,不需要从分支目标缓冲器的额外读操作。此外,这种队列的尺寸与一重复阵列或该给定阵列上的一额外读端口相比在尺寸上有很大不同。第二个全尺寸阵列或额外读端口的空间可被认为是这样的,即这种操作所使用的区域可以更好地被使用于其他地方,以获得更高的性能增益。通过增加一个小的最近条目队列,将该区域保持适中,而同时在一队列和额外读端口之间的性能差别是最小的,如果不是前者更好的话。
在一个分支条目有多个实例的情况下,分支目标缓冲器遇到的一个问题是该分支条目的多个实例可能基于代码循环模式以很高的频率被写入分支目标缓冲器(BTB)中。然而,这却通过为另一个分支的重复条目移除有效条目,妨碍了分支目标缓冲器的性能。因此,显然需要一种防止分支目标缓冲器中一个分支条目的多个实例的方法。
【发明内容】
通过提供最近条目队列来跟踪存储在一个分支目标缓冲器(BTB)中的最近分支/目标数据,克服了现有技术中的缺点,并提供了额外的优点。通过使用一个分支目标缓冲器最近条目队列,任何将被写入分支目标缓冲器中的新的条目会首先和最近条目队列中的条目核对。如果将被写入分支目标缓冲器中的被包含的数据在最近条目队列中是有效的,那么该数据就已经包含在分支目标缓冲器中了。如果数据已经在分支目标缓冲器中,用于该给定条目的将数据写入分支目标缓冲器的操作将被阻止。如果该数据没有被阻止,那么当分支目标缓冲器具有大于1的结合性时,它极可能取代其他有效数据
如上所述,在现有技术的流水线处理器中,基于代码循环模式,可能会以很高的频率将一个分支条目的多个实例写入分支目标缓冲器(BTB)。这通过为另一个分支的重复条目移除有效实例而降低了性能。这还具有导致对于设计的任何数量的结合性,分支目标缓冲器都表现为单结合性设计的效果。
依照这里所述的方法、系统和程序产品,通过跟踪将变为条目的紧密关联的重复项,监视结构被延伸到不仅阻止分支目标缓冲器的写入,而且当这种操作将发生时附加地通知指令译码。在大多数重复条目的情况中,该事件是由一指令循环启动的,在该指令循环中,第一个分支由于分支预测启动迟延没有被及时预测,从而也导致其他每一个迭代不能被及时预测。通过能够预测该循环的一个迭代,分支目标缓冲器能够超前并因此可能预测该分支点的所有未来迭代。通过阻止译码操作而在流水线中产生一个延迟,分支预测逻辑能够超前,从而让流水线以它所能够的效率运行。这种操作可以通过更高性能被看到,这种更高性能当一个应用在更短的时间段内完成一个任务时,可从外部被看到。
除了阻止重复的数据块被写入分支目标缓冲器外,最近条目队列还起到能够延迟译码和进行加速查找的目的。每当一分支被重复采取并且每个迭代没有被分支目标缓冲器预测,最近条目队列就提供必要数据去检测它,以使译码可被迟延,从而让分支预测逻辑跟上机器的译码流水线。
最后,由于队列是一个非常小的结构,所以和在阵列中查找一个条目所花费的时间相比,它具有极小的迟延;因此,与分支目标缓冲器相比,当使用最近写条目队列时,通过分支预测逻辑的分支检测能在更少的时间/周期中完成。给定这样一种模式,阻碍分支目标缓冲器的特定的紧循环预测情形可通过最近条目队列被克服,从而使这些循环可被预测。成功地预测这种循环从流水线中消除了迟延,从而提高了这种机器的整个的性能。这些性能提高通过减少计算机程序完成当前任务所需要的时间而被注意到。
运行计算机的方法、用于运行计算机的程序产品和具有带有分支目标缓冲器的流水线处理器的计算机通过生成与分支目标缓冲器并行的一最近条目队列达到这些目的。最近条目队列包括一组分支转移缓冲器条目,这些条目被组织成一先进先出队列,并且最好是一对于读取全相联的先进先出队列。
在实现所述的方法时,一个将被写入分支目标缓冲器中的条目与最近条目队列中的有效条目进行比较,和最近条目队列中的条目匹配的条目被阻止写入分支目标缓冲器。当一个条目被写入分支目标缓冲器时,它也被写入最近条目队列。
进一步的步骤涉及在分支目标缓冲器中搜索下一个被预测分支,并且当分支目标缓冲器被索引时,评估最近条目队列。最近条目队列维护高达分支目标缓冲器的结合性的深度,从而当分支目标缓冲器被索引时,最近条目队列的位置被输入到比较逻辑。对于一匹配的分支,与搜索分支目标缓冲器输出并行地,搜索最近条目队列深度,其中命中检测逻辑支持分支目标缓冲器的结合性。当在分支目标缓冲器中搜索下一个被预测的分支时,搜索策略用最近条目队列的一子集作为分支目标缓冲器的一子集,并优选地快速索引最近遇到的分支。该发明进一步的方面包括搜索整个最近条目队列来阻止重复分支目标缓冲器写入。
该发明进一步的方面包括搜索最近条目队列来检测循环分支。这可通过比较分支来确定其是否最近被写入队列来实现。更进一步的操作包括确定分支是否是向后的分支来检测一个循环分支。这包括首先检测到一个没有预测到的循环分支,和随后延迟译码。将译码延迟直到一个固定数量的周期,或者直到分支目标缓冲器预测到一个分支。
所述方法、系统和程序产品的另一方面是在最近条目队列中存放对分支目标缓冲器的写入,包括延迟写入和把该写入放入最近条目队列,并且当其分支目标缓冲器写入被临时存放在最近条目队列中时还检测被预测分支。
与上面概述的方法对应的系统和计算机程序产品也在此进行了描述,并提出了权利要求。
通过本发明的技术也实现了其他的特征和优点。本发明其他一些实施例和方面在下面被详细描述并被认为是所要保护的本发明的一部分。为了更好地理解本发明及其优点和特征,请参见说明书和附图。
【附图说明】
本发明多种实例、特征和优点在后面结合附图的详细说明书中描述,
其中:
图1示出了一分支目标缓冲器布局的一示例。
图2示出了包含在分支目标缓冲器和最近条目队列中的单个条目中的数据的一示例。
图3示出了一微处理器流水线的一示例。
图4示出了带有比较逻辑的分支目标缓冲器最近条目队列的一示例。
图5示出了用于写队列访问和分支目标缓冲器写入的时间表的一示例。
图6示出了最近条目队列修改分支目标缓冲器命中检测逻辑的一示例。
图7示出了最近条目队列延迟译码的状态机器描述的一示例。
【具体实施方式】
被认为是发明的主题在本说明书结尾部分的权利要求书中被特别地指出并清楚地要求保护。本发明前面所述以及其他的目标、特征和优点,通过下面结合附图的详细描述将很清楚,其中:
本发明涉及一种用于实现补充如图1一般所示的分支目标缓冲器(BTB)100的最近条目队列的方法和装置。通过利用如图4所示的分支目标缓冲器最近条目队列400,获得三方面的好处:1)消除大多数能导致在分支目标缓冲器中出现重复条目的情形;2)当流水线冷起动或者出现分支错误后,通过分支目标缓冲器的分支检测迟延最初把分支目标缓冲器放置在流水线的译码之后时,将分支预测和译码之间的异步接口实现半同步的能力。3)对于被频繁访问的分支,在更少的循环中访问它们的能力,从而提高了分支预测逻辑的吞吐量,进而提高了图3中的给定微处理器流水线300的整个的吞吐量,该流水线包括译码310、地址计算320、高速缓存访问330、寄存器访问340、执行和分支解决350、和寄存器写回360。
如图1一般地所示,分支目标缓冲器(BTB)100是一个与微处理器中分支预测逻辑相关的阵列。分支目标缓冲器100负责预测被采取分支的目标预测。例如,给定一64位机器,向一个多相联分支目标缓冲器120、121、122、123馈入某个具有给定范围x:y的指定位的搜索地址110,其中x>0,x<y,并且y<63。这个地址被用来索引分支目标缓冲器中一给定的行。对于该给定的行,数据从每个结合性类120、121、122、123中读出150、151、152、152。包含在分支目标缓冲器的每个条目130(图1)、200(图2)中有三部分主要数据:分支标签210、目标地址220和一有效位230。分支标签210被分成两部分,一高位范围和一低位范围;高位范围用来和高位搜索地址位进行比较。如果存在匹配,那么给定的条目可能是一被预测的分支。除了条目有效外,分支标签的低位范围y+1:63必须出现在搜索地址处或其后,因为目标是在被发送到分支目标缓冲器的搜索地址处或其后找到一被预测的分支。在一给定条目匹配时,有可能在每一个结合性集合中有多个匹配。再次地,低位地址位被用来确定当在初始的搜索地址110处或在其后时哪一个结合性集合120、121、122、123(图1)在最先。当发现匹配时,该信息被传递到微处理器的主流水线,在此流水线将把被预测的分支地址与正在译码阶段310中的指令地址相比较。如果获得这两个地址之间的匹配,那么指令译码310是一被预测的(被采取的)分支。与分支目标缓冲器100发现分支并行地,在行进中发出一个对于目标地址的取请求。理想地在分支译码时该取请求就已从指令高速缓存中返回。给定所述的情况,在分支的目标被计算的周期320,目标将能译码;因为目标已经通过高速缓存被获得了。如果分支没有被分支目标缓冲器预测,则对一目标的取请求,直到分支已译码并且目标已被计算320之前,不能够向高速缓存做出。因此,分支和目标预测从微处理器的流水线中消除了迟延。
当一个分支没有被预测到,可能遇到一个意外分支710(图7),并且它将被写进分支目标缓冲器100(图1)和610(图6),以使它在下一次出现时,在执行时间段的分支解决350认定知道了分支的目标和分支解决的方向后,能被预测。利用例如这个时间段的已知信息并把分支写入分支目标缓冲器610已经成为标准。一分支能成为意外分支有两个原因:它不在队列中,或者它在队列中但没有被及时找到。在后一种情况下,分支理想地不应被再次加入分支目标缓冲器610,因为这样做很可能会替换另外某个与将被写入分支目标缓冲器610中的重复条目不同的好条目。通过使用500最近条目队列400、620,每当一个新的条目140将被写入510分支目标缓冲器610,首先将它和最近条目队列中的条目420、421相比较430、431、720。如果它和最近条目队列620中的一个条目匹配440、520,那么条目140、410被阻止450写入分支目标缓冲器610,因为它已经存在于分支目标缓冲器610的某个地方。如果条目没有位于最近条目队列420、421、620中,那么条目被写530入分支目标缓冲器610和最近条目队列620中。最近条目队列在先进410、420-先出421(先进先出)的队列结构中工作。所以当一个新的条目被放入队列时,为了给该最新的条目提供空间,队列中最老的条目被移出。如果因为任何原因分支目标缓冲器610中的一条目被要求无效,则必须检查最近条目队列420、421以确定该条目是否也包含在其中。如果该条目在最近条目队列420、421中并且该条目在分支目标缓冲器(610)中被无效,那么该条目在最近条目队列420、421中也必须被无效。
图6(600)示出了最近条目队列620改变分支目标缓冲器610状态的示例。由于最近条目队列620是分支目标缓冲器610的一个相当小的子集,在最近条目队列620中搜索分支/目标对的能力比在分支目标缓冲器610中搜索快很多。在基于搜索索引访问分支目标缓冲器610的给定行的周期,可并行地将最近条目队列620与命中检测标准630相比较。因此,每当开始一个新的搜索,在从分支目标缓冲器610中读的周期,最近条目队列620在同一周期正在对其内容进行比较630。更早一个周期进行命中检测640或搜索匹配的能力,改进了分支预测逻辑对于紧循环分支的迟延系数,在所述紧循环分支中同一分支被重复地访问,并且分支目标缓冲器610本身由于访问分支目标缓冲器阵列610所要求的初始时间而不能跟上。
图7(700)示出了最近条目队列延迟译码的一个状态机器描述的示例。如所示那样,由于分支目标缓冲器610与微处理器流水线300中的指令译码异步地工作,因此对流水线来说,译码310一个可预测但还没有被分支目标缓冲器610找到的分支是可能的。在这种情况下,该分支被认为是一意外分支710,并且在分支的解决350即执行周期后,它将再次被放入分支目标缓冲器610中。在这个被错过的分支是一个循环分支时,它将继续不被预测到,因为在每一次没有找到它的情况后,分支预测逻辑将基于该意外分支710重新开始。在分支已经被最近条目队列620、720检测到440存在于分支目标缓冲器610中,并且该分支是个被采取的分支730,其中该分支以一负偏移量740重复出现的情况下,最近条目队列620能够被用来检测这种情况并且造成该分支后的译码310被延迟760,直到做出通过分支目标缓冲器610的第一个预测,从而可将被预测的分支地址和所有将来的译码相比较。通过在流水线300的译码中产生延迟760,分支的下一个迭代将能被分支目标缓冲器610及时预测。假定一分支目标缓冲器610在启动时可比其一旦运行时有更高的迟延,译码的一次延迟750,760可足以允许分支对于当前循环模式的所有将来迭代能被预测。
本发明的能力可在软件、固件、硬件或其某种组合中实现。
作为一个例子,本发明的一个或多个方面可被包括在具有例如计算机可用介质的一制造物品(例如,一个或多个计算机程序产品)中。这种介质在其中包含了例如用于提供和便利本发明能力的计算机可读代码装置。该制造物品可被包括作为计算机系统的一部分或者单独出售。
另外,可提供至少一个可被机器读取的程序存储装置,该程序存储装置有形地体现了至少一个可被机器执行以完成本发明的能力的指令程序。
这里描述的流程图仅仅是例子。在不脱离本发明思想的情况下,这里所述的图、步骤(或操作)可以有许多变化。例如,步骤可按不同的顺序执行,可以被增加、删除或修改。所有这些变化都被认为是所要求的发明的一部分。
本发明的优先实施例已经在这里被描述,可以理解,不管在现在还是在将来,本领域的技术人员可对本发明作各种的改进或者增强,这些都落入后面权利要求书要求保护的范围。这些权利要求应被解释成主张对前面所述发明的适当保护。