CN101401065B - 用于分支预测的方法和装置 - Google Patents

用于分支预测的方法和装置 Download PDF

Info

Publication number
CN101401065B
CN101401065B CN200780008775.1A CN200780008775A CN101401065B CN 101401065 B CN101401065 B CN 101401065B CN 200780008775 A CN200780008775 A CN 200780008775A CN 101401065 B CN101401065 B CN 101401065B
Authority
CN
China
Prior art keywords
branch
bhr
instruction
circulation
loop
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.)
Expired - Fee Related
Application number
CN200780008775.1A
Other languages
English (en)
Other versions
CN101401065A (zh
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.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
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 Qualcomm Inc filed Critical Qualcomm Inc
Priority to CN201610899970.9A priority Critical patent/CN106997286B/zh
Publication of CN101401065A publication Critical patent/CN101401065A/zh
Application granted granted Critical
Publication of CN101401065B publication Critical patent/CN101401065B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • 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
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers

Abstract

响应于与循环相关联的条件分支指令的性质(例如指示所述分支是循环结束分支的性质),维持所述循环的迭代数目的计数,且将指示所述循环迭代计数的多位值存储于分支历史寄存器(BHR)中。在一个实施例中,所述多位值可包括实际的循环计数,在此情况下,位数目是可变的。在另一实施例中,所述位数目是固定的(例如,两个)且通过与阈值的比较将循环迭代计数映射为固定数目的多位值(例如,四个)中的一者。可针对嵌套循环维持单独迭代计数,且存储于所述BHR中的多位值可指示仅内部循环、仅外部循环或两者的循环迭代计数。

Description

用于分支预测的方法和装置
技术领域
本揭示内容一般而言涉及处理器领域且明确地说涉及一种使用多个位表示分支历史寄存器中的循环分支的方法。
背景技术
微处理器在很多种应用中执行计算任务。几乎总期望改进的处理器性能,以允许通过软件改变而得到更快的操作及/或增加的功能性。在常见的嵌入式应用(例如,便携式电子装置)中,还期望节省功率。
常见的现代化处理器均采用管线式架构,其中每一者具有多个执行步骤的顺序指令在执行时重叠。为得到最大性能,指令应连续地流过管线。致使指令在管线中停止的任何情形均有害地影响性能。如果必须从管线清除并随后重新提取指令,那么性能及功率消耗两者可遭受损失。
通常,所有的真实世界程序均包含条件分支指令,且条件分支指令的实际分支行为通常直至在管线深处评估指令时才能获知。为避免可由等待分支指令的实际评估引起的停止,常见的现代化处理器采用某一形式的分支预测,借此在管线中较早地预测条件分支指令的分支行为。基于预测的分支评估,处理器推测性地提取(预提取)并执行来自预测的地址的指令,所述预测的地址是分支目标地址(如果预测采用所述分支)或所述分支指令之后的下一顺序地址(如果预测不采用所述分支)。在确定实际分支行为时,如果分支被错误预测,那么必须从管线清除推测性地提取的指令,且从正确的下一地址提取新的指令。响应于错误的分支预测来预提取指令不利地影响处理器性能及功率消耗。因此,期望改进分支预测的准确性。
已知的分支预测技术包含静态及动态预测两者。一些分支指令的可能行为可由编程器及/或编译器静态地预测。一个实例是错误检查例行程序。常见的代码正确地执行,且错误极少。因此,实施“错误分支”功能的分支指令将在极高的时间百分比中评估为“不采用”。此指令可包含操作代码中的静态分支预测位,所述静态分支预测位是由知道分支条件的常见最可能结果的编程器或编译器设定。
动态预测一般是基于正预测的分支指令及/或相同代码中的其它分支指令的分支评估历史(且在一些情况下,分支预测准确性历史)。对实际代码的广泛分析指示,不久以前的分支评估模式可能是未来分支指令的评估的良好指示符。
图1中所描绘的一种已知形式的动态分支预测利用分支历史寄存器(BHR)100来存储以前的n个分支评估。在简单的实施方案中,BHR 30包括移位寄存器。移入常见的最近分支评估结果(例如,1指示采用且0指示不采用),从而替代寄存器中最旧的以前评估。处理器可针对每一分支指令维持本地BHR 100。另一选择为(或另外),BHR 100可含有所有条件分支指令的不久以前的评估,在此项技术中有时称为全局BHR或GHR。如在本文中使用,BHR是指本地及全局分支历史寄存器两者。
如图1中所描绘,BHR 100可为分支预测器表(BPT)102加索引,所述分支预测器表同样可以是本地或全局的。BHR 100可直接为BPT 102加索引,或可组合有其它信息,例如,BPT索引逻辑104中的分支指令的程序计数器(PC)。可另外地利用到BPT索引逻辑104的其它输入。BPT索引逻辑104可级联所述输入(在此项技术中称为gselect),对所述输入执行XOR运算(gshare),执行散列函数或以多种方式组合或转变所述输入。
作为一个实例,BPT 102可包括多个饱和计数器,所述饱和计数器的MSB充当双模态分支预测器。例如,每一表条目可包括采取四种状态中的一者的2位计数器,所述四种状态的每一者被指派加权预测值,例如:
11-强预测采用
10-弱预测采用
01-弱预测不采用
00-强预测不采用
每当对应的分支指令评估为“采用”时,计数器递增,而每当指令评估为“不采用”时,计数器递减。计数器的MSB是双模态分支预测器;其将预测待采用或不采用的分支,而不管基本预测的强度或权重如何。饱和计数器减少不频繁的分支评估方向的预测错误。一贯地单向评估的分支将使计数器饱和。其它方向不频繁评估将改变计数器值(及预测的强度),但不改变双模态预测值。因此,不频繁评估将仅错误预测一次,而非两次。饱和计数器的表仅是说明性实例;一般来说,BHT可为含有多种分支预测机制的表加索引。
不管BPT 102中所采用的分支预测机制如何,BHR 100单独地或组合其它信息(例如,分支指令PC)来为BPT 102加索引以获得分支预测。通过将先前分支评估存储于BHR 100中并在分支预测中使用所述评估,使正预测的分支指令与以前的分支行为相关-在本地BHR100的情况下是其自己以前的行为,且在全局BHR 100的情况下是其它分支指令的行为。至少在高度重复性代码的情况下,此相关性是准确的分支预测的关键。
注意,图1描绘正存储于BHR 100中的分支评估-即,仅可在管线深处(例如,在执行管级中)获知的条件分支指令的实际评估。虽然这是最终结果,但实际上,常见的高性能处理器将来自BPT 102的预测的分支评估存储于BHR 100中,且如果所述预测证明是错误的,那么稍后作为错误预测恢复操作的一部分校正BHR 100。为清楚起见,所述图式不反映此实施方案特征。
可减少采用BHR 100的分支预测器的功效的常见代码结构是循环的。循环以测试循环结束条件的条件分支指令结束,例如,无论每当穿过所述循环便递增的索引变量是否已达到循环结束值。如果未达到,那么执行分支后退到所述循环的开始以进行另一迭代以及另一循环结束条件分支评估。
如果所述循环通大量迭代而执行,那么所述循环结束分支指令的“采用”向后分支使BHR 100部分地或完全地饱和。在所述循环迭代数目等于或超过BHR 100宽度的情况下,在所述循环结束时,n位BHR将精确地含有n-1个1(采用)紧接单个0(不采用),从而对应于由所述循环迭代引起的一长系列的分支采用评估,并在所述循环终止时以单个不采用分支评估结束。这有效地破坏BHR 100的功效,因为与先前分支评估的所有相关性(对于本地或全局BHR 100)均被丢失。在此情况下,BHR 100将很可能映射到给定分支指令的相同BPT 102条目(此取决于到BPT索引逻辑104的其它输入),而非映射到含有反映分支指令与先前分支评估的相关性的分支预测的条目。
另外,饱和的BHR 100可增加BPT 102中的别名现象。即,如果BHR 100直接为BPT102加索引,那么在具有共同迭代的循环之后的所有分支指令均将映射到相同BPT 102条目。即使在BHR 100组合有其它信息,也增加别名现象的机会。这不仅不利地影响对循环之后的分支指令的预测准确性,而且不利地影响对在BPT 102中产生其条目别名的所有分支指令的预测准确性。
如果所述循环通过比BHR 100的宽度少的迭代而执行,那么BHR 100不会饱和且某一先前分支评估历史得以保持。然而,表示先前分支评估历史的位在BHR 100中被循环结束分支指令的众多“采用”结果而替代。明确地说,在循环迭代数目变化的情况下,此对分支预测有两个有害的影响。首先,所述分支指令将映射到BPT 102中更大数目的条目以捕获与先前分支评估的相同的相关性,与循环结束分支不影响BHR30的情况下将需要的相比,此需要较大BPT 102来支持相同数目的分支指令的相同准确性。其次,BPT 102中的分支预测器将花费较长时间“训练”,从而增加必须在BPT102开始提供准确的分支预测之前执行的代码的量。
受让与本专利申请案的受让人并以引用方式并入本文中的专利申请案第11/066,508号提出抑制针对循环结束分支指令更新BHR 100。此解决了BHR 100饱和或部分饱和对分支预测准确性的有害影响的常见问题。然而,其不能捕获并利用可存在于循环行为与随后分支评估之间的相关性。
在常见的应用中,分支指令的评估可与前面循环的迭代数目相关。例如,科学程序可捕获循环中的数据点,且在所述循环之后,分支到其中分析所捕获的数据的统计分析子例程。然而,如果所述循环迭代相对较少的次数,那么捕获较少数据点并产生小的样本,统计分析可能不可靠,且可跳过。在此情况下,分支到所述统计分析子例程的条件指令的评估与所述数据获取循环的迭代数目强相关。
在另一实例中,应用可使用循环结构来将列表,事物日志、历史文件或类似数据结构搜索一遍。如果匹配搜索参数的项频繁地出现在列表中,那么将需要相对较少的循环迭代来定位所述项。因此,不频繁出现的项可能需要穿过搜索循环的大量迭代。随后分支指令的评估可与特定项在列表中出现的频率相关,且因此与定位所述项所需的循环迭代数目相关。
抑制响应于循环结束分支指令评估更新BHR 100无法捕获循环迭代数目与随后分支指令的分支行为之间的任何相关性。另一方面,维持循环结束分支指令的全部评估历史会使BHR 100完全地或部分地饱和,从而在所述循环之前丢失与分支指令评估的相关性。
发明内容
响应于与循环相关联的条件分支指令的性质,例如,指示所述分支是循环结束分支的性质,维持所述循环的迭代数目的计数,及将指示所述循环迭代计数的多位值存储于BHR中。在一个实施例中,所述多位值可包括实际循环计数,在此情况下,位数目是可变的。在另一实施例中,所述位数目是固定的(例如,两个)且通过与阈值的比较而将循环迭代计数映射为多位值。可针对嵌套循环维持单独迭代计数,且存储于所述BHR中的多位值可指示仅内部循环、仅外部循环或两者的循环迭代计数。
一个实施例涉及一种分支预测的方法。识别与循环相关联的分支指令的性质。响应于所述性质,将多位值存储于BHR中,所述多位值指示与所述分支指令相关联的循环的迭代数目。
另一实施例涉及一种处理器。所述处理器包含:分支预测器,其操作以预测条件分支指令的评估;及指令执行管线,其操作以基于来自所述分支预测器的预测推测性地提取并执行指令。所述处理器还包含:BHR,其操作以存储条件分支指令的所述评估;及循环计数器,其操作以计数代码循环的迭代数目。所述处理器进一步包含控制电路,所述控制电路操作以在所述BHR中存储指示与条件分支指令相关联的循环的迭代数目的多位值。
此外,本申请公开了一种分支预测方法,其包括:确认条件分支指令是循环结束分支指令;计数由所述循环结束分支指令结束的循环的迭代数目;在循环结束时,将多位值存储于分支历史寄存器BHR中,所述值指示所述循环的迭代数目;及通过所述BHR为分支预测器表加索引以获得分支预测。
此外,公开了一种处理器,其包括:分支预测器,其操作以预测条件分支指令的评估;以及指令执行管线,其操作以基于来自所述分支预测器的预测推测性地提取并执行指令;其中,所述分支预测器包括分支历史寄存器BHR,其操作以存储条件分支指令的所述评估;其中,所述分支预测器进一步包括循环计数器LC,其操作以计数代码循环的迭代数目;其中,所述分支预测器还包括分支预测器表BPT,其中,通过所述BHR为所述BPT加索引,所述BPT操作以获得分支预测;其中,所述处理器还包括控制电路,其操作以在所述BHR中存储多位值,所述多位值指示与条件分支指令相关联的循环的迭代数目。
附图说明
图1是现有技术分支预测器电路的功能框图。
图2是处理器的功能框图。
图3是执行分支指令的方法的流程图。
图4是分支预测器电路的功能框图,所述分支预测器电路包含一个或一个以上最后分支PC寄存器及循环计数器。
具体实施方式
图2描绘处理器10的功能框图。处理器10根据控制逻辑14执行指令执行管线12中的指令。在一些实施例中,管线12可以是具有多个管线的超标量设计。管线12包含组织于管级中的各种寄存器或锁存器16以及一个或一个以上算术逻辑单元(ALU)18。通用寄存器(GPR)堆20提供构成存储器层次的顶部的寄存器。
管线12从指令高速缓存器(I-高速缓存器)22提取指令,其中由指令侧转换后援缓冲器(ITLB)24管理存储器地址转换及准许。当在管线12中较早地解码条件分支指令时,分支预测器26预测分支行为,并将预测提供给指令预提取单元28。指令预取单元28从I-高速缓存器22、在针对“采用的”分支预测在管线12中所计算的分支目标地址处、在针对预测为“不采用的”分支的下一顺序地址处推测性地提取指令。在任一情况下,预提取的指令均被加载到管线12中以供进行推测性执行。
分支预测器26包含分支历史寄存器(BHR)30、分支预测器表(BPT)32、BPT索引逻辑34及BHR更新逻辑36。分支预测器26可另外包含一个或一个以上最后分支PC寄存器38,以及向BHR更新逻辑36提供输入的一个或一个以上循环计数器37。
从数据高速缓存器(D-高速缓存器)40存取数据,其中由主转换后援缓冲器(TLB)42管理存储器地址转换及准许。TLB 42可以是专用数据TLB,或可包括为指令及数据两者管理地址转换及准许的集成式TLB。另外,在处理器10的各种实施例中,可将I-高速缓存器22及D-高速缓存器40集成或联合在一起。在存储器接口46的控制下,I-高速缓存器22及/或D-高速缓存器40中的过错导致对主(芯片外)存储器44的存取。
处理器10可包含输入/输出(I/O)接口48,以控制对各种外围装置50的存取。所属领域的技术人员将认识到,处理器10的众多变化形式是可能的。例如,处理器10可包含用于I及D高速缓存器22、40中的任一者或两者的第二层级(L2)高速缓存器。另外,可将处理器10中所描绘的一个或一个以上功能块从特定实施例中省去。
循环迭代的多位指示
根据一个或一个以上实施例,通过将分支评估与先前分支评估及先前循环的迭代计数两者相关来改进分支预测准确性。这是通过将指示循环迭代计数的多位值存储于BHR30中来完成的。通过将可能的大循环迭代计数映射为相对较少的位,保存关于所述循环的特性信息,同时防止循环结束分支使分支预测器26中的一个或一个以上BHR30完全地或部分地饱和。
此过程描绘为图3中的流程图。提取并解码指令(块52)。如果指令不是条件分支指令(块53),那么所述指令在管线中继续进行且过程返回以提取下一指令(块52)。如果指令是条件分支指令(块53),那么做出分支是否是循环结束分支的确定(块54)。如果不是,那么在分支评估(例如,在管线的执行级中)时,更新BHR 30以使用单个位来记录分支评估(块56),即,将分支指令评估为“采用的”还是“不采用的”。执行接着分别在分支目标地址或下一顺序地址处继续(块64)。如果分支是循环结束分支(块54),那么递增循环迭代计数(块58)。在循环完成时(块60),将指示循环迭代数目的多位值写入到BHR 30(块62)。接着清零循环迭代计数器(块63)且执行在下一顺序地址处继续(块64)。
可以多种方式完成两种询问(块54)-即,将分支指令识别为循环结束分支指令-及维持循环迭代计数(块58)。在一个实施例中,在确定为循环结束分支的条件分支指令评估为“采用的”时,递增一个或一个以上循环计数器(LC)37。在循环结束分支评估为“不采用”(其指示退出循环)时,将LC 37的值或从其导出的值(如在本文中更全面的论述)写入到BHR30。同时还清零LC 37。
识别循环结束分支指令
循环通过从循环的结束到循环的开始向后分支来迭代。根据一个实施例,假定具有小于分支指令地址或PC的分支目标地址(即,向后分支)的每一条件分支指令是循环结束分支指令。此识别循环结束分支的方法提供简单性。如在图4中所描绘,当在管线中实际评估分支指令时,在循环结束分支检测逻辑35中将分支指令PC与分支目标地址(BTA)相比较。如果BTA<PC,那么递增循环计数器(LC)37。此实施例在确定分支目标地址时需要地址比较,并可能因为并非所有的向后分支均是循环结束分支而具有某种不准确性的缺点。
检测循环结束分支的另一方式是辨识对同一分支指令的重复执行。在一个实施例中,如在图4中所描绘,最后分支PC(LBPC)寄存器38存储所执行的最后分支指令的PC。在简单循环的情况下,如果分支指令的PC匹配循环结束分支检测逻辑35中的LBPC 38,即,所述分支指令是所评估的最后分支指令,那么假定所述分支指令是循环结束分支指令,并递增LC 37。
将条件分支指令包含在循环内的代码可使循环结束分支检测复杂。例如,用于搜索阵列或链接的列表的常见算法创建循环。所述循环内的分支检查匹配且如果找到匹配那么尽早退出所述循环,同时循环结束分支检查所述阵列或链接的列表的结束。在此情况下,单个LBPC 38不能检测循环结束分支,因为其将被两个分支PC交替地盖写。因此,在一个实施例中,可提供两个或两个以上LBPC寄存器38(如在图4中所描绘),其中连续评估的分支指令的PC被存储于对应的LBPC寄存器(LBPC0、LBPC1、...LBPCM)38中。此允许即使循环内存在其它条件分支也可检测循环结束分支。
还可使用编译器或汇编器静态地标记循环结束分支指令。在一个实施例中,编译器产生仅用于循环结束分支的特定类型的分支指令,例如,“BRLP”。辨识所述BRLP指令,且每当BRLP指令在执行管级中评估为采用时递增LC 37。在另一实施例中,编译器或汇编器可(例如)通过将一个或一个以上预先定义的位设定于指令操作代码中而将循环结束分支指示嵌入于分支指令中。检测所述循环结束分支位,且当所述分支指令在执行管级中评估为采用时递增LC 37。一般来说,可向循环结束分支检测逻辑35提供循环结束指示符。循环结束分支的静态识别通过将循环结束识别功能移到编译器或汇编器中而减少硬件及计算复杂性。
产生并存储循环迭代数目的指示符
不管用于识别循环结束分支指令(针对内部或外部循环)的技术如何,根据一个或一个以上实施例,将循环迭代的次数数目的指示存储于BHR 30中,以利用循环迭代数目与随后条件分支指令评估之间的任何相关性。
在一个实施例中,将循环迭代的实际计数存储于BHR 30中。即,将多位计数(例如,来自LC 37)移位到BHR 30中,以替代BHR 30的MSB中的先前分支评估。对于极大循环,此计数将需要n个循环迭代的log2(n)个位,以替代对应数目的先前分支评估。然而,即使对于大循环迭代计数,二进制表示也是对存储于现有技术分支历史寄存器中的循环结束分支行为的显著压缩(即,n-1个1紧接单个0)。在一个实施例中,将迭代计数积累于LC 37中并移位到BHR 30中。在另一实施例(未显示)中,可将BHR 30的至少较低k个位实施为双模式移位寄存器/计数器,且可在BHR 30中直接递增循环迭代计数(其中先前BHR 30内容随着计数增长而向左移位)。
在另一实施例中,将循环迭代数目的固定多位指示存储于BHR 30中。例如,可分配两个位来记录循环迭代数目的指示,其具有以下意义:
11-极大数目的循环迭代
10-大数目的循环迭代
01-中等数目的循环迭代
00-小数目的循环迭代
在此实例中,使用小数目与中等数目之间(00->01);中等数目与大数目之间(01->10)及大数目与极大数目之间(10->11)的三个阈值来将实际循环迭代计数映射为二位表示,如由阈值逻辑39所指示。在一个实施例中,所述阈值对于给定的处理器实施方案可是固定的,例如对于其中通常已知共同循环大小的某些嵌入式应用。在另一实施例中,所述映射可以是可缩放映射,其中所述阈值是从GPR 20、存储器44中的表或类似物读取的。在常见应用中,循环迭代数目的固定多位指示可提供循环迭代计数的充分指示,以允许与分支评估行为的有意义的相关性,且同时限制循环结束分支从BHR 30替代先前分支评估的数目。
当然,可将实际循环迭代计数映射为任何固定数目的位,所述固定数目的位具有用对应数目的阈值,例如,三个位与七个阈值;四个位与十五个阈值等等,以在循环迭代计数准确性与BHR 30中的分支评估替代之间实现所期望或所需要的平衡。
嵌套循环
循环可含有一个或一个以上嵌套式或内部循环。因此,在一个实施例中,提供可对应于LBPC 38寄存器的数目的多个LC计数器(LC0、LC1、...LCM)37。基于采用评估及与相关LBPCM 38的匹配递增LC 37以维持嵌套循环的迭代计数。
通过每当内部循环退出时存储所述内部循环的迭代数目的多位指示,BHR 30在外部循环迭代相对较少次数时变得部分地或完全地饱和。因此,在一个实施例中,一旦将循环确定为内部循环,随后迭代便进行计数,此后可抑制内部循环的初始执行更新BHR 30。在此实施例中,在外部循环退出时,BHR 30将包含仅针对外部循环的第一迭代的内部循环的迭代计数的指示,及外部循环的迭代计数的指示。
在另一实施例中,可通过用外部循环迭代计数的指示盖写内部循环迭代计数在BHR 30中的值而丢弃所述内部循环迭代计数。此保存BHR 30中的最大数目的先前分支评估,同时允许随后分支评估与外部循环的迭代计数的相关性。
在另一实施例中,可通过在外部循环退出时抑制BHR 30的更新而丢弃述外部循环迭代计数。此同样保存BHR 30中的最大数目的先前分支评估,同时允许随后分支评估与内部循环的迭代计数的相关性,这在一些应用中可能对随后分支评估更具预测性。
条件分支指令具有常见性质,包含(例如)分支指令地址或PC,指令类型,及操作代码中是否存在指示符位。如在本文中所使用,分支操作的性质及/或与所述分支有关的程序的性质均视为分支指令的性质。例如,分支指令PC是否匹配一个或一个以上LBPC寄存器38的内容以及分支目标地址是相对于分支指令PC向前还是向后是分支指令的性质。
虽然本文已关于本揭示内容的特定特征、方面及实施例描述本揭示内容,但将了解,在本揭示内容的广泛范围内可存在许多的变化形式、修改及其它实施例,且因此,所有的变化形式、修改及实施例均将视为在本揭示内容的范围内。因此,应在所有方面将所述实施例理解为说明性而非限制性,且包含在所附权利要求书的意义及等效范围内的所有改变均打算涵盖在其中。

Claims (24)

1.一种分支预测方法,其包括:
确认条件分支指令是循环结束分支指令;
计数由所述循环结束分支指令结束的循环的迭代数目;
在循环结束时,将多位值存储于分支历史寄存器BHR中,所述值指示所述循环的迭代数目;及
通过所述BHR为分支预测器表加索引以获得分支预测。
2.如权利要求1所述的方法,其中所述分支是向后的。
3.如权利要求1所述的方法,其中所述分支指令的程序计数器PC匹配存储最后分支指令的PC的最后分支程序计数器LBPC寄存器的内容以更新所述BHR。
4.如权利要求3所述的方法,其中所述分支指令的所述PC匹配存储最后多个分支指令的PC的多个LBPC寄存器中的任一者的内容以更新所述BHR。
5.如权利要求1所述的方法,其中所述分支指令是由编译器产生的用于结束循环的唯一分支指令。
6.如权利要求1所述的方法,其中所述分支指令包含指示所述分支指令是循环结束分支指令的一个或一个以上位。
7.如权利要求1所述的方法,其中将多位值存储于所述BHR中包括将预定数目的位存储于所述BHR中。
8.如权利要求7所述的方法,其进一步包括根据所述循环的迭代数目到所述多位值的固定映射确定所述预定数目的位的值。
9.如权利要求7所述的方法,其进一步包括根据所述循环的迭代数目到所述多位值的可缩放映射确定所述预定数目的位的值,以及,读取多个阈值以确定所述循环的迭代数目到所述多位值的所述可缩放映射。
10.如权利要求1所述的方法,其中将多位值存储于所述BHR中包括将可变数目的位存储于所述BHR中,所述位的数目响应于所述循环的迭代数目而变化。
11.如权利要求10所述的方法,其进一步包括计数所述BHR的多个最低有效位中的循环迭代。
12.如权利要求10所述的方法,其进一步包括在循环计数器中计数循环迭代,并在所述循环终止时将所述循环计数器的值转移到所述BHR。
13.如权利要求1所述的方法,其进一步包括检测与第一循环相关联的第一循环结束分支指令及与第二循环相关联的第二循环结束分支指令,所述第一循环嵌套于所述第二循环内。
14.如权利要求13所述的方法,其中将多位值存储于所述BHR中包括将指示所述第一循环的迭代数目的多位值存储于所述BHR中,且进一步包括将指示所述第二循环的迭代数目的多位值存储于所述BHR中。
15.如权利要求13所述的方法,其中将多位值存储于所述BHR中包括仅将指示所述第一循环的迭代数目的多位值存储于所述BHR中。
16.如权利要求13所述的方法,其中将多位值存储于所述BHR中包括仅将指示所述第二循环的迭代数目的多位值存储于所述BHR中。
17.一种处理器,其包括:
分支预测器,其操作以预测条件分支指令的评估;以及
指令执行管线,其操作以基于来自所述分支预测器的预测推测性地提取并执行指令;
其中,所述分支预测器包括分支历史寄存器BHR,其操作以存储条件分支指令的所述评估;
其中,所述分支预测器进一步包括循环计数器LC,其操作以计数代码循环的迭代数目;
其中,所述分支预测器还包括分支预测器表BPT,其中,通过所述BHR为所述BPT加索引,所述BPT操作以获得分支预测;
其中,所述处理器还包括控制电路,其操作以在所述BHR中存储多位值,所述多位值指示与条件分支指令相关联的循环的迭代数目。
18.如权利要求17所述的处理器,其中,所述分支预测器进一步包括最后分支程序计数器LBPC寄存器,所述最后分支程序计数器LBPC寄存器操作以存储条件分支指令的程序计数器PC,且其中如果所述分支指令的所述PC匹配所述LBPC寄存器的内容,那么所述控制电路确定条件分支指令与循环相关联。
19.如权利要求18所述的处理器,其中,所述分支预测器进一步包括两个或两个以上LBPC寄存器及对应的两个或两个以上LC,第一LBPC操作以存储与第一循环相关联的条件分支指令的PC且第一LC操作以维持所述第一循环的迭代计数,且第二LBPC操作以存储与第二循环相关联的条件分支指令的PC且第二LC操作以维持所述第二循环的迭代计数,其中所述第一循环嵌套于所述第二循环内。
20.如权利要求19所述的处理器,其中所述控制电路操作以在所述BHR中存储指示所述第一循环的一个执行的迭代数目的多位值及指示所述第二循环的迭代数目的多位值。
21.如权利要求19所述的处理器,其中所述控制电路操作以在所述BHR中存储指示所述第一循环的一个执行的迭代数目的多位值且不在所述BHR中存储所述第二循环的迭代数目的指示。
22.如权利要求19所述的处理器,其中所述控制电路操作以在所述BHR中存储指示所述第二循环的迭代数目的多位值且不在所述BHR中存储所述第一循环的任一执行的迭代数目的指示。
23.如权利要求17所述的处理器,其中所述BHR操作以响应于与所述循环相关联的所述条件分支指令的每一采用的评估递增多个位,从而直接维持所述BHR中的循环迭代计数。
24.如权利要求17所述的处理器,其进一步包括阈值逻辑电路,所述阈值逻辑电路操作以响应于多个阈值将循环迭代计数映射为固定的多位值。
CN200780008775.1A 2006-03-17 2007-03-19 用于分支预测的方法和装置 Expired - Fee Related CN101401065B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610899970.9A CN106997286B (zh) 2006-03-17 2007-03-19 用于循环分支的分支历史寄存器

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/378,712 US8904155B2 (en) 2006-03-17 2006-03-17 Representing loop branches in a branch history register with multiple bits
US11/378,712 2006-03-17
PCT/US2007/064331 WO2007109631A2 (en) 2006-03-17 2007-03-19 Branch history register for loop branches

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201610899970.9A Division CN106997286B (zh) 2006-03-17 2007-03-19 用于循环分支的分支历史寄存器

Publications (2)

Publication Number Publication Date
CN101401065A CN101401065A (zh) 2009-04-01
CN101401065B true CN101401065B (zh) 2016-11-02

Family

ID=38175561

Family Applications (2)

Application Number Title Priority Date Filing Date
CN200780008775.1A Expired - Fee Related CN101401065B (zh) 2006-03-17 2007-03-19 用于分支预测的方法和装置
CN201610899970.9A Expired - Fee Related CN106997286B (zh) 2006-03-17 2007-03-19 用于循环分支的分支历史寄存器

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201610899970.9A Expired - Fee Related CN106997286B (zh) 2006-03-17 2007-03-19 用于循环分支的分支历史寄存器

Country Status (11)

Country Link
US (1) US8904155B2 (zh)
EP (2) EP1999578B1 (zh)
JP (1) JP5384323B2 (zh)
KR (1) KR101031938B1 (zh)
CN (2) CN101401065B (zh)
BR (1) BRPI0709558A2 (zh)
CA (1) CA2643969A1 (zh)
ES (1) ES2388309T3 (zh)
MX (1) MX2008011752A (zh)
RU (1) RU2447486C2 (zh)
WO (1) WO2007109631A2 (zh)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7707398B2 (en) * 2007-11-13 2010-04-27 Applied Micro Circuits Corporation System and method for speculative global history prediction updating
US9110683B2 (en) * 2008-08-15 2015-08-18 Apple Inc. Predicting branches for vector partitioning loops when processing vector instructions
US8433885B2 (en) * 2009-09-09 2013-04-30 Board Of Regents Of The University Of Texas System Method, system and computer-accessible medium for providing a distributed predicate prediction
US8073556B2 (en) * 2009-12-16 2011-12-06 General Electric Company System and method for controlling a machine
US9176737B2 (en) * 2011-02-07 2015-11-03 Arm Limited Controlling the execution of adjacent instructions that are dependent upon a same data condition
WO2013089750A1 (en) * 2011-12-15 2013-06-20 Intel Corporation Methods to optimize a program loop via vector instructions using a shuffle table and a blend table
US9304776B2 (en) 2012-01-31 2016-04-05 Oracle International Corporation System and method for mitigating the impact of branch misprediction when exiting spin loops
US9389860B2 (en) * 2012-04-02 2016-07-12 Apple Inc. Prediction optimizations for Macroscalar vector partitioning loops
US20150074353A1 (en) * 2013-09-06 2015-03-12 Futurewei Technologies, Inc. System and Method for an Asynchronous Processor with Multiple Threading
US9639368B2 (en) * 2014-06-13 2017-05-02 International Business Machines Corporation Branch prediction based on correlating events
US9875104B2 (en) 2016-02-03 2018-01-23 Google Llc Accessing data in multi-dimensional tensors
CN108062236A (zh) * 2016-11-07 2018-05-22 杭州华为数字技术有限公司 一种软硬件协同分支指令预测方法及装置
CN106528049B (zh) * 2016-11-17 2019-06-11 上海兆芯集成电路有限公司 在多存储体条件分支预测器中用于更新事件的随机数产生
CN108255518B (zh) * 2016-12-29 2020-08-11 展讯通信(上海)有限公司 处理器及循环程序分支预测方法
US10248908B2 (en) 2017-06-19 2019-04-02 Google Llc Alternative loop limits for accessing data in multi-dimensional tensors
GB2568776B (en) 2017-08-11 2020-10-28 Google Llc Neural network accelerator with parameters resident on chip
CN108595210B (zh) * 2018-04-09 2021-12-10 杭州中天微系统有限公司 实现零开销循环的处理器
US11216279B2 (en) * 2018-11-26 2022-01-04 Advanced Micro Devices, Inc. Loop exit predictor
US20220197660A1 (en) * 2020-12-21 2022-06-23 Intel Corporation Context-based loop branch prediction
CN116737240A (zh) * 2022-03-02 2023-09-12 腾讯科技(深圳)有限公司 分支预测方法、装置、处理器、介质及设备
CN115113934B (zh) * 2022-08-31 2022-11-11 腾讯科技(深圳)有限公司 指令处理方法、装置、程序产品、计算机设备和介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6145076A (en) * 1997-03-14 2000-11-07 Nokia Mobile Phones Limited System for executing nested software loops with tracking of loop nesting level
US20010056531A1 (en) * 1998-03-19 2001-12-27 Mcfarling Scott Branch predictor with serially connected predictor stages for improving branch prediction accuracy

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS635442A (ja) * 1986-06-26 1988-01-11 Matsushita Electric Ind Co Ltd プログラムル−プ検出記憶装置
JPH0635442A (ja) 1992-07-13 1994-02-10 Fuji Xerox Co Ltd データ変換装置
JP3114833B2 (ja) 1993-04-20 2000-12-04 本田技研工業株式会社 油圧無段変速機付き車両の変速操作装置
US5909573A (en) * 1996-03-28 1999-06-01 Intel Corporation Method of branch prediction using loop counters
US5875325A (en) * 1996-09-19 1999-02-23 International Business Machines Corporation Processor having reduced branch history table size through global branch history compression and method of branch prediction utilizing compressed global branch history
CN1153133C (zh) * 1996-12-09 2004-06-09 松下电器产业株式会社 采用小规模硬件作高命中率分支预测的信息处理装置
US6223280B1 (en) * 1998-07-16 2001-04-24 Advanced Micro Devices, Inc. Method and circuit for preloading prediction circuits in microprocessors
RU2236700C2 (ru) 2000-03-02 2004-09-20 Открытое акционерное общество "Московская телекоммуникационная корпорация" Способ анализа и прогнозирования развития динамической системы и ее отдельных элементов
US6766443B2 (en) * 2001-05-17 2004-07-20 International Business Machines Corporation Compression of execution path history to improve branch prediction accuracy
TW503997U (en) 2001-12-14 2002-09-21 Hon Hai Prec Ind Co Ltd Optical switch device
US7439982B2 (en) * 2002-05-31 2008-10-21 Envivio, Inc. Optimized scene graph change-based mixed media rendering
JP4243463B2 (ja) 2002-08-19 2009-03-25 株式会社半導体理工学研究センター 命令スケジューリングのシミュレーション方法とシミュレーションシステム
US20040123075A1 (en) * 2002-12-19 2004-06-24 Yoav Almog Extended loop prediction techniques
US20050283593A1 (en) * 2004-06-18 2005-12-22 Vladimir Vasekin Loop end prediction
JP4362096B2 (ja) 2004-09-30 2009-11-11 富士通株式会社 情報処理装置,リプレース方法,リプレースプログラム及びリプレースプログラムを記録したコンピュータ読取可能な記録媒体
US20060190710A1 (en) * 2005-02-24 2006-08-24 Bohuslav Rychlik Suppressing update of a branch history register by loop-ending branches
US20070079288A1 (en) * 2005-09-30 2007-04-05 Chad Willwerth System and method for capturing filtered execution history of executable program code

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6145076A (en) * 1997-03-14 2000-11-07 Nokia Mobile Phones Limited System for executing nested software loops with tracking of loop nesting level
US20010056531A1 (en) * 1998-03-19 2001-12-27 Mcfarling Scott Branch predictor with serially connected predictor stages for improving branch prediction accuracy

Also Published As

Publication number Publication date
RU2008141155A (ru) 2010-04-27
US20070220239A1 (en) 2007-09-20
US8904155B2 (en) 2014-12-02
KR101031938B1 (ko) 2011-04-29
CA2643969A1 (en) 2007-09-27
EP2479662A1 (en) 2012-07-25
WO2007109631A3 (en) 2007-11-29
BRPI0709558A2 (pt) 2011-07-19
EP1999578A2 (en) 2008-12-10
JP2009530754A (ja) 2009-08-27
WO2007109631A2 (en) 2007-09-27
CN106997286B (zh) 2019-08-13
RU2447486C2 (ru) 2012-04-10
EP1999578B1 (en) 2012-05-16
MX2008011752A (es) 2008-09-26
CN106997286A (zh) 2017-08-01
EP2479662B1 (en) 2016-01-06
ES2388309T3 (es) 2012-10-11
CN101401065A (zh) 2009-04-01
JP5384323B2 (ja) 2014-01-08
KR20080097242A (ko) 2008-11-04

Similar Documents

Publication Publication Date Title
CN101401065B (zh) 用于分支预测的方法和装置
CN103488463B (zh) 通过循环结束分支来抑制分支历史寄存器的更新
CN100547542C (zh) 指令预取机构
US20020144101A1 (en) Caching DAG traces
JP2011100466A5 (zh)
JP2009530754A5 (zh)
JP2008532142A5 (zh)
CN101460922B (zh) 滑动窗口、基于区块的分支目标地址高速缓冲存储器
CN101438237A (zh) 基于区块的分支目标地址高速缓冲存储器
CN107810486B (zh) 锁定用于原子地执行的指令组的操作数的值
KR102635965B1 (ko) 마이크로 프로세서의 프론트 엔드 및 이를 이용한 컴퓨터 구현 방법
Milenkovic et al. Microbenchmarks for determining branch predictor organization
US10235173B2 (en) Program code optimization for reducing branch mispredictions
US20140258688A1 (en) Benchmark generation using instruction execution information
CN116069602B (zh) 一种最坏情况执行时间分析方法和装置

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20161102

Termination date: 20210319

CF01 Termination of patent right due to non-payment of annual fee