CN102160033B - 具有稀疏和密集预测缓存的复合分支预测装置 - Google Patents
具有稀疏和密集预测缓存的复合分支预测装置 Download PDFInfo
- Publication number
- CN102160033B CN102160033B CN200980136972.0A CN200980136972A CN102160033B CN 102160033 B CN102160033 B CN 102160033B CN 200980136972 A CN200980136972 A CN 200980136972A CN 102160033 B CN102160033 B CN 102160033B
- Authority
- CN
- China
- Prior art keywords
- branch
- entry
- instruction
- buffer memory
- sparse
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 claims abstract description 26
- 230000015654 memory Effects 0.000 claims description 126
- 230000006872 improvement Effects 0.000 claims description 2
- 230000006870 function Effects 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 7
- 150000001875 compounds Chemical class 0.000 description 5
- 230000006399 behavior Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 239000002131 composite material Substances 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 240000004859 Gamochaeta purpurea Species 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 239000013078 crystal Substances 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000002657 hormone replacement therapy Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 229920000278 polyheptadiyne Polymers 0.000 description 1
- 230000001172 regenerating effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
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)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
用于微处理器中的分支预测的系统和方法。复合装置对指令缓存的每个条目内不多于常见较小数量的分支在稀疏缓存中存储分支预测信息。对于其中i-cache行包括附加分支的较不常见情况,该装置在密集缓存中存储相应的分支预测信息。该稀疏缓存的每个条目存储指示相应的指令缓存行是否包括附加分支指令的位矢量。此标记还可被用于选择密集缓存中的条目以存储。第二稀疏缓存存储从该第一稀疏缓存驱逐的全部条目。
Description
技术领域
本发明涉及微处理器,尤其涉及预测机制(predictionmechanism)。背景技术
当代微处理器可包括一个或更多个处理器内核或处理器,其中每个处理器能够执行软件应用的指令。这些处理器通常是管线化(pipelined)的,其中该处理器包括一个或更多个数据处理级,该一个或更多个数据处理级与放置于其间的存储元件(例如,寄存器和阵列)串联。在限定时钟周期或相(phase)的时钟信号的转换(transition)过程中,一级的输出可被用作下一级的输入,其中相是时钟周期的一小部分。尽管管线(pipeline)可被分成任意数量的级(在这些级处执行指令处理的部分),指令处理通常包括获取(fetching)指令、解码指令、执行指令和在该指令确定的目的地中存储执行结果。
理想情况下,每个时钟周期对管线的每一级产生有用的指令执行。然而,管线中的停顿可导致在特定的管线级期间无有用工作可执行。一些停顿可能持续若干时钟周期并明显降低处理器性能。停顿的一些示例包括数据缓存(cache)或指令缓存未中(miss),指令间的数据依赖性,以及控制流误预测(misprediction),比如误预测的分支指令(branch instruction)。
停顿对处理器性能的负面影响可以通过重叠(overlap)管线级而减小。进一步的技术是允许指令的乱序(out-of-order)执行,这有助于减少依赖数据的停顿。另外,具有超级标量体系结构(superscalar architecture)的内核根据动态调度每个时钟周期发出变化的数量的指令。然而,由于可能阻止所有停顿周期的隐藏的按序回退(in-order retirement),若干时钟周期的停顿仍降低了处理器的性能。因此,另一种减少性能损失的方法是减少多周期停顿的发生。一种这样的多周期停顿是控制流指令(比如分支指令)的误预测。
分支指令包括许多类型,比如有条件的或无条件的以及直接的或间接的。条件分支指令执行确定采用指令流中的哪条路径的操作。如果该分支指令确定没有满足指定的条件(其可被编码在该指令内),则该分支指令被认为是不采取(non-taken)并以程序次序执行接下来的序贯指令。然而,如果该分支指令确定满足了指定的条件,则认为采取该分支指令。相应地,执行后续指令,后续指令不是程序次序中接下来的序贯指令,而是位于分支目标地址的指令。无条件分支指令被认为是永远采取(always-taken)的条件分支指令。在该指令内没有要测试的指定条件,而后续指令的执行永远按照不同于序贯次序的次序进行。
另外,分支目标地址可以通过相对于存储在该程序计数器(PC)寄存器中的线性地址值的偏移(offset)而指定,该偏移可被存储在条件分支指令本身中。这种类型的分支目标地址被称为“直接的”。分支目标地址还可由寄存器或记忆体(memory)中的值指定,其中该寄存器或记忆体位置可被存储在该分支指令中。这种类型的分支目标地址被称为“间接的”。进一步,在间接分支指令中,指定该分支目标地址的寄存器可被装载有不同的值。
无条件间接分支指令的示例包括程序调用(procedurecalls)和返回(returns),其可用于实现程序代码中的子例程(subroutines),并可使用返回地址堆栈(Return Address Stack,RAS)来提供该分支目标地址。另一示例是间接跳转指令,其可用于实现switch-case语句,该语句在面向对象编程(比如C++和Java)中很流行。
条件分支指令的示例是可用于实现程序代码中的循环(loops)的分支指令(例如,“for”和“while”循环结构)。条件分支指令必须满足指定条件才能被认为采取。满足条件的一个示例可以是指定的寄存器现在保持(hold)的存储值为零。该指定的寄存器被编码在该条件分支指令中。由于软件应用代码内的指令,此指定的寄存器可在循环中递减其存储的值。该指定寄存器的输出可被输入到专用零检测组合逻辑中。
另外,条件分支指令彼此可具有一定的依赖关系。例如,程序可具有简单的情况,比如:if(value==0)value==1;if(value==1)
将用于实现上述实例的条件分支指令将具有可用于改进预测该条件的准确度的全局历史。在一个实施例中,该预测可通过2-位计数器执行。接下来详细地描述分支预测。
当代微处理器可能需要多个时钟周期以确定分支指令的条件的结果和确定分支目标地址。对于在特定管线中执行的特定的线程,直到分支指令被解码且知道随后条件结果和分支目标地址之后,该分支指令或后续指令才执行有用工作。这些停顿周期降低了处理器的性能。
在该指令被获取之后很短时间内,可对条件分支的条件和分支目标地址进行预测,而不是停顿。至于何时准备好了预测的精确阶段取决于该管线的实现。为了预测分支条件,用于从记忆体(比如从指令缓存(i-cache))获取指令的PC可被用于索引分支预测逻辑。使用PC的早期的综合预测方案的一个示例是ScottMcFarling在1993年的论文“Combining Branch Predictors”(ResearchLaboratory Technical Note TN-36)中描述的gselect分支预测方法,通过援引将该论文全部并入本文。PC中存储的线性地址可与全局历史寄存器中存储的值以散列函数结合。该散列函数的输出和该PC可被用于索引预测表,比如模式历史表(PHT)、分支目标缓冲器(BTB)或其它。用当前分支指令的分支目标地址信息而不是采取或不采取的预测来更新全局历史寄存器可增加条件分支方向预测(即,采取和不采取结果预测)和间接分支目标地址预测(比如BTB预测或间接目标阵列预测)两者的预测准确度。在分支预测机制的各实施例中可包括许多不同的方案。
高分支预测准确度有助于更高效、更高性能的微处理器。来自预测的指令流的指令可在执行该分支指令前推测性执行,并在执行该分支指令前在任何情况下被放入处理器的管线中。如果所预测的指令流是正确的,则每个时钟周期执行的指令的数量有利地增加。然而,如果所预测的指令流是不正确的(即,不正确地预测了一个或更多分支指令),则来自被不正确地预测的指令流的指令被从该管线丢弃且每个时钟周期执行的指令的数量减少。
时常,分支预测机制包括分支指令的在先执行的历史以形成对特定分支指令的更准确的行为。这种分支预测历史通常需要在存储器中保持与分支指令对应的数据。而且,分支目标缓冲器(BTB)可用于存储目标地址预测中使用的全部或部分分支目标地址。在包括历史和地址信息的分支预测数据被从该存储区中驱逐(evict)或以其他方式丢失的情况下,为了随后的分支指令而再生该数据是必需的。
上述问题的一个解决方案是增加分支预测存储器的大小。然而,增加分支预测存储器的大小需要门面积(gate area)和分支预测机制的大小的显著增加。因而,通过减小分支预测存储器的大小以减少门的面积和功率消耗,有关分支的行为的有价值的数据可能被驱逐并且必须被再生。
鉴于以上,期望能够改进分支预测能力又不需要显著增加门计数和分支预测机制的尺寸的方法和机制。发明内容
思索用于微处理器中的分支预测的系统和方法。
在一个实施例中,提供一种微处理器内的复合分支预测装置。该复合装置为指令缓存的每个条目(entry)内不多于常见较小数量的分支在第一存储器中存储分支预测信息,而不是为该指令缓存(i-cache)的每个条目内的预定数量的分支的分支预测信息分配存储器。对于其中i-cache行包括附加分支的不太常见的情况,该装置在次级存储器中存储相应的分支预测信息。
还思索一种包括稀疏缓存(sparse cache)和密集缓存(dense cache)的复合分支预测装置。该稀疏缓存的每个条目对应于指令缓存的条目(或缓存行(cache line))。在指令获取请求期间,这些相应条目可被从该处理器发出的相同地址选中。该稀疏缓存的每个条目为指令缓存行内的不超过预定数量的分支指令存储分支预测信息。而且,每个条目均存储指示这个指令缓存行是否包括附加分支指令的标记(比如位矢量)。这个标记还可用于选择密集缓存中的条目以为附加分支存储分支预测信息。该复合分支预测装置还包括用于存储来自该第一稀疏缓存的被驱逐条目的第二稀疏缓存。整个条目被存储因而没有分支预测信息丢失或需要在随后被重建。附图说明
图1是处理器内核的一个实施例的总体框图。
图2是描绘分支预测单元的一个实施例的总体框图。
图3是描绘i-cache存储器布置的一个实施例的总体框图。
图4是描绘具有复合分支预测的处理器内核的一个实施例的总体框图。
图5是描绘分支预测单元的一个实施例的总体框图。
图6是描绘稀疏缓存存储器布置的一个实施例的总体框图。
图7是描绘密集分支缓存存储器布置的一个实施例的总体框图。
图8是高效改进分支预测的方法的一个实施例的流程图。
尽管本发明易于进行各种修改和替代形式,其具体实施例在附图中以示例方式显示并将在本文中详细描述。然而,应当理解,其附图和详细描述不是为了将本发明限制于所披露的特定形式,而是相反,其意图是覆盖落入如所附权利要求限定的本发明的精神和范围内的所有修改、等同和替代。具体实施方式
在下面的描述中,阐明了许多具体细节以提供对本发明的完全理解。然而,本领域的普通技术人员会意识到,本发明可在没有这些具体细节的情况下实现。在一些实例中,没有详细显示熟知的电路、结构和技术以避免模糊本发明。
参考图1,显示了进行乱序执行的处理器内核100的总体框图的一个实施例。内核100包括用于根据预定的指令集架构(ISA)执行指令的电路系统。例如,可选择x86指令集架构。替代地,可选择任何其它指令集架构。在一个实施例中,内核100可被包括在单一处理器配置中。在另一个实施例中,内核100可被包括在多处理器配置中。在其它实施例中,内核100可被包括在多节点系统的处理节点内的多内核配置中。
指令-缓存(i-cache)102可存储用于软件应用的指令而数据-缓存(d-cache)116可存储由该指令执行的计算中使用的数据。一般而言,缓存可存储一个或更多块,每个块是在系统存储器(未示)中的相应地址存储的数据的一份拷贝。此处使用的“块”是在连续的存储位置存储的一组字节,为了一致性而将它们当作一个单元来对待。在一些实施例中,块还可以是缓存中的分配(allocation)和释放(deallocation)的单元。块中字节的数量可以根据设计的选择而改变,且可以是任何大小的。例如,经常使用32字节和64字节的块。
缓存102和116,如图所示,可以集成于处理器内核100内。替代地,在需要时,缓存102和116可以以背部缓存配置或内联配置耦合于内核100。再进一步,缓存102和116可以作为缓存的分层(hierarchy)而实现。在一个实施例中,缓存102和116每个均代表L1和L2缓存结构。在另一实施例中,缓存102和116可共享作为L3缓存结构而实现的另一缓存(未示)。替代地,缓存102和116中的每一个可均代表L1缓存结构而共享缓存结构可以是L2缓存结构。如果需要,其它组合也是可能的,也可以选择。
缓存102和116和任何共享缓存每个均可包括耦合于相应的缓存控制器的缓存记忆体。如果内核100被包括在多内核系统中,记忆体控制器(未示)可被用于路由(route)封包(packets)、接收封包以进行数据处理以及将封包同步于内核100内的逻辑使用的内部时钟。而且,在多内核系统中,记忆体块的多个拷贝可存在于多处理器的多个缓存中。相应地,缓存一致性电路可包括在该记忆体控制器中。因为给定的块可被存储在一个或更多缓存中,且进一步因为缓存的拷贝之一可相对于该记忆体系统中的拷贝而被修改,因此计算系统经常在缓存和在该记忆体系统之间保持一致性。如果根据预定的一致性协议而使对块的更新由该块的其它缓存拷贝所反映,则一致性被保持。各种具体的一致性协议是公知的。
如果没有i-cache未中的话,该指令获取单元(IFU)104每个时钟周期可从i-cache 102获取多个指令。IFU 104可包括保持到下一个指令的地址的指针的程序计数器(PC)寄存器以从该i-cache102获取。分支预测单元122可耦合于IFU 104。单元122可被配置为预测将指令流的流向从执行接下来的序贯指令而改变的指令的信息。预测信息的示例可包括1-位值,该1-位值包括对条件是否被满足的预测,该条件确定接下来的序贯指令还是该指令流中的另一位置中的指令应该被执行。预测信息的另一示例可以是不同于接下来的序贯指令的下一个待执行指令的地址。实际结果和该预测是否正确的确定可以在随后的管线级进行。而且,在替代实施例中,IFU 104可包括单元122,而不是使这两个作为两个分离的单元而实现。
解码器单元106解码多个所获取指令的操作码(opcodes)。解码器单元106可在按序回退队列(比如重排序缓冲器118),保留级108以及加载/存储单元114中分配(allocate)条目。保留级108中的条目的分配被认为是调度(dispatch)。保留级108可充当指令队列,其中指令等待,直到它们的操作数变得可用(available)。当操作数可用且硬件资源也可用时,指令可以从保留级108乱序发出至整数和浮点功能单元110或加载/存储单元114。功能单元110可包括算术逻辑单元(ALU′s),用于算术计算,比如加法、减法、乘法、除法和平方根。可包括逻辑以确定分支指令的结果并将计算出的结果与预测值相比较。如果没有匹配,则误预测出现,而该分支指令后的后续指令需要被去除且具有正确PC值的新的获取需要被执行。
该加载/存储单元114可包括队列和逻辑,以执行记忆体访问指令。而且,验证逻辑可驻留于该加载/存储单元114以确保加载指令从正确的最年轻存储指令接收了转发数据(或分流数据(bypass data))。
来自功能单元110和加载/存储单元114的结果可被呈现到公共数据总线112上。该结果可被发送到重排序缓冲器118。这里,接收其结果、被标记以回退以及是队列头(head-of-the-queue)的指令可将其结果发送到寄存器文件120。寄存器文件120可保持处理器内核100的通用寄存器的架构状态。在一个实施例中,寄存器文件120可包括32个32-位寄存器。然后该重排缓冲器中的指令可以按序回退且其队列头指针可被调整至程序次序中的后续指令。
公共数据总线112上的结果可被发送至保留级以将值转发至等待该结果的指令的操作数。当这些等待的指令有了用于其操作数的值和可用于执行该指令的硬件资源,则它们可从该保留级108被乱序发送至功能单元110或加载/存储单元114中适当的资源。公共数据总线112上的结果可被路由到IFU104和单元122以更新控制流预测信息和/或PC值。
图2描绘了分支预测单元200的一个实施例。指令的地址被存储在寄存器程序计数器210(PC 210)中。在一个实施例中,该地址可以是32-位或64-位值。全局历史移位寄存器240(GSR 240)可包括最后号数的条件分支指令的预测结果的最近历史。在一个实施例中,GSR 240可以是单条目10-位移位寄存器。在其他实施例中,移位寄存器GSR 240可包括不同数量的位。GSR 240中存储的信息可用于使用全局历史预测当前条件分支指令的条件是否满足。例如,在一个实施例中,GSR 240可以是10-位移位寄存器,该移位寄存器保持程序执行中最后10条条件分支指令的采取/不采取结果。在一个实施例中,逻辑“1”可指示采取这种结果而逻辑“0”可指示不采取这种结果,或反过来。而且,在替代实施例中,GSR 240可使用对应于分支历史表格内的每个分支基础或对应于联合分支历史的信息。一个或多个分支历史表格(BHTs)可被用于这些实施例中以提供用于进行分支预测的全局历史信息。
如果足够的地址位(即,PC 210中存储的当前分支指令的PC)被用于验证当前分支指令,则用GSR 240中存储的全局历史哈希(hashing)这些位可具有比单个成员更有用的预测信息。在一个实施例中,该PC的低阶的10位可与该GSR的10位哈希。在替代实施例中,该PC的低阶的10位之外的位(也可能是不连续的位)可与该GSR的位哈希。而且,GSR 240的多个部分可与PC 210分别哈希。例如,26-位GSR 240可将其较低的13位以第一哈希函数与PC 210相结合,并将其较高的13位以第二哈希函数与PC 210相结合。然后两个独立的输出可被传送到预测逻辑和表格260。许多这样的替代是可能的并且在考虑中。
在一个实施例中,PC位和GSR位的哈希可包括该位的级联。在替代实施例中,哈希函数的结果可包括PC位与GSR位的异或。哈希逻辑250中执行的其它哈希函数可用于确定对一个或更多模式历史表格(PHTs)和/或预测逻辑260中包括的其它表格的索引。在一个实施例中,PC可单独用于索引预测逻辑260中的BTB。在本文中,用参考标号加字母指示的元件可只用标号共同指示。例如,预测表格262a-262d可被共同指示为预测表格262。
在一个实施例中,预测表格262可以是用于条件分支的PHT,其中该PHT的每个条目可保持2-位计数。特定的2-位计数可根据该条件分支指令结果的过去的行为(即,采取或不采取)而递增或递减。一旦达到了预定的阈值,则存储的预测可在采取和不采取的1-位预测值之间翻转。在2-位计数方案中,PHT的每个条目可保持下述四种状态之一(其中每种状态对应于1-位采取/不采取预测值):强烈预测不采取、预测不采取、强烈预测采取和预测采取。
替代地,一个或更多个预测表格262可被哈希逻辑250的输出索引,如上面所讨论的,且在一个实施例中这些表格262可存储被调整过(trained)的4-位权重。在一个实施例中,在同一时钟周期中可索引两个表格262。在一个实施例中,这两个表格262被来自哈希逻辑250的相同输出索引。在替代实施例中,这两个表格262被哈希逻辑250的逻辑内的独立的哈希逻辑的独立输出所索引。被读取出来的相应的两个权重被两个位符号扩展(sign-extended)并可由预测逻辑260内的逻辑加到彼此上。交替地,这两个符号扩展后的值还可被加到一起并被加到偏置权重(bias weight)。此偏置权重(也可以被两个位符号扩展)可被分支预测存储器读取,下面将会对其更详细描述。6-位和的最高有效位(MSB)可被用于指示条件分支指令的预测方向。
在一个实施例中,这些表格262可以被来自哈希逻辑250的输出所访问,该哈希逻辑250包括来自分支预测存储器的分支数(例如,1、2等),作为到逻辑250的输入。这些分支数可用于区分在同一时钟周期中被预测的独立的分支指令。例如,表格262的行访问(row access)可使用没有被哈希的一部分GSR 240,比如在一个实施例中,GSR 240的较低的7位。这些表格262的输出可以通过使用哈希输出作为其选择线的多路器(multiplexers)减少。到逻辑250内的该哈希函数的输入可包括PC 210、GSR 240的独立的部分(比如在一个实施例中,位的范围23-7)以及相应的分支数。
一旦预测(例如,采取/不采取或分支目标地址或两者皆有)被确定,则其值可被推测性地移位(shift)到GSR 240中。在一个实施例中,只有采取/不采取值被移位到GSR 240中。在其他实施例中,该分支目标地址的一部分被移位到GSR 240中。对如何更新GSR 240的确定在更新逻辑230中执行。如果在随后的管线级中确定了误预测,可用正确的结果修正这个(这些)值。然而,此过程还包括终止由于分支误预测获取的当前在该管线中运行(in flight)的指令,并从正确的PC重新获取指令。这些步骤包括会拖慢处理器性能的管线停顿。
在一个实施例中,来自PHT或预测逻辑和表格260中的其它逻辑的该1-位采取/不采取预测可被用于确定被用于索引i-cache并同时更新GSR 240的下一个PC。例如,在一个实施例中,如果该预测是采取,该分支目标地址可被用于确定下一个PC。如果该预测是不采取,则下一个序贯PC可被用于确定下一个PC。
在一个实施例中,更新逻辑230可确定GSR 240被更新的方式。例如,在需要全局历史更新的条件分支情况下,更新逻辑230可确定将该1-位采取/不采取预测位移位到GSR 240的最新位置中。在替代实施例中,分支可不提供用于该GSR的值。在其它实施例中,分支目标地址的一部分可被输入到GSR 240,例如针对间接分支,因为GSR 240和PC 210的分支可被用来索引预测逻辑260内的间接预测阵列。该分支目标地址的这一部分(例如,在一个实施例中是4个位)可以是从该分支目标地址的中间部分选择的。该分支目标地址的高阶位在被放入记忆体的类似位置中的指令之间不会经常改变,而低阶位由于访问记忆体内的不同的线(lines)、字(words)和字节(bytes)而频繁改变。例如,在一个实施例中,可以使用该分支目标地址的第7到4位。
在替代实施例中,更新逻辑230可不执行到GSR 240中的移位操作,而是执行该分支目标地址中的一个或更多位和GSR 240的一个或更多所选位的异或。然后GSR 240的所选位被该异或的结果取代。例如,该分支目标地址的3个位(比如该分支目标地址的第7到5位)和GSR 240的最新的3个位的异或的结果可取代GSR 240的最新的3个位。可以实现更新逻辑230的其它实施例。在每种情况下,间接分支指令的分支目标地址的一部分可被用于更新该全局历史以试图将这些指令的发生与当前的分支预测机制相关联。给定的分支或分支的类型是否为GSR提供值是设计的选择。
在更新逻辑230的每个实现中,GSR 240中存储的新的全局历史可增加条件分支方向预测(即,采取/不采取结果预测)和间接分支目标地址预测(比如BTB预测或间接目标阵列预测)两者的准确度。可以在对晶粒(die)面积、功率消耗和时钟周期增加的影响微不足道的情况下实现准确度的改进。
软件应用指令可以各种方式存储在指令缓存(比如图1的i-cache 102)内。例如,图3描绘了i-cache存储布置300的一个实施例,其中指令是使用4路组关联缓存结构(4-way set-associativecache organization)来存储的。指令338(其可以是根据ISA的可变长度指令)可以是4-路组关联缓存330内的缓存行的数据部分或块数据。在一个实施例中,缓存行的指令338可包括64个字节。在替代实施例中,可以选择不同的大小。
以指令338的连续字节存储的指令可包括一个或更多分支指令。一些缓存行可只具有几个分支指令而其它缓存行可具有若干分支指令。每个缓存行的分支指令的数量是不一致的。因此,针对相应的缓存行的分支预测信息的存储可能需要假设呈现很高数量的分支指令被存储在该缓存行内以为所有分支提供信息。然而,这种存储将需要许多晶粒面积且会增加功率消耗。复合存储是更高效的,该复合存储具有用于每个缓存行的常见数量(common-casenumber)的分支指令(其可以是很低数量的)的信息,以及用于非常见情况的缓存行内的附加分支的标记的主存储器。在该复合存储方案内可以有用于由该主存储器指示的附加分支的次级存储器。随后提供这种复合存储方案的更多细节。
缓存330的4路中的每一路还具有状态信息334,其可包括有效位(valid bit)及该缓存行的其它状态信息。例如,状态字段可包括用于确定相应缓存块的状态(比如MOESI方案内的状态)的编码位。而且,块状态334内的字段可包括用于指示最近最少使用(LRU)信息的位以用于驱逐。LRU信息可被用于指示缓存组332中的哪个条目最近最少被参考,并可与缓存控制器使用的缓存置换算法结合使用。
从处理器内核呈现到缓存330的地址310可包括块索引318以选择相应的缓存组332。在一个实施例中,块状态334和块标签336可被存储在独立的阵列中,而不是同一阵列的连续位内。块标签336可被用来确定4个缓存行中哪些正被所选的缓存组332访问。另外,地址310的偏移320可被用于指示缓存行内的具体的字节或字。
接着看图4,显示了具有复合分支预测的处理器内核400的一个实施例的总体框图。与图1对应的那些电路部分的标号与图1完全一致。i-cache子系统的缓存分层的两个层级被明确显示为i-cache 410和缓存412。在一个实施例中,缓存410和412可分别被实现为L 1缓存结构和L2缓存结构。在一个实施例中,缓存412可以是既存储指令又存储数据的分裂的第二层级缓存。在替代实施例中,缓存412可以是在两个或更多内核间的共享缓存并需要记忆体控制器中的缓存一致性控制电路。在其它实施例中,L3缓存结构可以存在于片上(on-chip)或片外(off-chip),且该L3缓存可在多个内核间共享,而不是缓存412。
如前所述,对于从i-cache 410获取的有用比例的地址,只有几个分支指令可被包括在相应的i-cache行中。一般而言,对于大多数应用代码中的大部分,分支仅仅在i-cache行内稀疏地找到。因此,对应于特定i-cache行的分支预测信息的存储可不需要为存储针对大量分支的信息而分配电路。例如,复合分支预测装置440可更高效地分配用于存储由分支预测单元122使用的分支预测信息的晶粒面积和电路。稀疏分支缓存420可存储用于每个i-cache行的预定常见稀疏数量的分支指令的分支预测信息。I-cache 410内的每个缓存行可在稀疏分支缓存420中具有相应的条目。在一个实施例中,常见稀疏数量的分支对于i-cache 410内的每个64-字节缓存行可以是2个分支。通过只为i-cache 410内的每个行的稀疏数量的分支存储预测信息,缓存420的大小可以从包括针对i-cache 410内的每个行的预定最大数量的分支的信息的存储大大减小。晶粒面积需求、电容式负载和功率消耗均可减小。
在一个实施例中,i-cache 410可以被组织为4-路组关联缓存。稀疏分支缓存420可以被组织为直接映射缓存。稀疏分支缓存420的每个条目可对应于i-cache 410内的缓存行。稀疏分支缓存420的每个条目可包括对应于i-cache 410的对应行的预定稀疏数量的分支指令(比如在一个实施例中,2个分支)的分支预测信息。在后面更详细地描述该分支预测信息。在替代实施例中,不同数量的分支指令可被确定为稀疏的且i-cache 410内的行的大小可以是不同大小的。缓存420可由从IFU 104发送至i-cache 410的统一线性地址索引。I-cache 410和缓存420两者都可由对应于缓存行边界的线性地址内的位的子集索引。例如,在一个实施例中,线性地址可包括具有小端(little-endian)字节次序的32个位,而i-cache 410内的行可包括64个位。因此,缓存410和420每个均可由终止于位6的线性地址的相同部分索引。
稀疏分支缓存422可被用于内核400内以存储被从缓存420驱逐的行。缓存422可具有与缓存420相同的缓存结构。当行被从i-cache 410驱逐并被放入缓存412时,其在缓存420中的相应条目可被从缓存420驱逐并被存储在缓存422中。用这种方式,当以前被驱逐的缓存行被从缓存412置换到i-cache 410时,针对此缓存行内分支的相应的分支预测信息也被从缓存422置换到缓存420。因此,相应的分支预测信息不需要被重建。由于不存在重建分支预测信息的过程,处理器的性能得以改善。
对于应用编码内包括密集封装的分支指令的部分,i-cache 410内的缓存行可包括多于稀疏数量的分支。稀疏分支缓存420的每个条目可存储超过i-cache 410的行内的稀疏数量的分支的附加分支的标记。如果附加分支存在,则相应的分支预测信息可被存储在密集分支缓存430中。
密集分支缓存430内的每个条目可对应于i-cache 410内的行的一部分。例如,i-cache 410可具有64-字节行而密集分支缓存430的每个条目可对应于64-字节行的8-字节部分。稀疏分支缓存420的每个条目可具有位的矢量,该位矢量标明相应的64-字节行中的哪个8-字节部分可具有附加分支,其中该64-字节行具有多于常见稀疏数量的分支。矢量位的数量和i-cache行的代表部分的大小可被选择为高效地捕捉(capture)应用代码中密集封装的分支部分的行为。
在一个实施例中,密集分支缓存430可以被组织为4-路组关联缓存。因此,密集分支缓存430可针对64-字节行的每个8-字节部分的4个分支指令存储分支预测信息。通过64-字节行内的8个8-字节部分,密集分支缓存430可针对单个64-字节行内的32个分支指令存储分支预测信息。在此实施例中,稀疏分支缓存420和密集分支缓存430的复合组合可针对i-cache 410内的64-字节行存储34个分支指令的分支预测信息。缓存410、412、420、422和430的大小、关联度(associativity)和密度可被选择以针对将在目标架构上运行的应用在性能和功率消耗间提供最佳权衡。
参考图5,显示了分支预测单元500的总体框图的一个实施例。与图2相对应的那些电路部分与图2的标号完全一致。这里,存储的复合分支预测信息可被传送至预测逻辑和表格260并传送至哈希逻辑250。在一个实施例中,该复合分支预测信息可以从i-caches存储到独立的缓存中,比如稀疏分支缓存420和422和密集分支缓存430。在一个实施例中,此信息可包括分支数量以区分在同一时钟周期内预测的分支指令、指示某种条件分支指令类型或其它的分支类型信息、要与表格260内的表格条目求和的权重信息、附加地址信息(比如到相应缓存行内的分支指令的末端字节(end byte)的指针)和相应的分支目标地址信息。
如同前面讨论过的,来自所存储的复合分支信息的偏置权重信息可与来自逻辑和表格260内的表格的相应的符号扩展权重值求和。此偏置权重也可在该求和之前被符号扩展而该6-位和的最高有效位(MSB)可被用于指示条件分支指令的预测方向。
图6描绘了稀疏缓存存储器布置600的一个实施例,其中存储了分支预测信息。在一个实施例中,缓存630可被组织为直接映射缓存。预定的稀疏数量的条目634可被存储在直接映射缓存630的缓存行的数据部分。在一个实施例中,稀疏数量可被确定为2。每个条目634可存储针对i-cache 410内的相应行内的特定分支的分支预测信息。附加分支可存在于该稀疏数量的分支之外的该相应行内的标记被存储在密集分支标记636中。
在一个实施例中,每个条目634可包括状态字段640,该状态字段640包括有效位及其它状态信息。端指针字段642可存储到i-cache 410的行内的相应的条件分支指令的最后字节的标记。例如,对于相应的64-字节i-cache行,端指针字段642可包括6个位以指向64个字节中的任一个。这个指针值可被附加到该线性地址值以既索引i-cache 410又索引稀疏分支缓存420且整个地址值可被发送到分支预测单元500。
预测信息字段644可包括在分支预测单元500中使用的数据。例如,分支类型信息可被传送以指示特定的分支指令是直接的、间接的、有条件的、无条件的还是其它的。另外,可存储偏置权重,其可与预测逻辑和表格260中的权重表格中的权重求和。如同前面针对分支预测单元500所讨论的,在一个实施例中,4-位权重可从预测表格260内的两个独立的表格读出。这些表格可由将PC 210和GSR 240结合的哈希函数的输出索引。被读出的相应的两个权重被两个位符号扩展并可被加到来自字段644的偏置权重,该偏置权重也被两个位符号扩展。6-位和的最高有效位(MSB)可被用来指示条件分支指令的预测方向。
相应的部分分支目标地址值可被存储在地址字段646中。只需要部分分支目标地址,因为可发现常见情况,在该常见情况中分支目标位于与该分支指令本身相同的页面(page)内。在一个实施例中,页面可包括4KB且只有12位的分支目标地址需要被存储在字段646中。更小的字段646进一步有助于减少晶粒面积、电容负载和功率消耗。对于需要比在字段646中存储的位更多的位的分支目标,可以使用独立的页面外阵列(out-of-page array)。
该密集分支标记字段636可包括位矢量,其中该矢量的每个位针对i-cache 410的相应的行内的一部分指示附加分支存在的可能性。例如,字段636可包括8-位矢量。每个位可对应于i-cache 410的64-字节行内的独立的8-字节部分。在一个实施例中,第一位可对应于i-cache 410的相应行的前8个字节的数据。该矢量中的每个连续的位可对应于该缓存行中的接下来的连续的8字节数据。在一个实施例中,字段636中的一组或多组位可指示可能存在于该64-字节缓存行的稀疏数量分支之外的附加分支。字段636中的特定组位可指示相应的8个字节组中存在的附加分支。在这种情况下,密集分支缓存430被索引。在一个实施例中,尽管密集分支缓存430可以与稀疏分支缓存420并行索引以节省电力,然而当在字段636中发现组位时只可索引缓存430。
图7描绘了密集分支缓存存储器布置700的一个实施例。在一个实施例中,使用4-路组关联缓存结构存储附加的分支预测信息。缓存730的缓存组732内的4个缓存行中的每一个可对应于i-cache410的64-字节缓存行内的8-字节区域。缓存730的4路中的每一个可具有状态信息734,该状态信息734可包括有效位和相应的缓存行的其它状态信息。
从处理器内核呈现至缓存730的地址310可传送块索引318以及偏移320的一部分以选择相应的缓存组732。密集分支缓存430可利用不同于i-cache 410和稀疏分支缓存420的可寻址边界。例如,在一个实施例中,缓存410和420可寻址具有64-字节边界的地址数据,而密集分支缓存430可寻址具有8-字节边界的地址数据。因此,可能还需要偏移320的一部分(比如总共6-位中的3个位)以索引缓存730。在一个实施例中,块状态734和块标签736可被存储在单独的阵列中,而不是在同一阵列中连续的位中。块标签336可被用于确定该4个缓存行中的哪些正在所选的缓存组732内被访问。分支预测信息可被存储在块数据738的连续位中。
在一个实施例中,每块数据738可包括端指针字段740,该端指针字段740存储到i-cache 410的行内的相应分支指令的最后字节的标记。例如,对于相应的64-字节i-cache行,端指针字段740可包括3个位以指向相应的8-字节区域内的任何字节。这个指针值可以附加到所使用的线性地址值以既索引i-cache 410又索引稀疏分支缓存420,且该整个地址值可被发送到分支预测单元500。
在一个实施例中,预测信息字段742可包括在类似于稀疏缓存420中的分支预测字段644的数据。这种信息可被用于分支预测单元500中。分支类型信息可被传送以指示特定的分支指令是直接的、间接的、有条件的、无条件的还是其它的。另外,可存储偏置权重,其可与预测逻辑和表格260中的权重表格中的权重求和。类似地,分支目标地址字段744可包括类似于稀疏缓存420中的地址字段646的数据。只需要部分分支目标地址,因为可发现常见情况,在该常见情况中分支目标位于与该分支指令本身相同的页面内。在一个实施例中,页面可包括4KB且只有12位(而不是全部32位)的分支目标地址需要被存储在字段744中。更小的字段744进一步有助于减少晶粒面积、电容负载和功率消耗。对于需要比在字段744中存储的位更多的位的分支目标,可以使用独立的页面外阵列(out-of-page array)。
图8描绘了分支预测的高效改进的方法800。本领域的技术人员可以修改方法800以得到替代的实施例。而且,此实施例中的步骤是按照序贯次序(sequential order)显示的。然而,一些步骤可以不同于所显示的次序发生,一些步骤可以同时执行,一些步骤可与其它步骤相结合,且在另一实施例中一些步骤可不存在。在所示实施例中,在框802中处理器获取指令。存储在该程序计数器中的线性地址可被传送到i-cache 410以获取连续字节的指令数据。根据i-cache 410内的缓存行的大小,可能不是该程序计数器的全部内容都被传送到i-cache 410。而且,在框804中,相同的地址可被传送到稀疏分支缓存420。
如果在L1稀疏分支缓存420中没有缓存命中(cache hit)(条件选择框806),则在框808中可以从L2稀疏分支缓存取得相应的缓存行。如果的确发生了未中(miss),则i-cache 410中相应的缓存行可能也不存在且它必须被从该第二层级缓存412获得。一旦在L1稀疏分支缓存420中的所请求的行被访问,则在条件选择框810中检查该稀疏分支条目以寻找有效条目。在一个实施例中,在代码执行过程中稀疏分支条目可被序贯填充。因此,在稀疏分支缓存420内的有效条目之间可能没有无效条目的“空隙”。一旦检测到无效条目,可能表明在i-cache 410的相应行内没有更多的分支指令了。如果没有发现无效条目,则i-cache 410内相应的行可有至少最大数量的稀疏分支指令。如果此相应的i-cache行内有比预定数量的稀疏分支更多的分支指令,则稀疏分支缓存420中存储的密集分支标记636内的位矢量可提供这样的标记。
如果没有有效稀疏分支条目(条件选择框810),在i-cache410的行内可能没有任何分支指令,或者在代码执行过程中没有检测出分支指令。在这种情况下,流控制返回框802。否则,检查第一稀疏分支条目。因为该稀疏分支是被序贯填充的且至少一个条目是有效的,所以该第一稀疏分支条目必定是有效的。可以并行检查该稀疏分支条目,比如检测是否设定了每个稀疏分支条目的状态字段640内的有效位。此处,流程是序贯描述的。当前稀疏分支条目被检测其相应的有效位以确定当前条目是否具有有用的分支预测信息(条件选择框812)。如果该有效位指示有存储的有用信息,则在框814中,稀疏分支缓存420可将在端指针字段642、分支预测信息字段644和分支目标地址字段646中存储的相应信息传送至该处理器。然后检测下一个稀疏分支条目的有效位。
如果还没有检查全部的预定稀疏数量的分支条目(条件选择框816),则方法800的控制流程返回框812。否则,可检查密集分支标记字段636中的密集位矢量以检查设定的位(条件选择框818)。如果在这个矢量内设定了一个或更多位,则在框820中可用程序计数器值的一部分索引密集分支缓存430,其中该部分具有比访问i-cache 410和稀疏分支缓存420时所使用的更多的最低有效位。这可能是由于该密集缓存能够在更细的粒度上(granularity)访问,因为密集分支标记字段636中的每个位可对应于小于i-cache行(比如64字节)的一个区域(比如8字节)。
如果密集分支缓存430是组关联的,该地址的标记字段和密集分支缓存的字段734内的有效位可被用于确定相应的缓存行以发送至该处理器。此缓存行可包括在端指针字段740、分支预测信息字段742和分支目标地址字段744中存储的信息。方法800内的控制流程然后返回框802。在相同时钟周期中并行预测的分支指令的数量取决于分支预测单元500内的电路。例如,在一个实施例中,在1个时钟周期内,稀疏分支缓存420能够发送针对2个稀疏分支指令的分支预测信息至该分支预测单元500。来自密集分支缓存430的分支预测信息可在后续的时钟周期中被发送。每个时钟周期由该分支预测信息代表的密集分支的数量和每个时钟周期预测的密集分支的数量取决于所选的实施例。
尽管上面已经非常详细地描述了各种实施例,然而,对本领域的技术人员而言,一旦完全理解上述披露,许多变形和修改将变得显而易见。所附权利要求应当被解读为涵盖所有这些变形和修改。
Claims (19)
1.一种微处理器,包括:
指令缓存(102);
包括第一多个条目的第一稀疏缓存(420),所述条目中的每一个对应于所述指令缓存的条目;以及
包括第二多个条目的密集缓存(430);
其中所述第一稀疏缓存的每个条目被配置为:
对不多于第一数量的分支指令存储分支预测信息(634);以及
存储指示所述指令缓存的相应条目是否包括大于所述第一数量的分支指令的标记(636);
其中所述密集缓存的每个条目被配置为对未包括在所述第一数量的分支指令中的附加分支指令存储分支预测信息(738)。
2.根据权利要求1所述的微处理器,其中所述标记用于选择所述密集缓存(430)的条目。
3.根据权利要求2所述的微处理器,进一步包括被配置为存储所述第一稀疏缓存的全部被驱逐条目的第二稀疏缓存(422)。
4.根据权利要求3所述的微处理器,其中所述指令缓存中的条目和所述第一稀疏缓存中的相应条目由相同的地址选择。
5.根据权利要求4所述的微处理器,其中所述稀疏缓存的条目中所存储的标记包括用于在所述密集缓存中选择条目的位矢量,每个位对应于所述指令缓存的条目内的一个区域。
6.根据权利要求4所述的微处理器,进一步包括通过所述分支预测信息中包括的相应的端指针(642)指示所述指令缓存的条目内的分支指令的位置。
7.根据权利要求4所述的微处理器,进一步包括在所述分支预测信息内指示分支指令的类型以及由分支预测单元使用的偏置权重值。
8.根据权利要求4所述的微处理器,其中所述分支预测信息包括将由分支预测单元使用的分支目标地址(646)。
9.一种用于改进分支预测的方法,包括:
对于指令缓存(102)的条目内不多于第一数量的分支指令在第一稀疏缓存(420)的条目中存储分支预测信息(634);
在所述第一稀疏缓存的所述条目中存储指示所述指令缓存的相应条目是否包括大于所述第一数量的分支指令的标记(636);以及
针对未包括在所述第一数量的分支指令中的附加分支指令在密集缓存(430)的条目中存储分支预测信息(738)。
10.根据权利要求9所述的方法,进一步包括使用所述标记来选择所述密集缓存(430)的条目。
11.根据权利要求10所述的方法,进一步包括在第二稀疏缓存(422)中存储所述第一稀疏缓存的被驱逐条目。
12.根据权利要求11所述的方法,进一步包括通过相同的地址选择在所述指令缓存中的条目和在所述第一稀疏缓存中的相应条目。
13.根据权利要求12所述的方法,其中所述稀疏缓存的条目中所存储的标记包括用于在所述密集缓存中选择条目的位矢量,每个位对应于所述指令缓存的条目内的一个区域。
14.根据权利要求12所述的方法,进一步包括通过所述分支预测信息中包括的相应的端指针(642)指示所述指令缓存的条目内的分支指令的位置。
15.根据权利要求12所述的方法,进一步包括在所述分支预测信息内指示分支指令的类型以及由分支预测单元使用的偏置权重值。
16.根据权利要求12所述的方法,其中所述分支预测信息包括将由分支预测单元使用的分支目标地址(646)。
17.一种复合分支预测装置,包括:
包括第一多个条目的第一稀疏缓存(420),所述条目中的每一个对应于指令缓存(102)的条目;
包括第二多个条目的密集缓存;
其中所述第一稀疏缓存的每个条目被配置为:
对不少于第一数量的分支指令存储分支预测信息;以及
存储指示所述指令缓存的相应条目是否包括大于所述第一数量的分支指令的标记;
其中所述密集缓存的每个条目被配置为对未包括在所述第一数量的分支指令中的附加分支指令存储分支预测信息。
18.根据权利要求17所述的复合分支预测装置,其中所述标记用于选择所述密集缓存的条目。
19.根据权利要求17所述的复合分支预测装置,进一步包括被配置为存储所述第一稀疏缓存(420)的全部被驱逐条目的第二稀疏缓存(422)。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/205,429 US8181005B2 (en) | 2008-09-05 | 2008-09-05 | Hybrid branch prediction device with sparse and dense prediction caches |
US12/205,429 | 2008-09-05 | ||
PCT/US2009/056136 WO2010028316A1 (en) | 2008-09-05 | 2009-09-04 | Hybrid branch prediction device with sparse and dense prediction caches |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102160033A CN102160033A (zh) | 2011-08-17 |
CN102160033B true CN102160033B (zh) | 2014-03-19 |
Family
ID=41217601
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980136972.0A Active CN102160033B (zh) | 2008-09-05 | 2009-09-04 | 具有稀疏和密集预测缓存的复合分支预测装置 |
Country Status (6)
Country | Link |
---|---|
US (1) | US8181005B2 (zh) |
EP (1) | EP2347332B1 (zh) |
JP (1) | JP5255701B2 (zh) |
KR (1) | KR101493019B1 (zh) |
CN (1) | CN102160033B (zh) |
WO (1) | WO2010028316A1 (zh) |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8489866B2 (en) | 2010-06-30 | 2013-07-16 | International Business Machines Corporation | Branch trace history compression |
US8635408B2 (en) * | 2011-01-04 | 2014-01-21 | International Business Machines Corporation | Controlling power of a cache based on predicting the instruction cache way for high power applications |
US9235419B2 (en) * | 2012-06-11 | 2016-01-12 | International Business Machines Corporation | Branch target buffer preload table |
US8972665B2 (en) | 2012-06-15 | 2015-03-03 | International Business Machines Corporation | Cache set selective power up |
US20140115257A1 (en) * | 2012-10-22 | 2014-04-24 | Advanced Micro Devices, Inc. | Prefetching using branch information from an instruction cache |
US9489203B2 (en) | 2012-12-11 | 2016-11-08 | Advanced Micro Devices, Inc. | Pre-fetching instructions using predicted branch target addresses |
US9489204B2 (en) | 2013-03-15 | 2016-11-08 | Qualcomm Incorporated | Method and apparatus for precalculating a direct branch partial target address during a misprediction correction process |
US9195606B2 (en) | 2013-03-15 | 2015-11-24 | Intel Corporation | Dead block predictors for cooperative execution in the last level cache |
US9639368B2 (en) * | 2014-06-13 | 2017-05-02 | International Business Machines Corporation | Branch prediction based on correlating events |
GB2534522B (en) | 2014-07-25 | 2016-12-28 | Imagination Tech Ltd | Conditional branch prediction using a long history |
US9940236B2 (en) * | 2014-12-17 | 2018-04-10 | Intel Corporation | Pointer chasing across distributed memory |
US10936713B2 (en) | 2015-12-17 | 2021-03-02 | The Charles Stark Draper Laboratory, Inc. | Techniques for metadata processing |
US10235176B2 (en) * | 2015-12-17 | 2019-03-19 | The Charles Stark Draper Laboratory, Inc. | Techniques for metadata processing |
US10474462B2 (en) * | 2016-02-29 | 2019-11-12 | Qualcomm Incorporated | Dynamic pipeline throttling using confidence-based weighting of in-flight branch instructions |
US10175982B1 (en) * | 2016-06-16 | 2019-01-08 | Apple Inc. | Storing taken branch information |
US10831678B2 (en) * | 2017-11-21 | 2020-11-10 | Arm Limited | Multi-tier cache placement mechanism |
TW201935306A (zh) | 2018-02-02 | 2019-09-01 | 美商多佛微系統公司 | 用於安全初始化的策略連結及/或載入之系統和方法 |
TWI794405B (zh) | 2018-02-02 | 2023-03-01 | 美商查爾斯塔克德拉普實驗室公司 | 用於政策執行處理的系統及方法 |
WO2019183877A1 (zh) * | 2018-03-29 | 2019-10-03 | 深圳市大疆创新科技有限公司 | 分支预测的方法与装置 |
EP3788488A1 (en) | 2018-04-30 | 2021-03-10 | Dover Microsystems, Inc. | Systems and methods for checking safety properties |
TW202022678A (zh) | 2018-11-06 | 2020-06-16 | 美商多佛微系統公司 | 用於停滯主處理器的系統和方法 |
US11841956B2 (en) | 2018-12-18 | 2023-12-12 | Dover Microsystems, Inc. | Systems and methods for data lifecycle protection |
US11714760B2 (en) | 2019-05-24 | 2023-08-01 | Texas Instmments Incorporated | Methods and apparatus to reduce bank pressure using aggressive write merging |
CN112559049A (zh) | 2019-09-25 | 2021-03-26 | 阿里巴巴集团控股有限公司 | 用于指令高速缓存的路预测方法、访问控制单元以及指令处理装置 |
US11726783B2 (en) * | 2020-04-23 | 2023-08-15 | Advanced Micro Devices, Inc. | Filtering micro-operations for a micro-operation cache in a processor |
US11520701B2 (en) * | 2021-04-02 | 2022-12-06 | Tenstorrent Inc. | Data structure optimized dedicated memory caches |
US11630670B2 (en) | 2021-07-21 | 2023-04-18 | Apple Inc. | Multi-table signature prefetch |
CN113504943B (zh) * | 2021-09-03 | 2021-12-14 | 广东省新一代通信与网络创新研究院 | 用于降低资源使用的混合分支预测装置实现方法及系统 |
WO2023237195A1 (en) * | 2022-06-09 | 2023-12-14 | Huawei Technologies Co., Ltd. | Sparse correlations in dynamic branch prediction |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5752259A (en) * | 1996-03-26 | 1998-05-12 | Advanced Micro Devices, Inc. | Instruction cache configured to provide instructions to a microprocessor having a clock cycle time less than a cache access time of said instruction cache |
CN1494688A (zh) * | 2001-02-24 | 2004-05-05 | �Ҵ���˾ | 新颖的大规模并行超级计算机 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5136697A (en) * | 1989-06-06 | 1992-08-04 | Advanced Micro Devices, Inc. | System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache |
US5163140A (en) | 1990-02-26 | 1992-11-10 | Nexgen Microsystems | Two-level branch prediction cache |
DE4211222B4 (de) * | 1991-04-05 | 2009-05-28 | Kabushiki Kaisha Toshiba, Kawasaki | Abzweigungs-Vorhersage-Vorrichtung und Abzweigungs-Vorhersage-Verfahren für einen Super-Skalar-Prozessor |
US5574871A (en) | 1994-01-04 | 1996-11-12 | Intel Corporation | Method and apparatus for implementing a set-associative branch target buffer |
DE69715280T2 (de) * | 1996-03-25 | 2003-08-07 | Sun Microsystems Inc | Verfahren zur Sprungvorhersage in einem mehrstufigen Cachespeichersystem |
US5954816A (en) | 1996-11-19 | 1999-09-21 | Advanced Micro Devices, Inc. | Branch selector prediction |
US6018786A (en) * | 1997-10-23 | 2000-01-25 | Intel Corporation | Trace based instruction caching |
US5974542A (en) | 1997-10-30 | 1999-10-26 | Advanced Micro Devices, Inc. | Branch prediction unit which approximates a larger number of branch predictions using a smaller number of branch predictions and an alternate target indication |
US6108774A (en) | 1997-12-19 | 2000-08-22 | Advanced Micro Devices, Inc. | Branch prediction with added selector bits to increase branch prediction capacity and flexibility with minimal added bits |
US6804799B2 (en) | 2001-06-26 | 2004-10-12 | Advanced Micro Devices, Inc. | Using type bits to track storage of ECC and predecode bits in a level two cache |
US7024545B1 (en) * | 2001-07-24 | 2006-04-04 | Advanced Micro Devices, Inc. | Hybrid branch prediction device with two levels of branch prediction cache |
US20040148497A1 (en) * | 2003-01-27 | 2004-07-29 | Ali Vahidsafa | Method and apparatus for determining an early reifetch address of a mispredicted conditional branch instruction in an out of order multi-issue processor |
US20050228977A1 (en) * | 2004-04-09 | 2005-10-13 | Sun Microsystems,Inc. | Branch prediction mechanism using multiple hash functions |
US20070186049A1 (en) * | 2006-02-03 | 2007-08-09 | International Business Machines Corporation | Self prefetching L2 cache mechanism for instruction lines |
US20070266228A1 (en) | 2006-05-10 | 2007-11-15 | Smith Rodney W | Block-based branch target address cache |
-
2008
- 2008-09-05 US US12/205,429 patent/US8181005B2/en active Active
-
2009
- 2009-09-04 KR KR1020117007675A patent/KR101493019B1/ko active IP Right Grant
- 2009-09-04 JP JP2011526253A patent/JP5255701B2/ja active Active
- 2009-09-04 EP EP09792290A patent/EP2347332B1/en active Active
- 2009-09-04 CN CN200980136972.0A patent/CN102160033B/zh active Active
- 2009-09-04 WO PCT/US2009/056136 patent/WO2010028316A1/en active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5752259A (en) * | 1996-03-26 | 1998-05-12 | Advanced Micro Devices, Inc. | Instruction cache configured to provide instructions to a microprocessor having a clock cycle time less than a cache access time of said instruction cache |
CN1494688A (zh) * | 2001-02-24 | 2004-05-05 | �Ҵ���˾ | 新颖的大规模并行超级计算机 |
Also Published As
Publication number | Publication date |
---|---|
EP2347332A1 (en) | 2011-07-27 |
EP2347332B1 (en) | 2012-11-07 |
KR101493019B1 (ko) | 2015-02-12 |
US20100064123A1 (en) | 2010-03-11 |
KR20110081963A (ko) | 2011-07-15 |
US8181005B2 (en) | 2012-05-15 |
JP2012502367A (ja) | 2012-01-26 |
JP5255701B2 (ja) | 2013-08-07 |
CN102160033A (zh) | 2011-08-17 |
WO2010028316A1 (en) | 2010-03-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102160033B (zh) | 具有稀疏和密集预测缓存的复合分支预测装置 | |
EP2476060B1 (en) | Store aware prefetching for a datastream | |
US9367471B2 (en) | Fetch width predictor | |
US8156286B2 (en) | Processor and method for using an instruction hint to prevent hardware prefetch from using certain memory accesses in prefetch calculations | |
US20110093658A1 (en) | Classifying and segregating branch targets | |
US5774710A (en) | Cache line branch prediction scheme that shares among sets of a set associative cache | |
CN106569958B (zh) | 以内存访问类型来分配的全关联快取内存 | |
EP1441284A2 (en) | Apparatus and method for efficiently updating branch target address cache | |
EP1439460B1 (en) | Apparatus and method for invalidation of redundant entries in a branch target address cache | |
JP2010533920A (ja) | 階層マイクロコードストアを有するマルチコアプロセッサ | |
EP1439459B1 (en) | Apparatus and method for avoiding instruction fetch deadlock in a processor with a branch target address cache | |
US11099850B2 (en) | Branch prediction circuitry comprising a return address prediction structure and a branch target buffer structure | |
US20120110392A1 (en) | Misalignment predictor | |
US10853075B2 (en) | Controlling accesses to a branch prediction unit for sequences of fetch groups | |
US20070083711A1 (en) | Reconfiguring caches to support metadata for polymorphism | |
EP4020229A1 (en) | System, apparatus and method for prefetching physical pages in a processor | |
EP4020227A1 (en) | Dynamic shared cache partition for workload with large code footprint | |
TW202219745A (zh) | 微處理器和預取指調整方法 | |
CN114647447A (zh) | 基于上下文的存储器间接分支目标预测 | |
KR20200134164A (ko) | 마이크로-동작 캐시로 마이크로-동작들을 할당하도록 구성된 프로세싱 장치 및 그것의 동작 방법 | |
US20230342148A1 (en) | Microprocessor with non-cacheable memory load prediction | |
CN111984323A (zh) | 将微操作分配到微操作高速缓存器的处理设备及其操作方法 | |
CN115858022A (zh) | 集群化解码管线的可缩放切换点控制电路系统 | |
Glykopoulos et al. | A survey on caching and buffering techniques for improving processor performance and reducing cost |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |