CN114661360A - 基于分支指令类型的分段分支目标缓冲器 - Google Patents

基于分支指令类型的分段分支目标缓冲器 Download PDF

Info

Publication number
CN114661360A
CN114661360A CN202111389356.5A CN202111389356A CN114661360A CN 114661360 A CN114661360 A CN 114661360A CN 202111389356 A CN202111389356 A CN 202111389356A CN 114661360 A CN114661360 A CN 114661360A
Authority
CN
China
Prior art keywords
branch
target
branch instruction
instruction
btb
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111389356.5A
Other languages
English (en)
Inventor
N·K·桑达拉拉詹
S·萨布拉蒙尼
S·S·S·琼加拉
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of CN114661360A publication Critical patent/CN114661360A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • G06F12/0882Page mode
    • 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/3017Runtime instruction translation, e.g. macros
    • 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)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

本申请公开了基于分支指令类型的分段分支目标缓冲器。在一个实施例中,处理器包括:分支预测器,该分支预测器用于预测分支指令是否要被采用;以及分支目标缓冲器(BTB),该BTB耦合至分支预测器。分支目标缓冲器可被分段为第一高速缓存部分和第二高速缓存部分,其中,响应于分支要被采用的指示,BTB用于至少部分地基于分支指令的类型、分支指令的发生频率、以及同分支指令的目标的目标地址与该分支指令的地址之间的距离有关的空间信息来访问第一高速缓存部分和第二高速缓存部分中的一者中的条目。描述并要求保护其他实施例。

Description

基于分支指令类型的分段分支目标缓冲器
技术领域
实施例涉及对处理器中的分支目标缓冲器的设计和使用。
背景技术
在现代处理器中,分支目标缓冲器(BTB)是处理器核内的、对不同分支指令的目标位置进行高速缓存的存储器。当核的分支预测器预测分支要被采用时,目标位置从BTB被读取,该目标位置是要被取出并执行的下一指令的位置。BTB中的任何误预测均导致误预测损害,该误预测损害稍后通过针对直接分支的解码时的分支地址计算(BAC)或针对间接分支的后分支执行来修复。在变得越来越常见的多个高代码占用空间工作负荷中,BTB误预测可能导致与前端停止和重定向有关的性能损害,这些前端停止和重定向可能不利地影响总执行时间。另外,由于在分配时可用的信息有限,因此在BTB使用中存在低效性。
附图说明
图1是根据实施例的处理器核的框图。
图2是根据实施例的方法的流程图。
图3是根据另一实施例的方法的流程图。
图4是根据另一实施例的方法的流程图。
图5是根据另一实施例的方法的流程图。
图6是根据又一实施例的方法的流程图。
图7A和图7B图示核架构的框图。
图8是根据本发明的实施例的可具有多于一个的核、可具有集成存储器控制器、以及可具有集成图形器件的处理器的框图。
图9是根据本发明的实施例的第一更具体的示例性系统的框图。
图10是根据本发明的实施例的SoC的框图。
图11是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
在各实施例中,处理器包括分支目标缓冲器(BTB),该BTB具有利用与不同类型的分支指令有关的信息的布置,以改善BTB性能并减小BTB尺寸。更具体地,在实施例中,BTB可以被布置为具有多个独立的存储器结构,这些独立的存储器结构用于基于给定的分支指令类型存储分支目标信息以及与分支指令相关联的其他元数据。更进一步地,根据实施例,一些实施例可利用在分支指令中提供的信息来实现分配和目标预测,该信息诸如给定的指令集架构(ISA)中的分支指令中所包括的一个或多个字段。要理解,尽管本文中呈现了特定的BTB配置和分支指令,但实施例不限于这些示例,并且各种BTB配置和分支指令可利用实施例。
在实施例中,BTB可被配置成用于将与不同类型的分支指令有关的信息存储在BTB的不同的独立部分中。不同类型的分支指令的此类不同的引导可基于从这些不同的指令类型预期的不同的表现。更具体地,当基于频繁发生的分支目标在其中发生的代码区域来检查这些分支目标时,在这些分支目标之间可能存在很高的局部性。这些代码区域通常跨越多个高速缓存行。进一步地,取决于分支类型,分支发生频率以及分支与其目标之间的典型距离可能明显不同。常规的BTB微架构并未利用此类现象或针对此类现象进行优化。利用实施例,BTB误预测可以使用页和分支目标热度(例如,最频繁发生)信息来减少。
这一点是这样是由于不同分支类型在其发生频率(时间信息)、距其目标的典型距离、以及它们看到的不同目标的数量方面有所不同。例如,直接分支是最常见的分支类型。直接跳转和直接有条件分支最常在与分支程序计数器(PC)(即,分支指令的地址)相同的页内看到其目标,而直接调用通常看到其目标位于与分支PC在其中发生的页不同的页中。间接分支不经常发生,但相较于其他分支类型具有相对较高的未命中率。
利用实施例,BTB结构在具有对分支类型和分支目标落入其中的热区域的认知的情况下被布置。在一个特定的实现方式中,BTB可以具有至少两个独立的高速缓存结构,在本文中被称为热高速缓存和目标高速缓存。热高速缓存可被配置成用于存储针对高度发生的直接分支的分支目标信息,在实施例中,这些直接分支可包括直接跳转和调用、以及直接有条件分支。在一个实现方式中,热高速缓存可以被划分成两个组件,即所谓的△高速缓存和页/偏移高速缓存,△高速缓存和页/偏移高速缓存自身可包括分离的高速缓存结构。
利用此种配置,△高速缓存可用于存储其目标典型地与分支处于同一存储器页(例如,4千字节(kB)页)内的直接跳转和有条件分支。进而,页高速缓存/偏移高速缓存可用于存储其目标通常处于不同的页中的直接调用。在这些目标在其中发生的重复的页方面,可能存在局部性。偏移高速缓存帮助捕捉页内目标位于其中的特定位置(如被调用的函数的位置)。将目标信息划分成页和偏移允许该信息跨将控制转移至同一目标的若干分支被重用。
进而,目标高速缓存可用于存储针对较不频繁使用的分支指令的分支目标信息,这些分支指令可包括间接分支和较不频繁发生的直接分支。考虑到直接分支大多被捕捉在△高速缓存和页/偏移高速缓存中,这些较不频繁发生的分支具有较大的可能性被保留并且因此还引起其未命中率的降低。
现在参考图1,示出的是根据实施例的处理器核的框图。具体如图1中所示,处理器核的前端电路100可包括分支预测器101、BTB 102、指令取出电路(取出器)103和指令解码电路(解码器)104。取出器103可取出指令以供解码器104进行解码。要理解,在一些实现方式中,在前端电路100内可存在附加组件。在本文中的相关方面中,分支预测器101可包括各种分支预测表和控制电路系统,该控制电路系统接收传入的信息,该传入的信息包括给定指令的虚拟地址(VA)连同分支历史信息,其可用于更新分支预测器101内的表。
当给定的VA在分支预测器101内命中时,可获得分支预测。在本文中的实施例中,此种预测可以是对被采用路径或不被采用路径的预测。当预测是被采用预测时,虚拟地址被提供至BTB 102作为传入的程序计数器(PC)值。可对该PC进行散列化以获得用于访问BTB102的各种结构中所存储的信息的标签,如下文进一步所描述。在实施例中,BTB控制电路105可执行此类散列化以生成标签。而且,如本文中所描述,其中除了诸如本文中所描述的提示信息之类的其他信息之外,BTB控制电路105还可根据分支指令的类型来控制BTB 102的各种结构内的条目的分配和更新,该提示信息可在指令解码之后从解码器104被接收。
更具体地,如图1中所示,BTB 102包括分离的结构,包括目标高速缓存150和热高速缓存120。进而,热高速缓存120由页高速缓存130、偏移高速缓存140和△高速缓存110形成。热高速缓存120可用于帮助捕捉针对直接分支的目标PC信息。由于目标可能处于同一页中或者跨不同的页,因此信息被捕捉到△高速缓存110中,或者被捕捉到页高速缓存130和偏移高速缓存140(一般也被称为页/偏移高速缓存)中。在实施例中,当目标处于同一页中时,△高速缓存110捕捉该目标。为此,每个条目可以是12位的,以捕捉页内所有可能的距离。当PC和目标在不同的页上时,页高速缓存130和偏移高速缓存140可共同地捕捉目标。52位页信息被存储在页高速缓存130中,而偏移高速缓存140存储4K页内的12位偏移。
如进一步所示,BTB监视器160(也被称为监视器电路)可耦合至这些各种高速缓存,以提供用于访问特定结构(例如,热高速缓存或目标高速缓存)的信息。BTB监视器160捕捉用于被分配在热高速缓存中的所有直接分支的条目。每个条目捕捉△高速缓存或页/偏移高速缓存中的条目ID。附加的标志位帮助将条目区分为属于△高速缓存还是页高速缓存和偏移高速缓存。BTB监视器160提供用于标识直接分支是否被捕捉在热高速缓存120中的快速方法。在实施例中,BTB监视器160是以PC索引的,并且使用16位标签来标识特定的条目。
如所图示,BTB 102的每个部分可将不同的信息存储在其条目中。具体而言,目标高速缓存150可具有多个条目或行,每个条目或行具有用于存储标签的标签字段112、用于存储与标签相关联的分支指令的目标地址的目标字段114、以及用于存储元数据的元数据字段116。进而,页高速缓存130包括多个条目,每个条目具有用于存储目标的页信息的页ID字段132、以及用于存储元数据的元数据字段134,元数据可包括有用性信息和新近度信息(诸如年龄)。类似地,偏移高速缓存140包括多个条目,每个条目具有用于存储目标的偏移信息的偏移字段142以及用于存储元数据的元数据字段144。进而,△高速缓存110包括多个条目,每个条目具有用于存储△信息(即,分支与目标指令之间的距离)的△字段152、以及用于存储元数据的元数据字段154。如进一步所示,BTB监视器160也可包括多个条目,每个条目用于存储标签字段162、条目ID字段164以及标志字段166。在实施例中,条目ID可标识热高速缓存120中的高速缓存中的一个或多个高速缓存内的相关条目。进而,标志可被用作对选择电路170的输入,该选择电路170被实现为解复用器,其提供关于针对给定指令的信息是被存储在页和偏移高速缓存中还是△高速缓存中的指示。
如图1中进一步所示,BTB 102进一步包括另一选择电路180,该选择电路180可被实现为复用器。选择电路180接收采用来自各种高速缓存的分支目标信息的形式并基于命中指示符的输出信息,并且来自BTB监视器160的标志选择给定的分支目标信息以供输出。在实施例中,BTB 102可将该分支目标信息输出至取出电路,以从由该分支目标信息指示的目标地址取出指令。
目标高速缓存150可被构造成像常规BTB一样,但在尺寸上小得多。目标高速缓存150主要用于捕捉相较于直接分支不那么频繁的间接分支,并且还捕捉不频繁发生的直接分支。目标高速缓存150是以PC索引的,并且使用16位标签来标识特定的条目。
尽管图1详述了特定的BTB组织,但存在其他可能的替代设计选项。例如,在另一实施例中,BTB存储未被划分为明确的偏移高速缓存和△高速缓存。相反,维护具有两倍存储尺寸的单个较大的偏移高速缓存,并且基于在BTB监视器中捕捉的或直接来自传入的PC的分支类型信息来对条目进行解释。基于工作负荷特性,可以动态地利用同一结构捕捉更多的偏移或△,这可能引起甚至更高的未命中率降低。
在又一替代配置中,目标高速缓存可以被组织成更像其他热高速缓存,使得它也是无标签的,以降低存储要求。在此种组织上,BTB监视器可以首先被访问以标识保持分支目标的结构并且随后各个表被访问以提供分支目标,而不是并行地访问BTB监视器和目标高速缓存。
在又一实现方式中,BTB可被组织成基于分支的类型来对其进行分配,而不是使用△高速缓存和偏移高速缓存基于分支PC和目标距离来分配。由于直接有条件分支和直接跳转大多使其目标处于同一页中,因此其目标可以被存储在△高速缓存中。另一方面,直接调用使其目标中的大多数处于不同的页中,并且由此,此类目标可以被存储在偏移高速缓存中。如果目标由于分支至目标的距离而未被捕捉在相应的表中,则目标高速缓存可以利用分支目标而被分配。
表1列出示例BTB的不同组件中的条目数量,并将其与常规BTB进行比较。如所见,这两者在尺寸上类似,其中根据一个实施例的BTB约少消耗了2KB存储。
表1
组件 每条目(位) 条目数量 整体存储(KB)
BTB监视器 36 8192 36
页高速缓存 56 512 3.5
偏移高速缓存 16 768 1.5
△高速缓存 16 580 1.13
目标高速缓存 88 4096 44
APT-BTB(总存储) 86.13
基准/常规BTB 88 8192 88
来自BTB的目标预测可使用传入PC并行地访问目标高速缓存和BTB监视器而发生。如果PC是间接分支的,则仅目标高速缓存可以提供预测。否则,取决于目标在其中命中的表来给出目标。
现在参考图2,示出了根据实施例的方法的流程图。如图2中所示,方法200是一种用于目标预测过程的方法,用于至少部分地基于分支目标缓冲器中所呈现的信息来确定针对被采用分支指令的目标地址。由此,方法200可由分支预测器的硬件电路系统单独地或者与固件和/或软件组合地执行,该硬件电路系统诸如控制电路连同相关联的BTB硬件和BTB控制电路。
如所图示,方法200开始于接收传入指令(框210)。接下来,判定指令是否为被采用分支指令(菱形框215),这可在分支预测器中进行。如果否,则目标地址可以被设置为当前指令的递增的值(例如,PC+1)(框220)。
替代地,如果判定指令是要采用的分支指令,则控制接下来传递至菱形框230,以判定其是否为直接分支指令。在实施例中,可基于指令的类型和/或指令中所包括的提示信息来作出此种判定。如果否,则控制传递至菱形框240,以判定指令是否在BTB的目标高速缓存中命中。如果未在BTB的目标高速缓存中命中,则目标地址可以被设置为当前指令的递增的值(例如,PC+1)(框245)。否则,如果判定指令实际上在目标高速缓存中命中,则目标地址可被设置为从目标高速缓存内的命中条目获得的目标地址(框250)。
仍参考图2,如果分支指令被确定为直接分支指令,则控制替代地传递至菱形框260,以判定其是否为直接调用指令。如果是,则接下来在菱形框270处判定指令是否在页/偏移高速缓存中命中。如果指令在页/偏移高速缓存中命中,则控制传递至框280,在框280处,目标地址可被设置为从页/偏移高速缓存内的命中条目获得的目标地址,即给定的页和偏移。
仍参考图2,如果分支指令是另一类型的直接分支,则控制传递至菱形框290,在菱形框290处,判定指令是否在△高速缓存中命中。如果指令未在△高速缓存中命中,则控制传递至菱形框240,如上文所讨论。当判定分支指令在△高速缓存中命中时,控制传递至框295,在框295处,目标地址可以被设置为当前指令的值和从△高速缓存的命中条目提供的△值,这引导至同一页中的另一位置。要理解,虽然在图2的实施例中以该高级别示出,但是许多变型是可能的。
对于直接分支,对BTB的目标更新/分配可在解码阶段后执行,或者对于间接分支,对BTB的目标更新/分配可在执行后执行,其中实际分支目标是可用的。如果目标从热高速缓存被预测,并且预测是高度准确的,则与PC相对应的目标高速缓存条目被无效。这允许条目被重用。如果目标从目标高速缓存被预测,则对于直接分支,对分配热高速缓存中的条目作出尝试。如果PC完全未命中,则分配将在热高速缓存、BTB监视器和目标高速缓存中作出。注意,由于条目被保留用于热PC,因此并非所有的分配尝试均是成功的。
现在参考图3,示出的是根据另一实施例的方法的流程图。更具体地,图3的方法300是根据实施例的用于执行目标更新过程的方法。由此,方法300可由例如BTB控制电路的硬件电路系统单独地或与固件和/或软件组合地执行。
如所图示,方法300开始于接收传入的程序计数器值和目标地址(框305)。注意,一旦正确的目标基于在分支地址计算阶段后可用的信息是已知的,就可获得此信息。接下来,在框310处,标识分支指令的类型。如果确定分支类型是直接调用,则控制传递至框320,在框320处,判定目标地址是否从页/偏移高速缓存获得(框320)。如果是,则控制传递至框325,在框325处,可以对与页/偏移高速缓存内的条目相关联的各种元数据进行更新。具体地,如所示,在框325处,可更新(例如,增加)有用性和年龄元数据,以标识更高的有用性以及指示更新近的使用。接下来,在菱形框330处判定是否已经达到最大有用性。如果是,则在框335处可以从目标高速缓存移除针对该程序计数器值的对应条目。
仍参考图3,替代地,如果确定分支指令是另一类型的直接指令(并非直接调用),则控制传递至框340。此处,判定目标地址是否从△高速缓存获得(框340)。如果是,则控制传递至框345,在框345处,可以对与△高速缓存内的条目相关联的各种元数据(例如,有用性和年龄元数据)进行更新。接下来,在菱形框350处判定是否已经达到最大有用性。如果是,则在框355处可以从目标高速缓存移除针对该程序计数器值的对应条目。
否则,如果确定分支指令是另一类型的分支,则控制传递至框360。在框360处,判定目标地址是否从目标高速缓存获得。如果是,则控制传递至框365,以判定目标是否正确。如果目标是正确的,则在框370处,可以对与目标高速缓存内的条目相关联的各种元数据(例如,置信度值、有用性和年龄元数据)进行更新。注意,有用性元数据是最大置信度的指示。一旦条目达到最大置信度,则该有用性指示符被置位。但是该条目可能在该置位后看到误预测,这降低置信度。置位的有用性指示符帮助在误预测的较旧的条目相对于被分配并正在建立置信度的新的条目之间进行区分。接下来,在框375处判定针对该条目的信息是否可以被分配至△高速缓存或页/偏移高速缓存。如果该分配操作失败,则在框380处,可以对有用性元数据进行减少。
仍参考图3,如果在框385处确定分支指令在BTB内未命中,则控制传递至框390,在框390处,分支指令可在目标高速缓存内进行分配。此外,当确定对应的分支指令是直接分支时(如在框395处所确定),则可执行框375处所示的操作。具体而言,如果条目在热高速缓存(△高速缓存和/或页/偏移高速缓存)中可用,则该分支指令可被分配至△高速缓存或页/偏移高速缓存中的一者。
要理解,虽然在图3的实施例中以该高级别示出,但是许多变型和替换方案是可能的。例如,尽管分支目标缓冲器的控制电路系统可以标识特定的指令类型并将此类信息用于目标预测和目标更新两者,但在其他情况下,与分支指令自身结合提供的提示信息可以用于更优地执行分配。
也就是说,为了采用根据实施例的BTB的配置,可在给定ISA中的至少一些分支指令内提供提示信息,以允许编译器和/或软件引导目标的期望位置。这可以用于优化对BTB结构的利用。
利用此类基于ISA的提示信息,用户或编译器可以最优地引导分配和对BTB的更新。上文所描述的默认策略可能对程序代码的看法有限并且由此可能作出次优的选择,但是性能仍然远远好于常规BTB组织。BTB可以利用ISA扩展来增强,以基于各个工作负荷特性来最优地分配分支。可以从了解代码访问简档的用户处接收此种扩展信息,或者从与某些概况分析信息组合的编译器接收此种扩展信息。对于在较长的时段内进行同一任务的企业和HPC工作负荷,先前的概况分析信息对于最优地放置目标而言可能是一种非常有用的引导。
现在参考图4,示出的是根据另一实施例的方法的流程图。更具体地,图4的方法400是根据实施例对使用ISA中的分支指令中所包括的信息来增强指令到分支目标缓冲器中的各部分中的分配的高级别图示。由此,方法400可由BTB硬件和BTB控制电路单独地或与固件和/或软件组合地执行,并且可在更新路径上发生,其中分支指令被解码并且指令中提供的信息是已知的。
如所示,方法400开始于对分支指令进行解码(框410)。在实施例中,指令解码器可对指令进行解码并随后将其提供至包括BTB的流水线的进一步的部分。接下来,在框420处,可以判定分支指令是否被扩展为具有提示信息,该提示信息可存在于指令的一个或多个字段中。如果否,则控制传递至框430,在框430处,可使用默认分配策略将分支指令分配到分支目标缓冲器的给定部分中(框430)。在实施例中,可根据上文所讨论的图3进行此种默认分配策略。
否则,如果判定分支指令被扩展为具有此种提示信息,则控制传递至框440,在框440处,可以对分支指令的扩展字段进行解码。如本文中所描述,可能存在不同风格的此类扩展字段。不论特定的提示信息如何,控制传递至框450,在框450处,可以基于扩展字段将分支指令分配至分支目标缓冲器的给定部分中。要理解,虽然在图4的实施例中以该高级别示出,但是许多变型和替换方案是可能的。
利用ISA提示信息,一个或多个指令字段的一个或多个位或其他指示符可用于提供分配信息。在一个实施例中,分支指令可以包括单个位字段来提供此种提示信息。该单个位字段可用于指示相同的页状态,即,目标地址预期与分支指令的地址处于同一页中。在实施例中,该字段的置位值(逻辑“1”)可用于指示目标预期处于同一页中,并且重置值(逻辑“0”)可用于指示目标预期处于不同页中。注意,在一些情况下,可基于具有此种扩展字段的给定的用户级分支指令的编程人员选择来控制该字段。在其他情况下,该字段可以经由编译器基于各个工作负荷特性来编程,这些工作负荷特性如基于与工作负荷的执行有关的先前概况分析信息来确定。
在一个实施例中,扩展或提示字段可被包括在指令的指令前缀部分中。在特定实施例中,提示信息可被包括在分支指令的组2指令前缀中。虽然实施例不限于此方面,但可包括提示信息的分支指令可以包括直接分支指令和间接分支指令(JMP%EAX),直接分支指令包括有条件直接分支指令(诸如,如果条件被满足则跳转(JCC)、JNZ等等)和无条件分支指令(诸如,函数调用(CALL)、直接无条件跳转(JMP ADDR)等等)。在另外的其他实施例中,提示信息可以被包括在指令的其他部分中,诸如基于操作码编码、立即数数据等等。
当然,在其他实施例中,可存在附加的或不同的指示符来提供与分支指令相关联的提示信息,以实现根据实施例的在分支目标缓冲器的给定片段中的优先分配。例如,在另一实施例中,ISA中的至少一些分支指令可提供提示字段内的多个指示符或位来提供与根据实施例的BTB的特定片段内的条目的优先分配有关的提示信息。
更具体地,如下文所描述,在一个示例实施例中,提示字段可包括5个不同的位或指示符,每个位或指示符用于提供特定类型的提示信息。这些提示可被枚举为位1-5,如下:
流指示符(位1):该位可被设置为标记流代码,以指示不需要在BTB中分配那些分支指令。如果被置位,则其指示流代码在执行中并且因此没有到BTB中的新目标的分配被批准。
空间指示符(位2):该位提供关于距分支PC的分支目标距离的指示。如果被置位,则目标预期与分支PC处于不同的页中。否则,目标预期与分支PC处于同一页中。
流行指示符(位3):该位指示流行的目标并且由此当在热高速缓存中进行分配时被提供有优先性。
阶段指示符(位4):该位指示程序已经进入新的阶段并且由此具有高置信度的先前条目可以被重置,这有助于对针对传入条目的分配排定优先级。
超控指示符(位5):当被置位时,该位使得来自软件的提示能够用于分配/对BTB的更新。如果未被置位,则该位超控其他位,以指示软件层无法提供任何提示并且底层硬件可以利用默认分配/更新策略进行。
注意,不同风格的ISA分支指令可以包括指令的一个或多个提示字段中的这些或其他指示符中的全部或部分。现在参考表2,示出的是根据一个实施例的、提供提示信息的ISA中的调用指令的组2指令前缀中可包括的提示信息的示例编码。当然,对于调用和其他分支指令,可包括其他编码以及更多或不同的提示信息。
表2
00H–没有流代码
01H–流代码
02H–目标与分支处于不同的页中
03H–目标与分支处于同一页中
在不同的情形中,此种提示信息可由编程人员在原始代码中提供,或者可由编译器至少部分地基于实际代码执行的概况分析信息来包括。当然,在更进一步的实施例中,可存在其他类型的提示信息。
现在参考图5,示出的是根据另一实施例的方法的流程图。更具体地,图5的方法500是根据实施例对使用ISA中的分支指令中所包括的信息来增强指令到分支目标缓冲器中的各部分中的分配的更详细的图示。由此,方法500可由分支预测器的硬件电路系统单独地或者与固件和/或软件组合地执行,该硬件电路系统诸如控制电路连同相关联的BTB硬件和BTB控制电路。
如所示,方法500开始于对分支指令进行解码(框505)。在实施例中,指令解码器可对指令进行解码。接下来,在框510处,可以判定分支指令是否被扩展为具有包括一个或多个提示指示符的提示字段。如果否,则控制传递至框515,在框515处,可使用默认分配策略将分支指令分配到分支目标缓冲器的给定部分中。
当判定存在提示字段时,控制传递至菱形框520,以判定字段内的流指示符是否被置位。如果流指示符被置位,则在框525处,指令不在分支目标缓冲器内分配。也就是说,由于指示指令是流代码的部分,因此指令不会再次被使用并且由此不存在分配到分支目标缓冲器中的理由。
如果流指示符未被置位,则控制传递至菱形框530,以判定不同页指示符是否被置位(指示分支和目标处于不同的页中)。如果不同页指示符未被置位,则控制接下来传递至菱形框535,在菱形框535处判定流行目标指示符是否被置位。如果流行目标指示符被置位,则可对到△高速缓存中的分配排定优先级(框540),并且这可例如基于年龄/置信度元数据而迫使对现有条目进行驱逐。
否则,如果流行目标指示符未被置位,则接下来在菱形框545处判定指令是否能够被分配到△高速缓存中。如果指令无法被分配到△高速缓存中,则判定新阶段指示符是否被置位(菱形框550)。如果新阶段指示符未被置位,则指令不被分配。如果新阶段指示符被置位,则控制传递至框555,在框555处,可例如通过使△高速缓存条目无效而将目标分配到△高速缓存中。
仍参考图5,替代地,如果不同页指示符被置位(菱形框530),则控制传递至菱形框565,在菱形框565处判定流行目标指示符是否被置位。如果是,则可对到页/偏移高速缓存中的分配排定优先级(框570)。
否则,如果流行目标指示符未被置位,则接下来在菱形框575处判定指令是否能够被分配到页/偏移高速缓存中。如果指令无法被分配到页/偏移高速缓存中,则判定新阶段指示符是否被置位(菱形框580)。如果新阶段指示符未被置位,则指令不被分配。如果新阶段指示符被置位,则控制传递至框585,在框585处,可例如通过使页/偏移高速缓存条目无效而将目标分配到页/偏移高速缓存中。尽管在图5的实施例中以该高级别示出,但是许多变型和替代方案是可能的。
当然,在其他实现方式中,BTB的其他架构是可能的。值得注意的是,在此类不同的实现方式中,其他架构可基于对工作负荷的概况分析,以标识热分支PC和冷分支PC并且对分支PC及其目标落入其中的存储器区域进行表征。基于此类信息,可能可以以不同方式来构架BTB,以利用该信息以减小的BTB尺寸提供改善的性能。
现在参考图6,示出的是根据又一实施例的方法的流程图。更具体地,图6的方法600是一种基于概况分析信息来对包括分支指令的代码进行优化的方法。在实施例中,方法600可由硬件电路系统(诸如执行编译器的系统的一个或多个核)单独地或与固件和/或软件组合地执行。
如图6中所示,方法600可开始于在一个或多个核上执行应用(框610)。这些核可以是单个SoC的多个核,或者可以是不同处理器的核。在任何情况下,理解这些核可包括各种分支预测结构,包括分支预测器和BTB。在应用执行期间,可例如使用性能监视电路发生各种监视,该性能监视电路可获得概况分析信息。与分支指令有关的此种概况分析信息可包括关于分支指令的分支地址与对应的目标指令的目标地址之间的空间关系、分支指令执行的频率、预期重用距离,等等其他此类信息。
接下来在框630处,可对此种概况分析信息进行分析。更具体地,编译器或其他优化引擎可就分支指令对概况分析信息进行分析。随后,至少部分地基于概况分析信息,可以将至少一条分支指令转换为具有含一个或多个指示符的提示字段的分支指令(框640)。例如,可将常规分支指令转换为根据实施例的、具有包含多个指示符的提示字段的分支指令。可基于概况分析信息来设置这些指示符中的各种指示符。
仍参考图6,在框650处,可将应用编译为包括这些经更新的分支指令。最后,在框660处,可提供经编译的应用以供在编译器在其上执行的系统或者一个或多个其他系统上执行。要理解,虽然在图6的实施例中以该高级别示出,但是许多变型和替换方案是可能的。
在常见工作负荷中,已经估计大约90%的分支是直接分支,并且仅10%是间接分支。由此,在实施例中,相比于目标高速缓存,可提供更多资源用于热高速缓存。存在基于程序上下文改变特性的若干理由。具体而言,直接有条件分支由前向条件句(if..then..else(如果……则……否则))和循环使用。在大多数情况下,这些分支不会跳转长距离,并且其目标在同一页内。这些也是最常发生的分支类型。直接调用用于作出函数调用。除了内联函数,其他函数涉及跳转至这些函数从其中被调用的当前代码区域之外的代码区域。由此,这些分支的目标典型地是跨页的。直接跳转大多用于“goto标签”(跳转至特定位置)或者当优化针对一个共同路径的前向条件句并使用直接跳转来跳过替代路径时使用。最后,间接分支在其发生计数方面通常相当低。它们由虚函数、函数指针和切换情况(switch case)使用。间接分支具有最高的未命中强度率。
利用实施例,BTB可被配置成用于降低每千条指令误预测(MPKI)并使其更加高效,而不会增加其尺寸。由于分支误预测(和重定向)损害随流水线宽度和深度的增加而增加,因此由分支误预测或由分支目标未命中(如在实施例中)造成的损害的任何降低直接转换为甚至更高的性能增益。
要理解,实施例可结合许多不同的处理器架构来使用。图7A是图示根据本发明的实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。图7B是图示根据本发明的实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。此类实施例可包括分段的BTB,并且可执行如本文中所描述的具有提示信息的分支指令。图7A和图7B中的实线框图示有序流水线和有序核,而虚线框的任选增加图示寄存器重命名的、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图7A中,处理器流水线700包括取出级702、长度解码级704、解码级706、分配级708、重命名级710、调度(也被称为分派或发布)级712、寄存器读取/存储器读取级714、执行级716、写回/存储器写入级718、异常处置级722和提交级724。注意,如本文中所描述,在给定实施例中,核可包括诸如流水线700之类的多条处理流水线。
图7B示出处理器核790,该处理器核790包括前端单元730,该前端单元730耦合到执行引擎单元750,并且前端单元730和执行引擎单元750两者都耦合到存储器单元770。核790可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或混合或替代的核类型。作为又一选项,核790可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核,等等。
前端单元730包括分支预测单元732,该分支预测单元732耦合到指令高速缓存单元734,该指令高速缓存单元734耦合到指令转换后备缓冲器(TLB)736,该指令转换后备缓冲器736耦合到指令取出单元738,该指令取出单元738耦合到解码单元740。解码单元740(或解码器)可对指令解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元740可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核790包括存储用于某些宏指令的微代码的微代码ROM或其他介质(例如,在解码单元740中,或以其他方式在前端单元730内)。解码单元740耦合到执行引擎单元750中的重命名/分配器单元752。
如进一步在前端单元730中所示,分支预测单元732向分支目标缓冲器733提供预测信息,该分支目标缓冲器733可以是根据实施例的分段的BTB。如本文中所描述,分支目标缓冲器733可包括用于执行目标预测和更新的控制电路系统(诸如在图1中所示)。在此方面,解码单元740可向分支目标缓冲器733提供经解码的分支指令,以使得目标分配能够使用如本文中所描述的提示信息被执行。
执行引擎单元750包括重命名/分配器单元752,该重命名/分配器单元752耦合到引退单元754和一个或多个调度器单元的集合756。(多个)调度器单元756表示任何数量的不同调度器,包括预留站、中央指令窗等。(多个)调度器单元756耦合到(多个)物理寄存器堆单元758。(多个)物理寄存器堆单元758中的每一个物理寄存器堆单元表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,状态(例如,作为要执行的下一条指令的地址的指令指针)等等。在一个实施例中,(多个)物理寄存器堆单元758包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器和通用寄存器。(多个)物理寄存器堆单元758由引退单元754重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器、和(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退单元754和(多个)物理寄存器堆单元758耦合到(多个)执行集群760。(多个)执行集群760包括一个或多个执行单元的集合762以及一个或多个存储器访问单元的集合764。执行单元762可执行各种操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可包括仅一个执行单元或全都执行所有功能的多个执行单元。(多个)调度器单元756、(多个)物理寄存器堆单元758和(多个)执行集群760示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器单元、(多个)物理寄存器堆单元和/或执行集群的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有(多个)存储器访问单元764的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。
存储器访问单元的集合764耦合到存储器单元770,该存储器单元770包括数据TLB单元772,该数据TLB单元772耦合到数据高速缓存单元774,该数据高速缓存单元774耦合到第二级(L2)高速缓存单元776。在一个示例性实施例中,存储器访问单元764可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合到存储器单元770中的数据TLB单元772。指令高速缓存单元734还耦合到存储器单元770中的第二级(L2)高速缓存单元776。L2高速缓存单元776耦合到一个或多个其他级别的高速缓存,并最终耦合到主存储器。
作为示例,示例性寄存器重命名的、乱序发布/执行核架构可如下所述地实现流水线700:1)指令取出738执行取出级702和长度解码级704;2)解码单元740执行解码级706;3)重命名/分配器单元752执行分配级708和重命名级710;4)(多个)调度器单元756执行调度级712;5)(多个)物理寄存器堆单元758和存储器单元770执行寄存器读取/存储器读取级714;执行集群760执行执行级716;6)存储器单元770和(多个)物理寄存器堆单元758执行写回/存储器写入级718;7)各单元可涉及异常处置级722;以及8)引退单元754和(多个)物理寄存器堆单元758执行提交级724。注意,上文所描述的单元中的各种单元可以使用本文中的实施例使其性能动态地被调整。
核790可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集(具有诸如NEON的任选的附加扩展)),其中包括本文中描述的(多条)指令。在一个实施例中,核790包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,各种方式包括时分多线程化、同时多线程化(其中单个物理核为物理核正在同时多线程化的线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后的诸如英特尔
Figure BDA0003368106710000181
超线程化技术中的同时多线程化)。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。尽管处理器的所图示的实施例还包括分开的指令和数据高速缓存单元734/774以及共享的L2高速缓存单元776,但是替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如,第一级(L1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。
图8是根据本发明的实施例的可具有多于一个的核、可具有集成存储器控制器、以及可具有集成图形器件的处理器800的框图。图8中的实线框图示具有单个核802A、系统代理810、一个或多个总线控制器单元的集合816的处理器800,而虚线框的任选增加图示具有多个核802A-N、系统代理单元810中的一个或多个集成存储器控制器单元的集合以及可执行一个或多个特定功能的专用逻辑808的替代处理器800。
由此,处理器800的不同实现方式可包括:1)CPU,其中专用逻辑是集成图形器件和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核802A-N是一个或多个通用核(例如,通用有序核、通用乱序核、这两者的组合);2)协处理器,其中核802A-N是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核802A-N是大量通用有序核。因此,处理器800可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、嵌入式处理器,等等。处理器可以被实现在一个或多个芯片上。处理器800可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,BiCMOS、CMOS、或NMOS)中的任何技术被实现在一个或多个基板上。
存储器层次结构包括核内的一个或多个级别的高速缓存单元804A-N、一个或多个共享高速缓存单元的集合806、以及耦合到集成存储器控制器单元的集合814的外部存储器(未示出)。共享高速缓存单元的集合806可包括一个或多个中间级别的高速缓存,诸如,第二级(L2)、第三级(L3)、第四级(L4)或其他级别的高速缓存、末级高速缓存(LLC)和/或以上各项的组合。虽然在一个实施例中基于环的互连单元812将专用逻辑808、共享高速缓存单元的集合806、以及系统代理单元810/(多个)集成存储器控制器单元814互连,但是替代实施例可使用任何数量的公知技术来互连此类单元。
系统代理单元810包括协调和操作核802A-N的那些组件。系统代理单元810可包括例如功率控制单元(PCU)和显示单元。PCU可以是对核802A-N以及专用逻辑808的功率状态进行调节所需的逻辑和组件,或可包括这些逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核802A-N在架构指令集方面可以是同构的或异构的;即,核802A-N中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅子集或不同的指令集。核802A-N可包括如本文中所描述的分段的BTB。
图9-图10是示例性计算机架构的框图。本领域中已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。
现在参见图9,所示出的是根据本发明的实施例的第一更具体的示例性系统900的框图。如图9中所示,多处理器系统900是点对点互连系统,并且包括经由点对点互连950耦合的第一处理器970和第二处理器980。处理器970和980中的每一个都可以是处理器800的某一版本。
处理器970和980示出为分别包括集成存储器控制器(IMC)单元972和982。处理器970还包括作为其总线控制器单元的一部分的点对点(P-P)接口976和978;类似地,第二处理器980包括P-P接口986和988。处理器970、980可以经由使用点对点(P-P)接口电路978、988的P-P接口950来交换信息。如图9中所示,集成存储器控制器(IMC)972和982将处理器耦合到相应的存储器,即存储器932和存储器934,这些存储器可以是本地附连到相应处理器的主存储器的部分。在实施例中,处理器970、980可包括如本文中所描述的分段的BTB。
处理器970、980可各自经由使用点对点接口电路976、994、986、998的各个P-P接口952、954来与芯片组990交换信息。芯片组990可以任选地经由高性能接口939来与协处理器938交换信息。在一个实施例中,协处理器938是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享高速缓存(未示出)可被包括在任一处理器中,或在这两个处理器的外部但经由P-P互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
芯片组990可以经由接口996耦合到第一总线916。在一个实施例中,第一总线916可以是外围组件互连(PCI)总线或诸如PCI快速总线或另一第三代I/O互连总线之类的总线,但是本发明的范围不限于此。
如图9中所示,各种I/O设备914可连同总线桥918一起耦合到第一总线916,该总线桥918将第一总线916耦合到第二总线920。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器之类的一个或多个附加处理器915耦合到第一总线916。在一个实施例中,第二总线920可以是低引脚数(LPC)总线。在一个实施例中,各种设备可耦合到第二总线920,这些设备包括例如键盘和/或鼠标922、通信设备927以及存储单元928,该存储单元928诸如可包括指令/代码和数据930的盘驱动器或者其他大容量存储设备。此外,音频I/O 924可耦合到第二总线920。注意,其他架构是可能的。例如,代替图9的点对点架构,系统可以实现多分支总线或其他此类架构。
现在参考图10,示出的是根据本发明的实施例的SoC 1000的框图。虚线框是更先进的SoC上的任选的特征。在图10中,(多个)互连单元1002耦合至:应用处理器1010,其包括一个或多个核的集合1002A-N(包括构成的高速缓存单元1004A-N),这些核中的至少一些可包括如本文中所描述的分段的BTB;(多个)共享高速缓存单元1006;系统代理单元1012;(多个)总线控制器单元1016;(多个)集成存储器控制器单元1014;一个或多个协处理器的集合1020,其可包括集成图形逻辑、图像处理器、音频处理器、以及视频处理器;静态随机存取存储器(SRAM)单元1030;直接存储器存取(DMA)单元1032;以及显示单元1040,用于耦合至一个或多个外部显示器。在一个实施例中,(多个)协处理器1020包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器,等等。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码(诸如,图9中图示的代码930)应用于输入指令,以执行本文中描述的功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如,数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该机器可读介质表示处理器中的各种逻辑,该机器可读介质在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“IP核”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、紧致盘可重写(CD-RW)以及磁光盘;半导体器件,诸如,只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括非暂态的有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也可被称为程序产品。
在一些情况下,指令转换器可用于将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式转换成要由核处理的一条或多条其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
图11是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图11示出可使用x86编译器1104来编译高级语言1102形式的程序,以生成可由具有至少一个x86指令集核的处理器1111原生执行的x86二进制代码1106。具有至少一个x86指令集核的处理器1111表示能通过兼容地执行或以其他方式处理以下各项来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能的任何处理器:1)英特尔x86指令集核的指令集的本质部分,或2)目标为在具有至少一个x86指令集核的英特尔处理器上运行以便取得与具有至少一个x86指令集核的英特尔处理器基本相同的结果的应用或其他软件的目标代码版本。x86编译器1104表示可操作用于生成x86二进制代码1106(例如,目标代码)的编译器,该二进制代码可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器1111上执行。类似地,图11示出可以使用替代的指令集编译器1108来编译高级语言1102形式的程序,以生成可以由不具有至少一个x86指令集核的处理器1114(例如,具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集、和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生执行的替代的指令集二进制代码1110。指令转换器1112用于将x86二进制代码1106转换成可以由不具有x86指令集核的处理器1114原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码1110相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器1112通过仿真、模拟或任何其他过程来表示允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1106的软件、固件、硬件或其组合。
以下示例涉及进一步的实施例。
在一个示例中,一种处理器包括:分支预测器,该分支预测器用于预测分支指令是否要被采用;以及BTB,该BTB耦合至分支预测器,该分支目标缓冲器被分段为第一高速缓存部分和第二高速缓存部分。响应于分支要被采用的指示,BTB可至少部分地基于分支指令的类型、分支指令的发生频率、以及同分支指令的目标的目标地址与分支指令的地址之间的距离有关的空间信息来访问第一高速缓存部分和第二高速缓存部分中的一者中的条目。
在示例中,BTB进一步包括控制电路,该控制电路用于至少部分地基于分支指令的类型来控制分支指令到该BTB中的分配。
在示例中,控制电路用于进一步至少部分地基于分支指令中所包括的提示信息来控制分支指令到BTB中的分配。
在示例中,第一高速缓存部分包括目标高速缓存部分,该目标高速缓存部分用于存储针对间接分支指令和不频繁的直接分支指令的目标预测信息。
在示例中,第二高速缓存部分包括第一子高速缓存部分,该第一子高速缓存部分用于存储针对具有与分支指令在同一页内的目标地址的直接分支指令的目标预测信息。
在示例中,第二高速缓存部分进一步包括第二子高速缓存部分,该第二子高速缓存部分用于存储针对具有与分支指令在不同页内的目标地址的直接分支指令的目标预测信息。
在示例中,第二子高速缓存部分包括:第一部分,该第一部分用于存储目标预测信息的页部分;以及第二部分,该第二部分用于存储目标预测信息的偏移信息。
在示例中,BTB进一步包括监视电路,该监视电路用于接收分支指令地址的标签并至少部分地基于该标签来指引对第一高速缓存部分或第二高速缓存部分的访问。
在示例中,处理器进一步包括耦合至第一高速缓存部分和第二高速缓存部分的选择电路,其中,该选择电路用于基于来自监视电路的指示符来提供来自第一高速缓存部分和第二高速缓存部分中的一者的输出。
在示例中,第一高速缓存部分包括第一多个条目,该第一多个条目中的每个条目用于存储针对分支指令的至少一些地址信息和元数据。
在示例中,元数据包括有用性信息和新近度信息。
在示例中,第二高速缓存部分包括第二多个条目,该第二多个条目中的每个条目用于存储基于分支指令的地址的散列的标签、和包括分支指令的目标的目标地址的目标预测信息。
在另一示例中,一种处理器包括用于执行指令的至少一个核,该至少一个核可包括前端电路,该前端电路包括:取出电路,该取出电路用于取出指令;解码电路,该解码电路用于对指令进行解码;分支预测器,该分支预测器用于预测分支指令是否要被采用;以及BTB,该BTB耦合至分支预测器。BTB可具有第一部分和第二部分,该第一部分仅用于存储针对直接分支指令的分支目标信息,该第二部分用于存储至少针对间接分支指令的分支目标信息。BTB可进一步具有控制电路,该控制电路用于将第一直接分支指令分配到第一部分中并将第一间接分支指令分配到第二部分中,其中,取出电路用于使用针对第一分支指令的分支目标信息来取出第一目标指令。至少一个核可进一步包括执行电路,该执行电路耦合至前端电路,以执行至少第一目标指令。
在示例中,第二部分用于进一步存储针对一条或多条直接分支指令的分支目标信息。
在示例中,控制电路用于至少部分地基于一条或多条直接分支指令的执行频率将针对该一条或多条直接分支指令中的至少一条直接分支指令的分支目标信息提升到第一部分。
在示例中,控制电路用于至少部分地基于第一直接分支指令的扩展字段而将该第一直接分支指令分配到第一部分的第一子部分中。
在另一示例中,一种系统用于:在核的BTB中接收第一直接分支指令;将该第一直接分支指令标识为直接调用指令或另一直接分支指令;如果该第一直接分支指令被标识为直接调用指令,则访问BTB的第一高速缓存部分来获得第一直接分支指令的目标的页地址信息和偏移地址信息,并且使用该页地址信息和偏移地址信息来设置第一直接分支指令的目标的目标地址;以及如果该第一直接分支指令被标识为另一直接分支指令,则访问BTB的第二高速缓存部分来获得第一直接分支指令的目标的△信息,并且基于第一直接分支指令的地址和该△信息来设置第一直接分支指令的目标的目标地址。
在示例中,系统用于:将第二分支指令标识为间接分支指令;以及访问BTB的第三高速缓存部分来获得该第二分支指令的目标的目标地址信息,并且使用该目标地址信息来设置第二分支指令的目标的目标地址。
在示例中,系统用于:当第一高速缓存部分中所存储的、与第一直接分支指令相关联的元数据超出阈值水平时,从第三高速缓存部分驱逐第一直接分支指令。
在示例中,系统用于:至少部分地基于与第一直接分支指令相关联的提示信息而将该第一直接分支指令分配到第一高速缓存部分和第二高速缓存部分中被选择的一者。
在另一示例中,包括指令的计算机可读介质用于执行如以上示例中的任一项所述的操作。
在另一示例中,计算机可读介质包括数据,该数据用于由至少一个机器使用以制造至少一个集成电路来执行如以上示例中的任一项所述的操作。
在另一示例中,设备包括用于执行如以上示例中的任一项所述的操作的装置。
应理解,以上示例的各种组合是可能的。
注意,术语“电路”和“电路系统”在本文中可互换地使用。如本文中所使用,这些术语以及术语“逻辑”用来单独地或以任何组合指代模拟电路系统、数字电路系统、硬连线电路系统、可编程电路系统、处理器电路系统、微控制器电路系统、硬件逻辑电路系统、状态机电路系统和/或任何其他类型的物理硬件组件。实施例可在许多不同类型的系统中使用。例如,在一个实施例中,可以将通信设备布置为用于执行本文中所描述的各种方法和技术。当然,本发明的范围不限于通信设备,并且相反,其他实施例可以涉及用于处理指令的其他类型的装置、或者一种或多种机器可读介质,该机器可读介质包括指令,响应于在计算设备上执行这些指令,这些指令使该设备执行本文中所描述的方法与技术中的一者或多者。
实施例可被实现在代码中,并且可被存储在非暂态存储介质上,该非暂态存储介质具有存储于其上的指令,这些指令可以被用于将系统编程为用于执行这些指令。实施例还可被实现在数据中,并且可被存储在非暂态存储介质上,该非暂态存储介质如果被至少一个机器使用则使得该至少一个机器制造至少一个集成电路以执行一个或多个操作。更进一步的实施例可以在包括信息的计算机可读存储介质中实现,该计算机可读存储介质当被制造在SoC或其他处理器中时将SoC或其他处理器配置为执行一个或多个操作。该存储介质可包括但不限于:任何类型的盘,包括软盘、光盘、固态驱动器(SSD)、紧致盘只读存储器(CD-ROM)、紧致盘可重写(CD-RW)以及磁光盘;半导体器件,诸如,只读存储器(ROM)、诸如动态随机存取存储器(DRAM)与静态随机存取存储器(SRAM)之类的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);磁卡或光卡;或适用于存储电子指令的任何其他类型的介质。
尽管已参照有限数量的实施例描述了本发明,但是本领域技术人员将从中领会众多修改和变型。所附权利要求旨在涵盖落入本发明的真实精神与范围的所有此类修改和变型。

