CN117083595A - 用于对片行进行下转换并与寄存器进行交织的指令的装置、方法和系统 - Google Patents

用于对片行进行下转换并与寄存器进行交织的指令的装置、方法和系统 Download PDF

Info

Publication number
CN117083595A
CN117083595A CN202280023434.6A CN202280023434A CN117083595A CN 117083595 A CN117083595 A CN 117083595A CN 202280023434 A CN202280023434 A CN 202280023434A CN 117083595 A CN117083595 A CN 117083595A
Authority
CN
China
Prior art keywords
source
instruction
register
operand
tile
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
CN202280023434.6A
Other languages
English (en)
Inventor
M·阿德尔曼
R·凡伦天
A·格雷德斯廷
D·汤纳
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 CN117083595A publication Critical patent/CN117083595A/zh
Pending legal-status Critical Current

Links

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
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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

Landscapes

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

Abstract

系统、方法和装置涉及对数据值进行交织。实施例包括:解码电路,用于对单个指令进行解码,该指令具有用于指定操作码的一个或多个字段、用于指定第一源操作对象的位置的一个或多个字段、用于指定第二源操作对象的位置的一个或多个字段、用于指定目的地操作对象的位置的一个或多个字段、以及用于指定要被用于对第一源操作对象中的行进行索引的索引值的一个或多个字段,其中操作码用于指示执行电路要进行:对第一源操作对象的被索引的行的数据元素进行下转换,将经下转换的元素与第二源操作对象的数据元素进行交织,以及将经交织的元素存储在目的地操作对象中;以及执行电路,用于根据操作码来执行经解码的指令。

Description

