CN113849221A - 用于操作系统透明指令状态管理的装置、方法和系统 - Google Patents
用于操作系统透明指令状态管理的装置、方法和系统 Download PDFInfo
- Publication number
- CN113849221A CN113849221A CN202011364546.7A CN202011364546A CN113849221A CN 113849221 A CN113849221 A CN 113849221A CN 202011364546 A CN202011364546 A CN 202011364546A CN 113849221 A CN113849221 A CN 113849221A
- Authority
- CN
- China
- Prior art keywords
- instruction
- processor
- field
- state
- executing
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 57
- 230000015654 memory Effects 0.000 claims description 146
- 239000013598 vector Substances 0.000 description 107
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 73
- 238000010586 diagram Methods 0.000 description 40
- 238000006073 displacement reaction Methods 0.000 description 38
- 238000007667 floating Methods 0.000 description 19
- 239000011159 matrix material Substances 0.000 description 18
- 238000012545 processing Methods 0.000 description 17
- 238000007726 management method Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 12
- 238000004891 communication Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 9
- 230000001052 transient effect Effects 0.000 description 8
- 238000013519 translation Methods 0.000 description 8
- 239000003795 chemical substances by application Substances 0.000 description 7
- 230000000873 masking effect Effects 0.000 description 7
- 230000006835 compression Effects 0.000 description 6
- 238000007906 compression Methods 0.000 description 6
- 238000013501 data transformation Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 238000007792 addition Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- HRANPRDGABOKNQ-ORGXEYTDSA-N (1r,3r,3as,3br,7ar,8as,8bs,8cs,10as)-1-acetyl-5-chloro-3-hydroxy-8b,10a-dimethyl-7-oxo-1,2,3,3a,3b,7,7a,8,8a,8b,8c,9,10,10a-tetradecahydrocyclopenta[a]cyclopropa[g]phenanthren-1-yl acetate Chemical compound C1=C(Cl)C2=CC(=O)[C@@H]3C[C@@H]3[C@]2(C)[C@@H]2[C@@H]1[C@@H]1[C@H](O)C[C@@](C(C)=O)(OC(=O)C)[C@@]1(C)CC2 HRANPRDGABOKNQ-ORGXEYTDSA-N 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3865—Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
- G06F9/3879—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本公开涉及用于操作系统透明指令状态管理的装置、方法和系统。在一种实施例中,硬件处理器包括:解码器,用于将单个指令解码为经解码的单个指令;以及执行电路,用于执行所述经解码的单个指令,以引起从当前状态到包括附加状态数据的状态的上下文切换,该附加状态数据不被在所述硬件处理器上执行的操作系统的执行环境支持。
Description
技术领域
本公开一般涉及电子设备,并且更具体地,本公开的实施例涉及实现用于操作系统透明指令状态管理的指令的电路。
背景技术
处理器或一组处理器执行来自指令集(例如,指令集架构(ISA))的指令。指令集是与编程有关的计算机架构的一部分,通常包括本机数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理以及外部输入和输出(I/O)。应当注意,本文中的术语指令可以指宏指令,例如,被提供给处理器进行执行的指令,或者指微指令,例如,由处理器的解码器对宏指令进行解码而产生的指令。
发明内容
本公开实施例的一个方面提供了一种硬件处理器,包括:解码器,用于将单个指令解码为经解码的单个指令;以及执行电路,用于执行所述经解码的单个指令,以引起从当前状态到包括附加状态数据的状态的上下文切换,所述附加状态数据不被在所述硬件处理器上执行的操作系统的执行环境支持。
本公开实施例的另一方面提供了一种方法,包括:用硬件处理器的解码器将单个指令解码为经解码的单个指令;以及用所述硬件处理器的执行电路执行所述经解码的单个指令,以引起从当前状态到包括附加状态数据的状态的上下文切换,所述附加状态数据不被在所述硬件处理器上执行的操作系统的执行环境支持。
本公开实施例的又一方面提供了一种非暂态机器可读介质,其存储代码,所述代码在由机器执行时使所述机器执行方法,所述方法包括:用硬件处理器的解码器将单个指令解码为经解码的单个指令;以及用所述硬件处理器的执行电路执行所述经解码的单个指令,以引起从当前状态到包括附加状态数据的状态的上下文切换,所述附加状态数据不被在所述硬件处理器上执行的操作系统的执行环境支持。
附图说明
通过示例而非限制的方式在附图中示出了本公开,在附图中,相似的附图标记指示相似的元件,其中:
图1图示了根据本公开的实施例的耦合到存储器的硬件处理器。
图2A图示了根据本公开的实施例的容器数据的示例字段。
图2B图示了根据本公开的实施例的在执行“AX_Enter”指令之后的示例数据移动。
图2C图示了根据本公开的实施例的在执行“AX_Enter”指令之后针对中断的示例数据移动。
图2D图示了根据本公开的实施例的在执行“AX_Enter”指令之后服务于中断的中止处理程序的示例数据移动。
图3图示了根据本公开的实施例的耦合到包括一个或多个“AX_Enter”和/或“AX_Abort”指令的存储的硬件处理器。
图4图示了根据本公开的实施例的处理“AX_Enter”指令的方法。
图5图示了根据本公开的实施例的处理“AX_Abort”指令的方法。
图6是图示了根据本公开的实施例的用于利用容器(例如,扩展的)状态的方法的操作的流程图。
图7是图示了根据本公开的实施例的在利用容器(例如,扩展的)状态的(例如,用户模式)应用中的组件的框图。
图8A是根据本公开的实施例图示出通用向量友好指令格式及其类别A指令模板的框图。
图8B是根据本公开的实施例图示出通用向量友好指令格式及其类别B指令模板的框图。
图9A是根据本公开的实施例图示出图8A和图8B中的通用向量友好指令格式的字段的框图。
图9B是根据本公开的一个实施例图示出构成完整操作码字段的图9A中的特定向量友好指令格式的字段的框图。
图9C是根据本公开的一个实施例图示出构成寄存器索引字段的图9A中的特定向量友好指令格式的字段的框图。
图9D是根据本公开的一个实施例图示出构成增强操作字段850的图9A中的特定向量友好指令格式的字段的框图。
图10是根据本公开的一个实施例的寄存器体系结构的框图。
图11A是根据本公开的实施例图示出示范性有序流水线和示范性寄存器重命名、乱序发出/执行流水线两者的框图。
图11B是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、乱序发出/执行体系结构核心两者的框图。
图12A是根据本公开的实施例的单个处理器核心及其与片上互连网络以及与第2级(L2)缓存的其本地子集的连接的框图。
图12B是根据本公开的实施例的图12A中的处理器核心的一部分的扩展视图。
图13是根据本公开的实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器的框图。
图14是根据本公开的一个实施例的系统的框图。
图15是根据本公开的实施例的更具体示范性系统的框图。
图16示出了根据本公开的实施例的第二更具体示范性系统的框图。
图17示出了根据本公开的实施例的片上系统(SoC)的框图。
图18是根据本公开的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。
具体实施方式
在接下来的描述中,阐述了许多具体细节。然而,要理解,没有这些具体细节也可实现本公开的实施例。在其他情况下,没有详细示出公知的电路、结构和技术,以免模糊对本说明书的理解。
说明书中提及“一个实施例”、“一实施例”、“一示例实施例”等等表明描述的实施例可包括特定的特征、结构或特性,但可不一定每个实施例都包括该特定特征、结构或特性。另外,这种短语不一定指同一实施例。另外,当联系一实施例来描述特定的特征、结构或特性时,认为联系其他实施例(无论是否明确描述)来实现这种特征、结构或特性是在本领域技术人员的知识范围内的。
(例如,硬件)处理器(例如,具有一个或多个核心)可以执行指令(例如,指令的线程)以对数据进行操作,例如,以执行算术、逻辑或其他功能。例如,软件(例如,用户应用)可以请求操作,并且硬件处理器(例如,其一个或多个核心)可以响应于该请求来执行该操作。在某些实施例中,在处理器上执行(例如,以处理器的监管模式而不是特权较低的(例如,用户)模式)的操作系统(例如,代码)管理从第一进程(例如,线程)到第二进程(例如,线程)的切换。这可以称为上下文切换。例如,上下文切换包括存储第一进程(例如,线程)的(例如,处理器)状态,以便可以在稍后的时间处还原它并恢复执行(例如,使得多个进程共享单个处理器(例如,核心),例如,在多任务操作系统的控制下)。状态信息可以包括存储在寄存器中的当前值(例如,以及由处理器使用和/或由处理器维护的其他值)。
在某些实施例中,一个或多个(例如,“新”)(例如,宏)指令针对硬件处理器被启用(例如,可由硬件处理器执行),但是在该硬件处理器上运行的操作系统(例如,管理进程的执行的操作系统)不支持这些指令,例如,操作系统无法查看这些指令所利用的状态的至少一部分(例如,与支持这些指令的执行的操作系统相反)。当操作系统(例如,版本)是在发布指令(例如,版本)之前发布的时,可能会发生这种情况。
在一个实施例中,例如,即使处理器本身有能力执行指令(例如,与未被启用相比,那些指令已经针对该处理器被启用),操作系统执行不支持的指令的请求(例如,由应用发出的请求)也会引起未定义的指令(UD)故障。然而,操作系统的某些实施例管理从第一进程(例如,第一进程的状态)到第二进程(例如,第二进程的状态)的上下文切换。因此,在某些实施例中,依赖于由操作系统进行上下文切换和/或对其状态进行管理(例如,包括操作系统不可见的“新”状态)的指令具有较长的上市时间(lead time to market),和/或无法被尚未启用对该指令的(例如,全部)状态的支持的现有操作系统使用。
本文的实施例允许对(例如,指令)状态的操作系统透明管理。本文的实施例涉及用于实现用于操作系统透明指令状态管理的指令的电路。在一个实施例中,当处理器以用户模式运行时,(例如,用户模式)指令是可调用的(例如,通过用户模式应用),例如,不需要处理器处于监管模式(例如,不需要以监管模式运行的OS来请求对指令的执行)。本文的实施例允许在(例如,较旧的)操作系统上的(例如,新的)硬件上运行的应用(例如,即时)利用新的用户模式指令,并获得那些指令的性能和/或特征益处。本文的实施例允许写入的应用利用使用处理器的某些(例如,新的)硬件的指令,来实际使用该硬件,甚至不需要针对这些指令启用在处理器上运行的操作系统,例如,这样的应用不会默认返回不使用该硬件和/或具有(例如,UD)故障的传统指令。本文的实施例涉及一种或多种指令,其在用户模式下操纵状态,例如,不需要来自OS(例如,内核)的任何参与。例如,使得本文的实施例迁移线程的某些状态,其中该状态不被操作系统随线程迁移。本文的实施例提供了在(例如,较旧的)OS上使用一个或多个(例如,新的)指令来运行应用的能力,该(例如,较旧的)OS不支持由那些一个或多个指令所利用的硬件(例如,执行电路)的完整指令状态。本文的实施例提供了用于应用线程的(例如,新的)指令的OS透明指令状态管理。
本文中的某些实施例不依赖于带外(例如,XSAVE)指令(例如,其要求将更新发送到软件(例如,OS)以启用新状态)。本文的实施例避免了以下要求的缺点:(i)要求用户更新其软件,无论该更新是以元数据还是实际二进制文件的形式,(ii)要求OS供应商同意推出任何更新,和/或(iii)要求OS状态保存机制中的限制(例如,大小限制),这些限制要求对某些特征进行软件(例如,OS)更新。
本文中公开的指令是对处理器(例如,计算机)本身的功能挥发的改进。不具有这样的指令作为其指令集的一部分的指令解码电路(例如,解码器)将不会如本文所讨论的那样进行解码。不具有这样的指令作为其指令集的一部分的执行电路将不会如本文所讨论的那样执行。例如,当处理器将单个指令解码为经解码的单个指令并且该经解码的单个指令由处理器执行时,单个指令会引起从当前状态到包括附加状态数据的状态的上下文切换,该附加状态数据不被在硬件处理器上执行的操作系统的执行环境支持。
图1图示了根据本公开的实施例的耦合到存储器110的硬件处理器100。所描绘的硬件处理器100包括硬件解码器102(例如,解码单元或解码电路)和硬件执行电路104(例如,执行单元)。所描绘的硬件处理器100包括寄存器106。寄存器可以包括一个或多个寄存器,用于访问(例如,加载和/或存储)数据,例如,附加地或替代地用于访问(例如,加载或存储)存储器110中的数据。所描绘的硬件处理器100包括缓存108。缓存可以包括一个或多个缓存组,用于访问(例如,加载和/或存储)数据,例如,附加地或替代地凸台访问(例如,加载或存储)存储器110和/或寄存器106中的数据。解码器102、执行电路104、寄存器106和/或缓存108可以属于处理器的单个核心,例如,并且可以包括多个核心,每个核心都具有电路的实例。处理器(例如,及其核心)可以是根据本文中的任何公开内容的处理器和/或核心。
在某些实施例中,执行电路104包括标量电路112、向量/单指令多数据(SIMD)电路114和/或矩阵运算电路116。在一个实施例中,矩阵运算电路包括:二维网格的乘法器电路(例如,融合乘法加法电路)、第一多个寄存器(其表示与矩阵运算加速器电路耦合的第一二维(例如,输入)矩阵)、第二多个寄存器(其表示耦合到矩阵运算加速器电路的第二二维(例如,输入)矩阵)、和/或第三多个寄存器(其表示耦合到矩阵运算加速器电路的第三二维(例如,输出)矩阵)。在某些实施例中,可以存在(例如,利用)标量电路112、向量/单指令多数据(SIMD)电路114和/或矩阵运算电路116中的仅一个或任何组合。在某些实施例中,标量电路112例如对标量值(例如,单个数字)进行操作,并且具有与标量电路114相关联的状态112A(例如,在影响标量电路112的上下文切换中使用的状态112A)。在某些实施例中,向量/SIMD电路114例如对向量或打包的数据值进行操作,并具有与向量/SIMD电路114相关联的状态114A(例如,在影响向量/SIMD电路114的上下文切换中使用的状态114A)。在某些实施例中,矩阵运算电路116例如对一个或多个矩阵进行操作,并具有与矩阵运算电路116相关联的状态116A(例如,在影响矩阵运算电路116的上下文切换中使用的状态116A)。矩阵运算电路116可以被包括在核心中或作为(例如,外部)加速器。状态112A、状态114A和/或状态116A可以包括与任何其他寄存器分开的寄存器,例如与寄存器106(例如,通用寄存器(GPR))分开的寄存器。
注意,本文的附图可能未描绘所有数据通信连接。本领域普通技术人员将意识到,这不会使附图中的某些细节模糊。注意,图中的双向箭头可能不需要双向通信,例如,它可以指示单向通信(例如,去往或来自该组件或设备)。在本文的某些实施例中,可以利用通信路径的任何或全部组合。
硬件解码器102可以接收(例如,单个)指令(例如,宏指令),并且将该指令解码为例如微指令和/或微操作。硬件执行电路104可以执行经解码的指令(例如,宏指令)以执行一个或多个操作。例如,要由解码器102解码的指令和要由执行电路104执行的经解码的指令可以是本文中(例如,在图2B-图6中)讨论的任何指令。
本文的某些实施例涉及一种处理器,该处理器在其指令集中包括(例如,用户模式)指令,该指令执行将容器数据118(例如,容器(例如,扩展的)状态126)移动到处理器100(例如,移动到执行电路104的状态存储中,例如,标量电路112的状态112A、向量/单指令多数据(SIMD)电路114的状态114A和/或矩阵运算电路116的状态116A中的一个或多个)中的操作。例如,操作系统代码132可能不支持执行利用向量/单指令多数据(SIMD)电路114和/或矩阵运算电路116的指令,例如,在状态114A和/或状态116A分别为操作系统代码132不可见的情况下。因此,本文的某些实施例允许其他代码(例如,用户应用代码134)利用向量/单指令多数据(SIMD)电路114和/或矩阵运算电路116(例如,由一组或多组相应的指令引起),更具体地讲,允许使用本文讨论的容器。在一种实施例中,指令使硬件处理器100(例如,核心)利用用户模式受管理状态区域,该用户模式受管理状态区域支持对操作系统不支持的附加指令进行状态管理。
例如,当处理器将单个指令解码为经解码的单个指令并且该经解码的单个指令由处理器执行时,单个指令会引起从当前状态到包括附加状态数据的状态的上下文切换,该附加状态数据不被在硬件处理器上执行的操作系统的执行环境支持。
附加状态数据可以是到指令集架构(ISA)的传统指令集的某些硬件支持型“扩展”的状态。例如,硬件的状态支持ISA的以下指令:浮点指令(例如,“x87”指令)、128位向量指令(例如,“SSE”指令)、具有3操作数指令格式的(例如,256位或512位)向量指令(例如,“AVX”指令)、和/或矩阵指令(例如,“矩阵加速器”指令),例如,每组指令被视为对ISA的传统指令集(例如,“x86”指令)的单独“扩展”。
在一个实施例中,处理器内部的控制寄存器(例如,XCR0)由软件写入,以启用任何一个或多个扩展。例如,控制寄存器为每个候选扩展保持1位。软件(例如,操作系统(OS))可以允许单独设置各个位以根据其自己的意图单独地启用扩展。控制寄存器可以具有附加的当前未定义的位位置,以便将来可以添加附加扩展并相应地启用/禁用它们。在某些实施例中,启用的扩展可以使它们的底层硬件的状态被用户应用代码132移动(例如,用于上下文切换),例如,用于将其状态从容器数据118(例如,扩展状态126)移动到处理器100的状态存储元件(例如,寄存器、缓冲器等)。存储器110可以包括内核线程堆栈136(例如,供操作系统代码132使用)和/或用户线程堆栈138(例如,供用户应用代码134使用)。寄存器106可以包括当前特权级别(CPL)存储,该当前特权级别存储由处理器利用处理器正在其中运行的当前特权级别来更新(例如,用户模式(例如,CPL=3)或监管模式(例如,CPL<3))。
在某些实施例中,可以利用以下组件中的一个或多个:(1)新的(例如,AX_Enter)指令,该指令在被执行时将在用户模式下执行从当前状态到以下状态的上下文切换,该状态包括不可用的附加状态以及执行(例如,在ISA容器中)在OS的(例如,现有)执行环境(例如,执行环境上下文)中(例如,以前)不支持的附加指令的能力;(2)新的(例如,AX_Abort)指令,该指令在被执行时将引起ISA容器退出,例如,退出到具有用户自定义错误代码的中止处理程序;(3)容器状态区域,该容器状态区域是用户模式受管理状态区域,该用户模式受管理状态区域定义了ISA执行环境,该ISA执行环境支持底层OS当前不支持的附加指令的状态管理;和/或(4)中止处理程序,包括帮助程序位置,用于协助管理状态并且中止用户模式下的ISA容器执行环境。
在某些实施例中,容器执行环境利用容器数据118的下列项中的一项或多项(例如,该数据属于在上下文切换中从硬件中移除的状态):寄存器(例如,通用寄存器(GPR))数据120、(例如,下一个)指令指针(例如,RIP)122、返回堆栈指针124(RSP)、(例如,扩展的)状态126、中止处理程序128(例如,指向中止处理程序例程的指针)、以及退出原因130。
图2A图示了根据本公开的实施例的容器数据118的示例字段。在某些实施例中,处理器100的逻辑处理器200(例如,处理器100的核心的逻辑处理器200)包括由在逻辑处理器200上执行的线程使用的寄存器220、针对线程的(例如,下一个)指令指针(例如,RIP)222、针对线程的返回堆栈指针224(RSP)、以及(例如,扩展的)状态126的当前不可用的226部分(例如,因为OS无法看到逻辑处理器200中的实际状态)。例如,扩展状态当前是“不可用的”,因为操作系统不支持该状态,因此,使用该状态的任何指令当前都会在执行请求时发生故障(例如,#UD)。容器数据118可以包括例如针对将要利用(例如,“选择加入”)的特定(例如,扩展的)状态的字段,并且如果该状态针对处理器(例如,核)未启用,则执行中止处理程序。在一个实施例中,处理器包括多个异构核心(例如,一个核心具有第二核心不包括的某些硬件以及其相关联的扩展状态)。在某些实施例中,容器数据118内的数据由将要使用容器的(例如,用户)应用或封装该应用的库填充。
图2B图示了根据本公开的实施例的在执行“AX_Enter”指令201(例如,使用容器状态区域)之后的示例数据移动。在某些实施例中,处理器(例如,在用户模式应用的请求下)然后可以开始在容器内执行与容器数据118相对应的代码。例如,通过执行“AX_Enter”指令201,通过填充GPR引起控制的转移,启用扩展状态的指令(例如,更新控制寄存器(例如,XCR0)),以及更新扩展的ISA状态并且然后切换到容器的当前RSP和RIP。在某些实施例中,解决了所有页面故障,并且将容器数据页面(例如,在多页面存储器管理方案中)锁定到处理器的转换后备缓冲区(TLB)中,以确保任何驱逐事件将首先退出容器。
在所描绘的实施例中,“AX_Enter”指令201(例如,具有指示容器数据118的字段)的执行引起来自容器寄存器120、容器RIP 122、容器RSP 124和容器(例如,扩展)状态126的值被输入到逻辑处理器200中。例如,逻辑处理器200内的数据(例如,状态)被保存在其他地方(例如,通过OS)。在某些实施例中,“AX_Enter”指令201的执行引起例如使用容器堆栈228来代替用户线程堆栈138或(例如,OS)内核线程堆栈136。在某些实施例中,此时未使用中止处理程序128(例如,指向中止处理程序例程的指针)和退出原因130。
图2C图示了根据本公开的实施例的在执行“AX_Enter”指令201之后针对中断230的示例数据移动。在所描绘的实施例中,中止处理程序128(例如,指向中止处理程序的指针)被移入逻辑处理器200(例如,其RIP存储)以引起中止处理程序的执行,并且当前容器(例如,扩展的)状态126被移回到容器118中(例如,由于该状态对于此处操作的OS在此处不可见,并且因此在该过程中OS将不会保存该状态)。
图2D图示了根据本公开的实施例的在执行“AX_Enter”指令201之后服务于中断230的中止处理程序128的示例数据移动。在某些实施例中,处理器200执行中止处理程序128,中止处理程序128然后引起:容器RIP 122被保存到容器数据118中,中断服务例程(ISR)指令指针(例如,RIP)236被移入逻辑处理器200(例如,其RIP存储)中以引起ISR的执行,容器RSP 124被推送到内核线程堆栈136上,内核RSP 238被移入存储中止处理程序的返回地址的逻辑处理器200(例如,其RSP存储)中,和/或中止处理程序128(例如,指向中止处理程序的指针)被推送到内核线程堆栈136上。
在某些实施例中,在返回到中止处理程序128时,中止处理程序128将更新容器寄存器120并切换回原始堆栈(例如,用户线程堆栈138),例如并且然后执行“AX_Enter”指令201以重新进入容器。
例如,可能发生触发事件,这将引起容器被中断230。在某些实施例中,硬件(例如,逻辑处理器200)将当前RIP 122保存到容器中,并将RIP更新到中止处理程序128。在某些实施例中,中止处理程序并不总是执行,例如,除非这是Ax_Exit指令,并且替代地将诸如中断之类的事件传送出去。在某些实施例中,为了支持参数可能在堆栈上的系统调用(SYSCALL),将不会切换堆栈。在某些实施例中,扩展的ISA状态126可以被保存,但是有可能具有惰性状态保存,如下面进一步讨论的。在某些实施例中,不需要保存其他寄存器(例如,GPR),因为它们将由中止处理程序保存,其中OS已经确保GPR不会在线程之间泄漏。
图3图示了根据本公开的实施例的耦合到存储302的硬件处理器300,其包括一个或多个“AX_Enter”和/或“AX_Abort”指令304。在某些实施例中,“AX_Enter”和/或“AX_Abort”指令304根据本文的任何公开内容。在一种实施例中,“AX_Enter”指令包括容器指针306,以指示如本文讨论的容器数据(例如,容器(扩展状态)存储区域)。
在一种实施例中,例如,响应于执行操作的请求,从存储302获取指令(例如,宏指令)并将其发送到解码器308。在所描绘的实施例中,解码器308(例如,解码器电路)将该指令解码为经解码的指令(例如,一个或多个微指令或微操作)。然后发送经解码的指令进行执行,例如经由调度器电路310以调度经解码的指令进行执行。
在某些实施例中,(例如,在处理器/核心支持乱序(OoO)执行的情况下),处理器包括寄存器重命名/分配器电路310,其耦合到寄存器文件/存储器电路312(例如,单元),用于分配资源并对寄存器(例如,与指令的初始源和最终目的地相关联的寄存器)执行寄存器重命名。在某些实施例中,(例如,针对乱序执行),处理器包括耦合到解码器308的一个或多个调度器电路310。调度器电路可以调度与经解码的指令相关联的一个或多个操作,包括从“AX_Enter”或“AX_Abort”指令304解码的一个或多个操作,例如,用于在执行电路314上执行。
作为一个示例,经解码的“AX_Enter”乘法指令304将引起从当前状态到包括附加状态数据316的状态的上下文切换,该附加状态数据316不被在硬件处理器上执行的操作系统的执行环境支持,例如,并且将引起进入用户模式受管理状态区域。
作为另一示例,经解码的“AX_Abort”乘法指令304将引起从用户模式受管理状态区域退出。
在某些实施例中,例如,包括回写电路318以将指令的结果回写到目的地(例如,将它们写到寄存器和/或存储器),使得那些结果在处理器内是可见的(例如,在产生这些结果的执行电路外部可见)。
这些组件(例如,解码器308、寄存器重命名/寄存器分配器/调度器310、执行电路314、寄存器(例如,寄存器文件)/存储器312、或回写电路318)中的一个或多个可以在硬件处理器的单个核心(例如,以及多个核心,每个核心都有这些组件的实例)中。
在一种实施例中,用户模式受管理状态区域是容器状态区域。在某些实施例中,容器数据(例如,容器状态区域)包括表1中的下列项中的一项或多项。
表1:示例容器数据
(例如,用户模式)应用可以维护例如一组容器,并且可以使用线程池来执行每个容器。在某些实施例中,如果软件适当地维护容器池,则容器不与特定线程绑定,而是被允许在线程之间迁移和调度,例如,不需要任何操作系统(OS)启用。
图4图示了根据本公开的实施例的处理“AX_Enter”指令的方法。处理器(例如,或处理器核)可以例如响应于从软件接收到执行指令的请求而执行方法400。所描绘的方法400包括通过以下方式处理“AX_Enter”指令:获取指令(例如,具有标识附加状态数据(例如,容器数据)的存储的字段)402,将指令解码为经解码的指令404,检索与附加状态数据相关联的数据406,(可选地)调度经解码的指令进行执行408,执行经解码的指令以引起从当前状态到包括附加状态数据的状态的上下文切换,该附加状态数据不被在处理器上执行的操作系统的执行环境支持410,并提交所执行的指令的结果412。
图5图示了根据本公开实施例的处理“AX_Abort”指令的方法。处理器(例如,或处理器核心)可以例如响应于从软件接收到执行指令的请求而执行方法500。所描绘的方法500包括通过以下方式处理“AX_Abort”指令:获取指令502,将该指令解码为经解码的指令504,(可选地)检索与该指令相关联的任何数据506,(可选地)调度该经解码的指令进行执行508,执行经解码的指令以引起从用户模式受管理状态区域退出,该用户模式受管理状态区域包括在处理器上执行的操作系统的执行环境不支持的附加状态数据510,并提交所执行的指令的结果512。该结果是来自中止处理程序的错误返回码(例如,作为值存储到容器数据118的退出原因130中),例如,指示返回原因。在某些实施例中,“AX_Abort”指令将来自软件的中止原因(例如,中止是用户请求的中止、中断、异常等)作为输入操作数。在某些实施例中,“AX_Abort”指令以用户提供的值生成用户请求的中止原因,例如,在不使用“AX_Abort”指令的情况下,中断、异常等将是透明中止。
图6是图示了根据本公开的实施例的用于利用容器(例如,扩展的)状态的方法的操作的流程图600。所描绘的流程600包括应用线程创建容器数据存储区域以存储针对容器的容器(扩展)状态602,应用针对该容器(扩展)状态执行“AX_Enter”指令并开始在容器内执行代码604,硬件将触及所有容器数据存储区域页面以便在它们尚未发生故障时使它们发生故障,重复执行“AX_Enter”指令直到所有页面都可用606,并退出容器608(例如,由“AX_Abort”指令的执行、其他退出事件(例如,中断、异常等)、或请求在容器中使用的不受支持的特征(例如,硬件)所引起)。
图7是图示了根据本公开的实施例的在利用容器(例如,扩展的)状态704的(例如,用户模式)应用700中的组件的框图。
作为另一示例,流程包括以下示例步骤:
1.应用线程706(例如,使用线程堆栈702)将创建容器状态704区域。
2.应用然后将使用容器状态区域704执行Ax_Enter指令701,并开始在容器708内执行代码710(例如,使用容器堆栈712)。
2.1在某些实施例中,硬件将触及所有容器状态区域页面以在它们尚未被添加(例如,发生故障)时将其添加(例如,发生故障)。这将引起Ax_Enter指令701继续被重新执行,直到所有页面可用。
3.在某些时候,在某些实施例中,容器将引起退出。
3.1这可能是由于应用调用了“Ax_Abort”指令703。
3.2这可能是由于某些外部事件(例如,不可屏蔽的中断(NMI)、中断、机器检查中止(#MC)等)。
3.3这可能是由于容器内的异常(例如,页面故障异常(#PF)、常规保护故障(#GP)等)。
3.4这可能是由于容器调用了系统调用(例如,SYSCALL)。
3.5这可能是由于某些虚拟机(VM)退出原因。
3.6某些事件可能需要特殊处理(例如,远程行动请求(RAR)事件)。
A.RAR(例如,在不退出OS核的情况下引起TLB刷新)可以保存状态,执行RAR,然后退出到中止处理程序,或者它可以尝试在RAR之后重新捕获页面,并且如果成功,则继续执行。
4.容器会将容器的当前RIP保存在保存区域中,并将RIP恢复到中止处理程序。
5.容器将保存扩展指令状态和可选的GPR(或GPR可以留给中止处理程序)。
6.容器在退出容器时将不会切换堆栈(例如,中止处理程序714使用容器堆栈712),这是为了支持SYSCALL。
6.1可选地,容器不切换SYSCALL上的堆栈,但是对于任何其他事件,它可以保存/恢复。
7.将‘退出原因’填充到容器状态704区域中。
8.如果这是由于执行“Ax_Abort”指令所致,则系统将开始执行中止处理程序714;否则,如果这是由于另一事件所致,那么系统现在将转移到该事件。
9.一旦事件完成或执行了Ax_Abort指令;现在,流程返回以执行中止处理程序。
10.中止处理程序714可以:
10.1如果GPR是惰性保存的,则保存它们(或者如果这是SYSCALL,则更新它们),
10.2将堆栈恢复到线程堆栈,
10.3处理退出原因,和/或
10.4确定下一步做什么。它可以再次输入相同的容器,也可以输入另一个容器。如果执行容器,则此处的某些实施例将循环回到2。
在某些实施例中,利用调度定时器。例如,向容器添加抢占定时器(例如,在容器数据存储中,例如,图1中的容器数据118或图7中的容器状态704),使得当周期计数达到时,容器的抢占发生并且容器执行直接退出到中止处理程序,例如,以允许单个用户模式线程在其自己的定量(quantum)内对多个容器进行多任务处理。
作为另一示例,流程包括以下示例步骤:
1.应用维护ISA状态容器的列表。
2.工作线程池然后将查找工作,并且线程将检索其中一个容器。
3.线程将通过在容器保存区域中设置定时器状态容器截止时间来对容器进行编程,以使用其定量的子集(例如,1/3)。
4.应用然后将使用容器状态区域执行Ax_Enter指令,并开始在容器内执行代码。
a.在某些实施例中,硬件将触及所有容器状态区域页面以在它们尚未被添加(例如,发生故障)时将其添加(例如,发生故障)。这将引起Ax_Enter指令继续被重新执行,直到所有页面可用。
5.由于以下任何原因,容器然后可能退出。
a.这可能是由于应用调用了“Ax_Abort”指令。
b.这可能是由于某些外部事件(NMI、中断、#MC等)。
c.这可能是由于容器内的异常(#PF、#GP等)。
d.这可能是由于容器调用了SYSCALL。
e.这可能是由于VM退出原因。
f.这可能是由于截止时间定时器。
g.某些事件可能需要特殊处理(例如,RAR)。
i.RAR可以保存状态,执行RAR,然后退出中止处理程序,或者它可以尝试在RAR之后重新捕获页面,并且如果成功,则可以继续执行。
6.容器会将容器的当前RIP保存在保存区域中,并将RIP恢复到中止处理程序。
7.容器将保存扩展指令状态和可选的GPR(或GPR可以留给中止处理程序)。
8.容器不会切换堆栈,这是为了支持SYSCALL。
a.可选地,容器不能在SYSCALL上切换堆栈,但是对于任何其他事件,它可以保存/恢复。
9.将‘退出原因’填充到容器状态区域中。
10.如果“退出原因”是由于截止日期定时器引起的;中止处理程序将:
a.如果GPR是惰性保存的,则保存它们(或者如果这是SYSCALL,则更新它们),
b.将堆栈恢复到线程堆栈,
c.将容器放回容器队列,和/或
d.抓住新容器,并且然后转到(3)开始执行该容器。
本文中的某些实施例支持在虚拟机监控器(VMM)(例如,代码)启用之外的虚拟化,只要该应用能够确定它可以使用指令即可。如果没有启用,VMM将阻止任何新特征标识(例如,CPUID)指令,该软件将使用替代方法来确定该场景是受支持的以及可以使用哪些特征。在某些实施例中,状态完全保持在用户模式内(例如,因此不会发生故障)。在某些实施例中,应在执行容器之前解决所有故障。
本文的某些实施例利用调试器或某些调试扩展来查看容器状态并适当地显示上下文。在一个实施例中,调试包括在上下文状态区域中设置调试标志(例如,在RFLAGS寄存器中)或对中断进行硬编码,例如,并且在那些事件上中止。在一种实施例中,该中止将保存扩展的指令状态(以及可选地,RSP和GPR),并且然后调试器将仅查看RIP上下文的容器以及容器或线程的当前状态(例如,如果其是通过中止处理程序(尚未运行)保存的),以显示完整的容器上下文。在某些实施例中,调试器将允许在容器的上下文和当前实际线程的上下文之间进行切换(例如,可以在中止处理程序的开始处或其中某处)。
本文的某些实施例利用了惰性状态保存。例如,与始终保存在容器退出时不受OS管理的扩展状态相反。这可能会引起额外的开销。为了减轻这种情况,在某些实施例中(例如,假设OS在任何环上下文中都保持TLB一致性),容器数据的保存区域(例如,容器状态)被锁定到TLB中,并且任何由此引起的该TLB的强制刷新都将引起在当时保存状态。为了使软件在能够转移容器以在另一线程上执行之前,知道状态是否仍是“活动的”,在某些实施例中,在容器保存区域中包括“活动的”位,其标识该状态在处理器(例如,CPU)上仍是活动的。
某些操作(例如,处理器事件)可能引起扩展的ISA回写到当前容器中,例如,VM退出、Ax_Enter到另一容器中、和/或TLB无效操作。
下面将详细描述可以使用上述内容的示例性架构、系统等。
可以鉴于以下示例来描述所公开技术的至少一些实施例:
示例1:一种硬件处理器,包括:
解码器,用于将单个指令解码为经解码的单个指令;以及
执行电路,用于执行经解码的单个指令,以引起从当前状态到包括附加状态数据的状态的上下文切换,该附加状态数据不被在硬件处理器上执行的操作系统(或VMM)的执行环境支持。
示例2:根据示例1的硬件处理器,其中,单个指令是用户模式指令。
示例3:根据示例1的硬件处理器,其中,该单个指令包括标识附加状态数据的存储的字段。
示例4:根据示例1的硬件处理器,其中,执行电路用于重新执行经解码的单个指令,直到由附加状态数据触及的每个存储器页面可用为止。
示例5:根据示例1的硬件处理器,其中,执行电路用于执行经解码的单个指令,以使硬件处理器进入用户模式受管理状态区域,该用户模式受管理状态区域支持操作系统不支持的附加指令的状态管理。
示例6:根据示例5的硬件处理器,其中:
解码器用于将单个第二指令解码为经解码的单个第二指令;以及
执行电路用于执行经解码的单个第二指令,以引起从用户模式受管理状态区域退出。
示例7:根据示例6的硬件处理器,其中,执行电路用于执行经解码的单个第二指令,以引起从用户模式受管理状态区域退出到中止处理程序。
示例8:根据示例6的硬件处理器,其中,执行电路用于执行经解码的单个第二指令,以引起将指示退出原因的值填充到用于附加状态数据的存储中。
示例9:一种方法,包括:
用硬件处理器的解码器将单个指令解码为经解码的单个指令;以及
用硬件处理器的执行电路执行经解码的单个指令,以引起从当前状态到包括附加状态数据的状态的上下文切换,该附加状态数据不被在硬件处理器上执行的操作系统(或VMM)的执行环境支持。
示例10:根据示例9的方法,其中,单个指令是用户模式指令。
示例11:根据示例9的方法,其中,该单个指令包括标识附加状态数据的存储的字段。
示例12:根据示例9的方法,其中,执行经解码的单个指令包括:重新执行经解码的单个指令,直到由附加状态数据触及的每个存储器页面可用为止。
示例13:根据示例9的方法,其中,执行经解码的单个指令引起硬件处理器进入用户模式受管理状态区域,该用户模式受管理状态区域支持操作系统不支持的附加指令的状态管理。
示例14:示例13的方法,还包括:
用解码器将单个第二指令解码为经解码的单个第二指令;以及
用执行电路执行经解码的单个第二指令,以引起从用户模式受管理状态区域退出。
示例15:根据示例14的方法,其中,执行经解码的单个指令引起从用户模式受管理状态区域退出到中止处理程序。
示例16:根据示例14的方法,其中,执行经解码的单个第二指令引起将指示退出原因的值填充到用于附加状态数据的存储中。
示例17:一种非暂态机器可读介质,其存储代码,代码在由机器执行时使机器执行方法,该方法包括:
用硬件处理器的解码器将单个指令解码为经解码的单个指令;以及
用硬件处理器的执行电路执行经解码的单个指令,以引起从当前状态到包括附加状态数据的状态的上下文切换,该附加状态数据不被在硬件处理器上执行的操作系统(或VMM)的执行环境支持。
示例18:根据示例17的非暂态机器可读介质,其中,单个指令是用户模式指令。
示例19:根据示例17的非暂态机器可读介质,其中,单个指令包括标识附加状态数据的存储的字段。
示例20:根据示例17的非暂态机器可读介质,其中,执行经解码的单个指令包括:重新执行经解码的单个指令,直到由附加状态数据触及的每个存储器页面可用为止。
示例21:根据示例17的非暂态机器可读介质,其中,执行经解码的单个指令引起硬件处理器进入用户模式受管理状态区域,该用户模式受管理状态区域支持操作系统不支持的附加指令的状态管理。
示例22:根据示例17的非暂态机器可读介质,该方法还包括:
用解码器将单个第二指令解码为经解码的单个第二指令;以及
用执行电路执行经解码的单个第二指令,以引起从用户模式受管理状态区域退出。
示例23:根据示例22的非暂态机器可读介质,其中,执行经解码的单个第二指令引起从用户模式受管理状态区域退出到中止处理程序。
示例24:根据示例22的非暂态机器可读介质,其中,执行经解码的单个第二指令引起将指示退出原因的值填充到用于附加状态数据的存储中。
在另外一个实施例中,一种装置包括存储代码的数据存储装置,所述代码当被硬件处理器执行时使得所述硬件处理器执行本文公开的任何方法。一种装置可如详细描述中所描述。一种方法可如详细描述中所描述。
指令集可包括一个或多个指令格式。给定的指令格式可定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要在其上执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义为具有该指令格式的字段的不同子集(包括的字段通常是按相同顺序的,但至少一些可具有不同的比特位置,因为包括的字段更少)和/或被定义为不同地解读给定的字段。从而,ISA的每个指令被利用给定的指令格式来表达(并且如果定义了的话,被以该指令格式的指令模板中的给定一个来表达)并且包括用于指定操作和操作对象的字段。例如,示范性ADD指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码并且包括操作对象字段来选择操作对象(源1/目标和源2);并且此ADD指令在指令流中的出现在选择特定操作对象的操作对象字段中将具有特定内容。被称为高级向量扩展(Advanced VectorExtensions,AVX)(AVX1和AVX2)并且使用向量扩展(Vector Extensions,VEX)编码方案的一组SIMD扩展已被发布和/或发表(例如,参见2018年11月发布的64和IA-32体系结构软件开发者指南以及参见2018年11月发布的体系结构指令集扩展编程参考)。
示范性指令格式
本文描述的(一个或多个)指令的实施例可按不同的格式实现。此外,下文详述了示范性系统、体系结构和流水线。(一个或多个)指令的实施例可被在这种系统、体系结构和流水线上执行,但不限于详述的那些。
通用向量友好指令格式
向量友好指令格式是适合于向量指令的指令格式(例如,有某些特定于向量操作的字段)。虽然描述了其中通过向量友好指令格式支持向量和标量操作两者的实施例,但替换实施例只使用向量友好指令格式的向量操作。
图8A-图8B是根据本公开的实施例图示出通用向量友好指令格式及其指令模板的框图。图8A是根据本公开的实施例图示出通用向量友好指令格式及其类别A指令模板的框图;而图8B是根据本公开的实施例图示出通用向量友好指令格式及其类别B指令模板的框图。具体而言,对于通用向量友好指令格式800定义了类别A和类别B指令模板,这两个指令模板都包括无存储器访问805指令模板和存储器访问820指令模板。向量友好指令格式的上下文中的术语“通用”指的是该指令格式不被绑定到任何特定的指令集。
虽然将描述其中向量友好指令格式支持以下所列项的本公开的实施例: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字节)数据元素宽度(或大小);但替换实施例可支持具有更多、更少或不同的数据元素宽度(例如,128比特(16字节)数据元素宽度)的更多、更少和/或不同的向量操作对象大小(例如,256字节向量操作对象)。
图8A中的类别A指令模板包括:1)在无存储器访问805指令模板内,示出了无存储器访问、完全舍入控制型操作810指令模板和无存储器访问、数据变换型操作815指令模板;并且2)在存储器访问820指令模板内,示出了存储器访问、暂态825指令模板和存储器访问、非暂态830指令模板。图8B中的类别B指令模板包括:1)在无存储器访问805指令模板内,示出了无存储器访问、写入掩码控制、部分舍入控制型操作812指令模板和无存储器访问、写入掩码控制、vsize型操作817指令模板;并且2)在存储器访问820指令模板内,示出了存储器访问、写入掩码控制827指令模板。
通用向量友好指令格式800包括下面按图8A-图8B中所示的顺序列出的以下字段。
格式字段840–此字段中的特定值(指令格式识别符值)唯一地识别向量友好指令格式,从而识别采取向量友好指令格式的指令在指令流中的出现。这样,此字段是可选的,因为它对于只具有通用向量友好指令格式的指令集是不需要的。
基本操作字段842–其内容区分不同的基本操作。
寄存器索引字段844–其内容直接地或者通过地址生成指定源和目标操作对象的位置,无论它们在寄存器中还是在存储器中。这些包括充分数目的比特来从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器文件中选择N个寄存器。虽然在一个实施例中N可以是最多达三个源和一个目标寄存器,但替换实施例可支持更多或更少的源和目标寄存器(例如,可支持最多达两个源,其中这些源之一也充当目标,可支持最多达三个源,其中这些源之一也充当目标,可支持最多达两个源和一个目标)。
修饰字段846–其内容区分通用向量指令格式中的指定存储器访问的指令与那些不指定存储器访问的指令的出现;也就是说,区分无存储器访问805指令模板和存储器访问820指令模板。存储器访问操作读取和/或写入到存储器层次体系(在一些情况下利用寄存器中的值指定源和/或目标地址),而非存储器访问操作不读取和/或写入存储器层次体系(例如,源和目标是寄存器)。虽然在一个实施例中这个字段也在三个不同方式之间选择来执行存储器地址计算,但替换实施例可支持更多、更少或不同的方式来执行存储器地址计算。
增强操作字段850–其内容区分除了基本操作以外还要执行多种不同操作中的哪一种。此字段是依情境而定的。在本公开的一个实施例中,此字段被划分成类别字段868、阿尔法字段852和贝塔字段854。增强操作字段850允许了在单个指令而不是2、3或4个指令中执行共同操作群组。
缩放比例字段860–其内容允许了缩放索引字段的内容以进行存储器地址生成(例如,对于使用2缩放比例*索引+基址的地址生成)。
位移字段862A–其内容被用作存储器地址生成的一部分(例如,对于使用2缩放比例*索引+基址+位移的地址生成)。
位移因子字段862B(注意将位移字段862A并列在位移因子字段862B的正上方表明一者或另一者被使用)-其内容被用作地址生成的一部分;其指定要被存储器访问的大小(N)缩放的位移因子–其中N是存储器访问中的字节的数目(例如,对于使用2缩放比例*索引+基址+缩放的位移的地址生成)。冗余低阶比特被忽略,并且因此,位移因子字段的内容被乘以存储器操作对象总大小(N)以便生成要被用于计算有效地址的最终位移。N的值由处理器硬件在运行时基于完整操作码字段874(本文中稍后描述)和数据操纵字段854C来确定。位移字段862A和位移因子字段862B是可选的,因为它们不被用于无存储器访问805指令模板,和/或不同的实施例可只实现两者中的一者或者两者都不实现。
数据元素宽度字段864–其内容区分若干个数据元素宽度中的哪一个将被使用(在一些实施例中是对于所有指令;在其他实施例中只对于指令中的一些)。此字段是可选的,因为如果只支持一个数据元素宽度和/或利用操作码的某个方面来支持数据元素宽度则不需要它。
写入掩码字段870–其内容基于每个数据元素位置控制目标向量操作对象中的该数据元素位置是否反映基本操作和增强操作的结果。类别A指令模板支持合并-写入掩蔽,而类别B指令模板支持合并-写入掩蔽和归零-写入掩蔽两者。当合并时,向量掩码允许了目标中的任何元素集合被保护免于任何操作(由基本操作和增强操作指定)的执行期间的更新;在其他的一个实施例中,保留目标的相应的掩码比特具有0的每个元素的旧值。与之不同,归零向量掩码允许了目标中的任何元素集合在任何操作(由基本操作和增强操作指定)的执行期间被归零;在一个实施例中,目标的元素在相应的掩码比特具有0值时被设置到0。此功能的子集是控制被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不是必须要连续。从而,写入掩码字段870允许了部分向量操作,包括加载、存储、算术、逻辑等等。虽然描述了其中写入掩码字段870的内容选择若干个写入掩码寄存器中包含要使用的写入掩码的那一个(并且从而写入掩码字段870的内容间接识别要执行的该掩蔽)的本公开实施例,但替换实施例作为替代或附加允许掩码写入字段870的内容直接指定要执行的掩蔽。
即时字段872–其内容允许对即时(immediate)的指定。此字段是可选的,因为在不支持即时的通用向量友好格式的实现方式中其不存在并且在不使用即时的指令中其不存在。
类别字段868–其内容区分指令的不同类别。参考图8A-图8B,此字段的内容在类别A和类别B指令之间进行选择。在图8A-图8B中,圆角方形用于指示特定的值存在于一字段中(例如,图8A-图8B中分别用于类别字段868的类别A 868A和类别B 868B)。
类别A的指令模板
在类别A的非存储器访问805指令模板的情况下,阿尔法字段852被解读为RS字段852A,其内容区分不同的增强操作类型中的哪一个要被执行(例如,对于无存储器访问舍入型操作810和无存储器访问数据变换型操作815指令模板分别指定舍入852A.1和数据变换852A.2),而贝塔字段854区分指定类型的操作中的哪一个要被执行。在无存储器访问805指令模板中,缩放比例字段860、位移字段862A和位移缩放比例字段862B不存在。
无存储器访问指令模板–完全舍入控制型操作
在无存储器访问完全舍入控制型操作810指令模板中,贝塔字段854被解读为舍入控制字段854A,其(一个或多个)内容提供静态舍入。虽然在本公开的描述实施例中舍入控制字段854A包括抑制所有浮点异常(suppress all floating point exceptions,SAE)字段856和舍入操作控制字段858,但替换实施例可支持可将这两个概念都编码到同一字段中或者可只具有这些概念/字段中的一者或另一者(例如,可只具有舍入操作控制字段858)。
SAE字段856–其内容区分是否禁用异常事件报告;当SAE字段856的内容指示抑制被使能时,给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序。
舍入操作控制字段858–其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零舍入和朝最近舍入)。从而,舍入操作控制字段858允许了基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段850的内容推翻该寄存器值。
无存储器访问指令模板–数据变换型操作
在无存储器访问数据变换型操作815指令模板中,贝塔字段854被解读为数据变换字段854B,其内容区分若干个数据变换中的哪一个要被执行(例如,无数据变换、调配(swizzle)、广播)。
在类别A的存储器访问820指令模板的情况下,阿尔法字段852被解读为逐出提示字段852B,其内容区分要使用逐出提示中的哪一个(在图8A中,对于存储器访问暂态825指令模板和存储器访问非暂态830指令模板分别指定暂态852B.1和非暂态852B.2),而贝塔字段854被解读为数据操纵字段854C,其内容区分若干个数据操纵操作(也称为基元)中的哪一个要被执行(例如,无操纵;广播;源的向上转换;以及目标的向下转换)。存储器访问820指令模板包括缩放比例字段860,并且可选地包括位移字段862A或者位移缩放比例字段862B。
向量存储器指令执行从存储器的向量加载和向存储器的向量存储,带有转换支持。与常规向量指令一样,向量存储器指令以按数据元素的方式从/向存储器传送数据,其中被实际传送的元素由被选择为写入掩码的向量掩码的内容来规定。
存储器访问指令模板–暂态
暂态数据是可能很快就被再使用、快到足以受益于缓存的数据。然而,这是一个提示,并且不同的处理器可按不同的方式实现它,包括完全忽略该提示。
存储器访问指令模板–非暂态
非暂态数据是这样的数据:该数据不太可能快到足以受益于第1级缓存中的缓存地被再使用,并且应当被赋予逐出优先级。然而,这是一个提示,并且不同的处理器可按不同的方式实现它,包括完全忽略该提示。
类别B的指令模板
在类别B的指令模板的情况下,阿尔法字段852被解读为写入掩码控制(Z)字段852C,其内容区分由写入掩码字段870控制的写入掩蔽应当是合并还是归零。
在类别B的非存储器访问805指令模板的情况下,贝塔字段854的一部分被解读为RL字段857A,其内容区分不同的增强操作类型中的哪一个要被执行(例如,对于无存储器访问、写入掩码控制、部分舍入控制型操作812指令模板和无存储器访问、写入掩码控制、VSIZE型操作817指令模板分别指定舍入857A.1和向量长度(VSIZE)857A.2),而贝塔字段854的其余部分区分指定类型的操作中的哪一个要被执行。在无存储器访问805指令模板中,缩放比例字段860、位移字段862A和位移缩放比例字段862B不存在。
在无存储器访问、写入掩码控制、部分舍入控制型操作810指令模板中,贝塔字段854的其余部分被解读为舍入操作字段859A并且异常事件报告被禁用(给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序)。
舍入操作控制字段859A–正如舍入操作控制字段858一样,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零舍入和朝最近舍入)。从而,舍入操作控制字段859A允许了基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段850的内容推翻该寄存器值。
在无存储器访问、写入掩码控制、VSIZE型操作817指令模板中,贝塔字段854的其余部分被解读为向量长度字段859B,其内容区分要在若干个数据向量长度中的哪一个上执行(例如,128、256或512字节)。
在类别B的存储器访问820指令模板的情况下,贝塔字段854的一部分被解读为广播字段857B,其内容区分是否要执行广播型数据操纵操作,而贝塔字段854的其余部分被解读为向量长度字段859B。存储器访问820指令模板包括缩放比例字段860,并且可选地包括位移字段862A或者位移缩放比例字段862B。
对于通用向量友好指令格式800,完整操作码字段874被示为包括格式字段840、基本操作字段842和数据元素宽度字段864。虽然示出了其中完整操作码字段874包括所有这些字段的一个实施例,但完整操作码字段874在不支持所有这些字段的实施例中只包括这些字段中的一些。完整操作码字段874提供操作代码(操作码)。
增强操作字段850、数据元素宽度字段864和写入掩码字段870允许了在通用向量友好指令格式中基于每个指令来指定这些特征。
写入掩码字段和数据元素宽度字段的组合创建了类型化指令,因为它们允许基于不同的数据元素宽度来应用掩码。
在类别A和类别B内找到的各种指令模板在不同的情形中是有益的。在本公开的一些实施例中,不同的处理器或处理器内的不同核心可只支持类别A、只支持类别B或者支持两个类别。例如,打算用于通用计算的高性能通用乱序核心可只支持类别B,打算主要用于图形和/或科学(吞吐量)计算的核心可只支持类别A,并且打算用于两者的核心可支持这两者(当然,具有来自两个类别的模板和指令的某种混合、但不具有来自两个类别的所有模板和指令的核心是在本公开的范围内的)。另外,单个处理器可包括多个核心,所有这些核心都支持相同类别或者其中不同的核心支持不同的类别。例如,在具有分开的图形和通用核心的处理器中,打算主要用于图形和/或科学计算的图形核心之一可只支持类别A,而通用核心中的一个或多个可以是只支持类别B的打算用于通用计算的具有乱序执行和寄存器重命名的高性能通用核心。不具有单独的图形核心的另一处理器可包括支持类别A和类别B两者的一个或多个通用有序或乱序核心。当然,在本公开的不同实施例中,来自一个类别的特征也可被实现在另一类别中。以高级别语言编写的程序将被置于(例如,被即时编译或静态编译到)多种不同的可执行形式中,包括:1)只具有由目标处理器支持的(一个或多个)类别的指令以便执行的形式;或者2)具有利用所有类别的指令的不同组合编写的替换例程并且具有基于当前执行代码的处理器所支持的指令来选择要执行的例程的控制流程代码的形式。
示范性特定向量友好指令格式
图9A是根据本公开的实施例图示出示范性特定向量友好指令格式的框图。图9A示出了在如下意义上特定的特定向量友好指令格式900:其指定字段的位置、大小、解读和顺序,以及这些字段中的一些的值。特定向量友好指令格式900可被用于扩展x86指令集,从而字段中的一些与现有的x86指令集及其扩展(例如,AVX)中使用的那些相似或相同。此格式与带有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、MOD R/M字段、SIB字段、位移字段和即时字段保持一致。图示出了来自图9A的字段所映射到的来自图8A和图8B的字段。
应当理解,虽然出于说明目的在通用向量友好指令格式800的情境中参考特定向量友好指令格式900描述了本公开的实施例,但除非有声明,否则本公开不限于特定向量友好指令格式900。例如,通用向量友好指令格式800对于各种字段设想了多种可能的大小,而特定向量友好指令格式900被示为具有特定大小的字段。作为具体示例,虽然数据元素宽度字段864在特定向量友好指令格式900中被示为一比特字段,但本公开不限于此(也就是说,通用向量友好指令格式800设想了数据元素宽度字段864的其他大小)。
通用向量友好指令格式800包括按图9A中所示的顺序的下面列出的以下字段。
EVEX前缀(字节0-3)902–被编码为四字节形式。
格式字段840(EVEX字节0,比特[7:0])-第一字节(EVEX字节0)是格式字段840并且其包含0x62(在本公开的一个实施例中用于区分向量友好指令格式的唯一值)。
第二至第四字节(EVEX字节1-3)包括提供特定能力的若干个比特字段。
REX字段905(EVEX字节1,比特[7-5])-由EVEX.R比特字段(EVEX字节1,比特[7]–R)、EVEX.X比特字段(EVEX字节1,比特[6]–X)和857BEX字节1,比特[5]–B)构成。EVEX.R、EVEX.X和EVEX.B比特字段提供与相应的VEX比特字段相同的功能,并且被利用反码形式来编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其他字段如本领域中已知的那样对寄存器索引的较低三个比特编码(rrr、xxx和bbb),从而Rrrr、Xxxx和Bbbb可通过添加EVEX.R、EVEX.X和EVEX.B来形成。
REX’字段810–这是REX’字段810的第一部分并且是用于对扩展32寄存器集合的高16或低16编码的EVEX.R’比特字段(EVEX字节1,比特[4]-R’)。在本公开的一个实施例中,此比特以及如下所示的其他比特被以比特反转格式来存储以与BOUND指令相区分(在公知的x86 32比特模式中),BOUND指令的真实操作码字节是62,但不在MOD R/M字段(下文描述)中接受MOD字段中的11的值;本公开的替换实施例不以反转格式存储这个比特和下面指示的其他比特。值1被用于对低16寄存器编码。换言之,R’Rrrr是通过组合EVEX.R’、EVEX.R和来自其他字段的其他RRR形成的。
操作码映射字段915(EVEX字节1,比特[3:0]–mmmm)–其内容编码了暗示的主导操作码字节(0F、0F 38或0F 3)。
数据元素宽度字段864(EVEX字节2,比特[7]–W)-由符号EVEX.W表示。EVEX.W被用于定义数据类型的粒度(大小)(32比特数据元素或64比特数据元素)。
EVEX.vvvv 920(EVEX字节2,比特[6:3]-vvvv)-EVEX.vvvv的作用可包括以下的:1)EVEX.vvvv编码了以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)EVEX.vvvv编码了对于某些向量移位以反码形式指定的目标寄存器操作对象;或者3)EVEX.vvvv不编码任何操作对象,该字段被保留并且应当包含1111b。从而,EVEX.vvvv字段920编码了以反转(反码)形式存储的第一源寄存器指定符的4个低阶比特。取决于指令,一额外的不同EVEX比特字段被用于将指定符大小扩展到32寄存器。
EVEX.U 868类别字段(EVEX字节2,比特[2]-U)–如果EVEX.U=0,则其指示类别A或EVEX.U0;如果EVEX.U=1,则其指示类别B或者EVEX.U1。
前缀编码字段925(EVEX字节2,比特[1:0]-pp)–为基本操作字段提供额外比特。除了对于采取EVEX前缀格式的传统SSE指令提供支持以外,这还具有使SIMD前缀紧缩的益处(EVEX前缀只要求2个比特,而不是要求一字节来表达SIMD前缀)。在一个实施例中,为了支持采取传统格式和采取EVEX前缀格式两者的使用SIMD前缀(66H、F2H、F3H)的传统SSE指令,这些传统SIMD前缀被编码到SIMD前缀编码字段中;并且在运行时被扩展成传统SIMD前缀,然后才被提供到解码器的PLA(因此PLA可执行这些传统指令的传统和EVEX格式两者,而无需修改)。虽然更新的指令可直接使用EVEX前缀编码字段的内容作为操作码扩展,但某些实施例为了一致性以类似的方式扩展,但允许这些传统SIMD前缀指定不同的含义。替换实施例可重设计PLA来支持2比特SIMD前缀编码,从而不要求扩展。
阿尔法字段852(EVEX字节3,比特[7]–EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写入掩码控制以及EVEX.N;也用α来图示)–如前所述,此字段是依情境而定的。
贝塔字段854(EVEX字节3,比特[6:4]–SSS;也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ来图示)–如前所述,此字段是依情境而定的。
REX’字段810–这是REX'字段的剩余部分并且是可用于对扩展32寄存器集合的高16或低16编码的EVEX.V’比特字段(EVEX字节3,比特[3]–V’)。此比特被以比特反转格式来存储。值1被用于对低16寄存器编码。换言之,V’VVVV是通过组合EVEX.V’、EVEX.vvvv形成的。
写入掩码字段870(EVEX字节3,比特[2:0]-kkk)-其内容指定如前所述的写入掩码寄存器中的寄存器的索引。在本公开的一个实施例中,特定值EVEX.kkk=000具有暗示对于特定指令没有使用写入掩码的特殊行为(这可通过多种方式来实现,包括使用被硬连线到全一的写入掩码或者绕过掩蔽硬件的硬件)。
真实操作码字段930(字节4)也被称为操作码字节。操作码的一部分在此字段中指定。
MOD R/M字段940(字节5)包括MOD字段942、Reg字段944和R/M字段946。如前所述,MOD字段942的内容区分存储器访问和非存储器访问操作。Reg字段944的作用可被总结成两个情形:编码目标寄存器操作对象或者源寄存器操作对象,或者被作为操作码扩展来对待并且不被用于编码任何指令操作对象。R/M字段946的作用可包括以下的:编码引用存储器地址的指令操作对象,或者编码目标寄存器操作对象或源寄存器操作对象。
缩放比例、索引、基数(Scale,Index,Base,SIB)字节(字节6)-如前所述,缩放比例字段850的内容被用于存储器地址生成。SIB.xxx 954和SIB.bbb 956–先前已对于寄存器索引Xxxx和Bbbb提及了这些字段的内容。
位移字段862A(字节7-10)-当MOD字段942包含10时,字节7-10是位移字段862A,并且其工作方式与传统32比特位移(disp32)相同并且在字节粒度上工作。
位移因子字段862B(字节7)-当MOD字段942包含01时,字节7是位移因子字段862B。此字段的位置与传统x86指令集8比特位移(disp8)的相同,其在字节粒度上工作。由于disp8被符号扩展,所以其只能在-128和127字节偏移量之间寻址;就64字节缓存线而言,disp8使用8个比特,这8个比特可被设置到仅四个真正有用的值-128、-64、0和64;由于经常需要更大的范围,所以使用disp32;然而,disp32要求4个字节。与disp8和disp32不同,位移因子字段862B是对disp8的重解读;当使用位移因子字段862B时,实际位移由位移因子字段的内容乘以存储器操作对象访问的大小(N)来确定。这种类型的位移被称为disp8*N。这减小了平均指令长度(单个字节被用于位移,但具有大得多的范围)。这种压缩的位移是基于如下假设的:有效位移是存储器访问的粒度的倍数,并且因此,地址偏移量的冗余低阶比特不需要被编码。换言之,位移因子字段862B代替了传统x86指令集8比特位移。从而,位移因子字段862B被按与x86指令集8比特位移相同的方式编码(因此在ModRM/SIB编码规则中没有变化),唯一例外是disp8被超载到disp8*N。换言之,在编码规则或编码长度中没有变化,而只在硬件对位移值的解读中有变化(硬件需要按存储器操作对象的大小来缩放位移以获得按字节地址偏移量)。即时字段872如前所述那样操作。
完整操作码字段
图9B是根据本公开的一个实施例图示出构成完整操作码字段874的特定向量友好指令格式900的字段的框图。具体而言,完整操作码字段874包括格式字段840、基本操作字段842和数据元素宽度(W)字段864。基本操作字段842包括前缀编码字段925、操作码映射字段915和真实操作码字段930。
寄存器索引字段
图9C是根据本公开的一个实施例图示出构成寄存器索引字段844的特定向量友好指令格式900的字段的框图。具体而言,寄存器索引字段844包括REX字段905、REX'字段910、MODR/M.reg字段944、MODR/M.r/m字段946、VVVV字段920、xxx字段954和bbb字段956。
增强操作字段
图9D是根据本公开的一个实施例图示出构成增强操作字段850的特定向量友好指令格式900的字段的框图。当类别(U)字段868包含0时,其表示EVEX.U0(类别A 868A);当其包含1时,其表示EVEX.U1(类别B 868B)。当U=0并且MOD字段942包含11时(表示无存储器访问操作),阿尔法字段852(EVEX字节3,比特[7]–EH)被解读为rs字段852A。当rs字段852A包含1时(舍入852A.1),贝塔字段854(EVEX字节3,比特[6:4]-SSS)被解读为舍入控制字段854A。舍入控制字段854A包括一比特SAE字段856和两比特舍入操作字段858。当rs字段852A包含0时(数据变换852A.2),贝塔字段854(EVEX字节3,比特[6:4]-SSS)被解读为三比特数据变换字段854B。当U=0并且MOD字段942包含00、01或10时(表示存储器访问操作),阿尔法字段852(EVEX字节3,比特[7]–EH)被解读为逐出提示(eviction hint,EH)字段852B并且贝塔字段854(EVEX字节3,比特[6:4]-SSS)被解读为三比特数据操纵字段854C。
当U=1时,阿尔法字段852(EVEX字节3,比特[7]–EH)被解读为写入掩码控制(Z)字段852C。当U=1并且MOD字段942包含11时(表示无存储器访问操作),贝塔字段854的一部分(EVEX字节3,比特[4]–S0)被解读为RL字段857A;当其包含1(舍入857A.1)时,贝塔字段854的其余部分(EVEX字节3,比特[6-5]-S2-1)被解读为舍入操作字段859A,而当RL字段857A包含0(VSIZE 857.A2)时,贝塔字段854的其余部分(EVEX字节3,比特[6-5]-S2-1)被解读为向量长度字段859B(EVEX字节3,比特[6-5]-L1-0)。当U=1并且MOD字段942包含00、01或10时(表示存储器访问操作),贝塔字段854(EVEX字节3,比特[6:4]-SSS)被解读为向量长度字段859B(EVEX字节3,比特[6-5]-L1-0)和广播字段857B(EVEX字节3,比特[4]-B)。
示范性寄存器体系结构
图10是根据本公开的一个实施例的寄存器体系结构1000的框图。在图示的实施例中,存在32个512比特宽的向量寄存器1010;这些寄存器被称为zmm0至zmm31。低16zmm寄存器的低阶256比特被覆盖在寄存器ymm0-16上。低16zmm寄存器的低阶128比特(ymm寄存器的低阶128比特)被覆盖在寄存器xmm0-15上。特定向量友好指令格式900如以下表格中所示在这些覆盖的寄存器文件上操作。
换言之,向量长度字段859B在最大长度和一个或多个其他更短长度之间做出选择,其中每个这种更短长度是前一长度的一半;并且没有向量长度字段859B的指令模板在最大向量长度上操作。另外,在一个实施例中,特定向量友好指令格式900的类别B指令模板在紧缩或标量单/双精度浮点数据和紧缩或标量整数数据上操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;更高阶数据元素位置或者被保持与其在该指令之前相同,或者被归零,这取决于实施例。
写入掩码寄存器1015–在图示的实施例中,有8个写入掩码寄存器(k0至k7),每个的大小是64比特。在替换实施例中,写入掩码寄存器1015的大小是16比特。如前所述,在本公开的一个实施例中,向量掩码寄存器k0可被用作写入掩码;当通常将会指示k0的编码被用于写入掩码时,其选择硬连线的写入掩码0xFFFF,实际上对于该指令禁用了写入掩蔽。
通用寄存器1025–在图示的实施例中,有十六个64比特通用寄存器,它们与现有的x86寻址模式一起被用于寻址存储器操作对象。这些寄存器被用名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8至R15来引用。
标量浮点堆栈寄存器文件(x87堆栈)1045,其上化名了MMX紧缩整数平坦寄存器文件1050–在图示的实施例中,x87堆栈是用于利用x87指令集扩展在32/64/80比特浮点数据上执行标量浮点操作的八元素堆栈;而MMX寄存器被用于在64比特紧缩整数数据上执行操作,以及为在MMX和XMM寄存器之间执行的一些操作保持操作对象。
本公开的替换实施例可使用更宽或更窄的寄存器。此外,本公开的替换实施例可使用更多、更少或不同的寄存器文件和寄存器。
示范性核心体系结构、处理器和计算机体系结构
处理器核心可按不同的方式、为了不同的目的、在不同的处理器中实现。例如,这种核心的实现方式可包括:1)打算用于通用计算的通用有序核心;2)打算用于通用计算的高性能通用乱序核心;3)主要打算用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可包括:1)包括打算用于通用计算的一个或多个通用有序核心和/或打算用于通用计算的一个或多个通用乱序核心的CPU;以及2)包括主要打算用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器导致不同的计算机系统体系结构,这些体系结构可包括:1)协处理器在与CPU分开的芯片上;2)协处理器在与CPU相同的封装中、分开的晶粒上;3)协处理器与CPU在同一晶粒上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可在同一晶粒上包括描述的CPU(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)、上述的协处理器以及额外的功能。接下来描述示范性核心体系结构,然后是对示范性处理器和计算机体系结构的描述。
示范性核心体系结构
有序和乱序核心框图
图11A是根据本公开的实施例图示出示范性有序流水线和示范性寄存器重命名、乱序发出/执行流水线两者的框图。图11B是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、乱序发出/执行体系结构核心两者的框图。图11A-11B中的实线框图示了有序流水线和有序核心,而虚线框的可选添加图示了寄存器重命名、乱序发出/执行流水线和核心。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图11A中,处理器流水线1100包括取得级1102、长度解码级1104、解码级1106、分配级1108、重命名级1110、调度(也称为调遣或发出)级1112、寄存器读取/存储器读取级1114、执行级1116、写回/存储器写入级1118、异常处理级1122和提交级1124。
图11B示出了处理器核心1190包括耦合到执行引擎单元1150的前端单元1130,并且两者都耦合到存储器单元1170。核心1190可以是精简指令集计算(reduced instructionset computing,RISC)核心、复杂指令集计算(complex instruction set computing,CISC)核心、超长指令字(very long instruction word,VLIW)核心或者混合或替换核心类型。作为另外一个选项,核心1190可以是专用核心,例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purpose computing graphics processingunit,GPGPU)核心、图形核心,等等。
前端单元1130包括分支预测单元1132,其耦合到指令缓存单元1134,指令缓存单元1134耦合到指令转化后备缓冲器(translation lookaside buffer,TLB)1136,该TLB1136耦合到指令取得单元1138,该指令取得单元1138耦合到解码单元1140。解码单元1140(或者解码器或解码器单元)可对指令(例如,宏指令)解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。解码单元1140可利用各种不同的机制来实现。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(programmable logic array,PLA)、微代码只读存储器(read only memory,ROM),等等。在一个实施例中,核心1190包括微代码ROM或其他介质,其为某些宏指令存储微代码(例如,在解码单元1140中或者以其他方式在前端单元1130内)。解码单元1140耦合到执行引擎单元1150中的重命名/分配器单元1152。
执行引擎单元1150包括耦合到引退单元1154和一组一个或多个调度器单元1156的重命名/分配器单元1152。(一个或多个)调度器单元1156表示任何数目的不同调度器,包括预留站、中央指令窗口等等。(一个或多个)调度器单元1156耦合到(一个或多个)物理寄存器文件单元1158。物理寄存器文件单元1158的每一者表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针),等等。在一个实施例中,物理寄存器文件单元1158包括向量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可提供体系结构式向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器文件单元1158与引退单元1154重叠以例示出可用来实现寄存器重命名和乱序执行的各种方式(例如,利用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;利用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;利用寄存器图谱和寄存器的池;等等)。引退单元1154和(一个或多个)物理寄存器文件单元1158耦合到(一个或多个)执行集群1160。(一个或多个)执行集群1160包括一组一个或多个执行单元1162和一组一个或多个存储器访问单元1164。执行单元1162可在各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)上执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可包括专用于特定功能或功能集合的若干个执行单元,但其他实施例可只包括一个执行单元或者全都执行所有功能的多个执行单元。(一个或多个)调度器单元1156、(一个或多个)物理寄存器文件单元1158和(一个或多个)执行集群1160被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线和/或存储器访问流水线,它们各自具有其自己的调度器单元、物理寄存器文件单元和/或执行集群–并且在单独的存储器访问流水线的情况下,实现了某些实施例,其中只有此流水线的执行集群具有(一个或多个)存储器访问单元1164)。还应当理解,在使用分开流水线的情况下,这些流水线中的一个或多个可以是乱序发出/执行,其余的是有序的。
存储器访问单元1164的集合耦合到存储器单元1170,存储器单元1170包括数据TLB单元1172,数据TLB单元1172耦合到数据缓存单元1174,数据缓存单元1174耦合到第2级(L2)缓存单元1176。在一个示范性实施例中,存储器访问单元1164可包括加载单元、存储地址单元和存储数据单元,其中每一者耦合到存储器单元1170中的数据TLB单元1172。指令缓存单元1134进一步耦合到存储器单元1170中的第2级(L2)缓存单元1176。L2缓存单元1176耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。
作为示例,示范性寄存器重命名、乱序发出/执行核心体系结构可实现流水线1100如下:1)指令取得1138执行取得和长度解码级1102和1104;2)解码单元1140执行解码级1106;3)重命名/分配器单元1152执行分配级1108和重命名级1110;4)(一个或多个)调度器单元1156执行调度级1112;5)(一个或多个)物理寄存器文件单元1158和存储器单元1170执行寄存器读取/存储器读取级1114;执行集群1160执行执行级1116;6)存储器单元1170和(一个或多个)物理寄存器文件单元1158执行写回/存储器写入级1118;7)在异常处理级1122中可涉及各种单元;并且8)引退单元1154和(一个或多个)物理寄存器文件单元1158执行提交级1124。
核心1190可支持一个或多个指令集(例如,x86指令集(带有已随着更新版本添加的一些扩展);加州森尼维耳市的MIPS技术公司的MIPS指令集;加州森尼维耳市的ARM控股公司的ARM指令集(带有可选的额外扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核心1190包括逻辑来支持紧缩数据指令集扩展(例如,AVX1、AVX2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。
应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按多种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心为该物理核心在同时进行多线程处理的每个线程提供逻辑核心),或者这些的组合(例如,时间切片式取得和解码,然后是同时多线程处理,例如像Hyper-threading技术中那样)。
虽然寄存器重命名是在乱序执行的情境中描述的,但应当理解寄存器重命名可用于有序体系结构中。虽然处理器的图示实施例还包括分开的指令和数据缓存单元1134/1174和共享的L2缓存单元1176,但替换实施例可对于指令和数据两者具有单个内部缓存,例如第1级(L1)内部缓存,或者多级别的内部缓存。在一些实施例中,系统可包括内部缓存和在核心和/或处理器外部的外部缓存的组合。或者,所有缓存都可在核心和/或处理器外部。
具体示范性有序核心体系结构
图12A-图12B图示出更具体的示范性有序核心体系结构的框图,该核心将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核心)之一。逻辑块通过高带宽互连网络(例如,环状网络)与某些固定功能逻辑、存储器I/O接口和其他必要I/O逻辑通信,这取决于应用。
图12A是根据本公开的实施例的单个处理器核心及其与片上互连网络1202以及与第2级(L2)缓存1204的其本地子集的连接的框图。在一个实施例中,指令解码单元1200支持具有紧缩数据指令集扩展的x86指令集。L1缓存1206允许低时延访问以将存储器缓存到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元1208和向量单元1210使用分开的寄存器集合(分别是标量寄存器1212和向量寄存器1214)并且在它们之间传送的数据被写入到存储器,然后被从第1级(L1)缓存1206读回,但本公开的替换实施例可使用不同的方案(例如,使用单个寄存器集合或者包括允许数据在两个寄存器文件之间传送而不被写入和读回的通信路径)。
L2缓存的本地子集1204是全局L2缓存的一部分,全局L2缓存被划分成单独的本地子集,每个处理器核心有一个。每个处理器核心具有到其自己的L2缓存的本地子集1204的直接访问路径。处理器核心读取的数据被存储在其L2缓存子集1204中并且可被迅速访问,与其他处理器核心访问其自己的本地L2缓存子集并行。处理器核心写入的数据被存储在其自己的L2缓存子集1204中并且在必要时被从其他子集冲刷出。环状网络确保了共享数据的一致性。环状网络是双向的,以允许诸如处理器核心、L2缓存和其他逻辑块之类的代理在芯片内与彼此通信。每个环状数据路径在每个方向上是1012比特宽的。
图12B是根据本公开的实施例的图12A中的处理器核心的一部分的扩展视图。图12B包括L1缓存1204的L1数据缓存1206A部分,以及关于向量单元1210和向量寄存器1214的更多细节。具体而言,向量单元1210是16宽向量处理单元(vector processing unit,VPU)(参见16宽ALU1228),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。VPU支持利用调配单元1220调配寄存器输入,利用数值转换单元1222A-B进行的数值转换,以及利用复制单元1224对存储器输入的复制。写入掩码寄存器1226允许断言结果向量写入。
图13是根据本公开的实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器1300的框图。图13中的实线框图示了具有单个核心1302A、系统代理1310和一组一个或多个总线控制器单元1316的处理器1300,而虚线框的可选添加图示了具有多个核心1302A-N、系统代理单元1300中的一组一个或多个集成存储器控制单元1314和专用逻辑1308的替换处理器1300。
从而,处理器1300的不同实现方式可包括:1)其中专用逻辑1308是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心)并且核心1302A-N是一个或多个通用核心(例如,通用有序核心、通用乱序核心或者两者的组合)的CPU;2)其中核心1302A-N是主要打算用于图形和/或科学(吞吐量)的大量的专用核心的协处理器;以及3)其中核心1302A-N是大量的通用有序核心的协处理器。从而,处理器1300可以是通用处理器、协处理器或专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核(many integrated core,MIC)协处理器(包括30或更多个核心)、嵌入式处理器,等等。处理器可实现在一个或多个芯片上。处理器1300可以是一个或多个基片的一部分和/或可利用若干个工艺技术中的任何一者实现在一个或多个基片上,这些技术例如是BiCMOS、CMOS或NMOS。
存储器层次体系可包括核心内的一级或多级缓存、一组或一个或多个共享缓存单元1306以及耦合到该组集成存储器控制器单元1314的外部存储器(未示出)。该组共享缓存单元1306可包括一个或多个中间级别缓存,例如第2级(L2)、第3级(L3)、第4级(4)或其他级别的缓存,最后一级缓存(last level cache,LLC),和/或这些的组合。虽然在一个实施例中基于环的互连单元1312互连集成图形逻辑1308、该组共享缓存单元1306和系统代理单元1310/(一个或多个)集成存储器控制器单元1314,但替换实施例也可使用任何数目的公知技术来互连这种单元。在一个实施例中,在一个或多个缓存单元1306和核心1302A-N之间维持一致性。
在一些实施例中,核心1302A-N中的一个或多个能够进行多线程处理。系统代理1310包括协调和操作核心1302A-N的那些组件。系统代理单元1310可包括例如功率控制单元(power control unit,PCU)和显示单元。PCU可以是或者可以包括调控核心1302A-N和集成图形逻辑1308的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核心1302A-N就体系结构指令集而言可以是同质的或者异质的;也就是说,核心1302A-N中的两个或更多个可能够执行同一指令集,而其他的可只能够执行该指令集的子集或者不同的指令集。
示范性计算机体系结构
图14-图17是示范性计算机体系结构的框图。本领域中已知的用于膝上型计算机、桌面型计算机、手持PC、个人数字助理、工程工作站、服务器、网络装置、网络集线器、交换机、嵌入式处理器、数字信号处理器(digital signal processor,DSP)、图形装置、视频游戏装置、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持装置和各种其他电子装置的其他系统设计和配置也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的许多种系统或电子装置一般是适当的。
现在参考图14,其中示出了根据本公开的一个实施例的系统1400的框图。系统1400可包括一个或多个处理器1410、1415,它们耦合到控制器中枢1420。在一个实施例中,控制器中枢1420包括图形存储器控制器中枢(graphics memory controller hub,GMCH)1490和输入/输出中枢(Input/Output Hub,IOH)1450(它们可在分开的芯片上);GMCH 1490包括与存储器1440和协处理器1445耦合的存储器和图形控制器;IOH1450将输入/输出(I/O)装置1460耦合到GMCH 1490。或者,存储器和图形控制器的一者或两者被集成在处理器内(如本文所述),存储器1440和协处理器1445直接耦合到处理器1410,并且控制器中枢1420与IOH1450在单个芯片中。存储器1440例如可包括容器代码1440A,以存储当被执行时使得处理器执行本公开的任何方法的代码。
额外的处理器1415的可选性在图14中用虚线表示。每个处理器1410、1415可包括本文描述的处理核心中的一个或多个并且可以是处理器1300的某个版本。
存储器1440可例如是动态随机访问存储器(dynamic random access memory,DRAM)、相变存储器(phase change memory,PCM)或者两者的组合。对于至少一个实施例,控制器中枢1420经由多点分支总线(例如前端总线(frontside bus,FSB))、点到点接口(例如Quickpath Interconnect(QPI))或者类似的连接1495与(一个或多个)处理器1410、1415通信。
在一个实施例中,协处理器1445是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个实施例中,控制器中枢1420可包括集成的图形加速器。
在物理资源1410、1415之间,就包括体系结构特性、微体系结构特性、热特性、功率消耗特性等等在内的价值度量的范围而言可以有多种差异。
在一个实施例中,处理器1410执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器1410将这些协处理器指令识别为应当由附接的协处理器1445执行的类型。因此,处理器1410在协处理器总线或其他互连上向协处理器1445发出这些协处理器指令(或者表示协处理器指令的控制信号)。(一个或多个)协处理器1445接受和执行接收到的协处理器指令。
现在参考图15,其中示出了根据本公开的实施例的第一更具体示范性系统1500的框图。如图15中所示,多处理器系统1500是点到点互连系统,并且包括经由点到点互连1550耦合的第一处理器1570和第二处理器1580。处理器1570和1580的每一者可以是处理器1300的某个版本。在本公开的一个实施例中,处理器1570和1580分别是处理器1410和1415,而协处理器1538是协处理器1445。在另一实施例中,处理器1570和1580分别是处理器1410和协处理器1445。
处理器1570和1580被示为分别包括集成存储器控制器(integrated memorycontroller,IMC)单元1572和1582。处理器1570还包括点到点(P-P)接口1576和1578作为其总线控制器单元的一部分;类似地,第二处理器1580包括P-P接口1586和1588。处理器1570、1580可利用P-P接口电路1578、1588经由点到点(P-P)接口1550交换信息。如图15中所示,IMC 1572和1582将处理器耦合到各自的存储器,即存储器1532和存储器1534,存储器1532和存储器1534可以是在本地附接到各个处理器的主存储器的一部分。
处理器1570、1580可各自利用点到点接口电路1576、1594、1586、1598经由个体P-P接口1552、1554与芯片集1590交换信息。芯片集1590可以可选地经由高性能接口1539与协处理器1538交换信息。在一个实施例中,协处理器1538是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享缓存(未示出)可被包括在任一处理器中,或者在两个处理器之外,但经由P-P互连与处理器连接,从而使得任一个或两个处理器的本地缓存信息在处理器被置于低功率模式中的情况下可被存储在该共享缓存中。
芯片集1590可经由接口1596耦合到第一总线1516。在一个实施例中,第一总线1516可以是外围组件互连(Peripheral Component Interconnect,PCI)总线,或者诸如快速PCI总线或另一种第三代I/O互连总线之类的总线,虽然本公开的范围不限于此。
如图15中所示,各种I/O装置1514可耦合到第一总线1516,以及将第一总线1516耦合到第二总线1520的总线桥1518。在一个实施例中,一个或多个额外的处理器1515,例如协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或者任何其他处理器,耦合到第一总线1516。在一个实施例中,第二总线1520可以是低引脚数(low pin count,LPC)总线。各种装置可耦合到第二总线1520,例如包括键盘和/或鼠标1522、通信装置1527和存储单元1528,例如盘驱动器或者其他大容量存储装置,它们在一个实施例中可包括指令/代码和数据1530。另外,音频I/O 1524可耦合到第二总线1520。注意其他体系结构是可能的。例如,取代图15的点到点体系结构,系统可实现多点分支总线或者其他这种体系结构。
现在参考图16,其中示出了根据本公开的实施例的第二更具体示范性系统1600的框图。图15和图16中的相似元素带有相似的标号,并且图15的某些方面被从图16中省略以避免模糊图16的其他方面。
图16图示出处理器1570、1580可分别包括集成存储器和I/O控制逻辑(“CL”)1572和1582。从而,CL 1572、1582包括集成存储器控制器单元并且包括I/O控制逻辑。图16图示出不仅存储器1532、1534耦合到CL 1572、1582,而且I/O装置1614也耦合到控制逻辑1572、1582。传统I/O装置1615耦合到芯片集1590。
现在参考图17,其中示出了根据本公开的实施例的SoC 1700的框图。图13中的相似元素带有相似的标号。另外,虚线框是更先进SoC上的可选特征。在图17中,(一个或多个)互连单元1702耦合到:应用处理器1710,其包括一组一个或多个核心1302A-N,和(一个或多个)共享缓存单元1306;系统代理单元1310;(一个或多个)总线控制器单元1316;(一个或多个)集成存储器控制器单元1314;一组或一个或多个协处理器1720,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机访问存储器(static random accessmemory,SRAM)单元1730;直接存储器访问(direct memory access,DMA)单元1732;以及显示单元1740,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器1720包括专用处理器,例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器,等等。
本文公开的(例如,机制的)实施例可以用硬件、软件、固件或者这种实现方案的组合来实现。本公开的实施例可实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置的可编程系统上执行的计算机程序或程序代码。
程序代码,例如图15中所示的代码1530,可被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可按已知的方式被应用到一个或多个输出装置。对于本申请而言,处理系统包括任何具有处理器的系统,例如;数字信号处理器(digital signalprocessor,DSP)、微控制器、专用集成电路(application specific integrated circuit,ASIC)或者微处理器。
程序代码可以用高级过程式或面向对象的编程语言实现来与处理系统通信。如果希望,程序代码也可以用汇编或机器语言来实现。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是经编译或者解译的语言。
至少一个实施例的一个或多个方面可由存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令实现,这些代表性指令当被机器读取时使得该机器制造逻辑来执行本文描述的技术。这种被称为“IP核”的表示可被存储在有形机器可读介质上并且被提供到各种客户或制造设施以加载到实际制作该逻辑或处理器的制造机器中。
这种机器可读存储介质可包括但不限于由机器或装置制造或形成的物品的非暂态有形布置,包括存储介质,例如硬盘,任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(compact disk read-only memory,CD-ROM)、可改写致密盘(compact diskrewritable,CD-RW)和磁光盘,半导体装置,例如只读存储器(read-only memory,ROM),随机访问存储器(random access memory,RAM),例如动态随机访问存储器(dynamic randomaccess memory,DRAM),静态随机访问存储器(static random access memory,SRAM),可擦除可编程只读存储器(erasable programmable read-only memory,EEPROM),闪速存储器,电可擦除可编程只读存储器(electrically erasable programmable read-only memory,EEPROM),相变存储器(phase change memory,PCM),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。
因此,本公开的实施例还包括非暂态有形机器可读介质,其包含指令或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计数据,例如硬件描述语言(Hardware Description Language,HDL)。这种实施例也可被称为程序产品。
仿真(包括二进制转化、代码变形等等)
在一些情况下,指令转换器可用于将指令从源指令集转换到目标指令集。例如,指令转换器可将指令转化(例如,利用静态二进制转化、包括动态编译的动态二进制转化)、变形、仿真或以其他方式转换到要被核心处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或者其组合来实现。指令转换器可以在处理器上、在处理器外或者一部分在处理器上一部分在处理器外。
图18是根据本公开的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。在图示的实施例中,指令转换器是软件指令转换器,虽然可替换地,指令转换器可以用软件、固件、硬件或者其各种组合来实现。图18示出了高级别语言1802的程序可被利用x86编译器1804来编译以生成x86二进制代码1806,x86二进制代码1806可由具有至少一个x86指令集核心1816的处理器原生执行。具有至少一个x86指令集核心1816的处理器表示任何这样的处理器:这种处理器可通过兼容地执行或以其他方式处理(1)x86指令集核心的指令集的实质部分或者(2)针对在具有至少一个x86指令集核心的处理器上运行的应用或其他软件的目标代码版本来执行与具有至少一个x86指令集核心的处理器基本上相同的功能,以便实现与具有至少一个x86指令集核心的处理器基本上相同的结果。x86编译器1804表示可操作来生成x86二进制代码1806(例如,目标代码)的编译器,x86二进制代码1806在带有或不带有额外的链接处理的情况下可被在具有至少一个x86指令集核心的处理器1816上执行。类似地,图18示出了高级别语言1802的程序可被利用替换指令集编译器1808来编译以生成替换指令集二进制代码1810,替换指令集二进制代码1810可由没有至少一个x86指令集核心的处理器1814(例如,具有执行加州森尼维耳市的MIPS技术公司的MIPS指令集和/或执行加州森尼维耳市的ARM控股公司的ARM指令集的核心的处理器)原生执行。指令转换器1812用于将x86二进制代码1806转换成可由没有x86指令集核心的处理器1814原生执行的代码。这个转换后的代码不太可能与替换指令集二进制代码1810相同,因为能够做到这一点的指令转换器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替换指令集的指令构成。从而,指令转换器1812表示通过仿真、模拟或任何其他过程允许不具有x86指令集处理器或核心的处理器或其他电子装置执行x86二进制代码1806的软件、固件、硬件或者其组合。
Claims (24)
1.一种硬件处理器,包括:
解码器,用于将单个指令解码为经解码的单个指令;以及
执行电路,用于执行所述经解码的单个指令,以引起从当前状态到包括附加状态数据的状态的上下文切换,所述附加状态数据不被在所述硬件处理器上执行的操作系统的执行环境支持。
2.根据权利要求1所述的硬件处理器,其中,所述单个指令是用户模式指令。
3.根据权利要求1所述的硬件处理器,其中,所述单个指令包括标识所述附加状态数据的存储的字段。
4.根据权利要求1所述的硬件处理器,其中,所述执行电路用于重新执行所述经解码的单个指令,直到由所述附加状态数据触及的每个存储器页面可用为止。
5.根据权利要求1所述的硬件处理器,其中,所述执行电路用于执行所述经解码的单个指令,以引起所述硬件处理器进入用户模式受管理状态区域,所述用户模式受管理状态区域支持所述操作系统不支持的附加指令的状态管理。
6.根据权利要求5所述的硬件处理器,其中:
所述解码器用于将单个第二指令解码为经解码的单个第二指令;以及
所述执行电路用于执行所述经解码的单个第二指令,以引起从所述用户模式受管理状态区域退出。
7.根据权利要求6所述的硬件处理器,其中,所述执行电路用于执行所述经解码的单个第二指令,以引起从所述用户模式受管理状态区域退出到中止处理程序。
8.根据权利要求6所述的硬件处理器,其中,所述执行电路用于执行所述经解码的单个第二指令,以引起将指示退出原因的值填充到用于所述附加状态数据的存储中。
9.一种方法,包括:
用硬件处理器的解码器将单个指令解码为经解码的单个指令;以及
用所述硬件处理器的执行电路执行所述经解码的单个指令,以引起从当前状态到包括附加状态数据的状态的上下文切换,所述附加状态数据不被在所述硬件处理器上执行的操作系统的执行环境支持。
10.根据权利要求9所述的方法,其中,所述单个指令是用户模式指令。
11.根据权利要求9所述的方法,其中,所述单个指令包括标识所述附加状态数据的存储的字段。
12.根据权利要求9所述的方法,其中,执行所述经解码的单个指令包括:重新执行所述经解码的单个指令,直到由所述附加状态数据触及的每个存储器页面可用为止。
13.根据权利要求9所述的方法,其中,执行所述经解码的单个指令引起所述硬件处理器进入用户模式受管理状态区域,所述用户模式受管理状态区域支持所述操作系统不支持的附加指令的状态管理。
14.根据权利要求13所述的方法,还包括:
用所述解码器将单个第二指令解码为经解码的单个第二指令;以及
用所述执行电路执行所述经解码的单个第二指令,以引起从所述用户模式受管理状态区域退出。
15.根据权利要求14所述的方法,其中,执行所述经解码的单个第二指令引起从所述用户模式受管理状态区域退出到中止处理程序。
16.根据权利要求14所述的方法,其中,执行所述经解码的单个第二指令引起将指示退出原因的值填充到用于所述附加状态数据的存储中。
17.一种非暂态机器可读介质,其存储代码,所述代码在由机器执行时使所述机器执行方法,所述方法包括:
用硬件处理器的解码器将单个指令解码为经解码的单个指令;以及
用所述硬件处理器的执行电路执行所述经解码的单个指令,以引起从当前状态到包括附加状态数据的状态的上下文切换,所述附加状态数据不被在所述硬件处理器上执行的操作系统的执行环境支持。
18.根据权利要求17所述的非暂态机器可读介质,其中,所述单个指令是用户模式指令。
19.根据权利要求17所述的非暂态机器可读介质,其中,所述单个指令包括标识所述附加状态数据的存储的字段。
20.根据权利要求17所述的非暂态机器可读介质,其中,执行所述经解码的单个指令包括:重新执行所述经解码的单个指令,直到由所述附加状态数据触及的每个存储器页面可用为止。
21.根据权利要求17所述的非暂态机器可读介质,其中,执行所述经解码的单个指令引起所述硬件处理器进入用户模式受管理状态区域,所述用户模式受管理状态区域支持所述操作系统不支持的附加指令的状态管理。
22.根据权利要求21所述的非暂态机器可读介质,所述方法还包括:
用所述解码器将单个第二指令解码为经解码的单个第二指令;以及
用所述执行电路执行所述经解码的单个第二指令,以引起从所述用户模式受管理状态区域退出。
23.根据权利要求22所述的非暂态机器可读介质,其中,执行所述经解码的单个第二指令引起从所述用户模式受管理状态区域退出到中止处理程序。
24.根据权利要求22所述的非暂态机器可读介质,其中,执行所述经解码的单个第二指令引起将指示退出原因的值填充到用于所述附加状态数据的存储中。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/914,343 US11461098B2 (en) | 2020-06-27 | 2020-06-27 | Apparatuses, methods, and systems for instructions for operating system transparent instruction state management of new instructions for application threads |
US16/914,343 | 2020-06-27 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113849221A true CN113849221A (zh) | 2021-12-28 |
Family
ID=73475947
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011364546.7A Pending CN113849221A (zh) | 2020-06-27 | 2020-11-27 | 用于操作系统透明指令状态管理的装置、方法和系统 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11461098B2 (zh) |
EP (1) | EP3929731A1 (zh) |
CN (1) | CN113849221A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117311817A (zh) * | 2023-11-30 | 2023-12-29 | 上海芯联芯智能科技有限公司 | 一种协处理器控制方法、装置、设备及存储介质 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5623650A (en) * | 1989-12-29 | 1997-04-22 | Cray Research, Inc. | Method of processing a sequence of conditional vector IF statements |
US5781763A (en) * | 1995-04-07 | 1998-07-14 | International Business Machines Corporation | Independent control of DMA and I/O resources for mixed-endian computing systems |
US7516365B2 (en) * | 2007-07-27 | 2009-04-07 | Sun Microsystems, Inc. | System and method for split hardware transactions |
US8230425B2 (en) * | 2007-07-30 | 2012-07-24 | International Business Machines Corporation | Assigning tasks to processors in heterogeneous multiprocessors |
TWI514265B (zh) | 2011-04-07 | 2015-12-21 | Via Tech Inc | 將條件載入/儲存指令轉譯為數量可變的微指令之微處理器 |
US9058201B2 (en) | 2011-12-28 | 2015-06-16 | Intel Corporation | Managing and tracking thread access to operating system extended features using map-tables containing location references and thread identifiers |
US9396020B2 (en) | 2012-03-30 | 2016-07-19 | Intel Corporation | Context switching mechanism for a processing core having a general purpose CPU core and a tightly coupled accelerator |
US9858058B2 (en) * | 2014-03-31 | 2018-01-02 | International Business Machines Corporation | Partition mobility for partitions with extended code |
-
2020
- 2020-06-27 US US16/914,343 patent/US11461098B2/en active Active
- 2020-11-18 EP EP20208288.9A patent/EP3929731A1/en active Pending
- 2020-11-27 CN CN202011364546.7A patent/CN113849221A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117311817A (zh) * | 2023-11-30 | 2023-12-29 | 上海芯联芯智能科技有限公司 | 一种协处理器控制方法、装置、设备及存储介质 |
CN117311817B (zh) * | 2023-11-30 | 2024-03-08 | 上海芯联芯智能科技有限公司 | 一种协处理器控制方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US11461098B2 (en) | 2022-10-04 |
EP3929731A1 (en) | 2021-12-29 |
US20210406019A1 (en) | 2021-12-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114356417A (zh) | 实行16位浮点矩阵点积指令的系统和方法 | |
CN107077321B (zh) | 用于执行融合的单个周期递增-比较-跳转的指令和逻辑 | |
JP6711480B2 (ja) | ベクトルインデックスロードおよびストアのための方法および装置 | |
CN107077329B (zh) | 用于实现和维持判定值的栈的方法和设备 | |
JP7419629B2 (ja) | データ表現間の一貫性のある変換を加速するプロセッサ、方法、プログラム、コンピュータ可読記憶媒体、および装置 | |
US20210406018A1 (en) | Apparatuses, methods, and systems for instructions for moving data between tiles of a matrix operations accelerator and vector registers | |
US20190205137A1 (en) | Methods and apparatus for multi-load and multi-store vector instructions | |
CN106030514B (zh) | 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法 | |
US9760371B2 (en) | Packed data operation mask register arithmetic combination processors, methods, systems, and instructions | |
CN110909882A (zh) | 用于执行水平铺块操作的系统和方法 | |
CN115904649A (zh) | 用户级处理器间中断 | |
EP3575955B1 (en) | Indirect memory fetcher | |
CN112148510A (zh) | 用于线性地址屏蔽架构的设备、方法和系统 | |
CN114675883A (zh) | 用于对齐矩阵操作加速器瓦片的指令的装置、方法和系统 | |
CN108241509B (zh) | 用于高效地处理存储器排序缓冲器的分配的方法和装置 | |
US11934830B2 (en) | Method and apparatus for data-ready memory operations | |
CN108255520B (zh) | N路监测器 | |
CN113849221A (zh) | 用于操作系统透明指令状态管理的装置、方法和系统 | |
JP2017538215A (ja) | 逆分離演算を実行するための命令及びロジック | |
US12001887B2 (en) | Apparatuses, methods, and systems for instructions for aligning tiles of a matrix operations accelerator | |
TWI697836B (zh) | 處理包括高功率及標準指令之指令集的方法與處理器 | |
US12001385B2 (en) | Apparatuses, methods, and systems for instructions for loading a tile of a matrix operations accelerator | |
EP3757774A1 (en) | Hardware support for dual-memory atomic operations | |
CN112988230A (zh) | 用于将大约为一的浮点值相乘的指令的装置、方法和系统 | |
CN112306910A (zh) | 用于拆分式数据转换后备缓冲器的硬件 |
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 |