CN116431221A - 转换指令 - Google Patents

转换指令 Download PDF

Info

Publication number
CN116431221A
CN116431221A CN202211637277.6A CN202211637277A CN116431221A CN 116431221 A CN116431221 A CN 116431221A CN 202211637277 A CN202211637277 A CN 202211637277A CN 116431221 A CN116431221 A CN 116431221A
Authority
CN
China
Prior art keywords
instruction
floating point
point value
value
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
CN202211637277.6A
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 CN116431221A publication Critical patent/CN116431221A/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/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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/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/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/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
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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
    • 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)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Computational Mathematics (AREA)
  • Evolutionary Computation (AREA)
  • Mathematical Optimization (AREA)
  • Neurology (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

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

Description

转换指令
背景技术
近年来,已经证明具有较低精度的乘法和较高精度的累加的融合乘加(fused-multiply-add,FMA)单元在机器学习/人工智能应用中是有用的,最显著的是在训练深度神经网络时是有用的,这是由于其极高的计算强度。相较于经典的IEEE-754 32比特(FP32)和64比特(FP64)算术,此种精度降低的算术在性质上可以与其缩短的宽度不成比例地加速。
附图说明
将参考附图来描述根据本公开的各示例,在这些附图中:
图1图示出不同的浮点表示格式。
图2图示出用于将来自两个源的FP32值转换为FP16值并将该FP16值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。
图3图示出用于将来自两个源的FP32值转换为BF16值并将该BF16值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。
图4图示出用于将FP32值转换为BF16值并将该BF16值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。
图5图示出用于处理诸如VCVTNE2PS2PH、VCVTNEPS2BF16和/或VCVTNE2PS2BF16指令之类的指令的硬件的示例。
图6图示出用于处理VCVTNEPS2BF16指令的方法的示例。
图7图示出用于VCVTNEPS2BF16指令的指令编码的示例。
图8图示出用于VCVTNEPS2BF16指令的指令伪代码的示例。
图9图示出用于处理VCVTNE2PS2PH或VCVTNE2PS2BF16指令的方法的示例。
图10图示出用于VCVTNE2PS2PH指令的指令编码的示例。
图11图示出用于VCVTNE2PS2PH指令的指令伪代码的示例。
图12图示出示例性系统的示例。
图13图示出可具有多于一个的核心、可具有集成存储器控制器、并且可具有集成图形器件的处理器的示例的框图。
图14(A)是图示出根据示例的示例性有序管线和示例性寄存器重命名、乱序发出/执行管线两者的框图。
图14(B)是图示根据示例的要包括在处理器中的有序体系结构核心的示例性示例和示例性寄存器重命名、乱序发出/执行体系结构核心两者的框图。
图15图示出(一个或多个)执行单元电路的示例,诸如图14(B)的(一个或多个)执行单元电路。
图16是根据一些示例的寄存器体系结构的框图。
图17图示出指令格式的示例。
图18图示出寻址字段的示例。
图19图示出第一前缀的示例。
图20(A)-图20(D)图示出如何使用第一前缀1701(A)的R、X和B字段的示例。
图21(A)-图21(B)图示出第二前缀的示例。
图22图示出第三前缀的示例。
图23图示根据示例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
本公开涉及用于响应于指令而转换数据元素的方法、装置、系统和非暂态计算机可读存储介质。
图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的支持,该支持占用面积并且可能会消耗更多功率。本文中详细说明将两个源的FP32数据元素转换为FP16或BF16数据元素并将该FP16或BF16数据元素存储到目的地中的指令及其支持的示例。
图2图示出用于将来自两个源的FP32值转换为FP16值并将该FP16值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。注意,在一些示例中,第一指令集体系结构的该单个指令被转换为不同的第二指令集体系结构的一个或多个指令,然而,结果将是相同的。
用于将来自两个源的FP32值转换为FP16值并将该FP16值存储到目的地的数据元素位置中的指令的格式的示例是VCVTNE2PS2PH目的地,源1,源2。在一些示例中,VCVTNE2PS2PH是指令的操作码助记符。目的地是用于指示紧缩(packed)数据目的地寄存器操作对象的一个或多个字段。源1是用于指示诸如紧缩数据寄存器和/或存储器位置之类的第一源的一个或多个字段。源2是用于指示诸如紧缩数据寄存器和/或存储器位置之类的第二源的一个或多个字段。注意,操作码助记符中的PS表示单精度或FP32。此外,注意,可以使用不同的助记符,但本讨论中使用VCVTNE2PS2PH作为快捷方式。在一些示例中,至少使用R/M字段1846(并且在一些示例中,使用MOD字段1842)来提供源位置,并且使用寄存器字段1844来提供目的地寄存器。在一些示例中,前缀用于提供源位置中的一个源位置,诸如使用下文详细说明的第二或第三前缀的VVVV。
如图所示,经解码的VCVTNE2PS2PH指令的执行使来自两个紧缩数据源201和203的FP32数据元素被执行电路或存储器访问电路209的转换电路211转换为FP16数据元素。在该示例中,来自源2 203的经转换的FP16数据元素被存储在目的地231的相对应的较低的数据元素位置中,并且来自源1 201的经转换的FP16数据元素被存储在目的地231的相对应的较高的数据元素位置中。应注意,该存储顺序可以被修改,诸如使来自源1 201的经转换的数据元素被存储在紧缩数据目的地231的较低的数据元素位置中等等。在一些示例中,该指令的执行使用“就近(向偶)舍入”的舍入模式。在一些示例中,非正规输出始终被转储清除为零,并且非正规输入始终被视为零。
图3图示出用于将来自两个源的FP32值转换为BF16值并将该BF16值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。注意,在一些示例中,第一指令集体系结构的该单个指令被转换为不同的第二指令集体系结构的一个或多个指令,然而,结果将是相同的。
用于将来自两个源的FP32值转换为BF16值并将该BF16值存储到目的地的数据元素位置中的指令的格式的示例是VCVTNE2PS2BF16目的地,源1,源2。在一些示例中,VCVTNE2PS2BF16是指令的操作码助记符。目的地是用于指示紧缩数据目的地寄存器操作对象的一个或多个字段。源1是用于指示诸如紧缩数据寄存器和/或存储器位置之类的第一源的一个或多个字段。源2是用于指示诸如紧缩数据寄存器和/或存储器位置之类的第二源的一个或多个字段。注意,操作码助记符中的PS表示单精度或FP32。此外,注意,可以使用不同的助记符,但本讨论中使用VCVTNE2PS2BF16作为快捷方式。在一些示例中,至少使用R/M字段1846(并且在一些示例中,使用MOD字段1842)来提供源位置,并且使用寄存器字段1844来提供目的地寄存器。在一些示例中,前缀用于提供源位置中的一个源位置,诸如使用下文详细说明的第二或第三前缀的VVVV。
如图所示,经解码的VCVTNE2PS2BF16指令的执行使来自两个紧缩数据源301和303的FP32数据元素被执行电路或存储器访问电路309的转换电路311转换为BF16数据元素。在该示例中,来自源2 303的经转换的BF16数据元素被存储在目的地331的相对应的较低的数据元素位置中,并且来自源1 301的经转换的BF16数据元素被存储在目的地331的相对应的较高数据元素位置中。应注意,该存储顺序可以被修改,诸如使来自源1 301的经转换的数据元素被存储在紧缩数据目的地331的较低的数据元素位置中等等。在一些示例中,转换截去FP32值的分数的16个最低有效比特。
在一些示例中,该指令的执行使用“就近(向偶)舍入”的舍入模式。在一些示例中,非正规输出始终被转储清除为零,并且非正规输入始终被视为零。
图4图示出用于将来自源的FP32值转换为BF16值并将该BF16值存储到目的地的数据元素位置中的单个经解码的指令的示例性执行。注意,在一些示例中,第一指令集体系结构的该单个指令被转换为不同的第二指令集体系结构的一个或多个指令,然而,结果将是相同的。
用于将来自两个源的FP32值转换为BF16值并将该BF16值存储到目的地的数据元素位置中的指令的格式的示例是VCVTNEPS2BF16目的地,源1。在一些示例中,VCVTNEPS2BF16是指令的操作码助记符。目的地是用于指示紧缩数据目的地寄存器操作对象的一个或多个字段。源1是用于指示诸如紧缩数据寄存器和/或存储器位置之类的第一源的一个或多个字段。注意,操作码助记符中的PS表示单精度或FP32。此外,注意,可以使用不同的助记符,但本讨论中使用VCVTNEPS2BF16作为快捷方式。在一些示例中,至少使用R/M字段1846(并且在一些示例中,使用MOD字段1842)来提供源位置,并且使用寄存器字段1844来提供目的地寄存器。
如图所示,经解码的VCVTNEPS2BF16指令的执行使来自紧缩数据源401的FP32数据元素被执行电路或存储器访问电路409的转换电路411转换为BF16数据元素。在一些示例中,转换截去FP32值的分数的16个最低有效比特。然而,情况可能并非总是如此。
在一些示例中,该指令的执行使用“就近(向偶)舍入”的舍入模式。在一些示例中,非正规输出始终被转储清除为零,并且非正规输入始终被视为零。
图5图示出用于处理诸如VCVTNE2PS2PH、VCVTNEPS2BF16和/或VCVTNE2PS2BF16指令之类的指令的硬件的示例。如图所示,存储装置503存储要被执行的VCVTNE2PS2PH、VCVTNEPS2BF16和/或VCVTNE2PS2BF16指令501。
指令501由解码电路505接收。例如,解码电路505从取得(fetch)逻辑/电路接收该指令。指令包括用于操作码、第一源和第二源、以及目的地的字段。在一些示例中,源和目的地是寄存器,并且在其他示例中,源和目的地中的一个或多个是存储器位置。在一些示例中,操作码详细说明哪个算术操作要被执行。
稍后将详述至少一个指令格式的更详细的示例。解码电路505将指令解码成一个或多个操作。在一些示例中,该解码包括生成要被执行电路(诸如,执行电路509)执行的多个微操作。解码电路505也对指令前缀进行解码。
在一些示例中,寄存器重命名、寄存器分配和/或调度电路507提供用于以下中的一项或多项的功能:1)将逻辑操作对象值重命名为物理操作对象值(例如,一些示例中的寄存器别名表);2)将状态比特和标志分配给经解码的指令;以及3)从指令池调度经解码的指令来在执行电路上执行(例如,在一些示例中,使用预留站)。
寄存器(寄存器堆)和/或存储器508存储数据作为要由执行电路509对其进行操作的指令的操作对象。示例性寄存器类型包括紧缩数据寄存器、通用寄存器、以及浮点寄存器。
执行电路509根据操作码来执行经解码的指令。示例性详细说明的执行电路在图2、图3、图4、图14(B)等中示出。经解码的VCVTNE2PS2PH指令的执行使执行电路将来自两个源的FP32值转换为FP16值并将该FP16值存储在目的地的数据元素中。经解码的VCVTNE2PS2BF16指令的执行使执行电路将来自两个源的FP32值转换为BF16值并将该BF16值存储在目的地的数据元素中。经解码的VCVTNEPS2BF16指令的执行使执行电路将来自源的FP32值转换为BF16值并将该BF16值存储在目的地的数据元素中。
在一些示例中,引退/写回电路511在体系结构上将目的地寄存器提交到寄存器或存储器508中,并且引退指令。
图6图示出用于处理VCVTNEPS2BF16指令的方法的示例。在一些示例中,如图14(B)中所示的处理器核心、如下文详述的管线等执行该方法。在一些示例中,处理器核心利用仿真层工作,或包括二进制转译电路,用于执行不同的第二指令集体系结构(instructionset architecture,ISA)的一个或多个指令,以执行VCVTNEPS2BF16指令的(一个或多个)操作。
在601处,单个指令具有用于以下各项的字段:操作码、源操作对象的标识和目的地操作对象的标识,其中操作码用于指示执行电路和/或存储器访问电路要进行:将来自所标识的源操作对象的FP32值转换为BF16值,以及将该BF16值存储在所标识的目的地操作对象的数据元素位置中。操作对象的标识可以是到寄存器和/或存储器位置。
在一些示例中,在602处,将第一指令集的所取得的指令转译为第二指令集体系结构的一个或多个指令。
在603处,对第二指令集的这一个或多个经转译的指令进行解码。在一些示例中,转译和解码被合并。
在605处,取回与(一个或多个)经解码的指令的源操作对象相关联的数据值并且调度(一个或多个)经解码的指令。例如,当源操作对象是存储器操作对象时,取回来自所指示的存储器位置的数据。
在607处,由诸如本文中详述的执行电路(硬件)之类的执行电路(硬件)执行经解码的指令或者第二指令集的(一个或多个)经解码的指令。对于VCVTNEPS2BF16指令,执行将使执行电路根据VCVTNEPS2BF16指令的操作码将来自所标识的源操作对象的FP32值转换为BF16值并将该BF16值存储在所标识的目的地操作对象的数据元素位置中。
在一些示例中,在609处,指令被提交或引退。
图7图示出用于VCVTNEPS2BF16指令的指令编码的示例。
图8图示出用于VCVTNEPS2BF16指令的指令伪代码的示例。
图9图示出用于处理VCVTNE2PS2PH或VCVTNE2PS2BF16指令的方法的示例。在一些示例中,如图14(B)中所示的处理器核心、如下文详述的管线等执行该方法。在一些示例中,处理器核心利用仿真层工作,或包括二进制转译电路,用于执行不同的第二指令集体系结构(ISA)的一个或多个指令,以执行VCVTNE2PS2PH或VCVTNE2PS2BF16指令的(一个或多个)操作。注意,VCVTNE2PS2BF16指令的处理非常类似,但生成BF16值,而非FP16值。
在901处,单个指令具有用于以下各项的字段:操作码、第一源操作对象的标识、第二源操作对象的标识和目的地操作对象的标识,其中操作码用于指示执行电路和/或存储器访问电路要进行:将来自所标识的源操作对象的FP32值转换为16比特浮点值(例如,取决于操作码,FP16或BF16),以及将该FP16值存储在所标识的目的地操作对象的数据元素位置中。在一些示例中,从第二源操作对象转换的16比特浮点值被连续地存储在目的地操作对象的较低的数据元素位置中,并且从第一源操作对象转换的16比特浮点值被连续地存储在目的地操作对象的较高的数据元素位置中。在一些示例中,从第一源操作对象转换的16比特浮点值被连续地存储在目的地操作对象的较低的数据元素位置中,并且从第二源操作对象转换的16比特浮点值被连续地存储在目的地操作对象的较高的数据元素位置中。操作对象的标识可以是到寄存器和/或存储器位置。
在一些示例中,在902处,将第一指令集的所取得的指令转译为第二指令集体系结构的一个或多个指令。
在903处,对第二指令集的这一个或多个经转译的指令进行解码。在一些示例中,转译和解码被合并。
在905处,取回与(一个或多个)经解码的指令的源操作对象相关联的数据值并且调度(一个或多个)经解码的指令。例如,当源操作对象是存储器操作对象时,取回来自所指示的存储器位置的数据。
在907处,由诸如本文中详述的执行电路(硬件)之类的执行电路(硬件)执行经解码的指令或者第二指令集的(一个或多个)经解码的指令。对于VCVTNE2PS2PH指令,执行将使执行电路根据VCVTNE2PS2PH指令的操作码将来自所标识的源操作对象的FP32值转换为16比特浮点值并将该16比特浮点值存储在所标识的目的地操作对象的数据元素位置中。
在一些示例中,在909处,指令被提交或引退。
图10图示出用于VCVTNE2PS2PH指令的指令编码的示例。
图11图示出用于VCVTNE2PS2PH指令的指令伪代码的示例。
下文详细描述支持上文详细描述的一个或多个示例的计算机体系结构、系统、核心、指令格式等的示例。
示例性计算机体系结构
下面详细描述示例性计算机体系结构。本领域中已知的用于膝上型电脑、桌面型电脑、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(digital signal processor,DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、以及大量各种其他电子设备的其他系统设计和配置也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的各种系统或电子设备一般都是适当的。
图12图示了示例性系统的示例。多处理器系统1200是一种点对点互连系统,并包括多个处理器,其中包括经由点到点互连1250耦合的第一处理器1270和第二处理器1280。在一些示例中,第一处理器1270和第二处理器1280是同构的。在一些示例中,第一处理器1270和第二处理器1280是异构的。
处理器1270和1280被示为分别包括集成存储器控制器(integrated memorycontroller,IMC)单元电路1272和1282。处理器1270还包括作为其互连控制器单元的部分的点到点(point-to-point,P-P)接口1276和1278;类似地,第二处理器1280包括P-P接口1286和1288。处理器1270、1280可以利用点到点(P-P)接口电路1278、1288经由P-P互连1250交换信息。IMC 1272和1282将处理器1270、1280耦合到各自的存储器,即存储器1232和存储器1234,这些存储器可以是在本地附接到各个处理器的主存储器的一部分。
处理器1270、1280可以各自利用点到点接口电路1276、1294、1286、1298,经由各个P-P互连1252、1254来与芯片组1290交换信息。芯片组1290可以可选地经由高性能接口1292与协处理器1238交换信息。在一些示例中,协处理器1238是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享缓存(未示出)可以被包括在任一处理器1270、1280中,或者在两个处理器之外但经由P-P互连与这些处理器相连接,从而使得:如果一处理器被置于低功率模式,任一个或两个处理器的本地缓存信息也可以被存储在该共享缓存中。
芯片组1290可以经由接口1296耦合到第一互连1216。在一些示例中,第一互连1216可以是外围组件互连(Peripheral Component Interconnect,PCI)互连,或者是诸如PCI快速(PCI Express)互连或者另一I/O互连之类的互连。在一些示例中,这些互连中的一个耦合到功率控制单元(power control unit,PCU)1217,PCU 1217可以包括电路、软件和/或固件来执行关于处理器1270、1280和/或协处理器1238的功率管理操作。PCU 1217向电压调节器提供控制信息,以使得电压调节器生成适当的调节电压。PCU 1217还提供控制信息以控制所生成的操作电压。在各示例中,PCU 1217可以包括各种功率管理逻辑单元(电路)来执行基于硬件的功率管理。这种功率管理可以是完全由处理器控制的(例如,由各种处理器硬件控制,并且可以由工作负载和/或功率约束、热约束或其他处理器约束所触发),和/或功率管理可以响应于外部源而被执行(例如平台或功率管理源或系统软件)。
PCU 1217被图示为作为与处理器1270和/或处理器1280分开的逻辑而存在。在其他情况下,PCU 1217可以在处理器1270或1280的核心(未示出)中给定的一个或多个核心上执行。在一些情况下,PCU 1217可以被实现为微控制器(专用的或通用的)或者其他控制逻辑,其被配置为执行其自己的专用功率管理代码(有时称为P代码)。在另外的其他示例中,PCU 1217要执行的功率管理操作可以被实现在处理器外部,例如借由单独的功率管理集成电路(power management integrated circuit,PMIC)或者在处理器外部的另一组件来实现。在另外的其他示例中,PCU 1217要执行的功率管理操作可被实现在BIOS或其他系统软件内。
各种I/O设备1214以及互连(总线)桥1218可以耦合到第一互连1216,互连(总线)桥1218将第一互连1216耦合到第二互连1220。在一些示例中,一个或多个额外的处理器1215被耦合到第一互连1216,例如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如图形加速器或数字信号处理(digital signal processing,DSP)单元)、现场可编程门阵列(field programmable gate array,FPGA)、或者任何其他处理器。在一些示例中,第二互连1220可以是低引脚数(low pin count,LPC)互连。各种设备可以耦合到第二互连1220,这些设备例如包括键盘和/或鼠标1222、通信设备1227、以及存储单元电路1228。存储单元电路1228可以是盘驱动器或者其他大容量存储设备,其在一些示例中可包括指令/代码和数据1230。另外,音频I/O 1224可以耦合到第二互连1220。注意,除了上述的点到点体系结构以外其他体系结构也是可能的。例如,诸如多处理器系统1200之类的系统可以实现多点分支(multi-drop)互连或者其他这种体系结构,而不是点到点体系结构。
示例性核心体系结构、处理器和计算机体系结构
处理器核心可以按不同的方式、为了不同的目的、在不同的处理器中实现。例如,这些核心的实现方式可以包括:1)通用有序核心,针对通用计算目的;2)高性能通用乱序核心,针对通用计算目的;3)专用核心,主要针对图形和/或科学(吞吐量)计算目的。不同处理器的实现方式可以包括:1)CPU,包括针对通用计算目的的一个或多个通用有序核心和/或针对通用计算目的的一个或多个通用乱序核心;以及2)协处理器,包括主要针对图形和/或科学(吞吐量)目的的一个或多个专用核心。这些不同处理器导致不同的计算机系统体系结构,这些体系结构可以包括:1)协处理器与CPU在分开的芯片上;2)协处理器与CPU在同一封装中分开的管芯上;3)协处理器与CPU在同一管芯上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可以在与所描述的CPU(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)同一管芯上包括上述的协处理器以及另外的功能。接下来描述示例性核心体系结构,然后是对示例性处理器和计算机体系结构的描述。
图13图示了示例处理器1300的示例的框图,该处理器1300可以具有多于一个的核心,可以具有集成存储器控制器,并且可以具有集成图形器件。实线框图示的处理器1300具有单个核心1302(A)、系统代理1310和一组一个或多个互连控制器单元电路1316,而可选地添加的虚线框将替代性处理器1300图示为具有多个核心1302(A)-(N)、系统代理单元电路1310中的一组一个或多个集成存储器控制单元电路1314、专用逻辑1308以及一组一个或多个互连控制器单元电路1316。注意,处理器1300可以是图12的处理器1270或1280或者协处理器1238或1215之一。
从而,处理器1300的不同实现方式可以包括:1)CPU,其中专用逻辑1308是集成图形和/或科学(吞吐量)逻辑(可以包括一个或多个核心,未示出),核心1302(A)-(N)是一个或多个通用核心(例如,通用有序核心、通用乱序核心、或这两者的组合);2)协处理器,其中核心1302(A)-(N)是主要针对图形和/或科学(吞吐量)目的的大量专用核心;以及3)协处理器,其中核心1302(A)-(N)是大量的通用有序核心。从而,处理器1300可以是通用处理器、协处理器或者专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元电路)、高吞吐量集成众核(many integrated core,MIC)协处理器(包括30个或更多个核心)、嵌入式处理器,等等。该处理器可被实现在一个或多个芯片上。处理器1300可以是一个或多个衬底的一部分和/或可以使用多种工艺技术中的任何技术来实现在一个或多个衬底上,这些工艺技术例如BiCMOS、CMOS、或者NMOS。
存储器层次体系包括核心1302(A)-(N)内的一级或多级缓存单元电路1304(A)-(N)、一组一个或多个共享缓存单元电路1306、以及耦合到该组集成存储器控制器单元电路1314的外部存储器(未示出)。该组一个或多个共享缓存单元电路1306可以包括一个或多个中间级别缓存,例如第2级(L2)、第3级(L3)、第4级(4)或者其他级别的缓存,例如最后一级缓存(last level cache,LLC),和/或这些的组合。虽然在一些示例中基于环的互连网络电路1312对专用逻辑1308(例如,集成图形逻辑)、该组共享缓存单元电路1306和系统代理单元电路1310进行互连,但替代性示例使用任何数目的公知技术来对这些单元进行互连。在一些示例中,在共享缓存单元电路1306中的一个或多个电路与核心1302(A)-(N)之间维持一致性。
在一些示例中,核心1302(A)-(N)中的一个或多个具有多线程能力。系统代理单元电路1310包括对核心1302(A)-(N)进行协调和操作的那些组件。系统代理单元电路1310可以包括例如功率控制单元(power control unit,PCU)电路和/或显示单元电路(未示出)。PCU可以是(或者可以包括)对核心1302(A)-(N)和/或专用逻辑1308(例如,集成图形逻辑)的功率状态进行调节所需的逻辑和组件。显示单元电路用于驱动一个或多个在外部连接的显示器。
核心1302(A)-(N)就体系结构指令集而言可以是同构的或者异构的;也就是说,核心1302(A)-(N)中的两个或更多个核心可能能够执行同一指令集,而其他核心可能能够只执行该指令集的子集或者能够执行一不同的ISA。
示例性核心体系结构
有序和乱序核心框图
图14(A)的框图图示了根据示例的示例性有序管线和示例性寄存器重命名、乱序发出/执行管线两者。图14(B)的框图图示了根据示例,要被包括在处理器中的有序体系结构核心的示例性示例和示例性寄存器重命名、乱序发出/执行体系结构核心两者。图14(A)-(B)中的实线框图示了有序管线和有序核心,而可选地添加的虚线框图示了寄存器重命名、乱序发出/执行管线和核心。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图14(A)中,处理器管线1400包括取得阶段1402、可选的长度解码阶段1404、解码阶段1406、可选的分配阶段1408、可选的重命名阶段1410、调度(也称为调遣或发出)阶段1412、可选的寄存器读取/存储器读取阶段1414、执行阶段1416、写回/存储器写入阶段1418、可选的异常处置阶段1422、以及可选的提交阶段1424。在这些处理器管线阶段的每一者中可以执行一个或多个操作。例如,在取得阶段1402期间,从指令存储器取得一个或多个指令,在解码阶段1406期间,可以对取得的一个或多个指令进行解码,可以生成使用转发寄存器端口的地址(例如,加载存储单元(load store unit,LSU)地址),并且可以执行分支转发(例如,立即数偏移或者链接寄存器(link register,LR))。在一个示例中,解码阶段1406和寄存器读取/存储器读取阶段1414可以被组合到一个管线阶段中。在一个示例中,在执行阶段1416期间,可以执行经解码的指令,可以执行到高级微控制器总线(AdvancedMicrocontroller Bus,AMB)接口的LSU地址/数据管线化,可以执行乘法和加法操作,可以执行具有分支结果的算术操作,等等。
作为示例,示例性寄存器重命名、乱序发出/执行核心体系结构可以通过以下方式实现管线1400:1)指令取得1438执行取得和长度解码阶段1402和1404;2)解码单元电路1440执行解码阶段1406;3)重命名/分配器单元电路1452执行分配阶段1408和重命名阶段1410;4)(一个或多个)调度器单元电路1456执行调度阶段1412;5)(一个或多个)物理寄存器堆单元电路1458和存储器单元电路1470执行寄存器读取/存储器读取阶段1414;执行集群1460执行执行阶段1416;6)存储器单元电路1470和(一个或多个)物理寄存器堆单元电路1458执行写回/存储器写入阶段1418;7)在异常处置阶段1422中可能涉及各种单元(单元电路);并且8)引退单元电路1454和(一个或多个)物理寄存器堆单元电路1458执行提交阶段1424。
图14(B)示出了处理器核心1490包括耦合到执行引擎单元电路1450的前端单元电路1430,并且两者都耦合到存储器单元电路1470。核心1490可以是精简指令集计算(reduced instruction set computing,RISC)核心、复杂指令集计算(complexinstruction set computing,CISC)核心、超长指令字(very long instruction word,VLIW)核心、或者混合或替代性核心类型。作为另外一个选项,核心1490可以是专用核心,例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purposecomputing graphics processing unit,GPGPU)核心、图形核心,等等。
前端单元电路1430可以包括分支预测单元电路1432,该分支预测单元电路耦合到指令缓存单元电路1434,该指令缓存单元电路耦合到指令转译后备缓冲器(translationlookaside buffer,TLB)1436,该指令TLB耦合到指令取得单元电路1438,该指令取得单元电路耦合到解码单元电路1440。在一个示例中,指令缓存单元电路1434被包括在存储器单元电路1470中,而不是前端单元电路1430中。解码单元电路1440(或解码器)可以对指令解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。解码单元电路1440还可以包括地址生成单元电路(address generation unit,AGU,未示出)。在一个示例中,AGU使用经转发的寄存器端口来生成LSU地址,并且可以进一步执行分支转发(例如,立即数偏移分支转发,LR寄存器分支转发,等等)。可以利用各种不同的机制来实现解码单元电路1440。适当机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(programmable logicarray,PLA)、微代码只读存储器(read only memory,ROM),等等。在一个示例中,核心1490包括微代码ROM(未示出)或其他介质,其存储用于某些宏指令的微代码(例如,在解码单元电路1440中或者以其他方式在前端单元电路1430内)。在一个示例中,解码单元电路1440包括微操作(micro-op)或操作缓存(未示出),以保存/缓存在处理器管线1400的解码或其他阶段期间生成的经解码的操作、微标记或微操作。解码单元电路1440可以耦合到执行引擎单元电路1450中的重命名/分配器单元电路1452。
执行引擎电路1450包括重命名/分配器单元电路1452,其耦合到引退单元电路1454和一组一个或多个调度器电路1456。调度器电路1456代表任意数目个不同调度器,包括预留站、中央指令窗口,等等。在一些示例中,(一个或多个)调度器电路1456可以包括算术逻辑单元(arithmetic logic unit,ALU)调度器/调度电路、ALU队列、地址生成单元(address generation unit,AGU)调度器/调度电路、AGU队列,等等。(一个或多个)调度器电路1456耦合到(一个或多个)物理寄存器堆电路1458。(一个或多个)物理寄存器堆电路1458的每一者代表一个或多个物理寄存器堆,这些物理寄存器堆中的不同物理寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,指令指针,即要执行的下一指令的地址),等等。在一个示例中,(一个或多个)物理寄存器堆单元电路1458包括向量寄存器单元电路、写入掩码寄存器单元电路、以及标量寄存器单元电路。这些寄存器单元可以提供体系结构式向量寄存器、向量掩码寄存器、通用寄存器,等等。(一个或多个)物理寄存器单元堆电路1458被引退单元电路1454(也称为引退队列)重叠,以展示可以用来实现寄存器重命名和乱序执行的各种方式(例如,利用(一个或多个)重排序缓冲器(reorder buffer,ROB)和(一个或多个)引退寄存器堆;利用(一个或多个)未来的堆、(一个或多个)历史缓冲器、以及(一个或多个)引退寄存器堆;利用寄存器图谱和寄存器的池;等等)。引退单元电路1454和(一个或多个)物理寄存器堆电路1458耦合到(一个或多个)执行集群1460。(一个或多个)执行集群1460包括一组一个或多个执行单元电路1462和一组一个或多个存储器访问电路1464。执行单元电路1462可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种算术、逻辑、浮点或其他类型的操作(例如,移位、加法、减法、乘法)。虽然一些示例可以包括专用于特定功能或功能集合的若干个执行单元或执行单元电路,但其他示例可以只包括一个执行单元电路或者全部执行所有功能的多个执行单元/执行单元电路。(一个或多个)调度器电路1456、(一个或多个)物理寄存器堆单元电路1458以及(一个或多个)执行集群1460被示为可能是多个,因为某些示例为某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管线和/或存储器访问管线,它们各自具有其自己的调度器电路、(一个或多个)物理寄存器堆单元电路和/或执行集群——并且在单独的存储器访问管线的情况下,所实现的某些示例中只有该管线的执行集群具有(一个或多个)存储器访问单元电路1464)。还应当理解,在使用分开的管线的情况下,这些管线中的一个或多个可以是乱序发出/执行,而其余是有序的。
在一些示例中,执行引擎单元电路1450可以执行到高级微控制器总线(AMB)接口(未示出)的加载存储单元(LSU)地址/数据管线化,以及地址阶段和写回、数据阶段加载、存储、以及分支。
一组存储器访问电路1464耦合到存储器单元电路1470,该存储器单元电路包括数据TLB单元电路1472,该数据TLB电路耦合到数据缓存电路1474,该数据缓存电路耦合到第2级(L2)缓存电路1476。在一个示例性示例中,存储器访问单元电路1464可以包括加载单元电路、存储地址单元电路、以及存储数据单元电路,它们中的每一者耦合到存储器单元电路1470中的数据TLB电路1472。指令缓存电路1434进一步耦合到存储器单元电路1470中的第2级(L2)缓存单元电路1476。在一个示例中,指令缓存1434和数据缓存1474被组合成L2缓存单元电路1476、第3级(L3)缓存单元电路(未示出)和/或主存储器中的单个指令和数据缓存(未示出)。L2缓存单元电路1476耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。
核心1490可以支持一个或多个指令集(例如,x86指令集(带有已随着更新版本添加的一些扩展);MIPS指令集;ARM指令集(带有可选的额外扩展,例如NEON)),该指令集包括本文描述的(一个或多个)指令。在一个示例中,核心1490包括支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许利用紧缩数据来执行被许多多媒体应用使用的操作。
(一个或多个)示例性执行单元电路
图15图示了(一个或多个)执行单元电路的示例,例如图14(B)的(一个或多个)执行单元电路1462。如图所示,(一个或多个)执行单元电路1462可以包括一个或多个ALU电路1501、向量/SIMD单元电路1503、加载/存储单元电路1505、和/或分支/跳转单元电路1507。ALU电路1501执行整数算术和/或布尔操作。向量/SIMD单元电路1503对紧缩数据(例如SIMD/向量寄存器)执行向量/SIMD操作。加载/存储单元电路1505执行加载和存储指令,以将数据从存储器加载到寄存器中,或者从寄存器存储到存储器。加载/存储单元电路1505也可以生成地址。分支/跳转单元电路1507取决于指令而引起到某个存储器地址的分支或跳转。浮点单元(floating-point unit,FPU)电路1509执行浮点算术。(一个或多个)执行单元电路1462的宽度取决于示例而有所不同,并且可以在从16比特到1024比特的范围中。在一些示例中,两个或更多个更小的执行单元被逻辑地组合以形成更大的执行单元(例如,两个128比特执行单元被逻辑组合以形成256比特执行单元)。
示例性寄存器体系结构
图16是根据一些示例的寄存器体系结构1600的框图。如图所示,存在向量/SIMD寄存器1610,其宽度从128比特到1024比特不等。在一些示例中,向量/SIMD寄存器1610在物理上是512比特的,并且取决于映射,只有一些低位比特被使用。例如,在一些示例中,向量/SIMD寄存器1610是512比特的ZMM寄存器:低位256比特被用于YMM寄存器,并且低位128比特被用于XMM寄存器。因此,存在寄存器的覆盖。在一些示例中,向量长度字段在最大长度和一个或多个其他更短的长度之间作出选择,其中每个这种更短长度是前一长度的一半长度。标量操作是对ZMM/YMM/XMM寄存器中的最低阶数据元素位置执行的操作;更高阶数据元素位置或者被保持为与其在该指令之前相同,或者被归零,这取决于示例。
在一些示例中,寄存器体系结构1600包括写入掩码/谓词(predicate)寄存器1615。例如,在一些示例中,有8个写入掩码/谓词寄存器(有时称为k0至k7),它们各自的大小是16比特、32比特、64比特或128比特。写入掩码/谓词寄存器1615可以允许合并(例如,允许目的地中的任何元素集合在任何操作的执行期间被保护免于更新)和/或归零(例如,归零向量掩码允许目的地中的任何元素集合在任何操作的执行期间被归零)。在一些示例中,给定的写入掩码/谓词寄存器1615中的每个数据元素位置对应于目的地的数据元素位置。在其他示例中,写入掩码/谓词寄存器1615是可缩放的,并且由针对给定向量元素的设定数目个使能比特组成(例如,给每个64比特向量元素8个使能比特)。
寄存器体系结构1600包括多个通用寄存器1625。这些寄存器可以是16比特、32比特、64比特等等,并能够被用于标量操作。在一些示例中,这些寄存器用名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8至R15来称呼。
在一些示例中,寄存器体系结构1600包括标量浮点寄存器1645,它被用于使用x87指令集扩展对32/64/80比特浮点数据进行标量浮点操作,或者作为MMX寄存器,来对64比特紧缩整数数据执行操作,以及针对在MMX和XMM寄存器之间执行的一些操作保存操作对象。
一个或多个标志寄存器1640(例如,EFLAGS,RFLAGS,等等)存储状态和控制信息,用于算术、比较和系统操作。例如,一个或多个标志寄存器1640可以存储条件代码信息,例如进位、奇偶性、辅助进位、零、符号、以及溢出。在一些示例中,一个或多个标志寄存器1640被称为程序状态和控制寄存器。
段寄存器1620包含用于访问存储器的段点。在一些示例中,这些寄存器由名称CS、DS、SS、ES、FS和GS来称呼。
机器特定寄存器(machine-specific register,MSR)1635对处理器性能进行控制和报告。大多数MSR 1635处置与系统有关的功能,并且是应用程序不可访问的。机器检查寄存器1660由用于对硬件错误进行检测和报告的控制、状态和错误报告MSR组成。
一个或多个指令指针寄存器1630存储指令指针值。(一个或多个)控制寄存器1655(例如,CR0-CR4)确定处理器(例如,处理器1270、1280、1238、1215和/或1300)的操作模式和当前在执行的任务的特性。调试寄存器1650控制并允许监视处理器或核心的调试操作。
存储器管理寄存器1665指定用于保护模式存储器管理中的数据结构的位置。这些寄存器可以包括GDTR、IDTR、任务寄存器、以及LDTR寄存器。
替代性示例可以使用更宽或更窄的寄存器。此外,替代性示例可以使用更多、更少或不同的寄存器堆和寄存器。
指令集
指令集体系结构(instruction set architecture,ISA)可以包括一个或多个指令格式。给定的指令格式可以定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要被执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可以被定义为具有该指令格式的字段的不同子集(所包括的字段通常是按相同顺序的,但至少一些具有不同的比特位置,因为所包括的字段更少)和/或被定义为具有以不同方式解读的给定字段。从而,ISA的每个指令是利用给定的指令格式来表达的(并且如果定义了的话,则以该指令格式的指令模板中的一个给定指令模板来表达),并且包括用于指定操作和操作对象的字段。例如,示例性ADD指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码,并且包括操作对象字段来选择操作对象(源1/目的地和源2);并且这个ADD指令在指令流中的出现将在选择特定操作对象的操作对象字段中具有特定内容。
示例性指令格式
可以按不同的格式来实现本文描述的(一个或多个)指令的示例。此外,下文详述了示例性系统、体系结构和管线。(一个或多个)指令的示例可以在这些系统、体系结构和管线上被执行,但不限于详述的那些。
图17图示了指令格式的示例。如图所示,指令可以包括多个成分,这些成分包括但不限于用于以下项的一个或多个字段:一个或多个前缀1701、操作码1703、寻址信息1705(例如,寄存器标识符、存储器寻址信息,等等)、位移值1707、和/或立即数1709。注意,一些指令利用了该格式的一些或所有字段,而其他指令可能只使用操作码1703的字段。在一些示例中,图示的顺序是这些字段要被编码的顺序,然而应当明白,在其他示例中,这些字段可以被按另外的顺序来编码、被组合,等等。
(一个或多个)前缀字段1701在被使用时对指令进行修改。在一些示例中,一个或多个前缀被用于重复字符串指令(例如,0xF0、0xF2、0xF3,等等)、提供节超控(sectionoverride)(例如,0x2E、0x36、0x3E、0x26、0x64、0x65、0x2E、0x3E,等等)、执行总线锁定操作、和/或改变操作对象(例如,0x66)和地址大小(例如,0x67)。某些指令要求强制性的前缀(例如,0x66、0xF2、0xF3,等等)。这些前缀中的某些可以被认为是“传统”前缀。其他前缀(本文详述了其一个或多个示例)指示出和/或提供了进一步的能力,例如指定特定的寄存器等等。这些其他前缀通常跟随在“传统”前缀之后。
操作码字段1703被用于至少部分地定义在指令的解码时要执行的操作。在一些示例中,在操作码字段1703中编码的主操作码的长度为1个、2个或3个字节。在其他示例中,主操作码可以是其他的长度。额外的3比特操作码字段有时被编码在另一个字段中。
寻址字段1705被用于对指令的一个或多个操作对象进行寻址,例如存储器中的位置或者一个或多个寄存器。图18图示了寻址字段1705的示例。在这个图示中,示出了可选的MOD R/M字节1802和可选的缩放、索引、基址(Scale,Index,Base,SIB)字节1804。MOD R/M字节1802和SIB字节1804被用来编码指令的最多两个操作对象,每个操作对象是直接寄存器或有效存储器地址。注意,这些字段中的每一者是可选的,即,不是所有的指令都包括这些字段中的一个或多个。MOD R/M字节1802包括MOD字段1842、寄存器字段1844、以及R/M字段1846。
MOD字段1842的内容区分存储器访问和非存储器访问模式。在一些示例中,当MOD字段1842具有值b11时,利用寄存器直接寻址模式,否则使用寄存器间接寻址。
寄存器字段1844可以编码目的地寄存器操作对象或者源寄存器操作对象,或者也可以编码操作码扩展而不被用于编码任何指令操作对象。寄存器索引字段1844的内容直接指定或者通过地址生成来指定源或目的地操作对象的位置(在寄存器中或者在存储器中)。在一些示例中,寄存器字段1844得到来自前缀(例如,前缀1701)的额外比特的补充,以允许更大的寻址。
R/M字段1846可以用来编码引用了存储器地址的指令操作对象,或者可以用来编码目的地寄存器操作对象或源寄存器操作对象。注意,在一些示例中,R/M字段1846可以被与MOD字段1842相组合以规定寻址模式。
SIB字节1804包括缩放字段1852、索引字段1854、以及基址字段1856,以用于地址的生成。缩放字段1852指示缩放因子。索引字段1854指定要使用的索引寄存器。在一些示例中,索引字段1854得到来自前缀(例如,前缀1701)的额外比特的补充,以允许更大的寻址。基址字段1856指定了要使用的基址寄存器。在一些示例中,基址字段1856得到来自前缀(例如,前缀1701)的额外比特的补充,以允许更大的寻址。在实践中,缩放字段1852的内容允许缩放索引字段1854的内容以进行存储器地址生成(例如,对于使用2缩放*索引+基址的地址生成)。
一些寻址形式利用位移值来生成存储器地址。例如,可以根据2缩放*索引+基址+位移、索引*缩放+位移、r/m+位移、指令指针(RIP/EIP)+位移、寄存器+位移等等来生成存储器地址。该位移可以是1字节、2字节、4字节等等的值。在一些示例中,位移字段1707提供这个值。此外,在一些示例中,位移因子的使用被编码在寻址字段1705的MOD字段中,它指示出压缩位移方案,对于该方案,位移值通过disp8与基于向量长度确定的缩放因子N、b比特的值、以及指令的输入元素大小相结合地相乘来计算。位移值被存储在位移字段1707中。
在一些示例中,立即数字段1709为指令指定立即数。立即数可以被编码为1字节值、2字节值、4字节值等等。
图19图示了第一前缀1701(A)的示例。在一些示例中,第一前缀1701(A)是REX前缀的示例。使用这个前缀的指令可以指定通用寄存器、64比特紧缩数据寄存器(例如,单指令多数据(SIMD)寄存器或向量寄存器)、和/或控制寄存器和调试寄存器(例如,CR8-CR15和DR8-DR15)。
使用第一前缀1701(A)的指令可以使用3比特字段指定最多三个寄存器,这取决于格式:1)使用MOD R/M字节1802的reg字段1844和R/M字段1846;2)使用MOD R/M字节1802与SIB字节1804,包括使用reg字段1844以及基址字段1856和索引字段1854;或者3)使用操作码的寄存器字段。
在第一前缀1701(A)中,比特位置7:4被设置为0100。比特位置3(W)可以被用于确定操作对象大小,但不能单独确定操作对象宽度。因此,当W=0时,操作对象大小由代码段描述符(code segment descriptor,CS.D)决定,而当W=1时,操作对象大小为64比特。
注意,添加另一个比特允许对16(24)个寄存器进行寻址,而单独的MOD R/M reg字段1844和MOD R/M的R/M字段1846各自只能寻址8个寄存器。
在第一前缀1701(A)中,比特位置2(R)可以是MOD R/M的reg字段1844的扩展,并且当该字段编码了通用寄存器、64比特紧缩数据寄存器(例如,SSE寄存器)或者控制或调试寄存器时,可被用来修改MOD R/M的reg字段1844。当MOD R/M字节1802指定其他寄存器或定义扩展操作码时,R被忽略。
比特位置1(X)X比特可以修改SIB字节索引字段1854。
比特位置B(B)B可以修改MOD R/M的R/M字段1846或SIB字节基址字段1856中的基址;或者它可以修改用于访问通用寄存器(例如,通用寄存器1625)的操作码寄存器字段。
图20(A)-(D)图示了如何使用第一前缀1701(A)的R、X和B字段的示例。图20(A)图示了当SIB字节1804不被用于存储器寻址时,来自第一前缀1701(A)的R和B被用来扩展MODR/M字节1802的reg字段1844和R/M字段1846。图20(B)图示了当不使用SIB字节1804时,来自第一前缀1701(A)的R和B被用来扩展MOD R/M字节1802的reg字段1844和R/M字段1846(寄存器-寄存器寻址)。图20(C)图示了当SIB字节1804被用于存储器寻址时,来自第一前缀1701(A)的R、X和B被用于扩展MOD R/M字节1802的reg字段1844以及索引字段1854和基址字段1856。图20(D)图示了当寄存器被编码在操作码1703中时,来自第一前缀1701(A)的B被用来扩展MOD R/M字节1802的reg字段1844。
图21(A)-(B)图示了第二前缀1701(B)的示例。在一些示例中,第二前缀1701(B)是VEX前缀的示例。第二前缀1701(B)编码允许指令具有多于两个操作对象,并且允许SIMD向量寄存器(例如,向量/SIMD寄存器1610)长于64比特(例如,128比特和256比特)。第二前缀1701(B)的使用提供了三操作对象(或更多)的语法。例如,先前的两操作对象指令执行诸如A=A+B之类的操作,这覆写了源操作对象。对第二前缀1701(B)的使用使得操作对象能够执行非破坏性操作,比如A=B+C。
在一些示例中,第二前缀1701(B)有两种形式——两字节形式和三字节形式。两字节的第二前缀1701(B)主要被用于128比特、标量和一些256比特指令;而三字节的第二前缀1701(B)提供了3字节操作码指令和第一前缀1701(A)的紧凑替换。
图21(A)图示了第二前缀1701(B)的两字节形式的示例。在一个示例中,格式字段2101(字节0 2103)包含值C5H。在一个示例中,字节1 2105在比特[7]中包括“R”值。这个值是第一前缀1701(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字段1846,以编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。
使用这个前缀的指令可以使用MOD R/M的reg字段1844,以编码目的地寄存器操作对象或者源寄存器操作对象,被作为操作码扩展来对待而不被用于编码任何指令操作对象。
对于支持四个操作对象的指令语法,vvvv、MOD R/M的R/M字段1846和MOD R/M的reg字段1844编码了四个操作对象中的三个。然后立即数1709的比特[7:4]被用来编码第三源寄存器操作对象。
图21(B)图示了第二前缀1701(B)的三字节形式的示例。在一种示例中,格式字段2111(字节0 2113)包含值C4H。字节1 2115在比特[7:5]中包括“R”、“X”和“B”,它们是第一前缀1701(A)的这些值的补码。字节1 2115的比特[4:0](示为mmmmm)包括根据需要来对一个或多个隐含的前导操作码字节进行编码的内容。例如,00001意味着0FH前导操作码,00010意味着0F38H前导操作码,00011意味着0F3AH前导操作码,等等。
字节2 2117的比特[7]的使用与第一前缀1701(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字段1846,以编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。
使用这个前缀的指令可以使用MOD R/M的reg字段1844,以编码目的地寄存器操作对象或者源寄存器操作对象,或者被作为操作码扩展来对待而不被用于编码任何指令操作对象。
对于支持四个操作对象的指令语法,vvvv、MOD R/M的R/M字段1846和MOD R/M的reg字段1844编码了四个操作对象中的三个。然后立即数1709的比特[7:4]被用来编码第三源寄存器操作对象。
图22图示了第三前缀1701(C)的示例。在一些示例中,第三前缀1701(C)是EVEX前缀的示例。第三前缀1701(C)是四字节前缀。
第三前缀1701(C)能够在64比特模式中编码32个向量寄存器(例如,128比特、256比特和512比特寄存器)。在一些示例中,利用写入掩码/操作掩码(参见对于先前图中的寄存器的论述,例如图16)或谓词的指令利用这个前缀。操作掩码寄存器允许条件处理或选择控制。操作掩码指令——其源/目的地操作对象是操作掩码寄存器并且将操作掩码寄存器的内容视为单个值——是使用第二前缀1701(B)而被编码的。
第三前缀1701(C)可以编码特定于指令类别的功能(例如,具有“加载+操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能,等等)。
第三前缀1701(C)的第一字节是格式字段2211,它在一种示例中具有62H的值。随后的字节被称为有效载荷字节2215-2219,并且共同形成P[23:0]的24比特值,以(本文中详述的)一个或多个字段的形式提供特定的能力。
在一些示例中,有效载荷字节2219的P[1:0]与低位的两个mm比特相同。在一些示例中,P[3:2]被保留。比特P[4](R')在与P[7]和MOD R/M的reg字段1844相组合时允许访问高16向量寄存器集合。当不需要SIB类型寻址时,P[6]也可以提供对高16向量寄存器的访问。P[7:5]由R、X和B构成,它们是针对向量寄存器、通用寄存器、存储器寻址的操作对象指定符修饰符比特,并且当与MOD R/M寄存器字段1844和MOD R/M的R/M字段1846相组合时,允许访问超出低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]类似于第一前缀1701(A)和第二前缀1701(B)的W,并且可以作为操作码扩展比特或操作对象大小提升。
P[18:16]指定操作掩码(写入掩码)寄存器(例如,写入掩码/谓词寄存器1615)中的寄存器的索引。在一个示例中,特定值aaa=000具有特殊行为,暗示着没有操作掩码被用于这个特定的指令(这可以通过多种方式实现,包括使用硬连线到全一的操作掩码或者绕过掩蔽硬件的硬件)。当合并时,向量掩码允许目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被保护免于更新;在另一示例中,保留目的地的每个元素的旧值(如果相应的掩码比特具有0值)。与之不同,当归零时,向量掩码允许目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被归零;在一个示例中,目的地的元素在相应掩码比特具有0值时被设置到0。这个功能的子集是对于正被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)进行控制的能力;然而,被修改的元素不一定要连续。从而,操作掩码字段允许了部分向量操作,包括加载、存储、算术、逻辑,等等。虽然在描述的示例中,操作掩码字段的内容选择若干个操作掩码寄存器中包含要使用的操作掩码的那一个(从而操作掩码字段的内容间接标识了要执行的掩蔽),但替代地或附加地,替代性示例允许掩码写入字段的内容直接指定要执行的掩蔽。
P[19]可以与P[14:11]相组合,来以非破坏性源语法编码第二源向量寄存器,该语法可以利用P[19]来访问高16个向量寄存器。P[20]编码多种功能,这些功能在不同类别的指令中有所不同,并且可以影响向量长度/舍入控制指定符字段(P[22:21])的含义。P[23]指示出对合并-写入掩蔽的支持(例如,当被设置为0时)或者对归零和合并-写入掩蔽的支持(例如,当被设置为1时)。
下面的表格详述了在使用第三前缀1701(C)的指令中对寄存器的编码的示例性示例。
Figure BDA0004003161540000271
Figure BDA0004003161540000281
表格1:64比特模式中的32寄存器支持
[2:0] 寄存器类型 通常用途
REG MOD R/M reg GPR,向量 目的地或源
VVVV vvvv GPR,向量 第2源或目的地
RM MOD R/M R/M GPR,向量 第1源或目的地
基址 MOD R/M R/M GPR 存储器寻址
索引 SIB.索引 GPR 存储器寻址
VIDX SIB.索引 向量 VSIB存储器寻址
表格2:在32比特模式中编码寄存器指定符
[2:0] 寄存器类型 通常用途
REG MOD R/M reg k0-k7
VVVV vvvv k0-k7 第2源
RM MOD R/M R/M k0-k7 第1源
{k1] aaa k01-k7 操作掩码
表格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)。这种示例也可以被称为程序产品。
仿真(包括二进制转译、代码变形,等等)
在一些情况下,指令转换器可以被用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令转译(例如,利用静态二进制转译、包括动态编译的动态二进制转译)、变形、仿真或者以其他方式转换到要被核心处理的一个或多个其他指令。可以用软件、硬件、固件或者其组合来实现指令转换器。指令转换器可以在处理器上、在处理器外、或者一部分在处理器上而一部分在处理器外。
图23图示根据示例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在图示的示例中,指令转换器是软件指令转换器,但可替代地,可以用软件、固件、硬件或者其各种组合来实现指令转换器。图23示出了高级语言2302的程序可以被利用第一ISA编译器2304编译以生成第一ISA二进制代码2306,该代码可以由具有至少一个第一ISA指令集核心的处理器2316原生执行。具有至少一个第一ISA指令集核心的处理器2316代表任何这样的处理器:这种处理器能够通过兼容地执行或以其他方式处理(1)第一ISA指令集核心的指令集的实质部分或者(2)以在具有至少一个第一ISA指令集核心的
Figure BDA0004003161540000301
处理器上运行为目标的应用或其他软件的目标代码版本,来执行与具有至少一个第一ISA指令集核心的Intel处理器基本上相同的功能,以便实现与具有至少一个第一ISA指令集核心的处理器基本上相同的结果。第一ISA编译器2304代表可操作来生成第一ISA二进制代码2306(例如,目标代码)的编译器,该第一ISA二进制代码在进行或不进行额外的链接处理的情况下能够在具有至少一个第一ISA指令集核心的处理器2316上被执行。类似地,图23示出了高级语言2302的程序可以被利用替代性指令集编译器2308来编译以生成替代性指令集二进制代码2310,该代码可以由没有第一ISA核心的处理器2314原生执行。指令转换器2312被用来将第一ISA二进制代码2306转换成可以由没有第一ISA指令集核心的处理器2314原生执行的代码。这种转换后的代码可能不会与替代性指令集二进制代码2310相同,这是因为能够进行这一点的指令转换器难以制作;然而,转换后的代码将实现总的操作,并由来自该替代性指令集的指令构成。从而,指令转换器2312代表软件、固件、硬件或它们的组合,其通过仿真、模拟或任何其他过程,允许不具有第一ISA指令集处理器或核心的处理器或其他电子设备执行第一ISA二进制代码2306。
对“一个示例”、“示例”等的引用指示所描述的示例可包括特定的特征、结构或特性,但是可能并非每个示例都一定包括该特定的特征、结构或特性。而且,此类短语不一定是指同一示例。此外,当结合示例描述特定的特征、结构或特性时,认为结合无论是否被明确描述的其他示例而影响此类特征、结构或特性在本领域技术人员的知识范围内。
示例包括但不限于:
1.一种装置,包括:
解码器电路,该解码器电路用于对单个指令进行解码,该单个指令包括用于以下各项的字段:操作码、源操作对象的标识和目的地操作对象的标识,其中操作码用于指示执行电路和/或存储器访问电路要进行:将来自所标识的源操作对象的32比特浮点值转换为16比特浮点值,以及将该16比特浮点值存储在所标识的目的地操作对象的数据元素位置中;以及指令处理电路,该指令处理电路用于根据操作码来执行经解码的指令。
2.如示例1所述的装置,其中,用于源操作对象位置的标识的字段用于标识两个向量寄存器。
3.如示例1所述的装置,其中,用于源操作对象位置的标识的字段用于标识存储器位置。
4.如示例1-3中的任一项所述的装置,其中,16比特浮点值是BF16值。
5.如示例4所述的装置,其中,为了将32比特浮点值转换为BF16浮点值,指令处理电路用于从32比特浮点值移除16个最低有效零。
6.如示例1-3中的任一项所述的装置,其中,16比特浮点值是FP16值。
7.一种方法,包括:
将来自第一指令集的单个指令转译为不同的第二指令集的一个或多个指令,该单个指令包括用于以下各项的字段:操作码、源操作对象的标识和目的地操作对象的标识,其中操作码用于指示执行电路和/或存储器访问电路要进行:将来自所标识的源操作对象的32比特浮点值转换为16比特浮点值,以及将该16比特浮点值存储在所标识的目的地操作对象的数据元素位置中;以及
根据操作码执行经解码的指令。
8.如示例7所述的方法,其中,用于源操作对象位置的标识的字段用于标识两个向量寄存器。
9.如示例7所述的方法,其中,用于源操作对象位置的标识的字段用于标识存储器位置。
10.如示例7-9中的任一项所述的方法,其中,16比特浮点值是BF16值。
11.如示例10所述的方法,其中,将32比特浮点值转换为BF16浮点值包括从32比特浮点值移除16个最低有效零。
12.如示例7-9中的任一项所述的方法,其中,16比特浮点值是FP16值。
13.一种系统,包括:
存储器,该存储器用于存储单个指令的实例,该单个指令包括用于以下各项的字段:操作码、源操作对象的标识和目的地操作对象的标识,其中操作码用于指示执行电路和/或存储器访问电路要进行:将来自所标识的源操作对象的32比特浮点值转换为16比特浮点值,以及将该16比特浮点值存储在所标识的目的地操作对象的数据元素位置中;
解码器电路,该解码器电路用于对单个指令的实例进行解码;以及
指令处理电路,该指令处理电路用于根据操作码来执行经解码的指令。
14.如示例13所述的系统,其中,用于源操作对象位置的标识的字段用于标识两个向量寄存器。
15.如示例13所述的系统,其中,用于源操作对象位置的标识的字段用于标识存储器位置。
16.如示例13-15中的任一项所述的系统,其中,16比特浮点值是BF16值。
17.如示例16所述的系统,其中,为了将32比特浮点值转换为BF16浮点值,指令处理电路用于从32比特浮点值移除16个最低有效零。
18.如示例13-15中的任一项所述的系统,其中,16比特浮点值是FP16值。
此外,在上文描述的各示例中,除非另外专门指出,否则,诸如短语“A、B或C中的至少一个”之类的分隔语言旨在被理解为意味着A、B、或C、或其任何组合(例如,A、B、和/或C)。由此,分隔语言不旨在也不应当被理解为暗示给定的示例要求A中的至少一个、B中的至少一个或C中的至少一个各自都存在。
因此,说明书和附图应被认为是说明性而非限制性意义的。然而,将显而易见的是,可对这些实现方式作出各种修改和改变,而不背离如权利要求中所述的本公开的更宽泛的精神和范围。

Claims (18)

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

Applications Claiming Priority (2)

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

Publications (1)

Publication Number Publication Date
CN116431221A true CN116431221A (zh) 2023-07-14

Family

ID=84329483

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211637277.6A Pending CN116431221A (zh) 2021-12-23 2022-12-16 转换指令

Country Status (3)

Country Link
US (1) US20230205527A1 (zh)
EP (1) EP4202653A1 (zh)
CN (1) CN116431221A (zh)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10853067B2 (en) * 2018-09-27 2020-12-01 Intel Corporation Computer processor for higher precision computations using a mixed-precision decomposition of operations
US11372643B2 (en) * 2018-11-09 2022-06-28 Intel Corporation Systems and methods for performing instructions to convert to 16-bit floating-point format
US20190220278A1 (en) * 2019-03-27 2019-07-18 Menachem Adelman Apparatus and method for down-converting and interleaving multiple floating point values

Also Published As

Publication number Publication date
US20230205527A1 (en) 2023-06-29
EP4202653A1 (en) 2023-06-28

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
EP4202653A1 (en) Conversion instructions
EP4202659A1 (en) Conversion instructions
EP4141655B1 (en) Bfloat16 comparison instructions
US20230060146A1 (en) Bfloat16 classification and manipulation instructions
EP4141657A1 (en) Bfloat16 square root and/or reciprocal square root instructions
EP4141656A1 (en) Bfloat16 scale and/or reduce instructions
EP4141659A1 (en) Bfloat16 arithmetic instructions
US20240184585A1 (en) Bfloat16 comparison instructions
US20240103865A1 (en) Vector multiply-add/subtract with intermediate rounding
US20230221958A1 (en) Memory controller with arithmetic logic unit and/or floating point unit
US20240103872A1 (en) Truncation floating-point conversion to integer with saturation
US20230067810A1 (en) Bfloat16 fused multiply instructions
US20240045681A1 (en) 8-bit floating point comparison instructions
US20240004660A1 (en) Conditional load and/or store
EP4109248A1 (en) Dual sum of quadword 16x16 multiply and accumulate
EP4307111A1 (en) Vector unpack based on selection information
US20230409333A1 (en) Instructions and support for calculating prefix sums
CN116339683A (zh) 零周期存储器初始化
CN116339615A (zh) 在第一次读取易失性存储器时读取所有零数据或随机数据

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication