CN115576607A - 用于微架构返回预测器安全性的计数到空 - Google Patents

用于微架构返回预测器安全性的计数到空 Download PDF

Info

Publication number
CN115576607A
CN115576607A CN202210490169.4A CN202210490169A CN115576607A CN 115576607 A CN115576607 A CN 115576607A CN 202210490169 A CN202210490169 A CN 202210490169A CN 115576607 A CN115576607 A CN 115576607A
Authority
CN
China
Prior art keywords
srsb
empty
pointer value
count
rsb
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
CN202210490169.4A
Other languages
English (en)
Inventor
马修·洛斯
马丁·利希特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
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 CN115576607A publication Critical patent/CN115576607A/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
    • 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/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/321Program or instruction counter, e.g. incrementing
    • 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
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Advance Control (AREA)

Abstract

本公开总体涉及用于微架构返回预测器安全性的计数到空。一种集成电路的实施例可以包括返回堆栈缓冲器(RSB),推测性返回堆栈缓冲器(SRSB),以及与RSB和SRSB耦合的电路,该电路用于在分支预测单元进行预测时跟踪直到SRSB为空为止的计数,并且至少部分地基于直到SRSB为空为止的计数来从分支预测单元返回与RSB和SRSB之一相对应的输出。公开并且要求保护了其他实施例。

Description

