CN112579171A - 用于当在推测执行期间被视为安全的时省略安全检查的硬件 - Google Patents

用于当在推测执行期间被视为安全的时省略安全检查的硬件 Download PDF

Info

Publication number
CN112579171A
CN112579171A CN202010578891.4A CN202010578891A CN112579171A CN 112579171 A CN112579171 A CN 112579171A CN 202010578891 A CN202010578891 A CN 202010578891A CN 112579171 A CN112579171 A CN 112579171A
Authority
CN
China
Prior art keywords
instruction
security check
field
memory
execution
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
CN202010578891.4A
Other languages
English (en)
Inventor
M.莱梅
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 CN112579171A publication Critical patent/CN112579171A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/556Detecting local intrusion or implementing counter-measures involving covert channels, i.e. data leakage between processes
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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/3818Decoding for concurrent execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

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

Abstract

描述了与用于推测执行中的安全检查省略的硬件有关的系统、方法和装置。在一个实施例中,一种硬件处理器包括:解码器,用于将指令解码为经解码的指令;推测管理器电路,用于:检测指令中的安全检查字段,基于安全检查字段从多个安全检查策略中确定要为潜在地被错误推测的执行而实施的安全检查策略,对指令执行安全检查策略的一个或多个相关检查以确定该指令是否潜在地被错误推测,当根据一个或多个相关联的检查不将指令视为安全的时,调度所述指令以供执行,以及当根据一个或多个相关联的检查将指令视为安全的时,省略所述指令;和执行单元,用于执行被调度以供执行的所述指令。

Description

