对相关申请的交叉引用本专利申请要求保护第62/968861号美国临时专利申请的权益,该美国临时专利申请在2020年1月31日提交,并且题目为“apparatuses,methods,andsystemsforinstructionstorequestahistoryresetofaprocessorcore”,其全部内容通过引用结合于本文中。本公开一般涉及电子设备,并且更具体地,本公开的实施例涉及电路,该电路用于实现用于请求处理器核的历史重置的指令。
背景技术:
:处理器或处理器的集合执行来自指令集(例如,指令集架构(isa))的指令。指令集是计算机架构的与编程相关的部分,并且通常包括本机数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置以及外部输入和输出(i/o)。应当注意,本文的术语指令可以指宏指令(例如,被提供给处理器以用于执行的指令),或者指微指令(例如,由处理器的解码器解码宏指令而产生的指令)。附图说明将参照附图描述根据本公开的各种实施例,附图中:图1示出了根据本公开的实施例的包括处理器核的计算机系统。图2示出了根据本公开的实施例的硬件指导调度器。图3示出了根据本公开的实施例的用于处理器内部历史重置的模型特定寄存器的示例格式。图4示出了根据本公开的实施例的操作系统(os)调度器控制流程图。图5示出了根据本公开的实施例的应用级控制流程图。图6示出了根据本公开的实施例的操作系统(os)重置流程图。图7示出了根据本公开的实施例的操作系统(os)调度器流程图。图8a-8d示出了根据本公开的实施例的os和虚拟机监测器(vmm)支持模型流程图。图9示出了根据本公开的实施例的流程图。图10a是示出根据本公开的实施例的通用向量友好指令格式及其类别a指令模板的框图。图10b是示出根据本公开的实施例的通用向量友好指令格式及其类别b指令模板的框图。图11a是示出根据本公开的实施例的图10a和10b中的通用向量友好指令格式的字段的框图。图11b是示出根据本公开一个实施例的构成全操作码字段的图11a中的特定向量友好指令格式的字段的框图。图11c是示出根据本公开一个实施例的构成寄存器索引(index)字段的图11a中的特定向量友好指令格式的字段的框图。图11d是示出根据本公开一个实施例的构成扩充操作字段1050的图11a中的特定向量友好指令格式的字段的框图。图12是根据本公开一个实施例的寄存器架构的框图。图13a是示出根据本公开的实施例的示例性有序流水线和示例性寄存器重命名、乱序发布/执行流水线的框图。图13b是示出根据本公开的实施例的要被包括在处理器中的示例性寄存器重命名、乱序发布/执行架构核和有序架构核的示例性实施例的框图。图14a是根据本公开的实施例的单个处理器核连同其到管芯上互连网络的连接以及其2级(l2)高速缓存的本地子集的框图。图14b是根据本公开的实施例的图14a中的处理器核的一部分的展开视图。图15是根据本公开的实施例的处理器的框图,该处理器可以具有多于一个核,可以具有集成存储器控制器,并且可以具有集成图形元件。图16是根据本公开一个实施例的系统的框图。图17是根据本公开的实施例的更具体的示例性系统的框图。图18示出了根据本公开的实施例的第二更具体的示例性系统的框图。图19示出了根据本公开的实施例的片上系统(soc)的框图。图20是根据本公开的实施例对比使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。具体实施方式在以下描述中,阐述了大量具体细节。然而,理解到,本公开的实施例可以在没有这些具体细节的情况下被实践。在其他实例中,公知的电路、结构和技术未详细示出,以免模糊对本说明书的理解。说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但是可能不一定每个实施例包括该特定特征、结构或特性。而且,这样的短语不一定指相同实施例。另外,当结合实施例描述特定特征、结构或特性时,认为结合其他实施例影响这样的特征、结构或特性在本领域技术人员的知识范围内,无论是否明确描述。(例如,硬件)处理器(例如,具有一个或多个核)可以执行指令(例如,指令的线程)来对数据进行操作,例如以执行算术、逻辑或其他功能。例如,软件可以请求操作,并且硬件处理器(例如,其一个或多个核)可以响应于该请求来执行操作。软件可以请求(例如,软件)线程的执行。操作系统(os)可以包括调度器以调度在硬件处理器上(例如,在硬件处理器的逻辑处理器(例如,逻辑核)上)的(例如,软件)线程的执行。每个逻辑处理器可以被称为相应的中央处理单元(cpu)。每个线程可以有上下文。在某些实施例中,上下文由以下属性中的一个或多个来标识:1)硬件线程标识符,诸如,通过诸如同时多线程(smt)的技术来标识在相同物理核上实现的多个逻辑处理器(例如,逻辑核)之一的值;2)诸如由环实现的特权级别;3)诸如在控制寄存器(例如cr3)或代码段(cs)寄存器中实现的页表基地址或代码段配置;4)诸如由进程上下文id(pcid)或虚拟进程id(vpid)实现的地址空间标识符(asid),其在语义上区分由cpu使用的虚拟到物理的映射;5)包含用于确定执行软件的特权的加密密封资产(例如,令牌)的密钥寄存器;和/或6)短暂的-上下文变化,诸如上下文的随机重置。在任何重要的时间段内,在物理核内许多线程(例如,其上下文)可以是活动的。在某些实施例中,系统软件在应用和系统软件功能之间进行时间切片,潜在地允许许多上下文访问微架构预测和/或高速缓存机制。本文的某些实施例针对新指令,以指示对于针对物理核(例如,针对由物理核实现的cpu/逻辑处理器的(一个或多个)特定历史类型)的历史重置的请求(例如,作为上下文切换的一部分)。在某些实施例中,例如,当软件线程上下文切换已经发生时,或者作为软件线程的子运行时,指令(例如,该指令的解码和执行)允许操作系统(os)使提示能够进入硬件处理器中,以指示硬件应该重置其内部历史。软件线程上下文切换的发生从而可以触发由硬件进行的一个或多个动作(例如,基于其架构),并支持遵循特定os配置的方法。本文的某些实施例针对新指令,所述新指令用于(例如,在物理核上的两个线程的上下文切换期间)(例如,针对由物理核实现的cpu的上下文切换)导致(例如,逻辑)处理器的内部历史的重置(例如,如下面参考图2所讨论的),和/或作为上下文切换的结果初始化(例如,重置)不同的处理器预测历史。然而,某些处理器可能局限于针对高速缓存数据结构(例如,数据高速缓存、指令高速缓存和/或转译后备缓冲器(tlb))重置硬件历史数据,这例如经由执行写回和作废高速缓存(wbinvd)指令以将逻辑处理器的内部高速缓存中的所有修改的高速缓存线写回到主存储器以及作废(例如转储清除)内部高速缓存。在一个实施例中,处理器要向控制寄存器(例如,cr3)写入以重置(例如,归零)tlb中的内容,和/或执行指令以清除处理器的(一个或多个)高速缓存(例如,使处理器的(一个或多个)高速缓存无效)。然而,某些硬件处理器可能不支持允许基于运行时执行来清除历史预测的指令。可能不期望(例如,出于安全原因)第一(例如,软件)线程基于第二(或更多)线程(例如,软件线程)的先前执行而可以访问信息,并且该信息可包括(例如,软件)线程运行时属性历史。从而,可能期望硬件具有(例如,软件)线程的上下文切换的知识。本文的某些实施例提供了用于使os能够例如经由执行如本文所讨论的指令来请求历史重置的方法。本文的某些实施例提供了使os能够设置历史重置将要发生的提示的方法。本文的某些实施例明确地标记了对历史重置的请求,例如,而没有执行用于执行由指令(例如,xsave)指示的处理器状态组件的保存的指令和/或用于恢复由指令(例如,xrstor)指示的保存的处理器状态组件的指令(例如,并且对重置历史的提示被设置为恢复特定上下文的一部分,诸如但不限于恢复模型特定寄存器中的值)。本文的某些实施例针对使用(例如,与上下文保存和恢复资源分开)模型特定寄存器(例如,如下面参考图3所讨论的)来向硬件提示关于对于历史重置的可能需要的指令。本文的某些实施例针对引起处理器的内部历史的重置的指令,例如,供os在上下文切换事件中使用的指令。本文的某些实施例针对不写入(例如,买方可以读取)模型特定寄存器的指令(并且从而避免由此引起的任何时延)。本文的某些实施例针对从os避免了不同的代码路径作为os调度器的一部分的指令。在某些实施例中,os(或虚拟机监测器(vmm))具有以下能力:控制该新指令的可能能力(例如,以清除一个或多个标识的历史等)。示例能力是重置硬件指导调度器(例如,如图2中所示)的预测历史中的一个或多个预测历史。本文的某些实施例针对引起对硬件的历史重置的指令,例如,以被用于软件线程上下文切换事件或在软件线程的运行时期间使用。可使用本文的某些实施例以便使得能够更好地对准到当前运行的软件线程,或者对于运行的线程的特定部分对准到硬件内部控制启发。被重置的内部历史的示例是硬件指导调度器(例如,周期历史)。可期望的是,重置处理器的内部历史(例如,由硬件指导调度器所使用的历史),以将处理器优化及其控制对准回到用于实际运行的代码(例如,软件线程代码)的os。os软件线程上下文切换是在运行时期间可能发生的事件之一,其改变当前执行代码。另一个示例是软件线程的子集,其中重要的是在新部分(例如,不同的软件线程)开始运行之前,重置先前的历史(例如,硬件指导调度器的运行时预测(例如,微架构)历史)。使硬件能够清除历史可实现更好的功率或性能,以清除能够在两个不同软件线程的执行之间进行干扰(例如,影响准确性)的历史信息,和/或避免两个不同软件线程之间的安全信息泄漏(例如,或其他敏感软件流)。图1示出了根据本公开的实施例的包括处理器核109的计算机系统100。处理器核109包括可由多个上下文共享的多个组件(例如,微架构预测和高速缓存机制)。例如,分支目标缓冲器(btb)124、指令高速缓存132和/或返回堆栈缓冲器(rsb)144可以由多个上下文共享。某些实施例包括上下文管理器电路110,其用于同时维持与多个上下文关联的多个独特状态,并在由上下文管理器电路跟踪的那些上下文之间切换活动的上下文。根据本公开的实施例,所描绘的计算机系统100包括流水线化处理器核109(1)-109(n)中的分支预测器120和分支地址计算器(bac)142。参考图1,流水线化处理器核(例如,109(1))包括指令指针生成(ipgen)级111、提取级130、解码级140和执行级150。在一个实施例中,计算机系统100包括多个核109(1-n),其中n是任何正整数。在另一个实施例中,计算机系统100包括单个核。在某些实施例中,每个处理器核109(1-n)实例支持多线程(例如,在第一和第二逻辑核上执行操作或线程的两个或更多个并行集合),并且可以用各种方式这样做,包括时间切片的多线程、同时多线程(例如,其中单个物理核为物理核正在进行同时多线程的线程中的每个线程提供逻辑核)或者其组合(例如,时间切片的提取和解码以及此后的同时多线程)。在所描绘的实施例中,每个单个处理器核109(1)至109(n)包括分支预测器120的实例。分支预测器120可以包括分支目标缓冲器(btb)124。在某些实施例中,分支目标缓冲器124存储(例如,在分支预测器阵列中)对应于多个分支指令(例如,已经被执行多次的代码部分的分支指令)中的每个分支指令的预测目标指令。在所描述的实施例中,包括分支地址计算器(bac)142,其访问(例如,包括)返回堆栈缓冲器(rsb)144。在某些实施例中,返回堆栈缓冲器144要存储(例如,在最后数据输入是第一数据输出(lifo)的堆栈数据结构中)任何调用(call)指令(例如,其将它们的返回地址推送到堆栈上)的返回地址。分支地址计算器(bac)142用于计算某些类型的分支指令的地址和/或验证由分支预测器(例如,btb)做出的分支预测。在某些实施例中,分支地址计算器执行分支目标和/或下一个顺序线性地址计算。在某些实施例中,分支地址计算器基于地址计算对分支执行静态预测。在某些实施例中,分支地址计算器142包含返回堆栈缓冲器144,以跟踪调用指令的返回地址。在一个实施例中,分支地址计算器尝试纠正由分支预测器120做出的任何不适当预测,以减少分支误预测惩罚。作为一个示例,分支地址计算器验证针对其目标能仅根据分支指令和指令指针来确定的那些分支的分支预测。在某些实施例中,分支地址计算器142维持用作用于确定返回指令的目标地址的分支预测机制的返回堆栈缓冲器144,例如,其中返回堆栈缓冲器通过监测所有“调用子例程”和“从子例程返回”分支指令来进行操作。在一个实施例中,当分支地址计算器检测到“调用子例程”分支指令时,分支地址计算器将下一指令的地址推送到返回堆栈缓冲器上,例如,其中堆栈指针的顶部标记返回堆栈缓冲器的顶部。在这个实施例中,通过将紧接在每个“调用子例程”指令之后的地址推送到返回堆栈缓冲器上,返回堆栈缓冲器包含返回地址的堆栈。当分支地址计算器之后检测到“从子例程返回”分支指令时,分支地址计算器将顶部返回地址从返回堆栈缓冲器弹出,例如,以验证由分支预测器120预测的返回地址。在一个实施例中,例如,对于直接分支类型,分支地址计算器要(例如,总是)预测针对条件分支所采取的,并且如果分支预测器没有预测针对直接分支所采取的,则分支地址计算器覆盖分支预测器的失误预测或不适当预测。图1中的核109包括用于确证由分支预测器120做出的分支预测的电路。每个分支预测器120条目(例如,在btb124中)可以进一步包括有效字段和束地址(ba)字段,它们被用于增加准确性并确证由分支预测器120执行的分支预测,如下面更详细讨论的。在一个实施例中,有效字段和ba字段各由一位字段组成。然而,在其他实施例中,有效和ba字段的大小可以变化。在一个实施例中,所提取的指令被发送(例如,由bac142从线137)到解码器146以被解码,并且解码的指令被发送到执行电路(例如,单元)154以被执行。所描绘的计算机系统100包括网络装置101、输入/输出(i/o)电路103(例如,键盘)、显示器105和系统总线(例如,互连)107。在一个实施例中,存储在分支预测器120中的分支指令由编译器预选为将被采取的分支指令。在某些实施例中,如图1的存储器102中存储的所示,编译器代码104包括代码序列,该代码序列在被执行时,将用高级语言编写的程序的源代码转译成可执行机器代码。在一个实施例中,编译器代码104进一步包括附加分支预测器代码106,其预测分支指令(例如,可能将被采取的分支指令(例如,预选的分支指令))的目标指令。此后用分支指令的目标指令更新分支预测器120(例如,其btb124)。在一个实施例中,软件管理硬件btb,例如,其中软件指定预测模式,或者其中由写入btb的指令的模式隐式定义的预测模式也在条目中设置模式位。存储器102可以包括操作系统(os)代码160、虚拟机监测器(vmm)代码162、第一应用(例如,程序)代码164、第二应用(例如,程序)代码166或其任何组合。在计算的实施例中,虚拟机(vm)是计算机系统的仿真。在某些实施例中,vm基于特定计算机架构,并提供底层物理计算机系统的功能性。它们的实现可涉及专门的硬件、固件、软件或组合。在某些实施例中,虚拟机监测器(vmm)(也称为管理程序)是软件程序,该软件程序当被执行时,使得能够实现vm实例的创建、管理和监管,并管理物理主机机器顶上的虚拟化环境的操作。在某些实施例中,vmm是虚拟化环境和实现背后的主要软件。当在某些实施例中安装在主机机器(例如,处理器)上时,vmm促进创建vm,例如,其各具有单独的操作系统(os)和应用。vmm可以通过分配必要的计算、存储器、存储和其他输入/输出(i/o)资源(诸如但不限于输入/输出存储器管理单元(iommu))来管理这些vm的后端操作。vmm可以提供集中式界面,以用于管理安装在单个主机机器上或分散于不同且互连的主机上的vm的整体操作、状态和可用性。如下面所讨论的,所描绘的核(例如,其分支预测器120)包括对一个或多个寄存器的访问。在某些实施例中,核包括一个或多个通用寄存器108。在某些实施例中,用于分支预测器120的每个条目(例如,在其btb124中)包括标签字段和目标字段。在一个实施例中,btb中的每个条目的标签字段存储标识分支指令的指令指针(例如,存储器地址)的至少一部分。在一个实施例中,btb中的每个条目的标签字段存储标识代码中的分支指令的指令指针(例如,存储器地址)。在一个实施例中,目标字段存储在相同条目的标签字段中标识的分支指令的目标的指令指针的至少一部分。而且,在其他实施例中,用于分支预测器120的条目(例如,在其btb124中)包括一个或多个其他字段。在某些实施例中,条目不包括用于辅助预测是否采取分支指令的单独字段,例如,如果分支指令存在(例如,在btb中),则认为采取它。如图1中所示,ip生成级111的ip生成多路复用器113从线路114a接收指令指针。经由线路115a提供的指令指针由递增器电路115生成,所述递增器电路115从路径113a接收最近的指令指针的副本。递增器电路115可以将目前的指令指针递增预定量,以从目前正在由核执行的程序序列中获得下一个顺序指令。在一个实施例中,在从ip生成多路复用器113接收到ip时,分支预测器120将ip的一部分与分支预测器120(例如,btb124)中的每个条目的标签字段进行比较。如果在ip和分支预测器120的标签字段之间没有找到匹配,则在此实施例中,ip生成多路复用器将继续选择下一个顺序ip作为要提取的下一个指令。相反,如果检测到匹配,则分支预测器120读取与ip匹配的分支预测器条目的有效字段。如果有效字段未被设置(例如,具有逻辑值0),则在此实施例中分支预测器120认为相应条目是“无效的”,并且将忽略ip和相应条目的标签之间的匹配,例如,并且相应条目的分支目标将不被转发到ip生成多路复用器。另一方面,如果匹配条目的有效字段被设置(例如,具有逻辑值1),则在此实施例中分支预测器120继续执行指令指针(ip)的预定部分和匹配分支预测器条目的分支地址(ba)字段之间的逻辑比较。如果“可允许条件”存在,则匹配条目的分支目标将被转发到ip生成多路复用器,并且否则,分支预测器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生成多路复用器。否则,分支预测器将忽略ip和标签之间的匹配。在一个实施例中,从分支预测器转发的分支目标被发送到ip生成多路复用器之前,其最初被发送到分支预测(bp)重引导多路复用器(resteermux)128。如图1中所示,bp重引导多路复用器128也可以从其他分支预测装置接收指令指针。在一个实施例中,由bp重引导多路复用器接收的输入行将被优先化,以确定哪个输入行将被允许通过bp重引导多路复用器到达ip生成多路复用器。除了将分支目标转发到bp重引导多路复用器之外,在检测到ip和分支预测器的标签之间的匹配时,匹配分支预测器条目的ba被转发到分支地址计算器(bac)142。bac142在图1中被示为位于解码级140中,但是可以位于(一个或多个)其他级中。bac还可以经由行137从提取单元134接收高速缓存行。在这个示例中,由ip生成多路复用器选择的ip也经由数据行135被转发到提取单元134。一旦提取单元134接收到ip,就从指令高速缓存132提取对应于ip的高速缓存行。从指令高速缓存接收到的高速缓存行经由数据行137被转发到bac。在该示例中,在接收到ba时,bac将读取ba,以确定预选的分支指令(例如,在匹配分支预测器条目中标识的)位于将由bac接收的下一个高速缓存行中的何处(例如,高速缓存行的第一束或第二束)。在一个实施例中,预先确定分支指令位于高速缓存行的束内的何处(例如,在三个指令的束中,分支指令将被存储为第二指令)。在备选实施例中,ba包括附加位,以更具体地标识高速缓存行内的分支指令的地址。因此,分支指令将不限于束内的特定指令位置。在bac确定高速缓存行内的预选的分支指令的地址,并且已经从提取单元134接收到相应的高速缓存行之后,bac将解码相应的指令,以验证该ip真正对应于分支指令。如果由ba在所接收的高速缓存行中寻址的指令是分支指令,则对分支预测的校正不是必要的。相反,如果高速缓存行中的相应指令不是分支指令(即,ip不对应于分支指令),则bac将向分支预测器发送消息以使相应的分支预测器条目无效,以防止相同分支预测器条目上的类似误预测。此后,经无效的分支预测器条目将被新的分支预测器条目盖写。此外,在一个实施例中,bac将使ip递增预定量,并将递增的ip经由数据行145转发到bp重引导多路复用器128,例如,来自bac的数据行145将优先于来自分支预测器的数据行。作为结果,递增的ip将被转发到ip生成多路复用器,并被传递到提取单元,以便通过提取顺序跟随ip的指令来纠正分支误预测。在某些实施例中,上下文管理器电路110允许由多个上下文利用上面讨论的共享组件中的一个或多个,例如,同时通过直接或间接观察存储的信息来减轻跨上下文泄漏的信息。计算系统100(例如,核109)可以包括控制寄存器(例如,(一个或多个)模型特定寄存器112(例如,下面参考图3讨论的msr))、段寄存器114(例如,指示当前特权级)、硬件指导调度器116(例如,如下面参考图2所讨论的)或其任何组合。段寄存器114可以存储指示在逻辑核上(例如,单独针对每个逻辑核)操作的软件的当前特权级的值。在一个实施例中,当前特权级被存储在段寄存器114的代码段选择器寄存器的当前特权级(cpl)字段中。在某些实施例中,处理器核109要求某一特权级以执行某些动作,例如,由特定逻辑核请求的动作(例如,有在该特定逻辑核上运行的软件所请求的动作)。硬件指导调度器116的实例可以在计算机系统100的每个核109(1-n)(例如,对于由核实现的每个逻辑处理器)中。硬件指导调度器116的单个实例可以在计算机系统100中的任何地方,例如,用于存在的所有核109(1-n)的硬件指导调度器的单个实例。在一个实施例中,模型特定寄存器112包括配置和/或控制寄存器。在一个实施例中,控制寄存器与模型特定寄存器是分开/不同的。在一个实施例中,一个或多个(例如,模型特定)寄存器在处理器上运行的os的请求下被(例如,仅)写入,例如,其中os在特权(例如,系统)模式下操作,但对于在非特权(例如,用户)模式下运行的代码不被写入。在一个实施例中,模型特定寄存器只能由在监管者模式下运行的软件写入,并且不能由在用户模式下运行的软件写入。在某些实施例中,解码器146根据本公开解码指令,并且该解码的指令由执行电路154执行,例如,以重置例如硬件指导调度器116的多个软件线程运行时属性历史。计算机系统100可以包括性能监测电路168,例如,在其中包括任何数量的性能计数器以计数、监测和/或记录事件、活动和/或与性能相关的其他度量。在各种实施例中,性能计数器可以由在核上运行的软件编程,以记录性能监测信息。例如,性能计数器中的任何性能计数器可以被编程为对于所选择的事件的每次出现而递增,或者对于在所选择的事件期间的每个时钟周期而递增。所述事件可以包括与核上的程序代码的执行相关的各种事件中的任何事件,诸如分支误预测、高速缓存命中、高速缓存未命中、转译后备缓冲器命中、转译后备缓冲器未命中等。因此,性能计数器可用于努力调谐或剖析程序代码,以改进或优化性能。计算机系统100的每个核109可以是相同的(例如,对称核),或者核中的一个或多个核的适当子集可以不同于其他核(例如,非对称核)。在一个实施例中,一组非对称核包括第一类型的核(例如,较低功率核)和第二较高性能类型的核(例如,较高功率核)。在某些实施例中,计算机系统包括多个核,它们全都执行相同的指令集架构(isa)。在某些实施例中,计算机系统包括多个核,其各自具有指令集架构(isa),根据所述指令集架构,它执行由软件发布或提供给它和/或系统的指令。在本说明书中,术语“指令”的使用可以通常指这种类型的指令(其也可以被称为宏指令或isa级指令),其与以下成对比:(1)微指令或微操作,其作为宏指令的解码(例如,通过硬件指令解码器)的结果,可以被提供给执行和/或调度硬件;和/或(2)命令、过程、例程、子例程或其他软件构造,其执行和/或性能涉及多个isa级指令的执行。在一些这样的系统中,系统可以是异构的,因为它包括具有不同isa的核。系统可以包括具有硬件、硬连线、微代码、控制逻辑和/或其他微架构的第一核,其被设计成根据特定isa(或者对isa的扩展或isa的其他子集)执行特定的指令,并且该系统还可以包括没有这样的微架构的第二核。换句话说,第一核可以能够执行那些特定指令,而无需指令的任何转译、仿真或其他转换(除了将宏指令解码成微指令和/或微操作),而第二核不是。在这种情况下,特定的isa(或者对isa的扩展或isa的子集)可以被称为第一核支持(或本机支持),并且第二核不支持,和/或系统可以被称为具有异构isa。在其他这样的系统中,系统可能是异构的,因为它包括具有相同isa但在性能、功耗和/或某一其他处理度量或能力方面不同的核。差异可以由核的大小、速度和/或微架构和/或其特征提供。在异构系统中,一个或多个核可以被称为“大”,因为它们能够提供、它们可以被用来提供和/或它们的使用可以提供和/或导致比系统中的一个或多个其他“小(small或little)”核更大级别的性能(例如,更大的每循环指令(ipc))、功耗(例如,更少的能量效率)和/或某一其他度量。在这些和/或其他异构系统中,可以有可能任务由不同类型的核执行。此外,调度器(例如,在处理器上执行的操作系统的软件调度器的硬件调度器)可以有可能将任务调度或分派到不同的核和/或在不同的核之间迁移任务(一般地,“任务调度器”)。因此,优化、平衡或以其他方式影响吞吐量、等待时间、响应时间、时延、公平性、服务质量、性能、功耗和/或异构系统上的某一其他度量的努力可以包括任务调度决定。例如,如果特定任务由于长时延存储器访问而大部分停顿,则可能更有效的是在小核上调度它,并且节省在另外情况下的更大核的功率。另一方面,可以在大核上调度繁重的任务,以更快地完成计算,例如,并且让系统更快地进入睡眠/空闲。由于系统(例如客户端)能执行的工作载荷的多样性、工作载荷的动态特性以及系统本身的条件,纯软件解决方案做出这样的决定可能并不简单。因此,可期望使用本文的实施例(例如,硬件指导调度器)来部分或全部地提供这样的决定可以基于的信息。此外,在基于可被提供的信息来优化和/或调谐应用的努力中,可期望使用这些实施例。实施例还可以或改为提供其他期望的益处,诸如基于系统的动态特性实现性能分数的预测,通过提供可以在各种核之间共享的isa级计数器(例如,加载指令的数量)来消除在每个核上运行工作载荷以测量其工作量的需要,以及通过提供基于多个性能监测事件的单个计数器来降低性能监测的硬件实现成本。处理器可以包括由多个上下文(和/或核)共享的硬件指导调度器,例如,如下面参考图2进一步讨论的。处理器可以包含处理状态的其他共享结构,包括例如预测结构、高速缓存结构、物理寄存器堆(重命名的状态)和缓冲的状态(存储缓冲器)。预测结构(诸如分支预测器或预提取器)可以存储用于预测未来行为的有关过去执行行为的状态。处理器可以使用这些预测来指导推测执行,从而实现以其他方式将不可能的性能。缓存结构(诸如高速缓存或tlb)可以保持共享状态的本地副本,以便使由处理器进行的访问非常快。共享结构是安全风险。通过直接或间接观察存储的信息,可能跨上下文泄漏信息。另外,受害者上下文中的行为可能受来自攻击上下文内的训练的影响。在某些实施例中本文的公开减轻了这些问题中的一些。图2示出了根据本公开的实施例的硬件指导调度器116。硬件指导调度器116(和/或混合缩放预测器240)可以在逻辑门和/或任何其他类型的电路中实现,其全部或部分可以被包括在分立组件中和/或被集成到计算机或其他信息处理系统中的处理装置或任何其他设备的电路中,例如,在异构soc(诸如图19中的soc1900的异构实例)中的核(诸如图1中的核109)和/或系统代理(诸如图15或图19中的系统代理1510)中实现。指导调度器可以通过固件代码来实现。在图2中,任何数量的未加权事件计数(显示为e0210a至en210n)中的每个未加权事件计数表示性能计数器的未加权事件计数或任何其他输出(一般地,各自为“未加权事件计数”),所述性能计数器诸如图1的性能监测电路168中的任何性能计数器。在各种实施例中,e0210a至en210n可以表示任何数量的未加权事件计数的集合,其包括来自不同核的未加权事件计数的任何数量的子集。例如,未加权事件计数可以来自全部在一个核中的性能计数器,来自在第一核中的一个或多个性能计数器加上在第二核中的一个或多个性能计数器,来自在第一核中的一个或多个性能计数器加上在第二核中的一个或多个性能计数器加上在第三核中的一个或多个性能计数器,等等。此外,事件计数(例如e0210a至en210n)中的任何一个或多个可以表示活动运行时(例如,工作)计数器(诸如工作计数器230(如下所述))的输出(例如,来自其的反馈),如在其中实现性能和工作计数器的层级布置的实施例中(注意,在这样的实施例中,事件计数可以被称为未加权事件计数,即使它可能已经由工作计数器基于加权事件计数生成)。在图2中,权重寄存器220表示可编程或可配置的寄存器或其他存储位置(或存储位置的组合),以存储任何数量的权重值(示出为w0222a至wn222n),每个权重值对应于未加权事件计数之一,并要由对应的加权单元(示出为加权单元224a至224n)用于对对应的未加权事件计数进行加权并生成加权事件计数。权重值可以是经调整的一组值。例如,软件或固件可以将权重值1指配给e0,并且将权重值2指配给en,在这种情况下,加权单元224a可以以因子1对e0加权(例如,缩放或相乘),并且加权单元224n可以以因子2对en加权(例如,缩放或相乘)。在各种实施例中,可以使用任何权重值(包括0)、权重值的范围和/或加权方法(例如,相乘、相除、相加等)。在各种实施例中,权重寄存器和/或加权单元的实现可以将权重值的选择限制为多个可能的权重值之一。在图2中,接收加权事件计数(示出为加权单元224a至224n的输出)以用于由工作计数器(示出为异构(例如,混合)计数器(hcnt)230,但是可以用于同构或异构处理器/系统)进行处理。在实施例中,加权事件计数的处理可以包括对加权事件计数求和,以生成工作量的度量(一般地,“测量的工作量”)。各种实施例可以基于各种性能测量或其他参数来提供这个测量的工作量,所述各种性能测量或其他参数各自以各种方式被缩放或操纵,并且被用于各种目的。在一个实施例中,工作计数器可以用于提供当前工作载荷的动态简档。例如,hcnt230可以用于生成可由系统(例如,soc)中的所有核动态估计的各种类别的性能监测事件的加权和。hcnt230可用于预测硬件指导调度器(hgs)类别,例如,hcnt230可用作混合缩放预测器240和/或可以访问hcnt230的任何软件250的源。这些事件可以是isa的子类别(例如,avx浮点、avx2整数)、特殊指令(例如,重复字符串)或瓶颈的类别(例如,来自自顶向下分析的前端界限)。权重可以被选择成反映执行代码的类型(例如,存储器停顿或分支代码)和/或性能比(例如,对于在大核上以两倍的速度执行的指令类别为2,并且对于所有其他指令类别为1)、工作量的标量(例如,对于融合的乘法指令为2)等。某些实施例提供了要计数和/或求和的各种事件中的任何事件,包括与算术浮点(例如,128位)向量指令、算术整数(例如,256位)向量指令、算术整数向量神经网络指令、加载指令、存储指令、重复串、自顶向下微架构分析(tma)1级度量(例如,前端界限、后端界限、坏推测、引退)和/或由任何计数器计数的任何性能监测事件相关的事件。除了根据本公开的实施例的工作计数器之外,图2示出了根据本发明的实施例的工作计数器的使用的表示,包括通过混合缩放预测器240和/或通过可以访问工作计数器的任何软件250。在实施例中,混合缩放预测器240可以用硬件或固件实现,可以向os242提供信息(例如,直接或间接信息,例如通过基于计数器值启用索引的范围),和/或可以用于预测性能缩放(例如,在大核和小核之间),例如,通过向硬件提供基于历史的提示(例如,经由写入到由os读取的msr)。在实施例中,工作计数器可以用于向在异构(例如,或同构)soc或系统上运行的操作系统提供提示(例如,写入到msr中),其中提示可以提供可以改进性能和/或服务质量的任务调度。例如,包括相同内核的一个或多个实例的同构系统供优化多核线程调度中使用。例如,可以使用包括一个或多个大核和一个或多个小核的异构客户端系统来运行人工智能(ai)应用(例如,机器学习模型),其包括可以加速在ai应用中通常使用的指令类型的处理的特定类别的指令,例如,特别是或者仅当在大核上执行时。使用被编程以监测这种类别的指令的执行的工作计数器可以向os提供提示,以指导os将包括这些指令的线程调度到大核上而不是小核上,由此改进性能和/或服务质量。在某些实施例中,权重值可编程以提供基于实际结果的权重调谐(例如,在实验室中)。在实施例中,可以使用一个或多个零权重来断开特定事件或特定类别的事件。在实施例中,可以使用一个或多个零权重来隔离馈送到工作计数器中的各种组件。本文的实施例可以支持硬件和/或软件(例如,os)的选项,以出于各种原因中的任何原因来启用/禁用工作计数器,例如,以避免当工作计数器不使用时的功率泄漏。在一个实施例中,操作系统代码(例如,图1中的os代码160)的调度器使用硬件指导调度器116(和/或混合缩放预测器240)来选择要用于执行软件线程(例如,第一应用代码(例如,图1中的第一应用代码164)或第二应用代码(例如,图1中的第二应用代码166)的软件线程)的线程的最佳核(例如,类型)(或其他组件)。软件线程运行时属性历史(例如,包括本文讨论的权重值和/或hcnt计数器值)可以对于第一软件线程是有用的,但是对于随后的第二软件线程不是有用的。因此,本文的某些实施例提供了用于在上下文切换(例如,从第一软件线程到第二软件线程的切换)上清除软件线程运行时属性历史的指令(和方法)。例如,清除hcnt计数器当前值(例如,并因此清除全预测流的该值的影响)。例如,清除图2中的计数器e0...en和/或hcnt230的当前值。在一个实施例中,指令助记符是“hreset”,但是对于其他实施例,它可以是另一个助记符。hreset的使用操作码能包括立即操作数、其他类型的操作数或零显式操作数(例如,在不使用任何操作数的情况下定义的)。在一个实施例中,硬件(例如,处理器核)忽略任何立即操作数值(例如,而不引起异常(例如,故障))和/或任何请求特定设置。应当理解,其他实施例可以利用立即操作数值(例如,使得被预留用于其他使用)。在其中指令包括立即操作数的另一个实施例中,有可能定义该立即操作数将仅包括零(例如,或者在执行指令时在其他情况下引起异常(例如,故障))。可能不支持其他操作数值,并且不正确的设置可生成异常,如无效操作码(例如,未定义的操作码或一般保护故障)。在一个实施例中,指令将忽略显式(例如,立即)操作数,而其隐式操作数(例如,在指令的字段中未显式指定的)可以是(例如,图1中的通用寄存器108的)通用寄存器(例如,eax寄存器)(例如,以启用位屏蔽配置的32个选项)。其他选项要定义没有显式立即操作数的指令,并且在这种情况下,有效使用例如是操作码(例如,对应于hreset的助记符),而其隐式操作数(例如,在指令的字段中未显式指定的)可以是(例如,图1中的通用寄存器108的)通用寄存器(例如,eax寄存器)。在某些实施例中,隐式操作数是单个寄存器(例如,eax)或多个寄存器的级联(例如,eax:edx将级联寄存器eax的内容接着寄存器edx的内容(例如,以启用位屏蔽配置的64个选项))。在某些实施例中,例如,指令利用新操作码(例如,不是传统指令的传统操作码),使得不支持该指令的硬件将不能够执行它(例如,并且在像这样的情况下将发生异常未定义的指令)。在某些实施例中,该指令的使用可以包括软件(例如,os)要在调度指令的执行之前检查硬件是否支持该指令的执行。在一个实施例中,软件要检查硬件是否支持执行检查(例如,具有cpuid的助记符)指令特征位设置的指令的执行。在某些实施例中,指令的执行仅被允许用于某一特权级(例如,监管者级(例如,环0)和/或用户级(例如,环3))。在其中指令被限于仅由监管者级(例如,os)使用(例如,仅在环0中)的实施例中,对于针对用户级(例如,用户应用)的指令执行的请求生成异常,例如,一般保护异常。本文的某些实施例定义了新指令,其中os能够选择要清除的处理器组件(例如,以(例如,仅)清除一个或多个逻辑处理器的历史)(例如,以(例如,仅)清除软件线程运行时属性历史中的一个或多个)。在一个实施例中,指令包括控制参数,以使软件(例如,os)能够在运行时控制所支持的确切的历史重置(例如,以比写入到msr快得多的方法)。在某些实施例中,新指令的控制通过指令的参数进行(例如,实现32位控制选项的数据寄存器和/或实现64位控制选项的一组数据寄存器)。在某些实施例中,指令还定义了对指令的支持能力的os控制(例如,选择性加入)。在某些实施例中,指令采取隐式操作数(例如,eax)或显式操作数。在其中用户模式(例如,环3)中支持该指令的实施例中,os可以具有以下能力:控制和选择性加入该指令包括(例如,多个能力中的)什么能力和/或该指令能重置什么类型的历史以及以哪种方式重置。为了支持这一点,在某些实施例中,可请求os辅助(例如,应用编程接口(api)的os系统调用),并将其用于启用针对用户级代码的指令,指示哪些重置(例如,hreset)支持能力由os启用(例如,并且由硬件支持)和/或用于控制任何重置(例如,hreset)指令参数(例如,在监管者级中)。在一个实施例中,os将该新指令设置为例如针对上下文切换流程的os调度器运行时支持的一部分(例如,如图4中所示),或者设置为可控制不同类型的线程任务的运行时支持中的线程的一部分(例如,如图5中所示)。在某些实施例中,用新操作码定义指令,因此在能够使用该指令之前,软件(例如,os)要首先检查硬件是否支持该指令以及它的能力是什么。因此,在一个实施例中,由软件定义不同的代码路径来支持这个新指令。例如,利用检查硬件是否支持通过读取(一个或多个)(例如,cpuid)特征位而执行指令,以确定硬件是否支持该新指令。在一个实施例中,软件要仅在硬件支持该新指令时才使用它,如由其枚举方法所指示的。在处理器的一个实施例中,以推测性方式进行执行。为了避免推测性历史重置,有可能在(例如,hreset)指令被执行以用于历史重置时(例如,在重置历史的所有检查已经发生时,但在历史重置本身已经发生之前),它将采取动作作为预串行化动作指令,例如,其中在进行历史重置之前,所有先前的(按程序顺序)指令已经在本地完成。在一个实施例中,hreset用于避免历史泄漏,例如,在不按程序顺序执行指令的核中。另一个可能的支持选项是使预串行化指令能够仅在可受处理器推测性执行方法影响的历史重置类型的子集上支持。在其他选项中,支持该指令作为串行化。还有可能仅针对特定hreset能力并且仅当这些hreset能力被启用而在使用中时,将支持定义为串行化指令。例如,可以使用针对历史重置类型的适当子集选择预串行化指令支持方法或串行化指令支持方法的选项来限制预串行化或串行化指令支持(例如,其中在执行历史重置之前,所有先前的(例如,按程序顺序)指令已经在本地完成)的任何负面性能副作用。在一个实施例中,新的重置(例如,hreset)指令包括模型特定寄存器(msr)(例如,os使用的),以便启用不同的支持特征。在一个实施例中,作为默认,所有的支持特征被禁用。在一个实施例中,os要启用支持特征的子集或全部。在一个实施例中,只有位的较低(例如,32)适当子集被分配用于hreset使用。图3中示出了这个msr的示例定义。图3示出了根据本公开的实施例的用于处理器内部历史重置的模型特定寄存器的示例格式300。所描绘的格式包括用于使能位302的第一位(例如,位位置0)(例如,使得将位302设置为第一值(例如,1)开启重置功能性,并将位302设置为第二值(例如,0)关闭重置功能性)。在一个实施例中,重置是对于软件线程运行时属性历史,例如,仅针对在监管者模式下做出的重置请求。其他位304可用于指示指令的其他能力。可选地,其他组件可能使它们的历史被清除,例如,如分别由其他位304(例如,用于64位模式的位63:1和用于32位模式的位31:1)中的相应位的设置所指示的。在一个实施例中,ia32_hreset_enablemsr是读/写msr,并且被构造为如下:位0-当设置为一时,启用增强型硬件反馈接口(ehfi)历史(例如,累积的历史)(例如,hgs或hgsplus)的重置,位31:1-为可以由hreset指令重置的其他能力保留,以及(可选的)位63:32-保留。在一个实施例中,操作系统经由hreset指令设置ia32_hreset_enable[位0]以启用ehfi历史重置。在一个实施例中,为了使hreset指令能够(例如,仅)当所有的重置历史条件已发生时开启预串行化支持,该指令要请求在将能够执行hreset指令的任何推测部分之前将完成(例如,ia32_hreset_enable)msr的写入。在一个实施例中,为了实现这一点,将(例如ia32_hreset)指令的wrmsr(例如微代码)操作(例如写入到msr)定义为串行化操作。在某些实施例中,作为指令执行的结果,新的(例如,hreset)指令使os能够重置硬件指导调度器的(hgs或hgsplus)历史。可用其他选项来增加能力的列表,所述选项例如重置核中(例如,或者非核中)与逻辑处理器或核执行历史相关的其他高速缓存信息,或者标记两个软件线程之间的上下文切换事件使得硬件可使用该标记,等等。处理器可通过cpuid位枚举对hreset指令的支持、控制msr(例如,ia32_hreset_enable)(例如,在图2中的格式300中)以及可能的支持hreset控制能力。在一个实施例中,cpuid指令的执行将处理器(例如,cpu)标识数据和特征信息返回给某些寄存器(例如,eax、ebx、ecx和edx寄存器)。在一个实施例中,通过检查特征支持位cpuid[0x7,ecx=1].eax[22]来指示对hreset指令和控制msr的支持。通过32位寄存器(例如,通用寄存器)中(例如,在特定的cpuid叶中)的分配,可进行hreset的支持能力的枚举和对控制msr的可能的有效设置。32位可以是cpuid[0x20,ecx=0].ebx[31:0]。cpuid的可能格式可如下表1中所示。表1:示例cpuid位cpuid位描述cpuid[0x7,ecx=1].eax[22]指示支持msr和hreset指令(例如,以及cpuid叶0x20)cpuid[0x20,ecx=0].ebx[0]指示支持hreseteax[0]参数和hreset_enable[0]msr以用于启用hgs重置或启用hgs和其他历史“hgsplus”重置cpuid[0x20,ecx=0].ebx[31:1]预留用于hreseteax[31:1]和a32_hreset_enable[31:1]能力在hreset指令的实施例被两个不同的用户(例如公司)使用的情况下,有可能每个用户将定义它的版本的控制msr,其将为每个用户启用不同类型的能力,例如,其中在这种情况下的枚举通过对每个公司特定分配cpuid叶或子叶来进行。另一个选项可以是通过共享相同的控制和枚举msr或者cpuid叶或子叶。在由新操作码支持的某些实现中,也有可能检查软件将有效值设置到hreset控制参数中(例如,在寄存器eax中)。从而,可期望确认控制参数的设置(例如,在寄存器eax中)与os在选择性加入的msr(例如,ia32_hreset_enable)中进行了的(一个或多个)设置相匹配。在控制参数中的控制位之一(例如,存储在寄存器eax中)与msr中设置的对应位(例如,ia32_hreset_enable)不匹配的情况下,在某些实施例中生成异常(例如,一般保护异常)。在一个实施例中,如果软件不通过指令(例如,eax)参数启用任何历史重置能力,则hreset指令由硬件执行作为空操作(nop),例如,具有或没有通过常规nop的一些额外的执行时延。在一个实施例中,用于初始化(例如,32位模式)hresetmsr(例如,ia32_hreset_enable)的伪代码是:if(cpuid[hreset]){os_hreset_cap=cpuid[hreset_cap]wrmsria32_hreset_enable,hreset_cap}ia32_hreset_enable值的设置可以是cpuid[hreset_cap]位的子集。在一个实施例中,用于仅当cpl=zero(ring0)时执行hreset指令以重置软件线程运行时属性历史的伪代码是:如果不支持hreset(cpuid[7,ecx=1].eax[22]==0),则undefined(#ud)如果cpl>0或((eaxandnotia32_hreset_enable)!=0),则generalprotectionfault(#gp(0))ifeax=0 thennopelse foreachi使得eax[i] 针对特征i重置历史在一个实施例中,在重置操作正在发生时,通过启用预串行化支持,hreset指令的执行的实现避免了推测性执行。在这些实施例之一中,用于hreset指令的执行的伪代码是:ifeax=0 thennopelse//没有下面的推测性执行 foreachi使得eax[i] 针对特征i重置历史在一个实施例中,当eax操作数=0时,在环0中试图执行hreset是nop。在一个实施例中,当eax操作数=0并且ia32_hreset_enable==0时,在环0中尝试执行hreset是nop(例如,如由os、vmm或vmos请求执行)。在某些实施例中,除了通过hreset指令的执行来重置的软件线程运行时属性历史(例如,在硬件指导调度器内),指令的执行不修改任何架构状态(寄存器、存储器、标志等)。在某些实施例中,历史重置(hreset)指令具有根据以下格式的一个或多个字段:在某些实施例中,历史重置(hreset)指令具有根据以下操作数编码“a”的一个或多个字段:op/en元组操作数1操作数2操作数3操作数4a不适用modrm:r/m(r)不适用不适用不适用在某些实施例中,历史重置(hreset)指令具有以下描述。历史重置(hreset)指令的某些实施例的执行向处理器提供提示,以选择性地重置当前逻辑处理器的预测历史。在某些实施例中,例如,hreset操作由隐式eax操作数控制,并且显式立即数的值(例如,八位宽“imm8”)操作数被忽略。在某些实施例中,cpuid.07h.01h:eax.hreset[位22]指示支持hreset指令。在某些实施例中,该指令只能在零的cpl下执行。在某些实施例中,hreset指令能够为多个预测提供重置提示。在某些实施例中,在执行hreset指令之前,系统软件必须采取以下步骤:1.经由cpuid.20h.0h:ebx枚举hreset能力,这指示可以重置什么预测,以及2.通过设置ia32_hreset_enablemsr中的相应位,选择性加入以重置可用能力的子集。例如,ia32_hreset_enablemsr中的选择性加入位与hreset能力cpuid位对齐。在某些实施例中,隐式eax操作数必须包含设置位,该设置位是在ia32_hreset_enablemsr中设置的那些位的子集,例如,否则,hreset生成#gp(0)。在某些实施例中,当eax=0时,hreset指令被解释为nop。在某些实施例中,在事务区域内执行hreset指令的任何尝试将导致事务中止。在某些实施例中,历史重置(hreset)指令具有以下操作:ifeax=0 thennop else foreachi,使得eax[i]=1 重置特征i的预测历史fi//例如,结束if语句在某些实施例中,历史重置(hreset)指令不影响处理器的任何标志。在某些实施例中,历史重置(hreset)指令包括以下保护模式异常中的一个或多个:#gp(0) 如果cpl>0或(eaxandnotia32_hreset_enable)≠0。#ud 如果cpuid.07h.01h:eax.hreset[位22]=0。在某些实施例中,历史重置(hreset)指令具有与上面的(一个或多个)保护模式异常相同的真实地址模式异常。在某些实施例中,历史重置(hreset)指令包括以下虚拟8086模式异常:#gp(0) 在虚拟8086模式下不识别hreset指令。在某些实施例中,历史重置(hreset)指令具有与上面的(一个或多个)保护模式异常相同的兼容模式异常。在某些实施例中,历史重置(hreset)指令具有与上面的(一个或多个)保护模式异常相同的64位模式异常。在某些实施例中,cpuid指令的执行(例如,当寄存器eax具有初始值07h并且寄存器ecx具有初始值1时)导致输出,其中在eax中具有索引位置22的位用于hreset,例如,当为一时,指示(例如,逻辑)处理器支持历史重置(hreset)和ia32_hreset_enablemsr,和/或处理器历史重置叶(例如,eax=20h)有效。在某些(例如,处理器历史重置子叶)实施例中,cpuid指令的执行(例如,当寄存器eax具有初始值20h,并且寄存器ecx具有初始值为0时)引起输出,其中寄存器:eax报告叶20h支持的子叶的最大数量,ebx指示可以在ia32_hreset_enablemsr中设置哪些位,以启用增强型硬件反馈接口历史,并且ecx和edx被保留。在某些实施例中,hreset指令的执行显式地重置增强型硬件反馈接口(ehfi)历史。在某些实施例中,存在隐式ehfi历史重置(例如,而不是响应于执行hreset指令的重置)。在某些实施例中,ehfi历史在以下情况中的任何情况下被隐式地重置:1.当处理器进入或退出smm模式并且设置了ia32_debugctlmsr.freeze_while_smm(位14)时,ehfi历史被处理器隐式地重置。2.当发布getsec[senter]时(例如,为了发起所测量的环境的启动并将发起逻辑处理器(ilp)置于认证代码执行模式),处理器重置系统中所有逻辑处理器上的ehfi历史,包括其他插槽上的逻辑处理器(除了执行getsec(senter)的那个)。3.当发布getsec[enteraccs]时,处理器在其上执行它的逻辑处理器上重置ehfi历史。4.当由逻辑处理器处理启动处理器间中断(sipi)信号的初始化或等待时,无论该信号是否是getsec[enteraccs]的结果,ehfi历史都被重置。在某些实施例中,如果操作系统在退出所测量的环境之后或者在处理sipi事件时要求ehfi是活动的,则它应该重新启用ehfi。图4示出了根据本公开的实施例的操作系统(os)调度器控制流程(例如,汇编码)图400。例如,包括在402结束当前线程执行(例如,并且保存当前线程上下文),在404如果(cpuid.hreset==1){moveax,os支持历史重置选项并且执行hreset},并且在406恢复/初始化新线程执行(例如,并且恢复/初始化新线程上下文)。hreset可采用立即数值(例如,imm8)作为操作数。在一个实施例中,cpuid.hreset==1是通过设置cpuid.07h.01h:eax.hreset[位22]==1实现的。图5示出了根据本公开的实施例的应用级控制流程(例如,汇编码)图500。例如,包括在502使用线程运行时管理来结束软件(s/w)任务的os调度器,在504如果(cpuid.hreset==1){moveax,os支持历史重置选项并且执行hreset},并且在506,os调度器使用线程运行时管理来恢复/初始化新s/w任务。图6示出了根据本公开的实施例的操作系统(os)重置流程(例如,汇编码)图600。例如,在602检查是否有cpuid.hreset==1,在604执行support_cap=cpuid[y].hreset_cap,并且在606将support_cap和os_support_mask写入msrhreset中。在一个实施例中,cpuid[y].hreset_cap是cpuid[0x20,ecx=0].ebx[31:0]。图7示出了根据本公开的实施例的操作系统(os)调度器流程(例如,汇编码)图700。例如,在702结束当前线程执行并且保存当前线程上下文,在704如果(cpuid.hreset==1){moveax,os支持历史重置选项并且执行hreset},并且在706恢复/初始化新线程执行并且恢复/初始化新线程上下文。在一个实施例中,os利用(例如,eax)寄存器中的hreset控制参数来在运行时中控制确切的重置历史类型(例如,指令的能力)是什么。在某些实施例中,使用指令的参数是比在运行时中设置msr更简单的方法。在某些实施例中,这使os能够对每个软件线程类型(例如,针对第一应用的第一线程类型和针对第二应用的第二线程类型)重置历史(例如,以及历史类型的适当子集)。在某些实施例中,os在软件线程的运行时期间(并且不仅在上下文切换期间)也能重置处理器历史。在某些实施例中,hreset指令的使用模型假定在hreset指令的执行之后,被重置的历史对在该事件之后(例如,在hreset指令的执行之后)完成的任何操作没有影响,例如,即使在支持执行的乱序和推测性的处理器中,也可以假定事件的排序规则将被保持。例如,作为硬件指导调度器的一部分,硬件使msr能够在读取该msr之前基于运行时历史将反馈返回到os(例如,以提供提示)。对于以下流程:hreset指令的执行导致硬件指导调度器(hgs)(例如,hgsplus)的重置//保证在该hreset指令之前的hgs(例如,加上如由能力指示的要重置的任何其他历史,例如累积地称为hgsplus)对于用于获得提示的任何之后的msr的读取(例如,rdmsr和/或线程反馈msr(例如,ia32_thread_feedback_charmsr))不再可见(例如,如上面参考图2所讨论的)。在某些实施例中,这是在以下假定下进行的:支持反馈的读取(例如,以及预串行化)和/或rdmsr也被定义为预串行化或完全串行化isa,例如,因此它受到硬件的保护,在hreset完成其执行流程之后,rdmsr将在该硬件上执行。在某些实施例中,处理器将不推测性地执行hreset指令,例如,以避免在处理器假定已经清除历史之后重新填充历史(例如,在hgs中)。在下面的流程中示出对此的示例支持:hreset[hgs_reset]//保证hreset指令之前的hgs(例如,hgsplus)历史对于供os使用的以下(例如rdmsr)hgs(例如,hgsplus)历史反馈不再可见,例如,这是由于hreset的实施例的预串行化支持模型。rdmsr历史反馈//假定该msr读取的预串行化(例如,其中该msr包括用于基于hgs(例如,hgsplus)历史来指示核类型的提示)该流程可用于在正在重置hgs的历史的hreset指令的执行之间和在作为对os的反馈的hgs(例如,hgsplus)历史的读取(例如,经由msr)之前创建串行化。在某些实施例中,为了避免该指令的推测执行,在实际执行历史重置之前,指令流程仅在历史重置的条件发生时确保没有推测性执行。在针对某个特定hreset支持特征的一个实施例中,有可能添加强排序支持,如全串行化指令。在一个实施例中,有可能用全串行化指令或者仅当满足历史重置条件时定义hreset支持。在某些实施例中,在这些条件尚未发生(并且异常没有由于错误的设置/使用而发生)的情况下,当操作该指令作为nop时,不存在该指令的可能推测性执行的副作用。在某些实施例中,指令仅在它被设置为作为nop操作时才避免串行化,例如,在eax操作数中设置了(一个或多个)能力位之一的情况下,在启用预串行化的同时执行该指令。图8a-8d示出了根据本公开的实施例的os和虚拟机监测器(vmm)支持模型流程图。在某些实施例中,虚拟机监测器(vmm)(也称为管理程序)是软件程序,该软件程序当被执行时(例如,在监管者模式中,但不在用户模式中)使得能够实现vm实例的创建、管理和监管,并管理物理主机机器顶上的虚拟化环境的操作。在某些实施例中,vmm是虚拟化环境和实现背后的主要软件。当在某些实施例中安装在主机机器(例如,处理器)上时,vmm促进创建vm(例如,vm启动(vmlaunch)),例如,其各自具有单独的操作系统(os)和应用。vmm可通过分配必要的计算、存储器、存储设备和其它输入/输出(i/o)资源(诸如但不限于输入/输出存储器管理单元(iommu))来管理这些vm的后端操作。vmm可以提供用于管理安装在单个主机机器上或跨不同且互连的主机而扩展的vm的整个操作、状态和可用性的集中式接口。在某些实施例中,vm之间的切换(例如,vm进入、vm恢复和/或vm退出)要求将处理器核切换到监管者模式(例如,而不是停留在用户模式中)。图8a示出了根据本公开的实施例的os支持模型流程图。例如,对于可能的oshreset使用模型801,其(1)在os启动时间期间,os通过枚举功能cpuidcpuid[7,1][22]位来检查hreset是否被支持,以(i)经由指示可以重置什么预测的cpuid[0x20,ecx=0].ebx[31:0]来枚举hreset能力,以及(ii)通过在ia32_hreset_enablemsr中设置相应位来选择性加入重置可用能力的子集。例如,ia32_hreset_enablemsr中的选择性加入位与hreset能力cpuid位对齐(1对1匹配),以及(2)在s/w线程上下文切换期间,os应当清除当前s/w线程的h/w历史并且在新s/w线程开始其运行时之前,(i)通过hreseteax操作数设置目标重置特征,(ii)hreseteax操作数将包含作为在ia32_hreset_enablemsr中设置的那些位的子集的设置位(例如,否则,hreset生成#gp(0)),并且(iii)执行hreseteaxisa。作为虚拟化的一部分,在一个模型中,vmm不能阻止访客软件执行hreset,并且hreset不能导致vm退出,并且没有对应的vm执行控制。在一个实施例中,vmm可通过拦截msr的访客写入(wrmsr)和该msr的访客读取(rdmsr)来控制在hreset_enable中设置哪些位(例如,图3中的格式300的msr)(例如,ia32_hreset_enable)。在一个实施例中,vmm可决定它针对哪些特征允许访客重置历史。在一个实施例中,vmm可通过虚拟化对访客支持将有效的那些特征的cpuid位来进行控制。在一个实施例中,vmm仿真hreset_enablemsr以仅启用被允许由访客设置的那些位。在一个实施例中,vmm用访客os预期的值维持msr。在这个模型中,如果vmm避免对hreset_enable的任何设置,那么访客只能执行hreset指令作为nop。虚拟化支持可使用以下三种使用模型中的一种或多种:在一个模型(例如,如图8b中所示的模型802)中,vmm不知道hreset指令支持,例如,如果vmm不知道这个新指令,则它将不枚举它,并且将不对其osvm访客启用它。例如,使得该指令的新cpuid特征位将不在此vmm下针对vm访客而被启用。在这种情况的一个实施例中,os访客将不能够枚举对这个新指令的支持,并且os应该不使用它。因此,vmm本身将不设置能力msria32_hreset_enable,并且由于访客os将不能够自己设置控制msr(例如,vmm将不针对vmos使用初始化这些(一个或多个)msr),因此在某些实施例中,该msr将召回清除并且作为结果。在该模型的某些实施例中,vmos(访客)将不能够枚举对hreset指令的支持(由于vmm没有启用它),并且预期是vmos(访客)将不会启用和使用hreset指令,如果vmos请求执行这个新指令,则在一个模型中(例如,当寄存器eax中的这个指令参数清除时),hreset将执行作为nop。如果eax将不清除,则该新指令的执行将是具有一般保护故障预期的结果。在一个实施例(例如,图8b中所示的)中,vmm可能使用模型包括:(1)在vmm启动时间期间,vmm将不启用hreset支持,随后,vmm将不启用hgs 支持,(2)避免虚拟化hresetcpuid功能位,避免虚拟化hresetcpuid能力位和ia32_hreset_enablemsr,并避免虚拟化hgs cpuid位和hgs msr,如果支持hreset,则针对vm使用启用以及启用其子集或所有能力位,和/或os作为hreset的vm只有在其隐式操作数eax==0时才是可能的,在这种情况下,它被执行为nop,并且如果eax=!0,hreset的执行将生成#gp。在另一个模型(例如,如图8c中示出的模型803)中,vmm知道hreset指令支持,但是避免从其访客os使用这个新指令,例如,在vmm知道hreset指令并启用hreset指令以供其使用的情况下,这意味着vmm包括对hreset的枚举支持作为特征及其能力,与常规os相同(例如,不是vmos)。在一个实施例中,vmm还包括作为其调度器支持流程的一部分或者在其他vmm的线程运行时管理中使用hreset,并且仅当硬件支持该指令时才使用它。在一个实施例中,在vmm应该重置其自己的历史记录并避免vm(例如,访客)可能可以直接或间接访问该历史记录的可能性的情况下,vmm可以使用hreset。在一个实施例中,vmm要选择性加入该组hreset历史重置能力。在一个实施例中,vmm要将也设置在选择性加入的msria32_hreset_enable中的(一个或多个)能力位设置到hreseteax参数中。在这种使用情况下,vmm使其访客避免使用hresetmsr。在一个实施例中,vmm仿真cpuid,并且使vmos访客避免枚举对hreset及其能力的支持的选项。在一个实施例中,vmm使vmos访客避免访问到ia32_hrest_enable的选项。在一个实施例中,在vmm恢复到vmos访客之前,它将保持ia32_hreset_enable清除。在一个实施例中,在从虚拟机退出(vmexit)期间并在vmm的线程的执行之前,由vmm将其设置值恢复到ia32_hreset_enable。在某些实施例中,如果vmos访客没有访问在vmm运行时期间收集的(例如,hgs或hgsplus)历史(包括其软件线程或服务)或受其影响的选项,则在恢复回到vmos访客之前不重置历史是有效的。在另一个实施例中,在vmm软件线程是活动的或者vmm使用它的可能包括应当通过历史重置来重置的敏感信息的服务的情况下,则vmm要在恢复到osvm访客之前用hreset指令重置历史(例如,在vmmhreset能力允许的情况下)。在某些实施例中,要使用以下流程。在一个实施例中,可仅对于能力的子集执行历史重置(例如,用vmmhreseteax参数值执行hreset)。示例流程(例如,在恢复vm之前由vmm运行)是:wrmsrhreset_enable,vmm支持能力moveax,vmm支持能力hresetimm8//清除hgs历史wrmsrhreset_enable,zero_val在某些使用模型中,例如,由于缺少从vmos访客枚举对hreset指令及其能力的支持的选项,以及写入到选择性加入的msria32_hreset_enable的选项,在某些实施例中,osvm访客将不使用hreset指令。在一个实施例中,如果vmos仍然请求执行该新指令(例如,当eax寄存器中的该指令参数清除时),则hreset将执行为nop。在一个实施例中,如果指令所利用的寄存器(例如,eax)不清除(例如,全零),则指令的执行将导致(例如,一般保护故障)异常。在一个实施例中,hreset的仅vmm使用模型(例如,如图8c中所示的)可以包括以下中的一个或多个:1.在vmm启动时间期间,vmm通过枚举功能cpuidcpuid[7,1][22]位来检查是否支持hreset1.经由指示可以重置什么预测的cpuid[0x20,ecx=0].ebx[31:0]来枚举hreset能力2.通过设置ia32_hreset_enablemsr中的相应位来选择性加入重置可用能力的子集。ia32_hreset_enablemsr中的选择性加入位与hreset能力cpuid位对准(1对1匹配)3.保存vmm使用hreset能力以供其使用2.在vmm将要使用hreset指令的情况下,vmm应当在vmexit之后恢复它的ia32_hreset_enablemsr设置,在这种情况下,vmm应当在vmlaunc或vmresum之前将vmia32_hreset_enable设置归零,以便使它的vm避免执行hreset(除作为nop之外)的选项3.在vmm的s/w线程上下文切换期间,vmm应当清除当前s/w线程的h/w历史,并且在新s/w线程开始其运行时之前1.通过hreseteax操作数来设置目标重置特征2.hreseteax操作数必须包含设置位,该设置位是在ia32_hreset_enablemsr中设置的那些位的子集,否则,hreset生成#gp(0)3.执行hreseteaxisa4.在vmmvm迁移流或请求重置当前h/w历史的其它vmm事件期间,如果支持hreset(检查功能cpuid)1.如果该msr被虚拟化以供vm使用,则vmm可能需要将ia32_hreset_enablemsr值恢复成vmm支持值2.通过hreseteax操作数设置vmm目标重置特征3.执行hreseteaxisa4.在这种情况下,vmm应当在vmlaunc或vmresum之前将vmia32_hreset_enable设置归零,以便使它的vm避免执行hreset(除作为nop之外)的选项5.vmm不应虚拟化hresetcpuid位(例如,cpuid[7,1][22]和hresetcpuid[0x20,0]).ebx)和ia32_hreset_enablemsr1.每当vm试图访问ia32_hreset_ctl_enablemsr时,vmm应该向vm发布通用故障2.作为结果,当访客os执行hreset时,cpu将不递送#ud,相反cpu将:1.当eax=0时执行hreset作为nop(不请求重置任何历史)2.如果eax!=0则递送#gp(0)在该模型的特定实施例中,vmm可以控制(例如,如图8d中所示)在ia32_hreset_enable中设置哪些位,vmm可以拦截对此msr的访客wrmsr和rdmsr,vmm可以决定它允许访客重置哪些历史能力,将枚举能力位的子集给访客(例如,虚拟化的cpuid),在拦截写入msr(wrmsr)时,如果vmm试图在cpuid中设置超出vmm所允许的子集的任何位,则它将向访客递送#gp(0),和/或当访客已经设置了vmm所允许的能力位时以及在vm切换期间,vmm应该为访客维持msr值。在又一模型中(例如,如图8d中所描绘的模型804),vmm知道hreset指令支持,并将hreset支持启用到其vmos中,例如,vmm以与常规os相同的方式枚举和支持hreset。在该模型的某些实施例中,vmm使vmos访客能够使用hreset。在某些实施例中,它包括针对vmos访客启用该选项以枚举通过cpuid.hreset(例如,其中cpuid.hreset为cpuid[0x7,ecx=1].eax[22])的hreset指令支持以及通过cpuid.hreset_cap(例如,cpuid[0x20].ebx[31:0])的hreset的能力。在某些实施例中,这是通过仿真cpuid指令来进行的。在某些实施例中,vmm对vmos访客启用以下选项:启用和选择性加入针对vmos访客的hreset能力,并访问到hreset配置msria32_hreset_enable。在某些实施例中,这种类型的支持是通过仿真对vmos访客的ia32_hreset_enable的支持来提供的。在某些实施例中,例如,通过仅仿真该子集作为cpuid.hreset_cap的一部分(例如,其中hreset_cap是cpuid[0x20,ecx=0].ebx[31:0]),并控制仅这些能力位将由vmos访客在msrhreset_enable中启用,从而vmm可针对vmos访客启用h/w支持能力的子集。在某些实施例中,由vmos访客在仿真的msrhreset_enable中对位的错误且不受支持的设置触发从vmm到vmos访客的一般保护异常。在另一个选项中,vmm可使vmos访客能够在没有仿真的情况下读取ia32_hreset_enable。在某些实施例中,在vmos访客运行时期间并在vmm执行vmm的线程或vmlaunc之前,vmresume应该保持将ia32_hreset_enable恢复到该msr的vmos访客设置值中,同时该值被保存为该msr的仿真的一部分。在某些实施例中,在vmexit期间并在执行vmm的线程或vm切换到其他vmos访客之前,是由vmm首先重置当前访客的历史,并在用vmmhreseteax参数值执行hreset之前,恢复其设置值到hreset_enable。这两个重置调用可被合并成单个调用,其包括hreset能力的公共设置。在某些实施例中,仅当vmm的操作有可能能够影响访客的历史和/或期望避免从访客到vmm的历史泄漏时,才进行历史重置。示例流程是:moveax,当前vmos访客支持能力hreset//清除当前访客历史wrmsrhreset_enable,vmm支持能力moveax,vmm支持能力hresetimm8//清除vmm的相关历史当两个配置之间不存在匹配时,可以使用具有两个hreset操作的以上流程,然而,有可能将该流程优化成hreset的单次使用。在下面示出该流程的示例:wrmsrhreset_enable,vmm支持能力或当前vmos访客支持能力moveax,vmm支持能力或当前vmos访客支持能力hresetimm8//清除vmm相关历史wrmsrhreset_enable,vmm支持能力在某些实施例中,在恢复回到vmos访客之前,是由vmm来重置在其运行时期间收集的历史,并恢复回vmos访客ia32_hreset_enable。在一个实施例中,在执行vmm软件线程或执行其他vmm敏感工作的情况下,进行由vmm对信息的重置。示例流程是:moveax,vmm支持能力或vmos访客支持能力hresetimm8//清除vmm相关历史wrmsrhreset_enable,vmm支持能力或vmos访客支持能力在两个不同的vmos访客之间的上下文切换的某些实施例中,vmm要基于旧的和新的vmos访客能力设置来重置历史(例如,如果它们不匹配的话),并且保存和恢复ia32_hreset_enable值。示例流程是:通过rdmsria32_hreset_enablemsr保存当前vmos访客moveax,当前访客支持能力hresetimm8wrmsria32_hreset_enable,新访客支持能力moveax,新访客支持能力hreset在某些实施例中,该流程包括hreset的两个实例,其中在两个hreset配置之间不存在匹配,然而,有可能将其优化为单个hreset操作。示例流程是:通过rdmsria32_hreset_enablemsr保存当前vmos访客wrmsria32_hreset_enable,新访客支持能力或当前vmos访客moveax,新访客支持能力或当前vmos访客hresetimm8wrmsria32_hreset_enable,新访客支持能力在一个实施例中,vmm和(一个或多个)vm使用模型(例如,如图8c和图8d中所示的)可包括以下中的一个或多个:1.在vmm启动时间期间,vmm通过枚举功能cpuidcpuid[7,1][22]位来检查是否支持hreset1.经由指示可以重置什么预测的cpuid[0x20,ecx=0].ebx[31:0]来枚举hreset能力2.通过设置ia32_hreset_enablemsr中的相应位来选择性加入重置可用能力的子集。ia32_hreset_enablemsr中的选择性加入位与hreset能力cpuid位对准(1对1匹配)3.保存vmm使用hreset能力以供其使用2.在vmm将要使用hreset指令的情况下,vmm应当在vmexit之后恢复它的ia32_hreset_enablemsr设置,在这种情况下,vmm应当在vmlaunc或vmresum之前恢复/设置vmia32_hreset_enable设置3.在vmm的s/w线程上下文切换期间,os应当清除当前s/w线程的h/w历史,并且在新s/w线程开始其运行时之前1.通过hreseteax操作数来设置目标重置特征2.hreseteax操作数必须包含设置位,该设置位是在ia32_hreset_enablemsr中设置的那些位的子集,否则,hreset生成#gp(0)3.执行hreseteaxisa4.在vmmvm迁移流或请求重置当前h/w历史的其它vmm事件期间,如果支持hreset(检查功能cpuid)1.如果该msr被虚拟化以供vm使用,则vmm可能需要将ia32_hreset_enablemsr值恢复成vmm支持值2.通过hreseteax操作数设置vmm目标重置特征3.执行hreseteaxisa4.如果需要,恢复ia32_hreset_enablemsr到该msr的vm虚拟化设置值5.虚拟化hresetcpuid位和ia32_hreset_enablemsr1.如果支持hreset则针对vm使用启用以及启用其子集或所有能力位1.虚拟化hreset功能位cpuid[7,1][22]2.虚拟化hresetcpuid[32,0].ebx2.虚拟化hreset控制能力msr1.虚拟化ia32_hreset_enablemsr中哪些位有效以由vm设置3.对每个vm启用不同的支持能力是可能的4.vmm可能需要将ia32_hreset_enablemsr值恢复成vmm支持值,如果该msr被虚拟化以供vm使用,则在该情况下,vmm将需要在恢复该vm之前恢复该vm值5.作为结果,当访客os执行hreset时,cpu将不递送#ud,相反cpu将:1.当eax=0时执行hreset作为nop(不请求重置任何历史)2.如果eax!=0则递送#gp(0)在该模型的某些实施例中,vmm可控制哪些位被设置在ia32_hreset_enable中,vmm可拦截对该msr的访客写入msr(wrmsr)和读取msr(rdmsr),vmm可决定它允许访客重置哪些历史能力,将枚举能力位的子集给访客(例如,虚拟化的cpuid),在拦截wrmsr时,如果vmm试图在cpuid中设置超出vmm所允许的子集的任何位,则它将向访客递送#gp(0),和/或当访客已经设置了vmm所允许的能力位时以及在vm切换期间,vmm应该为访客维持msr值。在该模型的某些实施例中,对hreset的虚拟化支持包括cpuid位的虚拟化,例如,如果vmm要允许vm选择使用hreset,则vmm要虚拟化hreset功能cpuid位(例如,cpuid[7,1].eax[22])以及vmm针对vm启用(例如,通过cpuid[0x20].ebx位)的hreset能力。在某些实施例中,vmm不能促使vm退出,例如如果hreset正在由vm使用,则它没有对应的vm执行控制和/或vmm不能确保hreset总是递送#ud。图9示出了根据本公开的实施例的流程图。所描绘的流程900包括:用硬件处理器902的硬件指导调度器生成多个软件线程运行时属性历史;用硬件处理器的解码器将单个指令解码成经解码的单个指令,该单个指令具有标识控制寄存器904的字段;以及用硬件处理器的执行电路执行经解码的单个指令,以检查控制寄存器的使能位被设置,并且当使能位被设置时,重置硬件指导调度器906的多个软件线程运行时属性历史。下面详细描述以上内容可以用于其中的示例性架构、系统等。可鉴于以下示例来描述所公开技术的至少一些实施例:示例1.一种硬件处理器,包括:硬件指导调度器,所述硬件指导调度器包括多个软件线程运行时属性历史;解码器,所述解码器用于将单个指令解码成经解码的单个指令,所述单个指令具有标识控制寄存器的字段;以及执行电路,所述执行电路用于执行所述经解码的单个指令来:检查所述控制寄存器的使能位被设置,并且当所述使能位被设置时,重置所述硬件指导调度器的所述多个软件线程运行时属性历史。示例2.如示例1所述的硬件处理器,其中当所述使能位被设置时,所述执行电路要执行所述经解码的单个指令,以重置所述硬件指导调度器的所述多个软件线程运行时属性历史,而不修改所述硬件处理器的其他架构状态。示例3.如示例1所述的硬件处理器,其中所述单个指令的操作码是传统操作码,并且当所述使能位未被设置时,所述执行电路要执行所述单个指令作为空操作。示例4.如示例1所述的硬件处理器,其中当所述使能位被设置时,所述执行电路要仅当请求所述单个指令以便由操作系统执行时,执行所述经解码的单个指令,来重置所述硬件指导调度器的所述多个软件线程运行时属性历史。示例5.如示例1所述的硬件处理器,其中所述多个软件线程运行时属性历史包括针对所述硬件处理器的多个核的性能监测事件的相应类别的多个权重。示例6.如示例5所述的硬件处理器,其中所述相应类别包括针对第一类型的核的第一类别和针对第二较高性能核的第二类别。示例7.如示例5所述的硬件处理器,其中所述相应类别包括针对整数类型的向量指令的第一类别和针对浮点类型的向量指令的第二类别。示例8.如示例1所述的硬件处理器,其中所述硬件指导调度器要:将针对要在所述硬件处理器上执行的下一个软件线程的提示存储在所述硬件处理器的寄存器中,以向操作系统指示所述硬件处理器的多个核类型中的核类型,并且所述提示基于所述多个软件线程运行时属性历史。示例9.一种方法,包括:用硬件处理器的硬件指导调度器生成多个软件线程运行时属性历史;用所述硬件处理器的解码器将单个指令解码成经解码的单个指令,所述单个指令具有标识控制寄存器的字段;以及用所述硬件处理器的执行电路执行所述经解码的单个指令来:检查所述控制寄存器的使能位被设置,并且当所述使能位被设置时,重置所述硬件指导调度器的所述多个软件线程运行时属性历史。示例10.如示例9所述的方法,其中当所述使能位被设置时,所述执行所述经解码的单个指令重置所述硬件指导调度器的所述多个软件线程运行时属性历史,而不修改所述硬件处理器的其他架构状态。示例11.如示例9所述的方法,其中所述单个指令的操作码是传统操作码,并且当所述使能位未被设置时,所述执行电路执行所述单个指令作为空操作。示例12.如示例9所述的方法,其中当所述使能位被设置时,仅当请求所述单个指令以便由操作系统执行时,所述执行所述经解码的单个指令重置所述硬件指导调度器的所述多个软件线程运行时属性历史。示例13.如示例9所述的方法,其中所述多个软件线程运行时属性历史包括针对所述硬件处理器的多个核的性能监测事件的相应类别的多个权重。示例14.如示例13所述的方法,其中所述相应类别包括针对第一类型的核的第一类别和针对第二较高性能核的第二类别。示例15.如示例13所述的方法,其中所述相应类别包括针对整数类型的向量指令的第一类别和针对浮点类型的向量指令的第二类别。示例16.如示例9所述的方法,进一步包括:由所述硬件指导调度器将针对要在所述硬件处理器上执行的下一个软件线程的提示存储在所述硬件处理器的寄存器中,以向操作系统指示所述硬件处理器的多个核类型中的核类型,并且所述提示基于所述多个软件线程运行时属性历史。示例17.一种存储代码的非暂时性机器可读介质,所述代码当由机器执行时使所述机器执行方法,所述方法包括:用硬件处理器的解码器将单个指令解码成经解码的单个指令,所述单个指令具有标识控制寄存器的字段;以及用所述硬件处理器的执行电路执行所述经解码的单个指令来:检查所述控制寄存器的使能位被设置,并且当所述使能位被设置时,重置所述硬件处理器的硬件指导调度器的多个软件线程运行时属性历史。示例18.如示例17所述的非暂时性机器可读介质,其中当所述使能位被设置时,所述执行所述经解码的单个指令重置所述硬件指导调度器的所述多个软件线程运行时属性历史,而不修改所述硬件处理器的其他架构状态。示例19.如示例17所述的非暂时性机器可读介质,其中所述单个指令的操作码是传统操作码,并且当所述使能位未被设置时,所述执行电路执行所述单个指令作为空操作。示例20.如示例17所述的非暂时性机器可读介质,其中当所述使能位被设置时,仅当请求所述单个指令以便由操作系统执行时,所述执行所述经解码的单个指令重置所述硬件指导调度器的所述多个软件线程运行时属性历史。示例21.如示例17所述的非暂时性机器可读介质,其中所述多个软件线程运行时属性历史包括针对所述硬件处理器的多个核的性能监测事件的相应类别的多个权重。示例22.如示例21所述的非暂时性机器可读介质,其中所述相应类别包括针对第一类型的核的第一类别和针对第二较高性能核的第二类别。示例23.如示例21所述的非暂时性机器可读介质,其中所述相应类别包括针对整数类型的向量指令的第一类别和针对浮点类型的向量指令的第二类别。示例24.如示例17所述的非暂时性机器可读介质,进一步包括:由所述硬件指导调度器将针对要在所述硬件处理器上执行的下一个软件线程的提示存储在所述硬件处理器的寄存器中,以向操作系统指示所述硬件处理器的多个核类型中的核类型,并且所述提示基于所述多个软件线程运行时属性历史。示例25.如示例17所述的非暂时性机器可读介质,进一步包括:在所述解码之前将所述单个指令转译成不同指令集架构的一个或多个指令,其中所述不同指令集架构的所述一个或多个指令的执行将在功能上等同于所述经解码的单个指令的所述执行。在又一个实施例中,一种设备包括存储代码的数据存储装置,该代码当被硬件处理器执行时促使硬件处理器执行本文公开的任何方法。设备可以如具体描述中所描述的。方法可以如具体描述中所描述的。指令集可以包括一个或多个指令格式。给定指令格式可以定义各种字段(例如,位数、位的位置),以除了别的以外还指定要执行的操作(例如,操作码)和要对其执行该操作的(一个或多个)操作数和/或(一个或多个)其他数据字段(例如,屏蔽)。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包括的字段通常按照相同的顺序,但是至少一些具有不同的位位置,因为有较少字段被包括)和/或被定义为具有不同解释的给定字段。从而,使用给定指令格式表述isa的每个指令(并且,如果被定义,则按照该指令格式的指令模板中的给定模板)并且包括用于指定操作和操作数的字段。例如,示例性add指令具有特定操作码和指令格式,该指令格式包括用来指定该操作码的操作码字段和用来选择操作数(源1/目的地和源2)的操作数字段;并且指令流中该add指令的出现将在选择特定操作数的操作数字段中具有特定内容。已经发行和/或公布了称为高级向量扩展(avx)(avx1和avx2)并使用向量扩展(vex)编码方案的一组simd扩展(例如,参见intel®64和ia-32架构软件开发人员手册,2018年11月;并且参见intel®架构指令集扩展编程参考,2018年10月)。示例性指令格式本文描述的(一个或多个)指令的实施例可以用不同的格式体现。另外,下面详述了示例性系统、架构和流水线。(一个或多个)指令的实施例可以在这样的系统、架构和流水线上执行,但不限于所详述的那些。通用向量友好指令格式向量友好指令格式是适合于向量指令的指令格式(例如,存在特定于向量操作的某些字段)。虽然描述了其中通过向量友好指令格式支持向量操作和标量操作两者的实施例,但是备选实施例仅使用向量操作向量友好指令格式。图10a-10b是示出根据本公开的实施例的通用向量友好指令格式及其指令模板的框图。图10a是示出根据本公开的实施例的通用向量友好指令格式及其类别a指令模板的框图;而图10b是示出根据本公开的实施例的通用向量友好指令格式及其类别b指令模板的框图。具体地,对于通用向量友好指令格式1000,定义了类别a和类别b指令模板,类别a和类别b指令模板两者包括无存储器访问1005指令模板和存储器访问1020指令模板。向量友好指令格式的上下文中的术语通用指的是指令格式不被束缚于任何特定指令集。尽管将描述其中向量友好指令格式支持以下各项的本公开的实施例:具有32位(4字节)或64位(8字节)数据元素宽度(或大小)的64字节向量操作数长度(或大小)(并且由此,64字节向量由16个双字大小元素或备选地由8个四字大小元素组成);具有16位(2字节)或8位(1字节)数据元素宽度(或大小)的64字节向量操作数长度(或大小);具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的32字节向量操作数长度(或大小);以及具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的16字节向量操作数长度(或大小);但备选实施例可支持具有更多、更少或不同数据元素宽度(例如,128位(16字节)数据元素宽度)的更多、更少和/或不同向量操作数大小(例如,256字节向量操作数)。图10a中的类别a指令模板包括:1)在无存储器访问1005指令模板内,示出有无存储器访问、完全舍入(fullround)控制类型操作1010指令模板和无存储器访问、数据变换类型操作1015指令模板;以及2)在存储器访问1020指令模板内,示出有存储器访问、暂时(temporal)1025指令模板和存储器访问、非暂时1030指令模板。图10b中的类别b指令模板包括:1)在无存储器访问1005指令模板内,示出有无存储器访问、写屏蔽(writemask)控制、部分舍入控制类型操作1012指令模板和无存储器访问、写屏蔽控制、vsize类型操作1017指令模板;以及2)在存储器访问1020指令模板内,示出有存储器访问、写屏蔽控制1027指令模板。通用向量友好指令格式1000包括下面以图10a-10b中所示出的顺序列出的以下字段。格式字段1040-此字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并且由此标识指令流中采用向量友好指令格式的指令的出现。因此,此字段在对于仅具有通用向量友好指令格式的指令集不需要它的意义上是可选的。基本操作字段1042-它的内容区分不同的基本操作。寄存器索引字段1044-它的内容直接或者通过地址生成来指定源操作数和目的地操作数的位置,无论它们在寄存器中还是在存储器中。这些包括用来从pxq(例如,32x512、16x128、32x1024、64x1024)寄存器堆中选择n个寄存器的足够数量的位。尽管在一个实施例中n可以是多至三个源和一个目的地寄存器,但备选实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多至两个源,其中这些源之一也充当目的地;可以支持多至三个源,其中这些源之一还充当目的地;可以支持多至两个源和一个目的地)。修饰符(modifier)字段1046-它的内容区分指定存储器访问的采用通用向量指令格式的指令的出现与不指定存储器访问的那些指令的出现;也就是说,区分无存储器访问1005指令模板与存储器访问1020指令模板。存储器访问操作对存储器层级进行读取和/或写入(在使用寄存器中的值来指定源和/或目的地地址的一些情况中),而非存储器访问操作不进行(例如,源和目的地是寄存器)。尽管在一个实施例中,此字段还在用来执行存储器地址计算的三个不同方式之间进行选择,但备选实施例可以支持用来执行存储器地址计算的更多、更少或不同方式。扩充操作字段1050-它的内容区分除了基本操作外还要执行各种不同操作中的哪一个。此字段是上下文特定的。在本公开的一个实施例中,此字段被分成类别字段1068、alpha字段1052和beta字段1054。扩充操作字段1050允许操作的通用群组在单个指令而不是2、3或4个指令中被执行。比例(scale)字段1060-它的内容虑及索引字段的内容的缩放以用于存储器地址生成(例如,用于地址生成,该地址生成使用2比例*索引 基址)。位移(displacement)字段1062a-它的内容被用作存储器地址生成的一部分(例如,用于地址生成,该地址生成使用2比例*索引 基址 位移)。位移因子字段1062b(注意,位移字段1062a直接在位移因子字段1062b之上的并置指示一个或另一个被使用)-它的内容被用作地址生成的一部分;它指定要以存储器访问的大小(n)来缩放的位移因子-其中n是存储器访问中的字节的数量(例如,用于地址生成,该地址生成使用2比例*索引 基址 经缩放的位移)。冗余低顺序位被忽略,并且因此,位移因子字段的内容被乘以存储器操作数总大小(n)以便生成在计算有效地址时要被使用的最终位移。n的值由处理器硬件在运行时基于全操作码字段1074(本文中稍后所描述)和数据操纵字段1054c来确定。位移字段1062a和位移因子字段1062b在它们不被用于无存储器访问1005指令模板和/或不同实施例可以实现二者中的仅一个或不实现这二者的意义上是可选的。数据元素宽度字段1064-它的内容区分多个数据元素宽度中的哪一个要被使用(在一些实施例中,对于所有指令;在其它实施例中,对于指令中的仅一些指令)。在如果仅一个数据元素宽度被支持和/或使用操作码的某个方面来支持数据元素宽度则不需要此字段的意义上,此字段是可选的。写屏蔽字段1070-它的内容在每数据元素位置的基础上控制目的地向量操作数中的该数据元素位置是否反映基本操作和扩充操作的结果。类别a指令模板支持合并写屏蔽(merging-writemasking),而类别b指令模板支持合并-写屏蔽和归零-写屏蔽(zeroing-writemasking)两者。在合并时,向量屏蔽允许目的地中的元素的任何集合被保护免于在(由基本操作和扩充操作指定的)任何操作的执行期间的更新;在另外一个实施例中,保存其中对应屏蔽位具有0的目的地的每个元素的旧值。相比之下,在归零时,向量屏蔽允许目的地中的元素的任何集合在(由基本操作和扩充操作指定的)任何操作的执行期间被归零;在一个实施例中,在对应屏蔽位具有0值时,目的地的元素被设置成0。此功能性的子集是用来控制正被执行的操作的向量长度(也就是说,正被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不必是连续的。因此,写屏蔽字段1070虑及部分向量操作,包括加载、存储、算术、逻辑等。尽管描述了本公开的实施例,其中写屏蔽字段1070的内容选择多个写屏蔽寄存器中含有要被使用的写屏蔽的一个写屏蔽寄存器(并且因此写屏蔽字段1070的内容间接标识要被执行的该屏蔽),但备选实施例替代地或另外允许写屏蔽字段1070的内容直接指定要被执行的屏蔽。立即数字段1072-它的内容虑及指定立即数。在此字段不存在于不支持立即数的通用向量友好格式的实现中和此字段不存在于不使用立即数的指令中的意义上,此字段是可选的。类别字段1068-它的内容区分指令的不同类别。参考图10a-b,此字段的内容在类别a与类别b指令之间进行选择。在图10a-b中,圆角方形被用来指示特定值存在于字段中(例如,在图10a-b中对于类别字段1068分别为类别a1068a和类别b1068b)。类别a的指令模板在类别a的非存储器访问1005指令模板的情况中,alpha字段1052被解释为rs字段1052a,其内容区分不同扩充操作类型中的哪一个要被执行(例如,对于无存储器访问、舍入类型操作1010和无存储器访问、数据变换类型操作1015指令模板分别指定舍入1052a.1和数据变换1052a.2),而beta字段1054区分要执行所指定类型的操作中的哪个操作。在无存储器访问1005指令模板中,比例字段1060、位移字段1062a以及位移比例字段1062b不存在。无存储器访问指令模板-完全舍入控制类型操作在无存储器访问完全舍入控制类型操作1010指令模板中,beta字段1054被解释为舍入控制字段1054a,其(一个或多个)内容提供静态舍入。尽管在本公开的所描述的实施例中,舍入控制字段1054a包括抑制所有浮点异常(sae)字段1056和舍入操作控制字段1058,但备选实施例可以支持、可以将这两个概念编码成相同字段,或仅具有这些概念/字段中的一个或另一个(例如,可仅具有舍入操作控制字段1058)。sae字段1056-它的内容区分是否禁用异常事件报告;在sae字段1056的内容指示抑制被启用时,给定指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处置程序(handler)。舍入操作控制字段1058-它的内容区分要执行一组舍入操作中的哪一个(例如,上舍入、下舍入、向零舍入和向最近舍入)。因此,舍入操作控制字段1058虑及在每指令的基础上改变舍入模式。在本公开的一个实施例中,其中处理器包括用于指定舍入模式的控制寄存器,舍入操作控制字段1050的内容覆盖该寄存器值。无存储器访问指令模板-数据变换类型操作在无存储器访问数据变换类型操作1015指令模板中,beta字段1054被解释为数据变换字段1054b,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、拌和(swizzle)、广播)。在类别a的存储器访问1020指令模板的情况下,alpha字段1052被解释为逐出提示字段1052b,其内容区分要使用逐出提示中的哪一个(在图10a中,对于存储器访问、暂时1025指令模板和存储器访问、非暂时1030指令模板分别指定了暂时1052b.1和非暂时1052b.2),而beta字段1054被解释为数据操纵字段1054c,其内容区分要执行多个数据操纵操作(也称为基元(primitive))中的哪一个(例如,无操纵;广播;源的上转换;以及目的地的下转换)。存储器访问1020指令模板包括比例字段1060,并且可选地包括位移字段1062a或位移比例字段1062b。向量存储器指令利用转换支持来执行从存储器的向量加载和向存储器的向量存储。如同常规向量指令那样,向量存储器指令以逐数据元素的方式从/向存储器传递数据,其中实际被传递的元素由被选为写屏蔽的向量屏蔽的内容来指示。存储器访问指令模板-暂时暂时数据是可能被足够快地重新使用以受益于高速缓存的数据。然而,这是提示,并且不同的处理器可以用不同的方式来实现它,包括完全忽略该提示。存储器访问指令模板-非暂时非暂时数据是不太可能被足够快地重新使用以受益于在第1级高速缓存中进行高速缓存的数据并且应被给与对于逐出的优先级。然而,这是提示,并且不同的处理器可以用不同的方式来实现它,包括完全忽略该提示。类别b的指令模板在类别b的指令模板的情况中,alpha字段1052被解释为写屏蔽控制(z)字段1052c,其内容区分由写屏蔽字段1070控制的写屏蔽应是合并还是归零。在类别b的非存储器访问1005指令模板的情况中,beta字段1054的部分被解释为rl字段1057a,其内容区分要执行不同扩充操作类型中的哪一个(例如,对于无存储器访问、写屏蔽控制、部分舍入控制类型操作1012指令模板和无存储器访问、写屏蔽控制、vsize类型操作1017指令模板分别指定舍入1057a.1和向量长度(vsize)1057a.2),而beta字段1054的剩余部分区分要执行所指定类型的操作中的哪个操作。在无存储器访问1005指令模板中,比例字段1060、位移字段1062a以及位移比例字段1062b不存在。在无存储器访问、写屏蔽控制、部分舍入控制类型操作1010指令模板中,beta字段1054的剩余部分被解释为舍入操作字段1059a,并且异常事件报告被禁用(给定指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处置程序)。舍入操作控制字段1059a-正如舍入操作控制字段1058,它的内容区分要执行一组舍入操作中的哪一个(例如,上舍入、下舍入、向零舍入和向最近舍入)。因此,舍入操作控制字段1059a虑及在每指令的基础上改变舍入模式。在本公开的一个实施例中,其中处理器包括用于指定舍入模式的控制寄存器,舍入操作控制字段1050的内容覆盖该寄存器值。在无存储器访问、写屏蔽控制、vsize类型操作1017指令模板中,beta字段1054的剩余部分被解释为向量长度字段1059b,其内容区分要对多个数据向量长度中的哪一个(例如,128、256或512字节)执行。在类别b的存储器访问1020指令模板的情况下,beta字段1054的一部分被解释为广播字段1057b,其内容区分是否要执行广播类型数据操纵操作,而beta字段1054的剩余部分被解释为向量长度字段1059b。存储器访问1020指令模板包括比例字段1060,并且可选地包括位移字段1062a或位移比例字段1062b。关于通用向量友好指令格式1000,示出了全操作码字段1074,其包括格式字段1040、基本操作字段1042和数据元素宽度字段1064。尽管示出一个实施例,其中全操作码字段1074包括所有这些字段,但在并非支持所有这些字段的实施例中,全操作码字段1074包括少于所有这些字段。全操作码字段1074提供操作代码(操作码)。扩充操作字段1050、数据元素宽度字段1064和写屏蔽字段1070允许在通用向量友好指令格式中在每指令的基础上指定这些特征。写屏蔽字段和数据元素宽度字段的组合创建类型化(typed)指令,因为它们允许基于不同的数据元素宽度来应用屏蔽。在类别a和类别b内找到的各种指令模板在不同的情形中是有益的。在本公开的一些实施例中,不同处理器或者处理器内的不同核可以仅支持类别a、仅支持类别b、或者支持两个类别。例如,打算用于通用计算的高性能通用乱序核可以仅支持类别b,打算主要用于图形和/或科学(吞吐量)计算的核可以仅支持类别a,并且打算用于两者的核可以支持两个类别(当然,具有来自两个类别的模板和指令的某种混合而不是来自两个类别的所有模板和指令的核在本公开的范围之内)。同样,单个处理器可以包括多个核,所有这些核支持相同类别或其中不同核支持不同类别。例如,在带有单独的图形核和通用核的处理器中,打算主要用于图形和/或科学计算的图形核之一可以仅支持类别a,而通用核中的一个或多个可以是仅支持类别b的、打算用于通用计算的、带有乱序执行和寄存器重命名的高性能通用核。不具有单独的图形核的另一个处理器可以包括支持类别a和类别b两者的一个或多个通用有序或乱序核。当然,在本公开的不同实施例中,来自一个类别的特征可还被实现于另一类别中。以高级语言编写的程序将被置于(例如,即时(justintime)编译或静态编译)各种不同可执行形式中,包括:1)仅具有由用于执行的目标处理器所支持的(一个或多个)类别的指令的形式;或2)具有使用所有类别的指令的不同组合来编写的备选例程并且具有控制流程代码的形式,所述控制流程代码基于由当前正在执行代码的处理器所支持的指令来选择要执行的例程。示例性特定向量友好指令格式图11是示出根据本公开的实施例的示例性特定向量友好指令格式的框图。图11示出了特定向量友好指令格式1100,其在它指定字段的位置、大小、解释和顺序以及那些字段中的一些字段的值的意义上是特定的。特定向量友好指令格式1100可被用于扩展x86指令集,并且从而所述字段中的一些字段与在现有x86指令集及其扩展(例如avx)中使用的那些字段类似或相同。此格式与具有扩展的现有x86指令集的前缀编码字段、实操作码字节字段、modr/m字段、sib字段、位移字段以及立即数字段保持一致。示出了来自图11的字段映射到的来自图10的字段。应当理解,尽管为了说明性目的,在通用向量友好指令格式1000的上下文中参考特定向量友好指令格式1100描述了本公开的实施例,但是本公开不限于特定向量友好指令格式1100,除非在要求权利的情况下。例如,通用向量友好指令格式1000设想了各种字段的各种可能大小,而特定向量友好指令格式1100被示为具有特定大小的字段。通过特定示例的方式,虽然数据元素宽度字段1064被示出为特定向量友好指令格式1100中的一位字段,但是本公开未被如此限制(也就是说,通用向量友好指令格式1000设想了其他大小的数据元素宽度字段1064)。通用向量友好指令格式1000包括下面以图11a中示出的顺序列出的以下字段。evex前缀(字节0-3)1102-以四字节的形式编码。格式字段1040(evex字节0,位[7:0])-第一字节(evex字节0)是格式字段1040,并且它包含0x62(在本公开的一个实施例中是用于区分向量友好指令格式的唯一值)。第二-第四字节(evex字节1-3)包括提供特定能力的多个位字段。rex字段1105(evex字节1,位[7-5])-由evex.r位字段(evex字节1,位[7]-r)、evex.x位字段(evex字节1,位[6]-x)和evex.b(evex字节1,位[5]-b)组成。evex.r、evex.x和evex.b位字段提供与对应的vex位字段相同的功能性,并且使用1的补码形式来被编码,即,zmm0被编码为1111b,zmm15被编码为0000b。指令的其他字段如在本领域已知的那样对寄存器索引的较低三位进行编码(rrr、xxx和bbb),使得可以通过添加evex.r、evex.x和evex.b来形成rrrr、xxxx和bbbb。rex’字段1010-这是rex’字段1010的第一部分,并且是evex.r’位字段(evex字节1,位[4]-r’),其用于对扩展的32寄存器集合的较高的16个或较低的16个进行编码。在本公开的一个实施例中,此位连同如下面所指示的其他位,以位反转的格式来被存储,以区分(在公知的x8632位模式中)与bound指令,其实操作码字节为62,但在modr/m字段(下面描述)中不接受mod字段中的值11;本公开的备选实施例不以反转格式存储此位以及下面的其他指示的位。使用值1对较低的16个寄存器进行编码。换言之,r’rrrr是通过组合evex.r’、evex.r和来自其他字段的其他rrr形成的。操作码映射字段1115(evex字节1,位[3:0]-mmmm)-其内容编码隐含的前导操作码字节(0f、0f38或0f3)。数据元素宽度字段1064(evex字节2,位[7]-w)-由记号evex.w表示。使用evex.w来定义数据类型(32位数据元素或者64位数据元素)的粒度(大小)。evex.vvvv1120(evex字节2,位[6:3]-vvvv)-evex.vvvv的作用可包括以下内容:1)evex.vvvv编码以反转(1的补码)形式指定的第一源寄存器操作数,并且对于具有2个或更多个源操作数的指令是有效的;2)evex.vvvv编码对于某些向量移位以1的补码形式指定的目的地寄存器操作数;或者3)evex.vvvv不编码任何操作数,该字段被预留,并且应该包含1111b。从而,evex.vvvv字段1120编码以反转(1的补码)形式存储的第一源寄存器说明符的4个低阶位。取决于指令,使用额外的不同evex位字段来将说明符大小扩展为32个寄存器。evex.u1068类别字段(evex字节2,位[2]-u)-如果evex.u=0,则它指示类别a或evex.u0;如果evex.u=1,则它指示类别b或evex.u1。前缀编码字段1125(evex字节2,位[1:0]-pp)-为基本操作字段提供附加位。除了为采用evex前缀格式的传统sse指令提供支持,这还具有压缩simd前缀的益处(而不是需要字节来表述simd前缀,evex前缀仅需要2位)。在一个实施例中,为了支持使用采用传统格式和evex前缀格式两者的simd前缀(66h、f2h、f3h)的传统sse指令,将这些传统simd前缀编码成simd前缀编码字段;并且在运行时在被提供给解码电路的pla之前被扩展成传统simd前缀(因此,pla能执行这些传统指令的传统格式和evex格式两者而没有修改)。尽管较新的指令可能直接使用evex前缀编码字段的内容作为操作码扩展,但是某些实施例为了一致性以类似的方式扩展,但虑及要由这些传统simd前缀指定不同的意义。备选实施例可以将pla重新设计成支持2位simd前缀编码,并且从而不需要扩展。alpha字段1052(evex字节3,位[7]-eh;也称为evex.eh、evex.rs、evex.rl、evex.写屏蔽控制和evex.n;也用α示出)-如前所述,该字段是上下文特定的。beta字段1054(evex字节3,位[6:4]-sss,也称为evex.s2-0、evex.r2-0、evex.rr1、evex.ll0、evex.llb;也用βββ示出)-如前所述,该字段是上下文特定的。rex’字段1010-这是rex’字段的剩余部分,并且是evex.v’位字段(evex字节3,位[3]-v’),其可用于对扩展的32寄存器集合的较高的16个或较低的16个编码进行编码。此位以位反转的格式来被存储。使用值1对较低的16个寄存器进行编码。换言之,通过组合evex.v’、evex.vvvv来形成v’vvvv。写屏蔽字段1070(evex字节3,位[2:0]-kkk)-其内容指定如前所述的写屏蔽寄存器中的寄存器的索引。在本公开的一个实施例中,特定值evex.kkk=000具有特殊行为,表明没有写屏蔽被用于特定指令(这可以用各种方式实现,包括使用硬连线到全一(allones)的写屏蔽或绕过屏蔽硬件的硬件)。实操作码字段1130(字节4)也被称为操作码字节。在此字段中指定操作码的一部分。modr/m字段1140(字节5)包括mod字段1142、reg字段1144和r/m字段1146。如前所述,mod字段1142的内容区分存储器访问操作和非存储器访问操作。reg字段1144的作用能被总结为两种情形:对目的地寄存器操作数或者源寄存器操作数编码,或者被视为操作码扩展,并且不用于对任何指令操作数编码。r/m字段1146的作用可以包括以下内容:对引用存储器地址的指令操作数编码,或者对目的地寄存器操作数或源寄存器操作数编码。比例、索引、基址(sib)字节(字节6)-如前所述,比例字段1050的内容被用于存储器地址生成。sib.xxx1154和sib.bbb1156-这些字段的内容先前已经关于寄存器索引xxxx和bbbb提到了。位移字段1062a(字节7-10)-当mod字段1142包含10时,字节7-10是位移字段1062a,并且其与传统32位位移(disp32)相同地工作,并且以字节粒度工作。位移因子字段1062b(字节7)-当mod字段1142包含01时,字节7是位移因子字段1062b。此字段的位置与以字节粒度工作的传统x86指令集8位位移(disp8)的位置相同。由于disp8是符号扩展的,因此它只能在-128到127字节偏移之间寻址;就64字节高速缓存行而言,disp8使用8位,其仅能被设置为四个实际有用的值-128、-64、0和64;因为经常需要更大的范围,所以使用disp32;然而,disp32需要4字节。相比于disp8和disp32,位移因子字段1062b是disp8的重新解释;当使用位移因子字段1062b时,实际位移由位移因子字段的内容乘以存储器操作数访问的大小(n)来确定。这种类型的位移被称为disp8*n。这减小了平均指令长度(用于位移的单个字节,但具有更大的范围)。这种压缩的位移基于如下假定:有效位移是存储器访问的粒度倍数,并且因此,不需要对地址偏移的冗余低阶位进行编码。换言之,位移因子字段1062b替代传统的x86指令集8位位移。从而,位移因子字段1062b以与x86指令集8位位移相同的方式来被编码(因此,modrm/sib编码规则中没有改变),其中唯一的例外是disp8被过载为disp8*n。换言之,编码规则或编码长度没有改变,而只是在硬件对位移值的解释中有改变(这需要将位移以存储器操作数的大小缩放以获得逐字节的地址偏移)。立即数字段1072如之前所描述的那样操作。全操作码字段图11b是示出根据本公开的一个实施例的构成全操作码字段1074的特定向量友好指令格式1100的字段的框图。具体地说,全操作码字段1074包括格式字段1040、基本操作字段1042和数据元素宽度(w)字段1064。基本操作字段1042包括前缀编码字段1125、操作码映射字段1115和实操作码字段1130。寄存器索引字段图11c是示出根据本公开一个实施例的构成寄存器索引字段1044的特定向量友好指令格式1100的字段的框图。具体地说,寄存器索引字段1044包括rex字段1105、rex’字段1110、modr/m.reg字段1144、modr/m.r/m字段1146、vvvv字段1120、xxx字段1154和bbb字段1156。扩充操作字段图11d是示出根据本公开的一个实施例的构成扩充操作字段1050的特定向量友好指令格式1100的字段的框图。当类别(u)字段1068包含0时,它表明evex.u0(类别a1068a);当它包含1时,它表明evex.u1(类别b1068b)。当u=0并且mod字段1142包含11(表明没有存储器访问操作)时,alpha字段1052(evex字节3,位[7]-eh)被解释为rs字段1052a。当rs字段1052a包含1(舍入1052a.1)时,beta字段1054(evex字节3,位[6:4]-sss)被解释为舍入控制字段1054a。舍入控制字段1054a包含一位sae字段1056和二位舍入操作字段1058。当rs字段1052a包含0(数据变换1052a.2)时,beta字段1054(evex字节3,位[6:4]-sss)被解释为三位数据变换字段1054b。当u=0并且mod字段1142包含00、01或10(表明存储器访问操作)时,alpha字段1052(evex字节3,位[7]-eh)被解释为逐出提示(eh)字段1052b,并且beta字段1054(evex字节3,位[6:4]-sss)被解释为三位数据操纵字段1054c。当u=1时,alpha字段1052(evex字节3,位[7]-eh)被解释为写屏蔽控制(z)字段1052c。当u=1并且mod字段1142包含11(表明没有存储器访问操作)时,beta字段1054的一部分(evex字节3,位[4]-s0)被解释为rl字段1057a;当它包含1(舍入1057a.1)时,beta字段1054的其余部分(evex字节3,位[6-5]-s2-1)被解释为舍入操作字段1059a,而当rl字段1057a包含0(vsize1057.a2)时,beta字段1054的其余部分(evex字节3,位[6-5]-s2-1)被解释为向量长度字段1059b(evex字节3,位[6-5]-l1-0)。当u=1并且mod字段1142包含00、01或10(表明存储器访问操作)时,beta字段1054(evex字节3,位[6:4]-sss)被解释为向量长度字段1059b(evex字节3,位[6-5]-l1-0)和广播字段1057b(evex字节3,位[4]-b)。示例性寄存器架构图12是根据本公开一个实施例的寄存器架构1200的框图。在示出的实施例中,存在512位宽的32个向量寄存器1210;这些寄存器被引用为zmm0至zmm31。较低的16个zmm寄存器的较低阶256位被叠加在寄存器ymm0-16上。较低的16个zmm寄存器的较低阶128位(ymm寄存器的较低阶128位)被叠加在寄存器xmm0-15上。特定向量友好指令格式1100对这些叠加的寄存器堆进行操作,如下表中所示。换言之,向量长度字段1059b在最大长度和一个或多个其他较短长度之间进行选择,其中每个此类较短长度是之前的长度的一半长度;并且没有向量长度字段1059b的指令模板对最大向量长度进行操作。另外,在一个实施例中,特定向量友好指令格式1100的类别b指令模板对打包或标量单精度/双精度浮点数据和打包或标量整数数据进行操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;较高阶数据元素位置或者保持与它们在指令之前相同,或者归零,这取决于实施例。写屏蔽寄存器1215-在示出的实施例中,存在8个写屏蔽寄存器(k0至k7),各64位大小。在备选实施例中,写屏蔽寄存器1215为16位大小。如前所述,在本公开的一个实施例中,向量屏蔽寄存器k0不能被用作写屏蔽;当正常将指示k0的编码被用于写屏蔽时,它选择0xffff的硬连线写屏蔽,有效地禁止对该指令的写屏蔽。通用寄存器1225-在所示出的实施例中,存在十六个64位通用寄存器,其连同现有的x86寻址模式被用于寻址存储器操作数。这些寄存器通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp和r8直到r15来被引用。标量浮点栈寄存器堆(x87栈)1245,在其上将mmx打包整数平寄存器堆1250别名化(alias)-在所示出的实施例中,x87栈是八元素栈,其用于使用x87指令集扩展来对32/64/80位浮点数据执行标量浮点操作;而mmx寄存器用于对64位打包整数数据执行操作,以及用于为在mmx与xmm寄存器之间执行的一些操作保存操作数。本公开的备选实施例可以使用更宽或更窄的寄存器。另外,本公开的备选实施例可使用更多、更少或不同的寄存器堆和寄存器。示例性核架构、处理器和计算机架构处理器核可以用不同方式、为不同目的并且在不同处理器中被实现。例如,此类核的实现可包括:1)打算用于通用计算的通用有序核;2)打算用于通用计算的高性能通用乱序核;3)打算主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可以包括:1)包括打算用于通用计算的一个或多个通用有序核和/或打算用于通用计算的一个或多个通用乱序核的cpu;以及2)包括打算主要用于图形和/或科学(吞吐量)计算的一个或多个专用核的协处理器。此类不同处理器导致不同计算机系统架构,其可以包括:1)在与cpu分离的芯片上的协处理器;2)与cpu在相同的封装中在分离的管芯上的协处理器;3)在与cpu相同的管芯上的协处理器(在该情况中,这样的协处理器有时被称为专用逻辑,诸如集成图形和/或科学(吞吐量)逻辑,或被称为专用核);以及4)片上系统,其可以在相同管芯上包括所描述的cpu(有时被称为(一个或多个)应用核或(一个或多个)应用处理器)、上面所描述的协处理器和另外的功能性。接下来描述示例性核架构,接着是对示例性处理器和计算机架构的描述。示例性核架构有序和乱序核框图图13a是示出了根据本公开的实施例的示例性有序流水线和示例性寄存器重命名、乱序发布/执行流水线的框图。图13b是示出了根据本公开的实施例的要被包括在处理器中的示例性寄存器重命名、乱序发布/执行架构核和有序架构核的示例性实施例的框图。图13a-13b中的实线框示出了有序流水线和有序核,而虚线框的可选添加示出了寄存器重命名、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。在图13a中,处理器流水线1300包括获取级1302、长度解码级1304、解码级1306、分配级1308、重命名级1310、调度(也称为分派或发布)级1312、寄存器读取/存储器读取级1314、执行级1316、写回/存储器写入级1318、异常处置级1322和提交级1324。图13b示出处理器核1390,其包括耦合到执行引擎单元1350的前端单元1330,并且所述执行引擎单元1350和前端单元1330两者被耦合到存储器单元1370。核1390可以是简化指令集计算(risc)核、复杂指令集计算(cisc)核、超长指令字(vlim)核、或者混合或备选核类型。作为又一个选项,核1390可以是专用核,诸如例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(gpgpu)核、图形核等等。前端单元1330包括耦合到指令高速缓存单元1334的分支预测单元1332,该指令高速缓存单元1334被耦合到指令转译后备缓冲器(tlb)1336,该指令转译后备缓冲器(tlb)1336被耦合到指令获取单元1338,该指令获取单元1338被耦合到解码单元1340。解码单元1340(例如,解码电路)可以解码指令(例如,宏指令),并生成作为输出的一个或多个微操作、微代码条目点、微指令、其他指令或其他控制信号,以上这些解码自原始指令,或以其他方式反映原始指令,或从原始指令导出。可以使用各种不同机制来实现解码单元1340。适合的机制的示例包括但不仅限于查找表、硬件实现、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。在一个实施例中,核1390包括存储用于某些宏指令的微代码的微代码rom或其他介质(例如,在解码单元1340中或另外在前端单元1330内)。解码单元1340被耦合到执行引擎单元1350中的重命名/分配器单元1352。执行引擎单元1350包括耦合到引退单元1354和一组一个或多个调度器单元1356的重命名/分配器单元1352。(一个或多个)调度器单元1356代表任何数量的不同调度器,包括预留站(reservationsstation)、中央指令窗等。(一个或多个)调度器单元1356被耦合到(一个或多个)物理寄存器堆单元1358。(一个或多个)物理寄存器堆单元1358中的每个物理寄存器堆单元代表一个或多个物理寄存器堆,其中的不同的物理寄存器堆存储一个或多个不同数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,指令指针,其是要被执行的下一指令的地址)等。在一个实施例中,(一个或多个)物理寄存器堆单元1358包括向量寄存器单元、写屏蔽寄存器单元和标量寄存器单元。这些寄存器单元可提供架构向量寄存器、向量屏蔽寄存器和通用寄存器。(一个或多个)物理寄存器堆单元1358被引退单元1354重叠,以示出可以实现寄存器重命名和乱序执行所用的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器堆;使用(一个或多个)未来堆、(一个或多个)历史缓冲器和(一个或多个)引退寄存器堆;使用寄存器映射和寄存器池;等等)。引退单元1354和(一个或多个)物理寄存器堆单元1358被耦合到(一个或多个)执行集群1360。(一个或多个)执行集群1360包括一组一个或多个执行单元1362(例如,执行电路)和一组一个或多个存储器访问单元1364。执行单元1362可以执行各种操作(例如,移位、加法、减法、乘法)以及对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)执行。虽然一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其他实施例可以包括仅一个执行单元或全部执行全部功能的多个执行单元。(一个或多个)调度器单元1356、(一个或多个)物理寄存器堆单元1358和(一个或多个)执行集群1360被示为可能是复数的,因为某些实施例为某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线和/或存储器访问流水线,其各自具有它们自己的调度器单元、(一个或多个)物理寄存器堆单元和/或执行集群——并且在单独的存储器访问流水线的情况中,实现某些实施例,其中仅此流水线的执行集群具有(一个或多个)存储器访问单元1364)。还应理解的是,在单独的流水线被使用的情况下,这些流水线中的一个或多个可以是乱序发布/执行并且剩余的是有序的。存储器访问单元1364的集合被耦合到存储器单元1370,所述存储器单元1370包括耦合到数据高速缓存单元1374的数据tlb单元1372,所述数据高速缓存单元1374耦合到2级(l2)高速缓存单元1376。在一个示例性实施例中,存储器访问单元1364可以包括加载单元、存储地址单元和存储数据单元,其中的每个单元被耦合到存储器单元1370中的数据tlb单元1372。指令高速缓存单元1334被进一步被耦合到存储器单元1370中的2级(l2)高速缓存单元1376。l2高速缓存单元1376被耦合到一个或多个其他级别的高速缓存并最终耦合到主存储器。通过示例的方式,示例性寄存器重命名、乱序发布/执行核架构可以实现如下流水线1300:1)指令获取1338执行获取级1302和长度解码级1304;2)解码单元1340执行解码级1306;3)重命名/分配器单元1352执行分配级1308和重命名级1310;4)(一个或多个)调度器单元1356执行调度级1312;5)(一个或多个)物理寄存器堆单元1358和存储器单元1370执行寄存器读取/存储器读取级1314;执行群集1360执行执行级1316;6)存储器单元1370和(一个或多个)物理寄存器堆单元1358执行写回/存储器写入级1318;7)在异常处置级1322中可以涉及各种单元;以及8)引退单元1354和(一个或多个)物理寄存器堆单元1358执行提交级1324。核1390可以支持一个或多个指令集(例如,x86指令集(带有已随较新版本添加一些扩展)、加利福尼亚州森尼韦尔的mipstechnologies的mips指令集、加利福尼亚州森尼韦尔的armholdings的arm指令集(带有诸如neon之类的可选附加扩展),包括本文中所描述的(一个或多个)指令。在一个实施例中,核1390包括用来支持打包数据指令集扩展(例如,avx1、avx2)的逻辑,由此允许使用打包数据来执行由许多多媒体应用使用的操作。应理解的是,核可以支持多线程(执行操作或线程的两个或多于两个并行集合),并可以用各种方式来这样做,所述各种方式包括时间切片的多线程、同时多线程(其中单个物理核为物理核正在进行同时多线程的线程中的每个线程提供逻辑核),或其组合(例如,时间切片的获取和解码以及其后的同时多线程,诸如在intel®超线程技术中)。尽管寄存器重命名在乱序执行的上下文中被描述,但应理解的是,寄存器重命名可被用在有序架构中。尽管处理器的所示出的实施例还包括单独的指令和数据高速缓存单元1334/1374及共享l2高速缓存单元1376,但备选实施例可以具有用于指令和数据两者的单个内部高速缓存(诸如,例如1级(l1)内部高速缓存),或多个级别的内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核和/或处理器外的外部高速缓存的组合。备选地,所有高速缓存可以在核和/或处理器外。特定示例性有序核架构图14a-b示出了更特定的示例性有序核架构的框图,所述核将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核)中的一个。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)与某个固定功能逻辑、存储器i/o接口和其他必要的i/o逻辑进行通信。图14a是根据本公开的实施例的单个处理器核连同其到管芯上互连网络1402的连接以及其2级(l2)高速缓存的本地子集1404的框图。在一个实施例中,指令解码单元1400支持带有打包数据指令集扩展的x86指令集。l1高速缓存1406允许低时延访问以将存储器高速缓存到标量和向量单元中。尽管在一个实施例中(为简化设计),标量单元1408和向量单元1410使用单独的寄存器集合(分别为标量寄存器1412和向量寄存器1414),并且在它们之间转移的数据被写入到存储器中,并且随后从1级(l1)高速缓存1406中读回,但本公开的备选实施例可以使用不同途径(例如,使用单个寄存器集合,或者包括允许数据在所述两个寄存器堆之间转移而不被写入和读回的通信路径)。l2高速缓存的本地子集1404是全局l2高速缓存的部分,所述全局l2高速缓存被划分成单独的本地子集,每处理器核一个。每个处理器核具有到它自己的l2高速缓存的本地子集1404的直接访问路径。由处理器核读取的数据被存储在它的l2高速缓存子集1404中并能够被快速地访问,这并行于其他处理器核访问它们自己的本地l2高速缓存子集。由处理器核所写的数据被存储在它自己的l2高速缓存子集1404中并且如果必要则从其他子集中转储清除该数据。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、l2高速缓存和其他逻辑块之类的代理在芯片内与彼此通信。每个环形数据路径每个方向是1012位宽。图14b是根据本公开的实施例的图14a中处理器核的一部分的展开视图。图14b包括l1高速缓存1404的l1数据高速缓存1406a部分以及关于向量单元1410和向量寄存器1414的更多细节。具体地,向量单元1410是16宽向量处理单元(vpu)(参见16宽alu1428),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。vpu支持利用拌和单元1420来拌和寄存器输入,利用数值转换单元1422a-b的数值转换,以及利用复制单元1424的对存储器输入的复制。写屏蔽寄存器1426允许预测结果向量写入。图15是根据本公开的实施例的处理器1500的框图,该处理器1500可以具有多于一个核、可以具有集成存储器控制器并且可以具有集成图形元件。图15中的实线框示出了带有单个核1502a、系统代理1510、一组一个或多个总线控制器单元1516的处理器1500,而虚线框的可选添加示出了带有多个核1502a-n、系统代理单元1510中的一组一个或多个集成存储器控制器单元1514及专用逻辑1508的备选处理器1500。因而,处理器1500的不同实现可以包括:1)具有专用逻辑1508和核1502a-n的cpu,所述专用逻辑1508是集成的图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核),所述核1502a-n是一个或多个通用核(例如,通用有序核、通用乱序核、二者的组合);2)具有核1502a-n的协处理器,所述核1502a-n是大量打算主要用于图形和/或科学(吞吐量)计算的专用核;以及3)具有核1502a-n的协处理器,所述核1502a-n是大量通用有序核。因而,处理器1500可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元)、高吞吐量集成众核(mic)协处理器(包括30个或多于30个核)、嵌入式处理器等等。处理器可以实现在一个或多个芯片上。处理器1500可以是一个或多个衬底的一部分和/或可以使用多种工艺技术(诸如,例如bicmos、cmos、或nmos)中的任何工艺技术来被实现在一个或多个衬底上。存储器层级包括在核内的一个或多个级别的高速缓存、一组或者一个或多个共享高速缓存单元1506和耦合到一组集成存储器控制器单元1514的外部存储器(未示出)。一组共享高速缓存单元1506可以包括一个或多个中级高速缓存(诸如2级(l2)、3级(l3)、4级(l4)或其他级别的高速缓存)、末级高速缓存(llc)和/或其组合。尽管在一个实施例中,基于环的互连单元1512将集成图形逻辑1508、一组共享高速缓存单元1506和系统代理单元1510/(一个或多个)集成存储器控制器单元1514互连,但备选实施例可以使用用于将此类单元互连的任何数量的公知的技术。在一个实施例中,在一个或多个高速缓存单元1506与核1502a-n之间维持一致性。在一些实施例中,核1502a-n中的一个或多个核能够进行多线程。系统代理1510包括协调和操作核1502a-n的那些组件。系统代理单元1510可以包括例如功率控制单元(pcu)和显示单元。pcu可以是或包括调节核1502a-n和集成图形逻辑1508的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。核1502a-n可以在架构指令集方面是同构或异构的;也就是说,核1502a-n中的两个或多于两个核可以能够执行相同指令集,而其他核可以能够执行该指令集的仅子集或不同指令集。示例性计算机架构图16-19是示例性计算机架构的框图。本领域中已知的用于膝上型电脑、台式电脑、手持式pc、个人数字助理、工程工作站、服务器、网络装置、网络集线器、交换机、嵌入式处理器、数字信号处理器(dsp)、图形装置、视频游戏装置、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式装置及各种其他电子装置的其他系统设计和配置也是适合的。一般来说,能够合并如本文中所公开的处理器和/或其他执行逻辑的极多种的系统或电子装置是通常适合的。现在参考图16,所示出的是根据本公开的一个实施例的系统1600的框图。系统1600可以包括耦合到控制器集线器1620的一个或多个处理器1610、1615。在一个实施例中,控制器集线器1620包括图形存储器控制器集线器(gmch)1690和输入/输出集线器(ioh)1650(其可以在单独芯片上);gmch1690包括存储器1640和协处理器1645所耦合到的存储器和图形控制器;ioh1650将输入/输出(i/o)装置1660耦合到gmch1690。备选地,存储器和图形控制器之一或其两者被集成在处理器内(如本文中所描述的),存储器1640和协处理器1645被直接耦合到处理器1610和与ioh1650在单个芯片中的控制器集线器1620。存储器1640可以包括上下文切换代码1640a,例如以存储当被执行时促使处理器执行本公开的任何方法的代码。在图16中用断线来表示附加处理器1615的可选性质。每个处理器1610、1615可以包括本文中所描述的处理核中的一个或多个,并且可以是处理器1500的某个版本。存储器1640可以是例如动态随机存取存储器(dram)、相变存储器(pcm)或两者的组合。对于至少一个实施例,控制器集线器1620经由多点分支总线(multi-dropbus)(诸如前侧总线(fsb))、点对点接口(诸如快速通道互连(qpi))或类似连接1695来与(一个或多个)处理器1610、1615进行通信。在一个实施例中,协处理器1645是专用处理器,诸如例如高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等等。在一个实施例中,控制器集线器1620可以包括集成图形加速器。在包括架构、微架构、热、功率消耗特性等等的指标的度量谱方面,在物理资源1610、1615之间可存在各种差异。在一个实施例中,处理器1610执行控制一般类型的数据处理操作的指令。指令内所嵌入的可以是协处理器指令。处理器1610将这些协处理器指令识别为是应由附连的协处理器1645执行的类型。因此,处理器1610在协处理器总线或其他互连上将这些协处理器指令(或代表协处理器指令的控制信号)发布到协处理器1645。(一个或多个)协处理器1645接受并执行所接收的协处理器指令。现在参考图17,所示出的是根据本公开的实施例的第一更特定的示例性系统1700的框图。如图17中所示出的,多处理器系统1700是点对点互连系统,并且包括经由点对点互连1750耦合的第一处理器1770和第二处理器1780。处理器1770和1780中的每个可以是处理器1500的某个版本。在本公开的一个实施例中,处理器1770和1780分别是处理器1610和1615,而协处理器1738是协处理器1645。在另一实施例中,处理器1770和1780分别是处理器1610、协处理器1645。示出处理器1770和1780,其分别包括集成存储器控制器(imc)单元1772和1782。处理器1770还包括作为它的总线控制器单元的一部分的点对点(p-p)接口1776和1778;类似地,第二处理器1780包括p-p接口1786和1788。使用p-p接口电路1778和1788,处理器1770、1780可以经由点对点(p-p)接口1750交换信息。如图17中所示出的,imc1772和1782将处理器耦合到相应存储器(即,存储器1732和存储器1734),这些存储器可以是本地附连到相应处理器的主存储器的部分。处理器1770、1780可以各自使用点对点接口电路1776、1794、1786、1798经由各个p-p接口1752、1754与芯片集1790交换信息。芯片集1790可以可选地经由高性能接口1739与协处理器1738交换信息。在一个实施例中,协处理器1738是专用处理器,诸如例如高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等等。共享高速缓存(未示出)可以被包括在任一处理器中或在两个处理器之外,还经由p-p互连与处理器连接,使得如果处理器被置于低功率模式中,则任一或两个处理器的本地高速缓存信息可被存储在共享高速缓存中。芯片集1790可以经由接口1796被耦合到第一总线1716。在一个实施例中,第一总线1716可以是外围组件互连(pci)总线,或诸如pciexpress总线或另一第三代i/o互连总线的总线,尽管本公开的范围未被如此限制。如图17中所示出的,各种i/o装置1714可以连同总线桥1718被耦合到第一总线1716,所述总线桥1718将第一总线1716耦合到第二总线1720。在一个实施例中,一个或多个附加处理器1715(诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如,例如图形加速器和数字信号处理(dsp)单元)、现场可编程门阵列或任何其他处理器)被耦合到第一总线1716。在一个实施例中,第二总线1720可以是低引脚计数(lpc)总线。在一个实施例中,各种装置可以被耦合到第二总线1720,包括例如键盘和/或鼠标1722、通信装置1727和诸如盘驱动器或其他大容量存储装置的存储单元1728,所述存储单元1728可包括指令/代码和数据1730。此外,音频i/o1724可以被耦合到第二总线1716。注意,其他架构是可能的。例如,替代图17的点对点架构,系统可以实现多点分支总线或其他这样的架构。现在参考图18,所示出的是根据本公开的实施例的第二更特定的示例性系统1800的框图。图17和18中相似的元件标有相似参考标号,并且图17的某些方面已从图18中省略以便避免混淆图18的其他方面。图18示出了处理器1770、1780可以分别包括集成存储器和i/o控制逻辑(“cl”)1772和1782。因此,cl1772、1782包括集成存储器控制器单元并且包括i/o控制逻辑。图18示出了不仅存储器1732、1734被耦合到cl1772、1782,而且i/o装置1814也被耦合到控制逻辑1772、1782。传统i/o装置1815被耦合到芯片集1790。现在参考图19,所示出的是根据本公开的实施例的soc1900的框图。图15中的类似元件标有相似的参考标号。此外,虚线框是更高级的soc上的可选特征。在图19中,(一个或多个)互连单元1902被耦合到:应用处理器1910,其包括一组一个或多个核1502a-n和(一个或多个)共享高速缓存单元1506;系统代理单元1510;(一个或多个)总线控制器单元1516;(一个或多个)集成存储器控制器单元1514;一组或者一个或多个协处理器1920,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(sram)单元1930;直接存储器存取(dma)单元1932;以及用于耦合到一个或多个外部显示器的显示单元1940。在一个实施例中,(一个或多个)协处理器1920包括专用处理器,诸如例如网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、嵌入式处理器等等。可以用硬件、软件、固件或此类实现途径的组合来实现本文中所公开的(例如机制)的实施例。本公开的实施例可以被实现为在可编程系统上执行的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置。诸如图17中所示出的代码1730的程序代码可以被应用于输入指令以执行本文中所描述的功能并且生成输出信息。输出信息可以用已知方式被应用于一个或多个输出装置。为了此应用的目的,处理系统包括具有处理器的任何系统,所述处理器诸如例如数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器。可以用高级过程编程语言或面向对象的编程语言来实现程序代码以与处理系统进行通信。如果期望的话,还可以用汇编或机器语言来实现程序代码。事实上,本文中所描述的机制在范围上不限于任何特定编程语言。在任何情况中,语言可以是经编译或解释的语言。至少一个实施例的一个或多个方面可以由存储在机器可读介质上的代表性指令来实现,所述代表性指令表示处理器内的各种逻辑,其在由机器读取时,促使机器制作用来执行本文中所描述的技术的逻辑。此类表示(称为“ip核”)可以被存储在有形的、机器可读介质上,并被供应到各种客户或制造设施以加载到实际做出逻辑或处理器的制作机器。此类机器可读存储介质可以没有限制地包括由机器或装置制造或形成的物品的非暂态、有形布置,包括存储介质,诸如硬盘、任何其他类型的盘(包括软盘、光盘、紧致盘只读存储器(cd-rom)、可重写紧致盘(cd-rw)和磁光盘))、半导体装置(诸如只读存储器(rom)、随机存取存储器(ram)(诸如动态随机存取存储器(dram)、静态随机存取存储器(sram))、可擦除可编程只读存储器(eprom)、闪速存储器、电可擦除可编程只读存储器(eeprom)、相变存储器(pcm))、磁卡或光卡、或适合于存储电子指令的任何其他类型的介质。因此,本公开的实施例还包括非暂态、有形机器可读介质,该非暂态、有形机器可读介质含有指令或含有设计数据,诸如硬件描述语言(hdl),其定义本文中所描述的结构、电路、设备、处理器和/或系统特征。此类实施例可也被称为程序产品。仿真(包括二进制转译、代码变形(codemorphing)等)在一些情况中,指令转换器可以用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令转译(例如,使用静态二进制转译、包括动态编译的动态二进制转译)、变形、仿真,或以其他方式转换成要由核处理的一个或多个其他指令。可以用软件、硬件、固件或其组合来实现指令转换器。指令转换器可以在处理器上、离开处理器、或部分在处理器上并且部分离开处理器。图20是根据本公开的实施例对照使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示出的实施例中,指令转换器是软件指令转换器,尽管备选地,可以用软件、固件、硬件或其各种组合来实现指令转换器。图20示出可使用x86编译器2004来编译采用高级语言2002的程序以生成x86二进制代码2006,所述x86二进制代码2006可以由带有至少一个x86指令集核的处理器2016来本机执行。带有至少一个x86指令集核的处理器2016表示能够通过以下操作来执行与带有至少一个x86指令集核的intel@处理器大体上相同的功能的任何处理器:兼容地执行或以其他方式处理(1)intel®x86指令集核的指令集的大部分或(2)目标为在带有至少一个x86指令集核的intel@处理器上运行的应用或其他软件的对象代码版本,以便实现与带有至少一个x86指令集核的intel@处理器大体上相同的结果。x86编译器2004表示可操作以生成x86二进制代码2006(例如,对象代码)的编译器,所述x86二进制代码2006能够在具有或不具有另外链接处理的情况下在带有至少一个x86指令集核的处理器2016上被执行。类似地,图20示出可以使用备选指令集编译器2008来编译采用高级语言2002的程序以生成备选指令集二进制代码2010,所述备选指令集二进制代码2010可由不带有至少一个x86指令集核的处理器2014(例如,带有执行加利福尼亚州森尼韦尔的mipstechnologies的mips指令集和/或执行加利福尼亚州森尼韦尔的armholdings的arm指令集的核的处理器)来本机执行。指令转换器2012被用来将x86二进制代码2006转换成可由不带有x86指令集核的处理器2014本机执行的代码。这种经转换的代码不太可能与备选指令集二进制代码2010相同,因为能够这样做的指令转换器难以制造;然而,经转换的代码将完成一般操作并且由来自备选指令集的指令构成。因此,指令转换器2012表示软件、固件、硬件或其组合,其通过仿真、模拟或任何其他过程而允许不具有x86指令集处理器或核的处理器或其他电子装置执行x86二进制代码2006。当前第1页1 2 3 
技术特征:1.一种硬件处理器,包括:
硬件指导调度器,所述硬件指导调度器包括多个软件线程运行时属性历史;
解码器,所述解码器用于将单个指令解码成经解码的单个指令,所述单个指令具有标识控制寄存器的字段;以及
执行电路,所述执行电路用于执行所述经解码的单个指令来:
检查所述控制寄存器的使能位被设置,并且
当所述使能位被设置时,重置所述硬件指导调度器的所述多个软件线程运行时属性历史。
2.如权利要求1所述的硬件处理器,其中当所述使能位被设置时,所述执行电路要执行所述经解码的单个指令,以重置所述硬件指导调度器的所述多个软件线程运行时属性历史,而不修改所述硬件处理器的其他架构状态。
3.如权利要求1所述的硬件处理器,其中所述单个指令的操作码是传统操作码,并且当所述使能位未被设置时,所述执行电路要执行所述单个指令作为空操作。
4.如权利要求1所述的硬件处理器,其中当所述使能位被设置时,所述执行电路要仅当请求所述单个指令以便由操作系统执行时,执行所述经解码的单个指令,来重置所述硬件指导调度器的所述多个软件线程运行时属性历史。
5.如权利要求1所述的硬件处理器,其中所述多个软件线程运行时属性历史包括针对所述硬件处理器的多个核的性能监测事件的相应类别的多个权重。
6.如权利要求5所述的硬件处理器,其中所述相应类别包括针对第一类型的核的第一类别和针对第二较高性能核的第二类别。
7.如权利要求5所述的硬件处理器,其中所述相应类别包括针对整数类型的向量指令的第一类别和针对浮点类型的向量指令的第二类别。
8.如权利要求1-7中任一项所述的硬件处理器,其中所述硬件指导调度器要:将针对要在所述硬件处理器上执行的下一个软件线程的提示存储在所述硬件处理器的寄存器中,以向操作系统指示所述硬件处理器的多个核类型中的核类型,并且所述提示基于所述多个软件线程运行时属性历史。
9.一种方法,包括:
用硬件处理器的硬件指导调度器生成多个软件线程运行时属性历史;
用所述硬件处理器的解码器将单个指令解码成经解码的单个指令,所述单个指令具有标识控制寄存器的字段;以及
用所述硬件处理器的执行电路执行所述经解码的单个指令来:
检查所述控制寄存器的使能位被设置,并且
当所述使能位被设置时,重置所述硬件指导调度器的所述多个软件线程运行时属性历史。
10.如权利要求9所述的方法,其中当所述使能位被设置时,所述执行所述经解码的单个指令重置所述硬件指导调度器的所述多个软件线程运行时属性历史,而不修改所述硬件处理器的其他架构状态。
11.如权利要求9所述的方法,其中所述单个指令的操作码是传统操作码,并且当所述使能位未被设置时,所述执行电路执行所述单个指令作为空操作。
12.如权利要求9所述的方法,其中当所述使能位被设置时,仅当请求所述单个指令以便由操作系统执行时,所述执行所述经解码的单个指令重置所述硬件指导调度器的所述多个软件线程运行时属性历史。
13.如权利要求9所述的方法,其中所述多个软件线程运行时属性历史包括针对所述硬件处理器的多个核的性能监测事件的相应类别的多个权重。
14.如权利要求13所述的方法,其中所述相应类别包括针对第一类型的核的第一类别和针对第二较高性能核的第二类别。
15.如权利要求13所述的方法,其中所述相应类别包括针对整数类型的向量指令的第一类别和针对浮点类型的向量指令的第二类别。
16.如权利要求9-15中任一项所述的方法,进一步包括:由所述硬件指导调度器将针对要在所述硬件处理器上执行的下一个软件线程的提示存储在所述硬件处理器的寄存器中,以向操作系统指示所述硬件处理器的多个核类型中的核类型,并且所述提示基于所述多个软件线程运行时属性历史。
17.一种存储代码的非暂时性机器可读介质,所述代码当由机器执行时使所述机器执行方法,所述方法包括:
用硬件处理器的解码器将单个指令解码成经解码的单个指令,所述单个指令具有标识控制寄存器的字段;以及
用所述硬件处理器的执行电路执行所述经解码的单个指令来:
检查所述控制寄存器的使能位被设置,并且
当所述使能位被设置时,重置所述硬件处理器的硬件指导调度器的多个软件线程运行时属性历史。
18.如权利要求17所述的非暂时性机器可读介质,其中当所述使能位被设置时,所述执行所述经解码的单个指令重置所述硬件指导调度器的所述多个软件线程运行时属性历史,而不修改所述硬件处理器的其他架构状态。
19.如权利要求17所述的非暂时性机器可读介质,其中所述单个指令的操作码是传统操作码,并且当所述使能位未被设置时,所述执行电路执行所述单个指令作为空操作。
20.如权利要求17所述的非暂时性机器可读介质,其中当所述使能位被设置时,仅当请求所述单个指令以便由操作系统执行时,所述执行所述经解码的单个指令重置所述硬件指导调度器的所述多个软件线程运行时属性历史。
21.如权利要求17所述的非暂时性机器可读介质,其中所述多个软件线程运行时属性历史包括针对所述硬件处理器的多个核的性能监测事件的相应类别的多个权重。
22.如权利要求21所述的非暂时性机器可读介质,其中所述相应类别包括针对第一类型的核的第一类别和针对第二较高性能核的第二类别。
23.如权利要求21所述的非暂时性机器可读介质,其中所述相应类别包括针对整数类型的向量指令的第一类别和针对浮点类型的向量指令的第二类别。
24.如权利要求17所述的非暂时性机器可读介质,进一步包括:由所述硬件指导调度器将针对要在所述硬件处理器上执行的下一个软件线程的提示存储在所述硬件处理器的寄存器中,以向操作系统指示所述硬件处理器的多个核类型中的核类型,并且所述提示基于所述多个软件线程运行时属性历史。
25.如权利要求17-24中任一项所述的非暂时性机器可读介质,进一步包括:在所述解码之前将所述单个指令转译成不同指令集架构的一个或多个指令,其中所述不同指令集架构的所述一个或多个指令的执行将在功能上等同于所述经解码的单个指令的所述执行。
技术总结本发明的主题是“用于请求处理器核的历史重置的指令的设备、方法和系统”。描述了涉及用于重置硬件处理器中的软件线程运行时属性历史的指令的系统、方法和设备。在一个实施例中,硬件处理器包括:硬件指导调度器,所述硬件指导调度器包括多个软件线程运行时属性历史;解码器,所述解码器用于将单个指令解码成经解码的单个指令,该单个指令具有标识模型特定寄存器的字段;以及执行电路,所述执行电路用于执行经解码的单个指令来检查模型特定寄存器的使能位被设置,并且当使能位被设置时,重置硬件指导调度器的多个软件线程运行时属性历史。
技术研发人员:E·魏斯曼;M·查尼;M·马夏利;R·瓦伦丁;I·拉维德;J·W·布兰特;G·奈格;B·柴金;E·罗特姆
受保护的技术使用者:英特尔公司
技术研发日:2020.12.24
技术公布日:2021.08.03