CN104471529B - 用以扩展软件分支目标提示的方法及设备 - Google Patents

用以扩展软件分支目标提示的方法及设备 Download PDF

Info

Publication number
CN104471529B
CN104471529B CN201380033335.7A CN201380033335A CN104471529B CN 104471529 B CN104471529 B CN 104471529B CN 201380033335 A CN201380033335 A CN 201380033335A CN 104471529 B CN104471529 B CN 104471529B
Authority
CN
China
Prior art keywords
instruction
branch
register
advcn
target address
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
CN201380033335.7A
Other languages
English (en)
Other versions
CN104471529A (zh
Inventor
维马尔·K·雷迪
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
Publication of CN104471529A publication Critical patent/CN104471529A/zh
Application granted granted Critical
Publication of CN104471529B publication Critical patent/CN104471529B/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 or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30061Multi-way branch instructions, e.g. CASE
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

本发明揭示用于基于第一指令中指定的第一程序可访问寄存器PAR的内容来预测存储地址的设备及技术,其中所述第一PAR与第二指令中的第二PAR所指定的目标地址相关。在执行所述第二指令之前推测式提取在所述所预测存储地址处的信息。所述第一指令是预先相关通知ADVCN指令,所述第二指令是间接分支指令,且所述信息是在所述所预测存储地址处开始的多个指令。所述所预测存储地址是用于所述间接分支指令的从其推测式提取指令的分支目标地址。所述预测是基于在所述ADVCN指令中指定的所述第一PAR的内容。所述第一PAR的所述内容与所述分支指令的己进行评估相关。

Description

用以扩展软件分支目标提示的方法及设备
技术领域
本发明大体上涉及用于处理处理器管线中的指令的技术,且更具体来说涉及用于产生用于间接分支指令的目标地址的早期指示的技术。
背景技术
许多便携式产品(例如蜂窝电话、膝上型计算机、个人数据助理(PDA)或类似物)使用具有至少一个处理器、指令源、输入操作数的源及存储空间的处理系统来用于存储执行结果。举例来说,可将指令及输入操作数存储在由通用寄存器及多层级高速缓冲存储器(包含例如指令高速缓冲存储器、数据高速缓冲存储器及系统存储器)组成的分层存储器配置中。
为了在程序的执行中提供高性能,处理器可使用推测式执行以提取及执行在预测分支目标地址处开始的指令。如果分支目标地址误预测,那么推测式执行的指令必须从管线刷新且所述管线在不同地址处重新开始。在许多处理器指令集中,常常存在分支到从寄存器的内容导出的程序目的地地址的指令。此类指令一般称作间接分支指令。由于对寄存器的内容的间接分支依赖性,通常难以预测分支目标地址,这是因为寄存器可在每次执行间接分支指令时具有不同的值。由于校正误预测间接分支一般需要返回追踪间接分支指令以便提取及执行正确的分支路径上的指令,所以可因此降低处理器的性能。而且,误预测指示处理器不正确地推测式提取及开始错误分支路径上的指令的处理,从而致使用于未使用的指令处理及用于从关系刷新所述指令两者的功率的增加。
发明内容
在其若干方面中,本发明认识到可通过最小化间接分支指令的误预测来改善性能。本发明的第一实施例认识到存在基于第一指令中指定的第一程序可访问寄存器(PAR)的内容来预测存储地址的方法的需要,其中所述第一PAR与第二指令中的第二PAR所指定的目标地址相关。在执行所述第二指令之前推测式提取在所述所预测存储地址处的信息。
另一实施例提出一种预测分支到用于分支指令的目标地址的评估结果的方法,其中所述预测是基于第一指令中所指定的程序可访问寄存器(PAR),且所指定PAR与分支指令的已进行评估相关。在执行所述分支指令之前推测式提取在所述目标地址处的指令。
另一实施例提出一种用于推测式提取指令的设备。第一程序可访问寄存器(PAR)经配置以存储与分支指令中所指定的目标地址相关的值,及第二PAR经配置以存储用于所述分支指令的目标地址。解码电路经配置以识别预先相关通知(ADVCN)指令中指定的所述第一PAR及识别分支指令中指定的所述第二PAR。预测电路经配置以响应于所述ADVCN指令而基于所述值来预测存储地址,其中存储在所述第一PAR中的值与所述第二PAR识别的目标地址相关。提取电路经配置以在所述分支指令的执行之前推测式提取在所述所预测存储地址处开始的指令。
另一实施例提出一种用计算机可读程序数据及代码编码以用于操作一系统的计算机可读非暂时性媒体。存储地址是基于第一指令中指定的第一程序可访问寄存器(PAR)的内容来预测,其中所述第一PAR与第二指令中的第二PAR所指定的目标地址相关。在执行所述第二指令之前推测式提取在所预测存储地址处的信息。
另一实施例提出一种用于推测式提取指令的设备。采用用于存储与分支指令中所指定的目标地址相关的值的装置,及可经配置以存储用于所述分支指令的所述目标地址的第二PAR。还采用用于识别预先相关通知(ADVCN)指令中指定的第一PAR及用于识别分支指令中指定的第二PAR的装置。此外,采用用于响应于ADVCN指令而基于所述值来预测存储地址的装置,其中存储在所述第一PAR中的值与所述第二PAR识别的目标地址相关。用于在执行所述分支指令之前推测式提取在所预测存储地址处开始的指令的装置。
从以下详细描述及附图中将显而易见对本发明的更完整的理解以及本发明的其它特征及优点。
附图说明
图1说明其中可有利地采用本发明的实施例的示范性无线通信系统;
图2是根据本发明的实施例的支持间接分支指令的分支目标地址的处理器组的功能框图;
图3A是根据本发明的实施例的用于指定其内容与不同寄存器所产生的间接分支目标地址值相关的编程器或软件工具所识别的寄存器的32位预先相关通知(ADVCN)指令的一般格式;
图3B是根据本发明的实施例的用于指定与间接分支目标地址值相关的寄存器的16位ADVCN指令的一般格式;
图4A是用于使用先前间接分支执行的历史的间接分支预测方法的第一代码实例;
图4B是用于使用提示指令来帮助预测间接分支目标地址的间接分支通知方法的第二代码实例;
图4C是根据本发明的实施例的用于使用图3A的ADVCN指令来提供与间接分支目标地址相关的寄存器的预先通知的间接分支预先通知方法的第三代码实例;
图4D是根据本发明的实施例的用于使用图3A的ADVCN指令来提供与所获取间接分支目标地址相关的寄存器的预先通知的间接分支预先通知方法的第四代码实例;
图5说明根据本发明的实施例的示范性第一间接分支目标地址(BTA)预先相关通知电路;及
图6说明根据本发明的实施例的经利用以预测间接分支指令的分支目标地址的预先相关通知(ADVCN)过程。
具体实施方式
现将参看附图来较充分地描述本发明,在附图中展示本发明的若干实施例。然而,本发明可以各种形式来体现,且不应被理解为限于本文所陈述的实施例。而是,提供这些实施例而使得本发明将为透彻且完整的,且将本发明的范围充分传送到所属领域的技术人员。
用于根据本发明的教示来操作或进行操作的计算机程序代码或“程序代码”可用高级编程语言来撰写,例如C、C++、Smalltalk、VisualTSQL、Perl或各种其它编程语言。用于目标处理器架构的程序还可直接用本机汇编语言来撰写。本机汇编程序使用机器级别二进制指令的指令助记表示。如本文所使用的程序代码或计算机可读非暂时性媒体是指其格式可被处理器理解的机器语言代码,例如目标代码。
图1说明其中可有利地采用本发明实施例的示范性无线通信系统100。出于说明的目的,图1展示三个远程单元120、130及150以及两个基站140。将认识到,常见的无线通信系统可具有更多的远程单元及基站。远程单元120、130、150及基站140(包含如分别由组件125A、125C、125B及125D表示的硬件组件、软件组件或两者)已经调适以并入如下文进一步论述的本发明的实施例。图1展示从基站140到远程单元120、130及150的前向链接信号180以及从远程单元120、130及150到基站140的反向链接信号190。
在图1中,将远程单元120展示为移动电话,将远程单元130展示为便携式计算机,且将远程单元150展示为无线本地环路系统中的固定位置远程单元。通过实例的方式,远程单元可或者为蜂窝电话、智能电话、寻呼机、对讲机、手持式个人通信系统(PCS)单元、平板型计算机、例如个人数据助理等便携式数据单元、或例如仪表读数设备等固定位置数据单元。尽管图1说明根据本发明的教示的远程单元,但本发明不限于这些示范性所说明单元。可在使用执行间接分支指令的处理器的任何装置中适当地使用本发明的实施例。
图2是根据本发明的支持准备间接分支指令的分支目标地址的预先通知的处理器组200的功能框图。处理器组200包含处理器管线202、通用寄存器堆(GPRF)204、控制电路206、L1指令高速缓冲存储器208、L1数据高速缓冲存储器210及存储器层次212。控制电路206包含程序计数器(PC)215、分支目标地址寄存器(BTAR)219及预测标记(Ptag)221,上述装置如下文更详细描述而交互以用于控制包含指令提取级214的处理器管线202的目的。为了论述清晰性而未展示可连接到处理器组的外围装置。处理器组200可适当地用于图1的硬件组件125A-125D中以用于执行存储在L1指令高速缓冲存储器208中的程序代码,利用存储在L1数据高速缓冲存储器210中且与存储器层次212相关联的数据。处理器管线202可在通用处理器、数字信号处理器(DSP)、专用处理器(ASP)或类似物中为可操作的。处理器组200的各种组件可使用专用集成电路(ASIC)技术、现场可编程门阵列(FPGA)技术、或其它可编程逻辑、离散门或晶体管逻辑、或适于预期应用的任何其它可用技术来实施。
处理器管线202包含六个主要级,指令提取级214、解码及预先相关通知(ADVCN)级216、调度级218、读取寄存器级220、执行级222及回写级224。尽管展示单个处理器管线202,但具有本发明的间接分支目标地址预先通知的指令的处理适用于超标量设计及实施平行管线的其它架构。举例来说,经设计用于高时钟速率的超标量处理器可具有两个或两个以上平行管线,且每一管线可将指令提取级214、具有ADVCN逻辑电路217的解码及ADVCN级216、调度级218、读取寄存器级220、执行级222及回写级224划分为两个或两个以上管线式级,从而增加整体处理器管线深度以便支持高时钟速率。
以处理器管线202的第一级开始,与程序计数器(PC)215相关联的指令提取级214从L1指令高速缓冲存储器208提取指令以用于由稍后级处理。如果在L1指令高速缓冲存储器208中指令提取未中(意味着待提取的指令不在L1指令高速缓冲存储器208中),那么从可包含多个层级的高速缓冲存储器(例如2级(L2)高速缓冲存储器)及主存储器的存储器层次212来提取指令。可从其它源(例如启动只读存储器(ROM)、硬盘驱动器、光盘)或从外部接口(例如因特网)将指令加载到存储器层次212。接着用ADVCN逻辑电路217在解码及ADVCN级216中解码所提取指令,从而提供与间接分支目标地址值相关的寄存器的预先通知的额外能力,如下文更详细描述。与ADVCN逻辑电路217相关联的是可位于图2中所示的控制电路206中的分支目标地址寄存器(BTAR)219及Ptag电路221,但不限于此类放置。举例来说,BTAR 219及Ptag电路221可适当地位于解码及ADVCN级216内。
调度级218获取一或多个经解码指令且将其调度到一或多个指令管线,例如用于超标量或多线程处理器中。读取寄存器级220从GPRF 204提取数据操作数,或从转发网226接收数据操作数。转发网226在GPRF 204周围提供快速路径以在结果操作数一从执行级可用时就供应所述结果操作数。甚至于转发网,来自深执行管线的结果操作数可采用三个或三个以上执行循环。在这些循环期间,读取寄存器级220中的需要来自所述执行管线的结果操作数数据的指令必须等待直到所述结果操作数可用为止。执行级222执行所调度指令,且回写级224将结果写入到GPRF 204,且还可在所述结果将用于以下指令中的情况下经由转发网226将所述结果发送回到读取寄存器级220。由于可在回写级224中无序地(与程序次序相比)接收结果,所以在将结果写回到GPRF 204时回写级224使用处理器设施来保持所述程序次序。在下文用详细代码实例来提供用于提供与间接分支指令的目标地址相关的寄存器的预先通知的处理器管线202的更详细描述。
处理器组200可经配置以在存储在计算机可读存储媒体上的程序的控制下执行指令。举例来说,计算机可读存储媒体可与处理器组200直接局部相关联(例如可从L1指令高速缓冲存储器208可用以用于对从L1数据高速缓冲存储器210及存储器层次212获得的数据进行操作)或经由(例如)输入/输出接口(未图示)而与其相关联。处理器组200还在执行程序时存取来自L1数据高速缓冲存储器210及存储器层次212的数据。计算机可读存储媒体可包含随机存取存储器(RAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(SDRAM)、快闪存储器、只读存储器(ROM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、紧密磁盘(CD)、数字视频光盘(DVD)、其它类型的可移动磁盘或任何其它合适的存储媒体。
图3A是根据本发明的用于指定其内容与不同寄存器所产生的间接分支目标地址值相关的编程器或软件工具所识别的寄存器的32位ADVCN指令300的一般格式。ADVCN指令300在即将来临的间接分支指令之前向处理器组200通知与实际分支目标地址相关的寄存器。通过提供预先通知(如下文更详细描述),处理器性能可得以改良。使用如许多指令集架构(ISA)所利用的条件代码字段304来说明ADVCN指令300,从而基于指定的一或多个旗标来指定是无条件地还是有条件地执行所述指令。操作码305将指令识别为具有至少寄存器字段(与分支目标地址相关的ADVCN Rm 307)的ADVCN指令。指令特定字段306允许操作码扩充及其它指令特定编码。在具有其中根据指令中的指定条件代码字段而有条件地执行指令的ISA的处理器中,可有条件地执行在分支指令之前的可影响分支目标地址寄存器Rm的最后指令。在许多此类情况下,影响指令的此类Rm的条件代码字段可使用用于ADVCN指令的相同条件字段来译码,但不限于此类规范,从而允许分支历史方法用以预测是否将获取所述分支及相关联目标地址。
本发明的教示适用于多种指令格式及建筑规范。举例来说,图3B是根据本发明的用于至少指定与分支目标地址值相关的寄存器字段(ADVCN Rm 357)的16位ADVCN指令350的一般格式。16位ADVCN指令350类似于具有操作码355、寄存器字段ADVCN Rm 357及指令特定位356的32位ADVCN指令300。还应注意,可利用其它位格式及指令宽度来编码ADVCN指令。
一般形式的间接分支类型的指令可在处理器管线202中有利地使用及执行,例如寄存器Rx上分支(BX)、添加PC、移动Rx PC及其类似者。为了描述本发明的目的,在代码序列实例中使用BX Rx形式的间接分支指令,如下文进一步描述。
应注意,一般在ISA中提供其它形式的分支指令,例如具有被计算为指令指定的偏移地址与基底地址寄存器的总和的BTA及其类似者的分支指令。在支持此类分支指令时,处理器管线202可利用基于追踪的分支历史预测技术,例如先前分支指令执行的条件执行状态,且存储此类执行状态用于在预测这些指令的未来执行中使用。处理器管线202可支持此类分支历史预测技术,且另外支持使用ADVCN指令来提供与间接分支目标地址相关的寄存器的预先通知。举例来说,处理器管线202可使用分支历史预测技术直到遇到ADVCN指令为止,所述ADVCN指令接着使用如本文所描述的ADVCN设施来越权控制所述分支目标历史预测技术。
在本发明的其它实施例中,还可设置处理器管线202以监视使用ADVCN指令及当ADVCN相关目标地址未被正确地预测一或多次时的准确性,从而忽略相同间接分支后续遭遇ADVCN指令。还应注意,对于支持具有ADVCN指令的ISA的处理器的特定实施方案,处理器可将未遭遇ADVCN指令视为无操作(NOP)指令或将所检测ADVCN指令标记为未界定。此外,可将ADVCN指令视为具有动态分支历史预测电路的处理器管线中的NOP,所述动态分支历史预测电路具有充分的硬件资源以追踪在执行代码段期间遭遇的分支且启用如下所述的用于超过动态分支历史预测电路可用的硬件资源的代码段的ADVCN指令。而且,ADVCN指令可与动态分支历史预测电路结合使用以用于提供与间接分支目标地址相关的寄存器的预先通知,其中动态分支历史预测电路具有用于预测间接分支目标地址的不良结果。举例来说,由动态分支历史预测电路产生的预测分支目标地址可被经由使用ADVCN指令而提供的目标地址越权控制。另外,呈现有利的自动间接目标推理方法用于提供如下所述的间接分支目标地址的预先通知。
当处理器遭遇间接分支指令时,处理器确定是否到分支且还基于处理器的动态状态来确定分支的目标地址。间接分支指令一般用程序可访问寄存器(PAR)来编码,例如来自通用寄存器(GPR)堆或含有分支目标地址的其它程序可访问存储位置的寄存器。因此,在第一指令中指定第一程序可访问寄存器(PAR)(例如来自通用寄存器(GPR)堆或其它程序可访问存储位置的寄存器)来基于第二指令所指定的第二PAR来预测目标地址。第一PAR与第二PAR所指定的目标地址相关。而且,在第一指令中指定PAR以预测分支到分支指令中所指定的目标地址的评估结果。指定PAR与分支指令的所获取评估相关。而且,处理器基于所满足的条件(例如所注册的值是等于、不等于、大于还是小于另一注册的值)而分支。由于间接分支指令可改变程序中的依序寻址的流,所以管线式处理器一般停止提取指令直到其可确定是否将进行分支以及如果分支的话将到什么目标地址为止。如果确定不进行分支,那么分支“失败”且提取在所述分支之后的下一依序地址处的指令。准确地预测是否进行分支及预测分支目标地址是困难的问题。
图4A是用于在未遭遇ADVCN指令的情况下用于使用用于预测间接分支执行的一般历史方法的间接分支预测的方法的第一代码实例400。参考处理器组200来描述代码实例400的执行。指令A-D 401-404为用于此实例的顺序算术指令集,其基于指令A-D 401-404的分析而不影响GPRF 204中的寄存器R0。寄存器R0通过具有间接分支指令BX R0 406的目标地址的加载R0指令405来加载。针对此实例的目的,指令401-406中的每一者经指定为无条件地执行。还假定加载R0指令405在L1指令高速缓冲存储器208中可用,使得当指令A 401完成执行级222中的执行时,加载R0指令405已在提取级214中提取。接着在解码及ADVCN级216中解码加载R0指令405时提取间接分支BX R0指令406。在下一管线级中,加载R0指令405准备被调度用于执行且BX R0指令406经解码。而且,在解码及ADVCN级216,无论BX R0指令406是否进行而基于先前间接分支执行的历史来进行预测,且在可能的情况下还预测间接分支的目标地址。对于此实例,BX R0指令406经预测为“进行”,且ADVCN逻辑电路217仅需要预测间接分支目标地址作为地址X。ADVCN逻辑电路217不能预测在所有情况下的目标地址。为进行预测,使用先前分支方向历史及当前指令地址来产生散列键。举例来说,示范性散列键等于XOR(Current_Instruction_Address,Prior_Branch_Direction_History),如下文更详细描述。接着在预测表格中查找为Ptag的散列键以查看是否存在此分支/历史组合的先前实例,且如果存在,那么使用存储在与先前实例相关联的条目中的目标地址来预测间接分支目标地址。然而,如果未在预测表格中找到散列键,那么预测是不可能的且指令的提取停止。所述管线停止继续直到间接分支指令向下流动到执行级且执行为止。其后,将在执行级中产生的正确目标地址发送到提取级且所述停止被移除。如果预测是可能的,那么管线不停止,且基于此预测,处理器管线202经引导开始从所预测地址X开始的推测式提取指令。对于“进行”状态,所预测地址X一般为来自当前指令寻址的重新定向。处理器管线202还刷新所述管线中在间接分支BX R0指令406之后的任何指令(如果那些指令不与在地址X处开始的指令相关联)。
处理器管线202继续提取指令直到可在执行级中确定是否正确地预测所预测地址X为止。关于基于历史的方法的缺点是针对不同类型代码的预测的大体不准确度,如在使用分支执行历史与当前指令地址的组合的实践中所观测到的。此预测不准确度是由于基于过去观测的某些分支目标地址的固有不可预测性。误预测是成本较高的,这是因为其花费多个循环来寻找等待直到所述分支执行为止的误预测,且处理器管线基本上在原本应刷新的那些循环期间停止或进行工作。
图4B是用于使用提示指令来帮助预测间接分支目标地址的间接分支预先通知方法的第二代码实例420。基于图4A的指令A-D 401-404的先前所述分析,图4B的指令A-D421-424不影响分支目标地址寄存器R0,可将加载R0指令425放置在指令序列中较高向上处,例如放置在指令A 421之后。而且,可在程序420中将软件提示指令426放置在间接分支指令BX R0 427之前以识别相关联分支目标地址。软件提示426的可用性部分取决于可在遭遇间接分支之前多早来供应分支目标地址提示指令426。在许多情况下,由于关于代码序列中的先前指令的数据危障,例如,直到紧接在间接分支指令BX R0 427之前才能供应软件提示指令426,如图4B中所示。
为处理此类困难,可通过指定与此类评估结果相关的寄存器来动态地确定是否进行分支的评估。而且,所述分支目标地址可通过指定与目标地址相关的寄存器而非等待在所述分支指令内编码的目标地址在处理器管线中被解析来动态地确定。虽然可使用标准分支预测技术(例如关于上文图4A所描述),但此类技术还可具有取决于执行中的程序的高等级的误预测。关于图4C的第三代码实例440来展示用以最小化误预测间接分支指令的一个方法。
图4C是用于使用图3A的ADVCN指令300来提供与间接分支目标地址相关的寄存器的预先通知的间接分支预先通知方法的第三代码实例440。ADVCN指令300的使用通过最小化误预测来改良处理器性能且通过具有较准确预测来改进功率。并非将间接分支指令所识别的寄存器直接指示为保持目标地址(值),例如使用与目标地址相关的另一寄存器。举例来说,在图4C中,存储在指令B 442及加载R0[R1]446的寄存器R1中的值与存储在由分支BXR0指令447所使用的目标地址值相关。R1的值与用于BX R0指令447的R0的值相关。在图4D的第四代码实例460中所示的另一实例中,存储在指令B 463的寄存器R2中的值与存储在寄存器R0中的目标地址经由R1间接地相关。R2的值与用于BX R0指令447的R0的值经由R1的值而间接地相关。在图4C的代码实例440及图4D的代码实例460中,图4C中的ADVCN指令443及图4D中的463供应一相关值,所述相关值影响分支指令所使用的分支目标地址的产生,所述分支目标地址在这些实例中存储在R0中。ADVCN指令可用以预测分支到用于分支指令的目标地址的评估结果,其中所述预测是基于第一指令中所指定的程序可访问寄存器(PAR),且所指定PAR与分支指令的已进行评估相关。
当图4C的新指令序列441-447流经处理器管线202时,ADVCN R1指令443将在加载R1[R2]指令442处于执行级222中时处于读取级220中,及加载R0[R1]指令446将处于提取级214中。需要在间接分支指令BX R0 447进入解码及ADVCN级216之前确定R1值,以允许ADVCN逻辑电路217使用预先通知R1值来进行用于BX R0指令447的分支目标地址的预测而没有任何额外循环延迟。应注意,BX R0指令447在管线中被动态地识别。存储在ADVCN指令443指定的寄存器中的值(例如图4C中的代码实例中的R1的内容或图4D中的代码实例中的R2的内容)在ADVCN逻辑电路217中用作散列函数的输入,以产生散列键。接着在预测表格中查找为散列键以查看否存在的先前实例,且如果存在,那么使用存储在与先前实例相关联的条目中的目标地址来预测间接分支目标地址。ADVCN指令所提供的预先相关通知值是散列函数的输入。示范性散列函数为XOR(当前指令地址,ADVCN Rm值)。另一个为XOR(当前指令地址,ADVCN Rm值,历史)。存在可被评估及使用的许多替代散列函数。如果未在预测表格中找到所得散列键,那么预测是不可能的且指令的提取停止。所述管线继续停止直到间接分支指令向下流动到执行级且执行为止。其后,将在执行级中产生的正确目标地址发送到提取级且所述停止被移除。如果预测是可能的,那么管线不停止,且基于此预测,处理器管线202经引导开始从所预测地址X开始的推测式提取指令。
应注意,对于处理器管线202,已将加载R1[R2]指令442及ADVCN R1指令443放置在指令A 441之后,而不会导致针对在L1数据高速缓冲存储器210中存在命中的情况的任何进一步延迟。然而,如果在L1数据高速缓冲存储器中存在未命中,那么将起始停止情形。对于L1数据高速缓冲存储器210中的未命中的此情况,加载R1[R2]及ADVCN R1指令将需要(在可能的情况下)在BX R0指令之前放置基于管线深度的适当数目的未命中延迟循环,以避免导致任何进一步延迟。还应注意指令C 444及D 445不影响存储在寄存器R1中的值。
一般来说,ADVCN指令在代码序列中的放置优选为在BX指令之前N个指令。在处理器管线的上下文中,N表示接收间接分支指令的级与辨识与分支目标地址相关的ADVCN指定的寄存器的内容的级之间的级数目,例如指令提取级214及执行级222。在使用转发网226的示范性处理器管线202中,N为二且在未使用转发网226的情况下N为三。例如对于使用转发网的处理器管线,如果BX指令在ADVCN指令之前等于二的N指令处,那么由于转发网226而在读取寄存器级220的末端确定ADVCN寄存器Rm值。在未使用转发网226用于ADVCN指令使用的处理器管线的替代实施例中,例如,如果BX指令在ADVCN指令之前等于三的N指令处,那么在BX指令进入解码及ADVCN级216时在执行级222的末端确定ADVCN目标地址寄存器Rm值。举例来说,指令N的数目还可取决于额外因数,包含上部管线中归因于指令提取级214中的延迟的停止、可变化多达超标量处理器中所发布的K个指令的指令发布宽度、及在ADVCN与BX指令之间的中断。
为了更有效地使用ADVCN指令,指令集架构(ISA)可建议ADVCN指令尽早可能地调度以最小化管线因数的效应。ISA还可建议不放置可在ADVCN指令与被优化的间接分支之间误预测的其它分支。ISA可注意到,例如随着图4D中的ADVCN R2指令462与加载R0,[R1]指令466之间的中间指令而发生的R1值的任何改变可动态地影响R0的目标地址值。然而,此类改变是否影响预测的准确性取决于在选择ADVCN R2指令时对编程器或软件工具进行的选择。举例来说,如果R2仍提供唯一性且与R0的值相关,那么R1的中间改变将不影响与ADVCN R2指令462一起进行的所述预测的准确性。然而,如果R2归因于中间改变而不相关,那么预测准确性将并非良好的。在所述情况下的ADVCN R1指令将具有相比于ADVCN R2指令462较佳的选择。如果存在中间指令改变R1,那么应将ADVCN R1指令放置在最早指令改变R1之后,其中R1为唯一的且与R0中的目标地址相关。而且,在此实施例中,一般不应使用多个中间ADVCN指令。如图5中所说明的电路使用最后ADVCN指令作为相关值。在支持用于相同间接分支的多个ADVCN指令的另一实施例中,预测电路将使用多个ADVCN提供的Rm预先通知值作为散列函数的输入,所述散列函数产生Ptag以存取查找预测表格。
剖析及代码分析是可用以分析为ADVCN Rm指令中的Rm选取哪个寄存器的工具。在剖析中,可剖析基准点,且编程器可了解间接分支的目标地址所相关的寄存器值且选择所述寄存器作为ADVCN指令的操作数。一般来说,相关意味着特定寄存器值对于间接分支的给定目标地址为唯一的。在代码分析中,编程器还可使用如数据流及控制流图等额外工具来确定哪些寄存器值关于间接分支的目标地址是唯一的,且选择那些寄存器中的至少一者作为特定ADVCN指令的操作数。
虽然关于单个ADVCN指令来说明图4C及4D,但在遭遇一连串间接分支周期可将多个ADVCN指令实例化。可按FIFO形式(例如可经由使用堆叠设备而获得的)将多个ADVCN指令应用到接着遭遇的间接分支。应注意,下一遭遇的间接分支指令一般与按程序次序的下一间接分支指令相同。可在确定使用多个ADVCN指令是否适当之前评估可导致此一般规则的异常的代码。
图5说明根据本发明的示范性第一间接分支目标地址(BTA)预先通知电路500。第一间接BTA预先通知电路500包含ADVCN执行电路504、ADVCN寄存器电路508、BX解码电路512、选择电路517、及用于响应于影响程序计数器(PC)地址的产生的输入的下一PC电路520。在ADVCN执行电路504中的ADVCN指令的执行末端,所述执行的结果为指定寄存器的值,例如如在图4C的ADVCN R1指令443中指定的R1,其存储在ADVCN寄存器电路508中。在替代实施例中,ADVCN指令的Rm值可在读取寄存器级220中保存。由于ADVCN指令放置在间接分支指令之前,所以保持ADVCN寄存器电路508中存储的寄存器值且断言有效预先通知指示509。当在BX解码电路512中解码BX指令且断言有效预先通知指示509时,由选择电路517产生选择信号516。来自ADVCN指令的执行的预先相关通知寄存器值用以帮助预测目标地址,而非被直接用于“下一PC”电路520中。散列函数电路524接收来自如选自预测源选择器522的ADVCN寄存器电路508以及来自下一PC电路520的PC的预先相关通知寄存器值输出,以产生预测标记(Ptag)525。在预测器电路528中查找Ptag 525以寻找预测目标地址。
Ptag 525可为PC及分支历史的散列、或PC及预先通知寄存器值的散列。举例来说,当PC为当前指令地址时,第一散列函数(hash1)为XOR(PC,ADVCN Rm值),及第二散列函数(hash2)为XOR(PC,inverse(ADVCN Rm值)),其中inverse为使二进制输入的次序反向的二进制函数,例如inverse(10011)=11001。散列函数的额外实例包含为XOR(PC,历史)的第三散列函数(hash3)、为XOR(PC,inverse(历史))的第四散列函数(hash4)及为XOR(inverse(PC),ADVCN Rm值)的第五散列函数(hash5)。散列函数的其它实例包含为XOR(PC,ADVCN Rm(H1)||inverse(ADVCN Rm(H0))的第六散列函数(hash6),其中||为先前与之后二进制数字的连接。其它此类变体及其类似者是可能的。一般来说,可界定从一或多个输入值提取唯一性的散列函数。还应注意历史值的散列函数可不同于ADVCN Rm值的散列函数。如果ADVCN寄存器值不可用,那么Ptag 525将通过使用分支历史来产生,如关于图4A所描述。如果预先通知寄存器值可用,那么Ptag 525将通过使用预先通知寄存器值来产生。接着将由存储在Ptag寄存器525中的Ptag所产生的预测目标地址存储在分支目标地址寄存器(BTAR)526中,分支目标地址(BTA)从所述BTAR 526输出且通过nextPC多路复用器520选择。基于学习功能,当分支被误预测时Ptag表格被更新正确的目标地址。分支电路记住跟在相关联分支指令之后沿管线向下到执行级的散列键。如果最初未在解码/ADVCN级找到散列键,那么将相同散列键用以更新所述表格或建立条目。
图6说明根据另一实施例的经利用以预测间接分支指令的分支目标地址的预先相关通知(ADVCN)过程600。在方框602,在指令提取级214中提取及接收指令。在方框604,进行所接收指令是否是ADVCN Rm指令的确定。如果指令是ADVCN Rm指令,那么过程600进行到方框606。在方框606,ADVCN Rm指令经由处理器管线前进,且在执行级222致使存储在ADVCN指定Rm寄存器中的值存储在ADVCN寄存器508中以用于解码及ADVCN级216中。过程600接着返回等待下一指令。返回到方框604,如果所接收指令不是ADVCN Rm指令,那么过程600进行到方框610。在方框610,进行所接收指令是否是间接分支Rm指令(例如BX Rm指令)的确定。如果所接收指令不是间接分支Rm指令,那么过程600返回等待下一指令。如果所接收指令是间接分支指令,那么过程600进行到方框612。在方框612,进行是否断言有效的ADVCN的确定。如果断言有效的ADVCN,那么过程600进行到方框614。在方框614,在解码及ADVCN级216期间,选择存储在ADVCN寄存器中的ADVCN Rm值。在方框616,将Ptag产生为选定值及当前PC值的散列且存储在Ptag寄存器中。在方框618,在预测器电路中查询选自Ptag寄存器的Ptag以寻找预测分支目标地址(BTA)且将其存储在分支目标地址寄存器(BTAR)中。在方框620,存储在BTAR中的BTA值用以在预测BTA处提取下一指令。过程600接着返回等待下一指令。返回到方框612,其中确定为不断言有效的ADVCN通知,那么过程600进行到方框622。在方框622,分支历史值是选自分支历史电路。过程600在方框616-620中使用选定分支历史值来预测分支目标地址,且接着返回等待下一指令。
结合本文所揭示实施例而描述的方法可体现于硬件中,且由来自存储处理器所执行的非暂时性信号的存储器模块的软件来使用。所述软件可支持如本文所描述的硬件的执行,或可用以仿真扩展如本文所描述的分支目标提示的方法及设备。软件模块可驻留于随机存取存储器(RAM)、快闪存储器、只读存储器(ROM)、电可编程只读存储器(EPROM)、硬盘、可移动磁盘、磁带、紧密磁盘只读存储器(CD-ROM)或此项技术中已知的任何其它形式的存储媒体中。存储媒体可耦合到处理器而使得处理器可从存储媒体读取信息及在一些情况下写入信息到存储媒体。耦合到处理器的存储媒体可为与电路实施方案一体的直接耦合,且可利用使用下载技术来支持直接存取或数据流式传输的一或多个接口。
虽然已在目前优选上下文中揭示本发明,但将认识到本发明教示可适用于与本发明及随附权利要求书一致的多种上下文。

Claims (6)

1.一种用于提取指令的方法,其包括:
接收第一指令;
检测所述第一指令是通知指令;
一旦检测到所述第一指令是所述通知指令,
确定被所述通知指令所指定的分支目标地址,
在第一寄存器中存储所述分支目标地址,以及
断言有效预先通知;
接收第二指令;
检测所述第二指令是间接分支指令;
一旦检测到所述第二指令是所述间接分支指令,
解码所述间接分支指令,以及
确定所述有效预先通知是否被断言;
响应于所述间接分支指令的所述解码和确定所述有效预先通知被断言,选择存储在所述第一寄存器中的所述分支目标地址;
基于所述分支目标地址与当前程序计数器PC值的散列来产生预测标记;
在第二寄存器中存储所述预测标记;以及
基于在所述间接分支指令的执行之前的所述预测标记来提取第三指令。
2.根据权利要求1所述的方法,其中所述通知指令包括预先相关通知ADVCN指令。
3.根据权利要求1所述的方法,其中所述第一寄存器是第一程序可访问寄存器PAR,并且所述第二寄存器是第二PAR,所述第一PAR和所述第二PAR是通用寄存器GPR堆。
4.根据权利要求1所述的方法,其中所述分支目标地址是在所述间接分支指令之后的下一依序地址。
5.一种用于推测式提取指令的设备,所述设备包括:
第一寄存器;
第二寄存器;
目标地址电路,其经配置以:
接收第一指令;
检测所述第一指令是通知指令;
一旦检测到所述第一指令是所述通知指令,确定分支目标地址,在所述第一寄存器中存储所述分支目标地址,并且断言有效预先通知;
接收第二指令;
检测所述第二指令是间接分支指令;
一旦检测到所述第二指令是所述间接分支指令,解码所述间接分支指令,并且确定所述有效预先通知是否被断言;
一旦解码所述间接分支指令并且确定所述有效预先通知被断言,选择存储在所述第一寄存器中的所述分支目标地址;
基于所述分支目标地址与当前程序计数器PC值的散列来产生预测标记;以及在所述第二寄存器中存储所述预测标记;
提取电路,其经配置以基于在所述间接分支指令的执行之前的所述预测标记来提取第三指令。
6.一种用于提取指令的设备,所述设备包括:
第一寄存器;
第二寄存器;
用于接收第一指令的装置;
用于检测所述第一指令是通知指令的装置;
用于一旦检测到所述第一指令是所述通知指令而确定分支目标地址、在所述第一寄存器中存储所述分支目标地址并且断言有效预先通知的装置;
用于接收第二指令的装置;
用于检测所述第二指令是间接分支指令的装置;
用于一旦检测到所述第二指令是所述间接分支指令而解码所述间接分支指令并且确定所述有效预先通知是否被断言的装置;
用于一旦解码所述间接分支指令并且确定所述有效预先通知被断言而选择存储在所述第一寄存器中的所述分支目标地址的装置;
用于基于所述分支目标地址与当前程序计数器PC值的散列来产生预测标记的装置;以及
用于在所述第二寄存器中存储所述预测标记的装置;
用于基于在所述间接分支指令的执行之前的所述预测标记来提取第三指令的装置。
CN201380033335.7A 2012-06-25 2013-06-21 用以扩展软件分支目标提示的方法及设备 Expired - Fee Related CN104471529B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/531,920 2012-06-25
US13/531,920 US20130346727A1 (en) 2012-06-25 2012-06-25 Methods and Apparatus to Extend Software Branch Target Hints
PCT/US2013/046975 WO2014004272A1 (en) 2012-06-25 2013-06-21 Methods and apparatus to extend software branch target hints

Publications (2)

Publication Number Publication Date
CN104471529A CN104471529A (zh) 2015-03-25
CN104471529B true CN104471529B (zh) 2018-06-01

Family

ID=48782618

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201380033335.7A Expired - Fee Related CN104471529B (zh) 2012-06-25 2013-06-21 用以扩展软件分支目标提示的方法及设备

Country Status (4)

Country Link
US (1) US20130346727A1 (zh)
EP (1) EP2864868B1 (zh)
CN (1) CN104471529B (zh)
WO (1) WO2014004272A1 (zh)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10474462B2 (en) * 2016-02-29 2019-11-12 Qualcomm Incorporated Dynamic pipeline throttling using confidence-based weighting of in-flight branch instructions
GB2548604B (en) * 2016-03-23 2018-03-21 Advanced Risc Mach Ltd Branch instruction
US20170371669A1 (en) * 2016-06-24 2017-12-28 Qualcomm Incorporated Branch target predictor
US20180081806A1 (en) * 2016-09-22 2018-03-22 Qualcomm Incorporated Memory violation prediction
US10318303B2 (en) * 2017-03-28 2019-06-11 Oracle International Corporation Method and apparatus for augmentation and disambiguation of branch history in pipelined branch predictors
US10884745B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US11150904B2 (en) * 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
US10884746B2 (en) * 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US10884747B2 (en) * 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US10908911B2 (en) * 2017-08-18 2021-02-02 International Business Machines Corporation Predicting and storing a predicted target address in a plurality of selected locations
US11150908B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US10719319B2 (en) * 2017-12-29 2020-07-21 Intel Corporation Fine grained control flow enforcement to mitigate malicious call/jump oriented programming
WO2020186630A1 (en) * 2019-03-21 2020-09-24 Huawei Technologies Co., Ltd. Serializing divergent accesses using peeling

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6263427B1 (en) * 1998-09-04 2001-07-17 Rise Technology Company Branch prediction mechanism
CN1397880A (zh) * 2001-05-04 2003-02-19 智慧第一公司 附有第二预测装置的假想分支目标地址高速缓存

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0418636A (ja) * 1990-05-11 1992-01-22 Seiko Epson Corp 情報処理装置
KR20040014988A (ko) * 2001-06-29 2004-02-18 코닌클리즈케 필립스 일렉트로닉스 엔.브이. 간접 브랜치 타겟 어드레스 예측을 위한 방법, 장치 및컴파일러
US20070088937A1 (en) * 2005-10-13 2007-04-19 International Business Machines Corporation Computer-implemented method and processing unit for predicting branch target addresses
US20110320787A1 (en) * 2010-06-28 2011-12-29 Qualcomm Incorporated Indirect Branch Hint

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6263427B1 (en) * 1998-09-04 2001-07-17 Rise Technology Company Branch prediction mechanism
CN1397880A (zh) * 2001-05-04 2003-02-19 智慧第一公司 附有第二预测装置的假想分支目标地址高速缓存

Also Published As

Publication number Publication date
EP2864868B1 (en) 2020-01-01
US20130346727A1 (en) 2013-12-26
CN104471529A (zh) 2015-03-25
WO2014004272A1 (en) 2014-01-03
EP2864868A1 (en) 2015-04-29

Similar Documents

Publication Publication Date Title
CN104471529B (zh) 用以扩展软件分支目标提示的方法及设备
CN103250131B (zh) 包括用于早期远分支预测的影子缓存的单周期多分支预测
CN102934075B (zh) 用于使用预先通知技术改变程序的顺序流程的方法和设备
CN101373427B (zh) 程序执行控制装置
TWI574205B (zh) 減少在處理器上的電源耗損之方法及設備及電腦系統
TWI503744B (zh) 用於封裝迴圈中多個反覆之裝置、處理器及方法
CN101763249A (zh) 对非控制流指令减少分支检验
US20140136822A1 (en) Execution of instruction loops using an instruction buffer
US9201658B2 (en) Branch predictor for wide issue, arbitrarily aligned fetch that can cross cache line boundaries
US20120079255A1 (en) Indirect branch prediction based on branch target buffer hysteresis
JP2006134331A (ja) ブランチ目的アドレスを利用してキャッシュウェイを予測するプロセッサ及びその方法
CN102662640B (zh) 双重分支目标缓冲器和分支目标处理系统及处理方法
JP5941488B2 (ja) 条件付きショート前方分岐の計算的に等価な述語付き命令への変換
CN101535951A (zh) 用于辨识子例程调用的方法及设备
CN103238134A (zh) 编码于分支指令中的双模态分支预测器
US9626185B2 (en) IT instruction pre-decode
US11061683B2 (en) Limiting replay of load-based control independent (CI) instructions in speculative misprediction recovery in a processor
CN116302106A (zh) 用于促进分支预测单元的改善的带宽的设备、方法和系统
CN104854556A (zh) 建立用于子例程返回的分支目标指令高速缓冲存储器(btic)条目以减少执行管线泡,以及相关系统、方法和计算机可读媒体
EP3198400B1 (en) Dependency-prediction of instructions
KR20230093442A (ko) 프로세서에서 추론적 예측 실패 복구시 리플레이를 위한 제어 독립적(ci) 메모리 데이터 의존적(dd)(cimdd) 명령어들로서 로드 기반 제어 독립적(ci) 레지스터 데이터 독립적(di)(cirdi) 명령어들의 예측
US7346737B2 (en) Cache system having branch target address cache
US9135011B2 (en) Next branch table for use with a branch predictor
US20050027921A1 (en) Information processing apparatus capable of prefetching instructions
CN107003859A (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
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20180601

Termination date: 20210621