用于微架构返回预测器安全性的计数到空
技术领域
本公开总体涉及处理器技术、指令解码技术和推测性解码技术。
背景技术
一些中央处理器单元(central processor unit,CPU)核心可以利用推测性执行来避免管线停滞并且实现更好的性能,这使得执行可以继续进行,而不必等待对分支目标的架构解析。分支预测技术利用数字电路,该数字电路在分支指令被执行之前猜测分支将以何种方式行进。正确的预测/猜测改善了指令管线中的流程。一般则言,条件分支的分支预测可以被理解为对分支被“采取”与“不采取”的预测。分支预测单元(branch predictionunit,BPU)可以通过基于分支指令指针(instruction pointer,IP)、分支类型以及预测点之前的控制流历史(也称为分支历史)为CPU的前端提供分支预测,来支持推测性执行。
发明内容
根据本公开的第一实施例,提供了一种集成电路,包括:返回堆栈缓冲器(RSB);推测性返回堆栈缓冲器(SRSB);以及与所述RSB和所述SRSB耦合的电路,所述电路用于:在分支预测单元进行预测时跟踪直到所述SRSB为空为止的计数,以及至少部分地基于直到所述SRSB为空为止的计数来从所述分支预测单元返回与所述RSB和所述SRSB之一相对应的输出。
根据本公开的第二实施例,提供了一种方法,包括:在分支预测单元进行预测时跟踪直到推测性返回堆栈缓冲器(SRSB)为空为止的计数;以及至少部分地基于直到所述SRSB为空为止的计数来从所述分支预测单元返回与返回堆栈缓冲器(RSB)和所述SRSB之一相对应的输出。
根据本公开的第三实施例,提供了一种装置,包括:后端单元,用于执行一个或多个解码的指令;以及与所述后端单元通信地耦合的前端单元,用于对一个或多个指令进行解码,所述前端单元包括分支预测单元,其中,所述分支预测单元包括返回堆栈缓冲器(RSB)、推测性返回堆栈缓冲器(SRSB)、以及与所述RSB和所述SRSB耦合的电路,所述电路用于:在分支预测单元进行预测时跟踪直到所述SRSB为空为止的计数,以及至少部分地基于直到所述SRSB为空为止的计数来从所述分支预测单元返回与所述RSB和所述SRSB之一相对应的输出。
附图说明
在附图中以示例方式而不是限制方式图示了本发明的各种实施例,在附图中:
图1是根据一实施例的集成电路的示例的框图;
图2A至图2C是根据一实施例的方法的示例的流程图;
图3是根据一实施例的装置的示例的框图;
图4是根据一实施例的方法的另一示例的流程图;
图5A至图5C是根据一实施例的推测性返回堆栈缓冲器的示例的说明图;
图6是根据一实施例的方法的另一示例的流程图;
图7A至图7C是根据一实施例的推测性返回堆栈缓冲器的另一示例的说明图;
图8A至图8B是根据一实施例的推测性返回堆栈缓冲器的另一示例的说明图;
图9是根据一实施例的无序处理器的示例的框图;
图10A是根据本发明的实施例图示出示例性有序管线和示例性寄存器重命名、无序发出/执行管线两者的框图。
图10B是根据本发明的实施例图示出要被包括在处理器中的有序架构核心的示例性实施例和示例性寄存器重命名、无序发出/执行架构核心两者的框图;
图11A-图11B图示出更具体的示例性有序核心架构的框图,该核心将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核心)之一;
图12是根据本发明的实施例的处理器的框图,该处理器可以具有多于一个核心,可以具有集成的存储器控制器,并且可以具有集成的图形;
图13-图16是示例性计算机架构的框图;以及
图17是根据本发明的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。
具体实施方式
本文论述的实施例以各种方式提供了用于微架构返回预测器安全性的计数到空(count to empty)技术的技术和机制。本文描述的技术可以被实现在一个或多个电子设备中。可以利用本文描述的技术的电子设备的非限制性示例包括任何种类的移动设备和/或固定设备,例如相机、蜂窝电话、计算机终端、桌面型计算机、电子阅读器、传真机、一体机、膝上型计算机、上网本计算机、笔记本计算机、互联网设备、支付终端、个人数字助理、媒体播放器和/或记录器、服务器(例如,刀片式服务器、机架安装式服务器、其组合,等等)、机顶盒、智能电话、平板个人计算机、超便携个人计算机、有线电话、这些的组合,等等。更一般而言,本文描述的技术可以被用于包括可操作为对指令进行解码的集成电路的各种电子设备中的任何一种中。
在接下来的描述中,论述了许多细节以提供对本公开的实施例的更透彻说明。然而,本领域技术人员将会清楚,没有这些具体细节也可以实现本公开的实施例。在其他情况下,以框图形式而不是详细示出公知的结构和设备,以避免模糊本公开的实施例。
注意,在实施例的相应附图中,用线条来表示信号。一些线条可能更粗,以指示出更大数目的构成信号路径,和/或在一端或多端具有箭头,以指示出信息流的方向。这种指示并不旨在进行限制。更确切地说,这些线条与一个或多个示例性实施例被结合使用来帮助更容易地理解电路或逻辑单元。由设计需要或偏好决定的任何所表示的信号可以实际上包括可在任一方向上行进并且可利用任何适当类型的信号方案来实现的一个或多个信号。
在整个说明书各处,以及在权利要求中,术语“连接”的意思是直接连接,例如连接的事物之间的电连接、机械连接或者磁连接,而没有任何中间设备。术语“耦合”的意思是直接或间接连接,例如连接的事物之间的直接电连接、机械连接或者磁连接,或者通过一个或多个无源或有源中间设备的间接连接。术语“电路”或“模块”可以指被布置为与彼此合作来提供期望的功能的一个或多个无源和/或有源组件。术语“信号”可以指至少一个电流信号、电压信号、磁信号、或者数据/时钟信号。“一”和“该”的含义包括多数指代。“在……中”的含义包括“在……中”和“在……上”。
术语“设备”根据该术语的使用上下文一般可以指装置。例如,设备可以指层或结构的堆叠、单个结构或层、具有有源和/或无源元件的各种结构的连接,等等。一般而言,设备是三维结构,具有沿着x-y-z笛卡儿坐标系的x-y方向的平面和沿着z方向的高度。设备的平面也可以是包括该设备的装置的平面。
术语“缩放”一般是指将某个设计(图解和布局)从一个工艺技术转换到另一个工艺技术并随后减小布局面积。术语“缩放”一般也指在同一技术节点内减小布局和器件的大小。术语“缩放”还可以指相对于另一参数(例如,电力供应水平)对信号频率进行的调整(例如,减慢或加速——即分别是缩小或放大)。
术语“基本上”、“接近”、“大致”、“近似”和“大约”一般是指在目标值的+/-10%内。例如,除非在其使用的明确上下文中另有指明,否则术语“基本上等于”、“大约等于”和“大致等于”的意思是在这样描述的事物之间没有超过偶然的差异。在本领域中,这种差异通常不超过预定目标值的+/-10%。
要理解,这样使用的术语在适当的情况下是可互换的,从而使得本文描述的发明的实施例例如能够按与本文图示或以其他方式描述的那些不同的其他朝向来操作。
除非另有指明,否则使用序数形容词“第一”、“第二”和“第三”等等来描述共同对象只是表明相似对象的不同实例被引用,而并不旨在暗示这样描述的对象必须在时间上、空间上、排名上或者以任何其他方式处于给定的序列中。
说明书中和权利要求中的术语“左”、“右”、“前”、“后”、“顶”、“底”、“上”、“下”等等——如果有的话——是用于描述性目的的,而并不一定用于描述永久的相对位置。例如,本文使用的术语“在……上方”、“在……下方”、“前侧”、“后侧”、“顶”、“底”、“在……上方”、“在……下方”和“在……上”指的是一个组件、结构或材料相对于设备内的其他引用的组件、结构或材料的相对位置,其中这种物理关系是值得注意的。这些术语在本文中仅被用于描述性目的,而且主要是在设备z轴的上下文内被使用的,因此可相对于设备的方向。因此,在本文提供的附图的上下文中在第二材料“上方”的第一材料也可在第二材料的“下方”,如果该设备相对于所提供的附图的上下文被颠倒方向的话。在材料的上下文中,一个材料被布置在另一材料上方或下方可以是直接接触的或者可以具有一个或多个居间的材料。另外,一个材料被布置在两个材料之间可以与这两个层直接接触或者可以具有一个或多个居间的层。与之不同,在第二材料“上”的第一材料是与该第二材料直接接触的。在组件装配的上下文中要作出类似的区分。
术语“在……之间”可以在设备的z轴、x轴或y轴的上下文中被使用。在两个其他材料之间的材料可以与这些材料中的一者或两者接触,或者它可以通过一个或多个居间的材料而与其他两个材料都分隔开。在两个其他材料“之间”的材料因此可以与其他两个材料中的任一者接触,或者它可以通过居间的材料耦合到其他两个材料。在两个其他设备之间的设备可以与这些设备中的一者或两者直接连接,或者它可以通过一个或多个居间的设备而与其他两个设备都分隔开。
当在本说明书各处以及权利要求中使用时,由术语“……中的至少一个”或者“……中的一个或多个”联接的项目的列表可意指列出的术语的任何组合。例如,短语“A、B或C中的至少一者”可意指A;B;C;A和B;A和C;B和C;或者A、B和C。要指出的是,附图中具有与任何其他图中的元素相同的标号(或名称)的那些元素可按与所描述的方式相似的任何方式来操作或工作,但不限于此。
此外,本公开中论述的组合逻辑和时序逻辑的各种元素既可涉及物理结构(例如,与门、或门或者异或门),也可涉及实现作为所论述的逻辑的布尔等同的逻辑结构的器件的合成的或者以其他方式优化的集合。
一些实施例提供了一种计数到空的技术,以提高微架构返回预测器安全性的性能。一些处理器中使用的微架构返回预测器具有特定的漏洞,这些漏洞允许返回预测在取得时被再使用,要求预测器在模式和进程转化时被清除。控制流施行技术(control-flowenforcement technology,CET)可以在执行级别在架构上解决一些漏洞,但在取得和解码以推测性地填充诸如转化后备缓冲器(translation look-aside buffer,TLB)、指令缓存等等之类的结构期间,在微架构级别上无法解决漏洞。为了确定要使用返回预测器的哪个部分,一些技术可能涉及一种记录当前堆栈大小的标签,以及被与读取和写入指针相比较以检测环绕的颜色比特。
当这些机制中的任一者检测到溢出情况时,已提交的返回堆栈缓冲器(returnstack buffer,RSB)的输出被选择,而不是推测性返回堆栈缓冲器(speculative returnstack buffer,SRSB)被选择。例如,在这个示例中,RSB可能被选择而不是SRSB,因为RSB在管线中被更新。如果RSB没有被溢出,则RSB可能不一定比SRSB包含更多的最新信息,但RSB一般能够在不溢出的情况下进行多得多的预测。为了确定SRSB何时被溢出,一些技术使用颜色比特来检测SRSB的环绕,以及堆栈大小比较,但作为一种安全性预防措施,返回预测器在模式转变期间被冲刷。对返回预测器的不必要冲刷会造成性能损失,因为损失了可能有用的预测。如果溢出没有被正确检测到,则系统可能容易受到边通道攻击。有利地,一些实施例可以克服前述问题中的一个或多个。
一些实施例可以通过阻止来自返回预测器的跨域地址的泄漏来提高安全性,并且/或者可以通过减少在模式转变时冲刷返回预测器的需要来提高性能。一些实施例可以解决推测性返回目标再使用条件,这使得能够实现更高的安全性,并且通过不需要在所有情形中清除返回阵列而实现了更好的性能。
参考图1,集成电路100的一实施例可以包括返回堆栈缓冲器(RSB)105、推测性返回堆栈缓冲器(SRSB)109、以及与RSB 105和SRSB 109耦合的电路115。电路115可以被配置为在由分支预测单元进行预测时跟踪直到SRSB 109为空为止的计数,并且至少部分地基于直到SRSB 109为空为止的计数来从分支预测单元返回与RSB 105和SRSB 109之一相对应的输出。例如,电路115可以进一步被配置为,如果直到SRSB 109为空为止的计数为零,则从分支预测单元返回与RSB 105相对应的输出。
在一些实施例中,电路115可以被配置为,响应于向SRSB 109中的插入,将直到SRSB 109为空为止的计数递增第一指针值与第二指针值之间的差,其中第一指针值对应于SRSB 109的堆栈的顶部位置,并且其中,第二指针值对应于到SRSB 109中的下一个条目的分配位置。例如,电路115还可以被配置为将递增的计数限制到SRSB 109中的条目的最大数目的上限值。在一些实施例中,电路115可以被配置为,响应于从SRSB 109消耗预测,将直到SRSB 109为空为止的计数递减第一指针值与第二指针值之间的差,其中第一指针值对应于SRSB 109的堆栈的当前顶部位置,并且第二指针值对应于在从SRSB 109消耗预测之后SRSB109的堆栈的新顶部位置。例如,电路115还可以被配置为将递减的计数限制到下限值零。
在一些实施例中,电路115可以进一步被配置为存储最大指针值以跟踪在SRSB109中写入的最远点。电路115还可以被配置为,响应于误预测恢复,基于最大指针值来更新直到SRSB 109为空为止的计数。例如,电路115可以被配置为至少部分地基于最大指针值来确定SRSB 109中的被覆写条目的数目,并且响应于误预测恢复,基于被覆写条目的数目来更新直到SRSB 109为空为止的计数。
包括RSB 105、SRSB 109和/或电路115在内的集成电路100的实施例可以被包含在处理器中,该处理器包括例如核心990(图10B)、核心1102A-N(图12、图16)、处理器1210(图13)、协处理器1245(图13)、处理器1370(图14-图15)、处理器/协处理器1380(图14-图15)、协处理器1338(图14-图15)、协处理器1520(图16)、和/或处理器1614、1616(图17)。具体地,RSB 105、SRSB 109和/或电路115的实施例可以被包含在分支预测单元932(图10B)中。
参考图2A至图2C,方法200的一实施例可以包括在方框221处,在由分支预测单元进行预测时跟踪直到SRSB为空为止的计数,并且在方框222,至少部分地基于直到SRSB为空为止的计数来从分支预测单元返回与RSB和SRSB之一相对应的输出。例如,方法200可以包括,在方框223,如果直到SRSB为空为止的计数为零,则从分支预测单元返回与RSB相对应的输出。
方法200的一些实施例还可以包括,响应于向SRSB中的插入,在方框224,将直到SRSB为空为止的计数递增第一指针值与第二指针值之间的差,其中第一指针值对应于SRSB的堆栈的顶部位置,并且其中第二指针值对应于到SRSB中的下一个条目的分配位置。例如,方法200还可以包括在方框225将递增的计数限制到上限值,该上限值为SRSB中的条目的最大数目。方法200的一些实施例还可以包括,响应于从SRSB消耗预测,在方框226将直到SRSB为空为止的计数递减第一指针值与第二指针值之间的差,其中第一指针值对应于SRSB的堆栈的当前顶部位置,并且第二指针值对应于在从SRSB消耗预测之后SRSB的堆栈的新顶部位置。例如,方法200还可以包括在方框227将递减的计数限制到下限值零。
方法200的一些实施例还可以包括在方框228存储最大指针值以跟踪在SRSB中写入的最远点。方法200还可以包括在方框229处,响应于误预测恢复,基于最大指针值来更新直到SRSB为空为止的计数。例如,方法200可以包括在方框230处,至少部分地基于最大指针值来确定SRSB中的被覆写条目的数目,并且在方框231处,响应于误预测恢复,基于被覆写条目的数目来更新直到SRSB为空为止的计数。
参考图3,装置300的一实施例可以包括后端单元311,用于执行一个或多个解码的指令,以及与后端单元311通信地耦合的前端单元312,用于解码一个或多个指令。前端单元312可以包括分支预测单元317。分支预测单元317可以包括RSB 325、SRSB 329、以及与RSB325和SRSB 329耦合的电路335。电路335可以被配置为在由分支预测单元317进行预测时跟踪直到SRSB 329为空为止的计数,并且至少部分地基于直到SRSB 329为空为止的计数来从分支预测单元317返回与RSB 325和SRSB 329之一相对应的输出。例如,电路335可以进一步被配置为,如果直到SRSB 329为空为止的计数为零,则从分支预测单元返回与RSB 325相对应的输出。
在一些实施例中,电路335可以被配置为,响应于向SRSB 329中的插入,将直到SRSB 329为空为止的计数递增第一指针值与第二指针值之间的差,其中第一指针值对应于SRSB 329的堆栈的顶部位置,并且其中第二指针值对应于到SRSB 329中的下一个条目的分配位置。例如,电路335还可以被配置为将递增的计数限制到SRSB 329中的条目的最大数目的上限值。在一些实施例中,电路335可以被配置为,响应于从SRSB 329消耗预测,将直到SRSB 329为空为止的计数递减第一指针值与第二指针值之间的差,其中第一指针值对应于SRSB 329的堆栈的当前顶部位置,并且第二指针值对应于在从SRSB 329消耗预测之后SRSB329的堆栈的新顶部位置。例如,电路335还可以被配置为将递减的计数限制到下限值零。
在一些实施例中,电路335可以进一步被配置为存储最大指针值以跟踪在SRSB329中写入的最远点。电路335还可以被配置为,响应于误预测恢复,基于最大指针值来更新直到SRSB 329为空为止的计数。例如,电路335可以被配置为至少部分地基于最大指针值来确定SRSB 329中的被覆写条目的数目,并且响应于误预测恢复,基于被覆写条目的数目来更新直到SRSB 329为空为止的计数。
前端单元312、分支预测单元317、RSB 325、SRSB 329和/或电路335的实施例可以被包含在处理器中,该处理器包括例如核心990(图10B)、核心1102A-N(图12、图16)、处理器1210(图13)、协处理器1245(图13)、处理器1370(图14-图15)、处理器/协处理器1380(图14-图15)、协处理器1338(图14-图15)、协处理器1520(图16)、和/或处理器1614、1616(图17)。具体地,分支预测单元317、RSB 325、SRSB 329和/或电路335的实施例可以被包含在前端单元930(图10B)中。
在一些实施例中,计数到空溢出检测技术可以利用饱和计数器来跟踪SRSB中直到SRSB为空为止的条目的数目。一单独的计数器可以跟踪在SRSB中写入的最远点,并且该单独计数器值可以在误预测恢复时被与计数到空值进行比较,以确定还有多少个条目可用。如果计数到空值为0,那么就选择提交的RSB输出而不是SRSB输出。有利的是,一些实施例可以去除可能导致返回误预测到非零目标的确定性极端情况,从而消除了可能的边通道攻击向量并且提高了返回预测的正确性。一些实施例还可以去除在一些情况下冲刷返回预测器的需要,进一步提高了分支预测性能。与一些传统技术相比,一些实施例还可以通过要求存储更少的比特来节省硬件面积。一些实施例可以更好地确定SRSB是否能够作出有效预测。
SRSB是在预测时被更新的返回目标预测器(例如,返回目标是“推测性”的)。因为SRSB是在预测时被更新的,所以SRSB必须能够从误预测中恢复。这使得SRSB的功能类似于链表(例如,而不是像其他返回预测器或返回堆栈缓冲器那样类似于堆栈)。每个新的调用都有被分配给新的SRSB条目的下一指令指针,它是指向先前堆栈顶部条目的指针。返回预测将目标从当前堆栈顶部指针取到RSB,然后从条目读取跟随指针移动堆栈顶部。由于SRSB总是将调用分配到下一条目,但可以跟随返回指针到任何其他条目,所以有可能用大于1个调用的任何大小的调用堆栈来溢出阵列结构。这种溢出发生在从已经被更年轻的调用所覆写的SRSB条目中取得返回预测的时候。通过故意造成溢出,攻击者可能尝试暴露边通道漏洞。一些实施例可以去除这个漏洞,并且不会预测到存储在无效的SRSB条目中的地址。相反,一些实施例将预测到当RSB被溢出时给出的默认地址。
SRSB的实施例可以包括任何有用的条目数目,最多可达到最大大小。被称为“count_to_empty”的计数器的值可以指示出SRSB的条目中有多少是当前可用的(例如,当count_to_empty的值为零时,SRSB没有有效条目)。被称为“stos”的指针可以指示出SRSB的当前堆栈顶部位置。另一个被称为“salloc”的指针可以指示出下一个SRSB分配位置。在计数到空技术的一些实施例中,不是与每个SRSB条目一起存储信息,而是count_to_empty计数器保持对可用于返回预测的SRSB条目的数目的实时预测时间计数。值得注意的是,count_to_empty计数器保持对可用的有效条目的计数,而不是预测的数目。当调用被插入到SRSB中时,将count_to_empty计数器递增当前stos指针与salloc指针之间的差。
参考图4,方法400的一实施例可以从在方框402处向SRSB插入调用开始。salloc和stos指针在方框403处被更新。例如,在插入调用时,salloc指针被更新(递增1),并且stos指针被更新,不依赖于count_to_empty计数器值。在方框404,将count_to_empty计数器值递增salloc指针与当前stos指针之间的差。如果在方框405处count_to_empty的值大于SRSB的最大大小,那么在方框406处count_to_empty的值被设置为SRSB的最大大小。
参考图5A至图5C,SRSB 450的一实施例可以包括被标记为零(0)至七(7)的最多八(8)个条目。count_to_empty计数器的值指示出SRSB 450的条目中当前有多少个是可用的。stos指针指示出SRSB 450的当前堆栈顶部位置。salloc指针指示出下一个SRSB分配位置。在SRSB 450的初始状态中,如图5A所示,count_to_empty=3,stos指向第三条目位置(条目2),并且salloc指向第六条目位置(条目5)。在一调用被插入在SRSB 450中之后,如图5B所示,count_to_empty=6,stos指向第六条目位置(条目5),并且salloc指向第七条目位置(条目6)。图5B示出了向图5A所示的SRSB中插入一个调用,但由于图5A中的stos和salloc指针的相对位置,该插入使得stos指针和count_to_empty计数器变化了三(3)。在另一个在SRSB 450中再插入一(1)个条目的调用之后,如图5C所示,count_to_empty=7,stos指向第七条目位置(条目6),并且salloc指向第八条目位置(条目7)。count_to_empty计数器值在等于SRSB大小的最大值处达到饱和,因为要达到空的条目永远不可能多于SRSB的总大小。
当从SRSB中消耗一个返回时,将count_to_empty计数器递减当前stos指针与从所使用的SRSB条目中取得的新stos指针之间的差。参考图6,方法500的一实施例可以在方框502处开始于从SRSB消耗的返回。当前stos指针的值在方框503处被保存为“prev_stos”,然后在方框504处更新stos指针。然后在方框505处将count_to_empty计数器值递减所保存的prev_stos与当前stos指针之间的差。如果在方框506处count_to_empty的值小于零,则在方框507处count_to_empty计数器的值被设置为零。
参考图7A至图7C,在SRSB 450的初始状态中,如图7A所示,count_to_empty=7,stos指向第七条目位置(条目6),并且salloc指向第八条目位置(条目7)。在从SRSB 450消耗一个条目的一个返回之后,如图7B所示,count_to_empty=6,stos指向第六条目位置(条目5),并且salloc指向第八条目位置(条目7)。在从SRSB 450消耗三(3)个条目的另一个返回之后,如图7C所示,count_to_empty=3,stos指向第三条目位置(条目2),并且salloc指向第八条目位置(条目7)。当count_to_empty计数器值达到零(0)时,已知SRSB被溢出,并且SRSB的预测不应当被使用。根据一些实施例,count_to_empty计数器值不会变成负值,而是在最小值零(0)时饱和。
SRSB的一实施例可以包括对误预测恢复的额外处理。count_to_empty计数器的当前值可以与所有其他误预测恢复信息一起被存储在采取分支信息队列(taken branchinformation queue,TBIQ)中。被称为“max_spec_salloc”的另一个指针(例如,最大推测性SRSB分配指针)保持跟踪写入的最远SRSB条目。当salloc指针的值等于max_spec_salloc指针的值,并且新的调用被写入到SRSB中时,这两个值都被递增。然而,与salloc指针不同的是,max_spec_salloc指针在误预测时不被恢复,而是将保持其相同值,直到salloc指针赶上max_spec_salloc为止。因此,max_spec_salloc指针可以跟踪自从count_to_empty计数器值被写入到TBIQ中时起被覆写了的任何SRSB条目。
参考图8A和图8B,在SRSB 600的初始状态中,如图8A所示(例如,类似于图7C所示的最后状态),max_spec_salloc指针持有SRSB 600的第八位置(条目7)的值。当分支误预测恢复到图8B的状态时,max_spec_alloc指针的值保持不变。在误预测恢复时,存储在TBIQ中的count_to_empty值被与SRSB 600的大小减去恢复的salloc与max_spec_salloc之间的差的值进行比较,并且这两个值中的较低者被取得。以这种方式,一些实施例有利地可以检测并且适当地引起在推测性路径上被覆写的任何SRSB条目中的溢出。
虽然SRSB 450和600只示出了八个条目,但本领域的技术人员将会明白,实施例适用于具有任何有用数目的条目的SRSB(例如,在一些实际应用中,128个条目或更多)。一些实施例可以允许用调用和返回的任何组合来准确地检测SRSB的溢出,从而提高返回预测的准确性和安全性。一些实施例可以通过对条目数目进行计数直到预测器为空为止,并且考虑在推测性路径上使用的条目来跟踪SRSB的状态。例如,一些实施例可以被配置为依靠返回预测器和分支推测的行为而与处理器管线和预测器结构的功能一起工作。一些实施例可能对防止或抑制边通道攻击尤其有用,在这种攻击中,攻击者可使得推测性代码执行产生可测量的副作用,从而导致敏感数据的泄漏。一些实施例去除了潜在的边通道漏洞,并且不会预测到存储在无效的SRSB条目中的地址。相反,当RSB已被溢出时,实施例可以预测到默认地址(例如,当RSB为空时,可以认为线性地址零(0)可安全地用作默认预测)。
其他一些硬件配置可以减少一些边通道攻击机会,但如果它们降低了硬件分支预测器和/或推测性执行的有效性,则可能有性能折衷。一些实施例可以防止其中来自不同操作模式的地址可以被再使用的边通道攻击,但不必无效或禁用返回预测器,从而创造了安全性益处,而没有性能折衷。
参考图9,无序(out-of-order,OOO)处理器核心700的一实施例包括存储器子系统711、分支预测单元(branch prediction unit,BPU)713、指令取得电路715、预解码电路717、指令队列718、解码器719、微操作缓存721、多路复用器723、指令解码队列(instruction decode queue,IDQ)725、分配/重命名电路727、无序核心731、预留站(reservation station,RS)733、重排序缓冲器(re-order buffer,ROB)735、以及加载/存储缓冲器737,它们如图所示那样连接。存储器子系统711包括第1级(L1)指令缓存(instruction cache,I缓存)、L1数据缓存(data cache,DCU)、L2缓存、L3缓存、指令转化后备缓冲器(instruction translation lookaside buffer,ITLB)、数据转化后备缓冲器(data translation lookaside buffer,DTLB)、共享转化后备缓冲器(sharedtranslation lookaside buffer,STLB)、以及页表,它们如图所示那样连接。OOO核心731包括预留站(RS)、Exe电路、以及地址生成电路,它们如图所示那样连接。BPU 713还包括count_to_empty计数器745、max_spec_salloc指针755、以及如本文所述的其他电路,以提高微架构返回预测器安全性。
例如,BPU 713可以包括RSB和SRSB。在预测时,BPU 713可以被配置为实时更新count_to_empty计数器745以跟踪SRSB中可用的条目的数目(例如,直到SRSB为空为止),并且依据count_to_empty计数器745的值,返回与RSB或SRSB中的任一者相对应的输出。例如,BPU 713可以被配置为,如果count_to_empty计数器745的值为零,则返回与RSB相对应的输出。BPU 713可以被配置为,响应于向SRSB中的插入,将count_to_empty计数器745的值递增salloc指针值与stos指针值之间的差,并且使count_to_empty计数器745的上限值饱和于SRSB的最大大小。BPU 713可以被配置为,响应于从SRSB消耗返回预测,将count_to_empty计数器745的值递减当前stos指针与新stos指针之间的差,并且使count_to_empty计数器745的下限值饱和于零(例如,防止负值)。
在一些实施例中,BPU 713可以进一步被配置为利用max_spec_salloc指针755来跟踪在SRSB 329中写入的最远点。当新的调用被写入到SRSB中时,如果salloc指针的值等于max_spec_salloc指针755的值,则BPU 713可以被配置为递增SRSB的salloc指针和max_spec_salloc指针755两者(例如,否则只有salloc指针被递增)。BPU 713也可以被配置为,响应于误预测恢复,基于max_spec_salloc指针755的值来更新count_to_empty计数器745的值。例如,BPU 713可以被配置为至少部分地基于max_spec_salloc指针755的值来确定SRSB中的被覆写条目的数目,并且响应于误预测恢复,基于被覆写条目的数目来更新count_to_empty计数器745的值。
BPU 713也可以被配置为将count_to_empty计数器745的当前值与所有其他误预测恢复信息一起存储在TBIQ中。在误预测恢复时,BPU 713可以被配置为将存储在TBIQ中的count_to_empty值与SRSB的大小减去恢复的salloc与max_spec_salloc之间的差的值进行比较,并且取这两个值中的较低者。
本领域的技术人员将会明白,各种各样的设备都可从上述实施例中受益。以下示例性核心架构、处理器和计算机架构是可以有益地纳入本文描述的技术的实施例的设备的非限制性示例。
示例性核心架构、处理器和计算机架构
可以按不同的方式、为了不同的目的、在不同的处理器中实现处理器核心。例如,这种核心的实现方式可包括:1)旨在用于通用计算的通用有序核心;2)旨在用于通用计算的高性能通用无序核心;3)主要旨在用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可包括:1)CPU,包括旨在用于通用计算的一个或多个通用有序核心和/或旨在用于通用计算的一个或多个通用无序核心;以及2)协处理器,包括主要旨在用于图形和/或科学(吞吐量)的一个或多个专用核心。这样的不同处理器导致不同的计算机系统架构,这些架构可包括:1)协处理器在与CPU分开的芯片上;2)协处理器在与CPU相同的封装件中、分开的管芯上;3)协处理器与CPU在同一管芯上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可在同一管芯上包括所描述的CPU(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)、上述的协处理器以及额外的功能。接下来描述示例性核心架构,然后是对示例性处理器和计算机架构的描述。
示例性核心架构
有序和无序核心框图
图10A是根据本发明的实施例图示出示例性有序管线和示例性寄存器重命名、无序发出/执行管线两者的框图。图10B是根据本发明的实施例图示出要被包括在处理器中的有序架构核心的示例性实施例和示例性寄存器重命名、无序发出/执行架构核心两者的框图。图10A-图10B中的实线框图示了有序管线和有序核心,而虚线框的可选添加图示了寄存器重命名、无序发出/执行管线和核心。考虑到有序方面是无序方面的子集,将描述无序方面。
在图10A中,处理器管线900包括取得阶段902、长度解码阶段904、解码阶段906、分配阶段908、重命名阶段910、调度(也称为调遣或发出)阶段912、寄存器读取/存储器读取阶段914、执行阶段916、写回/存储器写入阶段918、异常处理阶段922、以及提交阶段924。
图10B示出了处理器核心990包括与执行引擎单元950耦合的前端单元930,并且两者都耦合到存储器单元970。核心990可以是精简指令集计算(reduced instruction setcomputing,RISC)核心、复杂指令集计算(complex instruction set computing,CISC)核心、超长指令字(very long instruction word,VLIW)核心、或者混合或替换核心类型。作为另外一个选项,核心990可以是专用核心,例如,网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purpose computing graphics processing unit,GPGPU)核心、图形核心,等等。
前端单元930包括分支预测单元932,分支预测单元932耦合到指令缓存单元934,指令缓存单元934耦合到指令转化后备缓冲器(translation lookaside buffer,TLB)936,指令TLB 936耦合到指令取得单元938,指令取得单元938耦合到解码单元940。解码单元940(或解码器)可以对指令进行解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。可以利用各种不同的机制来实现解码单元940。适当机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(programmable logic array,PLA)、微代码只读存储器(readonly memory,ROM),等等。在一个实施例中,核心990包括微代码ROM或其他介质,其为某些宏指令存储微代码(例如,在解码单元940中或者以其他方式在前端单元930内)。解码单元940耦合到执行引擎单元950中的重命名/分配器单元952。
执行引擎单元950包括重命名/分配器单元952,重命名/分配器单元952耦合到引退单元954和一组一个或多个调度器单元956。(一个或多个)调度器单元956表示任何数目的不同调度器,包括预留站、中央指令窗口,等等。(一个或多个)调度器单元956耦合到(一个或多个)物理寄存器文件单元958。(一个或多个)物理寄存器文件单元958中的每一者表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一个指令的地址的指令指针),等等。在一个实施例中,(一个或多个)物理寄存器文件单元958包括向量寄存器单元、写入掩码寄存器单元、以及标量寄存器单元。这些寄存器单元可提供架构式向量寄存器、向量掩码寄存器、以及通用寄存器。(一个或多个)物理寄存器文件单元958与引退单元954重叠以说明可用来实现寄存器重命名和无序执行的各种方式(例如,利用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;利用(一个或多个)未来文件、(一个或多个)历史缓冲器、以及(一个或多个)引退寄存器文件;利用寄存器图谱和寄存器的池;等等)。引退单元954和(一个或多个)物理寄存器文件单元958耦合到(一个或多个)执行集群960。(一个或多个)执行集群960包括一组一个或多个执行单元962和一组一个或多个存储器访问单元964。执行单元962可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于特定功能或功能集合的若干个执行单元,但其他实施例可以只包括一个执行单元或者全部执行所有功能的多个执行单元。(一个或多个)调度器单元956、(一个或多个)物理寄存器文件单元958和(一个或多个)执行集群960被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管线、和/或存储器访问管线,它们各自具有其自己的调度器单元、(一个或多个)物理寄存器文件单元和/或执行集群—并且在单独的存储器访问管线的情况下,实现了某些实施例,其中只有此管线的执行集群具有(一个或多个)存储器访问单元964)。还应当理解,在使用分开管线的情况下,这些管线中的一个或多个可以是无序发出/执行的,并且其余的是有序的。
存储器访问单元964的集合耦合到存储器单元970,存储器单元970包括数据TLB单元972,数据TLB单元972耦合到数据缓存单元974,数据缓存单元974耦合到第2级(L2)缓存单元976。在一个示例性实施例中,存储器访问单元964可以包括加载单元、存储地址单元、以及存储数据单元,它们中的每一者耦合到存储器单元970中的数据TLB单元972。指令缓存单元934进一步耦合到存储器单元970中的第2级(L2)缓存单元976。L2缓存单元976耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。
作为示例,示例性寄存器重命名、无序发出/执行核心架构可以实现管线900如下:1)指令取得938执行取得和长度解码阶段902和904;2)解码单元940执行解码阶段906;3)重命名/分配器单元952执行分配阶段908和重命名阶段910;4)(一个或多个)调度器单元956执行调度阶段912;5)(一个或多个)物理寄存器文件单元958和存储器单元970执行寄存器读取/存储器读取阶段914;执行集群960执行执行阶段916;6)存储器单元970和(一个或多个)物理寄存器文件单元958执行写回/存储器写入阶段918;7)在异常处理阶段922中可涉及各种单元;并且8)引退单元954和(一个或多个)物理寄存器文件单元958执行提交阶段924。
核心990可以支持一个或多个指令集(例如,x86指令集(带有已随着较新版本添加的一些扩展);加州森尼维尔市的MIPS技术公司的MIPS指令集;加州森尼维尔市的ARM控股公司的ARM指令集(带有可选的额外扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核心990包括逻辑来支持紧缩数据指令集扩展(例如,AVX1、AVX2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。
应当理解,核心可以支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按各种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心针对该物理核心在同时进行多线程处理的每个线程提供逻辑核心),或者这些的组合(例如,时间切片式取得和解码,然后是同时多线程处理,例如像
Figure BDA0003631354570000191
超线程处理技术中那样)。
虽然是在无序执行的情境中描述寄存器重命名的,但应当理解,寄存器重命名可被用在有序架构中。虽然处理器的图示实施例还包括分开的指令和数据缓存单元934/974和共享的L2缓存单元976,但替换实施例可针对指令和数据两者具有单个内部缓存,例如,第1级(L1)内部缓存或者多级别的内部缓存。在一些实施例中,系统可以包括内部缓存与在核心和/或处理器外部的外部缓存的组合。或者,所有缓存可以在核心和/或处理器外部。
具体示例性有序核心架构
图11A-图11B图示出更具体的示例性有序核心架构的框图,该核心将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核心)之一。逻辑块通过高带宽互连网络(例如,环状网络)与某些固定功能逻辑、存储器I/O接口和其他必要I/O逻辑进行通信,这取决于应用。
图11A是根据本发明的实施例的单个处理器核心及其与管芯上互连网络1002以及与其第2级(L2)缓存的本地子集1004的连接的框图。在一个实施例中,指令解码器1000支持具有紧缩数据指令集扩展的x86指令集。L1缓存1006允许低延时访问以将存储器缓存到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元1008和向量单元1010使用分开的寄存器集合(分别是标量寄存器1012和向量寄存器1014)并且在它们之间传送的数据被写入到存储器,然后被从第1级(L1)缓存1006读回,但本发明的替换实施例可以使用不同的方案(例如,使用单个寄存器集合或者包括允许数据在两个寄存器文件之间传送而不被写入和读回的通信路径)。
L2缓存的本地子集1004是全局L2缓存的一部分,全局L2缓存被划分成单独的本地子集,每处理器核心有一个。每个处理器核心具有到其自己的L2缓存的本地子集1004的直接访问路径。处理器核心所读取的数据被存储在其L2缓存子集1004中并且可以被迅速访问,所述访问与其他处理器核心访问其自己的本地L2缓存子集并行进行。处理器核心所写入的数据被存储在其自己的L2缓存子集1004中并且在必要时被从其他子集冲刷出。环状网络确保了共享数据的一致性。环状网络是双向的,以允许诸如处理器核心、L2缓存和其他逻辑块之类的代理在芯片内与彼此通信。每个环状数据路径在每方向上是1012比特宽的。
图11B是根据本发明的实施例的图11A中的处理器核心的一部分的扩展视图。图11B包括L1缓存1006的L1数据缓存1006A部分,以及关于向量单元1010和向量寄存器1014的更多细节。具体而言,向量单元1010是16宽的向量处理单元(vector processing unit,VPU)(参见16宽的ALU 1028),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。VPU支持利用调配单元1020来调配寄存器输入,利用数值转换单元1022A-B进行数值转换,以及利用复制单元1024对存储器输入进行复制。写入掩码寄存器1026允许断言结果向量写入。
图12是根据本发明的实施例的处理器1100的框图,处理器1100可以具有多于一个核心,可以具有集成的存储器控制器,并且可以具有集成的图形。图12中的实线框图示了具有单个核心1102A、系统代理1110和一组一个或多个总线控制器单元1116的处理器1100,而虚线框的可选添加图示了具有多个核心1102A-N、系统代理单元1110中的一组一个或多个集成存储器控制器单元1114以及专用逻辑1108的替换处理器1100。
因此,处理器1100的不同实现方式可以包括:1)其中专用逻辑1108是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核心)并且核心1102A-N是一个或多个通用核心(例如,通用有序核心、通用无序核心或者两者的组合)的CPU;2)其中核心1102A-N是大量的主要旨在用于图形和/或科学(吞吐量)的专用核心的协处理器;以及3)其中核心1102A-N是大量的通用有序核心的协处理器。因此,处理器1100可以是通用处理器、协处理器或专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核(many integrated core,MIC)协处理器(包括30个或更多个核心)、嵌入式处理器,等等。处理器可被实现在一个或多个芯片上。处理器1100可以是一个或多个衬底的一部分和/或可利用若干个工艺技术中的任何一者被实现在一个或多个衬底上,这些技术例如是BiCMOS、CMOS或NMOS。
存储器层次体系包括核心1102A-N内的各个缓存1104A-N的一个或多个级别、一组或者一个或多个共享缓存单元1106、以及耦合到该组集成存储器控制器单元1114的外部存储器(未示出)。该组共享缓存单元1106可以包括一个或多个中间级别缓存(例如,第2级(L2)、第3级(L3)、第4级(L4)或者其他级别的缓存),最后一级缓存(last level cache,LLC),和/或这些的组合。虽然在一个实施例中基于环的互连单元1112互连集成图形逻辑1108、该组共享缓存单元1106以及系统代理单元1110/(一个或多个)集成存储器控制器单元1114,但替换实施例也可以使用任何数目的公知技术来互连这种单元。在一个实施例中,在一个或多个缓存单元1106和核心1102A-N之间维持一致性。
在一些实施例中,核心1102A-N中的一个或多个能够进行多线程处理。系统代理1110包括协调和操作核心1102A-N的那些组件。系统代理单元1110可以包括例如功率控制单元(power control unit,PCU)和显示单元。PCU可以是或者可以包括对核心1102A-N和集成图形逻辑1108的功率状态进行调节所需要的逻辑和组件。显示单元用于驱动一个或多个在外部连接的显示器。
核心1102A-N就架构指令集而言可以是同构的或者异构的;也就是说,核心1102A-N中的两个或更多个可能能够执行同一指令集,而其他的核心可能能够只执行该指令集的子集或者不同的指令集。
示例性计算机架构
图13-图16是示例性计算机架构的框图。本领域中已知的用于膝上型电脑、桌面型电脑、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(digital signal processor,DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、以及各种其他电子设备的其他系统设计和配置,也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般是适当的。
现在参考图13,示出了根据本发明的一个实施例的系统1200的框图。系统1200可以包括一个或多个处理器1210、1215,它们耦合到控制器中枢1220。在一个实施例中,控制器中枢1220包括图形存储器控制器中枢(graphics memory controller hub,GMCH)1290和输入/输出中枢(Input/Output Hub,IOH)1250(它们可以在分开的芯片上);GMCH 1290包括与存储器1240和协处理器1245耦合的存储器和图形控制器;IOH 1250将输入/输出(I/O)设备1260耦合到GMCH 1290。或者,存储器和图形控制器中的一者或两者被集成在处理器内(如本文所述),存储器1240和协处理器1245直接耦合到处理器1210,并且控制器中枢1220与IOH 1250在单个芯片中。
额外的处理器1215的可选特性在图13中用虚线表示。每个处理器1210、1215可以包括本文描述的处理核心中的一个或多个,并且可以是处理器1100的某个版本。
存储器1240可以例如是动态随机存取存储器(dynamic random access memory,DRAM)、相变存储器(phase change memory,PCM)、或者两者的组合。对于至少一个实施例,控制器中枢1220经由多点分支总线(例如,前端总线(frontside bus,FSB))、点到点接口(例如,快速路径互连(QuickPath Interconnect,QPI))或者类似的连接1295与(一个或多个)处理器1210、1215进行通信。
在一个实施例中,协处理器1245是专用处理器,例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个实施例中,控制器中枢1220可以包括集成的图形加速器。
在物理资源1210、1215之间,就包括架构特性、微架构特性、热特性、功率消耗特性等等在内的价值度量的范围而言,可以有各种差异。
在一个实施例中,处理器1210执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器1210将这些协处理器指令识别为应当由附接的协处理器1245执行的类型。因此,处理器1210在协处理器总线或其他互连上向协处理器1245发出这些协处理器指令(或者表示协处理器指令的控制信号)。(一个或多个)协处理器1245接受并且执行接收到的协处理器指令。
现在参考图14,其中示出了根据本发明的实施例的第一更具体示例性系统1300的框图。如图14中所示,多处理器系统1300是点到点互连系统,并且包括经由点到点互连1350耦合的第一处理器1370和第二处理器1380。处理器1370和1380中的每一者可以是处理器1100的某个版本。在本发明的一个实施例中,处理器1370和1380分别是处理器1210和1215,而协处理器1338是协处理器1245。在另一实施例中,处理器1370和1380分别是处理器1210和协处理器1245。
处理器1370和1380被示为分别包括集成存储器控制器(integrated memorycontroller,IMC)单元1372和1382。处理器1370还包括点到点(P-P)接口1376和1378作为其总线控制器单元的一部分;类似地,第二处理器1380包括P-P接口1386和1388。处理器1370、1380可以利用点到点(P-P)接口电路1378、1388经由P-P接口1350来交换信息。如图14中所示,IMC 1372和1382将处理器耦合到相应存储器,即存储器1332和存储器1334,存储器1332和存储器1334可以是在本地附接到相应处理器的主存储器的一部分。
处理器1370、1380可以各自利用点到点接口电路1376、1394、1386、1398经由个体P-P接口1352、1354与芯片组1390交换信息。芯片组1390可以可选地经由高性能接口1339和互连1392与协处理器1338交换信息。在一个实施例中,协处理器1338是专用处理器,例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享缓存(未示出)可以被包括在任一处理器中,或者在两个处理器之外,但经由P-P互连与处理器连接,从而使得任一个或两个处理器的本地缓存信息在处理器被置于低功率模式中的情况下可以被存储在该共享缓存中。
芯片组1390可以经由接口1396耦合到第一总线1316。在一个实施例中,第一总线1316可以是外围组件互连(Peripheral Component Interconnect,PCI)总线,或者诸如快速PCI总线或另一种第三代I/O互连总线之类的总线,但是本发明的范围不限于此。
如图14所示,各种I/O设备1314可以耦合到第一总线1316,以及将第一总线1316耦合到第二总线1320的总线桥1318。在一个实施例中,一个或多个额外的处理器1315,例如协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列、或者任何其他处理器,耦合到第一总线1316。在一个实施例中,第二总线1320可以是低引脚数(low pin count,LPC)总线。各种设备可以耦合到第二总线1320,包括例如键盘和/或鼠标1322、通信设备1327和存储单元1328,例如盘驱动器或者其他大容量存储设备,其中该存储单元1328在一个实施例中可以包括指令/代码和数据1330。另外,音频I/O 1324可以耦合到第二总线1320。注意,其他架构是可能的。例如,取代图14的点到点架构,系统可以实现多点分支总线或者其他这种架构。
现在参考图15,其中示出了根据本发明的实施例的第二更具体示例性系统1400的框图。图14和图15中的相似元素带有相似的标号,并且图14的某些方面被从图15中省略以避免模糊图15的其他方面。
图15图示出处理器1370、1380可以分别包括集成存储器和I/O控制逻辑(“CL”)1472和1482。因此,CL 1472、1482包括集成存储器控制器单元并且包括I/O控制逻辑。图15图示出不仅存储器1332、1334耦合到CL 1472、1482,而且I/O设备1414也耦合到控制逻辑1472、1482。传统I/O设备1415耦合到芯片组1390。
现在参考图16,其中示出了根据本发明的实施例的SoC 1500的框图。图12中的相似元素带有相似的标号。另外,虚线框是更先进SoC上的可选特征。在图16中,(一个或多个)互连单元1502耦合到:应用处理器1510,其包括一组一个或多个核心1102A-N和(一个或多个)共享缓存单元1106;系统代理单元1110;(一个或多个)总线控制器单元1116;(一个或多个)集成存储器控制器单元1114;一组或一个或多个协处理器1520,其可以包括集成图形逻辑、图像处理器、音频处理器、以及视频处理器;静态随机存取存储器(static randomaccess memory,SRAM)单元1530;直接存储器访问(direct memory access,DMA)单元1532;以及显示单元1540,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器1520包括专用处理器,例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器,等等。
可以用硬件、软件、固件或者这种实现方案的组合来实现本文公开的机制的实施例。本发明的实施例可以被实现为在包括以下项的可编程系统上执行的计算机程序或程序代码:至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。
程序代码,例如图14中所示的代码1330,可以被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可以按已知的方式被应用到一个或多个输出设备。对于本申请而言,处理系统包括任何具有处理器的系统,例如:数字信号处理器(digitalsignal processor,DSP)、微控制器、专用集成电路(application specific integratedcircuit,ASIC)、或者微处理器。
可以用高级别过程式或面向对象的编程语言来实现程序代码以与处理系统进行通信。如果希望,也可以用汇编或机器语言来实现程序代码。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是经编译或者经解译的语言。
至少一个实施例的一个或多个方面可以由被存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令来实现,这些指令当被机器读取时,使得该机器制作逻辑来执行本文描述的技术。这种被称为“IP核心”的表现形式可以被存储在有形机器可读介质上并且被提供到各种客户或制造设施以加载到实际制作该逻辑或处理器的制作机器中。
这种机器可读存储介质可以包括但不限于由机器或设备制造或形成的物品的非暂态有形布置,包括诸如以下项之类的存储介质:硬盘,任何其他类型的盘(包括软盘、光盘、致密盘只读存储器(compact disk read-only memory,CD-ROM)、可改写致密盘(compact disk rewritable,CD-RW)、以及磁光盘),半导体设备(诸如,只读存储器(read-only memory,ROM),诸如动态随机存取存储器(dynamic random access memory,DRAM)、静态随机存取存储器(static random access memory,SRAM)之类的随机存取存储器(randomaccess memory,RAM),可擦除可编程只读存储器(erasable programmable read-onlymemory,EPROM),闪速存储器,电可擦除可编程只读存储器(electrically erasableprogrammable read-only memory,EEPROM),相变存储器(phase change memory,PCM)),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括非暂态有形机器可读介质,其包含指令或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计数据,例如硬件描述语言(Hardware Description Language,HDL)。这种实施例也可以被称为程序产品。
仿真(包括二进制转化、代码变形,等等)
在一些情况下,指令转换器可以被用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令转化(例如,利用静态二进制转化、包括动态编译的动态二进制转化)、变形、仿真或者以其他方式转换到要被核心处理的一个或多个其他指令。可以用软件、硬件、固件或者其组合来实现指令转换器。指令转换器可以在处理器上、在处理器外、或者一部分在处理器上一部分在处理器外。
图17是根据本发明的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。在图示的实施例中,指令转换器是软件指令转换器,但是可替换地,可以用软件、固件、硬件或者其各种组合来实现指令转换器。图17示出了高级别语言1602的程序可被利用x86编译器1604来编译以生成x86二进制代码1606,x86二进制代码1606可以由具有至少一个x86指令集核心的处理器1616本地执行。具有至少一个x86指令集核心的处理器1616表示任何这样的处理器:这种处理器可通过兼容地执行或以其他方式处理(1)英特尔x86指令集核心的指令集的实质部分或者(2)目标为在具有至少一个x86指令集核心的英特尔处理器上运行的应用或其他软件的目标代码版本,来执行与具有至少一个x86指令集核心的英特尔处理器基本上相同的功能,以便实现与具有至少一个x86指令集核心的英特尔处理器基本上相同的结果。x86编译器1604表示可操作来生成x86二进制代码1606(例如,目标代码)的编译器,x86二进制代码1606在带有或不带有额外的链接处理的情况下可在具有至少一个x86指令集核心的处理器1616上被执行。类似地,图17示出了高级别语言的程序1602可被利用替换指令集编译器1608来编译以生成替换指令集二进制代码1610,替换指令集二进制代码1610可由没有至少一个x86指令集核心的处理器1614(例如,具有执行加州森尼维尔市的MIPS技术公司的MIPS指令集和/或执行加州森尼维尔市的ARM控股公司的ARM指令集的核心的处理器)本地执行。指令转换器1612用于将x86二进制代码1606转换成可由没有x86指令集核心的处理器1614本地执行的代码。这个转换后的代码不太可能与替换指令集二进制代码1610相同,因为能够做到这一点的指令转换器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替换指令集的指令构成。因此,指令转换器1612表示通过仿真、模拟或任何其他过程允许不具有x86指令集处理器或核心的处理器或其他电子设备执行x86二进制代码1606的软件、固件、硬件或者其组合。
本文描述了用于ISA操作码参数化的技术和架构。在以上描述中,出于说明目的,记载了许多具体细节,以便提供对某些实施例的透彻理解。然而,本领域技术人员将会清楚,没有这些具体细节也可实现某些实施例。在其他情况中,以框图形式示出了结构和设备以避免模糊描述。
附加注释和示例
示例1包括一种集成电路,包括返回堆栈缓冲器(RSB),推测性返回堆栈缓冲器(SRSB),以及与所述RSB和所述SRSB耦合的电路,所述电路用于在分支预测单元进行预测时跟踪直到所述SRSB为空为止的计数,并且至少部分地基于直到所述SRSB为空为止的计数来从所述分支预测单元返回与所述RSB和所述SRSB之一相对应的输出。
示例2包括如示例1所述的集成电路,其中,所述电路还用于:在直到所述SRSB为空为止的计数为零的情况下从所述分支预测单元返回与所述RSB相对应的输出。
示例3包括如示例1至2中任一项所述的集成电路,其中,所述电路还用于:响应于向所述SRSB中的插入,将直到所述SRSB为空为止的计数递增第一指针值与第二指针值之间的差,其中,所述第一指针值对应于所述SRSB的堆栈的顶部位置,并且其中,所述第二指针值对应于到所述SRSB中的下一个条目的分配位置。
示例4包括如示例3所述的集成电路,其中,所述电路还用于:将递增的计数限制到上限值,所述上限值为所述SRSB中的条目的最大数目。
示例5包括如示例1至4中任一项所述的集成电路,其中,所述电路还用于:响应于从所述SRSB消耗预测,将直到所述SRSB为空为止的计数递减第一指针值与第二指针值之间的差,其中,所述第一指针值对应于所述SRSB的堆栈的当前顶部位置,并且所述第二指针值对应于在从所述SRSB消耗所述预测之后所述SRSB的堆栈的新顶部位置。
示例6包括如示例5所述的集成电路,其中,所述电路还用于将递减的计数限制到下限值零。
示例7包括如示例1至6中任一项所述的集成电路,其中,所述电路还用于存储最大指针值以跟踪在所述SRSB中写入的最远点。
示例8包括如示例7所述的集成电路,其中,所述电路还用于响应于误预测恢复,基于所述最大指针值来更新直到所述SRSB为空为止的计数。
示例9包括如示例8所述的集成电路,其中,所述电路还用于:至少部分地基于所述最大指针值来确定所述SRSB中的被覆写条目的数目,并且响应于所述误预测恢复,基于所述被覆写条目的数目来更新直到所述SRSB为空为止的计数。
示例10包括一种方法,包括:在分支预测单元进行预测时跟踪直到推测性返回堆栈缓冲器(SRSB)为空为止的计数,并且至少部分地基于直到所述SRSB为空为止的计数来从所述分支预测单元返回与返回堆栈缓冲器(RSB)和所述SRSB之一相对应的输出。
示例11包括如示例10所述的方法,还包括:如果直到所述SRSB为空为止的计数为零,则从所述分支预测单元返回与所述RSB相对应的输出。
示例12包括如示例10至11中任一项所述的方法,还包括:响应于向所述SRSB中的插入,将直到所述SRSB为空为止的计数递增第一指针值与第二指针值之间的差,其中,所述第一指针值对应于所述SRSB的堆栈的顶部位置,并且其中,所述第二指针值对应于到所述SRSB中的下一个条目的分配位置。
示例13包括如示例12所述的方法,还包括:将递增的计数限制到上限值,所述上限值为所述SRSB中的条目的最大数目。
示例14包括如示例10至13中任一项所述的方法,还包括:响应于从所述SRSB消耗预测,将直到所述SRSB为空为止的计数递减第一指针值与第二指针值之间的差,其中,所述第一指针值对应于所述SRSB的堆栈的当前顶部位置,并且所述第二指针值对应于在从所述SRSB消耗所述预测之后所述SRSB的堆栈的新顶部位置。
示例15包括如示例14所述的方法,还包括:将递减的计数限制到下限值零。
示例16包括如示例10至15中任一项所述的方法,还包括:存储最大指针值以跟踪在所述SRSB中写入的最远点。
示例17包括如示例16所述的方法,还包括:响应于误预测恢复,基于所述最大指针值来更新直到所述SRSB为空为止的计数。
示例18包括如示例17所述的方法,还包括:至少部分地基于所述最大指针值来确定所述SRSB中的被覆写条目的数目,并且响应于所述误预测恢复,基于所述被覆写条目的数目来更新直到所述SRSB为空为止的计数。
示例19包括一种装置,包括:后端单元,用于执行一个或多个解码的指令,以及与所述后端单元通信地耦合的前端单元,用于对一个或多个指令进行解码,所述前端单元包括分支预测单元,其中,所述分支预测单元包括返回堆栈缓冲器(RSB)、推测性返回堆栈缓冲器(SRSB)、以及与所述RSB和所述SRSB耦合的电路,所述电路用于在分支预测单元进行预测时跟踪直到所述SRSB为空为止的计数,并且至少部分地基于直到所述SRSB为空为止的计数来从所述分支预测单元返回与所述RSB和所述SRSB之一相对应的输出。
示例20包括如示例19所述的装置,其中,所述电路还用于在直到所述SRSB为空为止的计数为零的情况下从所述分支预测单元返回与所述RSB相对应的输出。
示例21包括如示例19至20中任一项所述的装置,其中,所述电路还用于响应于向所述SRSB中的插入,将直到所述SRSB为空为止的计数递增第一指针值与第二指针值之间的差,其中,所述第一指针值对应于所述SRSB的堆栈的顶部位置,并且其中,所述第二指针值对应于到所述SRSB中的下一个条目的分配位置。
示例22包括如示例21所述的装置,其中,所述电路还用于将递增的计数限制到上限值,所述上限值为所述SRSB中的条目的最大数目。
示例23包括如示例19至22中任一项所述的装置,其中,所述电路还用于响应于从所述SRSB消耗预测,将直到所述SRSB为空为止的计数递减第一指针值与第二指针值之间的差,其中,所述第一指针值对应于所述SRSB的堆栈的当前顶部位置,并且所述第二指针值对应于在从所述SRSB消耗所述预测之后所述SRSB的堆栈的新顶部位置。
示例24包括如示例23所述的装置,其中,所述电路还用于将递减的计数限制到下限值零。
示例25包括如示例19至24中任一项所述的装置,其中,所述电路还用于存储最大指针值以跟踪在所述SRSB中写入的最远点。
示例26包括如示例25所述的装置,其中,所述电路还用于:响应于误预测恢复,基于所述最大指针值来更新直到所述SRSB为空为止的计数。
示例27包括如示例26所述的装置,其中,所述电路还用于:至少部分地基于所述最大指针值来确定所述SRSB中的被覆写条目的数目,并且响应于所述误预测恢复,基于所述被覆写条目的数目来更新直到所述SRSB为空为止的计数。
示例28包括一种装置,包括:用于在分支预测单元进行预测时跟踪直到推测性返回堆栈缓冲器(SRSB)为空为止的计数的设备,以及用于至少部分地基于直到所述SRSB为空为止的计数来从所述分支预测单元返回与返回堆栈缓冲器(RSB)和所述SRSB之一相对应的输出的设备。
示例29包括如示例28所述的装置,还包括:用于在直到所述SRSB为空为止的计数为零的情况下从所述分支预测单元返回与所述RSB相对应的输出的设备。
示例30包括如示例28至29中任一项所述的装置,还包括:用于响应于向所述SRSB中的插入将直到所述SRSB为空为止的计数递增第一指针值与第二指针值之间的差的设备,其中,所述第一指针值对应于所述SRSB的堆栈的顶部位置,并且其中,所述第二指针值对应于到所述SRSB中的下一个条目的分配位置。
示例31包括如示例30所述的装置,还包括:用于将递增的计数限制到上限值的设备,所述上限值为所述SRSB中的条目的最大数目。
示例32包括如示例28至31中任一项所述的装置,还包括:用于响应于从所述SRSB消耗预测将直到所述SRSB为空为止的计数递减第一指针值与第二指针值之间的差的设备,其中,所述第一指针值对应于所述SRSB的堆栈的当前顶部位置,并且所述第二指针值对应于在从所述SRSB消耗所述预测之后所述SRSB的堆栈的新顶部位置。
示例33包括如示例32所述的装置,还包括用于将递减的计数限制到下限值零的设备。
示例34包括如示例28至33中任一项所述的装置,还包括:用于存储最大指针值以跟踪在所述SRSB中写入的最远点的设备。
示例35包括如示例34所述的装置,还包括:用于响应于误预测恢复而基于所述最大指针值来更新直到所述SRSB为空为止的计数的设备。
示例36包括如示例35所述的装置,还包括:用于至少部分地基于所述最大指针值来确定所述SRSB中的被覆写条目的数目的设备,以及用于响应于所述误预测恢复而基于所述被覆写条目的数目来更新直到所述SRSB为空为止的计数的设备。
示例37包括至少一种非暂态机器可读介质,其包括多个指令,所述指令响应于在计算设备上被执行,使得所述计算设备执行以下操作:在分支预测单元进行预测时跟踪直到推测性返回堆栈缓冲器(SRSB)为空为止的计数,并且至少部分地基于直到所述SRSB为空为止的计数来从所述分支预测单元返回与返回堆栈缓冲器(RSB)和所述SRSB之一相对应的输出。
示例38包括如示例37所述的至少一种非暂态机器可读介质,包括多个另外指令,所述另外指令响应于在所述计算设备上被执行,使得所述计算设备执行以下操作:在直到所述SRSB为空为止的计数为零的情况下从所述分支预测单元返回与所述RSB相对应的输出。
示例39包括如示例37至38中任一项所述的至少一种非暂态机器可读介质,包括多个另外指令,所述另外指令响应于在所述计算设备上被执行,使得所述计算设备执行以下操作:响应于向所述SRSB中的插入,将直到所述SRSB为空为止的计数递增第一指针值与第二指针值之间的差,其中,所述第一指针值对应于所述SRSB的堆栈的顶部位置,并且其中,所述第二指针值对应于到所述SRSB中的下一个条目的分配位置。
示例40包括如示例39所述的至少一种非暂态机器可读介质,包括多个另外指令,所述另外指令响应于在所述计算设备上被执行,使得所述计算设备执行以下操作:将递增的计数限制到上限值,所述上限值为所述SRSB中的条目的最大数目。
示例41包括如示例37至40中任一项所述的至少一种非暂态机器可读介质,包括多个另外指令,所述另外指令响应于在所述计算设备上被执行,使得所述计算设备执行以下操作:响应于从所述SRSB消耗预测,将直到所述SRSB为空为止的计数递减第一指针值与第二指针值之间的差,其中,所述第一指针值对应于所述SRSB的堆栈的当前顶部位置,并且所述第二指针值对应于在从所述SRSB消耗所述预测之后所述SRSB的堆栈的新顶部位置。
示例42包括如示例41所述的至少一种非暂态机器可读介质,包括多个另外指令,所述另外指令响应于在所述计算设备上被执行,使得所述计算设备将递减的计数限制到下限值零。
示例43包括如示例37至42中任一项所述的至少一种非暂态机器可读介质,包括多个另外指令,所述另外指令响应于在所述计算设备上被执行,使得所述计算设备存储最大指针值以跟踪在所述SRSB中写入的最远点。
示例44包括如示例43所述的至少一种非暂态机器可读介质,包括多个另外指令,所述另外指令响应于在所述计算设备上被执行,使得所述计算设备执行以下操作:响应于误预测恢复,基于所述最大指针值来更新直到所述SRSB为空为止的计数。
示例45包括如示例44所述的至少一种非暂态机器可读介质,包括多个另外指令,所述另外指令响应于在所述计算设备上被执行,使得所述计算设备执行以下操作:至少部分地基于所述最大指针值来确定所述SRSB中的被覆写条目的数目,并且响应于所述误预测恢复,基于所述被覆写条目的数目来更新直到所述SRSB为空为止的计数。
本说明书中提及“一个实施例”或“一实施例”的意思是结合该实施例描述的特定特征、结构或特性被包括在本发明的至少一个实施例中。在本说明书中各种地方出现短语“在一个实施例中”不一定都指的是同一实施例。
本文的详细描述的一些部分是按照对计算机存储器内的数据比特的操作的算法和符号表示来呈现的。这些算法描述和表示是被计算领域的技术人员用来最有效地将其工作的实质传达给本领域的其他技术人员的手段。算法在这里并且一般而言被设想为是通向期望结果的步骤的自洽序列。这些步骤是要求对物理量进行物理操纵的那些步骤。通常(但并非一定),这些量采取能够被存储、传送、组合、比较和以其他方式操纵的电信号或磁信号的形式。已证明有时,主要是出于习惯用法的原因,将这些信号称为比特、值、元素、符号、字符、项、数字等等,是方便的。
然而,应当记住,所有这些和类似的术语都将与适当的物理量相关联,并且只是应用到这些量的方便标签。除非从本文的论述清楚看出另有具体声明,否则要明白在整个说明书各处,利用诸如“处理”或“计算”或“运算”或“确定”或“显示”之类的术语的论述指的是计算机系统或类似的电子计算设备的动作和过程,这些动作和过程将计算机系统的寄存器和存储器内的被表示为物理(电子)量的数据操纵和变换成计算机系统的存储器或寄存器或其他这种信息存储、传输或显示设备内的被类似地表示为物理量的其他数据。
某些实施例还涉及用于执行本文的操作的装置。这个装置可以是为要求的目的而专门构造的,或者其可以包括由存储在计算机中的计算机程序选择性地激活或重配置的通用计算机。这种计算机程序可以被存储在计算机可读存储介质中,例如但不限于任何类型的盘(包括软盘、光盘、CD-ROM和磁光盘)、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)(例如动态RAM(dynamic RAM,DRAM))、EPROM、EEPROM、磁卡或光卡、或者适合用于存储电子指令并且耦合到计算机系统总线的任何类型的介质。
本文给出的算法和显示并不内在地与任何特定的计算机或其他装置相关。各种通用系统可以与根据本文的教导的程序一起使用,或者可证明,构造更专门的装置来执行所要求的方法步骤,是方便的。各种这些系统的必需结构将从本文的描述中显现。此外,某些实施例不是参考任何特定的编程语言来描述的。将会明白,可以使用各种编程语言来实现如本文所述的这种实施例的教导。
除了本文描述的以外,还可以对所公开的实施例及其实现方式做出各种修改,而不脱离其范围。因此,应当从说明意义而不是限制意义上来解释本文的说明和示例。应当仅通过参考所附权利要求来衡量本发明的范围。

Claims (25)

1.一种集成电路,包括:
返回堆栈缓冲器(RSB);
推测性返回堆栈缓冲器(SRSB);以及
与所述RSB和所述SRSB耦合的电路,所述电路用于:
在分支预测单元进行预测时跟踪直到所述SRSB为空为止的计数,以及
至少部分地基于直到所述SRSB为空为止的计数来从所述分支预测单元返回与所述RSB和所述SRSB之一相对应的输出。
2.如权利要求1所述的集成电路,其中,所述电路还用于:
如果直到所述SRSB为空为止的计数为零,则从所述分支预测单元返回与所述RSB相对应的输出。
3.如权利要求1所述的集成电路,其中,所述电路还用于:
响应于向所述SRSB中的插入,将直到所述SRSB为空为止的计数递增第一指针值与第二指针值之间的差,其中,所述第一指针值对应于所述SRSB的堆栈的顶部位置,并且其中,所述第二指针值对应于到所述SRSB中的下一个条目的分配位置。
4.如权利要求3所述的集成电路,其中,所述电路还用于:
将递增的计数限制到上限值,所述上限值为所述SRSB中的条目的最大数目。
5.如权利要求1至4中任一项所述的集成电路,其中,所述电路还用于:
响应于从所述SRSB消耗预测,将直到所述SRSB为空为止的计数递减第一指针值与第二指针值之间的差,其中,所述第一指针值对应于所述SRSB的堆栈的当前顶部位置,并且所述第二指针值对应于在从所述SRSB消耗所述预测之后所述SRSB的堆栈的新顶部位置。
6.如权利要求5所述的集成电路,其中,所述电路还用于:
将递减的计数限制到下限值零。
7.如权利要求1至4中任一项所述的集成电路,其中,所述电路还用于:
存储最大指针值以跟踪在所述SRSB中写入的最远点。
8.如权利要求7所述的集成电路,其中,所述电路还用于:
响应于误预测恢复,基于所述最大指针值来更新直到所述SRSB为空为止的计数。
9.如权利要求8所述的集成电路,其中,所述电路还用于:
至少部分地基于所述最大指针值来确定所述SRSB中的被覆写条目的数目;以及
响应于所述误预测恢复,基于所述被覆写条目的数目来更新直到所述SRSB为空为止的计数。
10.一种方法,包括:
在分支预测单元进行预测时跟踪直到推测性返回堆栈缓冲器(SRSB)为空为止的计数;以及
至少部分地基于直到所述SRSB为空为止的计数来从所述分支预测单元返回与返回堆栈缓冲器(RSB)和所述SRSB之一相对应的输出。
11.如权利要求10所述的方法,还包括:
如果直到所述SRSB为空为止的计数为零,则从所述分支预测单元返回与所述RSB相对应的输出。
12.如权利要求10所述的方法,还包括:
响应于向所述SRSB中的插入,将直到所述SRSB为空为止的计数递增第一指针值与第二指针值之间的差,其中,所述第一指针值对应于所述SRSB的堆栈的顶部位置,并且其中,所述第二指针值对应于到所述SRSB中的下一个条目的分配位置。
13.如权利要求12所述的方法,还包括:
将递增的计数限制到上限值,所述上限值为所述SRSB中的条目的最大数目。
14.如权利要求10至13中任一项所述的方法,还包括:
响应于从所述SRSB消耗预测,将直到所述SRSB为空为止的计数递减第一指针值与第二指针值之间的差,其中,所述第一指针值对应于所述SRSB的堆栈的当前顶部位置,并且所述第二指针值对应于在从所述SRSB消耗所述预测之后所述SRSB的堆栈的新顶部位置。
15.如权利要求14所述的方法,还包括:
将递减的计数限制到下限值零。
16.如权利要求10至13中任一项所述的方法,还包括:
存储最大指针值以跟踪在所述SRSB中写入的最远点。
17.如权利要求16所述的方法,还包括:
响应于误预测恢复,基于所述最大指针值来更新直到所述SRSB为空为止的计数。
18.如权利要求17所述的方法,还包括:
至少部分地基于所述最大指针值来确定所述SRSB中的被覆写条目的数目;以及
响应于所述误预测恢复,基于所述被覆写条目的数目来更新直到所述SRSB为空为止的计数。
19.一种装置,包括:
后端单元,用于执行一个或多个解码的指令;以及
与所述后端单元通信地耦合的前端单元,用于对一个或多个指令进行解码,所述前端单元包括分支预测单元,其中,所述分支预测单元包括返回堆栈缓冲器(RSB)、推测性返回堆栈缓冲器(SRSB)、以及与所述RSB和所述SRSB耦合的电路,所述电路用于:
在分支预测单元进行预测时跟踪直到所述SRSB为空为止的计数,以及
至少部分地基于直到所述SRSB为空为止的计数来从所述分支预测单元返回与所述RSB和所述SRSB之一相对应的输出。
20.如权利要求19所述的装置,其中,所述电路还用于:
如果直到所述SRSB为空为止的计数为零,则从所述分支预测单元返回与所述RSB相对应的输出。
21.如权利要求19至20中任一项所述的装置,其中,所述电路还用于:
响应于向所述SRSB中的插入,将直到所述SRSB为空为止的计数递增第一指针值与第二指针值之间的差,其中,所述第一指针值对应于所述SRSB的堆栈的顶部位置,并且其中,所述第二指针值对应于到所述SRSB中的下一个条目的分配位置。
22.如权利要求21所述的装置,其中,所述电路还用于:
将递增的计数限制到上限值,所述上限值为所述SRSB中的条目的最大数目。
23.如权利要求19至20中任一项所述的装置,其中,所述电路还用于:
响应于从所述SRSB消耗预测,将直到所述SRSB为空为止的计数递减第一指针值与第二指针值之间的差,其中,所述第一指针值对应于所述SRSB的堆栈的当前顶部位置,并且所述第二指针值对应于在从所述SRSB消耗所述预测之后所述SRSB的堆栈的新顶部位置。
24.如权利要求23所述的装置,其中,所述电路还用于:
将递减的计数限制到下限值零。
25.如权利要求19至20中任一项所述的装置,其中,所述电路还用于:
存储最大指针值以跟踪在所述SRSB中写入的最远点。
CN202210490169.4A 2021-06-21 2022-05-07 用于微架构返回预测器安全性的计数到空 Pending CN115576607A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/352,671 US20220405102A1 (en) 2021-06-21 2021-06-21 Count to empty for microarchitectural return predictor security
US17/352,671 2021-06-21

Publications (1)

Publication Number Publication Date
CN115576607A true CN115576607A (zh) 2023-01-06

Family

ID=80623998

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210490169.4A Pending CN115576607A (zh) 2021-06-21 2022-05-07 用于微架构返回预测器安全性的计数到空

Country Status (3)

Country Link
US (1) US20220405102A1 (zh)
EP (1) EP4109249A1 (zh)
CN (1) CN115576607A (zh)

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6560696B1 (en) * 1999-12-29 2003-05-06 Intel Corporation Return register stack target predictor
US6886093B2 (en) * 2001-05-04 2005-04-26 Ip-First, Llc Speculative hybrid branch direction predictor
US6898699B2 (en) * 2001-12-21 2005-05-24 Intel Corporation Return address stack including speculative return address buffer with back pointers
US7178010B2 (en) * 2003-01-16 2007-02-13 Ip-First, Llc Method and apparatus for correcting an internal call/return stack in a microprocessor that detects from multiple pipeline stages incorrect speculative update of the call/return stack
JP4286768B2 (ja) * 2004-11-30 2009-07-01 富士通株式会社 分岐予測装置およびその制御方法
US20070061555A1 (en) * 2005-09-15 2007-03-15 St Clair Michael Call return tracking technique
JP2008299795A (ja) * 2007-06-04 2008-12-11 Nec Electronics Corp 分岐予測制御装置及びその方法
EP2662767A1 (en) * 2011-01-07 2013-11-13 Fujitsu Limited Computation processing device and branch prediction method
US9361112B2 (en) * 2013-04-18 2016-06-07 Arm Limited Return address prediction
US9442729B2 (en) * 2013-05-09 2016-09-13 Intel Corporation Minimizing bandwidth to track return targets by an instruction tracing system
CN106406814B (zh) * 2016-09-30 2019-06-14 上海兆芯集成电路有限公司 处理器和将架构指令转译成微指令的方法