用于对片行进行下转换并与寄存器进行交织的指令的装置、 方法和系统
技术领域
本公开总体上涉及计算机处理器体系结构,并且更具体地涉及用于矩阵操作的系统和方法。
在诸如机器学习和其他批量数据处理之类的许多计算任务中,矩阵正变得日益重要。深度学习是一类机器学习算法。诸如深度神经网络之类的深度学习架构已经被应用于包括计算机视觉、语音识别、自然语言处理、音频识别、社交网络过滤、机器翻译、生物信息学和药物设计的领域。
用于深度学习的两种工具——推理和训练正趋向于低精度算术。使深度学习算法和计算的吞吐量最大化可以辅助满足深度学习处理器的需求,深度学习处理器例如在数据中心中执行深度学习的那些处理器。
矩阵-矩阵乘法(即,GEMM或通用矩阵乘法)是现代处理器上的常见的重度计算操作。用于矩阵乘法(例如,GEMM)的专门的硬件是改善某些应用(诸如,深度学习)的峰值计算(和能效)的良好选项。
只要输出数据结构具有足够的比特(即,多于输入),这些应用中的一些应用(包括深度学习)就可以在不损失准确性的情况下对具有相对少的比特的输入数据元素操作。
附图说明
在所附附图中以示例方式而非限制方式图示本公开,在附图中,类似的附图标记指示类似的要素,其中:
图1A图示经配置的片的实施例;
图1B图示经配置的片的实施例;
图2图示矩阵存储装置的若干示例;
图3图示利用矩阵(片)操作加速器的系统的实施例;
图4和图5示出如何使用矩阵操作加速器来共享存储器的不同实施例;
图6图示使用片的矩阵乘法累加操作(“TMMA”)的实施例;
图7图示链式融合乘法累加指令的迭代的执行的子集的实施例;
图8图示链式融合乘法累加指令的迭代的执行的子集的实施例;
图9图示链式融合乘法累加指令的迭代的执行的子集的实施例;
图10图示链式融合乘法累加指令的迭代的执行的子集的实施例;
图11图示根据实施例的大小为2的幂的SIMD实现方式,其中,累加器使用大于至乘法器的输入的大小的输入大小;
图12图示利用矩阵操作电路的系统的实施例;
图13图示处理器核心管线的实施例,该处理器核心管线支持使用片的矩阵操作;
图14图示处理器核心管线的实施例,该处理器核心管线支持使用片的矩阵操作;
图15图示按行为主格式和列为主格式表达的矩阵的示例;
图16图示矩阵(片)的使用的示例;
图17图示矩阵(片)的使用的方法的实施例;
图18图示根据实施例的对片的使用的配置的支持;
图19图示将支持的矩阵(片)的描述的实施例;
图20(A)-图20(D)图示(一个或多个)寄存器的示例;
图21图示对将第一源的数据元素下转换并将其与同一类型的数据元素交织在目的地中的指令的执行进行说明的实施例。
图22图示对将第一源的数据元素下转换并将其与同一类型的数据元素交织在目的地中的指令的执行进行说明的实施例。
图23是图示核心或处理器对TCVTROWPS2PHIE指令作出响应的框流程图。
图24是图示核心或处理器对TCVTROWPS2PHIE指令作出响应的框流程图。
图25图示针对TCVTROWPS2PHIE指令的执行的伪代码的示例。
图26图示示例性系统的实施例。
图27图示可具有多于一个的核心、可具有集成存储器控制器并且可具有集成图形器件的处理器2700的实施例的框图。
图28(A)是图示根据本发明的实施例的示例性有序管线和示例性寄存器重命名、乱序发出/执行管线两者的框图。
图28(B)是图示根据本发明的实施例的要被包括在处理器中的有序体系结构核心的示例性实施例和示例性寄存器重命名、乱序发出/执行体系结构核心两者的框图。
图29图示(一个或多个)执行单元电路的实施例,诸如图28(B)的(一个或多个)执行单元电路2862。
图30是根据一些实施例的寄存器体系结构3000的框图。
图31图示指令格式的实施例。
图32图示寻址字段3105的实施例。
图33图示第一前缀3101(A)的实施例。
图34(A)-图34(D)图示如何使用第一前缀3101(A)的R、X和B字段的实施例。
图35(A)-图35(B)图示第二前缀3101(B)的实施例。
图36图示第三前缀3101(C)的实施例。
图37图示根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
在以下描述中,阐述了众多特定细节。然而,应当理解,实施例可在没有这些特定细节的情况下实施。在其他实例中,未详细示出公知的电路、结构和技术,以免使对本描述的理解模糊。
说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用表明所描述的实施例可包括特定的特征、结构或特性,但是并非每一个示例都一定包括该特定的特征、结构或特性。此外,此类短语不一定是指同一个实施例。此外,当结合实施例描述特定的特征、结构或特性时,认为结合无论是否被明确描述的其他实施例而影响此类特征、结构或特性是在本领域技术人员的知识范围之内的。
在许多主流处理器中,处置矩阵是困难的和/或指令密集型任务。例如,可将矩阵的多行置入多个紧缩(packed)数据(例如,SIMD或向量)寄存器中,随后可单独地对矩阵的多行进行操作。例如,取决于数据大小,将两个8×2矩阵相加可能要求加载或聚集到四个紧缩数据寄存器中。随后,执行与来自每个矩阵的第一行相对应的紧缩数据寄存器的第一加法,并执行与来自每个矩阵的第二行相对应的紧缩数据寄存器的第二加法。随后,将所得到的紧缩数据寄存器往回分散到存储器。虽然对于小型矩阵,这种场景可能是可接受的,但是对于较大的矩阵,这通常是不可接受的。
经交织的电气与电子工程师协会(Institute for Electrical and ElectronicsEngineers,IEEE)半精度浮点(FP16)FP16对对于5G工作负载和复数的矩阵支持的其他使用而言是根本性的。在一些实施例中,用于复数数据类型的矩阵指令采用IEEE单精度浮点(FP32)输出片。本文中详述了允许无缝地且没有性能开销地创建经交织较低精度格式的指令。注意,在一些实施例中,也可使用其他经下转换的浮点格式,这些格式诸如bfloat16、FP8、FP4、INT8、INT16、INT4等。
讨论
本文中描述的是用于在诸如中央处理单元(central processing unit,CPU)、图形处理单元(graphic processing unit,GPU)和加速器之类的计算机硬件中支持矩阵操作的机制。矩阵操作利用表示存储器的一个或多个紧缩区域(诸如,寄存器)的2维(2-dimensional,2-D)数据结构。贯穿本说明书,这些2-D数据结构被称为片(tile)。注意,矩阵可以比片小(使用少于所有片),或可利用多个片(矩阵大于任一片的大小)。贯穿本说明书,使用矩阵(片)语言来指示使用影响矩阵的片来执行的操作;矩阵是否大于任一片通常是不相关的。
每个片可由不同的操作来作用,这些操作诸如本文中详述的那些操作,包括但不限于:矩阵(片)乘法、片加法、片减法、片对角线、片归零、片变换、片点积、片广播、片行广播、片列广播、片乘法、片乘法和累加、片移动,等等。此外,在未来可以与这些操作一起使用或为了支持非数值应用而使用对诸如使用缩放和/或偏置的操作器的支持,非数值应用例如,OpenCL、“本地存储器”、数据压缩/解压缩,等等。
存储(诸如,(非易失性和易失性的)存储器、寄存器、高速缓存等)的多个部分被布置为具有不同横向尺度和纵向尺度的片。例如,片可具有横向尺度4(例如,矩阵的四行)和纵向尺度8(例如,矩阵的8列)。典型地,横向尺度是相关的元素大小(例如,2比特、4比特、8比特、16比特、32比特、64比特、128比特等)。可支持多种数据类型(单精度浮点、双精度浮点、整数等)。
经配置的片的示例性使用
在一些实施例中,可配置片参数。例如,可配置给定的片以提供片选项。示例性片选项包括但不限于:片的行数、片的列数、片是否为有效、和/或片是否由相等大小的片对组成。
图1A图示经配置的片的实施例。如图所示,应用存储器102的4kB具有存储于其上的4个1kB的片——片t0 104、片t1 106、片t2 108和片t3 110。在该示例中,这4个片不由对组成,并且每个片具有按行和列布置的元素。片t0 104和片t1 106具有K行和N列的4字节元素(例如,单精度数据),其中K=8且N=32。片t2 108和片t3 110具有K行和N/2列的8字节元素(例如,双精度数据)。由于双精度操作数的宽度是单精度操作数的宽度的两倍,因此该配置与用于提供片选项的调色板一致,将至少4kB的总存储提供给至少4个名称。在操作中,可使用加载操作和存储操作从存储器加载片以及向存储器存储片。取决于所使用的指令编码方案,可用的应用存储器的量以及可用片的大小、数量和配置有所不同。
图1B图示经配置的片的实施例。如图所示,应用存储器122的4kB具有存储于其上的2对1kB的片,第一对是片t4L 124和片t4R 126,第二对是片t5L 128和片t5R 130。如图所示,片对被划分为左片和右片。在其他实施例中,片对被划分为偶数片和奇数片。在该示例中,这4个片各自都具有按行和列布置的元素。片t4L 124和片t4R 126具有K行和N列的4字节元素(例如,单精度浮点数据),其中K=8,且N=32。片t5L 128和片t5R 130具有K行和N/2列的8字节元素(例如,双精度浮点数据)。由于双精度操作对象的宽度是单精度操作对象的两倍,因此该配置与用于提供片选项的调色板一致,将至少4kB的总存储提供给至少2个名称。图1A的四个片使用4个名称,每个名称对1kB的片命名,而图1B中的2个片对可使用2个名称来标识成对的片。在一些实施例中,片指令接受成对的片的名称作为操作对象。在操作中,可使用加载操作和存储操作从存储器加载片以及向存储器存储片。取决于所使用的指令编码方案,可用的应用存储器的量以及可用片的大小、数量和配置有所不同。
在一些实施例中,片参数是可定义的。例如,“调色板”用于提供片选项。示例性选项包括但不限于:片名称的数量、存储的行中的字节数、片中的行数和列数,等等。例如,片的最大“高度”(行数)可定义为:
片最大行=所构造的存储/(调色板名称的数量*每行的字节数)
由此,可写入应用,使得名称的固定使用将能够利用跨实现方式的不同存储大小。
使用矩阵(片)配置(“TILECONFIG”)指令完成对片的配置,其中,在所选择的调色板中定义特定的片使用。该声明包括要使用的片名称的数量、每个名称(片)的所请求的行数和列数,并且在一些实施例中包括每个片的所请求的数据类型。在一些实施例中,在TILECONFIG指令的执行期间执行一致性校验,以确定其匹配调色板条目的限制。
示例性片存储类型
图2图示矩阵存储装置的若干示例。在(A)中,片被存储在存储器中。如图所示,每“行”由四个紧缩数据元素组成。为了达到下一“行”,使用跨步值。注意,行可被连续地存储在存储器中。当片存储不映射底层存储器阵列行宽度时,跨步式存储器访问允许对一行以及随后对下一行的访问。
从存储器加载片以及向存储器存储片典型地是从应用存储器到紧缩数据行的跨步式访问。在一些实施例中,示例性TILELOAD和TILESTORE指令或将应用存储器作为加载操作指令中的TILE(片)操作对象的其他指令参考可重新开始用于针对每个指令处置(至多)2*行的页错误、未掩蔽的浮点异常和/或中断。
在(B)中,矩阵被存储在由多个寄存器组成的片中,这些寄存器诸如,紧缩数据寄存器(单指令多数据(single instruction,multipledata,SIMD)或向量寄存器)。在该示例中,片被叠加在三个物理寄存器上。典型地,使用连续的寄存器,然而,情况不必是这样。
在(C)中,矩阵被存储在可由在片操作中使用的融合乘法累加(fused multiplyaccumulate,FMA)电路访问的非寄存器存储装置中的片中。该存储装置可在FMA内部,或邻近FMA。此外,在一些实施例中,如下文所讨论,该存储装置可用于数据元素,而不是用于整个行或整个片。
经由CPUID报告针对TMMA体系结构的所支持的参数。在一些实施例中,信息列表包括最大高度和最大SIMD尺度。配置TMMA体系结构要求标识每个片的尺度、每个片的元素大小、以及调色板标识符。通过执行TILECONFIG指令来完成此种配置。
TILECONFIG指令的成功执行启用后续的TILE操作器。TILERELEASEALL指令清除片配置,并禁用TILE操作(直到下一TILECONFIG指令执行)。在一些实施例中,在使用片的上下文切换中使用XSAVE、XSTORE等。在一些实施例中,在XSAVE中使用2个XCR0比特,一个用于TILECONFIG元数据,并且一个比特与实际的片有效载荷数据相对应。
TILECONFIG不仅配置片使用,还设置状态变量,该状态变量指示在片经配置的情况下程序在代码区域中。实现方式可枚举对可与片区域一起使用的其他指令的限制,诸如,没有对现有寄存器组的使用,等等。
退出片区域典型地利用TILERELEASEALL指令来完成。该指令不取参数并迅速使所有片无效(指示数据不再需要任何保存或恢复),并且清除与处于片区域中对应的内部状态。
在一些实施例中,片操作将使超出由片配置指定的尺度的任何行和任何列归零。例如,随着每一行被写入,片操作将使超出所配置的列数(将元素的大小考虑在内)的数据归零。例如,对于64字节的行以及配置有10行和12列的片,写入FP32元素的操作将以12*4字节向前10行中的每一行写入输出/结果数据,并且使每一行中的其余的4*4字节归零。片操作还对前10个经配置的行之后的任何行完全归零。当使用具有64字节行的1K的片时,会存在16行,因此在该示例中,最后6行也会被归零。
在一些实施例中,当加载数据时,上下文恢复指令(例如,XRSTOR)强制使超出片的所配置的行的数据将被维持为零。如果没有有效配置,则所有行被归零。对片数据的XRSTOR能够加载超出那些所配置的列的列中的无用信息。XRSTOR对超出所配置的列数进行清除不应当是可能的,因为不存在与片配置相关联的元素宽度。
当将整个TILE存储区写入存储器时,上下文保存(例如,XSAVE)暴露整个TILE存储区。如果XRSTOR将无用数据加载到片的最右边部分中,则将由XSAVE保存那个数据。对于超出为每个片指定的数量的行,XSAVE将写入零。
在一些实施例中,片指令是可重新开始的。访问存储器的操作允许在页错误之后重新开始。凭借由控制和/或状态寄存器控制的对异常的掩蔽,处理浮点操作的计算指令也允许未掩蔽的浮点异常。
为了支持在这些事件后重新开始指令,这些指令将信息存储在下文详述的起始寄存器中。
矩阵(片)操作系统
示例性硬件支持
图3图示利用矩阵(片)操作加速器的系统的实施例。在该图示中,主机处理器/处理系统301将命令311(例如,矩阵操纵操作,诸如,算术或矩阵操纵操作、或加载和存储操作)传递至矩阵操作加速器307。然而,这以这种方式示出,仅用于讨论的目的。如稍后所详述,该加速器307可以是处理核心的部分。典型地,作为片操纵操作器指令的命令311会将片称为寄存器-寄存器(“reg-reg”)或寄存器-存储器(“reg-mem”)格式。诸如TILESTORE、TILELOAD、TILECONFIG等的其他命令不对片执行数据操作。命令可以是供加速器307处置的经解码的指令(例如,微操作)或宏指令。
在该示例中,一致性存储器接口303耦合至主机处理器/处理系统301和矩阵操作加速器307,使得它们能够共享存储器。图4和图5示出如何使用矩阵操作加速器来共享存储器的不同实施例。如图4中所示,主机处理器401和矩阵操作加速器电路405共享同一存储器403。图5图示其中主机处理器501和矩阵操作加速器505不共享存储器但可以访问彼此的存储器的实施例。例如,处理器501可访问片存储器507,并照常利用其主机存储器503。类似地,矩阵操作加速器505可访问主机存储器503,但更典型地使用其自身的存储器507。注意,这些存储器可以是不同类型的。
在一些实施例中,使用物理寄存器上的叠加结构来支持片。例如,取决于实现方式,片可以利用16个1024比特的寄存器、32个512比特的寄存器,等等。在一些实施例中,矩阵操作利用表示存储器的一个或多个紧缩区域(诸如,寄存器)的2维(2-D)数据结构。贯穿本说明书,这些2-D数据结构被称为片或片寄存器。
在一些实施例中,矩阵操作加速器307包括耦合至数据缓冲器305的多个FMA 309(在一些实现方式中,这些缓冲器305中的一个或多个被存储在如图所示的网格的FMA中)。数据缓冲器305对(例如,使用片加载或片存储指令)从存储器加载的片和/或要向存储器存储的片进行缓冲。数据缓冲器可以是例如多个寄存器。典型地,这些FMA被布置为能够读取和写入片的链式FMA 309的网格。在该示例中,矩阵操作加速器307用于使用片T0、T1和T2来执行矩阵乘法操作。片中的至少一个片被容纳在FMA网格309中。在一些实施例中,操作中的所有片都被存储在FMA网格309中。在其他实施例中,仅子集被存储在FMA网格309中。如图所示,T1被容纳,而T0和T2不被容纳。注意,A、B和C是指这些片的矩阵,这些片的矩阵可以占据或可以不占据片的整个空间。
图6图示使用片的矩阵乘法累加操作(“TMMA”)的实施例。
矩阵(片A 601)中的行数与串联的(链式)FMA的数量相匹配,这些串联的(链式)FMA包括计算的等待时间。实现方式可自由地在高度较小的网格上再循环,但是计算保持相同。
源/目的地向量来自具有N行的片(片C 605),并且FMA的网格611执行N个向量-矩阵操作,从而得到执行片的矩阵乘法的完整指令。片B 603是另一向量源,并将“广播”项提供给每个阶段中的FMA。
在操作中,在一些实施例中,(存储在片B 603中的)矩阵B的元素跨矩形FMA网格散布。(存储在片A 601中的)矩阵B使其行的元素被变换,以与矩形FMA网格的列尺度匹配。在网格中的每个FMA处,A和B的元素被相乘,并被加到(来自图中上方的)传入的被加数,并且传出的和被传递至下一行FMA(或最终输出)。
单个步骤的等待时间与K(矩阵B的行高)成比例,并且从属的TMMA典型地(在单片中或跨片)具有足够的源-目的地行以隐藏该等待时间。实现方式还可跨时间步长分割SIMD(紧缩数据元素)尺度M(矩阵A的行高),但是这仅改变K乘以的常数。当程序指定比由TMACC枚举的最大值小的K时,实现方式利用“掩蔽”或“早出”来自由地实现这一点。
整个TMMA的等待时间与N*K成比例。重复率与N成比例。每个TMMA指令的MAC的数量为N*K*M。
图7图示链式融合乘法累加指令的迭代的执行的子集的实施例。具体而言,这图示目的地的一个紧缩数据元素位置的迭代的执行电路。在该实施例中,链式融合乘法累加正在对有符号源进行操作,其中,累加器是输入数据大小的2倍。
第一有符号源(源1 701)和第二有符号源(源2 703)各自都具有四个紧缩数据元素。这些紧缩数据元素中的每一个都存储诸如浮点数据之类的有符号数据。第三有符号源(源3 709)具有两个紧缩数据元素,这些紧缩数据元素中的每一个都存储有符号数据。第一有符号源701的大小和第二有符号源703的大小是第三有符号源(初始值或先前结果)709的大小的一半。例如,第一有符号源701和第二有符号源703可具有32比特紧缩数据元素(例如,单精度浮点),而第三有符号源709可具有64比特紧缩数据元素(例如,双精度浮点)。
在该图示中,仅示出第一有符号源701和第二有符号源703的最高有效的两个紧缩数据元素位置以及第三有符号源709的最高有效的紧缩数据元素位置。当然,也会处理其他紧缩数据元素位置。
如图所示,成对地处理紧缩数据元素。例如,使用乘法器电路705将第一有符号源701的最高有效紧缩数据元素位置的数据和第二有符号源703的最高有效紧缩数据元素位置的数据相乘,并且使用乘法器电路707将来自第一有符号源701的次高有效紧缩数据元素位置的数据和来自第二有符号源703的次高有效紧缩数据元素位置的数据相乘。在一些实施例中,这些乘法器电路705和707重新用于其他紧缩数据元素位置。在其他实施例中,使用附加的乘法器电路,使得并行地处理紧缩数据元素。在一些上下文中,使用大小为有符号第三源709的大小的通道来完成并行执行。使用加法电路711将这些乘法中的每个乘法的结果相加。
(使用不同的加法器713或同一加法器711)将这些乘法的结果的加法的结果与来自有符号源3 709的最高有效紧缩数据元素位置的数据相加。
最终,第二加法的结果被存储到有符号目的地715中与来自有符号第三源709的所使用的紧缩数据元素位置相对应的紧缩数据元素位置中,或者如果有下一迭代,则该第二加法的结果被继续传递到该下一迭代。在一些实施例中,将写入掩码应用于此存储,使得如果对应的写入掩码(比特)被置位,则存储发生,并且如果对应的写入掩码(比特)未被置位,则存储不发生。
图8图示链式融合乘法累加指令的迭代的执行的子集的实施例。具体而言,这图示目的地的一个紧缩数据元素位置的迭代的执行电路。在该实施例中,链式融合乘法累加正在对有符号源进行操作,其中,累加器的大小是输入数据的大小的2倍。
第一有符号源(源1 801)和第二有符号源(源2 803)各自都具有四个紧缩数据元素。这些紧缩数据元素中的每一个都存储诸如整数数据之类的有符号数据。第三有符号源(源3 809)具有两个紧缩数据元素,这些紧缩数据元素中的每一个都存储有符号数据。第一有符号源801的大小和第二有符号源803的大小是第三有符号源809的大小的一半。例如,第一有符号源801和第二有符号源803可具有32比特紧缩数据元素(例如,单精度浮点),第三有符号源809可具有64比特紧缩数据元素(例如,双精度浮点)。
在该图示中,仅示出第一有符号源801和第二有符号源803的最高有效的两个紧缩数据元素位置以及第三有符号源809的最高有效的紧缩数据元素位置。当然,也会处理其他紧缩数据元素位置。
如图所示,成对地处理紧缩数据元素。例如,使用乘法器电路805将第一有符号源801的最高有效紧缩数据元素位置的数据和第二有符号源803的最高有效紧缩数据元素位置的数据相乘,并且使用乘法器电路807将来自第一有符号源801的次高有效紧缩数据元素位置的数据和来自第二有符号源803的次高有效紧缩数据元素位置的数据相乘。在一些实施例中,乘法器电路805和807在没有饱和的情况下利用无限精度执行乘法,并且使用加法器/饱和电路813在上溢的情况下将累加的结果饱和至正无穷或负无穷并在任何下溢的情况下将累加的结果饱和至零。在其他实施例中,乘法器电路805和807自身执行饱和。在一些实施例中,这些乘法器电路805和807重新用于其他紧缩数据元素位置。在其他实施例中,使用附加的乘法器电路,使得并行地处理紧缩数据元素。在一些上下文中,使用大小为有符号第三源(初始值或先前迭代结果)809的大小的通道来完成并行执行。使用加法/饱和电路813将多个乘法中的每个乘法的结果与有符号第三源809相加。
当加法导致过大的值时,加法/饱和(累加器)电路813保留操作对象的符号。具体而言,发生对多路加法与向目的地或下一迭代的写入之间的无限精度结果的饱和评估。当累加器813是浮点且输入项是整数时,乘积的和以及浮点累加器输入值被转换为无限精度值(具有数百比特的定点数),执行乘法结果与第三输入的加法,并执行向实际累加器类型的单次舍入。
无符号饱和意味着输出值被限于那个元素宽度的最大无符号数(全1)。有符号饱和意味着值被限于处于那个元素宽度的最小负数与最大正数之间的范围中(例如,对于字节,范围为从-128(=-2^7)到127(=2^7-1))。
加法和饱和校验的结果被存储到有符号结果中与来自有符号第三源809的所使用的紧缩数据元素位置相对应的紧缩数据元素位置中,或者如果有下一迭代,则该结果被继续传递到该下一迭代。在一些实施例中,将写入掩码应用于此存储,使得如果对应的写入掩码(比特)被置位,则存储发生,并且如果对应的写入掩码(比特)未被置位,则存储不发生。
图9图示链式融合乘法累加指令的迭代的执行的子集的实施例。具体而言,这图示目的地的一个紧缩数据元素位置的迭代的执行电路。在该实施例中,链式融合乘法累加正在对有符号源和无符号源进行操作,其中,累加器的大小是输入数据的大小的4倍。
第一有符号源(源1 901)和第二无符号源(源2 903)各自都具有四个紧缩数据元素。这些紧缩数据元素中的每一个都具有诸如浮点数据或整数数据之类的数据。第三有符号源(初始值或结果915)具有存储有符号数据的紧缩数据元素。第一源901的大小和第二源903的大小是第三有符号源915的大小的四分之一。例如,第一源901和第二源903可具有16比特紧缩数据元素(例如,字),并且第三有符号源915可具有64比特紧缩数据元素(例如,双精度浮点或64比特整数)。
在该图示中,仅示出第一源901和第二源903的最高有效的四个紧缩数据元素位置以及第三有符号源915的最高有效紧缩数据元素位置。当然,如果还有任何其他紧缩数据元素位置,则也会处理这些紧缩数据元素位置。
如图所示,按四元组处理紧缩数据元素。例如,使用乘法器电路905将第一源901的最高有效紧缩数据元素位置的数据和第二源903的最高有效紧缩数据元素位置的数据相乘,使用乘法器电路907将来自第一源901的次高有效紧缩数据元素位置的数据和来自第二源903的次高有效紧缩数据元素位置的数据相乘,使用乘法器电路909将来自第一源901的第三高有效紧缩数据元素位置的数据和来自第二源903的第三高有效紧缩数据元素位置的数据相乘,并且使用乘法器电路911将来自第一源901的最低有效紧缩数据元素位置的数据和来自第二源903的最低有效紧缩数据元素位置的数据相乘。在一些实施例中,在乘法之前,对第一源901的有符号紧缩数据元素进行符号扩展,并且对第二源903的无符号紧缩数据元素进行零扩展。
在一些实施例中,这些乘法器电路905-911重新用于其他紧缩数据元素位置。在其他实施例中,使用附加的乘法器电路,使得并行地处理紧缩数据元素。在一些上下文中,使用大小为有符号第三源915的大小的通道来完成并行执行。使用加法电路913将这些乘法中的每个乘法的结果相加。
(使用不同的加法器917或同一加法器913)将这些乘法的结果的加法的结果与来自有符号源3 915的最高有效紧缩数据元素位置的数据相加。
最终,第二加法的结果919被存储到有符号目的地中与来自有符号第三源915的所使用的紧缩数据元素位置相对应的紧缩数据元素位置中,或者被传递到下一迭代。在一些实施例中,将写入掩码应用于此存储,使得如果对应的写入掩码(比特)被置位,则存储发生,并且如果对应的写入掩码(比特)未被置位,则存储不发生。
图10图示链式融合乘法累加指令的迭代的执行的子集的实施例。具体而言,这图示目的地的一个紧缩数据元素位置的迭代的执行电路。在该实施例中,链式融合乘法累加正在对有符号源和无符号源进行操作,其中,累加器的大小是输入数据的大小的4倍。
第一有符号源1001和第二无符号源1003各自都具有四个紧缩数据元素。这些紧缩数据元素中的每一个都存储诸如浮点数据或整数数据之类的数据。第三有符号源1015(初始或先前结果)具有存储有符号数据的紧缩数据元素。第一源的大小和第二源的大小是第三有符号源1015(初始或先前结果)的大小的四分之一。例如,第一源和第二源可具有16比特紧缩数据元素(例如,字),并且第三有符号源1015(初始或先前结果)可具有64比特紧缩数据元素(例如,双精度浮点或64比特整数)。
在该图示中,示出第一有符号源1001和第二无符号源1003的最高有效的四个紧缩数据元素位置以及第三有符号源1015的最高有效紧缩数据元素位置。当然,如果还有任何其他紧缩数据元素位置,则也会处理这些紧缩数据元素位置。
如图所示,按四元组处理紧缩数据元素。例如,使用乘法器电路1005将第一有符号源1001的最高有效紧缩数据元素位置的数据和第二无符号源1003的最高有效紧缩数据元素位置的数据相乘,使用乘法器电路1007将来自第一有符号源1001的次高有效紧缩数据元素位置的数据和来自第二无符号源1003的次高有效紧缩数据元素位置的数据相乘,使用乘法器电路1009将来自第一有符号源1001的第三高有效紧缩数据元素位置的数据和来自第二无符号源1003的第三高有效紧缩数据元素位置的数据相乘,并且使用乘法器电路1011将来自第一有符号源1001的最低有效紧缩数据元素位置的数据和来自第二无符号源1003的最低有效紧缩数据元素位置的数据相乘。在一些实施例中,在乘法之前,对第一有符号源1001的有符号紧缩数据元素进行符号扩展,并且对第二无符号源1003的无符号紧缩数据元素进行零扩展。
在一些实施例中,这些乘法器电路1005-1011重新用于其他紧缩数据元素位置。在其他实施例中,使用附加的乘法器电路,使得并行地处理紧缩数据元素。在一些上下文中,使用大小为第三有符号源1015(初始或先前结果)的大小的通道来完成并行执行。使用加法器/饱和电路1013将这些乘法结果的加法的结果与来自第三有符号源1015(初始或先前结果)的最高有效紧缩数据元素位置的数据相加。
当加法导致对于有符号饱和过大或过小的值时,加法/饱和(累加器)电路1013保留操作数的符号。具体而言,对于多路加法与向目的地的写入之间的无限精度结果,饱和评估发生。当累加器1013是浮点且输入项是整数时,乘积的和以及浮点累加器输入值被转换为无限精度值(具有数百比特的定点数),执行乘法结果与第三输入的加法,并执行向实际累加器类型的单次舍入。
加法和饱和校验的结果1019被存储到有符号目的地中与来自第三有符号源1015(初始或先前结果)的所使用的紧缩数据元素位置相对应的紧缩数据元素位置中或者被传递到下一迭代。在一些实施例中,将写入掩码应用于此存储,使得如果对应的写入掩码(比特)被置位,则存储发生,并且如果对应的写入掩码(比特)未被置位,则存储不发生。
图11图示根据实施例的大小为2的幂的SIMD实现方式,其中,累加器使用大于至乘法器的输入的大小的输入大小。注意,(至乘法器的)源和累加器值可以是有符号值或无符号值。对于大小为输入大小的2倍的累加器(换言之,累加器输入值的大小是源的紧缩数据元素大小的2倍),表格1101图示不同的配置。对于字节大小的源,累加器使用大小为16比特的字或半精度浮点(half-precision floating-point,HPFP)值。对于字大小的源,累加器使用大小为32比特的32位整数或单精度浮点(single-precision floating-point,SPFP)值。对于SPFP或32比特整数大小的源,累加器使用大小为64比特的64比特整数或双精度浮点(double-precision floating-point,DPFP)值。
对于大小为输入大小的4倍的累加器(换言之,累加器输入值的大小是源的紧缩数据元素大小的4倍),表格1103图示不同的配置。对于字节大小的源,累加器使用大小为32比特的32比特整数或单精度浮点(SPFP)值。在一些实施例中,对于字大小的源,累加器使用大小为64比特的64比特整数或双精度浮点(DPFP)值。
对于大小为输入大小的8倍的累加器(换言之,累加器输入值的大小是源的紧缩数据元素大小的8倍),表格1105图示配置。对于字节大小的源,累加器使用64比特整数。
如之前所提示,矩阵操作电路可被包括在核心中,或者可作为外部加速器。图12图示利用矩阵操作电路的系统的实施例。在该图示中,多个实体与环形互连1245耦合。
多个核心(核心0 1201、核心1 1203、核心2 1205、以及核心N 1207)提供非基于片的指令支持。在一些实施例中,矩阵操作电路1251设于核心1203中,而在其他实施例中,矩阵操作电路1211和1213是在环形互连1245上可访问的。
此外,提供一个或多个存储器控制器1223-1225,以代表核心和/或矩阵操作电路来与存储器1233和1231通信。
图13图示处理器核心管线的实施例,该处理器核心管线支持使用片的矩阵操作。分支预测和解码电路1303执行对来自存储在指令存储装置1301中的指令的分支预测、对这些指令的解码和/或分支预测和解码两者。例如,本文中详述的指令可存储在指令存储装置中。在一些实现方式中,分开的电路用于分支预测,并且在一些实施例中,至少一些指令被解码为一个或多个微操作、微代码进入点、微指令、其他指令或使用微代码1305的其他控制信号。分支预测和解码电路1303可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现方式、可编程逻辑阵列(programmable logic array,PLA)、微代码只读存储器(read only memory,ROM)等。
分支预测和解码电路1303耦合至分配/重命名1307电路,在一些实施例中,该分配/重命名1307电路耦合至调度器电路1309。在一些实施例中,这些电路通过执行以下各项中的一项或多项来提供寄存器重命名、寄存器分配和/或调度功能:1)将逻辑操作对象值重命名为物理操作对象值(例如,一些实施例中的寄存器别名表);2)将状态比特和标志分配给经解码的指令;以及3)(例如,在一些实施例中,使用预留站)调度经解码的指令以供在指令池外部的执行电路上执行。
调度器电路1309表示任意数量的不同调度器,包括预留站、中央指令窗口等。调度器电路1309耦合至(一个或多个)物理寄存器堆1315,或者包括(一个或多个)物理寄存器堆1315。(一个或多个)物理寄存器堆1315中的每一个表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)、片,等等。在一个实施例中,(一个或多个)物理寄存器堆1315包括向量寄存器电路、写入掩码寄存器电路和标量寄存器电路。这些寄存器电路可提供体系结构向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器堆1315被引退电路1317覆盖,以图示可实现寄存器重命名和乱序执行的各种方式(诸如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器堆、使用(一个或多个)未来的堆、(一个或多个)历史缓冲器、(一个或多个)引退寄存器堆、使用寄存器映射和寄存器池,等等)。引退电路1317和(一个或多个)物理寄存器堆1315耦合至执行电路1311。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序体系结构中使用寄存器重命名。虽然处理器的所图示的实施例也可包括分开的指令和数据缓存单元以及共享的L2缓存单元,但替代性实施例也可具有用于指令和数据两者的单个内部缓存,诸如例如,第一级(L1)内部缓存、或多个级别的内部缓存。在一些实施例中,系统可包括内部缓存和处于核心和/或处理器外部的外部缓存的组合。或者,所有的缓存都可以在核心和/或处理器的外部。
执行电路1311是一组一个或多个执行单元,包括标量电路1321、向量/SIMD电路1323和矩阵操作电路1327、以及用于访问缓存1313的存储器访问电路1325。执行电路执行各种操作(例如,移位、加法、减法、乘法),并且对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可包括仅一个执行单元或全都执行所有功能的多个执行单元。标量电路1321执行标量操作,向量/SIMD电路1323执行向量/SIMD操作,并且矩阵操作电路1327执行本文中详述的矩阵(片)操作。
作为示例,示例性寄存器重命名、乱序发出/执行核心体系结构可以通过以下方式实现管线:1)指令取得电路执行取得和长度解码阶段;2)分支和解码电路1303执行解码阶段;3)分配/重命名1307电路执行分配阶段和重命名阶段;4)调度器电路1309执行调度阶段;5)(一个或多个)物理寄存器堆(其耦合至调度器电路1309和分配/重命名1307电路或者被包括在调度器电路1309和分配/重命名1307电路中)和存储器单元执行寄存器读取/存储器读取阶段;执行电路1300执行执行阶段;6)存储器单元和(一个或多个)物理寄存器堆单元执行写回/存储器写入阶段;7)在异常处置阶段中可能涉及各种单元;并且8)引退单元和(一个或多个)物理寄存器堆单元执行提交阶段。
核心可支持一个或多个指令集(例如,x86指令集(具有与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集(具有诸如NEON等任选附加扩展)),其中包括本文中描述的(一个或多个)指令。在一个实施例中,核心1390包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。
应当理解,核心可支持多线程化(执行两个或更多个并行的操作或线程集合),并且可以按各种方式来完成该多线程化,各种方式包括时分多线程化、同时多线程化(其中单个物理核心为物理核心正在同时多线程化的线程中的每一个线程提供逻辑核心)、或其组合(例如,时分取出和解码以及此后的诸如超线程化技术中的同时多线程化)。
图14图示处理器核心管线的实施例,该处理器核心管线支持使用片的矩阵操作。分支预测和解码电路1403执行对来自存储在指令存储装置1401中的指令的分支预测、对这些指令的解码和/或分支预测和解码两者。例如,本文中详述的指令可存储在指令存储装置中。在一些实现方式中,分开的电路用于分支预测,并且在一些实施例中,至少一些指令被解码为一个或多个微操作、微代码进入点、微指令、其他指令或使用微代码1405的其他控制信号。分支预测和解码电路1403可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。
分支预测和解码电路1403耦合至分配/重命名1407电路,在一些实施例中,该分配/重命名1407电路耦合至调度器电路1409。在一些实施例中,这些电路通过执行以下各项中的一项或多项来提供寄存器重命名、寄存器分配和/或调度功能:1)将逻辑操作对象值重命名为物理操作对象值(例如,一些实施例中的寄存器别名表);2)将状态比特和标志分配给经解码的指令;以及3)(例如,在一些实施例中,使用预留站)调度经解码的指令以供在指令池外部的执行电路上执行。
调度器电路1409表示任意数量的不同调度器,包括预留站、中央指令窗口等。(一个或多个)调度器单元调度器电路1409耦合至(一个或多个)物理寄存器堆1415,或者包括(一个或多个)物理寄存器堆1415。(一个或多个)物理寄存器堆1415中的每一个表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)、片,等等。在一个实施例中,(一个或多个)物理寄存器堆1415包括向量寄存器电路、写入掩码寄存器电路和标量寄存器电路。这些寄存器电路可提供体系结构向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器堆1415被引退电路1417覆盖,以图示可实现寄存器重命名和乱序执行的各种方式(诸如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器堆、使用(一个或多个)未来的堆、(一个或多个)历史缓冲器、(一个或多个)引退寄存器堆、使用寄存器映射和寄存器池,等等)。引退电路1417和(一个或多个)物理寄存器堆1415耦合至执行电路1411。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序体系结构中使用寄存器重命名。虽然处理器的所图示的实施例也可包括分开的指令和数据缓存单元以及共享的L2缓存单元,但替代性实施例也可具有用于指令和数据两者的单个内部缓存,诸如例如,第一级(L1)内部缓存、或多个级别的内部缓存。在一些实施例中,系统可包括内部缓存和处于核心和/或处理器外部的外部缓存的组合。或者,所有的缓存都可以在核心和/或处理器的外部。
执行电路1411包括一组一个或多个执行电路1427、以及用于访问缓存1413的一组一个或多个存储器访问电路1425。执行电路1427执行本文中详述的矩阵(片)操作。
作为示例,示例性寄存器重命名、乱序发出/执行核心体系结构可以通过以下方式实现管线:1)指令取得电路执行取得和长度解码阶段;2)分支和解码电路1403执行解码阶段;3)分配/重命名1407电路执行分配阶段和重命名阶段;4)调度器电路1409执行调度阶段;5)(一个或多个)物理寄存器堆(其耦合至调度器电路1409和分配/重命名1407电路或者被包括在调度器电路1409和分配/重命名1307电路中)和存储器单元执行寄存器读取/存储器读取阶段;执行电路1411执行执行阶段;6)存储器单元和(一个或多个)物理寄存器堆单元执行写回/存储器写入阶段;7)在异常处置阶段中可能涉及各种单元;并且8)引退单元和(一个或多个)物理寄存器堆单元执行提交阶段。
核心可支持一个或多个指令集(例如,x86指令集(具有与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集(具有诸如NEON等任选附加扩展)),其中包括本文中描述的(一个或多个)指令。在一个实施例中,核心1490包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。
应当理解,核心可支持多线程化(执行两个或更多个并行的操作或线程集合),并且可以按各种方式来完成该多线程化,各种方式包括时分多线程化、同时多线程化(其中单个物理核心为物理核心正在同时多线程化的线程中的每一个线程提供逻辑核心)、或其组合(例如,时分取出和解码以及此后的诸如超线程化技术中的同时多线程化)。
布局
贯穿本说明书,使用行为主的数据布局来表达数据。列为主的用户应当根据项的定向来变换这些项。图15图示按行为主格式和列为主格式表达的矩阵的示例。如图所示,矩阵A是2×3矩阵。当该矩阵按行为主的格式存储时,行的数据元素是连续的。当该矩阵按列为主的格式存储时,列的数据元素是连续的。AT*BT=(BA)T是矩阵的公知属性,其中,上标T表示变换(transform)。按行为主的数据那样来读取列为主的数据导致看起来像变换矩阵的矩阵。
在一些实施例中,在硬件中利用行为主的语义,并且列为主的数据将交换操作对象顺序并使结果是矩阵的变换,但是对于从存储器的后续列为主的读取,其是正确的、未经变换的矩阵
例如,如果具有两个要相乘的列为主的矩阵:
输入矩阵将按如下方式被存储在线性存储器中(列为主):
a c e b d f
以及
g h i j k l.
以尺度2×3和3×2将那些矩阵读取为列为主的,则它们将表现为:
a c e 以及 g h
b d f i j
k l
交换顺序和矩阵乘法:
变换矩阵移出,并且随后可按行为主的顺序被存储:
ag+bh cg+dh eg+fh ai+bj ci+dj ei+fj ak+bl ck+dl ek+fl
并且在后续的列为主的计算中被使用,其是正确的未经变换的矩阵:
示例性使用
图16图示矩阵(例如,片)的使用的示例。在该示例中,矩阵C 1601包括两个片,矩阵A 1603包括一个片,并且矩阵B 1605包括两个片。该图示出用于计算矩阵乘法的算法的内循环的示例。在该示例中,来自矩阵C1601的两个结果片tmm0和tmm1用于将中间结果累加。当来自矩阵A 1603的一个片(tmm2)乘以来自矩阵B 1605的两个片时,这个片(tmm2)被重新使用2次。指针用于从箭头所指示方向加载新的A矩阵(片)和两个新的B矩阵(例如,片)。未示出的外循环调整用于C片的指针。
如图所示的示例性代码包括片配置指令的使用,并且被执行以配置片使用,加载片,用于处理片的循环,将片存储到存储器,并释放片使用。
图17图示矩阵(例如,片)的使用的实施例。在1701处,配置片使用。例如,执行TILECONFIG指令以配置片使用,包括设置每个片的行数和列数。典型地,在1703处,从存储器加载至少一个矩阵(片)。在1705处,使用矩阵(例如,片)来执行至少一个矩阵(片)操作。在1707处,将至少一个矩阵(片)向外存储到存储器,并且在1709处,可发生上下文切换。
示例性配置
片配置硬件支持
如上文所讨论,片使用通常需要在使用前进行配置。例如,可能不需要完全使用所有的行和列。在一些实施例中不配置这些行和列不仅节省了功率,而且配置可被用于判定操作是否将生成错误。例如,如果M和L不相同,则(N×M)*(L×N)形式的矩阵乘法典型地将不起作用。
在一些实施例中,在使用利用片的矩阵之前,将配置片支持。例如,配置每个片有多少行和多少列、将使用的片,等等。TILECONFIG指令是对计算机自身的改进,因为它提供对配置计算机以使用(作为处理器核心的部分的、或作为外部设备的)矩阵加速器的支持。具体而言,TILECONFIG指令的执行使得配置从存储器被检取,并被应用于矩阵加速器内的矩阵(片)设置。
片使用配置
图18图示根据实施例的对片的使用的配置的支持。存储器1801包含要被支持的矩阵(例如,片)的片描述1803。
处理器/核心1805的指令执行资源1811将片描述1803的多个方面存储到片配置1817中。片配置1817包括用于详述配置了用于调色板的什么片(每个片中的行数和列数)的调色板表1813以及矩阵支持在使用中的标记。具体而言,指令执行资源1811被配置成用于按片配置1817所指定的来使用片。指令执行资源1811还可包括用于指示片使用的机器特定寄存器或配置寄存器。还设置附加的值,诸如,使用中(in-use)值和开始(start)值。片配置1817利用(一个或多个)寄存器1819来存储片使用和配置信息。
图19图示要支持的矩阵(例如,片)的描述的实施例。这是在STTILECFG指令的执行时被存储的描述。在该示例中,每个字段为字节。在字节[0]中,存储调色板ID 1901。调色板ID用于对调色板表1813进行索引,该调色板表1813如由配置所定义、根据调色板ID来存储片中的字节数以及与该ID相关联的片的每行的字节。
字节1存储将被存储在“startRow(起始行)”寄存器1903中的值,并且字节2存储将被存储在寄存器startP(起始对)1905中的值。为了支持在这些事件后重新开始指令,这些指令将信息存储在这些寄存器中。为了支持在诸如上文详述的那些事件之类的中断事件之后重新开始指令,这些指令将信息存储在这些寄存器中。startRow值指示应当被用于重新开始的行。startP值指示当对被使用时用于存储操作的行内的位置,并且在一些实施例中,该startP值指示(对的较低片中的)行的下半部或(对的较高片中的)行的上半部。一般而言,不需要行(列)中的该位置。
成功地执行矩阵(片)指令将会将startRow和startP两者设置为零,TILECONFIG和STTILECFG是例外。
在不重新开始被中断的矩阵(片)指令的任何时刻,使startRow和startP值归零是软件的职责。例如,未掩蔽的浮点异常处置程序可决定在软件中完成操作,并且将程序计数器值改变为另一指令,通常是下一指令。在这种情况下,在恢复程序之前,软件异常处置程序必须使由操作系统呈现给该软件异常处置程序的异常中的startRow和startP值归零。操作系统随后将使用恢复指令来重新加载那些值。
字节3存储片的对的指示(每片1b)1907。
字节16-17存储片0的行数1913和列数1915,字节18-19存储片1的行数和列数,以此类推。换言之,每个2字节组指定片的行数和列数。如果2字节的组不用于标识片参数,则它们应当具有值零。为比实现限制或调色板限制更多的片指定片参数导致错误。未配置的片用0行0列被设置为初始状态。
最终,存储器中的配置典型地以诸如用于若干连续字节的全零之类的结尾描述来结束。
示例性片和片配置存储
图20(A)-图20(D)图示(一个或多个)寄存器1819的示例。图20(A)图示多个寄存器1819。如所示,每个片(TMM0 2001...TMMN 2003)具有分开的寄存器,其中每个寄存器存储那个特定片的行大小和列大小。StartP2011和StartRow 2013被存储在分开的寄存器中。一个或多个状态寄存器2015被置位(例如,TILES_CONFIGURED=1)以指示片被配置以供使用。
图20(B)图示多个寄存器1819。如所示,每个片具有用于该片的行和列的分开的寄存器。例如,TMM0行配置2021、TMM0列配置2023、StartP2011和StartRow 2013被存储在分开的寄存器中。一个或多个状态寄存器2015被置位(例如,TILES_CONFIGURED=1)以指示片被配置以供使用。
图20(C)图示单个寄存器1819。如图所示,该寄存器将片配置(每片的行和列)2031、StartP 2011和StartRow 2013存储在作为紧缩数据寄存器的单个寄存器中。一个或多个状态寄存器2015被置位(例如,TILES_CONFIGURED=1)以指示片被配置以供使用。
图20(D)图示多个寄存器1819。如图所示,单个寄存器存储片配置(每片的行和列)2031。StartP和StartRow被存储在分开的寄存器2011和2013中。一个或多个状态寄存器2015被置位(例如,TILES_CONFIGURED=1)以指示片被配置以供使用。
构想了其他组合,诸如,将开始寄存器组合到单个寄存器中,在该单个寄存器中,这些开始寄存器被分开显示,等等。
本文中详述了用于将来自第一源(例如,片(矩阵操作对象))的所标识的行从第一精度(例如,FP32)转换至第二精度(例如,FP16/BF16)并将第二精度数据元素与具有第二精度数据元素的第二源交织在目的地中的一个或多个指令的实施例。交织可以有所不同。在一些实施例中,片数据元素被放置在目的地的32比特元素(它可以是一种逻辑构造)的较高的16比特中,而第二源被假定为包含该高16比特中的元素,这些元素随后被向左移位16比特并被放置在目的地的低16比特中。替代性实施例逆转次序和/或移位方向,并假定第二源保持低16比特中的值。
本文中详述了用于将来自源/目的地(例如,片(矩阵操作对象))的所标识的行从第一精度(例如,FP32)转换至第二精度(例如,FP16/BF16)并将第二精度数据元素与具有第二精度数据元素的第二源交织的一个或多个指令的实施例。交织可以有所不同。在一些实施例中,片数据元素被放置在源/目的地的32比特元素(它可以是一种逻辑构造)的较高的16比特中,而第二源被假定为包含该高16比特中的元素,这些元素随后被向左移位16比特并被放置在目的地的低16比特中。替代性实施例逆转次序和/或移位方向,并假定第二源保持低16比特中的值。
如上文所提及,用于通用矩阵乘法(被称为GEMM)的特殊硬件是用于改善诸如深度学习之类的某些应用的峰值计算性能(和能效)的好的选择。只要输出元素具有足够的比特(即,多于输入),这些应用中的一些应用(包括深度学习)就可以在不损失准确性的情况下对具有相对少的比特的输入数据元素操作。
在某些实施例中,一种16比特浮点格式是16比特宽电气与电子工程师协会(IEEE)(例如,IEEE 754标准)半精度二进制浮点格式(IEEE float16),其具有符号字段(1比特宽)、指数字段(5比特宽)和尾数(有效数字精度)字段(隐式地存储的11比特,即,显式地存储的10比特宽)。在某些实施例中,另一16比特浮点格式是16比特宽brain浮点格式(bfloat16),其具有符号字段(1比特宽)、指数字段(8比特宽)和尾数(有效数字精度)字段(隐式地存储的8比特,即,显式地存储的7比特宽)。在某些实施例中,假定尾数(有效数字精度)字段具有值为1的隐式前导比特,除非指数字段存储有全零。此外,32比特浮点格式可包括binary32(根据IEEE标准),其在本文中有时被称为“单精度”或“fp32”,例如,具有符号字段(1比特宽)、指数字段(8比特宽)和尾数(有效数字精度)字段(隐式地存储的24比特,即,显式地存储的23比特宽)。
在一些实施例中,指令的操作码的助记符为TCVTROWPS2PHIE(例如,片转换行单精度到半精度交织(Tile Convert Row Single Precision 2Half PrecisionInterleave))。指令包括用于操作码的一个或多个字段。示例性指令内容如在以下表格中所指示,并且示例性格式在稍后提供。
取决于实现方式,(一个或多个)源的以及目的地的数据元素在大小上为32比特的或16比特的。在一些实施例中,在至少一个源与目的地之间,数据元素大小是不同的。在一些实施例中,舍入模式(就近向偶舍入、向下舍入、向上舍入、截断等)通过控制寄存器(例如,MXSR)来指定。在一些实施例中,指令使用VEX前缀,并且操作对象通过REG(w)和/或R/M(r)来标识。在一些实施例中,SIB寻址被使用。可被使用的格式的更多详情在稍后进行详述。
图21图示对将第一源的数据元素下转换并将其与同一类型的数据元素交织在目的地中的指令的执行进行说明的实施例。第一源2102是具有两行的片。这些行中的每个行具有四个32比特的值。第二源2104充当源和目的地(源/目的地)。该源/目的地也是片。在该示例中,第二源2104的数据元素各自是16比特的。然而,第二源2104也可使用32比特数据元素,其中这些数据元素在每一半(较高的一半和较低的一半)中存储16比特值。
行标识符(来自立即数或来自寄存器中存储的值)2106向执行电路2114(例如,稍早时详述的矩阵操作电路)指示第一源2102的行0要使用下转换电路2116被下转换(例如,从FP32下转换至FP16或BF16)。
经下转换的值被传递至交织电路2118,交织电路2118将这些经下转换的值与源/目的地2104的、具有相同的经下转换类型的数据元素进行交织。在该示例中,交织涉及:将源/目的地2104的数据元素移位(并放置在32比特数据元素或逻辑32比特数据元素的较低的一半中),以及将经下转换的元素交织到32比特数据元素或逻辑32比特数据元素的较高的一半中,以形成源/目的地2120(操作后)。在该示例中,源/目的地2120(操作后)的其余行被归零。然而,在其他实施例中,这些元素被单独留出。在一些实施例中,索引指示要进行下转换的行以及针对其要在目的地中发生交织的行。
图22图示对将第一源的数据元素下转换并将其与同一类型的数据元素交织在目的地中的指令的执行进行说明的实施例。第一源2202是具有两行的片。这些行中的每个行具有四个32比特的值。第二源2204是向量或SIMD寄存器。在该示例中,第二源2204的数据元素各自是16比特的。然而,第二源2204也可使用32比特数据元素,其中这些数据元素在每一半(较高的一半和较低的一半)中存储16比特值。
行标识符(来自立即数或来自寄存器中存储的值)2106向执行电路2114(例如,稍早时详述的矩阵操作电路)指示第一源2102的行0要使用下转换电路2116被下转换(例如,从FP32下转换至FP16或BF16)。
经下转换的值被传递至交织电路2118,交织电路2118将这些经下转换的值与源2204的、具有相同的经下转换类型的数据元素进行交织。在该示例中,交织涉及:将源2204的数据元素移位(并放置在32比特数据元素或逻辑32比特数据元素的较低的一半中),以及将经下转换的元素交织到要被存储在目的地2220中的、32比特数据元素或逻辑32比特数据元素的较高的一半中。在该示例中,目的地2220的其余行被归零。然而,在其他实施例中,这些元素被单独留出。在一些实施例中,索引指示要进行下转换的行以及针对其要在目的地中发生交织的行。
执行的(一个或多个)示例性方法
图23是图示核心或处理器对TCVTROWPS2PHIE指令作出响应的框流程图。如流程图示2300中所示,在2301处,取得单个指令,该单个指令具有用于标识操作码的一个或多个字段、用于标识源/目的地操作对象的位置的一个或多个字段、用于标识源操作对象的位置的一个或多个字段、以及用于指定要被用于对源/目的地操作对象中的行进行索引的索引值的一个或多个字段,其中操作码用于指示执行电路要进行:对源/目的地操作对象的被索引的行的数据元素进行下转换,以及将经下转换的元素与源/目的地的数据元素进行交织。
在一些实施例中,所标识的源/目的地操作对象是片寄存器。例如,在使用处理器的物理寄存器堆(或例如使用一个或多个二维(two-dimensional,2D)(例如,AMX)片寄存器(例如,从图3中的数据缓冲器305形成的片寄存器),在某些实施例中,这些片寄存器与任何标量和/或向量(例如,一维数组)寄存器分开)来存储矩阵(例如,片)的实施例中,例如,当矩阵(例如,片)是向量寄存器的集合、是具有相同类型的向量寄存器(无论是128比特寄存器、256比特寄存器、还是512比特寄存器)时,由于目的地元素的宽度是源元素的两倍,因此在源中具有一对16比特单精度浮点格式值允许高效的使用。当矩阵被存储在(例如,AMX)片寄存器中时,也可以实现此类高效使用。在其他实施例中,具有16比特浮点元素的单个源向量被转换为宽度为源向量的宽度的一半的目的地向量中存储的32比特元素。
在一些实施例中,所标识的源/目的地操作对象是向量或SIMD寄存器。
在一些实施例中,所标识的源操作对象是片寄存器。在一些实施例中,所标识的源操作对象是向量或SIMD寄存器。
在一些实施例中,索引值在立即数中被指定。在一些实施例中,索引值在所标识的寄存器中被指定。
在一些实施例中,在2302处,将所取得的单个指令转译为第二ISA的一个或多个指令。
在一些实施例中,在2303处,将单个指令转译为第二ISA的一个或多个指令。
由解码电路(诸如本文中详述的解码电路)对所取得的指令(或第二ISA的一个或多个指令)进行解码。在所图示的系统的上下文中,解码电路可以是至少参考图13、图14等来图示和描述的解码电路。
在2305处,(根据需要)调度经解码的指令的执行,这是可选的(如其虚线边框所指示),这体现在其可以在不同的时间发生,或者根本不发生。
在2307处,如由操作码指定的那样来执行经解码的(一个或多个)指令。
参考图3-图14等来进一步图示和描述了示例执行电路。在一些实施例中,执行电路引起由矩阵操作加速器进行的执行(例如,迁移至矩阵操作加速器),该矩阵操作加速器诸如被图示和描述为加速器307(图3)的加速器。在一些实施例中,执行电路是矩阵操作电路,诸如,矩阵操作电路405(图4)、505(图5)或1213(图12)和1327(图13)。
在一些实施例中,在2309处,提交或引退指令,这是可选的(如其虚线边框所指示),这体现在其可以在不同的时间发生,或者根本不发生。
图24是图示核心或处理器对TCVTROWPS2PHIE指令作出响应的框流程图。如流程图示2400中所示,在2401处,取得单个指令,该单个指令具有用于指定操作码的一个或多个字段、用于指定第一源操作对象的位置的一个或多个字段、用于指定第二源操作对象的位置的一个或多个字段、用于指定目的地操作对象的位置的一个或多个字段、以及用于指定要被用于对第一源操作对象中的行进行索引的索引值的一个或多个字段,其中操作码用于指示执行电路要进行:对第一源操作对象的被索引的行的数据元素进行下转换,将经下转换的元素与第二源操作对象的数据元素进行交织,以及将经交织的元素存储在目的地操作对象中。
在一些实施例中,所标识的源/目的地操作对象是片寄存器。例如,在使用处理器的物理寄存器堆(或例如使用一个或多个二维(two-dimensional,2D)(例如,AMX)片寄存器(例如,从图3中的数据缓冲器305形成的片寄存器),在某些实施例中,这些片寄存器与任何标量和/或向量(例如,一维数组)寄存器分开)来存储矩阵(例如,片)的实施例中,例如,当矩阵(例如,片)是向量寄存器的集合、是具有相同类型的向量寄存器(无论是128比特寄存器、256比特寄存器、还是512比特寄存器)时,由于目的地元素的宽度是源元素的两倍,因此在源中具有一对16比特单精度浮点格式值允许高效的使用。当矩阵被存储在(例如,AMX)片寄存器中时,也可以实现此类高效使用。在其他实施例中,具有16比特浮点元素的单个源向量被转换为宽度为源向量的宽度的一半的目的地向量中存储的32比特元素。
在一些实施例中,所标识的源/目的地操作对象是向量或SIMD寄存器。
在一些实施例中,所标识的源操作对象是片寄存器。在一些实施例中,所标识的源操作对象是向量或SIMD寄存器。
在一些实施例中,索引值在立即数中被指定。在一些实施例中,索引值在所标识的寄存器中被指定。
在一些实施例中,在2402处,将所取得的单个指令转译为第二ISA的一个或多个指令。
在一些实施例中,在2403处,将单个指令转译为第二ISA的一个或多个指令。
由解码电路(诸如本文中详述的解码电路)对所取得的指令(或第二ISA的一个或多个指令)进行解码。在所图示的系统的上下文中,解码电路可以是至少参考图13、图14等来图示和描述的解码电路。
在2405处,(根据需要)调度经解码的指令的执行,这是可选的(如其虚线边框所指示),这体现在其可以在不同的时间发生,或者根本不发生。
在2407处,如由操作码指定的那样来执行经解码的(一个或多个)指令。
参考图3-图14等来进一步图示和描述了示例执行电路。在一些实施例中,执行电路引起由矩阵操作加速器进行的执行(例如,迁移至矩阵操作加速器),该矩阵操作加速器诸如被图示和描述为加速器307(图3)的加速器。在一些实施例中,执行电路是矩阵操作电路,诸如,矩阵操作电路405(图4)、505(图5)或1213(图12)和1327(图13)。
在一些实施例中,在2409处,提交或引退指令,这是可选的(如其虚线边框所指示),这体现在其可以在不同的时间发生,或者根本不发生。
图25图示针对TCVTROWPS2PHIE指令的执行的伪代码的示例。
以上实施例可采用若干种不同类型的体系结构、系统和指令格式来具体化,这些体系结构、系统和指令格式的示例在下文进行详述。
示例性计算机体系结构
下面详细描述示例性计算机体系结构。本领域中已知的用于膝上型电脑、桌面型电脑、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(digital signal processor,DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、以及大量各种其他电子设备的其他系统设计和配置也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的各种系统或电子设备一般都是适当的。
图26图示了示例性系统的实施例。多处理器系统2600是一种点对点互连系统,并包括多个处理器,其中包括经由点到点互连2650耦合的第一处理器2670和第二处理器2680。在一些实施例中,第一处理器2670和第二处理器2680是同构的。在一些实施例中,第一处理器2670和第二处理器2680是异构的。
处理器2670和2680被示为分别包括集成存储器控制器(integrated memorycontroller,IMC)单元电路2672和2682。处理器2670还包括作为其互连控制器单元的部分的点到点(point-to-point,P-P)接口2676和2678;类似地,第二处理器2680包括P-P接口2686和2688。处理器2670、2680可以利用点到点(P-P)接口电路2678、2688经由P-P互连2650交换信息。IMC 2672和2682将处理器2670、2680耦合到各自的存储器,即存储器2632和存储器2634,这些存储器可以是在本地附接到各个处理器的主存储器的一部分。
处理器2670、2680可以各自利用点到点接口电路2676、2694、2686、2698,经由各个P-P互连2652、2654来与芯片组2690交换信息。芯片组2690可以可选地经由高性能接口2692与协处理器2638交换信息。在一些实施例中,协处理器2638是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享缓存(未示出)可以被包括在任一处理器2670、2680中,或者在两个处理器之外但经由P-P互连与这些处理器相连接,从而使得:如果一处理器被置于低功率模式,任一个或两个处理器的本地缓存信息也可以被存储在该共享缓存中。
芯片组2690可以经由接口2696耦合到第一互连2616。在一些实施例中,第一互连2616可以是外围组件互连(Peripheral Component Interconnect,PCI)互连,或者是诸如PCI快速(PCI Express)互连或者另一I/O互连之类的互连。在一些实施例中,这些互连中的一个耦合到功率控制单元(power control unit,PCU)2617,PCU 2617可以包括电路、软件和/或固件来执行关于处理器2670、2680和/或协处理器2638的功率管理操作。PCU 2617向电压调节器提供控制信息,以使得电压调节器生成适当的调节电压。PCU 2617还提供控制信息以控制所生成的操作电压。在各实施例中,PCU 2617可以包括各种功率管理逻辑单元(电路)来执行基于硬件的功率管理。这种功率管理可以是完全由处理器控制的(例如,由各种处理器硬件控制,并且可以由工作负载和/或功率约束、热约束或其他处理器约束所触发),和/或功率管理可以响应于外部源而被执行(例如平台或功率管理源或系统软件)。
PCU 2617被图示为作为与处理器2670和/或处理器2680分开的逻辑而存在。在其他情况下,PCU 2617可以在处理器2670或2680的核心(未示出)中给定的一个或多个核心上执行。在一些情况下,PCU 2617可以被实现为微控制器(专用的或通用的)或者其他控制逻辑,其被配置为执行其自己的专用功率管理代码(有时称为P代码)。在另外的其他实施例中,PCU 2617要执行的功率管理操作可以被实现在处理器外部,例如借由单独的功率管理集成电路(power management integrated circuit,PMIC)或者在处理器外部的另一组件来实现。在另外的其他实施例中,PCU 2617要执行的功率管理操作可被实现在BIOS或其他系统软件内。
各种I/O设备2614以及互连(总线)桥2618可以耦合到第一互连2616,互连(总线)桥2618将第一互连2616耦合到第二互连2620。在一些实施例中,一个或多个额外的处理器2615被耦合到第一互连2616,例如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如图形加速器或数字信号处理(digital signal processing,DSP)单元)、现场可编程门阵列(field programmable gate array,FPGA)、或者任何其他处理器。在一些实施例中,第二互连2620可以是低引脚数(low pin count,LPC)互连。各种设备可以耦合到第二互连2620,这些设备例如包括键盘和/或鼠标2622、通信设备2627、以及存储单元电路2628。存储单元电路2628可以是盘驱动器或者其他大容量存储设备,其在一些实施例中可包括指令/代码和数据2630。另外,音频I/O 2624可以耦合到第二互连2620。注意,除了上述的点到点体系结构以外其他体系结构也是可能的。例如,诸如多处理器系统2600之类的系统可以实现多点分支(multi-drop)互连或者其他这种体系结构,而不是点到点体系结构。
示例性核心体系结构、处理器和计算机体系结构
处理器核心可以按不同的方式、为了不同的目的、在不同的处理器中实现。例如,这些核心的实现方式可以包括:1)通用有序核心,针对通用计算目的;2)高性能通用乱序核心,针对通用计算目的;3)专用核心,主要针对图形和/或科学(吞吐量)计算目的。不同处理器的实现方式可以包括:1)CPU,包括针对通用计算目的的一个或多个通用有序核心和/或针对通用计算目的的一个或多个通用乱序核心;以及2)协处理器,包括主要针对图形和/或科学(吞吐量)目的的一个或多个专用核心。这些不同处理器导致不同的计算机系统体系结构,这些体系结构可以包括:1)协处理器与CPU在分开的芯片上;2)协处理器与CPU在同一封装中分开的管芯上;3)协处理器与CPU在同一管芯上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可以在与所描述的CPU(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)同一管芯上包括上述的协处理器以及另外的功能。接下来描述示例性核心体系结构,然后是对示例性处理器和计算机体系结构的描述。
图27图示了示例处理器2700的实施例的框图,该处理器2700可以具有多于一个的核心,可以具有集成存储器控制器,并且可以具有集成图形器件。实线框图示的处理器2700具有单个核心2702(A)、系统代理2710和一组一个或多个互连控制器单元电路2716,而可选地添加的虚线框将替代性处理器2700图示为具有多个核心2702(A)-(N)、系统代理单元电路2710中的一组一个或多个集成存储器控制单元电路2714、专用逻辑2708以及一组一个或多个互连控制器单元电路2716。注意,处理器2700可以是图26的处理器2670或2680或者协处理器2638或2615之一。
从而,处理器2700的不同实现方式可以包括:1)CPU,其中专用逻辑2708是集成图形和/或科学(吞吐量)逻辑(可以包括一个或多个核心,未示出),核心2702(A)-(N)是一个或多个通用核心(例如,通用有序核心、通用乱序核心、或这两者的组合);2)协处理器,其中核心2702(A)-(N)是主要针对图形和/或科学(吞吐量)目的的大量专用核心;以及3)协处理器,其中核心2702(A)-(N)是大量的通用有序核心。从而,处理器2700可以是通用处理器、协处理器或者专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元电路)、高吞吐量集成众核(many integrated core,MIC)协处理器(包括30个或更多个核心)、嵌入式处理器,等等。该处理器可被实现在一个或多个芯片上。处理器2700可以是一个或多个衬底的一部分和/或可以使用多种工艺技术中的任何技术来实现在一个或多个衬底上,这些工艺技术例如BiCMOS、CMOS、或者NMOS。
存储器层次体系包括核心2702(A)-(N)内的一级或多级缓存单元电路2704(A)-(N)、一组一个或多个共享缓存单元电路2706、以及耦合到该组集成存储器控制器单元电路2714的外部存储器(未示出)。该组一个或多个共享缓存单元电路2706可以包括一个或多个中间级别缓存,例如第2级(L2)、第3级(L3)、第4级(4)或者其他级别的缓存,例如最后一级缓存(last level cache,LLC),和/或这些的组合。虽然在一些实施例中基于环的互连网络电路2712对专用逻辑2708(例如,集成图形逻辑)、该组共享缓存单元电路2706和系统代理单元电路2710进行互连,但替代性实施例使用任何数目的公知技术来对这些单元进行互连。在一些实施例中,在共享缓存单元电路2706中的一个或多个电路与核心2702(A)-(N)之间维持一致性。
在一些实施例中,核心2702(A)-(N)中的一个或多个具有多线程能力。系统代理单元电路2710包括对核心2702(A)-(N)进行协调和操作的那些组件。系统代理单元电路2710可以包括例如功率控制单元(power control unit,PCU)电路和/或显示单元电路(未示出)。PCU可以是(或者可以包括)对核心2702(A)-(N)和/或专用逻辑2708(例如,集成图形逻辑)的功率状态进行调节所需的逻辑和组件。显示单元电路用于驱动一个或多个在外部连接的显示器。
核心2702(A)-(N)就体系结构指令集而言可以是同构的或者异构的;也就是说,核心2702(A)-(N)中的两个或更多个核心可能能够执行同一指令集,而其他核心可能能够只执行该指令集的子集或者能够执行一不同的ISA。
示例性核心体系结构
有序和乱序核心框图
图28(A)的框图图示了根据本发明的实施例的示例性有序管线和示例性寄存器重命名、乱序发出/执行管线两者。图28(B)的框图图示了根据本发明的实施例,要被包括在处理器中的有序体系结构核心的示例性实施例和示例性寄存器重命名、乱序发出/执行体系结构核心两者。图28(A)-(B)中的实线框图示了有序管线和有序核心,而可选地添加的虚线框图示了寄存器重命名、乱序发出/执行管线和核心。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图28(A)中,处理器管线2800包括取得阶段2802、可选的长度解码阶段2804、解码阶段2806、可选的分配阶段2808、可选的重命名阶段2810、调度(也称为调遣或发出)阶段2812、可选的寄存器读取/存储器读取阶段2814、执行阶段2816、写回/存储器写入阶段2818、可选的异常处置阶段2822、以及可选的提交阶段2824。在这些处理器管线阶段的每一者中可以执行一个或多个操作。例如,在取得阶段2802期间,从指令存储器取得一个或多个指令,在解码阶段2806期间,可以对取得的一个或多个指令进行解码,可以生成使用转发寄存器端口的地址(例如,加载存储单元(load store unit,LSU)地址),并且可以执行分支转发(例如,立即数偏移或者链接寄存器(link register,LR))。在一种实施例中,解码阶段2806和寄存器读取/存储器读取阶段2814可以被组合到一个管线阶段中。在一种实施例中,在执行阶段2816期间,可以执行经解码的指令,可以执行到高级微控制器总线(AdvancedMicrocontroller Bus,AMB)接口的LSU地址/数据管线化,可以执行乘法和加法操作,可以执行具有分支结果的算术操作,等等。
作为示例,示例性寄存器重命名、乱序发出/执行核心体系结构可以通过以下方式实现管线2800:1)指令取得2838执行取得和长度解码阶段2802和2804;2)解码单元电路2840执行解码阶段2806;3)重命名/分配器单元电路2852执行分配阶段2808和重命名阶段2810;4)(一个或多个)调度器单元电路2856执行调度阶段2812;5)(一个或多个)物理寄存器堆单元电路2858和存储器单元电路2870执行寄存器读取/存储器读取阶段2814;执行集群2860执行执行阶段2816;6)存储器单元电路2870和(一个或多个)物理寄存器堆单元电路2858执行写回/存储器写入阶段2818;7)在异常处置阶段2822中可能涉及各种单元(单元电路);并且8)引退单元电路2854和(一个或多个)物理寄存器堆单元电路2858执行提交阶段2824。
图28(B)示出了处理器核心2890包括耦合到执行引擎单元电路2850的前端单元电路2830,并且两者都耦合到存储器单元电路2870。核心2890可以是精简指令集计算(reduced instruction set computing,RISC)核心、复杂指令集计算(complexinstruction set computing,CISC)核心、超长指令字(very long instruction word,VLIW)核心、或者混合或替代性核心类型。作为另外一个选项,核心2890可以是专用核心,例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purposecomputing graphics processing unit,GPGPU)核心、图形核心,等等。
前端单元电路2830可以包括分支预测单元电路2832,该分支预测单元电路耦合到指令缓存单元电路2834,该指令缓存单元电路耦合到指令转译后备缓冲器(translationlookaside buffer,TLB)2836,该指令TLB耦合到指令取得单元电路2838,该指令取得单元电路耦合到解码单元电路2840。在一种实施例中,指令缓存单元电路2834被包括在存储器单元电路2870中,而不是前端单元电路2830中。解码单元电路2840(或解码器)可以对指令解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。解码单元电路2840还可以包括地址生成单元电路(address generation unit,AGU,未示出)。在一种实施例中,AGU使用经转发的寄存器端口来生成LSU地址,并且可以进一步执行分支转发(例如,立即数偏移分支转发,LR寄存器分支转发,等等)。可以利用各种不同的机制来实现解码单元电路2840。适当机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(programmable logicarray,PLA)、微代码只读存储器(read only memory,ROM),等等。在一种实施例中,核心2890包括微代码ROM(未示出)或其他介质,其存储用于某些宏指令的微代码(例如,在解码单元电路2840中或者以其他方式在前端单元电路2830内)。在一种实施例中,解码单元电路2840包括微操作(micro-op)或操作缓存(未示出),以保存/缓存在处理器管线2800的解码或其他阶段期间生成的经解码的操作、微标记或微操作。解码单元电路2840可以耦合到执行引擎单元电路2850中的重命名/分配器单元电路2852。
执行引擎电路2850包括重命名/分配器单元电路2852,其耦合到引退单元电路2854和一组一个或多个调度器电路2856。调度器电路2856代表任意数目个不同调度器,包括预留站、中央指令窗口,等等。在一些实施例中,(一个或多个)调度器电路2856可以包括算术逻辑单元(arithmetic logic unit,ALU)调度器/调度电路、ALU队列、地址生成单元(address generation unit,AGU)调度器/调度电路、AGU队列,等等。(一个或多个)调度器电路2856耦合到(一个或多个)物理寄存器堆电路2858。(一个或多个)物理寄存器堆电路2858的每一者代表一个或多个物理寄存器堆,这些物理寄存器堆中的不同物理寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,指令指针,即要执行的下一指令的地址),等等。在一种实施例中,(一个或多个)物理寄存器堆单元电路2858包括向量寄存器单元电路、写入掩码寄存器单元电路、以及标量寄存器单元电路。这些寄存器单元可以提供体系结构式向量寄存器、向量掩码寄存器、通用寄存器,等等。(一个或多个)物理寄存器单元堆电路2858被引退单元电路2854(也称为引退队列)重叠,以展示可以用来实现寄存器重命名和乱序执行的各种方式(例如,利用(一个或多个)重排序缓冲器(reorder buffer,ROB)和(一个或多个)引退寄存器堆;利用(一个或多个)未来的堆、(一个或多个)历史缓冲器、以及(一个或多个)引退寄存器堆;利用寄存器图谱和寄存器的池;等等)。引退单元电路2854和(一个或多个)物理寄存器堆电路2858耦合到(一个或多个)执行集群2860。(一个或多个)执行集群2860包括一组一个或多个执行单元电路2862和一组一个或多个存储器访问电路2864。执行单元电路2862可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种算术、逻辑、浮点或其他类型的操作(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于特定功能或功能集合的若干个执行单元或执行单元电路,但其他实施例可以只包括一个执行单元电路或者全部执行所有功能的多个执行单元/执行单元电路。(一个或多个)调度器电路2856、(一个或多个)物理寄存器堆单元电路2858以及(一个或多个)执行集群2860被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管线和/或存储器访问管线,它们各自具有其自己的调度器电路、(一个或多个)物理寄存器堆单元电路和/或执行集群——并且在单独的存储器访问管线的情况下,所实现的某些实施例中只有该管线的执行集群具有(一个或多个)存储器访问单元电路2864)。还应当理解,在使用分开的管线的情况下,这些管线中的一个或多个可以是乱序发出/执行,而其余是有序的。
在一些实施例中,执行引擎单元电路2850可以执行到高级微控制器总线(AMB)接口(未示出)的加载存储单元(LSU)地址/数据管线化,以及地址阶段和写回、数据阶段加载、存储、以及分支。
一组存储器访问电路2864耦合到存储器单元电路2870,该存储器单元电路包括数据TLB单元电路2872,该数据TLB电路耦合到数据缓存电路2874,该数据缓存电路耦合到第2级(L2)缓存电路2876。在一个示例性实施例中,存储器访问单元电路2864可以包括加载单元电路、存储地址单元电路、以及存储数据单元电路,它们中的每一者耦合到存储器单元电路2870中的数据TLB电路2872。指令缓存电路2834进一步耦合到存储器单元电路2870中的第2级(L2)缓存单元电路2876。在一种实施例中,指令缓存2834和数据缓存2874被组合成L2缓存单元电路2876、第3级(L3)缓存单元电路(未示出)和/或主存储器中的单个指令和数据缓存(未示出)。L2缓存单元电路2876耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。
核心2890可以支持一个或多个指令集(例如,x86指令集(带有已随着更新版本添加的一些扩展);MIPS指令集;ARM指令集(带有可选的额外扩展,例如NEON)),该指令集包括本文描述的(一个或多个)指令。在一种实施例中,核心2890包括支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许利用紧缩数据来执行被许多多媒体应用使用的操作。
(一个或多个)示例性执行单元电路
图29图示了(一个或多个)执行单元电路的实施例,例如图28(B)的(一个或多个)执行单元电路2862。如图所示,(一个或多个)执行单元电路2862可以包括一个或多个ALU电路2901、向量/SIMD单元电路2903、加载/存储单元电路2905、和/或分支/跳转单元电路2907。ALU电路2901执行整数算术和/或布尔操作。向量/SIMD单元电路2903对紧缩数据(例如SIMD/向量寄存器)执行向量/SIMD操作。加载/存储单元电路2905执行加载和存储指令,以将数据从存储器加载到寄存器中,或者从寄存器存储到存储器。加载/存储单元电路2905也可以生成地址。分支/跳转单元电路2907取决于指令而引起到某个存储器地址的分支或跳转。浮点单元(floating-point unit,FPU)电路2909执行浮点算术。(一个或多个)执行单元电路2862的宽度取决于实施例而有所不同,并且可以在从16比特到1024比特的范围中。在一些实施例中,两个或更多个更小的执行单元被逻辑地组合以形成更大的执行单元(例如,两个128比特执行单元被逻辑组合以形成256比特执行单元)。
示例性寄存器体系结构
图30是根据一些实施例的寄存器体系结构3000的框图。如图所示,存在向量/SIMD寄存器3010,其宽度从128比特到1024比特不等。在一些实施例中,向量/SIMD寄存器3010在物理上是512比特的,并且取决于映射,只有一些低位比特被使用。例如,在一些实施例中,向量/SIMD寄存器3010是512比特的ZMM寄存器:低位256比特被用于YMM寄存器,并且低位128比特被用于XMM寄存器。因此,存在寄存器的覆盖。在一些实施例中,向量长度字段在最大长度和一个或多个其他更短的长度之间作出选择,其中每个这种更短长度是前一长度的一半长度。标量操作是对ZMM/YMM/XMM寄存器中的最低阶数据元素位置执行的操作;更高阶数据元素位置或者被保持为与其在该指令之前相同,或者被归零,这取决于实施例。
在一些实施例中,寄存器体系结构3000包括写入掩码/谓词(predicate)寄存器3015。例如,在一些实施例中,有8个写入掩码/谓词寄存器(有时称为k0至k7),它们各自的大小是16比特、32比特、64比特或128比特。写入掩码/谓词寄存器3015可以允许合并(例如,允许目的地中的任何元素集合在任何操作的执行期间被保护免于更新)和/或归零(例如,归零向量掩码允许目的地中的任何元素集合在任何操作的执行期间被归零)。在一些实施例中,给定的写入掩码/谓词寄存器3015中的每个数据元素位置对应于目的地的数据元素位置。在其他实施例中,写入掩码/谓词寄存器3015是可缩放的,并且由针对给定向量元素的设定数目个使能比特组成(例如,给每个64比特向量元素8个使能比特)。
寄存器体系结构3000包括多个通用寄存器3025。这些寄存器可以是16比特、32比特、64比特等等,并能够被用于标量操作。在一些实施例中,这些寄存器用名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8至R15来称呼。
在一些实施例中,寄存器体系结构3000包括标量浮点寄存器3045,它被用于使用x87指令集扩展对32/64/80比特浮点数据进行标量浮点操作,或者作为MMX寄存器,来对64比特紧缩整数数据执行操作,以及针对在MMX和XMM寄存器之间执行的一些操作保存操作对象。
一个或多个标志寄存器3040(例如,EFLAGS,RFLAGS,等等)存储状态和控制信息,用于算术、比较和系统操作。例如,一个或多个标志寄存器3040可以存储条件代码信息,例如进位、奇偶性、辅助进位、零、符号、以及溢出。在一些实施例中,一个或多个标志寄存器3040被称为程序状态和控制寄存器。
段寄存器3020包含用于访问存储器的段点。在一些实施例中,这些寄存器由名称CS、DS、SS、ES、FS和GS来称呼。
机器特定寄存器(machine-specific register,MSR)3035对处理器性能进行控制和报告。大多数MSR 3035处置与系统有关的功能,并且是应用程序不可访问的。机器检查寄存器3060由用于对硬件错误进行检测和报告的控制、状态和错误报告MSR组成。
一个或多个指令指针寄存器3030存储指令指针值。(一个或多个)控制寄存器3055(例如,CR0-CR4)确定处理器(例如,处理器2670、2680、2638、2618和/或2700)的操作模式和当前在执行的任务的特性。调试寄存器3050控制并允许监视处理器或核心的调试操作。
存储器管理寄存器3065指定用于保护模式存储器管理中的数据结构的位置。这些寄存器可以包括GDTR、IDTR、任务寄存器、以及LDTR寄存器。
本发明的替代性实施例可以使用更宽或更窄的寄存器。此外,本发明的替代性实施例可以使用更多、更少或不同的寄存器堆和寄存器。
指令集
指令集体系结构(instruction set architecture,ISA)可以包括一个或多个指令格式。给定的指令格式可以定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要被执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可以被定义为具有该指令格式的字段的不同子集(所包括的字段通常是按相同顺序的,但至少一些具有不同的比特位置,因为所包括的字段更少)和/或被定义为具有以不同方式解读的给定字段。从而,ISA的每个指令是利用给定的指令格式来表达的(并且如果定义了的话,则以该指令格式的指令模板中的一个给定指令模板来表达),并且包括用于指定操作和操作对象的字段。例如,示例性ADD指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码,并且包括操作对象字段来选择操作对象(源1/目的地和源2);并且这个ADD指令在指令流中的出现将在选择特定操作对象的操作对象字段中具有特定内容。
示例性指令格式
可以按不同的格式来实现本文描述的(一个或多个)指令的实施例。此外,下文详述了示例性系统、体系结构和管线。(一个或多个)指令的实施例可以在这些系统、体系结构和管线上被执行,但不限于详述的那些。
图31图示了指令格式的实施例。如图所示,指令可以包括多个成分,这些成分包括但不限于用于以下项的一个或多个字段:一个或多个前缀3101、操作码3103、寻址信息3105(例如,寄存器标识符、存储器寻址信息,等等)、位移值3107、和/或立即数3109。注意,一些指令利用了该格式的一些或所有字段,而其他指令可能只使用操作码3103的字段。在一些实施例中,图示的顺序是这些字段要被编码的顺序,然而应当明白,在其他实施例中,这些字段可以被按另外的顺序来编码、被组合,等等。
(一个或多个)前缀字段3101在被使用时对指令进行修改。在一些实施例中,一个或多个前缀被用于重复字符串指令(例如,0xF0、0xF2、0xF3,等等)、提供节超控(sectionoverride)(例如,0x2E、0x36、0x3E、0x26、0x64、0x65、0x2E、0x3E,等等)、执行总线锁定操作、和/或改变操作对象(例如,0x66)和地址大小(例如,0x67)。某些指令要求强制性的前缀(例如,0x66、0xF2、0xF3,等等)。这些前缀中的某些可以被认为是“传统”前缀。其他前缀(本文详述了其一个或多个示例)指示出和/或提供了进一步的能力,例如指定特定的寄存器等等。这些其他前缀通常跟随在“传统”前缀之后。
操作码字段3103被用于至少部分地定义在指令的解码时要执行的操作。在一些实施例中,在操作码字段3103中编码的主操作码的长度为1个、2个或3个字节。在其他实施例中,主操作码可以是其他的长度。额外的3比特操作码字段有时被编码在另一个字段中。
寻址字段3105被用于对指令的一个或多个操作对象进行寻址,例如存储器中的位置或者一个或多个寄存器。图32图示了寻址字段3105的实施例。在这个图示中,示出了可选的MOD R/M字节3202和可选的缩放、索引、基址(Scale,Index,Base,SIB)字节3204。MOD R/M字节3202和SIB字节3204被用来编码指令的最多两个操作对象,每个操作对象是直接寄存器或有效存储器地址。注意,这些字段中的每一者是可选的,即,不是所有的指令都包括这些字段中的一个或多个。MOD R/M字节3202包括MOD字段3242、寄存器字段3244、以及R/M字段3246。
MOD字段3242的内容区分存储器访问和非存储器访问模式。在一些实施例中,当MOD字段3242具有值b11时,利用寄存器直接寻址模式,否则使用寄存器间接寻址。
寄存器字段3244可以编码目的地寄存器操作对象或者源寄存器操作对象,或者也可以编码操作码扩展而不被用于编码任何指令操作对象。寄存器索引字段3244的内容直接指定或者通过地址生成来指定源或目的地操作对象的位置(在寄存器中或者在存储器中)。在一些实施例中,寄存器字段3244得到来自前缀(例如,前缀3101)的额外比特的补充,以允许更大的寻址。
R/M字段3246可以用来编码引用了存储器地址的指令操作对象,或者可以用来编码目的地寄存器操作对象或源寄存器操作对象。注意,在一些实施例中,R/M字段3246可以被与MOD字段3242相组合以规定寻址模式。
SIB字节3204包括缩放字段3252、索引字段3254、以及基址字段3256,以用于地址的生成。缩放字段3252指示缩放因数。索引字段3254指定要使用的索引寄存器。在一些实施例中,索引字段3254得到来自前缀(例如,前缀3101)的额外比特的补充,以允许更大的寻址。基址字段3256指定了要使用的基址寄存器。在一些实施例中,基址字段3256得到来自前缀(例如,前缀3101)的额外比特的补充,以允许更大的寻址。在实践中,缩放字段3252的内容允许缩放索引字段3254的内容以进行存储器地址生成(例如,对于使用2缩放*索引+基址的地址生成)。
一些寻址形式利用位移值来生成存储器地址。例如,可以根据2缩放*索引+基址+位移、索引*缩放+位移、r/m+位移、指令指针(RIP/EIP)+位移、寄存器+位移等等来生成存储器地址。该位移可以是1字节、2字节、4字节等等的值。在一些实施例中,位移字段3107提供这个值。此外,在一些实施例中,位移因数的使用被编码在寻址字段3105的MOD字段中,它指示出压缩位移方案,对于该方案,位移值通过disp8与基于向量长度确定的缩放因数N、b比特的值、以及指令的输入元素大小相结合地相乘来计算。位移值被存储在位移字段3107中。
在一些实施例中,立即数字段3109为指令指定立即数。立即数可以被编码为1字节值、2字节值、4字节值等等。
图33图示了第一前缀3101(A)的实施例。在一些实施例中,第一前缀3101(A)是REX前缀的实施例。使用这个前缀的指令可以指定通用寄存器、64比特紧缩数据寄存器(例如,单指令多数据(SIMD)寄存器或向量寄存器)、和/或控制寄存器和调试寄存器(例如,CR8-CR15和DR8-DR15)。
使用第一前缀3101(A)的指令可以使用3比特字段指定最多三个寄存器,这取决于格式:1)使用MOD R/M字节3202的reg字段3244和R/M字段3246;2)使用MOD R/M字节3202与SIB字节3204,包括使用reg字段3244以及基址字段3256和索引字段3254;或者3)使用操作码的寄存器字段。
在第一前缀3101(A)中,比特位置7:4被设置为0100。比特位置3(W)可以被用于确定操作对象大小,但不能单独确定操作对象宽度。因此,当W=0时,操作对象大小由代码段描述符(code segment descriptor,CS.D)决定,而当W=1时,操作对象大小为64比特。
注意,添加另一个比特允许对16(24)个寄存器进行寻址,而单独的MOD R/M reg字段3244和MOD R/M的R/M字段3246各自只能寻址8个寄存器。
在第一前缀3101(A)中,比特位置2(R)可以是MOD R/M的reg字段3244的扩展,并且当该字段编码了通用寄存器、64比特紧缩数据寄存器(例如,SSE寄存器)或者控制或调试寄存器时,可被用来修改MOD R/M的reg字段3244。当MOD R/M字节3202指定其他寄存器或定义扩展操作码时,R被忽略。
比特位置1(X)X比特可以修改SIB字节索引字段3254。
比特位置B(B)B可以修改MOD R/M的R/M字段3246或SIB字节基址字段3256中的基址;或者它可以修改用于访问通用寄存器(例如,通用寄存器3025)的操作码寄存器字段。
图34(A)-(D)图示了如何使用第一前缀3101(A)的R、X和B字段的实施例。图34(A)图示了当SIB字节3204不被用于存储器寻址时,来自第一前缀3101(A)的R和B被用来扩展MOD R/M字节3202的reg字段3244和R/M字段3246。图34(B)图示了当不使用SIB字节32 04时,来自第一前缀3101(A)的R和B被用来扩展MOD R/M字节3202的reg字段3244和R/M字段3246(寄存器-寄存器寻址)。图34(C)图示了当SIB字节32 04被用于存储器寻址时,来自第一前缀3101(A)的R、X和B被用于扩展MOD R/M字节3202的reg字段3244以及索引字段3254和基址字段3256。图34(D)图示了当寄存器被编码在操作码3103中时,来自第一前缀3101(A)的B被用来扩展MOD R/M字节3202的reg字段3244。
图35(A)-(B)图示了第二前缀3101(B)的实施例。在一些实施例中,第二前缀3101(B)是VEX前缀的实施例。第二前缀3101(B)编码允许指令具有多于两个操作对象,并且允许SIMD向量寄存器(例如,向量/SIMD寄存器3010)长于64比特(例如,128比特和256比特)。第二前缀3101(B)的使用提供了三操作对象(或更多)的语法。例如,先前的两操作对象指令执行诸如A=A+B之类的操作,这覆写了源操作对象。对第二前缀3101(B)的使用使得操作对象能够执行非破坏性操作,比如A=B+C。
在一些实施例中,第二前缀3101(B)有两种形式——两字节形式和三字节形式。两字节的第二前缀3101(B)主要被用于128比特、标量和一些256比特指令;而三字节的第二前缀3101(B)提供了3字节操作码指令和第一前缀3101(A)的紧凑替换。
图35(A)图示了第二前缀3101(B)的两字节形式的实施例。在一个示例中,格式字段3501(字节0 3503)包含值C5H。在一个示例中,字节1 3505在比特[7]中包括“R”值。这个值是第一前缀3101(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字段3246,以编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。
使用这个前缀的指令可以使用MOD R/M的reg字段3244,以编码目的地寄存器操作对象或者源寄存器操作对象,被作为操作码扩展来对待而不被用于编码任何指令操作对象。
对于支持四个操作对象的指令语法,vvvv、MOD R/M的R/M字段3246和MOD R/M的reg字段3244编码了四个操作对象中的三个。然后立即数3109的比特[7:4]被用来编码第三源寄存器操作对象。
图35(B)图示了第二前缀3101(B)的三字节形式的实施例。在一种示例中,格式字段3511(字节0 3513)包含值C4H。字节1 3515在比特[7:5]中包括“R”、“X”和“B”,它们是第一前缀3101(A)的这些值的补码。字节1 3515的比特[4:0](示为mmmmm)包括根据需要来对一个或多个隐含的前导操作码字节进行编码的内容。例如,00001意味着0FH前导操作码,00010意味着0F38H前导操作码,00011意味着0F3AH前导操作码,等等。
字节2 3517的比特[7]的使用与第一前缀3101(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字段3246,以编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。
使用这个前缀的指令可以使用MOD R/M的reg字段3244,以编码目的地寄存器操作对象或者源寄存器操作对象,或者被作为操作码扩展来对待而不被用于编码任何指令操作对象。
对于支持四个操作对象的指令语法,vvvv、MOD R/M的R/M字段3246和MOD R/M的reg字段3244编码了四个操作对象中的三个。然后立即数3109的比特[7:4]被用来编码第三源寄存器操作对象。
图36图示了第三前缀3101(C)的实施例。在一些实施例中,第三前缀3101(C)是EVEX前缀的实施例。第三前缀3101(C)是四字节前缀。
第三前缀3101(C)能够在64比特模式中编码32个向量寄存器(例如,128比特、256比特和512比特寄存器)。在一些实施例中,利用写入掩码/操作掩码(参见对于先前图中的寄存器的论述,例如图30)或谓词的指令利用这个前缀。操作掩码寄存器允许条件处理或选择控制。操作掩码指令——其源/目的地操作对象是操作掩码寄存器并且将操作掩码寄存器的内容视为单个值——是使用第二前缀3101(B)而被编码的。
第三前缀3101(C)可以编码特定于指令类别的功能(例如,具有“加载+操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能,等等)。
第三前缀3101(C)的第一字节是格式字段3611,它在一种示例中具有62H的值。随后的字节被称为有效载荷字节3615-3619,并且共同形成P[23:0]的24比特值,以(本文中详述的)一个或多个字段的形式提供特定的能力。
在一些实施例中,有效载荷字节3619的P[1:0]与低位的两个mm比特相同。在一些实施例中,P[3:2]被保留。比特P[4](R')在与P[7]和MOD R/M的reg字段3244相组合时允许访问高16向量寄存器集合。当不需要SIB类型寻址时,P[6]也可以提供对高16向量寄存器的访问。P[7:5]由R、X和B构成,它们是针对向量寄存器、通用寄存器、存储器寻址的操作对象指定符修饰符比特,并且当与MOD R/M寄存器字段3244和MOD R/M的R/M字段3246相组合时,允许访问超出低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]类似于第一前缀3101(A)和第二前缀3101(B)的W,并且可以作为操作码扩展比特或操作对象大小提升。
P[18:16]指定操作掩码(写入掩码)寄存器(例如,写入掩码/谓词寄存器3015)中的寄存器的索引。在本发明的一种实施例中,特定值aaa=000具有特殊行为,暗示着没有操作掩码被用于这个特定的指令(这可以通过多种方式实现,包括使用硬连线到全一的操作掩码或者绕过掩蔽硬件的硬件)。当合并时,向量掩码允许目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被保护免于更新;在另一实施例中,保留目的地的每个元素的旧值(如果相应的掩码比特具有0值)。与之不同,当归零时,向量掩码允许目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被归零;在一种实施例中,目的地的元素在相应掩码比特具有0值时被设置到0。这个功能的子集是对于正被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)进行控制的能力;然而,被修改的元素不一定要连续。从而,操作掩码字段允许了部分向量操作,包括加载、存储、算术、逻辑,等等。虽然在描述的本发明的实施例中,操作掩码字段的内容选择若干个操作掩码寄存器中包含要使用的操作掩码的那一个(从而操作掩码字段的内容间接标识了要执行的掩蔽),但替代地或附加地,替代性实施例允许掩码写入字段的内容直接指定要执行的掩蔽。
P[19]可以与P[14:11]相组合,来以非破坏性源语法编码第二源向量寄存器,该语法可以利用P[19]来访问高16个向量寄存器。P[20]编码多种功能,这些功能在不同类别的指令中有所不同,并且可以影响向量长度/舍入控制指定符字段(P[22:21])的含义。P[23]指示出对合并-写入掩蔽的支持(例如,当被设置为0时)或者对归零和合并-写入掩蔽的支持(例如,当被设置为1时)。
下面的表格详述了在使用第三前缀3101(C)的指令中对寄存器的编码的示例性实施例。
表格1:64比特模式中的32寄存器支持
表格2:在32比特模式中编码寄存器指定符
表格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)。这种实施例也可以被称为程序产品。
仿真(包括二进制转译、代码变形,等等)
在一些情况下,指令转换器可以被用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令转译(例如,利用静态二进制转译、包括动态编译的动态二进制转译)、变形、仿真或者以其他方式转换到要被核心处理的一个或多个其他指令。可以用软件、硬件、固件或者其组合来实现指令转换器。指令转换器可以在处理器上、在处理器外、或者一部分在处理器上而一部分在处理器外。
图37图示根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在图示的实施例中,指令转换器是软件指令转换器,但可替代地,可以用软件、固件、硬件或者其各种组合来实现指令转换器。图37示出了高级语言3702的程序可以被利用第一ISA编译器3704编译以生成第一ISA二进制代码3706,该代码可以由具有至少一个第一ISA指令集核心的处理器3716原生执行。具有至少一个第一ISA指令集核心的处理器3716代表任何这样的处理器:这种处理器能够通过兼容地执行或以其他方式处理(1)第一ISA指令集核心的指令集的实质部分或者(2)以在具有至少一个第一ISA指令集核心的处理器上运行为目标的应用或其他软件的目标代码版本,来执行与具有至少一个第一ISA指令集核心的Intel处理器基本上相同的功能,以便实现与具有至少一个第一ISA指令集核心的处理器基本上相同的结果。第一ISA编译器3704代表可操作来生成第一ISA二进制代码3706(例如,目标代码)的编译器,该第一ISA二进制代码在进行或不进行额外的链接处理的情况下能够在具有至少一个第一ISA指令集核心的处理器3716上被执行。类似地,图37示出了高级语言3702的程序可以被利用替代性指令集编译器3708来编译以生成替代性指令集二进制代码3710,该代码可以由没有第一ISA核心的处理器3714原生执行。指令转换器3712被用来将第一ISA二进制代码3706转换成可以由没有第一ISA指令集核心的处理器3714原生执行的代码。这种转换后的代码可能不会与替代性指令集二进制代码3710相同,这是因为能够进行这一点的指令转换器难以制作;然而,转换后的代码将实现总的操作,并由来自该替代性指令集的指令构成。从而,指令转换器3712代表软件、固件、硬件或它们的组合,其通过仿真、模拟或任何其他过程,允许不具有第一ISA指令集处理器或核心的处理器或其他电子设备执行第一ISA二进制代码3706。
对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可包括特定的特征、结构或特性,但是每个实施例可以不一定包括该特定的特征、结构或特性。而且,此类短语不一定是指同一实施例。进一步地,当结合实施例描述特定的特征、结构或特性时,认为结合无论是否被明确描述的其他实施例而影响此类特征、结构或特性是在本领域技术人员的知识范围之内的。
此外,在上文描述的各实施例中,除非另外专门指出,否则,诸如短语“A、B或C中的至少一个”之类的分隔语言旨在被理解为意指A、B、或C、或其任何组合(例如,A、B、和/或C)。由此,分隔语言不旨在也不应当被理解为暗示给定的实施例要求A中的至少一个、B中的至少一个或C中的至少一个各自都存在。
示例性实施例
1.一种方法,包括:
对单个指令进行解码,该指令具有用于指定操作码的一个或多个字段、用于指定第一源操作对象的位置的一个或多个字段、用于指定第二源操作对象的位置的一个或多个字段、用于指定目的地操作对象的位置的一个或多个字段、以及用于指定要被用于对第一源操作对象中的行进行索引的索引值的一个或多个字段,其中操作码用于指示执行电路要进行:对第一源操作对象的被索引的行的数据元素进行下转换,将经下转换的元素与第二源操作对象的数据元素进行交织,以及将经交织的元素存储在目的地操作对象中;以及
根据操作码执行经解码的指令。
2.如示例1所述的方法,其中,经下转换的数据元素是要从单精度浮点被下转换至半精度浮点的。
3.如示例1所述的方法,其中,经下转换的数据元素是要从单精度浮点被下转换至bfloat16浮点的。
4.如示例1-3中任一项所述的方法,其中,所标识的第一源操作对象是矩阵操作对象。
5.如示例4所述的方法,其中,矩阵操作对象包括多个物理寄存器的叠加。
6.如示例1-5中任一项所述的方法,其中,索引值是通过立即数指定的。
7.如示例1-5中任一项所述的方法,其中,索引值是通过所标识的寄存器中存储的值指定的。
8.一种方法,包括:
解码电路,用于指定源/目的地操作对象的位置的一个或多个字段、用于指定源操作对象的位置的一个或多个字段、以及用于指定要被用于对源/目的地操作对象中的行进行索引的索引值的一个或多个字段,其中操作码用于指示执行电路要进行:对源/目的地操作对象的被索引的行的数据元素进行下转换,以及将经下转换的元素与源/目的地的数据元素进行交织;以及
根据操作码执行经解码的指令。
9.如示例8所述的方法,其中,经下转换的数据元素是要从单精度浮点被下转换至半精度浮点的。
10.如示例8所述的方法,其中,经下转换的数据元素是要从单精度浮点被下转换至bfloat16浮点的。
11.如示例8-10中任一项所述的方法,其中,所标识的源/目的地操作对象是矩阵操作对象。
12.如示例11所述的方法,其中,矩阵操作对象包括多个物理寄存器的叠加。
13.如示例8-12中任一项所述的装置,其中,索引值是通过立即数指定的。
14.如示例8-12中任一项所述的方法,其中,索引值是通过所标识的寄存器中存储的值指定的。
15.一种装置,用于实现如示例1-14所述的方法中的任何方法。
16.一种系统,包括:
装置,该装置用于实现如示例1-14所述的方法中的任何方法;以及
存储器,该存储器用于存储单个指令。
因此,说明书和附图应被认为是说明性而非限制性意义的。然而,将显而易见的是,可对本公开作出各种修改和改变,而不背离如权利要求中所述的本公开的更宽泛的精神和范围。

Claims (14)

1.一种装置,包括:
解码电路,所述解码电路用于对单个指令进行解码,所述指令具有用于指定操作码的一个或多个字段、用于指定第一源操作对象的位置的一个或多个字段、用于指定第二源操作对象的位置的一个或多个字段、用于指定目的地操作对象的位置的一个或多个字段、以及用于指定要被用于对所述第一源操作对象中的行进行索引的索引值的一个或多个字段,其中所述操作码用于指示执行电路要进行:对所述第一源操作对象的被索引的行的数据元素进行下转换,将经下转换的元素与所述第二源操作对象的数据元素进行交织,以及将经交织的元素存储在所述目的地操作对象中;以及
执行电路,所述执行电路用于根据所述操作码来执行经解码的指令。
2.如权利要求1所述的装置,其中,经下转换的数据元素是要从单精度浮点被下转换至半精度浮点的。
3.如权利要求1所述的装置,其中,经下转换的数据元素是要从单精度浮点被下转换至bfloat16浮点的。
4.如权利要求1所述的装置,其中,所标识的第一源操作对象是矩阵操作对象。
5.如权利要求4所述的装置,其中,所述矩阵操作对象包括多个物理寄存器的叠加。
6.如权利要求1所述的装置,其中,所述索引值是通过立即数指定的。
7.如权利要求1所述的装置,其中,所述索引值是通过所标识的寄存器中存储的值指定的。
8.一种装置,包括:
解码电路,所述解码电路用于对单个指令进行解码,所述指令具有用于指定操作码的一个或多个字段、用于指定源/目的地操作对象的位置的一个或多个字段、用于指定源操作对象的位置的一个或多个字段、以及用于指定要被用于对所述源/目的地操作对象中的行进行索引的索引值的一个或多个字段,其中所述操作码用于指示执行电路要进行:对所述源/目的地操作对象的被索引的行的数据元素进行下转换,以及将经下转换的元素与所述源/目的地的数据元素进行交织;以及
执行电路,所述执行电路用于根据所述操作码来执行经解码的指令。
9.如权利要求8所述的装置,其中,经下转换的数据元素是要从单精度浮点被下转换至半精度浮点的。
10.如权利要求8所述的装置,其中,经下转换的数据元素是要从单精度浮点被下转换至bfloat16浮点的。
11.如权利要求8所述的装置,其中,所标识的源/目的地操作对象是矩阵操作对象。
12.如权利要求11所述的装置,其中,所述矩阵操作对象包括多个物理寄存器的叠加。
13.如权利要求8所述的装置,其中,所述索引值是通过立即数指定的。
14.如权利要求8所述的装置,其中,所述索引值是通过所标识的寄存器中存储的值指定的。
CN202280023434.6A 2021-03-27 2022-03-25 用于对片行进行下转换并与寄存器进行交织的指令的装置、方法和系统 Pending CN117083595A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/214,853 2021-03-27
US17/214,853 US12086595B2 (en) 2021-03-27 2021-03-27 Apparatuses, methods, and systems for instructions for downconverting a tile row and interleaving with a register
PCT/US2022/022040 WO2022212213A1 (en) 2021-03-27 2022-03-25 Apparatuses, methods, and systems for instructions for downconverting a tile row and interleaving with a register

Publications (1)

Publication Number Publication Date
CN117083595A true CN117083595A (zh) 2023-11-17

Family

ID=83363355

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202280023434.6A Pending CN117083595A (zh) 2021-03-27 2022-03-25 用于对片行进行下转换并与寄存器进行交织的指令的装置、方法和系统

Country Status (4)

Country Link
US (1) US12086595B2 (zh)
EP (1) EP4315040A1 (zh)
CN (1) CN117083595A (zh)
WO (1) WO2022212213A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20240329994A1 (en) * 2023-03-30 2024-10-03 Uri SHERMAN Direct saturated in-place floating point into 8-bit integer downconvert instruction(s)

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001147799A (ja) * 1999-10-01 2001-05-29 Hitachi Ltd データ移動方法および条件付転送論理ならびにデータの配列換え方法およびデータのコピー方法
US6629115B1 (en) * 1999-10-01 2003-09-30 Hitachi, Ltd. Method and apparatus for manipulating vectored data
US20120254592A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location
US9454507B2 (en) 2011-12-23 2016-09-27 Intel Corporation Systems, apparatuses, and methods for performing a conversion of a writemask register to a list of index values in a vector register
CN104081340B (zh) * 2011-12-23 2020-11-10 英特尔公司 用于数据类型的下转换的装置和方法
US10061592B2 (en) * 2014-06-27 2018-08-28 Samsung Electronics Co., Ltd. Architecture and execution for efficient mixed precision computations in single instruction multiple data/thread (SIMD/T) devices
US10216479B2 (en) 2016-12-06 2019-02-26 Arm Limited Apparatus and method for performing arithmetic operations to accumulate floating-point numbers
US20190205137A1 (en) 2017-12-29 2019-07-04 Lawrence Meadows Methods and apparatus for multi-load and multi-store vector instructions
US10929145B2 (en) 2018-12-28 2021-02-23 Intel Corporation Mask generation using reduction operators and scatter use thereof
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
US20220308873A1 (en) 2022-09-29
US12086595B2 (en) 2024-09-10
EP4315040A1 (en) 2024-02-07
WO2022212213A1 (en) 2022-10-06

Similar Documents

Publication Publication Date Title
EP4002105B1 (en) Systems and methods for performing 16-bit floating-point matrix dot product instructions
US11714875B2 (en) Apparatuses, methods, and systems for instructions of a matrix operations accelerator
CN110968346A (zh) 用于执行用于快速元素解包到二维寄存器中的指令的系统
CN118034781A (zh) 用于矩阵加法、减法和乘法的系统、方法和装置
CN117724766A (zh) 用于执行将矩阵变换为行交错格式的指令的系统和方法
EP4109247A1 (en) Apparatuses, methods, and systems for instructions for matrix multiplication instructions
CN112148251A (zh) 跳过无意义的矩阵运算的系统和方法
CN110909882A (zh) 用于执行水平铺块操作的系统和方法
US12056489B2 (en) Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions
CN114662048A (zh) 用于共轭转置和乘法的装置和方法
US20240045691A1 (en) Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions
CN114691211A (zh) 从fp16转换到bf8的指令
EP4020173B1 (en) Apparatuses, methods, and systems for instructions for loading a tile of a matrix operations accelerator
US12001887B2 (en) Apparatuses, methods, and systems for instructions for aligning tiles of a matrix operations accelerator
CN114675883A (zh) 用于对齐矩阵操作加速器瓦片的指令的装置、方法和系统
CN116097212A (zh) 用于16比特浮点矩阵点积指令的装置、方法和系统
US20240220323A1 (en) Apparatuses, methods, and systems for instructions for loading a tile of a matrix operations accelerator
CN117083595A (zh) 用于对片行进行下转换并与寄存器进行交织的指令的装置、方法和系统
CN114662049A (zh) 用于复数矩阵转置和乘法的装置和方法
US20230102279A1 (en) Apparatuses, methods, and systems for instructions for structured-sparse tile matrix fma
US20240045685A1 (en) Apparatuses, methods, and systems for instructions for structured-sparse tile matrix fma
CN116339683A (zh) 零周期存储器初始化
CN115525337A (zh) 用于向量紧缩有符号/无符号移位、舍入和饱和的装置和方法
CN116431221A (zh) 转换指令
CN118605939A (zh) Bfloat16比较指令

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