Claims (25)

1.一种用于对分支指令进行预测的处理器,包括:
分支预测器,所述分支预测器用于预测分支指令是否要被采用;以及
分支目标缓冲器BTB,所述BTB耦合至所述分支预测器,所述BTB被分段为第一高速缓存部分和第二高速缓存部分,其中,响应于所述分支要被采用的指示,所述BTB用于至少部分地基于所述分支指令的类型、所述分支指令的发生频率、以及同所述分支指令的目标的目标地址与所述分支指令的地址之间的距离有关的空间信息来访问所述第一高速缓存部分和所述第二高速缓存部分中的一者中的条目。
2.如权利要求1所述的处理器,其中,所述BTB进一步包括控制电路,所述控制电路用于至少部分地基于所述分支指令的类型来控制所述分支指令到所述BTB中的分配。
3.如权利要求2所述的处理器,其中,所述控制电路用于进一步至少部分地基于所述分支指令中所包括的提示信息来控制所述分支指令到所述BTB中的分配。
4.如权利要求1所述的处理器,其中,所述第一高速缓存部分包括目标高速缓存部分,所述目标高速缓存部分用于存储针对间接分支指令和不频繁的直接分支指令的目标预测信息。
5.如权利要求4所述的处理器,其中,所述第二高速缓存部分包括第一子高速缓存部分,所述第一子高速缓存部分用于存储针对具有与所述分支指令在同一页内的目标地址的直接分支指令的目标预测信息。
6.如权利要求5所述的处理器,其中,所述第二高速缓存部分进一步包括第二子高速缓存部分,所述第二子高速缓存部分用于存储针对具有与所述分支指令在不同页内的目标地址的直接分支指令的目标预测信息。
7.如权利要求6所述的处理器,其中,所述第二子高速缓存部分包括:
第一部分,所述第一部分用于存储所述目标预测信息的页部分;以及
第二部分,所述第二部分用于存储所述目标预测信息的偏移信息。
8.如权利要求1所述的处理器,其中,所述BTB进一步包括监视电路,所述监视电路用于接收所述分支指令地址的标签并至少部分地基于所述标签来指引对所述第一高速缓存部分或所述第二高速缓存部分的访问。
9.如权利要求8所述的处理器,进一步包括耦合至所述第一高速缓存部分和所述第二高速缓存部分的选择电路,其中,所述选择电路用于基于来自所述监视电路的指示符来提供来自所述第一高速缓存部分和所述第二高速缓存部分中的一者的输出。
10.如权利要求1所述的处理器,其中,所述第一高速缓存部分包括第一多个条目,所述第一多个条目中的每个条目用于存储针对分支指令的至少一些地址信息和元数据。
11.如权利要求10所述的处理器,其中,所述元数据包括有用性信息和新近度信息。
12.如权利要求11所述的处理器,其中,所述第二高速缓存部分包括第二多个条目,所述第二多个条目中的每个条目用于存储基于分支指令的地址的散列的标签、和包括所述分支指令的目标的目标地址的所述目标预测信息。
13.一种用于执行指令的处理器,包括:
至少一个核,所述至少一个核用于执行指令,所述至少一个核包括:
前端电路,所述前端电路包括:
取出电路,所述取出电路用于取出指令;
解码电路,所述解码电路用于对所述指令进行解码;
分支预测器,所述分支预测器用于预测分支指令是否要被采用;以及
分支目标缓冲器BTB,所述BTB耦合至所述分支预测器,所述BTB具有第一部分和第二部分,所述第一部分仅用于存储针对直接分支指令的分支目标信息,所述第二部分用于存储至少针对间接分支指令的分支目标信息,所述BTB进一步具有控制电路,所述控制电路用于将第一直接分支指令分配到所述第一部分中并用于将第一间接分支指令分配到所述第二部分中,其中,所述取出电路用于使用针对第一分支指令的分支目标信息来取出第一目标指令;以及
执行电路,所述执行电路耦合至所述前端电路,以执行至少所述第一目标指令。
14.如权利要求13所述的处理器,其中,所述第二部分用于进一步存储针对一条或多条直接分支指令的分支目标信息。
15.如权利要求13所述的处理器,其中,所述控制电路用于至少部分地基于所述一条或多条直接分支指令的执行频率将针对所述一条或多条直接分支指令中的至少一条直接分支指令的分支目标信息提升到所述第一部分。
16.如权利要求13所述的处理器,其中,所述控制电路用于至少部分地基于所述第一直接分支指令的扩展字段而将所述第一直接分支指令分配到所述第一部分的第一子部分中。
17.一种用于对分支进行预测的方法,包括:
在核的分支目标缓冲器BTB中接收第一直接分支指令;
将所述第一直接分支指令标识为直接调用指令或另一直接分支指令;
如果所述第一直接分支指令被标识为所述直接调用指令,则访问所述BTB的第一高速缓存部分来获得所述第一直接分支指令的目标的页地址信息和偏移地址信息,并且使用所述页地址信息和所述偏移地址信息来设置所述第一直接分支指令的目标的目标地址;以及
如果所述第一直接分支指令被标识为所述另一直接分支指令,则访问所述BTB的第二高速缓存部分来获得所述第一直接分支指令的目标的△信息,并且基于所述第一直接分支指令的地址和所述△信息来设置所述第一直接分支指令的目标的目标地址。
18.如权利要求17所述的方法,进一步包括:
将第二分支指令标识为间接分支指令;以及
访问所述BTB的第三高速缓存部分来获得所述第二分支指令的目标的目标地址信息,并且使用所述目标地址信息来设置所述第二分支指令的目标的目标地址。
19.如权利要求18所述的方法,进一步包括:当所述第一高速缓存部分中所存储的、与所述第一直接分支指令相关联的元数据超出阈值水平时,从所述第三高速缓存部分驱逐所述第一直接分支指令。
20.如权利要求17所述的方法,进一步包括:至少部分地基于与所述第一直接分支指令相关联的提示信息而将所述第一直接分支指令分配到所述第一高速缓存部分和所述第二高速缓存部分中被选择的一者。
21.至少一种计算机可读存储介质,具有存储于其上的指令,所述指令如果由机器执行则使得所述机器执行如权利要求17至20中任一项所述的方法。
22.一种用于对分支指令进行预测的处理器,包括:
分支预测器装置,所述分支预测器装置用于预测分支指令是否要被采用;以及
分支目标缓冲器BTB装置,所述BTB装置耦合至所述分支预测器装置,所述BTB装置被分段为第一高速缓存部分和第二高速缓存部分,其中,响应于所述分支要被采用的指示,所述BTB装置用于至少部分地基于所述分支指令的类型、所述分支指令的发生频率、以及同所述分支指令的目标的目标地址与所述分支指令的地址之间的距离有关的空间信息来访问所述第一高速缓存部分和所述第二高速缓存部分中的一者中的条目。
23.如权利要求22所述的处理器,其中,所述BTB装置进一步包括控制装置,所述控制装置用于至少部分地基于所述分支指令的类型来控制所述分支指令到所述BTB装置中的分配。
24.如权利要求23所述的处理器,其中,所述控制装置用于进一步至少部分地基于所述分支指令中所包括的提示信息来控制所述分支指令到所述BTB装置中的分配。
25.如权利要求22所述的处理器,其中,所述第一高速缓存部分包括目标高速缓存部分,所述目标高速缓存部分用于存储针对间接分支指令和不频繁的直接分支指令的目标预测信息。
CN202111389356.5A 2020-12-22 2021-11-22 基于分支指令类型的分段分支目标缓冲器 Pending CN114661360A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/130,016 US20220197657A1 (en) 2020-12-22 2020-12-22 Segmented branch target buffer based on branch instruction type
US17/130,016 2020-12-22

Publications (1)

Publication Number Publication Date
CN114661360A true CN114661360A (zh) 2022-06-24

Family

ID=77640446

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111389356.5A Pending CN114661360A (zh) 2020-12-22 2021-11-22 基于分支指令类型的分段分支目标缓冲器

Country Status (3)

Country Link
US (1) US20220197657A1 (zh)
EP (1) EP4020187A1 (zh)
CN (1) CN114661360A (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117093267B (zh) * 2023-10-17 2023-12-22 北京开源芯片研究院 分支指令跳转地址的存储方法、装置、设备及存储介质

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5938761A (en) * 1997-11-24 1999-08-17 Sun Microsystems Method and apparatus for branch target prediction
US6611910B2 (en) * 1998-10-12 2003-08-26 Idea Corporation Method for processing branch operations
US6601161B2 (en) * 1998-12-30 2003-07-29 Intel Corporation Method and system for branch target prediction using path information
US6772325B1 (en) * 1999-10-01 2004-08-03 Hitachi, Ltd. Processor architecture and operation for exploiting improved branch control instruction
US6874081B2 (en) * 2001-05-17 2005-03-29 Broadcom Corporation Selection of link and fall-through address using a bit in a branch address for the selection
US20040172524A1 (en) * 2001-06-29 2004-09-02 Jan Hoogerbrugge Method, apparatus and compiler for predicting indirect branch target addresses
US20050144427A1 (en) * 2001-10-23 2005-06-30 Ip-First Llc Processor including branch prediction mechanism for far jump and far call instructions
US7676663B2 (en) * 2004-03-09 2010-03-09 International Business Machines Corporation Method, system and program product for pipelined processor having a branch target buffer (BTB) table with a recent entry queue in parallel with the BTB table
US20080040590A1 (en) * 2006-08-11 2008-02-14 Lea Hwang Lee Selective branch target buffer (btb) allocaiton
US7873819B2 (en) * 2008-01-03 2011-01-18 Freescale Semiconductor, Inc. Branch target buffer addressing in a data processor
US20110093658A1 (en) * 2009-10-19 2011-04-21 Zuraski Jr Gerald D Classifying and segregating branch targets
US8458447B2 (en) * 2011-06-17 2013-06-04 Freescale Semiconductor, Inc. Branch target buffer addressing in a data processor
US9552032B2 (en) * 2012-04-27 2017-01-24 Nvidia Corporation Branch prediction power reduction
US9489203B2 (en) * 2012-12-11 2016-11-08 Advanced Micro Devices, Inc. Pre-fetching instructions using predicted branch target addresses
US20140250289A1 (en) * 2013-03-01 2014-09-04 Mips Technologies, Inc. Branch Target Buffer With Efficient Return Prediction Capability
US9996358B2 (en) * 2015-09-30 2018-06-12 Ecole Polytechnique Federale De Lausanne Unified prefetching into instruction cache and branch target buffer
US10353710B2 (en) * 2016-04-28 2019-07-16 International Business Machines Corporation Techniques for predicting a target address of an indirect branch instruction
US10303608B2 (en) * 2017-08-22 2019-05-28 Qualcomm Incorporated Intelligent data prefetching using address delta prediction
US10846084B2 (en) * 2018-01-03 2020-11-24 Intel Corporation Supporting timely and context triggered prefetching in microprocessors
GB201802815D0 (en) * 2018-02-21 2018-04-04 Univ Edinburgh Branch target buffer arrangement for instruction prefetching
US10754655B2 (en) * 2018-06-28 2020-08-25 Intel Corporation Automatic predication of hard-to-predict convergent branches
US10713054B2 (en) * 2018-07-09 2020-07-14 Advanced Micro Devices, Inc. Multiple-table branch target buffer
GB2577051B (en) * 2018-09-11 2021-03-03 Advanced Risc Mach Ltd Branch prediction using branch target buffer
US11392382B2 (en) * 2019-05-21 2022-07-19 Samsung Electronics Co., Ltd. Using a graph based micro-BTB and inverted basic block queue to efficiently identify program kernels that will fit in a micro-op cache
JP7152376B2 (ja) * 2019-09-27 2022-10-12 日本電気株式会社 分岐予測回路、プロセッサおよび分岐予測方法
US11726917B2 (en) * 2020-06-26 2023-08-15 Advanced Micro Devices, Inc. Method and apparatus for a page-local delta-based prefetcher

Also Published As

Publication number Publication date
EP4020187A1 (en) 2022-06-29
US20220197657A1 (en) 2022-06-23

Similar Documents

Publication Publication Date Title
US11243768B2 (en) Mechanism for saving and retrieving micro-architecture context
JP6143872B2 (ja) 装置、方法、およびシステム
KR101493019B1 (ko) 희소 및 조밀 예측 캐쉬들을 갖는 하이브리드 브랜치 예측 장치
CN112543916B (zh) 多表分支目标缓冲器
EP2176740B1 (en) Method and apparatus for length decoding and identifying boundaries of variable length instructions
US5774710A (en) Cache line branch prediction scheme that shares among sets of a set associative cache
US10713053B2 (en) Adaptive spatial access prefetcher apparatus and method
US10482017B2 (en) Processor, method, and system for cache partitioning and control for accurate performance monitoring and optimization
CN116302106A (zh) 用于促进分支预测单元的改善的带宽的设备、方法和系统
US9983880B2 (en) Method and apparatus for improved thread selection
EP4020187A1 (en) Segmented branch target buffer based on branch instruction type
EP4020167A1 (en) Accessing a branch target buffer based on branch instruction information
CN112395000B (zh) 一种数据预加载方法和指令处理装置
CN114647596A (zh) 基于上下文的循环分支预测
CN113568663A (zh) 代码预取指令
US12019553B2 (en) System, apparatus and method for prefetching physical pages in a processor
EP4155915B1 (en) Scalable toggle point control circuitry for a clustered decode pipeline
US20200233772A1 (en) Device, system and method for identifying a source of latency in pipeline circuitry
US20220197808A1 (en) System, apparatus and method for prefetching physical pages in a processor

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination