CN116382777A - 转换指令 - Google Patents

转换指令 Download PDF

Info

Publication number
CN116382777A
CN116382777A CN202211655453.9A CN202211655453A CN116382777A CN 116382777 A CN116382777 A CN 116382777A CN 202211655453 A CN202211655453 A CN 202211655453A CN 116382777 A CN116382777 A CN 116382777A
Authority
CN
China
Prior art keywords
instruction
value
examples
register
operand
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202211655453.9A
Other languages
English (en)
Inventor
R·瓦伦丁
W·S·王
J·库姆斯
M·查尼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN116382777A publication Critical patent/CN116382777A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Mathematical Physics (AREA)
  • Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Neurology (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

本发明描述转换指令。描述了用于经由指令进行数据类型转换的技术。示例性指令包括用于以下各项的字段:操作码、源操作对象的标识和目的地操作对象的标识,其中操作码用于指示指令处理电路要进行:将来自所标识的源操作对象的奇数16比特浮点值转换为32比特浮点值,以及将该32比特浮点值存储在所标识的目的地操作对象的数据元素位置中。

Description

转换指令
背景技术
近年来,已经证明具有较低精度的乘法和较高精度的累加的融合乘加(fused-multiply-add,FMA)单元在机器学习/人工智能应用中是有用的,最显著的是在训练深度神经网络时是有用的,这是由于其极高的计算强度。相较于经典的IEEE-754 32比特(FP32)和64比特(FP64)算术,此种精度降低的算术在性质上可以与其缩短的宽度不成比例地加速。
附图说明
将参考附图来描述根据本公开的各示例,在这些附图中:
图1图示出不同的浮点表示格式。
图2(A)图示出用于将来自源的、偶数数据元素位置中存储的BF16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。
图2(B)图示出用于将来自源的、偶数数据元素位置中存储的BF16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。
图3图示出用于处理VCVTNEEBF162PS指令的方法的示例。
图4图示出用于VCVTNEEBF162PS指令的指令编码的示例。
图5图示出用于VCVTNEEBF162PS指令的指令伪代码的示例。
图6(A)图示出用于将来自源的、奇数数据元素位置中存储的BF16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。
图6(B)图示出用于将来自源的、奇数数据元素位置中存储的BF16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。
图7图示出用于处理VCVTNEOBF162PS指令的方法的示例。
图8图示出用于VCVTNEOBF162PS指令的指令编码的示例。
图9图示出用于VCVTNEOBF162PS指令的指令伪代码的示例。
图10(A)图示出用于将来自源的、偶数数据元素位置中存储的FP16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。
图10(B)图示出用于将来自源的、偶数数据元素位置中存储的FP16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。
图11图示出用于处理VCVTNEEPH2PS指令的方法的示例。
图12图示出用于VCVTNEEPH2PS指令的指令编码的示例。
图13图示出用于VCVTNEEPH2PS指令的指令伪代码的示例。
图14(A)图示出用于将来自源的、奇数数据元素位置中存储的FP16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。
图14(B)图示出用于将来自源的、奇数数据元素位置中存储的FP16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。
图15图示出用于处理VCVTNEOPH2PS指令的方法的示例。
图16图示出用于VCVTNEOPH2PS指令的指令编码的示例。
图17图示出用于VCVTNEOPH2PS指令的指令伪代码的示例。
图18图示出用于处理诸如以上详细说明的指令中的任一指令之类的指令的硬件的示例。
图19图示出示例性系统的示例。
图20图示出可具有多于一个的核心、可具有集成存储器控制器、并且可具有集成图形器件的处理器的示例的框图。
图21(A)是图示出根据示例的示例性有序管线和示例性寄存器重命名、乱序发出/执行管线两者的框图。
图21(B)是图示根据示例的要包括在处理器中的有序体系结构核心的示例性示例和示例性寄存器重命名、乱序发出/执行体系结构核心两者的框图。
图22图示出(一个或多个)执行单元电路的示例,诸如图21(B)的(一个或多个)执行单元电路。
图23是根据一些示例的寄存器体系结构的框图。
图24图示出指令格式的示例。
图25图示出寻址字段的示例。
图26图示出第一前缀的示例。
图27(A)-图27(D)图示出如何使用第一前缀2401(A)的R、X和B字段的示例。
图28(A)-图28(B)图示出第二前缀的示例。
图29图示出第三前缀的示例。
图30图示根据示例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
本公开涉及用于数据元素转换的方法、装置、系统和非暂态计算机可读存储介质。
图1图示出不同的浮点表示格式。在该图示中,这些格式是低位优先(littleendian)格式,然而在一些示例中使用高位优先(big endian)格式。FP32格式101具有符号比特(S)、8比特指数、以及23比特分数(使用隐式比特的24比特尾数)。FP16格式103具有符号比特(S)、5比特指数、以及10比特分数。BF16格式105具有符号比特(S)、8比特指数、以及7比特分数。
相较于IEEE 754标准化16比特(FP16)变型,BF16在与FP32相比较时在值域上没有妥协。FP32数具有8比特指数和24比特尾数(包括1个隐式比特)。BF16从24比特FP32尾数截取16比特来创建16比特浮点数据类型。相比之下,FP16粗略地将FP32尾数分半为10个显式比特并将指数减少至5比特,以适配16比特数据类型包络。
相比于FP16,虽然BF16提供较低的精度,但它典型地更适合于支持深度学习任务。由于FP16的有限的值域,因此其值域不足以完成盒外(out-of-the-box)深度学习训练。BF16不受此问题影响,并且有限的精度实际上可有助于概括神经网络训练任务中所学的权重。换言之,较低的精度可以被看作提供内置的正则化属性。
不是所有的处理器都具有对所有数据类型的支持。例如,在一些示例中,下面详述的执行电路不具有FP16和/或BF16执行支持。换言之,执行电路不能原生地以这些格式工作,并且到FP32的转换允许执行电路能够处置先前不支持的数据类型。由此,不需要构建对FP16和/或BF16的支持,该支持占用面积并且可能会消耗更多功率。本文详细说明了将源的奇数BF16或FP16数据元素转换为FP32数据元素并将该FP32数据元素存储到目的地的一个或多个数据元素位置中的指令及其支持的示例。本文详细说明了将源的偶数BF16或FP16数据元素转换为FP32数据元素并将该FP32数据元素存储到目的地的一个或多个数据元素位置中的指令及其支持的示例。
图2(A)图示出用于将来自源的、偶数数据元素位置中存储的BF16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。注意,在一些示例中,第一指令集体系结构的该单个指令被转换为不同的第二指令集体系结构的一个或多个指令,然而,结果将是相同的。
用于将来自源的、偶数数据元素位置中存储的BF16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的指令的格式的示例是VCVTNEEBF162PS目的地,源。在一些示例中,VCVTNEEBF162PS是指令的操作码助记符。目的地是用于指示紧缩(packed)数据目的地寄存器操作对象的一个或多个字段。源是用于指示诸如紧缩数据寄存器和/或存储器位置之类的第一源的一个或多个字段。注意,操作码助记符中的PS表示单精度或FP32。此外,注意,可以使用不同的助记符,但本讨论中使用VCVTNEEBF162PS作为快捷方式。在一些示例中,至少使用R/M字段2546(并且在一些示例中,使用MOD字段2542)来提供源位置,并且使用寄存器字段2544来提供目的地寄存器。
如图所示,经解码的VCVTNEEBF162PS指令的执行使来自源201的、偶数数据元素位置中存储的BF16值被执行电路或存储器访问电路209的转换电路211转换为FP32值,并且使该FP32值被存储到目的地231的数据元素位置中。注意,该图示示出源201中的各个BF16值,并且目的地231记号示出FP32值是由哪个BF16数据元素转换得到的。例如,SRC1[FP32[2]]指示BF16[2]值被转换。在一些示例中,向FP32的转换是将16个尾部零附加到BF16值。
在一些示例中,该指令的执行使用“就近(向偶)舍入”的舍入模式。在一些示例中,非正规输出始终被转储清除为零,并且非正规输入始终被视为零。
图2(B)图示出用于将来自源的、偶数数据元素位置中存储的BF16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。在该示例中,BF16值被存储在32比特数据元素的较低的16比特中,并且源的32比特数据元素位置是经转换的FP32值要针对其而被存储的数据元素位置。注意,在一些示例中,第一指令集体系结构的该单个指令被转换为不同的第二指令集体系结构的一个或多个指令,然而,结果将是相同的。
用于将来自源的、偶数数据元素位置中存储的BF16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的指令的格式的示例是VCVTNEEBF162PS目的地,源。在一些示例中,VCVTNEEBF162PS是指令的操作码助记符。目的地是用于指示紧缩数据目的地寄存器操作对象的一个或多个字段。源是用于指示诸如紧缩数据寄存器和/或存储器位置之类的第一源的一个或多个字段。注意,操作码助记符中的PS表示单精度或FP32。此外,应注意,可以使用不同的助记符,但本讨论中使用VCVTNEEBF162PS作为快捷方式。在一些示例中,至少使用R/M字段2546(并且在一些示例中,使用MOD字段2542)来提供源位置,并且使用寄存器字段2544来提供目的地寄存器。
如图所示,经解码的VCVTNEEBF162PS指令的执行使来自源201的、偶数数据元素位置中存储的BF16值被执行电路或存储器访问电路209的转换电路211转换为FP32值,并且使该FP32值被存储到目的地231的数据元素位置中。注意,该图示示出源201中的各个BF16值,并且目的地231记号示出FP32值是由哪个BF16数据元素转换得到的。在一些示例中,向FP32的转换是将16个尾部零附加到BF16值。
在一些示例中,该指令的执行使用“就近(向偶)舍入”的舍入模式。在一些示例中,非正规输出始终被转储清除为零,并且非正规输入始终被视为零。
图3图示出用于处理VCVTNEEBF162PS指令的方法的示例。在一些示例中,如图21(B)中所示的处理器核心、如下文详述的管线等执行该方法。在一些示例中,处理器核心利用仿真层工作,或包括二进制转译电路,用于执行不同的第二指令集体系结构(instruction set architecture,ISA)的一个或多个指令,以执行VCVTNEEBF162PS指令的(一个或多个)操作。
在301处,单个指令具有用于以下各项的字段:操作码、源操作对象的标识和目的地操作对象的标识,其中操作码用于指示执行电路和/或存储器访问电路要进行:将来自所标识的源操作对象的偶数BF16值转换为FP32值,以及将该FP32值存储在所标识目的地操作对象的数据元素位置中。操作对象的标识可以是到寄存器和/或存储器位置。
在一些示例中,在302处,将第一指令集的所取得的指令转译为第二指令集体系结构的一个或多个指令。
在303处,对第二指令集的这一个或多个经转译的指令进行解码。在一些示例中,转译和解码被合并。
在305处,取回与(一个或多个)经解码的指令的源操作对象相关联的数据值并且调度(一个或多个)经解码的指令。例如,当源操作对象是存储器操作对象时,取回来自所指示的存储器位置的数据。
在307处,由诸如本文中详述的执行电路(硬件)之类的执行电路(硬件)执行经解码的指令或第二指令集的(一个或多个)经解码的指令。对于VCVTNEEBF162PS指令,执行将使执行电路根据VCVTNEEBF162PS指令的操作码将来自所标识的源操作对象的偶数BF16值转换为FP32值并将该FP32值存储在所标识的目的地操作对象的数据元素位置中。
在一些示例中,在309处,指令被提交或引退。
图4图示出用于VCVTNEEBF162PS指令的指令编码的示例。
图5图示出用于VCVTNEEBF162PS指令的指令伪代码的示例。
图6(A)图示出用于将来自源的、奇数数据元素位置中存储的BF16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。注意,在一些示例中,第一指令集体系结构的该单个指令被转换为不同的第二指令集体系结构的一个或多个指令,然而,结果将是相同的。
用于将来自源的、奇数数据元素位置中存储的BF16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的指令的格式的示例是VCVTNEOBF162PS目的地,源。在一些示例中,VCVTNEOBF162PS是指令的操作码助记符。目的地是用于指示紧缩数据目的地寄存器操作对象的一个或多个字段。源是用于指示诸如紧缩数据寄存器和/或存储器位置之类的第一源的一个或多个字段。注意,操作码助记符中的PS表示单精度或FP32。此外,注意,可以使用不同的助记符,但本讨论中使用VCVTNEOBF162PS作为快捷方式。在一些示例中,至少使用R/M字段2546(并且在一些示例中,使用MOD字段2542)来提供源位置,并且使用寄存器字段2544来提供目的地寄存器。
如图所示,经解码的VCVTNEOBF162PS指令的执行使来自源601的、奇数数据元素位置中存储的BF16值被执行电路或存储器访问电路609的转换电路611转换为FP32值,并且使该FP32值被存储到目的地631的数据元素位置中。注意,该图示示出源601中的各个BF16值,并且目的地631记号示出FP32值是由哪个BF16数据元素转换得到的。例如,SRC1[FP32[3]]指示BF16[3]值被转换。在一些示例中,向FP32的转换是将16个尾部零附加到BF16值。
在一些示例中,该指令的执行使用“就近(向奇)舍入”的舍入模式。在一些示例中,非正规输出始终被转储清除为零,并且非正规输入始终被视为零。
图6(B)图示出用于将来自源的、奇数数据元素位置中存储的BF16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。在该示例中,BF16值被存储在32比特数据元素的较高的16比特中,并且源的32比特数据元素位置是经转换的FP32值要针对其而被存储的数据元素位置。注意,在一些示例中,第一指令集体系结构的该单个指令被转换为不同的第二指令集体系结构的一个或多个指令,然而,结果将是相同的。
用于将来自源的、奇数数据元素位置中存储的BF16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的指令的格式的示例是VCVTNEOBF162PS目的地,源。在一些示例中,VCVTNEOBF162PS是指令的操作码助记符。目的地是用于指示紧缩数据目的地寄存器操作对象的一个或多个字段。源是用于指示诸如紧缩数据寄存器和/或存储器位置之类的第一源的一个或多个字段。注意,操作码助记符中的PS表示单精度或FP32。此外,注意,可以使用不同的助记符,但本讨论中使用VCVTNEOBF162PS作为快捷方式。在一些示例中,至少使用R/M字段2546(并且在一些示例中,使用MOD字段2542)来提供源位置,并且使用寄存器字段2544来提供目的地寄存器。
如图所示,经解码的VCVTNEOBF162PS指令的执行使来自源601的、奇数数据元素位置中存储的BF16值被执行电路或存储器访问电路609的转换电路611转换为FP32值,并且使该FP32值被存储到目的地631的数据元素位置中。注意,该图示示出源601中的各个BF16值,并且目的地631记号示出FP32值是由哪个BF16数据元素转换得到的。例如,SRC1[FP32[3]]指示BF16[3]值被转换。在一些示例中,向FP32的转换是将16个尾部零附加到BF16值。
在一些示例中,该指令的执行使用“就近(向奇)舍入”的舍入模式。在一些示例中,非正规输出始终被转储清除为零,并且非正规输入始终被视为零。
图7图示出用于处理VCVTNEOBF162PS指令的方法的示例。在一些示例中,如图21(B)中所示的处理器核心、如下文详述的管线等执行该方法。在一些示例中,处理器核心利用仿真层工作,或包括二进制转译电路,用于执行不同的第二指令集体系结构(ISA)的一个或多个指令,以执行VCVTNEOBF162PS指令的(一个或多个)操作。
在701处,单个指令具有用于以下各项的字段:操作码、源操作对象的标识和目的地操作对象的标识,其中操作码用于指示执行电路和/或存储器访问电路要进行:将来自所标识的源操作对象的奇数BF16值转换为FP32值,以及将该FP32值存储在所标识目的地操作对象的数据元素位置中。操作对象的标识可以是到寄存器和/或存储器位置。
在一些示例中,在702处,将第一指令集的所取得的指令转译为第二指令集体系结构的一个或多个指令。
在703处,对第二指令集的这一个或多个经转译的指令进行解码。在一些示例中,转译和解码被合并。
在705处,取回与(一个或多个)经解码的指令的源操作对象相关联的数据值并且调度(一个或多个)经解码的指令。例如,当源操作对象是存储器操作对象时,取回来自所指示的存储器位置的数据。
在707处,由诸如本文中详述的执行电路(硬件)之类的执行电路(硬件)执行经解码的指令或第二指令集的(一个或多个)经解码的指令。对于VCVTNEOBF162PS指令,执行将使执行电路根据VCVTNEOBF162PS指令的操作码将来自所标识的源操作对象的奇数BF16值转换为FP32值并将该FP32值存储在所标识的目的地操作对象的数据元素位置中。
在一些示例中,在709处,指令被提交或引退。
图8图示出用于VCVTNEOBF162PS指令的指令编码的示例。
图9图示出用于VCVTNEOBF162PS指令的指令伪代码的示例。
图10(A)图示出用于将来自源的、偶数数据元素位置中存储的FP16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。注意,在一些示例中,第一指令集体系结构的该单个指令被转换为不同的第二指令集体系结构的一个或多个指令,然而,结果将是相同的。
用于将来自源的、偶数数据元素位置中存储的FP16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的指令的格式的示例是VCVTNEEPH2PS目的地,源。在一些示例中,VCVTNEEPH2PS是指令的操作码助记符。目的地是用于指示紧缩数据目的地寄存器操作对象的一个或多个字段。源是用于指示诸如紧缩数据寄存器和/或存储器位置之类的第一源的一个或多个字段。注意,操作码助记符中的PS表示单精度或FP32。此外,注意,可以使用不同的助记符,但本讨论中使用VCVTNEEPH2PS作为快捷方式。在一些示例中,至少使用R/M字段2546(并且在一些示例中,使用MOD字段2542)来提供源位置,并且使用寄存器字段2544来提供目的地寄存器。
如图所示,经解码的VCVTNEEPH2PS指令的执行使来自源1001的、偶数数据元素位置中存储的FP16值被执行电路或存储器访问电路1009的转换电路1011转换为FP32值,并且使该FP32值被存储到目的地1031的数据元素位置中。注意,该图示示出源1001中的各个FP16值,并且目的地1031记号示出FP32值是由哪个FP16数据元素转换得到的。例如,SRC1[FP32[2]]指示FP16[2]值被转换。在一些示例中,向FP32的转换是将16个尾部零附加到FP16值。
在一些示例中,该指令的执行使用“就近(向偶)舍入”的舍入模式。在一些示例中,非正规输出始终被转储清除为零,并且非正规输入始终被视为零。
图10(B)图示出用于将来自源的、偶数数据元素位置中存储的FP16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。在该示例中,FP16值被存储在32比特数据元素的较低的16比特中,并且源的32比特数据元素位置是经转换的FP32值要针对其而被存储的数据元素位置。注意,在一些示例中,第一指令集体系结构的该单个指令被转换为不同的第二指令集体系结构的一个或多个指令,然而,结果将是相同的。
用于将来自源的、偶数数据元素位置中存储的FP16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的指令的格式的示例是VCVTNEEPH2PS目的地,源。在一些示例中,VCVTNEEPH2PS是指令的操作码助记符。目的地是用于指示紧缩数据目的地寄存器操作对象的一个或多个字段。源是用于指示诸如紧缩数据寄存器和/或存储器位置之类的第一源的一个或多个字段。注意,操作码助记符中的PS表示单精度或FP32。此外,应注意,可以使用不同的助记符,但本讨论中使用VCVTNEEPH2PS作为快捷方式。在一些示例中,至少使用R/M字段2546(并且在一些示例中,使用MOD字段2542)来提供源位置,并且使用寄存器字段2544来提供目的地寄存器。
如图所示,经解码的VCVTNEEPH2PS指令的执行使来自源1001的、偶数数据元素位置中存储的FP16值被执行电路或存储器访问电路1009的转换电路1011转换为FP32值,并且使该FP32值被存储到目的地1031的数据元素位置中。注意,该图示示出源1001中的各个FP16值,并且目的地1031记号示出FP32值是由哪个FP16数据元素转换得到的。例如,SRC1[FP32[2]]指示FP16[2]值被转换。在一些示例中,向FP32的转换是将16个尾部零附加到FP16值。
在一些示例中,该指令的执行使用“就近(向偶)舍入”的舍入模式。在一些示例中,非正规输出始终被转储清除为零,并且非正规输入始终被视为零。
图11图示出用于处理VCVTNEEPH2PS指令的方法的示例。在一些示例中,如图21(B)中所示的处理器核心、如下文详述的管线等执行该方法。在一些示例中,处理器核心利用仿真层工作,或包括二进制转译电路,以执行不同的第二指令集体系结构(ISA)的一个或多个指令,从而执行VCVTNEEPH2PS指令的(一个或多个)操作。
在1101处,单个指令具有用于以下各项的字段:操作码、源操作对象的标识和目的地操作对象的标识,其中操作码用于指示执行电路和/或存储器访问电路要进行:将来自所标识的源操作对象的偶数FP16值转换为FP32值,以及将该FP32值存储在所标识目的地操作对象的数据元素位置中。操作对象的标识可以是到寄存器和/或存储器位置。
在一些示例中,在1102处,将第一指令集的所取得的指令转译为第二指令集体系结构的一个或多个指令。
在1103处,对第二指令集的这一个或多个经转译的指令进行解码。在一些示例中,转译和解码被合并。
在1105处,取回与(一个或多个)经解码的指令的源操作对象相关联的数据值并且调度(一个或多个)经解码的指令。例如,当源操作对象是存储器操作对象时,取回来自所指示的存储器位置的数据。
在1107处,由诸如本文中详述的执行电路(硬件)之类的执行电路(硬件)执行经解码的指令或第二指令集的(一个或多个)经解码的指令。对于VCVTNEEPH2PS指令,执行将使执行电路根据VCVTNEEPH2PS指令的操作码将来自所标识的源操作对象的偶数FP16值转换为FP32值并将该FP32值存储在所标识的目的地操作对象的数据元素位置中。
在一些示例中,在1109处,指令被提交或引退。
图12图示出用于VCVTNEEPH2PS指令的指令编码的示例。
图13图示出用于VCVTNEEPH2PS指令的指令伪代码的示例。
图14(A)图示出用于将来自源的、奇数数据元素位置中存储的FP16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。注意,在一些示例中,第一指令集体系结构的该单个指令被转换为不同的第二指令集体系结构的一个或多个指令,然而,结果将是相同的。
用于将来自源的、奇数数据元素位置中存储的FP16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的指令的格式的示例是VCVTNEOPH2PS目的地,源。在一些示例中,VCVTNEOPH2PS是指令的操作码助记符。目的地是用于指示紧缩数据目的地寄存器操作对象的一个或多个字段。源是用于指示诸如紧缩数据寄存器和/或存储器位置之类的第一源的一个或多个字段。注意,操作码助记符中的PS表示单精度或FP32。此外,注意,可以使用不同的助记符,但本讨论中使用VCVTNEOPH2PS作为快捷方式。在一些示例中,至少使用R/M字段2546(并且在一些示例中,使用MOD字段2542)来提供源位置,并且使用寄存器字段2544来提供目的地寄存器。
如图所示,经解码的VCVTNEOPH2PS指令的执行使来自源1401的、奇数数据元素位置中存储的FP16值被执行电路或存储器访问电路1409的转换电路1411转换为FP32值,并且使该FP32值被存储到目的地1431的数据元素位置中。注意,该图示示出源1401中的各个FP16值,并且目的地1431记号示出FP32值是由哪个FP16数据元素转换得到的。例如,SRC1[FP32[3]]指示FP16[3]值被转换。
在一些示例中,该指令的执行使用“就近(向奇)舍入”的舍入模式。在一些示例中,非正规输出始终被转储清除为零,并且非正规输入始终被视为零。
图14(B)图示出用于将来自源的、奇数数据元素位置中存储的FP16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。在该示例中,FP16值被存储在32比特数据元素的较高的16比特中,并且源的32比特数据元素位置是经转换的FP32值要针对其而被存储的数据元素位置。注意,在一些示例中,第一指令集体系结构的该单个指令被转换为不同的第二指令集体系结构的一个或多个指令,然而,结果将是相同的。
用于将来自源的、奇数数据元素位置中存储的FP16值转换为FP32值并将该FP32值存储到目的地的数据元素位置中的指令的格式的示例是VCVTNEOPH2PS目的地,源。在一些示例中,VCVTNEOPH2PS是指令的操作码助记符。目的地是用于指示紧缩数据目的地寄存器操作对象的一个或多个字段。源是用于指示诸如紧缩数据寄存器和/或存储器位置之类的第一源的一个或多个字段。注意,操作码助记符中的PS表示单精度或FP32。此外,注意,可以使用不同的助记符,但本讨论中使用VCVTNEOPH2PS作为快捷方式。在一些示例中,至少使用R/M字段2546(并且在一些示例中,使用MOD字段2542)来提供源位置,并且使用寄存器字段2544来提供目的地寄存器。
如图所示,经解码的VCVTNEOPH2PS指令的执行使来自源1401的、奇数数据元素位置中存储的FP16值被执行电路或存储器访问电路1409的转换电路1411转换为FP32值,并且使该FP32值被存储到目的地1431的数据元素位置中。注意,该图示示出源1401中的各个FP16值,并且目的地1431记号示出FP32值是由哪个FP16数据元素转换得到的。
在一些示例中,该指令的执行使用“就近(向奇)舍入”的舍入模式。在一些示例中,非正规输出始终被转储清除为零,并且非正规输入始终被视为零。
图15图示出用于处理VCVTNEOPH2PS指令的方法的示例。在一些示例中,如图21(B)中所示的处理器核心、如下文详述的管线等执行该方法。在一些示例中,处理器核心利用仿真层工作,或包括二进制转译电路,以执行不同的第二指令集体系结构(ISA)的一个或多个指令,从而执行VCVTNEOPH2PS指令的(一个或多个)操作。
在1501处,单个指令具有用于以下各项的字段:操作码、源操作对象的标识和目的地操作对象的标识,其中操作码用于指示执行电路和/或存储器访问电路要进行:将来自所标识的源操作对象的奇数FP16值转换为FP32值,以及将该FP32值存储在所标识目的地操作对象的数据元素位置中。操作对象的标识可以是到寄存器和/或存储器位置。
在一些示例中,在1502处,将第一指令集的所取得的指令转译为第二指令集体系结构的一个或多个指令。
在1503处,对第二指令集的这一个或多个经转译的指令进行解码。在一些示例中,转译和解码被合并。
在1505处,取回与(一个或多个)经解码的指令的源操作对象相关联的数据值并且调度(一个或多个)经解码的指令。例如,当源操作对象是存储器操作对象时,取回来自所指示的存储器位置的数据。
在1507处,由诸如本文中详述的执行电路(硬件)之类的执行电路(硬件)执行经解码的指令或第二指令集的(一个或多个)经解码的指令。对于VCVTNEOPH2PS指令,执行将使执行电路根据VCVTNEOPH2PS指令的操作码将来自所标识的源操作对象的奇数FP16值转换为FP32值并将该FP32值存储在所标识的目的地操作对象的数据元素位置中。
在一些示例中,在1509处,指令被提交或引退。
图16图示出用于VCVTNEOPH2PS指令的指令编码的示例。
图17图示出用于VCVTNEOPH2PS指令的指令伪代码的示例。
图18图示出用于处理诸如上文详述的指令中的任一指令之类的指令的硬件的示例。如图所示,存储装置1803存储要被执行的、上文详述的指令中的一个或多个指令。
指令1801由解码电路1805接收。例如,解码电路1805从取得(fetch)逻辑/电路接收该指令。指令包括用于操作码、(一个或多个)第一源和/或第二源、和目的地的字段。在一些示例中,(一个或多个)源、以及目的地是寄存器,并且在其他示例中,(一个或多个)源、以及目的地中的一个或多个是存储器位置。
稍后将详述至少一个指令格式的更详细的示例。解码电路1805将指令解码成一个或多个操作。在一些示例中,该解码包括生成要被执行电路(诸如,执行电路1809)执行的多个微操作。解码电路1805也对指令前缀进行解码。
在一些示例中,寄存器重命名、寄存器分配和/或调度电路1807提供用于以下中的一项或多项的功能:1)将逻辑操作对象值重命名为物理操作对象值(例如,一些示例中的寄存器别名表);2)将状态比特和标志分配给经解码的指令;以及3)从指令池调度经解码的指令来在执行电路上执行(例如,在一些示例中,使用预留站)。
寄存器(寄存器堆)和/或存储器1808存储数据作为指令的操作对象,执行电路1809将对这些操作对象进行操作。示例性寄存器类型包括紧缩数据寄存器、通用寄存器、以及浮点寄存器。
执行电路1809根据操作码来执行经解码的指令。示例性的详述的执行电路在图2、图18、图21(B)等中示出。
在一些示例中,引退/写回电路1811在体系结构上将目的地寄存器提交到寄存器或存储器1808中,并且引退指令。
下文详述支持上文详述的一个或多个示例的计算机体系结构、系统、核心、指令格式等的示例。
示例性计算机体系结构
下面详细描述示例性计算机体系结构。本领域中已知的用于膝上型电脑、桌面型电脑、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(digital signal processor,DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、以及大量各种其他电子设备的其他系统设计和配置也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的各种系统或电子设备一般都是适当的。
图19图示了示例性系统的示例。多处理器系统1900是一种点对点互连系统,并包括多个处理器,其中包括经由点到点互连1950耦合的第一处理器1970和第二处理器1980。在一些示例中,第一处理器1970和第二处理器1980是同构的。在一些示例中,第一处理器1970和第二处理器1980是异构的。
处理器1970和1980被示为分别包括集成存储器控制器(integrated memorycontroller,IMC)单元电路1972和1982。处理器1970还包括作为其互连控制器单元的部分的点到点(point-to-point,P-P)接口1976和1978;类似地,第二处理器1980包括P-P接口1986和1988。处理器1970、1980可以利用点到点(P-P)接口电路1978、1988经由P-P互连1950交换信息。IMC 1972和1982将处理器1970、1980耦合到各自的存储器,即存储器1932和存储器1934,这些存储器可以是在本地附接到各个处理器的主存储器的一部分。
处理器1970、1980可以各自利用点到点接口电路1976、1994、1986、1998,经由各个P-P互连1952、1954来与芯片组1990交换信息。芯片组1990可以可选地经由高性能接口1992与协处理器1938交换信息。在一些示例中,协处理器1938是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享缓存(未示出)可以被包括在任一处理器1970、1980中,或者在两个处理器之外但经由P-P互连与这些处理器相连接,从而使得:如果一处理器被置于低功率模式,任一个或两个处理器的本地缓存信息也可以被存储在该共享缓存中。
芯片组1990可以经由接口1996耦合到第一互连1916。在一些示例中,第一互连1916可以是外围组件互连(Peripheral Component Interconnect,PCI)互连,或者是诸如PCI快速(PCI Express)互连或者另一I/O互连之类的互连。在一些示例中,这些互连中的一个耦合到功率控制单元(power control unit,PCU)1917,PCU 1917可以包括电路、软件和/或固件来执行关于处理器1970、1980和/或协处理器1938的功率管理操作。PCU 1917向电压调节器提供控制信息,以使得电压调节器生成适当的调节电压。PCU 1917还提供控制信息以控制所生成的操作电压。在各示例中,PCU 1917可以包括各种功率管理逻辑单元(电路)来执行基于硬件的功率管理。这种功率管理可以是完全由处理器控制的(例如,由各种处理器硬件控制,并且可以由工作负载和/或功率约束、热约束或其他处理器约束所触发),和/或功率管理可以响应于外部源而被执行(例如平台或功率管理源或系统软件)。
PCU 1917被图示为作为与处理器1970和/或处理器1980分开的逻辑而存在。在其他情况下,PCU 1917可以在处理器1970或1980的核心(未示出)中给定的一个或多个核心上执行。在一些情况下,PCU 1917可以被实现为微控制器(专用的或通用的)或者其他控制逻辑,其被配置为执行其自己的专用功率管理代码(有时称为P代码)。在另外的其他示例中,PCU 1917要执行的功率管理操作可以被实现在处理器外部,例如借由单独的功率管理集成电路(power management integrated circuit,PMIC)或者在处理器外部的另一组件来实现。在另外的其他示例中,PCU 1917要执行的功率管理操作可被实现在BIOS或其他系统软件内。
各种I/O设备1914以及互连(总线)桥1918可以耦合到第一互连1916,互连(总线)桥1918将第一互连1916耦合到第二互连1920。在一些示例中,一个或多个额外的处理器1915被耦合到第一互连1916,例如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如图形加速器或数字信号处理(digital signal processing,DSP)单元)、现场可编程门阵列(field programmable gate array,FPGA)、或者任何其他处理器。在一些示例中,第二互连1920可以是低引脚数(low pin count,LPC)互连。各种设备可以耦合到第二互连1920,这些设备例如包括键盘和/或鼠标1922、通信设备1927、以及存储单元电路1928。存储单元电路1928可以是盘驱动器或者其他大容量存储设备,其在一些示例中可包括指令/代码和数据1930。另外,音频I/O 1924可以耦合到第二互连1920。注意,除了上述的点到点体系结构以外其他体系结构也是可能的。例如,诸如多处理器系统1900之类的系统可以实现多点分支(multi-drop)互连或者其他这种体系结构,而不是点到点体系结构。
示例性核心体系结构、处理器和计算机体系结构
处理器核心可以按不同的方式、为了不同的目的、在不同的处理器中实现。例如,这些核心的实现方式可以包括:1)通用有序核心,针对通用计算目的;2)高性能通用乱序核心,针对通用计算目的;3)专用核心,主要针对图形和/或科学(吞吐量)计算目的。不同处理器的实现方式可以包括:1)CPU,包括针对通用计算目的的一个或多个通用有序核心和/或针对通用计算目的的一个或多个通用乱序核心;以及2)协处理器,包括主要针对图形和/或科学(吞吐量)目的的一个或多个专用核心。这些不同处理器导致不同的计算机系统体系结构,这些体系结构可以包括:1)协处理器与CPU在分开的芯片上;2)协处理器与CPU在同一封装中分开的管芯上;3)协处理器与CPU在同一管芯上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可以在与所描述的CPU(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)同一管芯上包括上述的协处理器以及另外的功能。接下来描述示例性核心体系结构,然后是对示例性处理器和计算机体系结构的描述。
图20图示了示例处理器2000的示例的框图,该处理器2000可以具有多于一个的核心,可以具有集成存储器控制器,并且可以具有集成图形器件。实线框图示的处理器2000具有单个核心2002(A)、系统代理2010和一组一个或多个互连控制器单元电路2016,而可选地添加的虚线框将替代性处理器2000图示为具有多个核心2002(A)-(N)、系统代理单元电路2010中的一组一个或多个集成存储器控制单元电路2014、专用逻辑2008以及一组一个或多个互连控制器单元电路2016。注意,处理器2000可以是图19的处理器1970或1980或者协处理器1938或1915之一。
从而,处理器2000的不同实现方式可以包括:1)CPU,其中专用逻辑2008是集成图形和/或科学(吞吐量)逻辑(可以包括一个或多个核心,未示出),核心2002(A)-(N)是一个或多个通用核心(例如,通用有序核心、通用乱序核心、或这两者的组合);2)协处理器,其中核心2002(A)-(N)是主要针对图形和/或科学(吞吐量)目的的大量专用核心;以及3)协处理器,其中核心2002(A)-(N)是大量的通用有序核心。从而,处理器2000可以是通用处理器、协处理器或者专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元电路)、高吞吐量集成众核(many integrated core,MIC)协处理器(包括30个或更多个核心)、嵌入式处理器,等等。该处理器可被实现在一个或多个芯片上。处理器2000可以是一个或多个衬底的一部分和/或可以使用多种工艺技术中的任何技术来实现在一个或多个衬底上,这些工艺技术例如BiCMOS、CMOS、或者NMOS。
存储器层次体系包括核心2002(A)-(N)内的一级或多级缓存单元电路2004(A)-(N)、一组一个或多个共享缓存单元电路2006、以及耦合到该组集成存储器控制器单元电路2014的外部存储器(未示出)。该组一个或多个共享缓存单元电路2006可以包括一个或多个中间级别缓存,例如第2级(L2)、第3级(L3)、第4级(4)或者其他级别的缓存,例如最后一级缓存(last level cache,LLC),和/或这些的组合。虽然在一些示例中基于环的互连网络电路2012对专用逻辑2008(例如,集成图形逻辑)、该组共享缓存单元电路2006和系统代理单元电路2010进行互连,但替代性示例使用任何数目的公知技术来对这些单元进行互连。在一些示例中,在共享缓存单元电路2006中的一个或多个电路与核心2002(A)-(N)之间维持一致性。
在一些示例中,核心2002(A)-(N)中的一个或多个具有多线程能力。系统代理单元电路2010包括对核心2002(A)-(N)进行协调和操作的那些组件。系统代理单元电路2010可以包括例如功率控制单元(power control unit,PCU)电路和/或显示单元电路(未示出)。PCU可以是(或者可以包括)对核心2002(A)-(N)和/或专用逻辑2008(例如,集成图形逻辑)的功率状态进行调节所需的逻辑和组件。显示单元电路用于驱动一个或多个在外部连接的显示器。
核心2002(A)-(N)就体系结构指令集而言可以是同构的或者异构的;也就是说,核心2002(A)-(N)中的两个或更多个核心可能能够执行同一指令集,而其他核心可能能够只执行该指令集的子集或者能够执行一不同的ISA。
示例性核心体系结构
有序和乱序核心框图
图21(A)的框图图示了根据示例的示例性有序管线和示例性寄存器重命名、乱序发出/执行管线两者。图21(B)的框图图示了根据示例,要被包括在处理器中的有序体系结构核心的示例性示例和示例性寄存器重命名、乱序发出/执行体系结构核心两者。图21(A)-(B)中的实线框图示了有序管线和有序核心,而可选地添加的虚线框图示了寄存器重命名、乱序发出/执行管线和核心。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图21(A)中,处理器管线2100包括取得阶段2102、可选的长度解码阶段2104、解码阶段2106、可选的分配阶段2108、可选的重命名阶段2110、调度(也称为调遣或发出)阶段2112、可选的寄存器读取/存储器读取阶段2114、执行阶段2116、写回/存储器写入阶段2118、可选的异常处置阶段2122、以及可选的提交阶段2124。在这些处理器管线阶段的每一者中可以执行一个或多个操作。例如,在取得阶段2102期间,从指令存储器取得一个或多个指令,在解码阶段2106期间,可以对取得的一个或多个指令进行解码,可以生成使用转发寄存器端口的地址(例如,加载存储单元(load store unit,LSU)地址),并且可以执行分支转发(例如,立即数偏移或者链接寄存器(link register,LR))。在一个示例中,解码阶段2106和寄存器读取/存储器读取阶段2114可以被组合到一个管线阶段中。在一个示例中,在执行阶段2116期间,可以执行经解码的指令,可以执行到高级微控制器总线(AdvancedMicrocontroller Bus,AMB)接口的LSU地址/数据管线化,可以执行乘法和加法操作,可以执行具有分支结果的算术操作,等等。
作为示例,示例性寄存器重命名、乱序发出/执行核心体系结构可以通过以下方式实现管线2100:1)指令取得2138执行取得和长度解码阶段2102和2104;2)解码单元电路2140执行解码阶段2106;3)重命名/分配器单元电路2152执行分配阶段2108和重命名阶段2110;4)(一个或多个)调度器单元电路2156执行调度阶段2112;5)(一个或多个)物理寄存器堆单元电路2158和存储器单元电路2170执行寄存器读取/存储器读取阶段2114;执行集群2160执行执行阶段2116;6)存储器单元电路2170和(一个或多个)物理寄存器堆单元电路2158执行写回/存储器写入阶段2118;7)在异常处置阶段2122中可能涉及各种单元(单元电路);并且8)引退单元电路2154和(一个或多个)物理寄存器堆单元电路2158执行提交阶段2124。
图21(B)示出了处理器核心2190包括耦合到执行引擎单元电路2150的前端单元电路2130,并且两者都耦合到存储器单元电路2170。核心2190可以是精简指令集计算(reduced instruction set computing,RISC)核心、复杂指令集计算(complexinstruction set computing,CISC)核心、超长指令字(very long instruction word,VLIW)核心、或者混合或替代性核心类型。作为另外一个选项,核心2190可以是专用核心,例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purposecomputing graphics processing unit,GPGPU)核心、图形核心,等等。
前端单元电路2130可以包括分支预测单元电路2132,该分支预测单元电路耦合到指令缓存单元电路2134,该指令缓存单元电路耦合到指令转译后备缓冲器(translationlookaside buffer,TLB)2136,该指令TLB耦合到指令取得单元电路2138,该指令取得单元电路耦合到解码单元电路2140。在一个示例中,指令缓存单元电路2134被包括在存储器单元电路2170中,而不是前端单元电路2130中。解码单元电路2140(或解码器)可以对指令解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。解码单元电路2140还可以包括地址生成单元电路(address generation unit,AGU,未示出)。在一个示例中,AGU使用经转发的寄存器端口来生成LSU地址,并且可以进一步执行分支转发(例如,立即数偏移分支转发,LR寄存器分支转发,等等)。可以利用各种不同的机制来实现解码单元电路2140。适当机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(programmable logicarray,PLA)、微代码只读存储器(read only memory,ROM),等等。在一个示例中,核心2190包括微代码ROM(未示出)或其他介质,其存储用于某些宏指令的微代码(例如,在解码单元电路2140中或者以其他方式在前端单元电路2130内)。在一个示例中,解码单元电路2140包括微操作(micro-op)或操作缓存(未示出),以保存/缓存在处理器管线2100的解码或其他阶段期间生成的经解码的操作、微标记或微操作。解码单元电路2140可以耦合到执行引擎单元电路2150中的重命名/分配器单元电路2152。
执行引擎电路2150包括重命名/分配器单元电路2152,其耦合到引退单元电路2154和一组一个或多个调度器电路2156。调度器电路2156代表任意数目个不同调度器,包括预留站、中央指令窗口,等等。在一些示例中,(一个或多个)调度器电路2156可以包括算术逻辑单元(arithmetic logic unit,ALU)调度器/调度电路、ALU队列、地址生成单元(address generation unit,AGU)调度器/调度电路、AGU队列,等等。(一个或多个)调度器电路2156耦合到(一个或多个)物理寄存器堆电路2158。(一个或多个)物理寄存器堆电路2158的每一者代表一个或多个物理寄存器堆,这些物理寄存器堆中的不同物理寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,指令指针,即要执行的下一指令的地址),等等。在一个示例中,(一个或多个)物理寄存器堆单元电路2158包括向量寄存器单元电路、写入掩码寄存器单元电路、以及标量寄存器单元电路。这些寄存器单元可以提供体系结构式向量寄存器、向量掩码寄存器、通用寄存器,等等。(一个或多个)物理寄存器单元堆电路2158被引退单元电路2154(也称为引退队列)重叠,以展示可以用来实现寄存器重命名和乱序执行的各种方式(例如,利用(一个或多个)重排序缓冲器(reorder buffer,ROB)和(一个或多个)引退寄存器堆;利用(一个或多个)未来的堆、(一个或多个)历史缓冲器、以及(一个或多个)引退寄存器堆;利用寄存器图谱和寄存器的池;等等)。引退单元电路2154和(一个或多个)物理寄存器堆电路2158耦合到(一个或多个)执行集群2160。(一个或多个)执行集群2160包括一组一个或多个执行单元电路2162和一组一个或多个存储器访问电路2164。执行单元电路2162可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种算术、逻辑、浮点或其他类型的操作(例如,移位、加法、减法、乘法)。虽然一些示例可以包括专用于特定功能或功能集合的若干个执行单元或执行单元电路,但其他示例可以只包括一个执行单元电路或者全部执行所有功能的多个执行单元/执行单元电路。(一个或多个)调度器电路2156、(一个或多个)物理寄存器堆单元电路2158以及(一个或多个)执行集群2160被示为可能是多个,因为某些示例为某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管线和/或存储器访问管线,它们各自具有其自己的调度器电路、(一个或多个)物理寄存器堆单元电路和/或执行集群——并且在单独的存储器访问管线的情况下,所实现的某些示例中只有该管线的执行集群具有(一个或多个)存储器访问单元电路2164)。还应当理解,在使用分开的管线的情况下,这些管线中的一个或多个可以是乱序发出/执行,而其余是有序的。
在一些示例中,执行引擎单元电路2150可以执行到高级微控制器总线(AMB)接口(未示出)的加载存储单元(LSU)地址/数据管线化,以及地址阶段和写回、数据阶段加载、存储、以及分支。
一组存储器访问电路2164耦合到存储器单元电路2170,该存储器单元电路包括数据TLB单元电路2172,该数据TLB电路耦合到数据缓存电路2174,该数据缓存电路耦合到第2级(L2)缓存电路2176。在一个示例性示例中,存储器访问单元电路2164可以包括加载单元电路、存储地址单元电路、以及存储数据单元电路,它们中的每一者耦合到存储器单元电路2170中的数据TLB电路2172。指令缓存电路2134进一步耦合到存储器单元电路2170中的第2级(L2)缓存单元电路2176。在一个示例中,指令缓存2134和数据缓存2174被组合成L2缓存单元电路2176、第3级(L3)缓存单元电路(未示出)和/或主存储器中的单个指令和数据缓存(未示出)。L2缓存单元电路2176耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。
核心2190可以支持一个或多个指令集(例如,x86指令集(带有已随着更新版本添加的一些扩展);MIPS指令集;ARM指令集(带有可选的额外扩展,例如NEON)),该指令集包括本文描述的(一个或多个)指令。在一个示例中,核心2190包括支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许利用紧缩数据来执行被许多多媒体应用使用的操作。
(一个或多个)示例性执行单元电路
图22图示了(一个或多个)执行单元电路的示例,例如图21(B)的(一个或多个)执行单元电路2162。如图所示,(一个或多个)执行单元电路2162可以包括一个或多个ALU电路2201、向量/SIMD单元电路2203、加载/存储单元电路2205、和/或分支/跳转单元电路2207。ALU电路2201执行整数算术和/或布尔操作。向量/SIMD单元电路2203对紧缩数据(例如SIMD/向量寄存器)执行向量/SIMD操作。加载/存储单元电路2205执行加载和存储指令,以将数据从存储器加载到寄存器中,或者从寄存器存储到存储器。加载/存储单元电路2205也可以生成地址。分支/跳转单元电路2207取决于指令而引起到某个存储器地址的分支或跳转。浮点单元(floating-point unit,FPU)电路2209执行浮点算术。(一个或多个)执行单元电路2162的宽度取决于示例而有所不同,并且可以在从16比特到1024比特的范围中。在一些示例中,两个或更多个更小的执行单元被逻辑地组合以形成更大的执行单元(例如,两个128比特执行单元被逻辑组合以形成256比特执行单元)。
示例性寄存器体系结构
图23是根据一些示例的寄存器体系结构2300的框图。如图所示,存在向量/SIMD寄存器2310,其宽度从128比特到1024比特不等。在一些示例中,向量/SIMD寄存器2310在物理上是512比特的,并且取决于映射,只有一些低位比特被使用。例如,在一些示例中,向量/SIMD寄存器2310是512比特的ZMM寄存器:低位256比特被用于YMM寄存器,并且低位128比特被用于XMM寄存器。因此,存在寄存器的覆盖。在一些示例中,向量长度字段在最大长度和一个或多个其他更短的长度之间作出选择,其中每个这种更短长度是前一长度的一半长度。标量操作是对ZMM/YMM/XMM寄存器中的最低阶数据元素位置执行的操作;更高阶数据元素位置或者被保持为与其在该指令之前相同,或者被归零,这取决于示例。
在一些示例中,寄存器体系结构2300包括写入掩码/谓词(predicate)寄存器2315。例如,在一些示例中,有8个写入掩码/谓词寄存器(有时称为k0至k7),它们各自的大小是16比特、32比特、64比特或128比特。写入掩码/谓词寄存器2315可以允许合并(例如,允许目的地中的任何元素集合在任何操作的执行期间被保护免于更新)和/或归零(例如,归零向量掩码允许目的地中的任何元素集合在任何操作的执行期间被归零)。在一些示例中,给定的写入掩码/谓词寄存器2315中的每个数据元素位置对应于目的地的数据元素位置。在其他示例中,写入掩码/谓词寄存器2315是可缩放的,并且由针对给定向量元素的设定数目个使能比特组成(例如,给每个64比特向量元素8个使能比特)。
寄存器体系结构2300包括多个通用寄存器2325。这些寄存器可以是16比特、32比特、64比特等等,并能够被用于标量操作。在一些示例中,这些寄存器用名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8至R15来称呼。
在一些示例中,寄存器体系结构2300包括标量浮点寄存器2345,它被用于使用x87指令集扩展对32/64/80比特浮点数据进行标量浮点操作,或者作为MMX寄存器,来对64比特紧缩整数数据执行操作,以及针对在MMX和XMM寄存器之间执行的一些操作保存操作对象。
一个或多个标志寄存器2340(例如,EFLAGS,RFLAGS,等等)存储状态和控制信息,用于算术、比较和系统操作。例如,一个或多个标志寄存器2340可以存储条件代码信息,例如进位、奇偶性、辅助进位、零、符号、以及溢出。在一些示例中,一个或多个标志寄存器2340被称为程序状态和控制寄存器。
段寄存器2320包含用于访问存储器的段点。在一些示例中,这些寄存器由名称CS、DS、SS、ES、FS和GS来称呼。
机器特定寄存器(machine-specific register,MSR)2335对处理器性能进行控制和报告。大多数MSR 2335处置与系统有关的功能,并且是应用程序不可访问的。机器检查寄存器2360由用于对硬件错误进行检测和报告的控制、状态和错误报告MSR组成。
一个或多个指令指针寄存器2330存储指令指针值。(一个或多个)控制寄存器2355(例如,CR0-CR4)确定处理器(例如,处理器1970、1980、1938、1915和/或2000)的操作模式和当前在执行的任务的特性。调试寄存器2350控制并允许监视处理器或核心的调试操作。
存储器管理寄存器2365指定用于保护模式存储器管理中的数据结构的位置。这些寄存器可以包括GDTR、IDTR、任务寄存器、以及LDTR寄存器。
本发明的替代性示例可以使用更宽或更窄的寄存器。此外,本发明的替代性示例可以使用更多、更少或不同的寄存器堆和寄存器。
指令集
指令集体系结构(instruction set architecture,ISA)可以包括一个或多个指令格式。给定的指令格式可以定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要被执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可以被定义为具有该指令格式的字段的不同子集(所包括的字段通常是按相同顺序的,但至少一些具有不同的比特位置,因为所包括的字段更少)和/或被定义为具有以不同方式解读的给定字段。从而,ISA的每个指令是利用给定的指令格式来表达的(并且如果定义了的话,则以该指令格式的指令模板中的一个给定指令模板来表达),并且包括用于指定操作和操作对象的字段。例如,示例性ADD指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码,并且包括操作对象字段来选择操作对象(源1/目的地和源2);并且这个ADD指令在指令流中的出现将在选择特定操作对象的操作对象字段中具有特定内容。
示例性指令格式
可以按不同的格式来实现本文描述的(一个或多个)指令的示例。此外,下文详述了示例性系统、体系结构和管线。(一个或多个)指令的示例可以在这些系统、体系结构和管线上被执行,但不限于详述的那些。
图24图示了指令格式的示例。如图所示,指令可以包括多个成分,这些成分包括但不限于用于以下项的一个或多个字段:一个或多个前缀2401、操作码2403、寻址信息2405(例如,寄存器标识符、存储器寻址信息,等等)、位移值2407、和/或立即数2409。注意,一些指令利用了该格式的一些或所有字段,而其他指令可能只使用操作码2403的字段。在一些示例中,图示的顺序是这些字段要被编码的顺序,然而应当明白,在其他示例中,这些字段可以被按另外的顺序来编码、被组合,等等。
(一个或多个)前缀字段2401在被使用时对指令进行修改。在一些示例中,一个或多个前缀被用于重复字符串指令(例如,0xF0、0xF2、0xF3,等等)、提供节超控(sectionoverride)(例如,0x2E、0x36、0x3E、0x26、0x64、0x65、0x2E、0x3E,等等)、执行总线锁定操作、和/或改变操作对象(例如,0x66)和地址大小(例如,0x67)。某些指令要求强制性的前缀(例如,0x66、0xF2、0xF3,等等)。这些前缀中的某些可以被认为是“传统”前缀。其他前缀(本文详述了其一个或多个示例)指示出和/或提供了进一步的能力,例如指定特定的寄存器等等。这些其他前缀通常跟随在“传统”前缀之后。
操作码字段2403被用于至少部分地定义在指令的解码时要执行的操作。在一些示例中,在操作码字段2403中编码的主操作码的长度为1个、2个或3个字节。在其他示例中,主操作码可以是其他的长度。额外的3比特操作码字段有时被编码在另一个字段中。
寻址字段2405被用于对指令的一个或多个操作对象进行寻址,例如存储器中的位置或者一个或多个寄存器。图25图示了寻址字段2405的示例。在这个图示中,示出了可选的MOD R/M字节2502和可选的缩放、索引、基址(Scale,Index,Base,SIB)字节2504。MOD R/M字节2502和SIB字节2504被用来编码指令的最多两个操作对象,每个操作对象是直接寄存器或有效存储器地址。注意,这些字段中的每一者是可选的,即,不是所有的指令都包括这些字段中的一个或多个。MOD R/M字节2502包括MOD字段2542、寄存器字段2544、以及R/M字段2546。
MOD字段2542的内容区分存储器访问和非存储器访问模式。在一些示例中,当MOD字段2542具有值b11时,利用寄存器直接寻址模式,否则使用寄存器间接寻址。
寄存器字段2544可以编码目的地寄存器操作对象或者源寄存器操作对象,或者也可以编码操作码扩展而不被用于编码任何指令操作对象。寄存器索引字段2544的内容直接指定或者通过地址生成来指定源或目的地操作对象的位置(在寄存器中或者在存储器中)。在一些示例中,寄存器字段2544得到来自前缀(例如,前缀2401)的额外比特的补充,以允许更大的寻址。
R/M字段2546可以用来编码引用了存储器地址的指令操作对象,或者可以用来编码目的地寄存器操作对象或源寄存器操作对象。注意,在一些示例中,R/M字段2546可以被与MOD字段2542相组合以规定寻址模式。
SIB字节2504包括缩放字段2552、索引字段2554、以及基址字段2556,以用于地址的生成。缩放字段2552指示缩放因子。索引字段2554指定要使用的索引寄存器。在一些示例中,索引字段2554得到来自前缀(例如,前缀2401)的额外比特的补充,以允许更大的寻址。基址字段2556指定了要使用的基址寄存器。在一些示例中,基址字段2556得到来自前缀(例如,前缀2401)的额外比特的补充,以允许更大的寻址。在实践中,缩放字段2552的内容允许缩放索引字段2554的内容以进行存储器地址生成(例如,对于使用2缩放*索引+基址的地址生成)。
一些寻址形式利用位移值来生成存储器地址。例如,可以根据2缩放*索引+基址+位移、索引*缩放+位移、r/m+位移、指令指针(RIP/EIP)+位移、寄存器+位移等等来生成存储器地址。该位移可以是1字节、2字节、4字节等等的值。在一些示例中,位移字段2407提供这个值。此外,在一些示例中,位移因子的使用被编码在寻址字段2405的MOD字段中,它指示出压缩位移方案,对于该方案,位移值通过disp8与基于向量长度确定的缩放因子N、b比特的值、以及指令的输入元素大小相结合地相乘来计算。位移值被存储在位移字段2407中。
在一些示例中,立即数字段2409为指令指定立即数。立即数可以被编码为1字节值、2字节值、4字节值等等。
图26图示了第一前缀2401(A)的示例。在一些示例中,第一前缀2401(A)是REX前缀的示例。使用这个前缀的指令可以指定通用寄存器、64比特紧缩数据寄存器(例如,单指令多数据(SIMD)寄存器或向量寄存器)、和/或控制寄存器和调试寄存器(例如,CR8-CR15和DR8-DR15)。
使用第一前缀2401(A)的指令可以使用3比特字段指定最多三个寄存器,这取决于格式:1)使用MOD R/M字节2502的reg字段2544和R/M字段2546;2)使用MOD R/M字节2502与SIB字节2504,包括使用reg字段2544以及基址字段2556和索引字段2554;或者3)使用操作码的寄存器字段。
在第一前缀2401(A)中,比特位置7:4被设置为0100。比特位置3(W)可以被用于确定操作对象大小,但不能单独确定操作对象宽度。因此,当W=0时,操作对象大小由代码段描述符(code segment descriptor,CS.D)决定,而当W=1时,操作对象大小为64比特。
注意,添加另一个比特允许对16(24)个寄存器进行寻址,而单独的MOD R/M reg字段2544和MOD R/M的R/M字段2546各自只能寻址8个寄存器。
在第一前缀2401(A)中,比特位置2(R)可以是MOD R/M的reg字段2544的扩展,并且当该字段编码了通用寄存器、64比特紧缩数据寄存器(例如,SSE寄存器)或者控制或调试寄存器时,可被用来修改MOD R/M的reg字段2544。当MOD R/M字节2502指定其他寄存器或定义扩展操作码时,R被忽略。
比特位置1(X)X比特可以修改SIB字节索引字段2554。
比特位置B(B)B可以修改MOD R/M的R/M字段2546或SIB字节基址字段2556中的基址;或者它可以修改用于访问通用寄存器(例如,通用寄存器2325)的操作码寄存器字段。
图27(A)-(D)图示了如何使用第一前缀2401(A)的R、X和B字段的示例。图27(A)图示了当SIB字节2504不被用于存储器寻址时,来自第一前缀2401(A)的R和B被用来扩展MODR/M字节2502的reg字段2544和R/M字段2546。图27(B)图示了当不使用SIB字节2504时,来自第一前缀2401(A)的R和B被用来扩展MOD R/M字节2502的reg字段2544和R/M字段2546(寄存器-寄存器寻址)。图27(C)图示了当SIB字节2504被用于存储器寻址时,来自第一前缀2401(A)的R、X和B被用于扩展MOD R/M字节2502的reg字段2544以及索引字段2554和基址字段2556。图27(D)图示了当寄存器被编码在操作码2403中时,来自第一前缀2401(A)的B被用来扩展MOD R/M字节2502的reg字段2544。
图28(A)-(B)图示了第二前缀2401(B)的示例。在一些示例中,第二前缀2401(B)是VEX前缀的示例。第二前缀2401(B)编码允许指令具有多于两个操作对象,并且允许SIMD向量寄存器(例如,向量/SIMD寄存器2310)长于64比特(例如,128比特和256比特)。第二前缀2401(B)的使用提供了三操作对象(或更多)的语法。例如,先前的两操作对象指令执行诸如A=A+B之类的操作,这覆写了源操作对象。对第二前缀2401(B)的使用使得操作对象能够执行非破坏性操作,比如A=B+C。
在一些示例中,第二前缀2401(B)有两种形式——两字节形式和三字节形式。两字节的第二前缀2401(B)主要被用于128比特、标量和一些256比特指令;而三字节的第二前缀2401(B)提供了3字节操作码指令和第一前缀2401(A)的紧凑替换。
图28(A)图示了第二前缀2401(B)的两字节形式的示例。在一个示例中,格式字段2801(字节0 2803)包含值C5H。在一个示例中,字节1 2805在比特[7]中包括“R”值。这个值是第一前缀2401(A)的同一值的补码。比特[2]被用来规定向量的长度(L)(其中0的值是标量或者128比特向量,而1的值是256比特向量)。比特[1:0]提供等同于一些传统前缀的操作码扩展性(例如,00=无前缀,01=66H,10=F3H,并且11=F2H)。被示为vvvv的比特[6:3]可以被用于:1)编码第一源寄存器操作对象,该操作对象以反转(反码)形式指定,并且对于具有2个或更多个源操作对象的指令有效;2)编码目的地寄存器操作对象,该操作对象以反码形式指定,用于某些向量移位;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。
使用这个前缀的指令可以使用MOD R/M的R/M字段2546,以编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。
使用这个前缀的指令可以使用MOD R/M的reg字段2544,以编码目的地寄存器操作对象或者源寄存器操作对象,被作为操作码扩展来对待而不被用于编码任何指令操作对象。
对于支持四个操作对象的指令语法,vvvv、MOD R/M的R/M字段2546和MOD R/M的reg字段2544编码了四个操作对象中的三个。然后立即数2409的比特[7:4]被用来编码第三源寄存器操作对象。
图28(B)图示了第二前缀2401(B)的三字节形式的示例。在一种示例中,格式字段2811(字节0 2813)包含值C4H。字节1 2815在比特[7:5]中包括“R”、“X”和“B”,它们是第一前缀2401(A)的这些值的补码。字节1 2815的比特[4:0](示为mmmmm)包括根据需要来对一个或多个隐含的前导操作码字节进行编码的内容。例如,00001意味着0FH前导操作码,00010意味着0F38H前导操作码,00011意味着0F3AH前导操作码,等等。
字节2 2817的比特[7]的使用与第一前缀2401(A)的W类似,包括帮助确定可提升的操作对象大小。比特[2]被用来规定向量的长度(L)(其中0的值是标量或者128比特向量,而1的值是256比特向量)。比特[1:0]提供等同于一些传统前缀的操作码扩展性(例如,00=无前缀,01=66H,10=F3H,并且11=F2H)。被示为vvvv的比特[6:3]可以被用于:1)编码第一源寄存器操作对象,该操作对象以反转(反码)形式指定,对于具有2个或更多个源操作对象的指令有效;2)编码目的地寄存器操作对象,该操作对象以反码形式指定,用于某些向量移位;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。
使用这个前缀的指令可以使用MOD R/M的R/M字段2546,以编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。
使用这个前缀的指令可以使用MOD R/M的reg字段2544,以编码目的地寄存器操作对象或者源寄存器操作对象,或者被作为操作码扩展来对待而不被用于编码任何指令操作对象。
对于支持四个操作对象的指令语法,vvvv、MOD R/M的R/M字段2546和MOD R/M的reg字段2544编码了四个操作对象中的三个。然后立即数2409的比特[7:4]被用来编码第三源寄存器操作对象。
图29图示了第三前缀2401(C)的示例。在一些示例中,第三前缀2401(C)是EVEX前缀的示例。第三前缀2401(C)是四字节前缀。
第三前缀2401(C)能够在64比特模式中编码32个向量寄存器(例如,128比特、256比特和512比特寄存器)。在一些示例中,利用写入掩码/操作掩码(参见对于先前图中的寄存器的论述,例如图23)或谓词的指令利用这个前缀。操作掩码寄存器允许条件处理或选择控制。操作掩码指令——其源/目的地操作对象是操作掩码寄存器并且将操作掩码寄存器的内容视为单个值——是使用第二前缀2401(B)而被编码的。
第三前缀2401(C)可以编码特定于指令类别的功能(例如,具有“加载+操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能,等等)。
第三前缀2401(C)的第一字节是格式字段2911,它在一种示例中具有62H的值。随后的字节被称为有效载荷字节2915-2919,并且共同形成P[23:0]的24比特值,以(本文中详述的)一个或多个字段的形式提供特定的能力。
在一些示例中,有效载荷字节2919的P[1:0]与低位的两个mm比特相同。在一些示例中,P[3:2]被保留。比特P[4](R')在与P[7]和MOD R/M的reg字段2544相组合时允许访问高16向量寄存器集合。当不需要SIB类型寻址时,P[6]也可以提供对高16向量寄存器的访问。P[7:5]由R、X和B构成,它们是针对向量寄存器、通用寄存器、存储器寻址的操作对象指定符修饰符比特,并且当与MOD R/M寄存器字段2544和MOD R/M的R/M字段2546相组合时,允许访问超出低8个寄存器的下一组8个寄存器。P[9:8]提供等同于一些传统前缀的操作码扩展性(例如,00=无前缀,01=66H,10=F3H,并且11=F2H)。P[10]在一些示例中是固定值1。被示为vvvv的P[14:11]可以被用于:1)编码第一源寄存器操作对象,该操作对象以反转(反码)形式指定,对于具有2个或更多个源操作对象的指令有效;2)编码目的地寄存器操作对象,该操作对象以反码形式指定,用于某些向量移位;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。
P[15]类似于第一前缀2401(A)和第二前缀2401(B)的W,并且可以作为操作码扩展比特或操作对象大小提升。
P[18:16]指定操作掩码(写入掩码)寄存器(例如,写入掩码/谓词寄存器2315)中的寄存器的索引。在一个示例中,特定值aaa=000具有特殊行为,暗示着没有操作掩码被用于这个特定的指令(这可以通过多种方式实现,包括使用硬连线到全一的操作掩码或者绕过掩蔽硬件的硬件)。当合并时,向量掩码允许目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被保护免于更新;在另一示例中,保留目的地的每个元素的旧值(如果相应的掩码比特具有0值)。与之不同,当归零时,向量掩码允许目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被归零;在一个示例中,目的地的元素在相应掩码比特具有0值时被设置到0。这个功能的子集是对于正被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)进行控制的能力;然而,被修改的元素不一定要连续。从而,操作掩码字段允许了部分向量操作,包括加载、存储、算术、逻辑,等等。虽然在描述的示例中,操作掩码字段的内容选择若干个操作掩码寄存器中包含要使用的操作掩码的那一个(从而操作掩码字段的内容间接标识了要执行的掩蔽),但替代地或附加地,替代性示例允许掩码写入字段的内容直接指定要执行的掩蔽。
P[19]可以与P[14:11]相组合,来以非破坏性源语法编码第二源向量寄存器,该语法可以利用P[19]来访问高16个向量寄存器。P[20]编码多种功能,这些功能在不同类别的指令中有所不同,并且可以影响向量长度/舍入控制指定符字段(P[22:21])的含义。P[23]指示出对合并-写入掩蔽的支持(例如,当被设置为0时)或者对归零和合并-写入掩蔽的支持(例如,当被设置为1时)。
下面的表格详述了在使用第三前缀2401(C)的指令中对寄存器的编码的示例性示例。
Figure BDA0004010601770000341
表格1:64比特模式中的32寄存器支持
Figure BDA0004010601770000342
表格2:在32比特模式中编码寄存器指定符
Figure BDA0004010601770000351
表格3:操作掩码寄存器指定符编码
程序代码可被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可以按已知的方式被应用到一个或多个输出设备。对于本申请而言,处理系统包括任何具有处理器的系统,处理器例如是数字信号处理器(digital signal processor,DSP)、微控制器、专用集成电路(application specific integrated circuit,ASIC)、或者微处理器。
可以用面向过程或面向对象的高级编程语言来实现程序代码以与处理系统进行通信。如果希望,也可以用汇编或机器语言来实现程序代码。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是编译语言或者解释语言。
本文公开的机制的示例可以用硬件、软件、固件或者这些实现途径的组合来实现。示例可以被实现为计算机程序或程序代码,在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行。
至少一个示例的一个或多个方面可以由被存储在机器可读介质上的代表性指令来实现,这些指令代表处理器内的各种逻辑,这些指令当被机器读取时,使得该机器制作用于执行本文所述技术的逻辑。这些表现形式被称为“IP核”,可以被存储在有形机器可读介质上并被提供给各种客户或制造设施,以加载到实际上制作该逻辑或处理器的制作机器中。
这些机器可读存储介质可包括——但不限于——由机器或设备制造或形成的物品的非暂态有形布置形式,包括存储介质,例如:硬盘,任何其他类型的盘(包括软盘、光盘、致密盘只读存储器(compact disk read-only memory,CD-ROM)、可重写致密盘(compactdisk rewritable,CD-RW)、以及磁光盘),半导体器件(例如,只读存储器(read-onlymemory,ROM),诸如动态随机访问存储器(dynamic random access memory,DRAM)、静态随机访问存储器(static random access memory,SRAM)之类的随机访问存储器(randomaccess memory,RAM),可擦除可编程只读存储器(erasable programmable read-onlymemory,EPROM),闪速存储器,电可擦除可编程只读存储器(electrically erasableprogrammable read-only memory,EEPROM),相变存储器(phase change memory,PCM)),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。
因此,示例还包括非暂态有形机器可读介质,这些介质包含指令或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计数据,例如硬件描述语言(Hardware Description Language,HDL)。这种示例也可以被称为程序产品。
仿真(包括二进制转译、代码变形,等等)
在一些情况下,指令转换器可以被用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令转译(例如,利用静态二进制转译、包括动态编译的动态二进制转译)、变形、仿真或者以其他方式转换到要被核心处理的一个或多个其他指令。可以用软件、硬件、固件或者其组合来实现指令转换器。指令转换器可以在处理器上、在处理器外、或者一部分在处理器上而一部分在处理器外。
图30图示根据示例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在图示的示例中,指令转换器是软件指令转换器,但可替代地,可以用软件、固件、硬件或者其各种组合来实现指令转换器。图30示出了高级语言3002的程序可以被利用第一ISA编译器3004编译以生成第一ISA二进制代码3006,该代码可以由具有至少一个第一ISA指令集核心的处理器3016原生执行。具有至少一个第一ISA指令集核心的处理器3016代表任何这样的处理器:这种处理器能够通过兼容地执行或以其他方式处理(1)第一ISA指令集核心的指令集的实质部分或者(2)以在具有至少一个第一ISA指令集核心的
Figure BDA0004010601770000371
处理器上运行为目标的应用或其他软件的目标代码版本,来执行与具有至少一个第一ISA指令集核心的Intel处理器基本上相同的功能,以便实现与具有至少一个第一ISA指令集核心的处理器基本上相同的结果。第一ISA编译器3004代表可操作来生成第一ISA二进制代码3006(例如,目标代码)的编译器,该第一ISA二进制代码在进行或不进行额外的链接处理的情况下能够在具有至少一个第一ISA指令集核心的处理器3016上被执行。类似地,图30示出了高级语言3002的程序可以被利用替代性指令集编译器3008来编译以生成替代性指令集二进制代码3010,该代码可以由没有第一ISA核心的处理器3014原生执行。指令转换器3012被用来将第一ISA二进制代码3006转换成可以由没有第一ISA指令集核心的处理器3014原生执行的代码。这种转换后的代码可能不会与替代性指令集二进制代码3010相同,这是因为能够进行这一点的指令转换器难以制作;然而,转换后的代码将实现总的操作,并由来自该替代性指令集的指令构成。从而,指令转换器3012代表软件、固件、硬件或它们的组合,其通过仿真、模拟或任何其他过程,允许不具有第一ISA指令集处理器或核心的处理器或其他电子设备执行第一ISA二进制代码3006。
对“一个示例”、“示例”等的引用指示所描述的示例可包括特定的特征、结构或特性,但是可能并非每个示例都一定包括该特定的特征、结构或特性。而且,此类短语不一定是指同一示例。此外,当结合示例描述特定的特征、结构或特性时,认为结合无论是否被明确描述的其他示例而影响此类特征、结构或特性在本领域技术人员的知识范围内。
示例包括但不限于:
1.一种装置,包括:
解码器电路,该解码器电路用于对单个指令进行解码,该单个指令包括用于以下各项的字段:操作码、源操作对象的标识和目的地操作对象的标识,其中操作码用于指示指令处理电路要进行:将来自所标识的源操作对象的奇数16比特浮点值转换为32比特浮点值,以及将该32比特浮点值存储在所标识的目的地操作对象的数据元素位置中;以及
指令处理电路,该指令处理电路用于根据操作码来执行经解码的指令。
2.如示例1所述的装置,其中,用于第一源操作对象的标识符的字段用于标识向量寄存器。
3.如示例1所述的装置,其中,用于第一源操作对象的标识符的字段用于标识存储器位置。
4.如示例1-3中的任一项所述的装置,其中,16比特浮点值是BF16值。
5.如示例4所述的装置,其中,指令处理电路用于通过将16个零附加到BF16值中的每个BF16值来将BF16值转换为32比特浮点值。
6.如示例1-3中的任一项所述的装置,其中,16比特浮点值是FP16值。
7.一种方法,包括:
将第一指令集的单个指令转译为第二指令集的一个或多个指令,该单个指令包括用于以下各项的字段:操作码、源操作对象的标识和目的地操作对象的标识,其中操作码用于指示指令处理电路要进行:将来自所标识的源操作对象的奇数16比特浮点值转换为32比特浮点值,以及将该32比特浮点值存储在所标识的目的地操作对象的数据元素位置中;
对第二指令集的一个或多个指令进行解码;以及
根据第一指令集的单个指令的操作码,执行第二指令集的经解码的一个或多个指令。
8.如示例7所述的方法,其中,用于第一源操作对象的标识符的字段用于标识向量寄存器。
9.如示例7所述的方法,其中,用于第一源操作对象的标识符的字段用于标识存储器位置。
10.如示例7-9中的任一项所述的方法,其中,16比特浮点值是BF16值。
11.如示例10所述的方法,其中,将BF16值转换为32比特浮点值包括将16个零附加到BF16值中的每个BF16值。
12.如示例7-9中的任一项所述的方法,其中,16比特浮点值是FP16值。
13.一种系统,包括:
存储器,该存储器用于存储单个指令的实例,该单个指令包括用于以下各项的字段:操作码、源操作对象的标识和目的地操作对象的标识,其中操作码用于指示指令处理电路要进行:将来自所标识的源操作对象的奇数16比特浮点值转换为32比特浮点值,以及将该32比特浮点值存储在所标识的目的地操作对象的数据元素位置中;
解码器电路,该解码器电路用于对单个指令的实例进行解码;以及
指令处理电路,该指令处理电路用于根据操作码执行经解码的单个指令的实例。
14.如示例13所述的系统,其中,用于第一源操作对象的标识符的字段用于标识向量寄存器。
15.如示例13所述的系统,其中,用于第一源操作对象的标识符的字段用于标识存储器位置。
16.如示例13-15中的任一项所述的系统,其中,16比特浮点值是BF16值。
17.如示例16所述的系统,其中,指令处理电路用于通过将16个零附加到BF16值中的每个BF16值来将BF16值转换为32比特浮点值。
18.如示例13-15中的任一项所述的系统,其中,16比特浮点值是FP16值。
此外,在上文描述的各示例中,除非另外专门指出,否则,诸如短语“A、B或C中的至少一个”之类的分隔语言旨在被理解为意味着A、B、或C、或其任何组合(例如,A、B、和/或C)。由此,分隔语言不旨在也不应当被理解为暗示给定的示例要求A中的至少一个、B中的至少一个或C中的至少一个各自都存在。
因此,说明书和附图应被认为是说明性而非限制性意义的。然而,将显而易见的是,可对这些实现方式作出各种修改和改变,而不背离如权利要求中所述的本公开的更宽泛的精神和范围。

Claims (18)

1.一种装置,包括:
解码器电路,所述解码器电路用于对单个指令进行解码,所述单个指令包括用于以下各项的字段:操作码、源操作对象的标识和目的地操作对象的标识,其中所述操作码用于指示指令处理电路要进行:将来自所标识的源操作对象的奇数16比特浮点值转换为32比特浮点值,以及将所述32比特浮点值存储在所标识的目的地操作对象的数据元素位置中;以及
指令处理电路,所述指令处理电路用于根据所述操作码来执行经解码的指令。
2.如权利要求1所述的装置,其中,用于第一源操作对象的标识符的字段用于标识向量寄存器。
3.如权利要求1所述的装置,其中,用于第一源操作对象的标识符的字段用于标识存储器位置。
4.如权利要求1-3中的任一项所述的装置,其中,所述16比特浮点值是BF16值。
5.如权利要求4所述的装置,其中,指令处理电路用于通过将16个零附加到所述BF16值中的每个BF16值来将所述BF16值转换为32比特浮点值。
6.如权利要求1-3中的任一项所述的装置,其中,所述16比特浮点值是FP16值。
7.一种方法,包括:
将第一指令集的单个指令转译为第二指令集的一个或多个指令,所述单个指令包括用于以下各项的字段:操作码、源操作对象的标识和目的地操作对象的标识,其中所述操作码用于指示指令处理电路要进行:将来自所标识的源操作对象的奇数16比特浮点值转换为32比特浮点值,以及将所述32比特浮点值存储在所标识的目的地操作对象的数据元素位置中;
对所述第二指令集的一个或多个指令进行解码;以及
根据所述第一指令集的所述单个指令的所述操作码,执行所述第二指令集的经解码的一个或多个指令。
8.如权利要求7所述的方法,其中,用于第一源操作对象的标识符的字段用于标识向量寄存器。
9.如权利要求7所述的方法,其中,用于第一源操作对象的标识符的字段用于标识存储器位置。
10.如权利要求7-9中的任一项所述的方法,其中,所述16比特浮点值是BF16值。
11.如权利要求10所述的方法,其中,将所述BF16值转换为32比特浮点值包括将16个零附加到所述BF16值中的每个BF16值。
12.如权利要求7-9中的任一项所述的方法,其中,所述16比特浮点值是FP16值。
13.一种系统,包括:
存储器,所述存储器用于存储单个指令的实例,所述单个指令包括用于以下各项的字段:操作码、源操作对象的标识和目的地操作对象的标识,其中所述操作码用于指示指令处理电路要进行:将来自所标识的源操作对象的奇数16比特浮点值转换为32比特浮点值,以及将所述32比特浮点值存储在所标识的目的地操作对象的数据元素位置中;
解码器电路,所述解码器电路用于对所述单个指令的实例进行解码;以及
指令处理电路,所述指令处理电路用于根据所述操作码执行经解码的单个指令的实例。
14.如权利要求13所述的系统,其中,用于第一源操作对象的标识符的字段用于标识向量寄存器。
15.如权利要求13所述的系统,其中,用于第一源操作对象的标识符的字段用于标识存储器位置。
16.如权利要求13-14中的任一项所述的系统,其中,所述16比特浮点值是BF16值。
17.如权利要求16所述的系统,其中,指令处理电路用于通过将16个零附加到所述BF16值中的每个BF16值来将所述BF16值转换为32比特浮点值。
18.如权利要求13-14中的任一项所述的系统,其中,所述16比特浮点值是FP16值。
CN202211655453.9A 2021-12-23 2022-12-21 转换指令 Pending CN116382777A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/560,557 US20230205522A1 (en) 2021-12-23 2021-12-23 Conversion instructions
US17/560,557 2021-12-23