用于当在推测执行期间被视为安全的时省略安全检查的硬件
技术领域
本发明涉及用于当在推测执行期间被视为安全的时省略安全检查的硬件。
背景技术
处理器或一组处理器执行来自指令集(例如,指令集架构(ISA))的指令。指令集是与编程有关的计算机架构的一部分,通常包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置以及外部输入和输出(I/O)。应当注意,本文中的术语“指令”可以指代宏指令,例如提供给处理器以执行的指令,或者指代微指令,例如由处理器的解码器对宏指令进行解码而产生的指令。
附图说明
将参考附图描述根据本公开的各种实施例,在所述附图中:
图1图示了根据本公开的实施例的包括处理器核心的计算机系统。
图2图示了根据本公开的实施例的用于省略安全检查指令的流程图。
图3图示了根据本公开的实施例的用于将提示发到代码中的流程图。
图4图示了根据本公开的实施例的流程图。
图5A是图示根据本公开的实施例的通用矢量友好指令格式及其A类指令模板的框图。
图5B是图示根据本公开的实施例的通用矢量友好指令格式及其B类指令模板的框图。
图6A是图示根据本公开的实施例的图5A和5B中的通用矢量友好指令格式的字段的框图。
图6B是图示根据本公开的一个实施例的构成一完整操作码字段的图6A中的特定矢量友好指令格式的字段的框图。
图6C是图示根据本公开的一个实施例的构成寄存器索引字段的图6A中的特定矢量友好指令格式的字段的框图。
图6D是图示根据本公开的一个实施例的构成扩充操作字段550的图6A中的特定矢量友好指令格式的字段的框图。
图7是根据本公开的一个实施例的寄存器架构的框图。
图8A是图示根据本公开的实施例的示例性有序管线和示例性寄存器重命名二者、无序发布/执行管线的框图。
图8B是图示根据本公开的实施例的要被包括在处理器中的有序架构核心的示例性实施例和示例性寄存器重命名二者、无序发布/执行架构核心的框图。
图9A是根据本公开的实施例的单个处理器核心连同其与管芯上互连网络的连接以及其二级(L2)高速缓存器的本地子集的框图。
图9B是根据本公开的实施例的图9A中的处理器核心的一部分的放大图。
图10是根据本公开的实施例的处理器的框图,所述处理器可以具有多于一个核心,可以具有集成的存储器控制器,并且可以具有集成的图形。
图11是根据本公开的一个实施例的系统的框图。
图12是根据本公开的实施例的更具体的示例性系统的框图。
图13示出了根据本公开的实施例的第二更具体的示例性系统的框图。
图14示出了根据本公开的实施例的片上系统(SoC)的框图。
图15是根据本公开的实施例的对比使用软件指令转换器来将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。
具体实施方式
在下面的描述中,阐述了许多具体细节。然而,应理解,可以在没有这些具体细节的情况下实践本公开的实施例。在其他实例下,未详细示出公知的电路、结构和技术,以免使对本描述的理解模糊。
在说明书中对“一个实施例”,“实施例”,“示例实施例”等的引用指示所描述的实施例可以包括特定的特征、结构或特性,但是每个实施例可以不必包括所述特定的特征、结构或特性。而且,这样的短语不一定指代相同的实施例。此外,当结合实施例描述特定的特征、结构或特性时,认为结合其他实施例影响这样的特征、结构或特性在本领域技术人员的知识内,无论这样的特征、结构或特性是否被明确描述。
(例如,硬件)处理器(例如,具有一个或多个核心)可以执行指令(例如,指令线程)以对数据进行操作,例如,以执行算术、逻辑或其他功能。例如,软件可以请求操作,并且硬件处理器(例如,其一个或多个核心)可以响应于请求来执行操作。软件可以包括一个或多个分支(例如,分支指令),其导致执行与程序顺序不同的指令序列。分支指令可以是始终导致分支的无条件分支,或者取决于某(一个或多个)条件可导致或者可不导致分支的条件分支。某些处理器被管线化,以允许更快地完成更多指令。这通常意味着指令在它们的(例如,推测)执行开始之前不等待先前的指令完成。然而,由于条件分支,该方法出现问题。特别地,当处理器遇到条件分支并且尚未计算出该条件的结果时,它不知道是否进行该分支。分支预测是某些处理器用来决定是否进行条件分支的事物。尽可能准确地得到此信息是重要的,因为不正确的预测(例如,错误的预测)将导致某些处理器扔掉所有不需要执行的指令,并用正确的指令集重新开始,例如,对于深度管线的处理器,此过程特别昂贵。在一个实施例中,处理器的分支预测器积极地推测并获得显著的性能,例如,随着增加无序的深度和宽度。
在某些实施例中,要由支持推测执行(例如,包括分支预测)的硬件处理器执行的代码包括一个或多个安全检查(例如,安全检查指令)。可以使用静态分析来(例如,通过编译器)省略某些安全检查(例如,用于实施存储器安全检查或类型安全检查),但是应该扩展该分析以考虑进去推测执行。为了在所有可能的执行路径(包括错误推测的路径)上实施执行期望的安全策略,可能需要附加的安全检查。然而,错误推测在某些实施例中很少发生,因此那些安全检查将施加附加的开销,所述附加的开销通常在那些实施例中将是不必要的。
在某些实施例中,存储器安全检查将检查存储器访问错误,例如,检查缓冲器溢出和悬垂指针。在一个实施例中,存储器安全检查将检查阵列边界和指针解除引用。
在某些实施例中,类型安全检查将(例如,针对存储器访问请求)检查程序的常量、变量和方法(例如,函数)的不同数据类型之间的差异,例如,将作为整数(int)的数据当作浮点数(float)的错误。
本文中的某些实施例扩展了处理器的架构以读取以下提示(例如,由编译器发出):仅在被检查的操作可能潜在地被错误推测时才需要特定的安全检查。当处理器确定操作不被视为安全时,可以执行检查并且可以继续推测,这增加了优化机会。另一方面,当处理器在准备好执行这样的操作时确定该操作是安全的时候,则在这些实施例中,可以跳过相关联的安全检查以减少开销。本文中的某些实施例提供了一种指定仅在指令可能被错误推测的情况下才应该执行安全检查的方式。未来的编译器可能将增加它们发出的安全检查指令的数量,以使检查对潜在的推测控制流实施(例如,类型)安全性。在那种情况下,本文中的某些实施例通过将(例如,来自编译器的)信息传送到微架构来提供效率优势,所述信息关于哪些安全检查可以在已知被正确预测/架构的控制流上跳过。
栅栏可用于限制由先前的安全检查所限制的操作的推测执行,直到该检查完成为止。与本文中用于推测执行中的安全检查省略的实施例不同,栅栏还可以限制不依赖于安全检查的操作的推测执行,并且因此限制处理器优化性能的能力。
在某些实施例中,用于防卫以免于硬件处理器中的硬件推测攻击的策略是通过使推测在数据高速缓存层级中不可见,例如,以更精确地确定何时可以安全地进行加载而不以可能泄漏信息的方式影响微架构状态,以及在允许推测执行继续进行的点之前缓冲状态改变。在一个实施例中,由于推测加载,该策略阻止了通过多处理器数据高速缓存层级的微架构隐蔽和侧信道,例如使得不安全的推测加载将数据读取到推测缓冲器中而没有修改高速缓存层级。当加载变得安全时,此策略使它们对系统的其余部分可见。此策略标识可能违反了存储器一致性的加载,并在此时迫使它们执行验证步骤。与本文中用于推测执行中的安全检查省略的实施例不同,以上策略在确定以下方面过于悲观:加载何时可以安全地进行,如果开发人员仅对策略实施的高速缓存访问可见性的架构规范实施更宽松的安全策略(例如存储器安全或类型安全)而不是更严格的完整一致性检查感兴趣的话。此策略还增加了对缓冲器空间的需求。缓冲逻辑还引入了附加的开销和复杂性,特别是因为在最终允许缓冲的加载进行时该策略重新发布它们。本文中用于推测执行中的安全检查省略的实施例使得能够使用安全检查(例如,如由编译器插入)来实施开发人员期望的特定安全策略,并且那些检查本身可以推测地执行以比没有那些检查的情况更早声明操作(例如,加载)安全。注意,缓冲可以与本文中用于推测执行中的安全检查省略的实施例一起使用。
本文中用于推测执行中的安全检查省略的实施例定义了新类型的指令(以及对先前定义的指令的修改器),其包括实施开发人员期望的安全策略同时仍然能够进行显著的动态优化的安全仪器。例如,它使得边界检查指令(例如,指针指令或存储器保护扩展(MPX)边界检查指令(例如,以检查低边界或高边界)的能力)或一组隐式边界和类型检查能够仅当来自正被检查的地址的加载被视为不安全时才被标记为需要。当处理器到达该指令时,如果已经满足安全标准(例如,已经确定了先前分支的正确方向),则可以跳过该指令。在某些实施例中,在此上下文中的能力指代具有嵌入在指针存储装置中的相关联的安全元数据的指针。
开发人员可以使用类型安全语言来避免其程序中可能导致数据泄漏的常见安全问题。在某些实施例中,存储器安全不是那么严格(例如,它不防止类型混淆),但是可以强加更少的开销来实施。本文中用于推测执行中的安全检查省略的实施例提供了一种通过使用提示(例如,由编译器提供)来沿着架构和错误推测的执行路径二者更有效地实施安全策略的恰当子集(例如,存储器安全和/或类型安全)的方式,所述提示用于仅在可能被错误推测的控制流上通知处理器需要什么安全检查。在某些实施例中,提示在程序的代码中可见,以指示仅对于潜在地错误推测的指令才需要的检查。
为用于推测执行中的安全检查省略的本文中的实施例的基础的基本思想是,某些程序仅需要实施策略的恰当子集(例如,少于全部)(例如,存储器安全和/或类型安全策略)而不是完全符合运行程序的处理器的架构规范,并且提供比在实施更严格的策略的情况下对于处理器资源的给定集合将可能有的更高程度的推测执行的机会。
因此,本文中用于推测执行中的安全检查省略的实施例的一个方面是使用某些狭窄类型的安全检查(诸如边界检查和类型检查)来限制(gate)推测执行,而不是要求完全的架构一致性。这可以通过以下来实现:防止在相关检查完成(例如,指针检查、MPX检查或其他定义的检查的能力)之前发生由安全敏感操作(例如存储器加载)引起的对手可见的微架构状态改变。例如,这可以采取阻止进一步推测执行的形式,直到检查完成或缓冲结果状态改变并且在检查失败时使它们回滚为止。
其次,这意味着可能需要进行更多安全检查来覆盖可能的错误推测的控制流,而以前,编译器可能对架构上不可能的流进行了静态省略的检查。这要求编译器的某些实施例具有推测执行的模型,以便它可以标识所有可能的推测控制流。
第三,出于效率的原因,编译器的某些实施例应该能够通知处理器关于哪些安全检查已经被添加的情况,所述安全检查否则本来可以被省略,以便当被检查的值符合它们的架构定义时,处理器可以跳过那些检查。跳过那些检查(例如,跳过那些检查到执行单元的分派)节省了能量、带宽和处理器的其他资源,并且因此是对处理器(例如,包括该处理器的计算机)的改进。
以下对该第三方面进行详尽说明。本文中用于推测执行中的安全检查省略的实施例使得仅在被检查限制的操作还没有以某种其他方式被视为安全时,处理器才能够使用关于需要哪些安全检查需要的提示(例如,由编译器提供)。例如,考虑以下样品伪代码:
Figure 492980DEST_PATH_IMAGE001
Figure 49774DEST_PATH_IMAGE002
在某些实施例中,应当无条件地执行对随后访问的边界检查,因为可以向该函数(对于该示例,排除内联的可能性)提供任何“id”值。可能不需要类型检查,因为编译器可以静态地验证此访问的类型安全性,假设处理器从未推测套接字的地址。否则,如果该级别的推测是可能的,则动态类型安全检查可以使推测能够进一步进行,同时仍确保实施类型安全性。
然而,请注意,即使地址推测是可能的,在某些实施例中,如果套接字的地址与其架构定义相匹配,则编译器也可以静态确定不需要类型安全检查。如果处理器(例如,中央处理单元(CPU))已经解决了任何条件或已经淘汰了可能潜在导致套接字地址偏离其架构定义(例如,被错误推测)的任何指令(诸如前面的分支或前面的存储,其可能会别名为从中加载套接字的地址的存储器位置),如果适用的话,则满足该后一个条件。
本文中用于推测执行中的安全检查省略的实施例使编译器能够向处理器传递提示,该提示指示如果在准备执行访问的点时,输入到后续访问的地址已经被处理器(例如CPU)确定为架构,则可以省略类型安全检查。
在一个实施例中,以上伪代码中的dynamic_cast例程接受模板参数,该模板参数指定了参数正被转换为的指针的类型。它执行动态检查,以确定输入参数的类型是模板参数的子类还是它们完全匹配。如果是这样,则例程的结果是指向与输入指针具有相同地址的新类型的对象的指针。否则,dynamic_cast返回空。
作为一个示例,该“if”语句使编译器生成分支指令以实现条件控制流。如果以前的分支在if语句的此分支中的指令执行时已解决,则类型检查已通过。那意味着对ts->port的后续访问也将在ts的边界内。因此,可以向该ts-> port访问提供提示,所述提示指示如果已知正被访问的地址与其架构定义相匹配并且所有先前的分支均已解决,则可以省略(一个或多个)类型和边界检查(例如,(一个或多个)边界检查指令)。请注意,这是比为从lookupSocket中的最后语句生成的访问指定的更强的限制。对于每种限制类型,可以定义多种类型的提示(例如,不同的指令前缀或不同的指令变体)。
作为上述伪代码的另一个示例,如果分支被错误地预测使得访问LocalDomainSocket就像它是TCPIPSocket一样,那么将使用刚刚存储在LocalDomainSocket对象的末尾的16位数据来为tcpipServices阵列建立索引。如果那碰巧是一些敏感数据存储的地方,例如服务器私钥的一部分,则该信息可以确定tcpipServices阵列中的哪个条目被拉到高速缓存器中,假设整个阵列最初都未被高速缓存。如果对手能够例如通过尝试连接到每个服务并定时建立连接所花费的时间来确定对tcpipServices阵列的后续访问的时间,则可能会泄漏敏感数据值。连接最快的服务可能是其端口号等于敏感数据的服务。密码密钥可能大于示例的16位,但是泄漏任何私钥潜在地是有问题的。还可能存在比本示例中描述的场景更复杂的场景,其可能导致更多的密钥泄漏。
如果访问准备好执行,但是根据上面定义的标准尚未被视为是安全的,则可以执行边界和类型检查。如果分支被推测错误,则在这种情况下边界检查和类型检查二者都将失败,但是在其他情况下,只有一种检查可能会失败。
在某些情况下,以下可能是有用的:将指向对象的开始的指针与指向对象内的其他偏移量的指针区分开,使得即使在指针指向对象的基本(base)的情况下静态检查另外将足够用,也可以使用指针的后一子类型来对访问执行动态边界检查。可以提高在指针表示中指定指针是否指向对象的开始的效率。例如,当将指针(或胖指针)初始化到对象基本时,可以设置指针中的保留位,并且后续的指针更新可以取决于结果得到的指针是否指向对象基本来更新该位。
图1图示了根据本公开的实施例的包括处理器核心109的计算机系统100。处理器核心109可以包括推测管理器110,以管理对本文中讨论的推测特征的控制。调度器147可以包括推测管理器110,其包括如本文中讨论的推测执行功能中的安全检查省略。在某些实施例中,推测管理器110包括安全检查策略112,以存储要针对特定安全检查策略执行的相关联的检查中的一个或多个。例如,第一安全检查策略可以是存储器安全检查策略114,并且第二安全检查策略可以是类型安全检查策略116。在某些实施例中,推测管理器110将访问代码(例如,添加了提示的代码106)(例如,添加了提示的指令或该指令的解码指令,来自代码106)来确定采用哪种策略,然后确定省略一个或多个相关联的检查是否安全。在一个实施例中,推测管理器110包括到核心109的调度器147的路径110A,例如,以停止调度(并因此停止执行)要被省略的指令(例如,微代码)。路径110A可以允许单向通信或双向通信。在一个实施例中,调度器147用于调度在执行单元154中的一个或多个上的指令(例如,微代码)的执行。
根据本公开的实施例,所描绘的计算机系统100在管线处理器核心109(1)-109(N)中包括分支预测器120和分支地址计算器142(BAC)。参考图1,管线处理器核心(例如109(1))包括指令指针生成(IP Gen)阶段111、提取阶段130、解码阶段140和执行阶段150。在某些实施例中,退出阶段(例如,包括重新排序缓冲器(ROB))在执行阶段150之后。在一个实施例中,计算机系统(例如,处理器)100包括多个核心109(1-N),其中N是任何正整数。在另一个实施例中,计算机系统(例如,处理器)100包括单个核心。在某些实施例中,每个处理器核心109(1-N)实例支持多线程(例如,在第一和第二逻辑核心上执行两个或更多个并行的操作或线程集),并且可以以包括以下各项的各种方式来这样做:时间片多线程、同时多线程(例如,其中单个物理核心为线程中的每个提供逻辑核心,所述物理核心同时进行多线程)或其组合(例如,时间片提取和解码以及此后的同时多线程)。在所描绘的实施例中,每个单个处理器核心109(1)至109(N)包括分支预测器120的实例。分支预测器120可以包括分支目标缓冲器(BTB)124。
在某些实施例中,分支目标缓冲器124存储(例如,在分支预测器阵列中)与多个分支指令中的每一个相对应的预测目标指令(例如,已经执行了多次的一段代码的分支指令))。在所描绘的实施例中,包括分支地址计算器(BAC)142,其访问(例如,包括)返回堆栈缓冲器144(RSB)。在某些实施例中,返回堆栈缓冲器144用于存储(例如,在最后进入的数据是最先出去的数据(LIFO)的堆栈数据结构中)任何CALL指令的返回地址(例如,其将它们的返回地址推入堆栈)。
分支地址计算器(BAC)142用于计算某些类型的分支指令的地址和/或验证分支预测器(例如BTB)做出的分支预测。在某些实施例中,分支地址计算器执行分支目标和/或下一顺序线性地址计算。在某些实施例中,分支地址计算器基于地址计算对分支执行静态预测。
在某些实施例中,分支地址计算器142包含返回堆栈缓冲器144,以保持跟踪CALL指令的返回地址。在一个实施例中,分支地址计算器试图校正由分支预测器120做出的任何不正确的预测,以减少分支错误预测惩罚。作为一个示例,分支地址计算器为那些仅能够从分支指令和指令指针确定其目标的分支验证分支预测。
在某些实施例中,分支地址计算器142维持返回堆栈缓冲器144用作分支预测机制,以用于确定返回指令的目标地址,例如,其中返回堆栈缓冲器通过监视所有“调用子例程”和“从子程序返回”分支指令来操作。在一个实施例中,当分支地址计算器检测到“调用子例程”分支指令时,分支地址计算器将下一指令的地址推入返回堆栈缓冲器上,例如,其中堆栈指针的顶部标记返回堆栈缓冲器的顶部。通过在每个“调用子例程”指令之后紧接着将地址推入返回堆栈缓冲器上,在该实施例中,返回堆栈缓冲器包含返回地址的堆栈。当分支地址计算器随后检测到“从子例程返回”分支指令时,分支地址计算器将顶部返回地址弹出返回堆栈缓冲器,例如,以验证由分支预测器120预测的返回地址。在一个实施例中,对于直接分支类型,分支地址计算器将(例如,始终)预测例如对条件分支的采用,并且如果分支预测器未预测对直接分支的采用,则分支地址计算器覆盖分支预测器的未命中的预测或不正确的预测。
图1中的核心109包括用于验证由分支预测器120做出的分支预测的电路。每个分支预测器120条目(例如,在BTB 124中)可以进一步包括有效字段和捆绑地址(BA)字段,其用于增加准确性和验证由分支预测器120执行的分支预测,如下面更详细地讨论的。在一实施例中,有效字段和BA字段各自由一个位字段组成。然而,在其他实施例中,有效字段和BA字段的大小可以变化。在一实施例中,提取的指令被发送(例如,由BAC 142从线137发送)到解码器146以被解码,并且经解码的指令被发送到调度器147,以调度在执行单元154中的一个或多个上的执行。
所描绘的计算机系统100包括网络设备101、输入/输出(I/O)电路103(例如,键盘)、显示器105和系统总线(例如,互连)107。
在一个实施例中,存储在分支预测器120中的分支指令由编译器预先选择为将被采用的分支指令。在某些实施例中,如被示出存储在图1的存储器102中的编译器代码104包括代码序列,该代码序列在被执行时将以高级语言编写的程序的源代码转换成可执行的机器代码。在一个实施例中,编译器代码104还包括提示以形成添加了提示的代码106。编译器代码可以进一步预测分支指令的目标指令(例如,可能采用的分支指令(例如,预选的分支指令))。此后,利用用于分支指令的目标指令来更新分支预测器120(例如,其BTB 124)。在一个实施例中,软件管理硬件BTB,例如通过软件指定预测模式,或者通过编写BTB的指令的模式所隐式定义的预测模式还设置条目中的模式位。
如以下所讨论的,所描绘的核心(例如,其分支预测器120)包括对一个或多个寄存器的访问。在某些实施例中,核心包括一个或多个通用寄存器108。
在某些实施例中,用于分支预测器120的每个条目(例如,在其BTB 124中)包括标签字段和目标字段。在一个实施例中,BTB中每个条目的标签字段存储标识分支指令的指令指针的至少一部分(例如,存储器地址)。在一个实施例中,BTB中每个条目的标签字段存储标识代码中的分支指令的指令指针(例如,存储器地址)。在一个实施例中,目标字段存储用于在同一条目的标签字段中标识的分支指令的目标的指令指针的至少一部分。此外,在其他实施例中,用于分支预测器120的条目(例如,在其BTB 124中)包括一个或多个其他字段。在某些实施例中,条目不包括用于帮助预测是否采用分支指令的单独字段,例如,如果存在分支指令(例如,在BTB中),则认为采用该条目。
如图1所示,IP生成阶段111的IP Gen多路复用器113从线114A接收指令指针。经由线115A提供的指令指针由增量器电路115生成,该增量器电路115从路径113A接收最新指令指针的拷贝。增量器电路115可以将目前的指令指针递增预定量,以从目前正由内核执行的程序序列中获得下一个顺序指令。
在一个实施例中,在从IP Gen多路复用器113接收到IP时,分支预测器120将IP的一部分与分支预测器120中每个条目(例如BTB 124)的标签字段进行比较。如果在分支预测器120的IP和标签字段之间没有找到匹配,则在该实施例中,IP Gen多路复用器将继续选择下一顺序IP作为要提取的下一指令。相反,如果检测到匹配,则分支预测器120读取与IP匹配的分支预测器条目的有效字段。如果未设置有效字段(例如,具有逻辑值0),则分支预测器120认为相应条目为“无效”,并且在该实施例中将忽略IP与相应条目的标签之间的匹配,例如,并且相应条目的分支目标将不会转发到IP Gen Mux。另一方面,如果设置了匹配条目的有效字段(例如,具有逻辑值1),则分支预测器120继续执行指令指针(IP)的预定部分和在该实施例中匹配分支预测器条目的分支地址(BA)字段之间的逻辑比较。如果存在“允许条件”,则匹配条目的分支目标将被转发到IP Gen多路复用器,并且否则,分支预测器120忽略IP和分支预测器条目的标签之间的匹配。在一些实施例中,条目指示符不仅由当前分支IP形成,而且还由全局历史的至少一部分形成。
更具体地,在一个实施例中,BA字段指示相应的分支指令在高速缓存存储器132的行存储器储的地方。在某些实施例中,处理器能够每时钟周期发起多个指令的执行,其中指令不是相互依赖的,并且不使用相同的执行资源。
例如,图1中所示出的指令高速缓存器132的每个行包括多个指令(例如,六个指令)。此外,在本实施例中,响应于提取单元134的提取操作,指令高速缓存器132通过向提取单元134提供整行高速缓存器来响应(例如,在“命中”的情况下)。高速缓存器的行内的指令可以被分组为单独的“捆绑”。例如,如图1中所示出的,可以将高速缓存行133中的前三个指令寻址为捆绑0,并且可以将后三个指令寻址为捆绑1。捆绑内的指令中的每个彼此独立(例如,可以同时发布以执行)。在某些实施例中,在分支预测器120条目中提供的BA字段用于标识与相应条目相对应的分支指令的捆绑地址。例如,在一个实施例中,BA标识分支指令是存储在特定高速缓存行的第一捆绑还是第二捆绑中。
在一个实施例中,分支预测器120在匹配条目的BA字段与IP的预定部分之间执行逻辑比较,以确定是否存在“允许条件”。例如,在一个实施例中,将IP(例如,IP [4])的第五位位置与匹配(例如,BTB)条目的BA字段进行比较。在一个实施例中,当IP [4] 不大于BA时,存在允许条件。这样的允许条件有助于防止可能不会执行的分支指令的明显不必要的预测。也就是说,当在对照分支预测器120的标签进行比较时考虑少于全部IP时,有可能与标签匹配,这可能不是真正的匹配。然而,IP和分支预测器的标签之间的匹配指示可能要执行的高速缓存器的特定行,其包括与相应分支预测器条目相对应的分支指令。具体地,如果IP的捆绑地址不大于匹配分支分支预测器条目的BA字段,则相应高速缓存行中的分支指令将很快被执行。因此,在某些实施例中,可以通过继续提取分支指令的目标来实现性能益处。
如以上所讨论的,如果存在“允许条件”,则在该示例中,匹配条目的分支目标将被转发到IP Gen多路复用器。否则,分支预测器将忽略IP与标签之间的匹配。在一个实施例中,在将分支目标发送到IP Gen多路复用器之前,从分支预测器转发的分支目标最初发送至分支预测(BP)恢复器(resteer)多路复用器128。如图1所示,BP Resteer多路复用器128也可以从其他分支预测设备接收指令指针。在一个实施例中,将对BP Resteer多路复用器接收的输入行进行优先级确定,以确定哪一条输入行将允许通过BP Resteer多路复用器到达IP Gen多路复用器上。
除了将分支目标转发到BP Resteer多路复用器之外,在检测到IP与分支分支预测器的标签之间的匹配时,则将匹配分支预测器条目的BA转发给分支地址计算器(BAC)142。BAC 142在图1中被示出为位于解码阶段140中,但是可以位于(一个或多个)其他阶段中。BAC还可以经由线137从提取单元134接收高速缓存行。
在该示例中,由IP Gen多路复用器选择的IP也经由数据线135被转发到提取单元134。一旦提取单元134接收到IP,就从指令高速缓存132中提取与该IP相对应的高速缓存行。从指令高速缓存器接收的高速缓存行经由数据线137转发到BAC。
在此示例中在接收到BA时,BAC将读取BA,以确定预先选择的分支指令(例如,在匹配分支预测器条目中标识的)在下一个要由BAC接收的高速缓存行中位于的地方(例如,高速缓存行的第一捆绑或第二捆绑)。在一个实施例中,分支指令位于高速缓存行的捆绑内的地方(例如,在三个指令的捆绑中,分支指令将被存储为第二指令)是预定的。
在替代实施例中,BA包括附加位以更具体地标识高速缓存行内的分支指令的地址。因此,分支指令将不限于捆绑内的具体指令位置。
在BAC确定高速缓存行内的预选分支指令的地址,并且已经从提取单元134接收到相应的高速缓存行之后,BAC将对相应指令进行解码以验证IP确实对应于分支指令。如果BA在接收的高速缓存行中寻址的指令是分支指令,则无需对分支预测进行校正。相反,如果高速缓存行中的相应指令不是分支指令(即,IP不对应于分支指令),则BAC将向分支预测器发送消息,以使相应的分支预测器条目无效,以防止同一分支分支预测器条目上类似的错误预测。此后,无效的分支分支预测器条目将被新的分支分支预测器条目重写。
另外,在一个实施例中,BAC将IP递增预定量,并且经由数据线145将递增的IP转发到BP Resteer多路复用器128,例如,来自BAC的数据线145将相对于来自分支预测器的数据线具有优先权。结果,递增后的IP将被转发到IP Gen多路复用器,并传递到提取单元,以便通过提取顺序跟随IP的指令来校正分支预测错误。
本文中用于推测执行中的安全检查省略的实施例可以用各种架构实例化以用于实施特定安全策略(例如,存储器安全策略和/或类型安全策略)。Intel®存储器保护扩展(MPX)就是对这的一个说明,它定义了指令(例如,BNDCL / N / U),该指令对照一对(例如64位)寄存器所指示的存储器范围来检查指针。因此,这些指令可用于实施存储器安全性。本文中用于推测执行中的安全检查省略的实施例可以重新定义否则在指令(例如,MPX指令)的上下文中没有意义的指令前缀(例如,片段覆盖前缀),以向处理器提示仅在检查尚未被视为安全的访问的指针时才需要检查。处理器可以通过枚举什么指令使用包含指针的寄存器来标识相关的访问。然而,以下也是可能的:考虑指令本身就好像它是访问指令,并以此为基础来确定安全性,例如,因为实际的访问将遵循相关联的MPX指令。
下面的伪代码序列说明了如何可以用提示来修改MPX指令,以指示仅当可能对其错误推测时才需要对它的安全检查。
Figure 37321DEST_PATH_IMAGE003
该伪代码示例使用ES段覆盖前缀来指示:如果已知相关联访问没有被错误地推测,例如并且假定ES前缀的原始目的在此上下文中不重要,并且因此是可用于此处的提示使用的指令前缀,则不需要(例如,可以取消)存储器安全检查。
在某些实施例中,如果具有提示的指令已经被视为是安全的,则它被当作无操作(nop)。其实施例在图2中图示。
图2图示了根据本公开的实施例的用于省略安全检查指令的流程图200。所描绘的流程图200包括:接收用于执行带有提示的安全检查指令(例如,安全检查字段)的请求202;确定该安全检查指令的所有相关联的访问是否都已经被视为安全的204;并且如果是,则跳过(例如,省略)安全检查指令的执行206,并且如果没有,则执行安全检查指令208。
在某些实施例中,所述省略移除指令的功能的恰当子集(例如,安全检查),但是不移除所有功能(例如,不移除要被部分省略的指令的非安全检查功能)。下面将针对伪代码讨论这的示例。
处理器可以具有编码内联能力(EIC)作为使用不同的安全检查指令的另一种安全架构,并且在本文中用于安全检查省略的实施例的上下文中,可以将那些与MPX指令有点类似地对待。在某些实施例中,MPX和EIC之间的差异在于EIC边界检查指令不仅像MPX指令一样执行边界检查,而且它们还对输入指针值进行解码,以便随后的存储器访问可以使用它。鉴于MPX的实施例与指针分开存储边界,EIC的实施例将边界信息直接嵌入到编码的(例如64位)指针中。这意味着在某些实施例中,在尝试通过指针访问存储器之前,将对指针进行解码以移除该附加信息。因此,即使已知访问是安全的,并且如果它可能潜在地被错误推测则将其标记为仅需要安全检查,EIC安全检查指令的某些实施例仍将对指针进行解码,以便后续的存储器访问可以进行。
EIC安全检查指令(例如,命名为检查能力(CheckCap))的一个示例采用输入操作数,该输入操作数指定编码的指针以及要执行的访问的大小,例如使得解码和执行该指令执行边界检查,然后如果边界检查成功,则利用经解码的指针重写编码的指针。
这通过基于用于基于MPX的说明的以上伪代码的以下代码序列来说明:
Figure 42055DEST_PATH_IMAGE004
如在基于MPX的示例中一样,EIC示例重新定义段覆盖前缀ES,以向处理器指示仅在某些实施例中潜在地错误地推测了指令的情况下才需要执行边界检查。
还可以定义其他指令,这些指令使用应用程序或语言运行时间来管理边界和类型信息的存储,并在必要时执行实际的安全检查。例如,RBNDCL/N/U指令可以对存储在通用寄存器(GPR)中的边界而不是MPX边界寄存器进行操作,并且可以在本公开的上下文中类似地对它们进行修改。此外,可以定义类型检查(TYPECHK)指令,以比较两个类型标识值(ID)是否相等,并如果它们不匹配则生成异常。如果指令安全,则也可以利用诸如ES前缀之类的提示来修改这些指令以跳过安全检查。
某些架构可能不依赖于不同的指令来执行安全检查,而是在访问存储器之前自动执行安全检查。例如,当在存储器访问中使用包含标签值的指针时,可以自动检查存储器标签。可以从标签存储中加载所有访问的存储器位置的标签值,并将其与指针中的标签进行比较。如果那些比较中的任何一个揭示不匹配,则可以生成异常。正如可以为安全检查指令提供提示一样,也可以为存储器访问提供提示以指示应该跳过自动安全检查。以下是基于以上示例的示例伪代码:
Figure 929983DEST_PATH_IMAGE005
然而,使用某些段覆盖前缀作为提示可能以不希望的方式影响存储器访问。例如,根据本公开,使用FS和GS前缀来提供提示可能导致将段基地址添加到在存储器访问中指定的地址,这可能导致错误的存储器位置被访问。例如,当在处理器架构中已经定义了那些前缀以引起这种地址计算时。在其他模式下(例如,利用32位线性地址),甚至更多的段覆盖前缀也可能导致地址添加到意外的段基中。因此,在某些实施例中,可能有必要选择不会引起任何意外影响的其他前缀,或者为提示定义新的前缀或其他编码。
一些指令在同一指令中组合了多种类型的检查。在一个实施例中,一条指令检查边界和类型信息二者。为了说明这一点,考虑可以将MPX边界寄存器和对应边界表条目扩展为包括类型信息,并且可以增强MPX指令以检查该类型信息。例如,边界检查(例如,下边界检查)指令的一个变体在单个寄存器操作数中接受要检查的地址,并且因此可以被扩展以接受指定类型ID的立即操作数。这种增强型(例如BNDCL)指令,作为示例称为TYPEBNDCL可以将其立即操作数中的类型ID与边界寄存器中的类型ID进行比较,并且如果它们不匹配则生成异常。如果已知该指令是安全的,则编译器然后可以提供提示以有选择地取消边界检查和类型检查中的一个或两个。例如,在这种情况下,ES前缀可以取消边界检查,并且在这种情况下,FS段覆盖前缀可以取消类型检查。可以提供两个前缀来取消两个检查,或者可以为那个目的定义第三个提示,例如GS前缀。
并非所有用于实施安全策略的架构都定义了不同的安全检查指令,但是仍然可以采用修改指令从而用于生成具有指令前缀的访问的方法。例如,存储器标记对照由正访问的存储位置的地址索引的边界元数据来隐式检查访问。由于某些架构是复杂的指令集计算(CISC),因此大量指令可以生成存储器访问,例如,具有存储器操作数的所有指令。其他安全架构也可以执行隐式检查,诸如使用胖指针来实施存储器和类型安全性的能力机制。如上面的样品代码中所说明的,有时仅需要对安全访问执行边界和类型检查中的一个或另一个,因此可以为在单个指令中支持这两种检查的架构定义用于那些类型的检查中的每个的单独修饰符。
下面讨论插入提示(例如,安全检查字段)的示例。在某些实施例中,在其中编译器发出存储器访问和任何相关联的一个或多个安全检查指令(如果适用)的每个点处,编译器将决定是否还发出如本文中所讨论的一个或多个提示。在这些实施例的某些中,为了这样做,编译器将考虑如果访问被视为是安全的,则是否可以省略安全检查。上面提供了一些示例场景,但那些不是详尽的。
下面参考图3图示了用于做出这些确定的示例流程。该流程可以针对每个访问执行多次,以针对不同类型的策略做出不同的确定,例如,针对存储器安全检查策略一次,并且针对类型安全检查策略另一次。在某些实施例中,那些决定最终导致如上所述的合并提示,例如,以指示如果访问被视为是安全的,则省略存储器安全性和类型安全检查二者。
图3图示了根据本公开的实施例的用于将提示发到代码中的流程图300。所描绘的流程300包括(例如,由编译器或从编译器)接收包括存储器访问和(一个或多个)相关联的安全检查指令的代码302,并且,如果访问被视为是安全的,则确定适用的安全策略是否可能被违反304,并且如果否,则向代码中发出提示(例如,作为安全检查指令的安全检查字段)306,并且如果是,则不向代码中发出提示(例如,作为安全检查指令的安全检查字段)(例如,使得执行安全检查指令)308。
以下包括推测和相关联检查的潜在类型的示例。
在一个实施例中,给处理器的关于安全检查(所述安全检查(例如仅)在指令可能潜在地被错误地推测的情况下才被执行)的提示用于指定要为潜在错误推测的执行而实施的策略的类型,例如,然后处理器检查取决于它支持的推测类型的条件,以确定指令是否潜在地被错误推测。
下面描述了处理器可能支持的推测的潜在类型的示例的非穷尽列表,以及处理器可以执行以确定指令是否针对该特定类型的推测被潜在地错误推测的相关联的检查。如果处理器支持多种类型的推测,则其可以对所有支持的类型的推测执行检查,以确定没有以可能违反某些安全策略(例如,存储器安全或类型安全)的方式对指令进行了错误推测。
注意,可能存在被支持的其他类型的推测,其不违反适用的安全策略,并且因此即使处理器尚未确定与那些其他类型的推测有关的指令的方面已经被正确地推测,仍可以跳过安全检查。例如,可设想可以推测数据值。即使错误地推测了针对存储的数据值,其也不违反存储器安全或类型安全策略的某些实施例,例如,因为要存储的数据值对用于该存储的地址没有影响。
因此,某些实施例将指令(例如,用于安全检查指令的相关联的存储器访问)区分为“安全”而不是“正确推测”,以指代如下指令:处理器已为其确定了指令的执行的某方面的错误推测不破坏适用的安全策略。
分支预测
处理器可以尝试基于来自先前分支的历史和其他因素来预测分支将采用哪个方向。在某些实施例中,这用于在分支已经解决(例如,已经明确地确定了正确的方向)之前推测地执行预测的分支目标。为了确定指令在正确推测的路径上,在某些实施例中,处理器需要首先解决程序中的先前分支。
存储缓冲器旁路推测
处理器可以重新排序加载和存储,并且有时可能发生加载,该加载从将被比该加载更早的存储(例如,在程序中所述存储在加载之前)的存储所重写的位置检索数据。取决于加载的操作可以推测性地使用该数据。例如,该数据可以解释为指针地址或整数或浮点值等。为使处理器确定已加载了正确的值,它可以使用存储器消除歧义电路来验证加载指代如下位置:其也没有被仍然被缓冲的任何较早的(例如,在程序顺序方面)存储操作引用。
其他可能类型的安全强化
存在其他用于安全强化的可能方法,诸如,在允许存储器访问来改变可能对对手可见的高速缓存状态之前等待直到所有先前的分支都已解决。与上面列出的示例相比,那些可以实施更严格的策略,否则那些策略可以允许改变高速缓存状态,其可以在存储器安全或类型安全检查完成后对手可见,但是未作为实施那些策略一部分而被检查的错误推测的形式仍然是可能的。例如,考虑以下示例伪代码:
Figure 604547DEST_PATH_IMAGE006
考虑到从priv所指向的存储器的读取可能被延迟,因此处理器可能会错误地推测是在if块还是在else块中执行代码。存储器和/或类型安全检查仍然可以应用于对通过arr变量引用的阵列的访问。然而,无论本公开中描述的某些提示是否应用于那些检查,当从未特许的调用者调用foo时,那些检查将不一定会阻止对priv_array的访问。考虑到恶意调用者然后可以潜在地使用从该函数的返回值来以某种可以对对手可见的方式影响高速缓存状态。
对于诸如这的情况,本文中定义了另一种类型的提示,其选择性地实施更严格的策略,诸如以上伪代码中描述的策略。例如,可以用另一个段覆盖前缀(例如GS)修改样品代码中的return语句所生成的存储器访问,以指示应根据更严格的策略进行调节。然而,存储器和类型安全对于某些应用或应用的部分可以是充分的,并且如果仅实施那些宽松的策略,则该代码的用户可能会受益于附加的优化(其是可能的)。如以上所描述的启用更严格的策略的选择性实施可以是有用的,因为它默认实施更宽松的策略以提供附加的优化机会,同时仍在程序中的关键点处实施更严格的策略。
使推测在数据高速缓存层级中不可见的策略是用于实施如上所述的可以通过该提示选择的更严格类型的策略的机制的示例。
图4图示了根据本公开的实施例的流程图400。所描绘的流程400包括利用硬件处理器的解码器将指令解码为经解码的指令402;通过硬件处理器检测指令中的安全检查字段404;通过硬件处理器基于安全检查字段、从多个安全检查策略中确定要为潜在地错误推测的执行而实施安全检查策略406;通过硬件处理器对指令执行安全检查策略的一个或多个相关联的检查以确定该指令是否潜在地被错误地推测408;当所述硬件处理器根据所述一个或多个相关联的检查不将所述指令视为安全的时,调度所述指令以供执行410;当所述硬件处理器根据所述一个或多个相关联的检查将所述指令视为安全的时,省略指令412;以及利用硬件处理器的执行单元来执行被调度以供执行的指令414。
下面详细描述以上可以使用的示例性架构、系统等。
可以鉴于以下示例来描述所公开的技术的至少一些实施例:
示例1. 一种装置,包括:
解码器,用于将指令解码为经解码的指令;
推测管理器电路,用于:
在指令中检测提示(例如安全检查字段),
基于所述提示(例如,安全检查字段),从多个安全检查策略中确定要为潜在地被错误推测的执行而实施的安全检查策略,
对指令执行安全检查策略的一个或多个相关联的检查,以确定该指令是否潜在地被错误推测,
当根据一个或多个相关联的检查不将指令视为安全的时,调度该指令以供执行,以及
当根据一个或多个相关联的检查将指令视为安全的时,省略该指令;和
执行单元,用于执行被调度以供执行的指令。
2. 根据示例1所述的装置,其中,所述提示(例如,安全检查字段)是编译器提供的提示。
3. 根据示例1所述的装置,其中,所述推测管理器电路将对该指令的一组相关联的存储器访问执行安全检查策略的一个或多个相关联的检查。
4. 根据示例1所述的装置,其中,所述安全检查策略是存储器安全检查策略。
5. 根据示例1所述的装置,其中,所述安全检查策略是类型安全检查策略。
6. 根据示例1所述的装置,其中,所述安全检查策略的一个或多个相关联的检查包括存储器安全检查和类型安全检查。
7. 根据示例1所述的装置,其中,所述一个或多个相关联的检查小于针对所述装置的架构规范的完整一致性检查。
8. 根据示例1所述的装置,其中,所述指令是与按照程序顺序的后续存储器访问指令相关联的安全检查指令。
示例9. 一种方法,包括:
用硬件处理器的解码器将指令解码为经解码的指令;
通过硬件处理器检测指令中的安全检查字段;
通过硬件处理器基于安全检查字段,从多个安全检查策略中确定要为潜在地被错误推测的执行而实施的安全检查策略;
通过硬件处理器对指令执行安全检查策略的一个或多个相关联的检查,以确定该指令是否潜在地被错误推测;
当硬件处理器根据一个或多个相关联的检查而不将指令视为安全的时,调度该指令以供执行;
当硬件处理器根据一个或多个相关联的检查而将指令视为安全的时,省略该指令;和
用硬件处理器的执行单元执行被调度以供执行的指令。
10. 根据示例9所述的方法,其中,所述安全检查字段是编译器提供的提示。
11. 根据示例9所述的方法,其中,所述执行包括对所述指令的一组相关联的存储器访问执行所述安全检查策略的一个或多个相关联的检查。
12. 根据示例9所述的方法,其中,所述安全检查策略是存储器安全检查策略。
13. 根据示例9所述的方法,其中,所述安全检查策略是类型安全检查策略。
14. 根据示例9所述的方法,其中,所述安全检查策略的一个或多个相关联的检查包括存储器安全检查和类型安全检查。
15. 根据示例9所述的方法,其中,所述一个或多个相关联的检查小于针对所述硬件处理器的架构规范的完整一致性检查。
16. 根据示例9所述的方法,其中,所述指令是与按照程序顺序的后续存储器访问指令相关联的安全检查指令。
示例17. 一种存储代码的非暂时性机器可读介质,所述代码当被机器执行时使机器执行一种方法,包括:
用硬件处理器的解码器将指令解码为经解码的指令;
通过硬件处理器检测指令中的安全检查字段;
通过硬件处理器基于安全检查字段,从多个安全检查策略中确定要为潜在地被错误推测的执行而实施的安全检查策略;
通过硬件处理器对指令执行安全检查策略的一个或多个相关联的检查,以确定该指令是否潜在地被错误推测;
当硬件处理器根据一个或多个相关联的检查而不将指令视为安全的时,调度该指令以供执行;
当硬件处理器根据一个或多个相关联的检查而将指令视为安全的时,省略该指令;和
用硬件处理器的执行单元执行被调度以供执行的指令。
18. 根据示例17所述的非暂时性机器可读介质,其中,所述安全检查字段是编译器提供的提示。
19. 根据示例17所述的非暂时性机器可读介质,其中,所述执行包括对所述指令的一组相关联的存储器访问执行安全检查策略的一个或多个相关联的检查。
20. 根据示例17所述的非暂时性机器可读介质,其中,所述安全检查策略是存储器安全检查策略。
21. 根据示例17所述的非暂时性机器可读介质,其中,所述安全检查策略是类型安全检查策略。
22. 根据示例17所述的非暂时性机器可读介质,其中,所述安全检查策略的一个或多个相关联的检查包括存储器安全检查和类型安全检查。
23. 根据示例17所述的非暂时性机器可读介质,其中,所述一个或多个相关联的检查小于针对所述硬件处理器的架构规范的完整一致性检查。
24. 根据示例17所述的非暂时性机器可读介质,其中,所述指令是与按照程序顺序的后续存储器访问指令相关联的安全检查指令。
在又一个实施例中,一种装置包括数据存储设备,该数据存储设备存储代码,该代码在通过硬件处理器执行时使硬件处理器执行本文公开的任何方法。设备可以如详细描述中所描述那样。方法可以如详细描述中所描述那样。
指令集可以包括一个或多个指令格式。给定的指令格式可以定义各种字段(例如,位数,位的位置),以便除其他之外尤其指定要执行的操作(例如,操作码)和要对其执行该操作的(一个或多个)操作数和/或(一个或多个)其他数据字段(例如,掩码)。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包括的字段通常具有相同的顺序,但是至少一些具有不同的位位置,因为其包括的字段较少)和/或定义为具有以不同方式解释的给定字段。因此,ISA的每个指令使用给定指令格式表示(并且,如果定义,则在该指令格式的给定的一个指令模板中)并且包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定操作码和指令格式,该指令格式包括用于指定所述操作码的操作码字段和用于选择操作数的操作数字段(source1/destination和source2)(源1/目的地和源2);并且该ADD指令在指令流中的出现将在操作数字段中具有选择特定操作数的特定内容。已发布和/或公开了一组称为高级矢量扩展(AVX)(AVX1和AVX2)并使用矢量扩展(VEX)编码方案(例如,参见Intel®64和IA-32架构软件开发人员手册,2018年11月;并且参见Intel®架构指令集扩展编程参考,2018年10月)的SIMD扩展。
示例性指令格式
本文描述的(一个或多个)指令的实施例可以以不同格式体现。另外,以下详述示例性系统、架构和管线。所述(一个或多个)指令的实施例可以在这样的系统、架构和管线上执行,但不限于详细说明的那些。
通用矢量友好指令格式
矢量友好指令格式是适合于矢量指令的指令格式(例如,存在专用于矢量操作的某些字段)。虽然描述了通过矢量友好指令格式支持矢量和标量操作二者的实施例,但是替代实施例仅使用矢量友好指令格式的矢量操作。
图5A-5B是图示根据本公开的实施例的通用矢量友好指令格式及其指令模板的框图。图5A是图示根据本公开的实施例的通用矢量友好指令格式及其A类指令模板的框图;而图5B是图示根据本公开的实施例的通用矢量友好指令格式及其B类指令模板的框图。具体来说,针对通用矢量友好指令格式500定义A类和B类指令模板,A类和B类指令模板二者都不包括存储器访问505指令模板和存储器访问520指令模板。在矢量友好指令格式的上下文中术语“通用”指代不与任何特定指令集边界的指令格式。
同时将描述其中的矢量友好指令格式支持以下内容的本公开的实施例:64字节矢量操作数长度(或者大小)与32位(4字节)或64位(8字节)数据元素宽度(或大小)(并且因此,64字节矢量由16个双字大小的元素组成,或者替代地由8个四字大小的元素组成);64字节矢量操作数长度(或大小)与16位(2字节)或8位(1字节)数据元素宽度(或大小);32字节矢量操作数长度(或大小)与32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小);以及16字节矢量操作数长度(或大小)与32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小);替代实施例可以支持更多、更少和/或不同的矢量操作数大小(例如,256字节矢量操作数)与更多、更少或不同数据元素宽度(例如,128位(16字节)数据元素宽度)。
图5A中的A类指令模板包括:1)在无存储器访问505指令模板内,示出了无存储器访问、全舍入控制类型操作510指令模板和无存储器访问、数据变换类型操作515指令模板;以及2)在存储器访问520指令模板内,示出了存储器访问、临时性525指令模板和存储器访问、非临时性530指令模板。图5B中的B类指令模板包括:1)在无存储器访问505指令模板内,示出了无存储器访问、写掩蔽控制、部分舍入控制类型操作512指令模板和无存储器访问、写掩蔽控制、VSIZE类型操作517指令模板;以及2)在存储器访问520指令模板内,示出了存储器访问、写掩蔽控制527指令模板。
通用矢量友好指令格式500包括按照图5A-5B中所图示的顺序在下面列出的以下字段。
格式字段540-该字段中的特定值(指令格式标识符值)唯一地标识矢量友好指令格式,并因此指令以矢量友好指令格式在指令流中出现。因此,该字段是可选的,因为对于仅具有通用矢量友好指令格式的指令集来说它是不被需要的。
基本操作字段542-其内容区分不同的基本操作。
寄存器索引字段544-其内容直接或通过地址生成来指定源和目标操作数的位置,无论它们在寄存器中还是在存储器中。这些包括足够数量的位以从P×Q(例如32×512,16×128,32×1024,64×1024)的寄存器堆中选择N个寄存器。虽然在一个实施例中,N可以是多达三个源和一个目的地寄存器,但是替代实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多达两个源,其中这些源中的一个也充当目的地,可以支持多达三个源,其中这些源中的一个也充当目的地,可以支持多达两个源和一个目的地)。
修饰符字段546-其内容区分通用矢量指令格式中指定存储器访问的指令的出现与不指定存储器访问的指令的出现;也就是说,在无存储器访问505指令模板和存储器访问520指令模板之间进行区分。存储器访问操作读取和/或写入到存储器层级(在一些情况下使用寄存器中的值指定源和/或目的地地址),而无存储器访问操作不读取和/或写入到存储器层级(例如,源和目的地是寄存器)。虽然,在一个实施例中,该字段还在三个不同方式之间进行选择以执行存储器地址计算,但是替代实施例可以支持更多,更少或不同的方式来执行存储器地址计算。
扩充操作字段550-其内容区分除了基本操作之外还要执行各种不同操作中的哪一个。该字段是专用于上下文的。在本公开的一个实施例中,该字段被划分成类字段568、α字段552和β字段554。扩充操作字段550允许在单个指令中而不是2、3或4个指令中执行共同操作组。
缩放字段560-其内容允许缩放索引字段的内容以用于存储器地址生成(例如,用于使用2scale*索引+基本的地址生成)。
位移字段562A-其内容用作存储器地址生成的一部分(例如,用于使用2scale*索引+基本+位移的地址生成)。
位移因数字段562B(注意,位移字段562A直接在位移因数字段562B上的并置指示使用一个或另一个)-其内容用作地址生成的一部分;它指定位移因数,该位移因数按照存储器访问的大小(N)被缩放-其中N是存储器访问中的字节数(例如,用于使用2scale*索引+基本+经缩放的位移的地址生成)。忽略冗余的低顺序位,并且因此,位移因数字段的内容乘以存储器操作数总大小(N),以便生成用于计算有效地址的最终位移。N的值由处理器硬件在运行时基于完整操作码字段574(本文稍后描述)和数据操纵字段554C来确定。位移字段562A和位移因数字段562B是可选的,因为它们不用于无存储器访问505指令模板和/或不同实施例可以仅实现两个中的一个或两个都不实现。
数据元素宽度字段564-其内容区分要使用多个数据元素宽度中的哪一个(在一些实施例中用于所有指令;在其他实施例中仅用于一些指令)。该字段是可选的,因为如果仅使用操作码的某一方面支持一个数据元素宽度和/或支持多个数据元素宽度,它是不被需要的。
写掩蔽字段570-其内容基于每个数据元素位置来控制目标矢量操作数中的所述数据元素位置是否反映了基本操作和扩充操作的结果。A类指令模板支持合并-写掩蔽,而B类指令模板支持合并-写掩蔽和归零-写掩蔽二者。合并时,矢量掩蔽允许在执行任何操作(由基本操作和扩充操作指定)期间保护目的地中的任何元素集免于更新;在另一个实施例中,保留对应掩蔽位具有0的目的地的每个元素的旧值。相反,当归零时,矢量掩蔽允许在执行任何操作(由基本操作和扩充操作指定)期间将目的地中的任何元素集归零;在一个实施例中,当对应的掩蔽位具有0值时,目的地的元素被设置为0。该功能的子集是控制正在执行的操作的矢量长度(即,从第一个到最后一个被修改的元素的跨度)的能力;然而,被修改的元素不必是连续的。因此,写掩蔽字段570允许部分矢量操作,包括加载、存储、算术、逻辑等。虽然描述了其中写掩蔽字段570的内容选择包含要使用的写掩蔽(并且因此写掩蔽字段570的内容间接标识要执行的所述掩蔽)的多个写掩蔽寄存器中的一个的本公开的实施例,但是替代或者附加的替代实施例允许掩蔽写字段570的内容直接指定要执行的掩蔽。
立即数字段572-其内容允许立即数的指定。该字段是可选的,因为它不存在于不支持立即数的通用矢量友好格式的实现中,并且它不存在于不使用立即数的指令中。
类字段568-其内容区分不同类的指令。参考图5A-B,该字段的内容在A类和B类指令之间进行选择。在图5A-B中,圆角方块用于指示字段中存在特定值(例如,图5A-B中分别为针对类字段568的A类568A和B类568B)。
A类指令模板
在A类的非存储器访问505指令模板的情况下,α字段552被解释为RS字段552A,其内容区分要执行不同扩充操作类型中的哪一个(例如,舍入552A.1和数据变换552A.2分别被指定用于无存储器访问、舍入类型操作510和无存储器访问、数据变换类型操作515指令模板),而β字段554区分要执行指定类型的哪个操作。在无存储器访问505指令模板中,不存在缩放字段560、位移字段562A和位移缩放字段562B。
无存储器访问指令模板-全舍入控制类型操作
在无存储器访问全舍入控制类型操作510指令模板中,β字段554被解释为舍入控制字段554A,其(一个或多个)内容提供静态舍入。虽然在本公开的所述实施例中,舍入控制字段554A包括抑制所有浮点异常(SAE)字段556和舍入操作控制字段558,但是替代实施例可以支持可以将全部这些概念编码到同一字段中或仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入操作控制字段558)。
SAE字段556-其内容区分是否禁用异常事件报告;当SAE字段556的内容表明启用了抑制时,给定指令不会报告任何种类的浮点异常标志,并且不会引发任何浮点异常处置程序。
舍入操作控制字段558-其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入和向最近舍入)。因此,舍入操作控制字段558允许基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段550的内容覆盖该寄存器值。
无存储器访问指令模板-数据变换类型操作
在无存储器访问数据变换类型操作515指令模板中,β字段554被解释为数据变换字段554B,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、混合(swizzle)、广播)。
在A类的存储器访问520指令模板的情况下,α字段552被解释为驱逐提示字段552B,其内容区分将使用哪一个驱逐提示(在图5A中,临时性552B.1和非临时性552B.2分别被指定用于存储器访问、临时性525指令模板和存储器访问、非临时性530指令模板),而β字段554被解释为数据操纵字段554C,其内容区分要执行多个数据操纵操作(也称为基元)中的哪一个(例如,无操纵;广播;源的上转换;以及目的地的下转换)。存储器访问520指令模板包括缩放字段560,并且可选地包括位移字段562A或位移缩放字段562B。
矢量存储器指令在转换支持的情况下执行从存储器的矢量加载和向存储器的矢量存储。与常规矢量指令一样,矢量存储器指令以逐数据元素的方式从/向存储器传输数据,其中实际传输的元素由被选择作为写掩码的矢量掩码的内容规定。
存储器访问指令模板-临时性
临时性数据是可能足够快地被重新使用从而受益于高速缓存的数据。然而,这是一个提示,并且不同处理器可以以不同的方式实现它,包括完全忽略该提示。
存储器访问指令模板-非临时性
非临时性数据是如下数据:不太可能足够快地被重新使用从而受益于在第一级高速缓存器中高速缓存,并且应该被给予驱逐的优先权。然而,这是一个提示,并且不同的处理器可以以不同的方式实现它,包括完全忽略该提示。
B类指令模板
在B类的指令模板的情况下,α字段552被解释为写掩蔽控制(Z)字段552C,其内容区分由写掩蔽字段570控制的写掩码应该是合并还是归零。
在B类的非存储器访问505指令模板的情况下,β字段554的一部分被解释为RL字段557A,其内容区分要执行不同扩充操作类型中的哪一个(例如,舍入557A.1和矢量长度(VSIZE)557A.2分别被指定用于无存储器访问、写掩蔽控制、部分舍入控制类型操作512指令模板和无存储器访问、写掩蔽控制、VSIZE类型操作517指令模板),而β字段554的其余部分区分要执行指定类型的哪个操作。在无存储器访问505指令模板中,不存在缩放字段560、位移字段562A和位移缩放字段562B。
在无存储器访问、写掩蔽控制、部分舍入控制类型操作510指令模板中,β字段554的其余部分被解释为舍入操作字段559A并且异常事件报告被禁用(给定指令不报告任何种类的浮点异常标志,并且不会引发任何浮点异常处置程序)。
舍入操作控制字段559A-正如舍入操作控制字段558一样,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入和向最近舍入)。因此,舍入操作控制字段559A允许基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段550的内容覆盖该寄存器值。
在无存储器访问、写掩蔽控制、VSIZE类型操作517指令模板中,β字段554的其余部分被解释为矢量长度字段559B,其内容区分要对多个数据矢量长度(例如,128、256或512字节)中的哪一个执行。
在B类的存储器访问520指令模板的情况下,β字段554的一部分被解释为广播字段557B,其内容区分是否要执行广播类型数据操纵操作,而β字段554的其余部分被解释为矢量长度字段559B。存储器访问520指令模板包括缩放字段560、并且可选地包括位移字段562A或位移缩放字段562B。
关于通用矢量友好指令格式500,示出了完整操作码字段574,完整操作码字段574包括格式字段540、基本操作字段542和数据元素宽度字段564。尽管示出了其中完整操作码字段574包括所有这些字段的一个实施例,但在不支持所有这些字段的实施例中,完整操作码字段574包括非全部这些字段。完整操作码字段574提供操作代码(操作码)。
扩充操作字段550、数据元素宽度字段564和写掩蔽字段570允许在通用矢量友好指令格式中基于每个指令指定这些特征。
写掩蔽字段和数据元素宽度字段的组合创建类型化指令,因为它们允许基于不同数据元素宽度来应用掩蔽。
在A类和B类内找到的各种指令模板在不同情况下是有益的。在本公开的一些实施例中,处理器内的不同处理器或不同核心可以仅支持A类,仅支持B类或支持这两类。例如,预期用于通用计算的高性能通用无序核心可能仅支持B类,主要预期用于图形和/或科学(吞吐量)计算的核心可能仅支持A类,并且预期用于这两者的核心可以支持这两者(当然,具有来自两个类的一些模板和指令但不是来自这两个类的所有模板和指令的某种混合的核心在本公开的范围内)。此外,单个处理器可以包括多个核心,所有核心都支持相同的类,或者其中不同的核心支持不同的类。例如,在具有分离的图形和通用核心的处理器中,预期主要用于图形和/或科学计算的图形核心之一可以仅支持A类,而一个或多个通用核心可以是仅支持B类的高性能通用核心,具有预期用于通用计算的无序执行和寄存器重命名。不具有分离图形核心的另一个处理器可以包括再一个通用有序或无序核心,该通用有序或无序核心支持A类和B类二者。当然,在本发明的不同实施例中,来自一个类的特征也可以在另一类中实现。用高级语言编写的程序将被形成为(例如,仅被及时编译或静态编译)各种不同的可执行形式,包括:1)仅具有由用于执行的目标处理器支持的(一个或多个)类的指令的形式;或者2)具有使用所有类的指令的不同组合编写的替代例程的并且具有控制流程代码的形式,该控制流程代码基于当前正在执行代码的处理器所支持的指令来选择要执行的例程。
示例性特定矢量友好指令格式
图6是图示根据本公开的实施例的示例性特定矢量友好指令格式的框图。图6示出特定矢量友好指令格式600,其在指定字段的位置、大小、解释和顺序以及那些字段中的一些的值的意义上是特定的。特定矢量友好指令格式600可以用于扩展x86指令集,并且因此字段中的一些与现有x86指令集及其扩展(例如AVX)中使用的那些相似或相同。此格式与具有扩展的现有x86指令集的前缀编码字段、实数操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即数字段保持一致。图示了来自图6的字段映射到的来自图5的字段。
应当理解,尽管出于说明性目的,在通用矢量友好指令格式500的上下文中参考特定矢量友好指令格式600描述了本公开的实施例,但是本公开不限于特定矢量友好指令格式600,除非有声明。例如,通用矢量友好指令格式500设想了各个字段的各种可能的大小,而特定矢量友好指令格式600被示出为具有特定大小的字段。作为具体示例,虽然将数据元素宽度字段564图示为特定矢量友好指令格式600中的一个位字段,但是本公开内容不限于此(即,通用矢量友好指令格式500设想数据元素宽度字段564的其他大小)。
通用矢量友好指令格式500包括以下以图6A中图示的顺序列出的以下字段。
EVEX前缀(字节0-3)602-以四字节形式编码。
格式字段540(EVEX字节0,位[7:0])-第一字节(EVEX字节0)是格式字段540,并且它包含0x62(在本公开的一个实施例中用于区分矢量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供特定能力的多个位字段。
REX字段605(EVEX字节1,位[7-5])–包括EVEX.R位字段(EVEX字节1,位[7]–R),EVEX.X位字段(EVEX字节1,位[6]–X)和557BEX字节1,位[5]–B)。EVEX.R、EVEX.X和EVEX.B位字段提供与对应VEX位字段相同的功能,并使用1s补码形式进行编码,即ZMM0编码为1111B,ZMM15编码为0000B。如本领域中已知的,指令的其他字段对寄存器索引的低三位(rrr、xxx和bbb)进行编码,因此可以通过添加EVEX.R、EVEX.X和EVEX.B来形成Rrrr、Xxxx和Bbbb。
REX'字段510–这是REX'字段510的第一部分,并且是EVEX.R'位字段(EVEX字节1,位[4] -R'),其用于对扩展的32寄存器集的高16或低16编码。在本公开的一个实施例中,该位连同如以下所指示的其他位以位反转格式存储,以(在众所周知的x86 32位模式下)区别于BOUND指令,该指令的实数操作码字节为62,但是在MOD R/M字段(如下所述)中不接受MOD字段中的值11;本公开的替代实施例不以反转格式存储此位和下面的其他指示位。值1用于对低16寄存器进行编码。换句话说,R'Rrrr是通过组合EVEX.R’、EVEX.R和来自其他字段的其他RRR形成的。
操作码映射字段615(EVEX字节1,位[3:0]–mmmm)–其内容编码隐含的前导操作码字节(0F、0F 38或0F 3)。
数据元素宽度字段564(EVEX字节2,位[7]–W)-由符号EVEX.W表示。EVEX.W用于定义数据类型(32位数据元素或64位数据元素)的粒度(大小)。
EVEX.vvvv 620(EVEX字节2,位[6:3] -vvvv)-EVEX.vvvv的作用可以包括以下内容:1)EVEX.vvvv编码第一个源寄存器操作数,以反转(1s补码)形式指定,并且对于具有2个或更多源操作数的指令有效;2)EVEX.vvvv对目的地寄存器操作数进行编码,以1s补码形式指定用于某些矢量位移;或3)EVEX.vvvv不对任何操作数进行编码,该字段被保留,并且应包含1111b。因此,EVEX.vvvv字段620对以反转(1s补码)形式存储的第一源寄存器说明符的4个低顺序位进行编码。取决于指令,使用额外不同的EVEX位字段将说明符的大小扩展到32个寄存器。
EVEX.U 568类字段(EVEX字节2,位[2] -U)–如果EVEX.U = 0,则它指示A类或EVEX.U0;如果EVEX.U = 1,则它指示B类或EVEX.U1。
前缀编码字段625(EVEX字节2,位[1:0] -pp)–为基本操作字段提供附加位。除了提供对EVEX前缀格式中的传统SSE指令的支持之外,这还具有压缩SIMD前缀的益处(EVEX前缀只需要2位,而不是需要一个字节来表达SIMD前缀)。在一个实施例中,为了支持使用既以传统格式又以EVEX前缀格式的SIMD前缀(66H、F2H、F3H)的传统SSE指令,将这些传统SIMD前缀编码到SIMD前缀编码字段中;并且在被提供给解码电路的PLA之前,在运行时将其扩展为传统SIMD前缀(因此PLA可以执行这些传统指令的传统格式和EVEX格式二者,而无需进行修改)。尽管较新的指令可以将EVEX前缀编码字段的内容直接用作操作码扩展,但是某些实施例以相似的方式扩展以用于一致性,但允许这些传统SIMD前缀指定不同的含义。替代实施例可以重新设计PLA以支持2位SIMD前缀编码,并且因此不需要扩展。
α字段552(EVEX字节3,位[7]–EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写掩蔽控制和EVEX.N;也用α图示)–如前所述,该字段是上下文特定的。
β字段554(EVEX字节3,位[6:4]-SSS,也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ图示)–如前所述,该字段是上下文特定的。
REX'字段510 –这是REX'字段的其余部分,并且是EVEX.V'位字段(EVEX字节3,位[3] -V'),其可以用于对扩展的32寄存器集的高16或低16进行编码。该位以位反转格式存储。值1用于对低16寄存器进行编码。换句话说,V'VVVV是通过组合EVEX.V'、EVEX.vvvv形成的。
写掩蔽字段570(EVEX字节3,位[2:0]-kkk)-其内容指定了如前所述的写掩蔽寄存器中的寄存器的索引。在本公开的一个实施例中,特定值EVEX.kkk=000具有特殊的行为,这意味着没有对特定指令使用写掩码(这可以以各种方式来实现,包括使用硬连线到所有掩码的写掩码。或使掩蔽硬件旁路的硬件)。
实数操作码字段630(字节4)也称为操作码字节。在此字段中指定操作码的一部分。
MOD R/M字段640(字节5)包括MOD字段642、Reg字段644和R/M字段646。如上所述,MOD字段642的内容在存储器访问操作和非存储器访问操作之间进行区分。Reg字段644的作用可以概括为两种情况:对目的地寄存器操作数或源寄存器操作数进行编码,或者被当作操作码扩展,而不用于对任何指令操作数进行编码。R/M字段646的作用可以包括以下:对引用存储器地址的指令操作数进行编码,或者对目的地寄存器操作数或源寄存器操作数进行编码。
缩放、索引、基本(SIB)字节(字节6)-如前所述,缩放字段550的内容用于存储器地址生成。SIB.xxx 654和SIB.bbb 656–这些字段的内容先前已关于寄存器索引Xxxx和Bbbb进行了引用。
位移字段562A(字节7-10)–当MOD字段642包含10时,字节7-10是位移字段562A,并且它与传统32位位移(disp32)相同地工作,并且以字节粒度工作。
位移因数字段562B(字节7)–当MOD字段642包含01时,字节7是位移因数字段562B。该字段的位置与传统x86指令集8位位移(disp8)的位置相同,其以字节粒度工作。由于disp8是符号扩展的,因此它只能寻址-128到127字节之间的偏移;就64字节高速缓存行而言,disp8使用8位,可以将其设置为仅四个真正有用的值-128、-64、0和64;由于通常需要更大的范围,因此使用disp32;然而,disp32需要4个字节。与disp8和disp32相比,位移因数字段562B是disp8的重新解释;当使用位移因数字段562B时,实际位移由位移因数字段的内容乘以存储器操作数访问的大小(N)确定。这种类型的位移称为disp8*N。这减少平均指令长度(用于位移的单个字节,但具有大得多的范围)。这种压缩后的位移是基于如下的假设:有效位移是存储器访问粒度的倍数,并且因此,不需要对地址偏移的冗余较低顺序位进行编码。换句话说,位移因数字段562B替代了传统的x86指令集8位位移。因此,位移因数字段562B以与x86指令集8位位移相同的方式编码(因此,在ModRM/SIB编码规则中没有变化),唯一的例外是disp8被重载为disp8*N。换句话说,编码规则或编码长度没有变化,只有硬件对位移值的解释(其需要将位移按存储器操作数的大小进行缩放以获得逐字节地址偏移)中有变化。立即字段572如前所述操作。
完整的操作码字段
图6B是图示根据本公开的一个实施例的组成完整操作码字段574的特定矢量友好指令格式600的字段的框图。具体而言,完整操作码字段574包括格式字段540、基本操作字段542和数据元素宽度(W)字段564。基本操作字段542包括前缀编码字段625、操作码映射字段615和真实操作码字段630。
寄存器索引字段
图6C是图示根据本公开的一个实施例的构成寄存器索引字段544的特定矢量友好指令格式600的字段的框图。具体地,寄存器索引字段544包括REX字段605、REX'字段610、MODR/M.reg字段644、MODR/M.r/m字段646、VVVV字段620、xxx字段654和bbb字段656。
扩充操作领域
图6D是图示根据本公开的一个实施例的构成增强操作字段550的特定矢量友好指令格式600的字段的框图。当类(U)字段568包含0时,它表示EVEX.U0(A类 568A);当它包含1,它表示EVEX.U1(B类568B)。当U = 0且MOD字段642包含11(表示无存储器访问操作)时,α字段552(EVEX字节3,位[7]–EH)被解释为rs字段552A。当rs字段552A包含1(舍入552A.1)时,将β字段554(EVEX字节3,位[6:4] -SSS)解释为舍入控制字段554A。舍入控制字段554A包括一位SAE字段556和两位舍入操作字段558。当rs字段552A包含0(数据变换552A.2)时,β字段554(EVEX字节3,位[6:4] -SSS)被解释为三位数据变换字段554B。当U = 0且MOD字段642包含00、01或10(表示存储器访问操作)时,α字段552(EVEX字节3,位[7]–EH)被解释为驱逐提示(EH)字段552B,并且β字段554(EVEX字节3,位[6:4] -SSS)被解释为三位数据操纵字段554C。
当U= 1时,将α字段552(EVEX字节3,位[7]–EH)解释为写掩蔽控制(Z)字段552C。当U=1并且MOD字段642包含11(表示无存储器访问操作)时,将β字段554的一部分(EVEX字节3,位[4] -S0)解释为RL字段557A;当它包含1(舍入557A.1)时,其余的β字段554(EVEX字节3,位[6-5] -S2-1)被解释为舍入操作字段559A,而当RL字段557A包含0(VSIZE 557.A2)时,β字段554的其余部分(EVEX字节3,位[6-5] -S2-1)被解释为矢量长度字段559B(EVEX字节3,位[6-5])-L1-0)。当U=1且MOD字段642包含00、01或10(表示存储器访问操作)时,将β字段554(EVEX字节3,位[6:4] -SSS)解释为矢量长度字段559B (EVEX字节3,位[6-5] -L1-0)和广播字段557B(EVEX字节3,位[4] -B)。
示例性寄存器架构
图7是根据本公开的一个实施例的寄存器架构700的框图。在所图示的实施例中,存在32个宽度为512位的矢量寄存器710;这些寄存器被称为为zmm0到zmm31。较低16个zmm寄存器的较低顺序256位在寄存器ymm0-16上重叠。较低16个zmm寄存器的较低顺序128位(ymm寄存器的较低顺序128位)在寄存器xmm0-15上重叠。特定矢量友好指令格式600在这些重叠的寄存器文件上进行操作,如下表中所图示的。
Figure 797500DEST_PATH_IMAGE007
换句话说,矢量长度字段559B在最大长度和一个或多个其他较短的长度之间进行选择,其中每个这样的较短的长度是先前长度的一半长度;并且没有矢量长度字段559B的指令模板在最大矢量长度上操作。此外,在一个实施例中,特定矢量友好指令格式600的B类指令模板对紧缩或标量单/双精度浮点数据和紧缩或标量整数数据进行操作。标量操作是对zmm/ymm/xmm寄存器中最低顺序的数据元素位置执行的操作;取决于实施例,较高顺序的数据元素位置或者与指令之前的位置相同或者为零。
写掩蔽寄存器715-在所图示的实施例中,存在8个写掩蔽寄存器(k0至k7),每个写掩蔽寄存器的大小为64位。在替代实施例中,写掩蔽寄存器715的大小为16位。如前所述,在本公开的一个实施例中,矢量掩码寄存器k0不能用作写掩码;当通常将指示k0的编码用于写掩码时,它选择硬连线的写掩码0xFFFF,从而有效地禁用了该指令的写掩蔽。
通用寄存器725-在所示实施例中,存在16个64位通用寄存器,它们与现有的x86寻址模式一起使用以寻址存储器操作数。这些寄存器由名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15引用。
标量浮点堆栈寄存器堆(x87堆栈)745,在其上MMX紧缩整数平坦寄存器堆750被别名化-在所示实施例中,x87堆栈是八元素堆栈,用于使用x87指令集扩展对32/64/80位浮点数据执行标量浮点操作;而MMX寄存器用于对64位紧缩整数数据执行操作,以及针对在MMX和XMM寄存器之间执行的一些操作保持操作数。
本公开的替代实施例可以使用更宽或更窄的寄存器。另外,本公开的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。
示例性核心架构、处理器和计算机架构
处理器核心可以以不同方式实现,可以被实现用于不同的目的,并且可以在不同的处理器中实现。例如,这种核心的实现可以包括:1)预期用于通用计算的通用有序核心;2)预期用于通用计算的高性能通用无序核心;3)预期主要用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现可以包括:1)CPU,包括预期用于通用计算的一个或多个通用有序核心和/或预期用于通用计算的一个或多个通用无序核心;2)协处理器,包括预期主要用于图形和/或科学(吞吐量)的一个或多个专用核心。这种不同的处理器导致不同的计算机系统架构,不同的计算机系统架构可以包括:1)协处理器在与CPU分离的芯片上;2)协处理器在与CPU相同的封装中的分离管芯上;3)协处理器在与CPU相同的管芯上(在这种情况下,这种协处理器有时被称为专用逻辑,诸如集成的图形和/或科学(吞吐量)逻辑,或者称为专用核心);以及4)片上系统,其可以在同一管芯上包括所描述的CPU(有时称为(一个或多个)应用核心或(一个或多个)应用处理器)、上述协处理器和附加功能。接下来描述示例性核心架构,接着描述示例性处理器和计算机架构。
示例性核心架构
有序和无序的核心框图
图8A是图示根据本公开的实施例的示例性有序管线和示例性寄存器重命名、无序发布/执行管线二者的框图。图8B是图示根据本公开的实施例的要包括在处理器中的有序架构核心的示例性实施例和示例性寄存器重命名、无序发布/执行架构核心二者的框图。图8A-B中的实线框图示了有序管线和有序核心,而可选添加的虚线框图示了寄存器重命名、无序发布/执行管线和核心。考虑到有序方面是无序方面的子集,将描述无序方面。
在图8A中,处理器管线800包括提取阶段802、长度解码阶段804、解码阶段806、分配阶段808、重命名阶段810、调度(也称为分派或发布)阶段812、寄存器读取/存储器读取阶段814、执行阶段816、写回/存储器写入阶段818、异常处置阶段822和提交阶段824。
图8B示出了处理器核心890,包括耦合到执行引擎单元850的前端单元830,并且前端单元830和执行引擎单元850两者都耦合到存储器单元870。核心890可以是精简指令集计算(RISC)核心、复杂指令集计算(CISC)核心、超长指令字(VLIW)核心或者混合或交替核心类型。作为又另一选择,核心890可以是专用核心,诸如例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(GPGPU)核心、图形核心等等。
前端单元830包括耦合到指令高速缓存单元834的分支预测单元832,指令高速缓存单元834耦合到指令转变后备缓冲器(TLB)836,指令转换后备缓冲器(TLB)836耦合到指令提取单元838,指令提取单元838耦合到解码单元840。解码单元840(例如,解码电路)可以解码指令(例如,宏指令),并且生成作为输出的一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号,上述各项从原始指令被解码,或以其他方式反映原始指令或从原始指令得出。可以使用各种不同的机制来实现解码单元840。合适机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核心890包括微代码ROM或存储用于某些宏指令的微代码的其他介质(例如,在解码单元840中或者在前端单元830内)。解码单元840耦合到执行引擎单元850中的重命名/分配器单元852。
执行引擎单元850包括重命名/分配器单元852,重命名/分配器单元852耦合到退出单元854和由一个或多个调度器单元856构成的集合。(一个或多个)调度器单元856表示任何数量的不同调度器,包括保留站、中央指令窗等。(一个或多个)调度器单元856耦合到(一个或多个)物理寄存器堆单元858。(一个或多个)物理寄存器堆单元858中的每一个表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型,诸如标量整数、标量浮点、紧缩整数、紧缩浮点、矢量整数、矢量浮点、状态(例如,作为待执行的下一个指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器堆单元858包括矢量寄存器单元、写掩蔽寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构矢量寄存器、矢量掩蔽寄存器和通用寄存器。(一个或多个)物理寄存器堆单元858被退出单元854覆盖,以图示可以实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重新排序缓冲器和(一个或多个)退出寄存器堆;使用(一个或多个)未来堆、(一个或多个)历史缓冲器和(一个或多个)退出寄存器堆;使用寄存器映射和寄存器池;等等)。退出单元854和(一个或多个)物理寄存器堆单元858耦合到(一个或多个)执行集群860。(一个或多个)执行集群860包括由一个或多个执行单元862(例如,执行电路)构成的集合和由一个或多个存储器访问单元864构成的集合。执行单元862可以执行各种操作(例如,位移、加法、减法、乘法)和各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、矢量整数、矢量浮点)。虽然一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可以仅包括一个执行单元或全都执行所有功能的多个执行单元。(一个或多个)调度器单元856、(一个或多个)物理寄存器堆单元858和(一个或多个)执行集群860被示出为可能是多个,因为某些实施例针对某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/紧缩整数/紧缩浮点/矢量整数/矢量浮点管线、和/或存储器访问管线,存储器访问管线均具有其自己的调度器单元、(一个或多个)物理寄存器堆单元和/或执行集群-并且在单独的存储器访问管线的情况下,实现某些实施例,在这些实施例中仅该管线的执行集群具有(一个或多个)存储器访问单元864)。还应该理解,在使用单独的管线的情况下,这些管线中的一个或多个可以是无序发布/执行而其余的是有序的。
存储器访问单元864的集合耦合到存储器单元870,存储器单元870包括耦合到数据高速缓存单元874的数据TLB单元872,数据高速缓存单元874耦合到级别2(L2)高速缓存单元876。在一个示例性实施例中,存储器访问单元864可以包括加载单元、存储地址单元和存储数据单元,加载单元、存储地址单元和存储数据单元中的每一个均耦合到存储器单元870中的数据TLB单元872。指令高速缓存单元834还耦合到存储器单元870中的级别2(L2)高速缓存单元876。L2高速缓存单元876耦合到一个或多个其他级别的高速缓存器并最终耦合到主存储器。
作为示例,示例性寄存器重命名、无序发布/执行核心架构可以如下实现管线800:1)指令提取838执行提取和长度解码阶段802和804;2)解码单元840执行解码阶段806;3)重命名/分配器单元852执行分配阶段808和重命名阶段810;4)(一个或多个)调度器单元856执行调度阶段812;5)(一个或多个)物理寄存器堆单元858和存储器单元870执行寄存器读取/存储器读取阶段814;执行集群860执行执行阶段816;6)存储器单元870和(一个或多个)物理寄存器堆单元858执行写回/存储器写入阶段818;7)各种单元可能涉及异常处置阶段822;以及8)退出单元854和(一个或多个)物理寄存器堆单元858执行提交阶段824。
核心890可以支持一个或多个指令集(例如,x86指令集(具有已经添加有更新版本的一些扩展);加利福尼亚州的尼维尔的MIPS技术的MIPS指令集;加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集(具有可选的附加扩展,诸如NEON),包括本文描述的(一个或多个)指令。在一个实施例中,核心890包括支持紧缩数据指令集扩展(例如,AVX1,AVX2)的逻辑,从而允许使用紧缩数据来执行许多多媒体应用所使用的操作。
应当理解,核心可以支持多线程(执行两个或更多个并行的操作或线程的集合),并且可以以各种方式这样做,这些方式包括时间划分多线程、同时多线程(其中单个物理核心为物理核心正在同时多线程运行的每个线程提供逻辑核心)或其组合(例如,时间划分提取和解码以及此后的同时多线程,诸如在Intel®超线程技术中)。
虽然在无序执行的上下文中描述了寄存器重命名,但是应当理解,寄存器重命名可以用在有序架构中。虽然所示处理器的实施例还包括分离的指令和数据高速缓存单元834/874以及共享的L2高速缓存单元876,但是替代实施例可以具有用于指令和数据二者的单个内部高速缓存器,诸如例如级别1(L1)内部高速缓存器或多级内部高速缓存器。在一些实施例中,系统可以包括内部高速缓存器和外部高速缓存器的组合,外部高速缓存器在核心和/或处理器外部。替代地,所有高速缓存器可以在核心和/或处理器外部。
具体示例性有序核心架构
图9A-B图示了更具体的示例性有序核心架构的框图,该核心将是芯片中的几个逻辑块(包括相同类型和/或不同类型的其他核心)之一。逻辑块根据应用通过高带宽互连网络(例如,环形网络)与一些固定功能逻辑、存储器I/O接口和其他必要的I/O逻辑通信。
图9A是根据本公开的实施例的单处理器核心以及其与管芯上互连网络902以及与其级别2(L2)高速缓存器904的本地子集的连接的框图。在一个实施例中,指令解码单元900支持具有紧缩数据指令集扩展的x86指令集。L1高速缓存器906允许对高速缓存存储器到标量和矢量单元中的低延迟访问。虽然在一个实施例中(为了简化设计),标量单元908和矢量单元910使用分离的寄存器集合(分别为标量寄存器912和矢量寄存器914),并且在它们之间传输的数据被写入存储器并且然后从级别1(L1)高速缓存器906中读回,本公开的替代实施例可以使用不同的方法(例如,使用单个寄存器集合或包括允许数据在两个寄存器堆之间传输而不被写入和读回的通信路径)。
L2高速缓存器904的本地子集是全局L2高速缓存器的一部分,全局L2高速缓存器被划分为分离的局部子集,每个处理器核心一个局部子集。每个处理器核心具有到其自己的L2高速缓存器904的本地子集的直接访问路径。由处理器核心读取的数据存储在其L2高速缓存器子集904中并且可以与其他处理器核心访问它们自己的本地L2高速缓存器子集并行地被快速访问。由处理器核心写入的数据存储在其自己的L2高速缓存器子集904中,并且视需要从其他子集冲刷掉。环形网络确保共享数据的相关性。环形网络是双向的,以允许诸如处理器核心、L2高速缓存器和其他逻辑块之类的代理在芯片内彼此通信。在一些实施例中,每个环形数据路径在每个方向上是1024位宽。
图9B是根据本公开的实施例的图9A中的处理器核心的一部分的展开视图。图5B包括L1高速缓存器904的L1数据高速缓存器906A部分,以及关于矢量单元910和矢量寄存器514的更多细节。具体地,矢量单元910是6宽度矢量处理单元(VPU)(参见16宽度ALU528),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。VPU支持利用混合单元920对寄存器输入进行混合,利用数值转换单元922A-B进行数值转换,以及利用复制单元924对存储器输入进行复制。写掩蔽寄存器926允许预测结果得到的矢量写操作。
图10是根据本公开的实施例的处理器1000的框图,处理器1000可以具有多于一个核心,可以具有集成存储器控制器,并且可以具有集成图形元件。图10中的实线框图示了处理器1000,处理器1000具有单个核心1002A、系统代理1010、由一个或多个总线控制器单元1016构成的集合,而可选添加的虚线框图示了替代处理器1000,该替代处理器1000具有多个核心1002A-N、系统代理单元1010中的由一个或多个集成存储器控制器单元1014构成的集合以及专用逻辑1008。
因此,不同实现的处理器1000可以包括:1)具有专用逻辑1008以及核心1002A-N的CPU,专用逻辑1008是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核心),核心1002A-N是一个或多个通用核心(例如,通用有序核心、通用无序核心、两者的组合);2)具有核心1002A-N的协处理器,核心1002A-N是预期主要用于图形和/或科学(吞吐量)的大量专用核心;以及3)具有核心1002A-N的协处理器,核心1002A-N是大量通用有序核心。因此,处理器1000可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量多集成核心(MIC)协处理器(包括30个或更多核心)、嵌入式处理器等。该处理器可以实现在一个或多个芯片上。处理器1000可以使用多种工艺技术中的任何工艺技术(诸如例如BiCMOS、CMOS或NMOS)在一个或多个衬底上实现和/或可以是所述衬底的一部分。
存储器层级包括核心1008A-N内一个或多个级别的高速缓存器、由一个或多个共享高速缓存单元1006构成的集合以及耦合到集成存储器控制器单元1014的集合的外部存储器(未示出)。共享高速缓存单元1006的集合可以包括一个或多个中级高速缓存器,诸如级别2(L2)、级别3(L3)、级别4(L4)或其他级别的高速缓存器、末级高速缓存器(LLC)和/或上述各项的组合。虽然在一个实施例中,基于环的互连单元612使集成图形逻辑1008、共享高速缓存单元1006的集合以及系统代理单元1010/(一个或多个)集成存储器控制器单元1014互连,但是替代实施例可以使用任何数量的公知技术用于使这些单元互连。在一个实施例中,在一个或多个高速缓存单元1006和核心1002-A-N之间保持相关性。
在一些实施例中,核心1002A-N中的一个或多个核心能够实现多线程。系统代理1010包括协调和操作核心1002A-N的那些部件。系统代理单元1010可包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括调节核心1002A-N和集成图形逻辑1008的功率状态所需的逻辑和部件。显示单元用于驱动一个或多个外部连接的显示器。
就架构指令集而言,核心1002A-N可以是同构的或异构的;也就是说,核心1002A-N中的两个或更多个核心可能能够执行相同的指令集,而其他核心可能能够仅执行该指令集的子集或不同的指令集。
示例性计算机架构
图11-14是示例性计算机架构的框图。用于膝上型计算机、台式机、手持式PC、个人数字助理、工程工作站、服务器、网络装置,网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器、手机、便携式媒体播放器、手持装置和各种其他电子装置的本领域已知的其他系统设计和配置也是适合的。通常,能够合并如本文所公开的处理器和/或其他执行逻辑的大量的各种系统或电子装置通常是适合的。
现在参考图11,示出的是根据本公开一个实施例的系统1100的框图。系统1100可以包括一个或多个处理器1110、1115,处理器1110、1115耦合到控制器集线器1120。在一个实施例中,控制器集线器1120包括图形存储器控制器集线器(GMCH)1190和输入/输出集线器(IOH)1150(其可以在分离的芯片上);GMCH1190包括耦合到存储器1140和协处理器1145的存储器和图形控制器;IOH1150将输入/输出(I/O)装置1160耦合到GMCH1190。替代地,存储器和图形控制器之一或二者都集成在处理器内(如本文所述),存储器1140和协处理器1145直接耦合到处理器1110,并且控制器集线器1120与IOH1150在单个芯片中。存储器1140可以包括推测管理器代码1140A,例如用于存储代码,所述代码当被执行时使处理器执行本公开的任何方法。
图11中用虚线表示附加处理器1115的可选性质。每个处理器1110、1115可以包括本文描述的一个或多个处理核心,并且可以是处理器1000的某个版本。
存储器1140可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或两者的组合。对于至少一个实施例,控制器集线器1120经由多点总线(诸如前端总线(FSB)、点对点接口或类似连接1195)与(一个或多个)处理器1110、1115通信。
在一个实施例中,协处理器1145是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。在一个实施例中,控制器集线器1120可以包括集成图形加速器。
在包括架构、微架构、热、功耗特性等的优点量度的范围方面,物理资源1110、1115之间可存在各种差异。
在一个实施例中,处理器1110执行控制通用类型的数据处理操作的指令。嵌入在指令内的可以是协处理器指令。处理器1110将这些协处理器指令标识为具有应该由所附接的协处理器1145执行的类型。因此,处理器1110将这些协处理器指令(或表示协处理器指令的控制信号)在协处理器总线或其他互连件上发布到协处理器1145。(一个或多个)协处理器1145接受并执行所接收的协处理器指令。
现在参考图12,所示出的是根据本公开的实施例的更具体的第一示例性系统1200的框图。如图12中所示出的,多处理器系统1200是点对点互连系统,并且包括经由点对点互连件1250耦合的第一处理器1270和第二处理器1280。处理器1270和1280中的每一个可以是处理器1000的某个版本。在本公开的一个实施例中,处理器1270和1280分别是处理器1110和1115,而协处理器1238是协处理器1145。在另一个实施例中,处理器1270和1280分别是处理器1110协处理器1145。
示出了处理器1270和1280,处理器1270和1280分别包括集成存储器控制器(IMC)单元1272和1282。处理器1270还包括作为其总线控制器单元的一部分的点对点(P-P)接口1276和1278;类似地,第二处理器1280包括P-P接口1286和1288。处理器1270、1280可以使用P-P接口电路1278、1288经由点对点(P-P)接口1250交换信息。如图12中所示出的,IMC1272和1282把处理器耦合到相应存储器,即存储器1232和存储器1234,它们可以是本地附接到相应处理器的主存储器的各部分。
处理器1270、1280可以各自使用点对点接口电路1276、894、1286、898经由个体P-P接口1252、1254与芯片组1290交换信息。芯片组1290可以可选地经由高性能接口1292与协处理器1238交换信息。在一个实施例中,协处理器1238是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存器(未示出)可以被包括在处理器中或处于两个处理器外部,但是经由P-P互连件与处理器连接,使得在处理器处于低功率模式情况下处理器中任一个或全部二者的本地高速缓存信息可以存储在共享高速缓存器中。
芯片组1290可以经由接口1296耦合到第一总线1216。在一个实施例中,第一总线1216可以是外围部件互连(PCI)总线,或者是诸如PCI Express总线或另一第三代I/O互连总线之类的总线,但本公开的范围不限于此。
如图12中所示出的,各种I/O装置1214以及总线桥1218可以耦合到第一总线1216,总线桥1218将第一总线1216耦合到第二总线1220。在一个实施例中,一个或多个附加处理器815(诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器)耦合到第一总线。在一个实施例中,第二总线1220可以是低引脚数(LPC)总线。在一个实施例中,各种装置可以耦合到第二总线1220,包括例如键盘和/或鼠标1222、通信装置1227和可以包括指令/代码和数据1230的存储单元1228,诸如磁盘驱动器或其他大容量存储装置。此外,音频I/O 1224可以耦合到第二总线1216。注意,其他架构是可能的。例如,代替图12的点对点架构,系统可以实现多点总线或其他这样的架构。
现在参考图13,所示出的是根据本公开的实施例的更具体的第二示例性系统1300的框图。图12和13中的相似元件具有相似的附图标记,并且图12的某些方面已从图13中省略,以避免模糊图13的其他方面。
图13图示了处理器1270、1280可以分别包括集成存储器和I/O控制逻辑(“CL”)1372和1382。因此,CL1372、1382包括集成存储器控制器单元并包括I/O控制逻辑。图13图示了不仅存储器1232、1234耦合到CL1272、1282,而且I/O装置1314也耦合到控制逻辑1272、1282。传统I/O装置1315耦合到芯片组890。
现在参考图14,示出的是根据本公开的实施例的SoC 1400的框图。图10中的类似元件具有相似的附图标记。此外,虚线框是更高级SoC上的可选特征。在图14中,(一个或多个)互连单元1402耦合到:应用处理器1410,包括由一个或多个核心202A-N构成的集合和(一个或多个)共享高速缓存单元1006;系统代理单元1010;(一个或多个)总线控制器单元1016;(一个或多个)集成存储器控制器单元1014;由一个或多个协处理器1420构成的集合,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元1430;直接存储器存取(DMA)单元1432;以及显示单元1440,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器1420包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。
本文公开的(例如,机制的)实施例可以以硬件、软件、固件或这些实现方法的组合来实现。本公开的实施例可以被实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置。
程序代码(诸如图12中所图示的代码1230)可以应用于输入指令以执行本文描述的功能并生成输出信息。输出信息可以以已知的方式应用于一个或多个输出装置。出于本申请的目的,处理系统包括具有处理器(诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器)的任何系统。
程序代码可以用高级过程编程语言或面向对象的编程语言来实现以与处理系统通信。如果需要,程序代码也可以用汇编语言或机器语言实现。事实上,本文描述的机制在范围上不限于任何特定编程语言。在任何情况下,语言可以是被编译或被解释的语言。
可以通过存储在机器可读介质上的表示性指令来实现至少一个实施例的一个或多个方面,该指令表示处理器内的各种逻辑,当该指令由机器读取时使得机器制造逻辑以执行本文中所描述的技术。称为“IP核心”的这种表示可以存储在有形的机器可读介质上,并提供给各种客户或制造设施,以加载到实际制作逻辑或处理器的制造机器中。
这种机器可读存储介质可以包括但不限于由机器或装置制造或形成的物品的非暂态有形装置,包括:存储介质,诸如硬盘;包括软盘、光盘、紧凑盘只读存储器(CD-ROM)、紧凑盘可重写(CD-RW)和磁光盘的任何其他类型的盘;半导体装置,诸如只读存储器(ROM)、随机存取存储器(RAM)(诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM);磁卡或光卡或适用于存储电子指令的任何其他类型的介质。
因此,本公开的实施例还包括包含指令或包含设计数据(诸如硬件描述语言(HDL),其定义本文描述的结构、电路、设备、处理器和/或系统特征)的非暂态有形机器可读介质。这些实施例也可以称为程序产品。
仿真(包括二进制转变、代码变形等)
在一些情况下,指令转换器可用于将指令从源指令集转换为目标指令集。例如,指令转换器可以将指令转变(例如,使用静态二进制转变,包括动态编译的动态二进制转变)、变形、仿真或以其他方式转换为要由核心处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或其组合来实现。指令转换器可以在处理器上、离开处理器或者部分在处理器上和部分离开处理器。
图15是根据本公开的实施例的对比使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示实施例中,指令转换器是软件指令转换器,但是替代地,指令转换器可以用软件、固件、硬件或其各种组合来实现。图15示出了可以使用x86编译器1504编译采用高级语言1502的程序以生成x86二进制代码1506,x86二进制代码1506可以由具有至少一个x86指令集核心1516的处理器本机执行。在一些实施例中,具有至少一个x86指令集核心1516的处理器表示能够通过如下方式执行与具有至少一个x86指令集核心的Intel®处理器基本相同功能的任何处理器:兼容地执行或以其他方式处理(1)Intel®x86指令集核心的大部分指令集或(2)目标是在具有至少一个x86指令集核心的Intel®处理器上运行的应用或其他软件的目标代码版本,以便实现与具有至少一个x86指令集核心的Intel®处理器基本相同的结果。x86编译器1504表示可操作为生成x86二进制代码(1506例如,目标代码)的编译器,该二进制代码可以在具有或不具有附加链接处理的情况下在具有至少一个x86指令集核心1516的处理器上执行。类似地,图15示出了采用高级语言1502的程序可以使用替代指令集编译器1508来编译以生成替代指令集二进制代码1510,替代指令集二进制代码1510可以由不具有至少一个x86指令集核心1514的处理器本机执行(例如,具有执行如下指令集的核心的处理器:执行加利福尼亚州桑尼维尔的MIPS技术的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集。)指令转换器1512用于将第一二进制代码1506转换为可由不具有x86指令集核心1514的处理器本机执行的代码。该经转换的代码不太可能与替代指令集二进制代码1510相同,因为能够做到这一点的指令转换器难以制造;但是,经转换的代码将完成一般操作,并由所述替代指令集中的指令构成。因此,指令转换器1512表示软件、固件、硬件或其组合,通过仿真、模拟或任何其他过程,这允许不具有x86指令集处理器或核心的处理器或其他电子装置执行x86二进制代码1506。

Claims (24)

1.一种装置,包括:
解码器,用于将指令解码为经解码的指令;
推测管理器电路,用于:
在指令中检测安全检查字段,
基于安全检查字段,从多个安全检查策略中确定要为潜在地被错误推测的执行而实施的安全检查策略,
对指令执行安全检查策略的一个或多个相关联的检查,以确定所述指令是否潜在地被错误推测,
当根据一个或多个相关联的检查不将指令视为安全的时,调度所述指令以供执行,以及
当根据一个或多个相关联的检查将指令视为安全的时,省略所述指令;和
执行单元,用于执行被调度以供执行的所述指令。
2.根据权利要求1所述的装置,其中,所述安全检查字段是编译器提供的提示。
3.根据权利要求1所述的装置,其中,所述推测管理器电路将对所述指令的一组相关联的存储器访问执行所述安全检查策略的一个或多个相关联的检查。
4.根据权利要求1所述的装置,其中,所述安全检查策略是存储器安全检查策略。
5.根据权利要求1所述的装置,其中,所述安全检查策略是类型安全检查策略。
6.根据权利要求1所述的装置,其中,所述安全检查策略的一个或多个相关联的检查包括存储器安全检查和类型安全检查。
7.根据权利要求1所述的装置,其中,所述一个或多个相关联的检查小于针对所述装置的架构规范的完整一致性检查。
8.根据权利要求1-7中的任一项所述的装置,其中,所述指令是与按照程序顺序的后续存储器访问指令相关联的安全检查指令。
9.一种方法,包括:
用硬件处理器的解码器将指令解码为经解码的指令;
通过硬件处理器检测指令中的安全检查字段;
通过硬件处理器基于安全检查字段,从多个安全检查策略中确定要为潜在地被错误推测的执行而实施的安全检查策略;
通过硬件处理器对指令执行安全检查策略的一个或多个相关联的检查,以确定所述指令是否潜在地被错误推测;
当硬件处理器根据一个或多个相关联的检查而不将指令视为安全的时,调度所述指令以供执行;
当硬件处理器根据一个或多个相关联的检查而将指令视为安全的时,省略所述指令;和
用硬件处理器的执行单元执行被调度以供执行的所述指令。
10.根据权利要求9所述的方法,其中,所述安全检查字段是编译器提供的提示。
11.根据权利要求9所述的方法,其中,所述执行包括对所述指令的一组相关联的存储器访问执行所述安全检查策略的一个或多个相关联的检查。
12.根据权利要求9所述的方法,其中,所述安全检查策略是存储器安全检查策略。
13.根据权利要求9所述的方法,其中,所述安全检查策略是类型安全检查策略。
14.根据权利要求9所述的方法,其中,所述安全检查策略的一个或多个相关联的检查包括存储器安全检查和类型安全检查。
15.根据权利要求9所述的方法,其中,所述一个或多个相关联的检查小于针对所述硬件处理器的架构规范的完整一致性检查。
16.根据权利要求9-15中任一项所述的方法,其中,所述指令是与按照程序顺序的后续存储器访问指令相关联的安全检查指令。
17.一种存储代码的非暂时性机器可读介质,所述代码当被机器执行时使机器执行一种方法,包括:
用硬件处理器的解码器将指令解码为经解码的指令;
通过硬件处理器检测指令中的安全检查字段;
通过硬件处理器基于安全检查字段,从多个安全检查策略中确定要为潜在地被错误推测的执行而实施的安全检查策略;
通过硬件处理器对指令执行安全检查策略的一个或多个相关联的检查,以确定所述指令是否潜在地被错误推测;
当硬件处理器根据一个或多个相关联的检查而不将指令视为安全的时,调度所述指令以供执行;
当硬件处理器根据一个或多个相关联的检查而将指令视为安全的时,省略所述指令;和
用硬件处理器的执行单元执行被调度以供执行的所述指令。
18.根据权利要求17所述的非暂时性机器可读介质,其中,所述安全检查字段是编译器提供的提示。
19.根据权利要求17所述的非暂时性机器可读介质,其中,所述执行包括:对所述指令的一组相关联的存储器访问执行安全检查策略的一个或多个相关联的检查。
20.根据权利要求17所述的非暂时性机器可读介质,其中,所述安全检查策略是存储器安全检查策略。
21.根据权利要求17所述的非暂时性机器可读介质,其中,所述安全检查策略是类型安全检查策略。
22.根据权利要求17所述的非暂时性机器可读介质,其中,所述安全检查策略的一个或多个相关联的检查包括存储器安全检查和类型安全检查。
23.根据权利要求17所述的非暂时性机器可读介质,其中,所述一个或多个相关联的检查小于针对所述硬件处理器的架构规范的完整一致性检查。
24.根据权利要求17-23中任一项所述的非暂时性机器可读介质,其中,所述指令是与按照程序顺序的后续存储器访问指令相关联的安全检查指令。
CN202010578891.4A 2019-09-27 2020-06-23 用于当在推测执行期间被视为安全的时省略安全检查的硬件 Pending CN112579171A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/585964 2019-09-27
US16/585,964 US20210096872A1 (en) 2019-09-27 2019-09-27 Hardware for eliding security checks when deemed safe during speculative execution

Publications (1)

Publication Number Publication Date
CN112579171A true CN112579171A (zh) 2021-03-30

Family

ID=71105316

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010578891.4A Pending CN112579171A (zh) 2019-09-27 2020-06-23 用于当在推测执行期间被视为安全的时省略安全检查的硬件

Country Status (5)

Country Link
US (1) US20210096872A1 (zh)
EP (1) EP3798881A1 (zh)
JP (1) JP2021057006A (zh)
CN (1) CN112579171A (zh)
TW (1) TW202113592A (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11307857B2 (en) * 2019-12-05 2022-04-19 Marvell Asia Pte, Ltd. Dynamic designation of instructions as sensitive for constraining multithreaded execution
US11263015B1 (en) 2019-12-05 2022-03-01 Marvell Asia Pte, Ltd. Microarchitectural sensitive tag flow
US11372647B2 (en) 2019-12-05 2022-06-28 Marvell Asia Pte, Ltd. Pipelines for secure multithread execution
US20230098640A1 (en) * 2021-09-26 2023-03-30 Ceremorphic, Inc. Core Processor and Redundant Branch Processor with Control Flow Attack Detection

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040268095A1 (en) * 2003-06-30 2004-12-30 Tatiana Shpeisman Efficient implementation of null reference check
US7810086B2 (en) * 2005-06-30 2010-10-05 Intel Corporation Safe code-motion of dangerous instructions during compiler optimization
US20140059333A1 (en) * 2012-02-02 2014-02-27 Martin G. Dixon Method, apparatus, and system for speculative abort control mechanisms
US10761970B2 (en) * 2017-10-20 2020-09-01 International Business Machines Corporation Computerized method and systems for performing deferred safety check operations
US10866805B2 (en) * 2018-01-03 2020-12-15 Arm Limited Speculation barrier instruction
DK3738058T3 (da) * 2018-01-12 2023-02-20 Virsec Systems Inc Forsvar mod spekulativ eksekveringsudnyttelse
GB2572578B (en) * 2018-04-04 2020-09-16 Advanced Risc Mach Ltd Cache annotations to indicate specultative side-channel condition
GB2572579B (en) * 2018-04-04 2020-09-16 Advanced Risc Mach Ltd Speculative side-channel hint instruction

Also Published As

Publication number Publication date
EP3798881A1 (en) 2021-03-31
TW202113592A (zh) 2021-04-01
JP2021057006A (ja) 2021-04-08
US20210096872A1 (en) 2021-04-01

Similar Documents

Publication Publication Date Title
US20230342156A1 (en) Apparatuses and methods for speculative execution side channel mitigation
KR102478874B1 (ko) 비순차적 하드웨어 소프트웨어 공동 설계된 프로세서에서 스택 동기화 명령어를 갖는 술어 값의 스택을 구현하고 유지하기 위한 방법 및 장치
US20240078111A1 (en) Hardware apparatuses and methods to switch shadow stack pointers
EP3798881A1 (en) Hardware for eliding security checks when deemed safe during speculative execution
CN107003853B (zh) 用于数据推测执行的系统、装置和方法
CN107003850B (zh) 用于数据推测执行的系统、装置和方法
US11188342B2 (en) Apparatus and method for speculative conditional move operation
US20210200552A1 (en) Apparatus and method for non-speculative resource deallocation
WO2016105802A1 (en) Systems, apparatuses, and methods for data speculation execution
KR101624786B1 (ko) 기입마스크 레지스터의 트레일링 최하위 마스킹 비트를 결정하는 시스템, 장치, 및 방법
US11321089B2 (en) Instruction set architecture based and automatic load tracking for opportunistic re-steer of data-dependent flaky branches
CN112149118A (zh) 减轻受控通道和基于缓存的边通道攻击的处理器指令支持
EP3767462A1 (en) Detecting a dynamic control flow re-convergence point for conditional branches in hardware
CN112148372A (zh) 用于推测性侧信道攻击的硬件加载强化
WO2016105801A1 (en) Systems, apparatuses, and methods for data speculation execution
US10545735B2 (en) Apparatus and method for efficient call/return emulation using a dual return stack buffer
CN113204448A (zh) 用于请求处理器核的历史重置的指令的设备、方法和系统
EP3109754A1 (en) Systems, methods, and apparatuses for improving performance of status dependent computations
US11934830B2 (en) Method and apparatus for data-ready memory operations
US10241789B2 (en) Method to do control speculation on loads in a high performance strand-based loop accelerator
EP3885950B1 (en) Shadow stack isa extensions to support fast return and event delivery (fred) architecture
US11036501B2 (en) Apparatus and method for a range comparison, exchange, and add
US20230205685A1 (en) Read all zeros or random data upon a first read from volatile memory

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