Also Published As

Publication number Publication date
EP4109249A1 (en) 2022-12-28
US20220405102A1 (en) 2022-12-22

Similar Documents

Publication Publication Date Title
CN111611096A (zh) 受限推测性执行
US9367314B2 (en) Converting conditional short forward branches to computationally equivalent predicated instructions
US20160283247A1 (en) Apparatuses and methods to selectively execute a commit instruction
US20180004522A1 (en) Apparatuses, methods, and systems for memory disambiguation
US20140189330A1 (en) Optional branches
CN116302106A (zh) 用于促进分支预测单元的改善的带宽的设备、方法和系统
US10579378B2 (en) Instructions for manipulating a multi-bit predicate register for predicating instruction sequences
EP4020191A1 (en) Alternate path decode for hard-to-predict branch
US20240118898A1 (en) Selective use of branch prediction hints
US10877765B2 (en) Apparatuses and methods to assign a logical thread to a physical thread
US11907712B2 (en) Methods, systems, and apparatuses for out-of-order access to a shared microcode sequencer by a clustered decode pipeline
EP3109754A1 (en) Systems, methods, and apparatuses for improving performance of status dependent computations
US12112173B2 (en) Context-based loop branch prediction
US20220197661A1 (en) Context-based memory indirect branch target prediction
EP3905034A1 (en) A code prefetch instruction
US20220405102A1 (en) Count to empty for microarchitectural return predictor security
EP3989063B1 (en) High confidence multiple branch offset predictor
US20230091167A1 (en) Core-based speculative page fault list
US20220129763A1 (en) High confidence multiple branch offset predictor
US20220091851A1 (en) System, Apparatus And Methods For Register Hardening Via A Micro-Operation
US20230409335A1 (en) Selective disable of history-based predictors on mode transitions
US10579414B2 (en) Misprediction-triggered local history-based branch prediction

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