Publications (1)

Publication Number Publication Date
CN116382777A true CN116382777A (zh) 2023-07-04

Family

ID=84387681

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211655453.9A Pending CN116382777A (zh) 2021-12-23 2022-12-21 转换指令

Country Status (4)

Country Link
US (1) US20230205522A1 (zh)
EP (1) EP4202660A1 (zh)
CN (1) CN116382777A (zh)
TW (1) TW202333048A (zh)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5933650A (en) * 1997-10-09 1999-08-03 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US9965275B2 (en) * 2015-07-31 2018-05-08 Arm Limited Element size increasing instruction

Also Published As

Publication number Publication date
EP4202660A1 (en) 2023-06-28
TW202333048A (zh) 2023-08-16
US20230205522A1 (en) 2023-06-29

Similar Documents

Publication Publication Date Title
EP4020184A1 (en) Instructions to convert from fp16 to bf8
EP4020178A1 (en) Instructions to convert from fp16 to bf8
EP4202660A1 (en) Conversion instructions
EP4202659A1 (en) Conversion instructions
EP4202653A1 (en) Conversion instructions
EP4141655B1 (en) Bfloat16 comparison instructions
US20230060146A1 (en) Bfloat16 classification and manipulation instructions
EP4141656A1 (en) Bfloat16 scale and/or reduce instructions
EP4141659A1 (en) Bfloat16 arithmetic instructions
EP4141657A1 (en) Bfloat16 square root and/or reciprocal square root instructions
US20240103865A1 (en) Vector multiply-add/subtract with intermediate rounding
US20240103872A1 (en) Truncation floating-point conversion to integer with saturation
EP4141660A1 (en) Bfloat16 fused multiply instructions
EP4318224A1 (en) Instructions to convert from fp16 to fp8
US20230221958A1 (en) Memory controller with arithmetic logic unit and/or floating point unit
US20240045681A1 (en) 8-bit floating point comparison instructions
EP4109248A1 (en) Dual sum of quadword 16x16 multiply and accumulate
EP4307111A1 (en) Vector unpack based on selection information
EP4318226A1 (en) Instructions to convert from fp8
EP4016289A1 (en) Efficient divide and accumulate instruction when an operand is equal to or near a power of two
CN116339683A (zh) 零周期存储器初始化
TW202405646A (zh) 16位腦浮點(bfloat16)算術指令
CN116339615A (zh) 在第一次读取易失性存储器时读取所有零数据或随机数据
CN115878182A (zh) 将状态标志的子集从控制和状态寄存器拷贝到标志寄存器

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication