CN113849224A - 用于移动数据的指令的装置、方法和系统 - Google Patents

用于移动数据的指令的装置、方法和系统 Download PDF

Info

Publication number
CN113849224A
CN113849224A CN202110218707.XA CN202110218707A CN113849224A CN 113849224 A CN113849224 A CN 113849224A CN 202110218707 A CN202110218707 A CN 202110218707A CN 113849224 A CN113849224 A CN 113849224A
Authority
CN
China
Prior art keywords
elements
matrix
instruction
dimensional matrix
vector
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
CN202110218707.XA
Other languages
English (en)
Inventor
梅纳赫姆·阿德尔曼
罗伯特·瓦伦泰恩
巴鲁赫·齐弗
雅罗斯拉夫·波拉克
吉迪恩·斯塔普
阿米特·格拉德斯坦
西蒙·鲁巴诺维奇
泽夫·斯帕波
马克·查尼
克里斯托弗·修斯
亚历山大·海涅克
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 CN113849224A publication Critical patent/CN113849224A/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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • 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/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Advance Control (AREA)

Abstract

本公开涉及用于移动数据的指令的装置、方法和系统。在一个实施例中,一种系统包括:矩阵操作加速器电路,该矩阵操作加速器电路包括:处理元件的二维网格;多个寄存器,表示二维矩阵并且耦合到处理元件的二维网格;以及到缓存的耦合件;以及硬件处理器核心,该硬件处理器核心包括:向量寄存器;解码器,用于将单个指令解码为经解码的单个指令,该单个指令包括识别二维矩阵的第一字段、识别二维矩阵的元素的集合的第二字段、以及识别向量寄存器的第三字段;以及执行电路,用于执行经解码的单个指令,以使得通过与到缓存的耦合件分开的硬件处理器核心到矩阵操作加速器电路的耦合件,来将元素的集合从表示二维矩阵的多个寄存器存储到向量寄存器中。

Description

用于移动数据的指令的装置、方法和系统
技术领域
本公开一般地涉及计算机处理器体系结构,更具体地涉及实现用于在矩阵操作加速器的分片(tile)和向量寄存器之间移动数据的指令的电路。
背景技术
处理器或者处理器的集合执行来自指令集(例如,指令集体系结构 (instructionset architecture,ISA))的指令。指令集是与编程有关的计算机体系结构的一部分,并且一般包括原生数据类型、指令、寄存器体系结构、寻址模式、存储器体系结构、中断和异常处理、以及外部输入和输出 (I/O)。应当注意这里的术语指令可以指宏指令,例如提供到处理器以便执行的指令,或者指微指令,例如由处理器的解码器对宏指令解码而产生的指令。
发明内容
根据本公开的实施例的一个方面,提供了一种装置,包括:矩阵操作加速器电路,包括:处理元件的二维网格,多个寄存器,表示二维矩阵并且耦合到所述处理元件的二维网格,以及到缓存的耦合件;以及硬件处理器核心,包括:向量寄存器,解码器,用于将单个指令解码为经解码的单个指令,所述单个指令包括识别所述二维矩阵的第一字段、识别所述二维矩阵的元素的集合的第二字段、以及识别所述向量寄存器的第三字段,以及执行电路,用于执行所述经解码的单个指令,以使得:通过与所述到缓存的耦合件分开的、所述硬件处理器核心到所述矩阵操作加速器电路的耦合件,来将所述元素的集合从表示所述二维矩阵的所述多个寄存器存储到所述向量寄存器中。
根据本公开的实施例的另一方面,提供了一种方法,包括:从矩阵操作加速器电路的处理元件的二维网格生成到所述矩阵操作加速器电路的表示二维矩阵的多个寄存器中的输出,所述矩阵操作加速器电路包括到缓存的耦合件;利用硬件处理器核心的解码器将单个指令解码为经解码的单个指令,所述单个指令包括识别所述二维矩阵的第一字段、识别所述二维矩阵的元素的集合的第二字段、以及识别所述硬件处理器核心的向量寄存器的第三字段;以及利用所述硬件处理器核心的执行电路执行所述经解码的单个指令,以使得:通过与所述到缓存的耦合件分开的、所述硬件处理器核心到所述矩阵操作加速器电路的耦合件,来将所述元素的集合从表示所述二维矩阵的所述多个寄存器存储到所述向量寄存器中。
根据本公开的实施例的又一方面,提供了一种存储有代码的非暂态机器可读介质,所述代码当被机器执行时使得所述机器执行一种方法,该方法包括:从矩阵操作加速器电路的处理元件的二维网格生成到所述矩阵操作加速器电路的表示二维矩阵的多个寄存器中的输出,所述矩阵操作加速器电路包括到缓存的耦合件;利用硬件处理器核心的解码器将单个指令解码为经解码的单个指令,所述单个指令包括识别所述二维矩阵的第一字段、识别所述二维矩阵的元素的集合的第二字段、以及识别所述硬件处理器核心的向量寄存器的第三字段;以及利用所述硬件处理器核心的执行电路执行所述经解码的单个指令,以使得:通过与所述到缓存的耦合件分开的、所述硬件处理器核心到所述矩阵操作加速器电路的耦合件,来将所述元素的集合从表示所述二维矩阵的所述多个寄存器存储到所述向量寄存器中。
附图说明
在附图中以示例而非限制方式图示了本公开,附图中相似的标记指示类似的要素并且其中:
图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根据本公开的实施例图示了耦合到包括一个或多个“分片到向量寄存器”和/或“向量寄存器到分片”指令的存储装置的硬件处理器。
图24根据本公开的实施例图示了处理“分片到向量寄存器”指令的方法。
图25是根据本公开的实施例图示出TILEMOVROWE指令的使用的框图。
图26是根据本公开的实施例图示出TILEMOVALLE指令的使用的框图。
图27根据本公开的实施例图示了包括矩阵(分片)操作加速器的系统的实施例,该矩阵(分片)操作加速器利用包括转换电路的一个或多个直接路径将数据从向量寄存器加载到分片中和/或将数据从分片存储到向量寄存器中。
图28根据本公开的实施例图示了耦合到包括一个或多个“分片到向量寄存器”和/或“向量寄存器到分片”指令的存储装置以及矩阵(分片) 操作加速器的硬件处理器,该矩阵(分片)操作加速器利用包括转换电路的一个或多个直接路径将数据从向量寄存器加载到分片中和/或将数据从分片存储到向量寄存器中。
图29根据本公开的实施例图示了处理“向量寄存器到分片”指令的方法。
图30是根据本公开的实施例图示出TILEXMOVE指令的使用的框图。
图31A是根据本公开的实施例图示出通用向量友好指令格式及其类别 A指令模板的框图。
图31B是根据本公开的实施例图示出通用向量友好指令格式及其类别 B指令模板的框图。
图32A是根据本公开的实施例图示出图31A和图31B中的通用向量友好指令格式的字段的框图。
图32B是根据本公开的一个实施例图示出构成完整操作码字段的图 32A中的特定向量友好指令格式的字段的框图。
图32C是根据本公开的一个实施例图示出构成寄存器索引字段的图 32A中的特定向量友好指令格式的字段的框图。
图32D是根据本公开的一个实施例图示出构成增强操作字段3150的图32A中的特定向量友好指令格式的字段的框图。
图33是根据本公开的一个实施例的寄存器体系结构的框图。
图34A是根据本公开的实施例图示出示范性有序流水线和示范性寄存器重命名、乱序(out-of-order)发出/执行流水线两者的框图。
图34B是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、乱序发出/执行体系结构核心两者的框图。
图35A是根据本公开的实施例的单个处理器核心及其与片上互连网络以及与第2级(L2)缓存的其本地子集的连接的框图。
图35B是根据本公开的实施例的图35A中的处理器核心的一部分的扩展视图。
图36是根据本公开的实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器的框图。
图37是根据本公开的一个实施例的系统的框图。
图38是根据本公开的实施例的更具体示范性系统的框图。
图39示出了根据本公开的实施例的第二更具体示范性系统的框图。
图40示出了根据本公开的实施例的片上系统(SoC)的框图。
图41是根据本公开的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。
具体实施方式
在接下来的描述中,阐述了许多具体细节。然而,要理解,没有这些具体细节也可实现实施例。在其他情况下,没有详细示出公知的电路、结构和技术,以免模糊对本说明书的理解。
说明书中提及“一个实施例”、“一实施例”、“一示例实施例”等等表明描述的实施例可包括特定的特征、结构或特性,但可不一定每个实施例都包括该特定特征、结构或特性。另外,这种短语不一定指同一实施例。另外,当联系一实施例来描述特定的特征、结构或特性时,认为联系其他实施例(无论是否明确描述)来实现这种特征、结构或特性是在本领域技术人员的知识范围内的。
矩阵在诸如机器学习和其他海量数据处理之类的许多计算任务中可越来越重要。深度学习是一类机器学习算法。深度学习体系结构,例如深度神经网络,可被应用到包括计算机视觉、话音识别、自然语言处理、音频识别、社交网络过滤、机器翻译、生物信息学和药物设计在内的领域。
推断和训练——用于深度学习的两个工具——可利用低精度算术。最大化深度学习算法和计算的吞吐量可辅助满足深度学习处理器的需要,例如在数据中心中执行深度学习的那些。
矩阵-矩阵乘法(也称为GEMM或者一般矩阵乘法)在某些处理器上是一种计算沉重操作。用于矩阵乘法(例如,GEMM)的特殊硬件是用于改善诸如深度学习之类的某些应用的峰值计算(和能量效率)的一个良好选项。这些应用中的一些——包括深度学习——可在具有相对较少比特的输入数据元素上操作,而不会丢失准确性,只要输出元素具有足够的比特 (例如,多于输入)。
在某些处理器中,应对矩阵是一个困难和/或指令密集的任务。例如,矩阵的行可被放入多个紧缩数据(例如,SIMD或向量)寄存器中,然后被独立地操作。例如,加二8x2(例如,行乘列)矩阵取决于数据大小可要求加载或收集到四个紧缩数据寄存器中。然后执行与来自每个矩阵的第一行相对应的紧缩数据寄存器的第一加法,并且执行与来自每个矩阵的第二行相对应的紧缩数据寄存器的第二加法。然后所得到的紧缩数据寄存器被分散回到存储器。虽然对于小矩阵这个场景可能是可接受的,但其对于更大的矩阵经常是不可接受的。
论述
本文描述了在诸如中央处理单元(central processing unit,CPU)、图形处理单元(graphic processing unit,GPU)和加速器之类的计算机硬件中支持矩阵操作的机制。矩阵操作利用表示诸如寄存器之类的存储器的一个或多个紧缩区域的2维(2-D)数据结构。在本说明书各处,这些2-D数据结构被称为分片(tile)。注意矩阵可小于分片(只使用一分片的一部分)或者利用多个分片(矩阵大于任何一个分片的大小)。在说明书各处,矩阵(分片)语言被用于指示利用分片执行的影响矩阵的操作;该矩阵是否大于任何一个分片通常是不相关的。
每个分片可被不同的操作所作用,例如本文详述的那些,包括但不限于:矩阵(分片)乘法、分片加法、分片减法、分片对角线、分片归零、分片变换、分片点积、分片广播、分片行广播、分片列广播、分片乘法、分片乘法和累加、分片移动,等等。此外,对诸如比例和/或偏置的使用之类的操作子的支持可结合这些操作使用或者支持未来的非数值应用,例如OpenCL“本地存储器”、数据压缩/解压缩,等等。本文还描述了用于执行矩阵操作(例如,TILEPARTIALDOTPRODUCT)指令的指令。
存储的各部分(例如,存储器(非易失性和易失性)、寄存器、缓存等等)被布置成不同水平和垂直维度的分片。例如,分片可具有4的水平维度(例如,矩阵的四行)和8的垂直维度(例如,矩阵的8列)。通常,水平维度与元素大小有关(例如,2、4、8、16、32、64、128比特等等)。可支持多个数据类型(单精度浮点、双精度浮点、整数等等)。
配置的分片的示范性使用
在一些实施例中,可以配置分片参数。例如,给定的分片可被配置为提供分片选项。示范性分片选项包括但不限于:分片的行的数目,分片的列的数目,分片是否有效,以及分片是否由一对相等大小的分片构成。
图1A图示了配置的分片的实施例。如图所示,应用存储器102的4 kB上存储了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的4 kB上存储了2对1kB分片,第一对是分片t4L 124和分片t4R 126,并且第二对是分片t5L 128和分片t5R130。如图所示,分片对被划分成左分片和右分片。在其他实施例中,分片对被划分成偶数分片和奇数分片。在这个示例中,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个名称来指定成对的分片。在一些实施例中,分片指令接受成对分片的名称作为操作对象。在操作中,可利用加载和存储操作从存储器加载和向存储器存储分片。取决于使用的指令编码方案,可用应用存储器的量以及可用分片的大小、数目和配置可变化。
在一些实施例中,分片参数是可定义的。例如,“调色板” (palette)用于提供分片选项。示范性选项包括但不限于:分片名称的数目、一行存储中的字节的数目、分片中的行和列的数目,等等。例如,分片的最大“高度”(行数)可被定义为:
分片最大行=体系结构存储/(调色板名称的数目*每行的字节的数目)。
这样,应用可被编写成使得对名称的固定使用将能够在各实现方式间利用不同的存储大小。
分片的配置是利用分片配置(“TILECONFIG”)指令完成的,其中特定的分片使用是在选定的调色板中定义的。这个声明包括要使用的分片名称的数目、每名称(分片)的行和列的所请求数目以及在一些实施例中的每个分片的所请求数据类型。在一些实施例中,在TILECONFIG指令的执行期间执行一致性检查以确定其匹配调色板条目的限制。
示范性分片存储类型
图2图示了矩阵存储的若干个示例。在(A)中,分片被存储在存储器中。如图所示,每“行”由四个紧缩数据元素构成。为了到达下一“行”,使用步幅值。注意行可被接连存储在存储器中。跨步的存储器访问允许了在分片存储不映射底层存储器阵列行宽度时,访问一行,然后访问下一行。
从存储器的分片加载和到存储器的分片存储通常是从应用存储器到数据的紧缩行的跨步访问。示范性TILELOAD和TILESTORE指令或者作为加载操作指令中的TILE操作对象的对应用存储器的其他指令引用在一些实施例中是可重启的,以处理(多达)2*行的页出错、未掩蔽的浮点异常和/或每指令中断。
在(B)中,矩阵被存储在由多个寄存器组成的分片中,例如紧缩数据寄存器(单指令、多数据(single instruction,multiple data,SIMD)或向量寄存器)。在这个示例中,分片被覆盖在三个物理寄存器上。通常,使用接连的寄存器,然而,不是必需要这样。
在(C)中,矩阵被存储在对于分片操作中使用的融合乘法累加 (fused multiplyaccumulate,FMA)电路而言可访问的非寄存器存储中的分片中。这个存储可在FMA内部或者与FMA相邻。此外,在下文论述的一些实施例中,存储可以是对于数据元素的,而不是整个行或分片的。
TMMA体系结构的支持参数经由CPUID来报告。在一些实施例中,信息的列表包括最大高度和最大SIMD维度。配置TMMA体系结构要求指定每个分片的维度、每个分片的元素大小和调色板识别符。这个配置是通过执行TILECONFIG指令来完成的。
TILECONFIG指令的成功执行使能了后续TILE操作子。 TILERELEASEALL指令清除分片配置并且禁止TILE操作(直到下一个 TILECONFIG指令执行为止)。在一些实施例中,XSAVE、XSTORE等等被用于使用分片的上下文切换中。在一些实施例中,2XCR0比特被用于XSAVE中,一个用于TILECONFIG元数据,并且一个比特对应于实际分片有效载荷数据。
TILECONFIG不仅配置分片使用,而且还设置指示出程序处于配置了分片的代码区域中的状态变量。实现方式可列举对可用于分片区域的其他指令的限制,例如不使用现有寄存器集合,等等。
退出分片区域通常是利用TILERELEASEALL指令完成的。它不取任何参数并且迅速地无效所有分片(指示出数据不再需要任何保存或恢复) 并且清除与在分片区域中相对应的内部状态。
在一些实施例中,分片操作将使超出分片配置指定的维度之外的任何行和任何列归零。例如,分片操作将在每行被写入时使超出列的配置数目 (将元素的大小考虑在内)的数据归零。例如,对于64字节行和配置有 10行和12列的分片,写入FP32元素的操作将用带有输出/结果数据的 12*4字节写入前10行的每一者并且将每一行中的剩余4*4字节归零。分片操作还在前10个配置的行之后将任何行完全归零。当使用具有64字节行的1K分片时,将存在16行,因此在此示例中,后6行也将被归零。
在一些实施例中,上下文恢复指令(例如,XRSTOR)在加载数据时强制实施分片的超出配置的行的数据将被维持为零。如果没有有效配置,则所有行被归零。分片数据的XRSTOR可加载列中的超出配置的那些的垃圾。XRSTOR应当不可能清除超出配置的列的数目,因为没有与分片配置相关联的元素宽度。
上下文保存(例如,XSAVE)在将其写入到存储器时暴露整个TILE 存储区域。如果XRSTOR将垃圾数据加载到了分片的最右部分中,则该数据将被XSAVE保存。XSAVE将对超出为每个分片指定的数目的行写入零。
在一些实施例中,分片指令是可重启的。访问存储器的操作允许页出错之后的重启。应对浮点操作的计算指令也允许未掩蔽浮点异常,其中对异常的掩蔽由控制和/或状态寄存器来控制。
为了支持在这些事件之后重启指令,指令在下文详述的启动寄存器中存储信息。
矩阵(分片)操作系统
示范性硬件支持
图3图示了利用矩阵(分片)操作加速器的系统的实施例。在此图示中,主机处理器/处理系统301向矩阵操作加速器307传达命令311(例如,矩阵操纵操作,比如算术或矩阵操纵操作,或者加载和存储操作)。然而,这样示出只是为了论述。如后文详述的,这个加速器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缓冲从存储器加载的分片和/或要存储到存储器的分片(例如,利用tileload或tilestore指令)。数据缓冲器可例如是多个寄存器。通常,这些FMA被布置为能够读取和写入分片的链式FMA 309的网格。在此示例中,矩阵操作加速器 307将利用分片T0、T1和T2执行矩阵乘法操作。分片中的至少一者被容纳在FMA网格309中。在一些实施例中,操作中的所有分片被存储在FMA网格309中。在其他实施例中,只有子集被存储在FMA网格309 中。如图所示,T1被容纳,而T0和T2没有。注意A、B和C指的是这些分片的矩阵,这些矩阵可能占据或者没有占据分片的整个空间。
图6图示了使用分片的矩阵乘法累加操作(“TMMA”)的实施例。
矩阵(TILE A 601)中的行的数目在某些实施例中匹配包括计算的时延的串行(链式)FMA的数目。实现方式可自由在更小高度的网格上再循环,但计算保持相同。
源/目的地向量来自N行的分片(TILE C 605)并且FMA 611的网格执行N向量矩阵操作,产生执行分片的矩阵乘法的完整指令。分片B 603 是另一向量源并且在每一级中向FMA提供“广播”项。
在操作中,在一些实施例中,矩阵B的元素(存储在分片B 603中) 散布在FMA的矩形网格上。矩阵B(存储在分片A 601中)的一行的元素被变换以与FMA的矩形网格的列维度匹配。在网格中的每个FMA处, A和B的元素被相乘并且加到传入的被加数(来自图中的上方)并且传出的总和被传递到FMA的下一行(或者最终输出)。
单个步骤的时延与K(矩形B的行高度)成比例并且从属TMMA通常具有足够的源-目的地行(在单个分片中或者跨分片)以隐藏该时延。一实现方式也可在时间步骤间分割SIMD(紧缩数据元素)维度M(矩阵A 的行高度),但这只是改变与K相乘的常数。当程序指定比TMMA列举的最大值更小的K时,一实现方式可自由用“掩蔽”或“提前退出”来实现这个。
整个TMMA的时延与N*K成比例。重复率与N成比例。每TMMA 指令的MAC的数目是N*K*M。
图7图示了链式融合乘法累加指令的迭代的执行的子集的实施例。具体地,这图示了目的地的一个紧缩数据元素位置的迭代的执行电路。在此实施例中,链式融合乘法累加在有符号源上操作,其中累加器是2x输入数据大小。
第一有符号源(源1 701)和第二有符号源(源2 703)各自具有四个紧缩数据元素。这些紧缩数据元素的每一者存储诸如浮点数据之类的有符号数据。第三有符号源(源3709)具有两个紧缩数据元素,其中每一者存储有符号数据。第一和第二有符号源701和703的大小是第三有符号源 (初始值或先前结果)709的一半。例如,第一和第二有符号源701和703可具有32比特紧缩数据元素(例如,单精度浮点),而第三有符号源 709可具有64比特紧缩数据元素(例如,双精度浮点)。
在此图示中,只示出了第一和第二有符号源701和703的两个最高有效紧缩数据元素位置和第三有符号源709的最高有效紧缩数据元素位置。当然,其他紧缩数据元素位置也将被处理。
如图所示,紧缩数据元素被成对处理。例如,第一和第二有符号源 701和703的最高有效紧缩数据元素位置的数据被利用乘法器电路705来相乘,并且来自第一和第二有符号源701和703的次高有效紧缩数据元素位置的数据被利用乘法器电路707来相乘。在一些实施例中,这些乘法器电路705和707被再利用于其他紧缩数据元素位置。在其他实施例中,使用额外的乘法器电路,使得紧缩数据元素被并行处理。在一些上下文中,并行执行是利用是有符号第三源709的大小的通道来完成的。每个乘法的结果被利用加法电路711来相加。
乘法的结果的加法的结果被加到来自有符号源3 709的最高有效紧缩数据元素位置的数据(利用不同的加法器713或者相同的加法器711)。
最后,第二加法的结果或者被存储到有符号目的地715中的与从有符号第三源709使用的紧缩数据元素位置相对应的紧缩数据元素位置中,或者被传递到下一迭代,如果存在下一迭代的话。在一些实施例中,写入掩码被应用到此存储,使得如果相应的写入掩码(比特)被设置,则存储发生,而如果没有设置,则存储不发生。
图8图示了链式融合乘法累加指令的迭代的执行的子集的实施例。具体地,这图示了目的地的一个紧缩数据元素位置的迭代的执行电路。在此实施例中,链式融合乘法累加在有符号源上操作,其中累加器是2x输入数据大小。
第一有符号源(源1 801)和第二有符号源(源2 803)各自具有四个紧缩数据元素。这些紧缩数据元素的每一者存储诸如整数数据之类的有符号数据。第三有符号源(源3809)具有两个紧缩数据元素,其中每一者存储有符号数据。第一和第二有符号源801和803的大小是第三有符号源 809的一半。例如,第一和第二有符号源801和803可具有32比特紧缩数据元素(例如,单精度浮点),第三有符号源809可具有64比特紧缩数据元素(例如,双精度浮点)。
在此图示中,只示出了第一和第二有符号源801和803的两个最高有效紧缩数据元素位置和第三有符号源809的最高有效紧缩数据元素位置。当然,其他紧缩数据元素位置也将被处理。
如图所示,紧缩数据元素被成对处理。例如,第一和第二有符号源 801和803的最高有效紧缩数据元素位置的数据被利用乘法器电路805来相乘,并且来自第一和第二有符号源801和803的次高有效紧缩数据元素位置的数据被利用乘法器电路807来相乘。在一些实施例中,这些乘法器电路805和807被再利用于其他紧缩数据元素位置。在其他实施例中,使用额外的乘法器电路,使得紧缩数据元素被并行处理。在一些上下文中,并行执行是利用是有符号第三源(初始值或先前迭代结果)809的大小的通道来完成的。每个乘法的结果被利用加法/饱和电路813加到有符号第三源809。
加法/饱和(累加器)电路813在加法导致太大的值时保护操作对象的符号。具体地,饱和评估在多路加法和写入到目的地或下一迭代之间的无限精度结果上发生。当累加器813是浮点并且输入项是整数时,乘积和浮点累加器输入值的总和被变成无限精度值(数百比特的定点数),乘法结果和第三输入的加法被执行,并且到实际累加器类型的单次舍入被执行。
无符号饱和指的是输出值被限于该元素宽度的最大无符号数(全 1)。有符号饱和指的是值被限于在该元素宽度的最小负数和最大正数之间的范围中(例如对于字节,范围是从-128(=-2^7)到127(=2^7-1))。
加法和饱和检查的结果被存储到有符号结果815中的与从有符号第三源809使用的紧缩数据元素位置相对应的紧缩数据元素位置中,或者被传递到下一迭代,如果存在下一迭代的话。在一些实施例中,写入掩码被应用到此存储,使得如果相应的写入掩码(比特)被设置,则存储发生,而如果没有设置,则存储不发生。
图9图示了链式融合乘法累加指令的迭代的执行的子集的实施例。具体地,这图示了目的地的一个紧缩数据元素位置的迭代的执行电路。在此实施例中,链式融合乘法累加在有符号源和无符号源上操作,其中累加器是4x输入数据大小。
第一有符号源(源1 901)和第二无符号源(源2 903)各自具有四个紧缩数据元素。这些紧缩数据元素的每一者具有诸如浮点或整数数据之类的数据。第三有符号源(初始值或结果915)具有存储有符号数据的紧缩数据元素。第一和第二源901和903的大小是第三有符号源915的四分之一。例如,第一和第二源901和903可具有16比特紧缩数据元素(例如,字),并且第三有符号源915可具有64比特紧缩数据元素(例如,双精度浮点或64比特整数)。
在此图示中,示出了第一和第二源901和903的四个最高有效紧缩数据元素位置和第三有符号源915的最高有效紧缩数据元素位置。当然,其他紧缩数据元素位置也将被处理,如果存在任何这样的位置的话。
如图所示,紧缩数据元素被成四元组地处理。例如,第一和第二源 901和903的最高有效紧缩数据元素位置的数据被利用乘法器电路905来相乘,来自第一和第二源901和903的次高有效紧缩数据元素位置的数据被利用乘法器电路907来相乘,来自第一和第二源901和903的第三高有效紧缩数据元素位置的数据被利用乘法器电路909来相乘,并且来自第一和第二源901和903的最低有效紧缩数据元素位置的数据被利用乘法器电路911来相乘。在一些实施例中,在乘法之前,第一源901的有符号紧缩数据元素被符号扩展并且第二源903的无符号紧缩数据元素被零扩展。
在一些实施例中,这些乘法器电路905-911被再利用于其他紧缩数据元素位置。在其他实施例中,使用额外的乘法器电路,使得紧缩数据元素被并行处理。在一些上下文中,并行执行是利用是有符号第三源915的大小的通道来完成的。每个乘法的结果被利用加法电路913来相加。
乘法的结果的加法的结果被加到来自有符号源3 915的最高有效紧缩数据元素位置的数据(利用不同的加法器917或者相同的加法器913)。
最后,第二加法的结果919或者被存储到有符号目的地中的与从有符号第三源915使用的紧缩数据元素位置相对应的紧缩数据元素位置中,或者被传递到下一迭代。在一些实施例中,写入掩码被应用到此存储,使得如果相应的写入掩码(比特)被设置,则存储发生,而如果没有设置,则存储不发生。
图10图示了链式融合乘法累加指令的迭代的执行的子集的实施例。具体地,这图示了目的地的一个紧缩数据元素位置的迭代的执行电路。在此实施例中,链式融合乘法累加在有符号源和无符号源上操作,其中累加器是4x输入数据大小。
第一有符号源1001和第二无符号源1003各自具有四个紧缩数据元素。这些紧缩数据元素的每一者存储诸如浮点或整数数据之类的数据。第三有符号源1015(初始或先前结果)具有存储有符号数据的紧缩数据元素。第一和第二源的大小是第三有符号源1015(初始或先前结果)的四分之一。例如,第一和第二源可具有16比特紧缩数据元素(例如,字),并且第三有符号源1015(初始或先前结果)可具有64比特紧缩数据元素 (例如,双精度浮点或64比特整数)。
在此图示中,示出了第一有符号源1001和第二无符号源1003的四个最高有效紧缩数据元素位置和第三有符号源1015的最高有效紧缩数据元素位置。当然,其他紧缩数据元素位置也将被处理,如果存在任何这样的位置的话。
如图所示,紧缩数据元素被成四元组地处理。例如,第一有符号源 1001和第二无符号源1003的最高有效紧缩数据元素位置的数据被利用乘法器电路1005来相乘,来自第一有符号源1001和第二无符号源1003的次高有效紧缩数据元素位置的数据被利用乘法器电路1007来相乘,来自第一有符号源1001和第二无符号源1003的第三高有效紧缩数据元素位置的数据被利用乘法器电路1009来相乘,并且来自第一有符号源1001和第二无符号源1003的最低有效紧缩数据元素位置的数据被利用乘法器电路 1011来相乘。在一些实施例中,在乘法之前,第一有符号源1001的有符号紧缩数据元素被符号扩展并且第二无符号源1003的无符号紧缩数据元素被零扩展。
在一些实施例中,这些乘法器电路1005-1011被再利用于其他紧缩数据元素位置。在其他实施例中,使用额外的乘法器电路,使得紧缩数据元素被并行处理。在一些上下文中,并行执行是利用是第三有符号源1015 (初始或先前结果)的大小的通道来完成的。乘法的结果的加法的结果被利用加法器/饱和1013电路加到来自第三有符号源1015(初始或先前结果)的最高有效紧缩数据元素位置的数据。
加法/饱和(累加器)电路1013在加法导致对于有符号饱和而言太大或太小的值时保护操作对象的符号。具体地,饱和评估在多路加法和写入到目的地之间的无限精度结果上发生。当累加器1013是浮点并且输入项是整数时,乘积和浮点累加器输入值的总和被变成无限精度值(数百比特的定点数),乘法结果和第三输入的加法被执行,并且到实际累加器类型的单次舍入被执行。
加法和饱和检查的结果1019被存储到有符号目的地中的与从第三有符号源1015(初始或先前结果)使用的紧缩数据元素位置相对应的紧缩数据元素位置中,或者被传递到下一迭代。在一些实施例中,写入掩码被应用到此存储,使得如果相应的写入掩码(比特)被设置,则存储发生,而如果没有设置,则存储不发生。
图11根据一实施例图示了2的幂大小的SIMD实现方式,其中累加器使用大于到乘法器的输入的输入大小。注意(到乘法器的)源和累加器值可以是有符号或无符号值。对于具有2X输入大小的累加器(换言之,累加器输入值是源的紧缩数据元素大小的两倍大小),表格1101例示了不同的配置。对于字节大小的源,累加器使用大小为16比特的字或半精度浮点(half-precision floating-point,HPFP)值。对于字大小的源,累加器使用大小为32比特的32比特整数或单精度浮点(single-precision floating- point,SPFP)值。对于SPFP或32比特整数大小的源,累加器使用大小为64比特的64整数或双精度浮点(double-precision floating-point, DPFP)值。
对于具有4X输入大小的累加器(换言之,累加器输入值是源的紧缩数据元素大小的四倍大小),表格1103例示了不同的配置。对于字节大小的源,累加器使用大小为32比特的32比特整数或单精度浮点(SPFP) 值。对于字大小的源,累加器在一些实施例中使用大小为64比特的64比特整数或双精度浮点(DPFP)值。
对于具有8X输入大小的累加器(换言之,累加器输入值是源的紧缩数据元素大小的八倍大小),表格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与引退电路1317重叠以例示出可用来实现寄存器重命名和乱序执行的各种方式(例如,利用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;利用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;利用寄存器映射和寄存器的池;等等)。引退电路1317和(一个或多个)物理寄存器文件1315耦合到(一个或多个)执行电路 1311。
虽然寄存器重命名是在乱序执行的上下文中描述的,但应当理解寄存器重命名可用于有序体系结构中。虽然处理器的图示实施例还可包括分开的指令和数据缓存单元和共享的L2缓存单元,但替换实施例可对于指令和数据两者具有单个内部缓存,例如第1级(L1)内部缓存,或者多级别的内部缓存。在一些实施例中,系统可包括内部缓存和在核心和/或处理器外部的外部缓存的组合。或者,所有缓存都可在核心和/或处理器外部。
执行电路1311是一个或多个执行电路的集合,包括标量电路1321、向量/SIMD电路1323和矩阵操作电路1327,以及存储器访问电路1325来访问缓存1313。执行电路在各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)上执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可包括专用于特定功能或功能集合的若干个执行单元,但其他实施例可只包括一个执行单元或者全都执行所有功能的多个执行单元。标量电路1321执行标量操作,向量/SIMD电路 1323执行向量/SIMD操作,并且矩阵操作电路1327执行本文详述的矩阵 (分片)操作。
作为示例,示范性寄存器重命名、乱序发出/执行核心体系结构可实现流水线如下:1)指令取得电路执行取得和长度解码级(stage);2)分支和解码电路1303执行解码级;3)分配/重命名1307电路执行分配级和重命名级;4)调度器电路1309执行调度级;5)耦合到或者包括在调度器电路1309和分配/重命名1307中的(一个或多个)物理寄存器文件和存储器单元执行寄存器读取/存储器读取级;执行电路1311执行执行级;6)存储器单元和(一个或多个)物理寄存器文件单元执行写回/存储器写入级; 7)在异常处理级中可涉及各种单元;并且8)引退单元和(一个或多个) 物理寄存器文件单元执行提交级。
核心可支持一个或多个指令集(例如,x86指令集(带有已随着更新版本添加的一些扩展);加州森尼维耳市的MIPS技术公司的MIPS指令集;加州森尼维耳市的ARM控股公司的ARM指令集(带有可选的额外扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核心1390包括逻辑来支持紧缩数据指令集扩展(例如,AVX1、 AVX2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。
应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按多种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心为该物理核心在同时进行多线程处理的每个线程提供逻辑核心),或者这些的组合(例如,时间切片式取得和解码,然后是同时多线程处理,例如像
Figure BDA0002954989590000201
Hyperthreading技术中那样)。
图14图示了支持使用分片的矩阵操作的处理器核心流水线的实施例。分支预测和解码电路1403从存储在指令存储1401中的指令执行指令的分支预测、指令的解码和/或这两者。例如,本文详述的指令可被存储在指令存储中。在一些实现方式中,单独的电路被用于分支预测,并且在一些实施例中,至少一些指令被解码为一个或多个微操作、微代码入口点、微指令、其他指令或者使用微代码1405的其他控制信号。分支预测和解码电路1403可利用各种不同的机制来实现。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(programmable logic array, PLA)、微代码只读存储器(read only memory,ROM),等等。
分支预测和解码电路1403耦合到分配/重命名1407电路,分配/重命名1407电路在一些实施例中耦合到调度器电路1409。在一些实施例中,这些电路通过执行以下所列项中的一个或多个来提供寄存器重命名、寄存器分配和/或调度功能:1)将逻辑操作对象值重命名为物理操作对象值 (例如,一些实施例中的寄存器别名表),2)向解码的指令分配状态比特和标志,以及3)调度经解码的指令在指令池之外的执行电路上执行 (例如,在一些实施例中利用预留站)。
调度器电路1409表示任何数目的不同调度器,包括预留站、中央指令窗口等等。(一个或多个)调度器单元调度器电路1409耦合到或者包括(一个或多个)物理寄存器文件1415。(一个或多个)物理寄存器文件 1415的每一者表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)、分片,等等。在一个实施例中, (一个或多个)物理寄存器文件1415包括向量寄存器电路、写入掩码寄存器电路和标量寄存器电路。这些寄存器电路可提供体系结构式向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器文件1415与引退电路1417重叠以例示出可用来实现寄存器重命名和乱序执行的各种方式(例如,利用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;利用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;利用寄存器映射和寄存器的池;等等)。引退电路1417和(一个或多个)物理寄存器文件1415耦合到(一个或多个)执行电路1411。
虽然寄存器重命名是在乱序执行的上下文中描述的,但应当理解寄存器重命名可用于有序体系结构中。虽然处理器的图示实施例还可包括分开的指令和数据缓存单元和共享的L2缓存单元,但替换实施例可对于指令和数据两者具有单个内部缓存,例如第1级(L1)内部缓存,或者多级别的内部缓存。在一些实施例中,系统可包括内部缓存和在核心和/或处理器外部的外部缓存的组合。或者,所有缓存都可在核心和/或处理器外部。
执行电路1411是一个或多个执行电路1427的集合和一个或多个存储器访问电路1425的集合来访问缓存1413。执行电路1427执行本文详述的矩阵(分片)操作。
作为示例,示范性寄存器重命名、乱序发出/执行核心体系结构可实现流水线如下:1)指令取得电路执行取得和长度解码级;2)分支和解码电路1403执行解码级;3)分配/重命名1407电路执行分配级和重命名级; 4)调度器电路1409执行调度级;5)耦合到或者包括在调度器电路1409 和分配/重命名1407电路中的(一个或多个)物理寄存器文件和存储器单元执行寄存器读取/存储器读取级;执行电路1411执行执行级;6)存储器单元和(一个或多个)物理寄存器文件单元执行写回/存储器写入级;7) 在异常处理级中可涉及各种单元;并且8)引退单元和(一个或多个)物理寄存器文件单元执行提交级。
核心可支持一个或多个指令集(例如,x86指令集(带有已随着更新版本添加的一些扩展);加州森尼维耳市的MIPS技术公司的MIPS指令集;加州森尼维耳市的ARM控股公司的ARM指令集(带有可选的额外扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核心1490包括逻辑来支持紧缩数据指令集扩展(例如,AVX1、AVX2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。
应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按多种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心为该物理核心在同时进行多线程处理的每个线程提供逻辑核心)、或者这些的组合(例如,时间切片式取得和解码,然后是同时多线程处理,例如像
Figure BDA0002954989590000231
Hyperthreading技术中那样)。
布局
在本说明书各处,数据是利用行主要数据布局来表达的。列主要用户应当根据其朝向来转化术语。图15图示了以行主要格式和列主要格式表达的矩阵的示例。如图所示,矩阵A是2x3矩阵。当此矩阵被以行主要格式来存储时,行的数据元素是接连的。当此矩阵被以列主要格式来存储时,列的数据元素是接连的。矩阵的一个公知属性是AT*BT=(BA)T,其中上标T表示变换。将列主要数据读取为行主要数据导致矩阵看起来像变换矩阵。
在一些实施例中,在硬件中利用行主要语义,并且列主要数据将交换操作对象顺序,结果是矩阵的变换,但对于后续从存储器的列主要读取,其是正确的、未变换的矩阵。
例如,如果有两个列主要矩阵要相乘:
ab gik ag+bhai+bjak+bl
cd*hjl=cg+dhci+djck+dl
ef eg+fhei+fjek+fl
(3x2) (2x3) (3x3)
输入矩阵将在线性存储器(列主要)中被存储为:
a c e b d f
以及
g h i j k l。
将这些矩阵读取为行主要,具有维度2x3和3x2,则它们看起来将是:
a c e以及g h
b d f i j
k l
交换顺序和矩阵相乘:
g h a c e ag+bh cg+dh eg+fh
i j*b d f=ai+bjci+djei+fj
k l ak+bl ck+dl ek+fl
变换矩阵输出并且随后可被存储为行主要顺序:
ag+bh cg+dh eg+fh ai+bj ci+dj ei+fj ak+bl ck+dl ek+fl
并且用于后续的列主要计算中,其是正确的未变换的矩阵:
ag+bh ai+bj ak+bl
cg+dh ci+dj ck+dl
eg+fh ei+fj ek+fl
示范性使用
图16图示了矩阵(分片)的使用的示例。在此示例中,矩阵C 1601 包括两个分片,矩阵A 1603包括一个分片,并且矩阵B 1605包括两个分片。此图示出了计算矩阵乘法的算法的内部循环的示例。在此示例中,来自矩阵C 1601的两个结果分片tmm0和tmm1被用于累积中间结果。来自矩阵A 1603的一个分片(tmm2)在其被来自矩阵B 1605的两个分片相乘时被重复使用两次。指针指向从箭头指示的方向加载新的A矩阵(分片) 和两个新的B矩阵(分片)。未示出的外部循环对于C分片调整指针。
如图所示的示范性代码包括对分片配置指令的使用并且被执行来配置分片使用、加载分片、处理分片的循环、将分片存储到存储器和释放分片使用。
图17图示了矩阵(分片)的使用的实施例。在1701,配置分片使用。例如,TILECONFIG指令被执行来配置分片使用,包括设置每分片的行和列的数目。通常,在1703从存储器加载至少一个矩阵(分片)。在 1705利用矩阵(分片)执行至少一个矩阵(分片)操作。在1707,至少一个矩阵(分片)被存储出到存储器并且上下文切换可在1709发生。
示范性配置
分片配置硬件支持
如上所述,分片使用通常需要在使用之前被配置。例如,可能不需要所有行和列的完全使用。配置这些行和列在一些实施例中不仅不节省功率,而且配置可用于确定操作是否将会生成差错。例如,如果M和L不相同,则(N x M)*(L x N)形式的矩阵乘法通常将会行不通。
在利用使用分片的矩阵之前,在一些实施例中,将配置分片支持。例如,每分片多少行和列、要使用的分片等等被配置。TILECONFIG指令是对计算机本身的改进,因为其提供支持来配置计算机使用矩阵加速器(或者作为处理器核心的一部分,或者作为外部装置)。具体地, TILECONFIG指令的执行使得配置被从存储器取回并且被应用到矩阵加速器内的矩阵(分片)设置。
分片使用配置
图18根据一实施例图示了对分片的使用的配置的支持。存储器1801 包含要支持的矩阵(分片)的分片描述1803。
处理器/核心1805的指令执行资源1811将分片描述1803的各方面存储到分片配置1817中。分片配置1817包括调色板表格1813来详述调色板的什么分片被配置(每个分片中的行和列的数目)和指出矩阵支持在使用中的标记。具体地,指令执行资源1811被配置为按分片配置1817的指定来使用分片。指令执行资源1811也可包括机器特定寄存器或配置寄存器来指示分片使用。诸如使用中和开始值之类的额外的值也被设置。分片配置1817利用(一个或多个)寄存器18190来存储分片使用和配置信息。
图19图示了要支持的矩阵(分片)的描述的实施例。这是在 STTILECFG指令的执行时要存储的描述。在此示例中,每个字段是一字节。在字节[0]中,存储调色板ID 1901。调色板ID被用于索引调色板表格 1813,调色板表格1813对每个调色板ID存储分片中的字节的数目,以及由配置定义的与此ID相关联的分片的每行的字节。
字节1存储要被存储在“startRow”寄存器1903中的值,并且字节2 存储要被存储在寄存器startP 1905中的值。为了支持在这些事件之后重启指令,指令在这些寄存器中存储信息。为了支持在例如上文详述那些那样的打断事件之后重启指令,指令在这些寄存器中存储信息。startRow值指示出应当被用于重启的行。startP值在使用对时指示出行内的用于存储操作的位置,并且在一些实施例中,指示出行的低一半(在一对的较低分片中)或者行的高一半(在一对的较高分片中)。一般而言,不需要行 (列)中的位置。
除了TILECONFIG和STTILECFG以外,成功执行矩阵(分片)指令将把startRow和startP两者设置为零。
在中断的矩阵(分片)指令未被重启的任何时候,让startRow和 startP值归零是软件的职责。例如,未掩蔽浮点异常处理程序可决定在软件中完成该操作并且将程序计数器值改变到另一指令,通常是下一指令。在此情况下,软件异常处理程序必须在继续开始程序之前在由操作系统呈现给它的异常中将startRow和startP值归零。操作系统将随后利用恢复指令来重加载这些值。
字节3存储分片1907的对(每分片1b)的指示。
字节16-17为分片0存储行1913和列1915的数目,字节18-19为分片1存储行和列的数目,等等。换言之,每个2字节群组为一分片指定行和列的数目。如果2字节的群组未被用于指定分片参数,则它们应当具有值零。为多于实现方式极限或调色板极限的分片指定分片参数导致出错。未配置的分片被设置到具有0行、0列的初始状态。
最终,存储器中的配置通常结束于结束定界,例如几个接连的字节是全零。
示范性分片和分片配置存储
图20(A)-图20(D)图示了(一个或多个)寄存器1819的示例。图20(A)图示了多个寄存器1819。如图所示每个分片(TMM0 2001...TMMN 2003)具有分开的寄存器,其中每个寄存器为该特定分片存储行和列大小。StartP 2011和StartRow 2013被存储在分开的寄存器中。一个或多个状态寄存器2015被设置(例如,TILES_CONFIGURED=1)来指示出分片被配置来使用。
图20(B)图示了多个寄存器1819。如图所示,每个分片对于其行和列具有分开的寄存器。例如,TMM0行配置2021、TMM0列配置2023、StartP 2011和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)来指示出分片被配置来使用。
设想了其他组合,例如将开始寄存器组合到单个寄存器中,其中它们被分开示出,等等。
寄存器和分片之间的数据移动
图21根据本公开的实施例图示了利用矩阵(分片)操作加速器2107 的系统的实施例。在某些实施例中,主机处理器/处理系统2101(例如,硬件处理器核心,例如图34B中的处理器核心3490)向矩阵操作加速器 2107传达命令(例如,矩阵操纵操作,比如算术或矩阵操纵操作、加载和 /或存储操作)。然而,这样示出只是为了论述。如本文详述的,加速器 2107可以是处理核心的一部分。是分片操纵操作子指令的命令可以把分片称呼为寄存器-寄存器(“reg-reg”)或寄存器-存储器(“reg-mem”)格式。诸如TILESTORE、TILELOAD、TILECONFIG等等之类的其他命令在某些实施例中不在分片上执行数据操作。命令可以是解码的指令(例如,微操作)或者宏指令来供加速器2107处理。在一个实施例中,硬件处理器核心响应于矩阵操作指令被硬件处理器核心执行而向矩阵(分片) 操作加速器2107发送微操作。
在一个实施例中,预留站(reservation station,RS)电路2111向矩阵操作加速器2107发送命令(例如,微操作)。在某些实施例中,矩阵操作加速器2107是分片矩阵单元(tile matrix unit,TMU)。在某些实施例中,矩阵操作加速器2107包括矩阵加速器控制器电路2113。在一个实施例中,矩阵加速器控制器(例如,电路2113)将控制进、出和/或在矩阵操作加速器2107内的数据的操作和流动。矩阵操作加速器2107(例如,矩阵加速器控制器电路2113)可包括例如调谴(dispatch)电路2115,来控制接收到的请求(例如,命令)从主机处理器/处理系统2101到矩阵操作加速器2107的一个或多个组件的调谴。
描绘的矩阵操作加速器2107包括数据缓冲器(例如,寄存器) 2105。在某些实施例中,数据缓冲器(例如,寄存器)2105可配置来将各个矩阵存储到例如第一多个寄存器(例如,分片)中,该第一多个寄存器表示第一二维矩阵(例如,标记为T0的分片将矩阵A存储在存储2105 中),第二二维矩阵(例如,标记为T1的分片将矩阵B存储在存储2105 中),第三二维矩阵(例如,标记为T3的分片将矩阵C存储在存储2105 中),等等。系统(例如,主机处理器/处理系统2101)可包括(例如,一致)存储器接口2103(例如,数据缓存单元)以用于在主机处理器/处理系统2101(例如,作为乱序(OoO)核心)和矩阵操作加速器2107之间发送和接收数据(例如,与命令相对)。
在某些实施例中,矩阵操作加速器2107利用处理元件2109(例如,融合乘加(FMA)电路)的网格来执行操作。在一个实施例中,调谴电路 2115控制数据(例如,来自分片的一个或多个值)从数据缓冲器2105 (例如,形成分片的寄存器)到处理元件2109的网格的发送。在某些实施例中,处理元件2109的网格是处理元件的二维网格,例如,图6中的 FMA的二维网格。
如图21中所示,这里的某些实施例利用(例如,一致)存储器接口 (例如,图21中的存储器接口2103)来在存储器(例如,缓存)和/或主机处理器2101(例如,主机处理器2101)和矩阵操作加速器(例如,矩阵操作加速器2107,例如其数据缓冲器2105(例如,形成分片的寄存器)(例如,分片寄存器))之间传送数据。然而,在某些实施例中,可能希望允许(例如,经由一个或多个指令)对数据缓冲器2105(例如,形成分片的寄存器)的访问(例如,直接访问)。在某些实施例中,处理器的代码的程序员被限于该处理器的指令集体系结构(ISA)。从而,这里的某些实施例提供了一种ISA,其包括一个或多个(例如,宏)指令,这些指令允许在处理器的一个或多个寄存器和矩阵操作加速器的数据缓冲器 (例如,形成分片的寄存器)之间移动数据(例如,不利用间接路径,例如但不限于包括存储器接口2103的路径)。这里的某些实施例针对的是用于在分片和紧缩数据寄存器(例如,具有多个元素的向量寄存器)之间移动数据的指令。
某些工作负载(例如,人工智能工作负载)既涉及矩阵计算(例如,乘法)也涉及按元素计算。一个技术问题是如何将使用专用分片寄存器 (例如,先进矩阵扩展(AdvancedMatrix eXtensions,AMX)分片寄存器)的矩阵操作加速器(例如,其矩阵乘法硬件)与使用向量寄存器(例如,先进向量扩展(Advanced Vector eXtensions,AVX)寄存器,例如但不限于AVX512)的通用单指令多数据(SIMD)硬件相连接。这里的实施例提供了此问题的一种解决方案,即通过利用一个或多个(例如,宏) 指令,这些指令允许在处理器的一个或多个寄存器和矩阵操作加速器(例如,执行电路)的数据缓冲器(例如,形成分片的寄存器)之间移动数据 (例如,不利用间接路径,例如但不限于包括存储器接口2103的路径)。在某些实施例中,被这(一个或多个)指令利用的(例如,2D)分片和(例如,向量)寄存器之间的耦合件(例如,直接路径)(例如,该接口是不包括存储器接口2103的路径)允许比穿过存储器(例如,缓存)更快的访问时间。这里的某些实施例包括该耦合件(例如,直接路径)上的转换电路,用于允许一个或多个指令(例如,也)执行数据类型 (例如,数字格式)转换。耦合件可以是一条或多条电线或者衬底(例如,硅)内的导电沟道。
图22根据本公开的实施例图示了包括矩阵(分片)操作加速器2207 的系统的实施例,该矩阵(分片)操作加速器2207利用一个或多个直接路径(例如,加载到分片连接路径2229和/或从分片存储连接路径2231) 来将数据从向量寄存器2219加载到分片中和/或将数据从分片2205存储到向量寄存器2219中。在某些实施例中,主机处理器/处理系统2201(例如,硬件处理器核心,例如图34B中的处理器核心3490)向矩阵操作加速器2207传达命令(例如,矩阵操纵操作,比如算术或矩阵操纵操作、加载和/或存储操作)。然而,这样示出只是为了论述。如本文详述的,加速器2207可以是处理核心的一部分。是分片操纵操作子指令的命令可以把分片称呼为寄存器-寄存器(“reg-reg”)或寄存器-存储器(“reg- mem”)格式。诸如TILESTORE、TILELOAD、TILECONFIG等等之类的其他命令在某些实施例中不在分片上执行数据操作。命令可以是解码的指令(例如,微操作)或者宏指令来供加速器2207处理。在一个实施例中,硬件处理器核心响应于矩阵操作指令被硬件处理器核心执行而向矩阵(分片)操作加速器2207发送微操作。
在一个实施例中,预留站(RS)电路2211向矩阵操作加速器2207发送命令(例如,微操作)。在某些实施例中,矩阵操作加速器2207是分片矩阵单元(TMU)。在某些实施例中,矩阵操作加速器2207包括矩阵加速器控制器电路2213。在一个实施例中,矩阵加速器控制器(例如,电路2213)将控制进、出和/或在矩阵操作加速器2207内的数据的操作和流动。矩阵操作加速器2207(例如,矩阵加速器控制器电路2213)可包括例如调谴电路2215,来控制接收到的请求(例如,命令)从主机处理器/ 处理系统2201到矩阵操作加速器2207的一个或多个组件的调谴。
在某些实施例中,矩阵操作加速器2207利用处理元件2209(例如,融合乘加(FMA)电路)的网格来执行操作。在一个实施例中,调谴电路 2215控制数据(例如,来自分片的一个或多个值)从数据缓冲器2205 (例如,形成分片的寄存器)到处理元件2209的网格的发送。在某些实施例中,处理元件2209的网格是处理元件的二维网格,例如,图6中的 FMA的二维网格。
描绘的矩阵操作加速器2207包括数据缓冲器(例如,寄存器) 2205。在某些实施例中,数据缓冲器(例如,寄存器)2205可配置来将各个矩阵存储到例如第一多个寄存器(例如,分片)中,其表示第一二维矩阵(例如,标记为T0的分片将矩阵A存储在存储2205中),第二二维矩阵(例如,标记为T1的分片将矩阵B存储在存储2205中),第三二维矩阵(例如,标记为T3的分片将矩阵C存储在存储2205中),等等。系统 (例如,主机处理器/处理系统2201)可包括(例如,一致)存储器接口 2203(例如,数据缓存单元)以用于在主机处理器/处理系统2201(例如,作为乱序(OoO)核心)和矩阵操作加速器2207之间发送和接收数据 (例如,与命令相对)(例如,包括来自存储器接口2203的加载到分片连接路径2225和/或来自存储器接口2203的从分片存储连接路径 2227)。
如图22中所示,这里的某些实施例利用(例如,一致)存储器接口 (例如,图22中的存储器接口2203)来在存储器(例如,缓存)和/或主机处理器2201(例如,主机处理器2201)和矩阵操作加速器(例如,矩阵操作加速器2207,例如其数据缓冲器2205(例如,形成分片的寄存器)(例如,分片寄存器))之间传送数据。然而,在某些实施例中,可能希望允许(例如,经由一个或多个指令)对数据缓冲器2205(例如,形成分片的寄存器)的访问(例如,直接访问)。在某些实施例中,处理器的代码的程序员被限于该处理器的指令集体系结构(ISA)。从而,这里的某些实施例提供了一种ISA,其包括一个或多个(例如,宏)指令,这些指令允许在处理器的一个或多个寄存器和矩阵操作加速器的数据缓冲器 (例如,形成分片的寄存器)之间移动数据(例如,不利用间接路径,例如但不限于包括存储器接口2203的路径)。这里的某些实施例针对的是用于在分片和紧缩数据寄存器(例如,具有多个元素的向量寄存器)之间移动数据的指令,例如在(一个或多个)向量寄存器2219和数据缓冲器 2205(例如,形成分片的寄存器)之间。这里的实施例提供了一种ISA,其包括一个或多个指令,这些指令利用一个或多个直接路径(例如,加载到分片连接路径2229和/或从分片存储连接路径2231)来将数据从向量寄存器2219加载到分片中和/或将数据从分片(例如,数据缓冲器2205中的)存储到向量寄存器2219中。主机处理器可包括(例如,标量)通用寄存器2217,例如与用于128比特向量指令(例如,“SSE”指令/寄存器)、具有3操作对象指令格式的(例如,256比特或512比特)向量指令(例如,“AVX”指令/寄存器)和/或矩阵指令(例如,“矩阵加速器”指令/分片)的任何寄存器分离。
本文公开的指令是对处理器本身的(例如,计算机本身的)功能的改善。没有这种指令作为其指令集的一部分的指令解码电路(例如,解码器 2221)将不会如本文所述那样解码。没有这种指令作为其指令集的一部分的执行电路(例如,执行电路2223)将不会如本文所述那样执行。例如,单个指令,当处理器将该单个指令解码为经解码的单个指令并且该经解码的单个指令被处理器执行时,通过与到存储器接口的(例如,或者经由缓存的)耦合件分开的、硬件处理器核心到矩阵操作加速器电路的耦合件来使得一个或多个元素从表示二维矩阵的多个寄存器存储到向量寄存器中。例如,单个指令,当处理器将该单个指令解码为经解码的单个指令并且该经解码的单个指令被处理器执行时,通过与到存储器接口的(例如,或者经由缓存的)耦合件分开的、硬件处理器核心到矩阵操作加速器电路的耦合件来使得一个或多个元素从向量寄存器存储到表示二维矩阵的多个寄存器中。
在某些实施例中,存储器接口例如在缓存一致性协议下操作,其中通过利用如本文所述的处理器的一个或多个寄存器和矩阵操作加速器的数据缓冲器(例如,形成分片的寄存器)之间的耦合件来避免被利用来维持该缓存一致性(例如,设置比特、执行窥探等等)的额外时间。例如,缓存 (例如,线)一致性一般可以指每个缓存(例如,缓存存储器)和/或一致域中的其他(例如,系统)存储器观察到该同一缓存数据(例如缓存线,并且更具体而言是要包含该同一数据的该缓存线的每个实例)的所有修改。例如,当每个后续读取将会返回新(例如,当前)写入值时,可以说修改被缓存观察到了。在某些实施例中,缓存控制器(例如,缓存一致性控制器)被包括在计算系统中来维持缓存一致性。在一个实施例中,缓存控制器是缓存控制器电路。可根据缓存一致性协议来维持缓存一致性,例如,四状态修改(M)、独占(E)、共享(S)和无效(I)(MESI)协议或者五状态修改(M)、独占(E)、共享(S)、无效(I)和转发 (F)(MESIF)协议。(一个或多个)缓存控制器可为(例如,存储在任何存储器中的)数据项的多个拷贝在该数据项的一个拷贝被改变时提供对该数据项的其他拷贝的更新,以例如确保共享项目(例如,操作对象) 的数据值被及时地在整个计算系统内传播。
注意这里的附图可不描绘所有数据通信连接。本领域普通技术人员将会明白,这是为了不模糊附图中的某些细节。注意附图中的双箭头可不要求双向通信,例如,其可指示单向通信(例如,去往或来自该组件或装置)。在这里的某些实施例中可利用通信路径的任何或所有组合。
图23根据本公开的实施例图示了耦合到包括一个或多个“分片到向量寄存器”和/或“向量寄存器到分片”指令2304的存储装置2302的硬件处理器2300。指令2304可包括一个或多个数据选择字段2306(例如,操作对象),这些数据选择字段2306识别(一个或多个)向量寄存器2219 (例如,其全部或者其元素的真子集)和/或数据缓冲器2205(例如,形成分片的寄存器)。
在某些实施例中,(例如,在处理器/核心支持乱序(OoO)执行的情况下),处理器包括耦合到寄存器文件/存储器电路2312(例如,单元) 的寄存器重命名/分配器电路2310来分配资源并且在寄存器(例如,与指令的初始源和最终目的地相关联的寄存器)上执行寄存器重命名。在某些实施例中,(例如,对于乱序执行),处理器包括耦合到解码器2308的一个或多个调度器电路2310。(一个或多个)调度器电路可调度与解码的指令相关联的一个或多个操作,包括从“分片到向量寄存器”和/或“向量寄存器到分片”指令2304解码的一个或多个操作,来例如用于在执行电路2314上执行。
作为一个示例,经解码的“分片到向量寄存器”指令2304将使得执行电路2314将数据从矩阵操作加速器2207的数据缓冲器2205的分片移动到(一个或多个)向量寄存器2219中,例如,而不通过(例如,缓存一致)存储器接口发送该数据。
作为另一示例,经解码的“向量到分片寄存器”指令2304将使得执行电路2314将数据从(一个或多个)向量寄存器2219移动到矩阵操作加速器2207的数据缓冲器2205的分片中,例如,而不通过(例如,缓存一致)存储器接口发送该数据。
在某些实施例中,例如,包括写回电路2316来将指令的结果写回到目的地(例如,将它们写入到(一个或多个)寄存器2219和/或数据缓冲器2205的分片),使得这些结果在处理器内可见(例如,在产生了这些结果的执行电路外可见)。
这些组件(例如,解码器2308、寄存器重命名/寄存器分配器/调度器 2310、执行电路2314、寄存器(例如,寄存器文件)/存储器2312或者写回电路2316)中的一个或多个可在硬件处理器的单个核心中(例如,以及在多个核心中,每个核心具有这些组件的一实例)。
如下所述,(I)第一类实施例是用于将数据从一个或多个分片移动到一个或多个向量寄存器的那些,并且(II)第二类实施例是用于将数据从一个或多个向量寄存器移动到一个或多个分片的那些。
(I)将数据从一个或多个分片移动到一个或多个向量寄存器
图24根据本公开的实施例图示了处理“分片到向量寄存器”指令的方法2400。处理器(例如,或者处理器核心)可执行方法2400,例如,响应于从软件接收到执行指令的请求。描绘的方法2400包括通过以下步骤来处理“分片到向量寄存器”指令:取得指令(例如,具有识别表示矩阵操作加速器电路的二维矩阵的多个寄存器的第一字段、识别该二维矩阵的元素的集合(例如,连续多个元素)的(可选的)第二字段、以及识别处理器的(一个或多个)向量寄存器的第三字段)2402;将指令解码为经解码的指令2404;取回与第一字段(例如,以及第二字段)相关联的数据 2406;(可选地)调度经解码的指令以用于执行2408;执行经解码的指令,以使得通过与到存储器(例如,缓存)的耦合件分开的、处理器到矩阵操作加速器电路的耦合件,来将来自表示二维矩阵的多个寄存器的元素的集合存储到向量寄存器中2410;以及提交执行的指令的结果2412。
这里的实施例包括指令来将(一个或多个)行或(一个或多个)列 (或者其组合)从分片移动到向量寄存器。行或列可由立即数操作对象或者由通用(例如,图22中的通用寄存器2217)或SIMD寄存器(例如,图22中的向量寄存器2219)来选择。
图25是根据本公开的实施例图示出TILEMOVROWE指令的使用的框图。如图所示,指令2501包括:操作码2502(例如, TILEMOVROWE),其指示出处理器将例如通过与到存储器(例如,缓存)的耦合件分开的、处理器到矩阵操作加速器电路的耦合件,来将一个或多个元素从分片2205(例如,表示二维矩阵的多个寄存器)移动(例如,存储)到目的地向量寄存器2219中;源位置字段2508,其识别分片 2205(例如,以及另一(可选)字段2510,其识别分片的元素的真子集);目的地位置字段2504,其识别目的地向量寄存器2219;以及(可选地)第二目的地位置字段2506,其识别(一个或多个)额外的目的地向量寄存器。在一个实施例中,字段是(例如,标量或向量)寄存器或者立即数。
还示出的是用于执行TILEMOVROWE指令的系统2500。该系统包括指定的源矩阵(分片)2205,执行电路2314,以及指定的目的地向量寄存器2219。应当理解类似的格式可被用于列而不是行移动,例如,利用助记符TILEMOVCOLE(其中COL指的是列实施例)。
在某些实施例中,如果请求的行(或列)高于分片中的行(或列)的数目,则指令的执行将出错。在某些实施例中,如果请求的行(或列)高于分片中的行(或列)的数目,则指令的执行将使得用预选择的值(例如,全零)来写入到(例如,目的地)向量寄存器。
在某些实施例中,如果目的地向量寄存器具有比分片的被请求部分更多的元素(例如,更宽),则指令的执行将出错。在某些实施例中,如果目的地向量寄存器具有比分片的被请求部分更多的元素(例如,更宽),则指令的执行将使得例如对于所请求的分片的行(或列)对于超出定义的宽度处用零来写入到(例如,目的地)向量寄存器。
在某些实施例中,如果分片的被请求部分具有比目的地向量寄存器更多的元素(例如,更宽),则只有行(或列)的真子集(例如,下部或上部)将被移动到目的地向量寄存器中。在某些实施例中,(例如,如果分片的被请求部分具有比目的地向量寄存器更多的元素(例如,更宽)),则指令例如在其字段中(例如,在立即数或寄存器操作对象中)编码分片行(或列)中的被请求偏移量(例如,元素索引),从而允许该行(或列)的不同元素移动到更短的向量寄存器中。在一个实施例中,如果被请求偏移量超过分片的宽度,则该指令在一个实现方式中可出错(例如,生成出错指示,包括但不限于提出标志)或者在一不同的实现方式中对于出界数据返回零(例如,在目的地向量寄存器中)。
以下表格包括示例指令格式,包括操作码(例如,其助记符)和操作对象,随后是该指令的操作。虽然论述了某些值,但这些是示例,而可以利用其他值。
表格1:TILEMOVEROWE(对于从TILE到向量(例如,E是EVEX 向量)寄存器(例如,512比特宽)中的ROW的数据的移动(MOV)) 使用立即数(imm8,例如在16行实施例中具有0到15的值)来作出行选择,使用tsrc来指示源分片,并且使用zdest来指示目的地向量寄存器。
表格1:TILEMOVEROWE
Figure 1
表格2:TILEMOVEROWE(对于从TILE到向量(例如,E是EVEX 向量)寄存器(例如,512比特宽)中的ROW的数据的移动(MOV)) 使用标量(例如,通用)寄存器(例如,32比特寄存器(r32))来作出行选择,使用tsrc来指示源分片,并且使用zdest来指示目的地向量寄存器。
表格2:TILEMOVEROWE
Figure 2
表格3:TILEMOVEROWE(对于从TILE到向量(例如,E是EVEX 向量)寄存器(例如,512比特宽)中的ROW的数据的移动(MOV)) 使用(例如,不同的)向量寄存器(例如,XMM寄存器(例如,128比特))来作出行选择,使用tsrc来指示源分片,并且使用zdest来指示目的地向量寄存器。在一个实施例中,向量寄存器的第一元素被用于存储行选择值。
表格3:TILEMOVEROWE
Figure 3
另一指令实施例是将全部分片内容传送到一组向量寄存器中,例如,而不是只选择行(或列)的真子集。
图26是根据本公开的实施例图示出TILEMOVALLE指令的使用的框图。如图所示,指令2601包括:操作码2602(例如, TILEMOVALLE),其指示出处理器将例如通过与到存储器(例如,缓存)的耦合件分开的、处理器到矩阵操作加速器电路的耦合件,来将所有 (例如,活跃)元素从分片2205(例如,表示二维矩阵的多个寄存器)移动(例如,存储)到多个目的地向量寄存器中(例如,开始于作为第一寄存器的寄存器2219A);源位置字段2608,其识别分片2205(例如,分片的一个或多个元素);以及目的地位置字段2604,其识别(例如,第一)目的地向量寄存器2219A;以及(可选地)第二目的地位置字段 2606,其识别另一(例如,最后利用的)(一个或多个)目的地向量寄存器(例如,图26中的向量寄存器2219P)。在一个实施例中,可以包括字段来指示出要利用的向量寄存器的数目。
还示出的是用于执行TILEMOVALLE指令的系统2600。该系统包括指定的源矩阵(分片)2205,执行电路2314,以及指定的(一个或多个) 目的地向量寄存器,例如,对于图26中的示例利用向量寄存器2219A- 2219P。
数据类型转换
在某些实施例中,可能希望对于要移动的数据执行数据类型(例如,数字格式)转换。这里的某些实施例包括矩阵操作加速器的数据缓冲器 (例如,形成分片的寄存器)和处理器的一个或多个寄存器之间的耦合件 (例如,直接路径)上的转换电路,用于允许一个或多个数据移动指令 (例如,也)执行数据类型(例如,数字格式)转换。数字格式可包括定点格式或浮点格式。整数可表示成二进制格式。有符号整数可表示成二的 (2的)补码格式(例如,其中开头是零指示正整数并且开头是一指示负整数)。在一个实施例中,WORD是16比特,双WORD(DWORD)是 32比特,四WORD(QWORD)是64比特,等等。
(例如,实数)数字可被表示成浮点格式,以例如用固定数目的数位来表示不同数量级的数字。数值格式的一个示例是其中数字一般被近似到固定数目的有效数位(有效数字(significant))并且被利用某个固定底数 (base)(例如,2、10或16的底数)的指数(exponent)来定标。其中 S表示符号比特、M表示定点部分并且E表示指数的数值格式的示例如下:
x=significand x baseexponent (I)
浮点格式的示例如下:
x=(-1)sx1.Mx2E-bias (2)
根据用于二进制FP算术的IEEE 754标准,定点部分是无符号数字 (例如,二进制分数)并且正规化的浮点数在最高有效位(MSB)位置中具有单个一。在某些实施例中,这个比特(例如,在小数点左侧)是隐含的并且因此定点部分不需要存储它。在某些实施例中,指数在这里被表示为非负整数,从中减去恒定的偏置。浮点格式的示例是浮点16(例如,binary16或BF16或者紧缩一半(packed half,PH)),浮点32(例如, binary32或者紧缩单一(packed single,PS)),浮点64(例如,binary64 或者紧缩双倍(packed double,PD)),浮点128(例如,binary128),以及浮点256(例如,binary256),虽然在某些实施例中可使用任何数目的符号、有效数字(例如,其定点部分)或者指数比特。在一个实施例中,binary16格式对于符号比特具有一比特,对于指数具有5比特,并且对于有效数字具有11比特隐含(10个显式存储)。在一个实施例中, binary32格式对于符号比特具有一比特,对于指数具有8比特,并且对于有效数字具有24比特隐含(23个显式存储)。在一个实施例中,binary64 格式对于符号比特具有一比特,对于指数具有11比特,并且对于有效数字具有53比特隐含(52个显式存储)。在一个实施例中,binary128格式对于符号比特具有一比特,对于指数具有15比特,并且对于有效数字具有113比特隐含(112比特显式存储)。在一个实施例中,binary256格式对于符号比特具有一比特,对于指数具有19比特,并且对于有效数字具有237比特隐含(236比特显式存储)。在一个实施例中,大脑浮点16 (bfloat16或BF16)对于符号比特具有一比特,对于指数具有8比特,并且对于有效数字具有8比特隐含(7比特显式存储)。
在某些实施例中,(例如,数据类型)转换电路被添加在将分片连接到向量寄存器的耦合件(例如,路径)上。在一个实施例中,单个指令的执行引起数据的移动(例如,如本文所述)以及要移动的数据上的转换操作,以例如允许软件避免执行单独的专用转换指令。在某些实施例中,如果目的地数字格式(例如,数据类型)具有与源数字格式(例如,数据类型)不同的宽度(例如,浮点32(FP32)到浮点16(FP16)),则移动+ 转换指令或者可在不收缩或扩展目的地数据的情况下就地执行转换,或者将所得到的元素(例如,通过去除值之间的额外零)排列为在向量寄存器中连续。
以下表格包括示例指令格式,包括操作码(例如,其助记符)和操作对象,随后是该指令的操作。虽然论述了某些值,但这些是示例,而可以利用其他值。
表格4:TCVTROWD2PSE(对于从分片(T)到向量(例如,E是 EVEX向量)寄存器(例如,512比特宽)中的ROW的数据的移动,其也将数据从双字(D)整数格式转换(CON)成(2)紧缩单一(PS)浮点格式)使用立即数(imm8,例如在16行实施例中具有0到15的值)来作出行选择,使用tsrc来指示源分片,并且使用zdest来指示目的地向量寄存器。
表格4:TCVTROWD2PSE
Figure 4
表格5:TCVTROWD2PSE(对于从分片(T)到向量(例如,E是EVEX向量)寄存器(例如,512比特宽)中的ROW的数据的移动,其也将数据从双字(D)整数格式转换(CON)成(2)紧缩单一(PS)浮点格式)使用标量(例如,通用)寄存器(例如,32比特寄存器(r32)) 来作出行选择,使用tsrc来指示源分片,并且使用zdest来指示目的地向量寄存器。
表格5:TCVTROWD2PSE
Figure 5
表格6:TCVTROWPS2BF16E(对于从分片(T)到向量(例如,E 是EVEX向量)寄存器(例如,512比特宽)中的ROW的数据的移动,其也将数据从紧缩单一(PS)浮点格式转换(CON)成(2)二进制浮点 (BF)浮点格式)使用立即数(imm8,例如在16行实施例中具有0到15 的值)来作出行选择,使用tsrc来指示源分片,并且使用zdest来指示目的地向量寄存器。
表格6:TCVTROWPS2BF16E
Figure 6
表格7:TCVTROWPS2BF16E(对于从分片(T)到向量(例如,E 是EVEX向量)寄存器(例如,512比特宽)中的ROW的数据的移动,其也将数据从紧缩单一(PS)浮点格式转换(CON)成(2)二进制浮点 (BF16)浮点格式)使用标量(例如,通用)寄存器(例如,32比特寄存器(r32))来作出行选择,使用tsrc来指示源分片,并且使用zdest来指示目的地向量寄存器。
表格7:TCVTROWPS2BF16E
Figure 7
表格8:TCVTROWPS2PHE(对于从分片(T)到向量(例如,E是EVEX向量)寄存器(例如,512比特宽)中的ROW的数据的移动,其也将数据从紧缩单一(PS)浮点格式转换(CON)成(2)紧缩单一(PS) 浮点格式)使用立即数(imm8,例如在16行实施例中具有0到15的值) 来作出行选择,使用tsrc来指示源分片,并且使用zdest来指示目的地向量寄存器。
表格8:TCVTROWPS2PHE
Figure 8
表格9:TCVTROWPS2PHE(对于从分片(T)到向量(例如,E是 EVEX向量)寄存器(例如,512比特宽)中的ROW的数据的移动,其也将数据从紧缩单一(PS)浮点格式转换(CON)成(2)紧缩单一(PS) 浮点格式)使用标量(例如,通用)寄存器(例如,32比特寄存器 (r32))来作出行选择,使用tsrc来指示源分片,并且使用zdest来指示目的地向量寄存器。
表格9:TCVTROWPS2PHE
Figure 9
图27根据本公开的实施例图示了包括矩阵(分片)操作加速器2207 的系统的实施例,该矩阵(分片)操作加速器2207利用包括转换电路 2700的一个或多个直接路径将数据从向量寄存器2219加载到分片2205中和/或将数据从分片2205存储到向量寄存器2219中。转换电路2700可接收第一格式(例如,第一数字格式)的一个或多个值作为输入并且(例如,对于每个元素并行地)将这些值转换成第二格式(例如,第二数字格式),例如,而不将任何向量寄存器2219用于转换过程。在某些实施例中,主机处理器/处理系统2201(例如,硬件处理器核心,例如图34B中的处理器核心3490)向矩阵操作加速器2207传达命令(例如,矩阵操纵操作,比如算术或矩阵操纵操作、加载和/或存储操作)。然而,这样示出只是为了论述。如本文详述的,加速器2207可以是处理核心的一部分。是分片操纵操作子指令的命令可以把分片称呼为寄存器-寄存器(“reg- reg”)或寄存器-存储器(“reg-mem”)格式。诸如TILESTORE、 TILELOAD、TILECONFIG等等之类的其他命令在某些实施例中不在分片上执行数据操作。命令可以是解码的指令(例如,微操作)或者宏指令来供加速器2207处理。在一个实施例中,硬件处理器核心响应于矩阵操作指令被硬件处理器核心执行而向矩阵(分片)操作加速器2207发送微操作。
在一个实施例中,预留站(RS)电路2211向矩阵操作加速器2207发送命令(例如,微操作)。在某些实施例中,矩阵操作加速器2207是分片矩阵单元(TMU)。在某些实施例中,矩阵操作加速器2207包括矩阵加速器控制器电路2213。在一个实施例中,矩阵加速器控制器(例如,电路2213)将控制进、出和/或在矩阵操作加速器2207内的数据的操作和流动。矩阵操作加速器2207(例如,矩阵加速器控制器电路2213)可包括例如调谴电路2215,用于控制接收到的请求(例如,命令)从主机处理器 /处理系统2201到矩阵操作加速器2207的一个或多个组件的调谴。
在某些实施例中,矩阵操作加速器2207利用处理元件2209(例如,融合乘加(FMA)电路)的网格来执行操作。在一个实施例中,调谴电路 2215控制数据(例如,来自分片的一个或多个值)从数据缓冲器2205 (例如,形成分片的寄存器)到处理元件2209的网格的发送。在某些实施例中,处理元件2209的网格是处理元件的二维网格,例如,图6中的 FMA的二维网格。
描绘的矩阵操作加速器2207包括数据缓冲器(例如,寄存器) 2205。在某些实施例中,数据缓冲器(例如,寄存器)2205可配置来将各个矩阵存储到例如第一多个寄存器(例如,分片)中,该第一多个寄存器表示第一二维矩阵(例如,标记为T0的分片将矩阵A存储在存储2205 中),第二二维矩阵(例如,标记为T1的分片将矩阵B存储在存储2205 中),第三二维矩阵(例如,标记为T3的分片将矩阵C存储在存储2205 中),等等。系统(例如,主机处理器/处理系统2201)可包括(例如,一致)存储器接口2203(例如,数据缓存单元)以用于在主机处理器/处理系统2201(例如,作为乱序(OoO)核心)和矩阵操作加速器2207之间发送和接收数据(例如,与命令相对)(例如,包括来自存储器接口 2203的加载到分片连接路径2225和/或来自存储器接口2203的从分片存储连接路径2227)。
如图22中所示,这里的某些实施例利用(例如,一致)存储器接口 (例如,图22中的存储器接口2203)来在存储器(例如,缓存)和/或主机处理器2201(例如,主机处理器2201)和矩阵操作加速器(例如,矩阵操作加速器2207,例如其数据缓冲器2205(例如,形成分片的寄存器)(例如,分片寄存器))之间传送数据。然而,在某些实施例中,可能希望允许(例如,经由一个或多个指令)对数据缓冲器2205(例如,形成分片的寄存器)的访问(例如,直接访问)。在某些实施例中,处理器的代码的程序员被限于该处理器的指令集体系结构(ISA)。从而,这里的某些实施例提供了一种ISA,其包括一个或多个(例如,宏)指令,这些指令允许在处理器的一个或多个寄存器和矩阵操作加速器的数据缓冲器 (例如,形成分片的寄存器)之间移动数据(例如,不利用间接路径,例如但不限于包括存储器接口2203的路径)。这里的某些实施例针对的是用于在分片和紧缩数据寄存器(例如,具有多个元素的向量寄存器)之间移动数据的指令,例如在(一个或多个)向量寄存器2219和数据缓冲器 2205(例如,形成分片的寄存器)之间。这里的实施例提供了一种ISA,其包括一个或多个指令,这些指令利用一个或多个直接路径(例如,加载到分片连接路径2229和/或从分片存储连接路径2231)来将数据从向量寄存器2219加载到分片中和/或将数据从分片(例如,数据缓冲器2205中的)存储到向量寄存器2219中。主机处理器可包括(例如,标量)通用寄存器2217,例如与用于128比特向量指令(例如,“SSE”指令/寄存器)、具有3操作对象指令格式的(例如,256比特或512比特)向量指令(例如,“AVX”指令/寄存器)和/或矩阵指令(例如,“矩阵加速器”指令/分片)的任何寄存器分离。
本文公开的指令是对处理器本身的(例如,计算机本身的)功能的改善。没有这种指令作为其指令集的一部分的指令解码电路(例如,解码器 2221)将不会如本文所述那样解码。没有这种指令作为其指令集的一部分的执行电路(例如,执行电路2223)将不会如本文所述那样执行。例如,单个指令,当处理器将该单个指令解码为经解码的单个指令并且该经解码的单个指令被处理器执行时,通过与到存储器接口的(例如,或者经由缓存的)耦合件分开的、硬件处理器核心到矩阵操作加速器电路的耦合件来使得一个或多个元素从表示二维矩阵的多个寄存器存储到向量寄存器中。例如,单个指令,当处理器将该单个指令解码为经解码的单个指令并且该经解码的单个指令被处理器执行时,通过与到存储器接口的(例如,或者经由缓存的)耦合件分开的、硬件处理器核心到矩阵操作加速器电路的耦合件来使得一个或多个元素从向量寄存器存储到表示二维矩阵的多个寄存器中。
图28根据本公开的实施例图示了耦合到包括一个或多个“分片到向量寄存器”和/或“向量寄存器到分片”指令2804的存储装置2802以及矩阵(分片)操作加速器2207的硬件处理器2800,该矩阵(分片)操作加速器2207利用包括转换电路2816的一个或多个直接路径将数据从向量寄存器2219加载到分片2205中和/或将数据从分片2205存储到向量寄存器2219中。转换电路2816可接收第一格式(例如,第一数字格式)的一个或多个值作为输入并且(例如,对于每个元素并行地)将这些值转换成第二格式(例如,第二数字格式),例如,而不将任何向量寄存器2219和/ 或执行电路2814用于转换过程。指令2804可包括一个或多个数据选择字段2806(例如,操作对象),这些数据选择字段2806识别(一个或多个)向量寄存器2219(例如,其全部或者其元素的真子集)和/或数据缓冲器2205(例如,形成分片的寄存器)。
在某些实施例中,(例如,在处理器/核心支持乱序(OoO)执行的情况下),处理器包括耦合到寄存器文件/存储器电路2812(例如,单元) 的寄存器重命名/分配器电路2810来分配资源并且在寄存器(例如,与指令的初始源和最终目的地相关联的寄存器)上执行寄存器重命名。在某些实施例中,(例如,对于乱序执行),处理器包括耦合到解码器2808的一个或多个调度器电路2810。(一个或多个)调度器电路可调度与解码的指令相关联的一个或多个操作,包括从“分片到向量寄存器”和/或“向量寄存器到分片”指令2804解码的一个或多个操作,例如,来用于在执行电路2814上执行。
作为一个示例,经解码的“分片到向量寄存器”指令2804将使得执行电路2814将数据从矩阵操作加速器2207的数据缓冲器2205的分片移动到转换电路2816以便转换,并且将那些经转换的值移动到(一个或多个)向量寄存器2219中,例如,而不通过(例如,缓存一致)存储器接口发送该数据。
作为另一示例,经解码的“向量到分片寄存器”指令2804将使得执行电路2814将数据从(一个或多个)向量寄存器2219移动到转换电路 2816以便转换,并且将那些经转换的值移动到矩阵操作加速器2207的数据缓冲器2205的分片中,例如,而不通过(例如,缓存一致)存储器接口发送该数据。
在某些实施例中,例如,包括写回电路2818来将指令的结果写回到目的地(例如,将它们写入到(一个或多个)寄存器2219和/或数据缓冲器2205的分片),使得这些结果在处理器内可见(例如,在产生了这些结果的执行电路外可见)。
这些组件(例如,解码器2808、寄存器重命名/寄存器分配器/调度器 2810、执行电路2814、寄存器(例如,寄存器文件)/存储器2812或者写回电路2818)中的一个或多个可在硬件处理器的单个核心中(例如,以及在多个核心中,每个核心具有这些组件的一实例)。
分片到向量指令的实施例允许了利用用于按元素操作的其他(例如, SIMD)硬体对矩阵结果的后期处理。例如,在神经网络中,层输入可以利用分片(例如,以及矩阵操作加速器及其指令)与权重进行矩阵乘法,然后(向量寄存器(例如,AVX512 SIMD寄存器)和向量指令可用于执行激活函数。这里的实施例使能了分片(例如,AMX寄存器)和向量 (例如,AVX512)寄存器之间的传送,而不要求经过存储器的(例如,慢)通道。通过如下方式来进一步利用了这里的某些实施例:保持分片的两个集合,并且将使用一个集合的矩阵操作(例如,乘法)与包含先前矩阵操作(例如,乘法)的结果的另一集合的结果的向量处理相交织。
在某些实施例中,将分片到向量传送暴露为本文所述的(一个或多个)指令还给予了软件灵活性来使用该(一个或多个)指令作为更复杂序列的构建块,例如从分片的转换+存储或者将分片行散布到任意存储器位置,而没有与其他分片存储指令中相同的步幅。
(II)将数据从一个或多个向量寄存器移动到一个或多个分片
图29根据本公开的实施例图示了处理“向量寄存器到分片”指令的方法2900。处理器(例如,或者处理器核心)可执行方法2900,例如,响应于从软件接收到执行指令的请求。描绘的方法2900包括通过以下步骤来处理“向量寄存器到分片”指令:取得指令(例如,具有识别表示矩阵操作加速器电路的二维矩阵的多个寄存器的第一字段、识别该二维矩阵的元素的集合的(可选的)第二字段、以及识别处理器的(一个或多个) 向量寄存器的第三字段)2902;将指令解码为经解码的指令2904;取得与第三字段相关联的数据2906;(可选地)调度经解码的指令以用于执行 2908;执行经解码的指令,以使得通过与到存储器(例如,缓存)的耦合件分开的、处理器到矩阵操作加速器电路的耦合件,来将来自向量寄存器的(例如,所有)元素存储到表示二维矩阵的元素的集合的多个寄存器的相应元素中2910;以及提交执行的指令的结果2912。
这里的实施例包括指令来将值从向量寄存器移动到分片中的(一个或多个)行或(一个或多个)列(或者其组合)中。行或列可由立即数操作对象或者由通用(例如,图22中的通用寄存器2217)或SIMD寄存器 (例如,图22中的向量寄存器2219)来选择。
图30是根据本公开的实施例图示出TILEXMOVE指令的使用的框图。在某些实施例中,“X”是指示从其源发(source)数据的向量寄存器的数目的正整数,例如在某些实施例中具有1-16的值。如图所示,指令 3001包括:操作码3002(例如,TILE16MOV),其指示出处理器将例如通过与到存储器(例如,缓存)的耦合件分开的、处理器到矩阵操作加速器电路的耦合件,来将所有(例如,活跃)元素从(一个或多个)源向量寄存器2219(例如,开始于作为第一寄存器的寄存器2219A)移动(例如,存储)到分片2205中(例如,表示二维矩阵的多个寄存器);源位置字段3006,其识别源向量寄存器(例如,第一源寄存器2219A);以及目的地位置字段3004,其识别目的地分片2205;以及(可选地)第二源位置字段3008,其识别另一(例如,最后利用的)(一个或多个)源向量寄存器(例如,图30中的向量寄存器2219P)。指令3001可包括字段 3010,其识别目的地分片2005的元素的真子集,以用于存储从(一个或多个)向量寄存器(例如,从向量寄存器2219A-2219P中的一个或多个) 源发的数据。在一个实施例中,可以包括字段来指示出要利用的向量寄存器的数目。
还示出的是用于执行TILE16MOV指令的系统3000。该系统包括(一个或多个)指定的目的地向量寄存器(例如,对于图30中的示例利用向量寄存器2219A-2219P),指定的目的地矩阵(分片)2205,以及执行电路2314。
在某些实施例中,“向量寄存器到分片”指令允许了使用向量(例如,SIMD)硬件和指令来在将其写入到分片中之前处理(例如,预处理)来自存储器的数据,而不必执行额外的经过存储器的道次。示例预处理操作包括数据类型转换、解压缩、从任意地址加载,等等。
在某些实施例中,“向量寄存器到分片”指令写入分片的一行(或列),而不修改其他的。在某些实施例中,“向量寄存器到分片”指令利用若干个向量寄存器作为源来写入多个行(或列)。在某些实施例中,“向量寄存器到分片”指令写入整个分片,而不是更新行(或列)的真子集,以例如允许分片重命名的简化(例如,如本文所述),这是由于不必跟踪部分分片更新。
要写入的行的数目可根据分片尺寸来确定或者被硬编码在指令中(例如,在操作码内)。在某些实施例中,如果分片(例如,分片的被请求部分)大于(例如,宽于)向量寄存器的集合,则“向量寄存器到分片”指令的执行引起出错,先前(例如,旧)分片值的保留,或者出界元素的归零。在某些实施例中,如果分片尺寸小于向量寄存器的集合,则“向量寄存器到分片”指令的执行引起出错或者对向量寄存器的群组中的出界元素的忽略(例如,不将它们移动到分片中)。
下面是将一块16个向量寄存器写入到(例如,完整)分片的指令的示例。表格10:TILE16MOV(对于将数据从16(16)向量(例如,E是 EVEX向量)寄存器(例如,每个是512比特宽)移动到分片(T)中) 使用tdst来指示目的地分片,并且使用zsrc来指示源(例如,基础)向量寄存器。下面的~可以是每比特的逻辑非操作(例如,比特翻转)。
表格10:TILE16MOVE
Figure 10
下面详述其中可使用上述内容的额外的示范性体系结构、系统等等。
可考虑到以下示例来描述公开的技术的至少一些实施例:
示例1.一种装置,包括:
矩阵操作加速器电路,包括:
处理元件的二维网格,
多个寄存器,表示二维矩阵并且耦合到所述处理元件的二维网格,以及
到缓存的耦合件;以及
硬件处理器核心,包括:
(一个或多个)向量寄存器,
解码器,用于将单个指令解码为经解码的单个指令,该单个指令包括识别所述二维矩阵的第一字段、识别所述二维矩阵的一个或多个元素的第二字段、以及识别所述(一个或多个)向量寄存器的第三字段,以及
执行电路,用于执行所述经解码的单个指令,以使得:通过与所述到缓存的耦合件分开的、所述硬件处理器核心到所述矩阵操作加速器电路的耦合件,来将所述一个或多个元素从表示所述二维矩阵的所述多个寄存器存储到所述(一个或多个)向量寄存器中。
示例2.如示例1所述的装置,其中,所述二维矩阵的所述一个或多个元素是所述二维矩阵的元素的真子集,并且所述第二字段是所述单个指令中识别所述二维矩阵的元素的真子集的立即数。
示例3.如示例1所述的装置,其中,所述一个或多个元素是由所述第二字段识别的所述二维矩阵的单行或单列,并且所述第二字段是所述硬件处理器核心的寄存器。
示例4.如示例1所述的装置,其中,在被请求的行或者被请求的列分别超过所述二维矩阵的行数目或列数目时,所述执行电路生成出错指示。
示例5.如示例1所述的装置,其中,在所述二维矩阵的被请求的行或者被请求的列中的元素的数目小于所述向量寄存器的元素的数目时,所述执行电路生成出错指示。
示例6.如示例1所述的装置,其中,所述单个指令包括第四字段,该第四字段识别到所述二维矩阵的被请求的行或者被请求的列中的偏移量,以用于从所述多个寄存器源发所述一个或多个元素。
示例7.如示例1所述的装置,还包括:转换电路,耦合到所述硬件处理器核心到所述矩阵操作加速器电路的耦合件,并且所述硬件处理器核心的所述执行电路用于执行所述经解码的单个指令,以将来自表示所述二维矩阵的所述多个寄存器的所述一个或多个元素从第一数字格式转换到不同的第二数字格式,并且使得将采取所述不同的第二数字格式的所述一个或多个元素存储到所述向量寄存器中。
示例8.如示例1所述的装置,其中,所述向量寄存器包括多个向量寄存器,所述一个或多个元素是所述二维矩阵的所有元素,并且所述执行电路用于执行所述经解码的单个指令,以将所述所有元素从表示所述二维矩阵的所述多个寄存器存储到所述多个向量寄存器中。
示例9.一种方法,包括:
从矩阵操作加速器电路的处理元件的二维网格生成到所述矩阵操作加速器电路的表示二维矩阵的多个寄存器中的输出,所述矩阵操作加速器电路包括到缓存的耦合件;
利用硬件处理器核心的解码器将单个指令解码为经解码的单个指令,所述单个指令包括识别所述二维矩阵的第一字段、识别所述二维矩阵的一个或多个元素的第二字段、以及识别所述硬件处理器核心的向量寄存器的第三字段;以及
利用所述硬件处理器核心的执行电路执行所述经解码的单个指令,以使得:通过与所述到缓存的耦合件分开的、所述硬件处理器核心到所述矩阵操作加速器电路的耦合件,来将所述一个或多个元素从表示所述二维矩阵的所述多个寄存器存储到所述向量寄存器中。
示例10.如示例9所述的方法,其中,所述二维矩阵的所述一个或多个元素是所述二维矩阵的元素的真子集,并且所述第二字段是所述单个指令中识别所述二维矩阵的元素的真子集的立即数。
示例11.如示例9所述的方法,其中,所述一个或多个元素是由所述第二字段识别的所述二维矩阵的单行或单列,并且所述第二字段是所述硬件处理器核心的寄存器。
示例12.如示例9所述的方法,还包括:在被请求的行或者被请求的列分别超过所述二维矩阵的行数目或列数目时,由所述执行电路生成出错指示。
示例13.如示例9所述的方法,在所述二维矩阵的被请求的行或者被请求的列中的元素的数目小于所述向量寄存器的元素的数目时,由所述执行电路生成出错指示。
示例14.如示例9所述的方法,其中,所述单个指令包括第四字段,该第四字段识别到所述二维矩阵的被请求的行或者被请求的列中的偏移量,以用于从所述多个寄存器源发所述一个或多个元素。
示例15.如示例9所述的方法,其中,所述执行还包括:利用转换电路,将来自表示所述二维矩阵的所述多个寄存器的所述一个或多个元素从第一数字格式转换到不同的第二数字格式,并且使得将采取所述不同的第二数字格式的所述一个或多个元素存储到所述向量寄存器中,其中,所述转换电路耦合到所述硬件处理器核心到所述矩阵操作加速器电路的耦合件。
示例16.如示例9所述的方法,其中,所述向量寄存器包括多个向量寄存器,所述一个或多个元素是所述二维矩阵的所有元素,并且所述执行包括:将所述所有元素从表示所述二维矩阵的所述多个寄存器存储到所述多个向量寄存器中。
示例17.一种存储有代码的非暂态机器可读介质,所述代码当被机器执行时使得所述机器执行一种方法,该方法包括:
从矩阵操作加速器电路的处理元件的二维网格生成到所述矩阵操作加速器电路的表示二维矩阵的多个寄存器中的输出,所述矩阵操作加速器电路包括到缓存的耦合件;
利用硬件处理器核心的解码器将单个指令解码为经解码的单个指令,所述单个指令包括识别所述二维矩阵的第一字段、识别所述二维矩阵的一个或多个元素的第二字段、以及识别所述硬件处理器核心的向量寄存器的第三字段;以及
利用所述硬件处理器核心的执行电路执行所述经解码的单个指令,以使得:通过与所述到缓存的耦合件分开的、所述硬件处理器核心到所述矩阵操作加速器电路的耦合件,来将所述一个或多个元素从表示所述二维矩阵的所述多个寄存器存储到所述向量寄存器中。
示例18.如示例17所述的非暂态机器可读介质,其中,所述二维矩阵的所述一个或多个元素是所述二维矩阵的元素的真子集,并且所述第二字段是所述单个指令中识别所述二维矩阵的元素的真子集的立即数。
示例19.如示例17所述的非暂态机器可读介质,其中,所述一个或多个元素是由所述第二字段识别的所述二维矩阵的单行或单列,并且所述第二字段是所述硬件处理器核心的寄存器。
示例20.如示例17所述的非暂态机器可读介质,还包括:在被请求的行或者被请求的列分别超过所述二维矩阵的行数目或列数目时,由所述执行电路生成出错指示。
示例21.如示例17所述的非暂态机器可读介质,在所述二维矩阵的被请求的行或者被请求的列中的元素的数目小于所述向量寄存器的元素的数目时,由所述执行电路生成出错指示。
示例22.如示例17所述的非暂态机器可读介质,其中,所述单个指令包括第四字段,该第四字段识别到所述二维矩阵的被请求的行或者被请求的列中的偏移量,以用于从所述多个寄存器源发所述一个或多个元素。
示例23.如示例17所述的非暂态机器可读介质,其中,所述执行还包括:利用转换电路,将来自表示所述二维矩阵的所述多个寄存器的所述一个或多个元素从第一数字格式转换到不同的第二数字格式,并且使得将采取所述不同的第二数字格式的所述一个或多个元素存储到所述向量寄存器中,其中,所述转换电路耦合到所述硬件处理器核心到所述矩阵操作加速器电路的耦合件。
示例24.如示例17所述的非暂态机器可读介质,其中,所述向量寄存器包括多个向量寄存器,所述一个或多个元素是所述二维矩阵的所有元素,并且所述执行包括:将所述所有元素从表示所述二维矩阵的所述多个寄存器存储到所述多个向量寄存器中。
示例25.一种装置,包括:
矩阵操作加速器电路,包括:
处理元件的二维网格,
多个寄存器,表示二维(例如,输入)矩阵并且耦合到所述处理元件的二维网格,以及
到缓存的耦合件;以及
硬件处理器核心,包括:
(一个或多个)向量寄存器,
解码器,用于将单个指令解码为经解码的单个指令,所述单个指令包括识别所述二维矩阵的第一字段、识别所述二维矩阵的元素的集合的第二字段、以及识别所述(一个或多个)向量寄存器的第三字段,以及
执行电路,用于执行所述经解码的单个指令,以使得:通过与所述到缓存的耦合件分开的、所述硬件处理器核心到所述矩阵操作加速器电路的耦合件,来将来自所述(一个或多个)向量寄存器的元素存储到表示所述二维矩阵的元素的集合的所述多个寄存器的相应元素中。
在另外一个实施例中,一种装置包括存储有代码的数据存储装置,所述代码当被硬件处理器执行时使得所述硬件处理器执行本文公开的任何方法。一种装置可如详细描述中所描述。一种方法可如详细描述中所描述。
详细示范性系统、处理器和仿真
本文详述的是执行上述指令的硬件、软件等等的示例。例如,下面描述的是指令执行的细节方面,包括诸如取得、解码、调度、执行、引退等等的各种流水线级。
指令集
指令集可包括一个或多个指令格式。给定的指令格式可定义各种字段 (例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要在其上执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义为具有该指令格式的字段的不同子集(包括的字段通常是按相同顺序的,但至少一些具有不同的比特位置,因为包括的字段更少)和/或被定义为不同地解读给定的字段。从而,ISA的每个指令被利用给定的指令格式来表达(并且如果定义了的话,被以该指令格式的指令模板中的给定一个来表达)并且包括用于指定操作和操作对象的字段。例如,示范性ADD 指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码并且包括操作对象字段来选择操作对象(源1/目标和源2);并且此ADD指令在指令流中的出现在选择特定操作对象的操作对象字段中将具有特定内容。被称为先进向量扩展(Advanced VectorExtensions, AVX)(AVX1和AVX2)并且使用向量扩展(Vector Extensions,VEX) 编码方案的一组SIMD扩展已被发布和/或发表(例如,参见2018年11月发布的
Figure BDA0002954989590000551
64和IA-32体系结构软件开发者指南以及参见2018年10月发布的
Figure BDA0002954989590000552
体系结构指令集扩展编程参考)。
示范性指令格式
本文描述的(一个或多个)指令的实施例可按不同的格式实现。此外,下文详述了示范性系统、体系结构和流水线。(一个或多个)指令的实施例可被在这种系统、体系结构和流水线上执行,但不限于详述的那些。
通用向量友好指令格式
向量友好指令格式是适合于向量指令的指令格式(例如,有某些特定于向量操作的字段)。虽然描述了其中通过向量友好指令格式支持向量和标量操作两者的实施例,但替换实施例只使用向量友好指令格式的向量操作。
图31A-图31B是根据本公开的实施例图示出通用向量友好指令格式及其指令模板的框图。图31A是根据本公开的实施例图示出通用向量友好指令格式及其类别A指令模板的框图;而图31B是根据本公开的实施例图示出通用向量友好指令格式及其类别B指令模板的框图。具体而言,对于通用向量友好指令格式3100定义了类别A和类别B指令模板,这两个指令模板都包括无存储器访问3105指令模板和存储器访问3120指令模板。向量友好指令格式的上下文中的术语“通用”指的是该指令格式不被绑定到任何特定的指令集。
虽然将描述其中向量友好指令格式支持以下所列项的本公开的实施例:64字节向量操作对象长度(或大小),具有32比特(4字节)或64 比特(8字节)数据元素宽度(或大小)(从而,64字节向量由16个双字大小元素或者8个四字大小元素构成);64字节向量操作对象长度(或大小),具有16比特(2字节)或8比特(1字节)数据元素宽度(或大小);32字节向量操作对象长度(或大小),具有32比特(4字节)、64 比特(8字节)、16比特(2字节)或者8比特(1字节)数据元素宽度 (或大小);以及16字节向量操作对象长度(或大小),具有32比特 (4字节)、64比特(8字节)、16比特(2字节)或者8比特(1字节) 数据元素宽度(或大小);但替换实施例可支持具有更多、更少或不同的数据元素宽度(例如,128比特(16字节)数据元素宽度)的更多、更少和/或不同的向量操作对象大小(例如,256字节向量操作对象)。
图31A中的类别A指令模板包括:1)在无存储器访问3105指令模板内,示出了无存储器访问、完全舍入控制型操作3110指令模板和无存储器访问、数据变换型操作3115指令模板;并且2)在存储器访问3120指令模板内,示出了存储器访问、暂态3125指令模板和存储器访问、非暂态3130指令模板。图31B中的类别B指令模板包括:1)在无存储器访问3105指令模板内,示出了无存储器访问、写入掩码控制、部分舍入控制型操作3112指令模板和无存储器访问、写入掩码控制、vsize型操作3117指令模板;并且2)在存储器访问3120指令模板内,示出了存储器访问、写入掩码控制3127指令模板。
通用向量友好指令格式3100包括下面按图31A-31B中所示的顺序列出的以下字段。
格式字段3140–此字段中的特定值(指令格式识别符值)唯一地识别向量友好指令格式,从而识别采取向量友好指令格式的指令在指令流中的出现。这样,此字段是可选的,因为它对于只具有通用向量友好指令格式的指令集是不需要的。
基本操作字段3142–其内容区分不同的基本操作。
寄存器索引字段3144–其内容直接地或者通过地址生成指定源和目标操作对象的位置,无论它们在寄存器中还是在存储器中。这些包括充分数目的比特来从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器文件中选择N个寄存器。虽然在一个实施例中N可以是最多达三个源和一个目标寄存器,但替换实施例可支持更多或更少的源和目标寄存器(例如,可支持最多达两个源,其中这些源之一也充当目标,可支持最多达三个源,其中这些源之一也充当目标,可支持最多达两个源和一个目标)。
修饰字段3146–其内容区分通用向量指令格式中的指定存储器访问的指令与那些不指定存储器访问的指令的出现;也就是说,区分无存储器访问3105指令模板和存储器访问3120指令模板。存储器访问操作读取和/或写入到存储器层次体系(在一些情况下利用寄存器中的值指定源和/或目标地址),而非存储器访问操作不读取和/或写入存储器层次体系(例如,源和目标是寄存器)。虽然在一个实施例中这个字段也在三个不同方式之间选择来执行存储器地址计算,但替换实施例可支持更多、更少或不同的方式来执行存储器地址计算。
增强操作字段3150–其内容区分除了基本操作以外还要执行多种不同操作中的哪一种。此字段是依上下文而定的。在本公开的一个实施例中,此字段被划分成类别字段3168、阿尔法字段3152和贝塔字段3154。增强操作字段3150允许了在单个指令而不是2、3或4个指令中执行共同操作群组。
缩放比例字段3160–其内容允许了缩放索引字段的内容以进行存储器地址生成(例如,对于使用2缩放比例*索引+基址的地址生成)。
位移字段3162A–其内容被用作存储器地址生成的一部分(例如,对于使用2缩放比例*索引+基址+位移的地址生成)。
位移因子字段3162B(注意将位移字段3162A并列在位移因子字段 3162B的正上方表明一者或另一者被使用)-其内容被用作地址生成的一部分;其指定要被存储器访问的大小(N)缩放的位移因子–其中N是存储器访问中的字节的数目(例如,对于使用2缩放比例*索引+基址+缩放的位移的地址生成)。冗余低阶比特被忽略,并且因此,位移因子字段的内容被乘以存储器操作对象总大小(N)以便生成要被用于计算有效地址的最终位移。N的值由处理器硬件在运行时基于完整操作码字段3174(本文中稍后描述)和数据操纵字段3154C来确定。位移字段3162A和位移因子字段3162B是可选的,因为它们不被用于无存储器访问3105指令模板,和/或不同的实施例可只实现两者中的一者或者两者都不实现。
数据元素宽度字段3164–其内容区分若干个数据元素宽度中的哪一个将被使用(在一些实施例中是对于所有指令;在其他实施例中只对于指令中的一些)。此字段是可选的,因为如果只支持一个数据元素宽度和/或利用操作码的某个方面来支持数据元素宽度则不需要它。
写入掩码字段3170–其内容基于每个数据元素位置控制目标向量操作对象中的该数据元素位置是否反映基本操作和增强操作的结果。类别A指令模板支持合并-写入掩蔽,而类别B指令模板支持合并-写入掩蔽和归零- 写入掩蔽两者。当合并时,向量掩码允许了目标中的任何元素集合被保护免于任何操作(由基本操作和增强操作指定)的执行期间的更新;在其他的一个实施例中,保留目标的相应的掩码比特具有0的每个元素的旧值。与之不同,归零向量掩码允许了目标中的任何元素集合在任何操作(由基本操作和增强操作指定)的执行期间被归零;在一个实施例中,目标的元素在相应的掩码比特具有0值时被设置到0。此功能的子集是控制被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不是必须要连续。从而,写入掩码字段3170 允许了部分向量操作,包括加载、存储、算术、逻辑等等。虽然描述了其中写入掩码字段3170的内容选择若干个写入掩码寄存器中包含要使用的写入掩码的那一个(并且从而写入掩码字段3170的内容间接识别要执行的该掩蔽)的本公开实施例,但替换实施例作为替代或附加允许掩码写入字段3170的内容直接指定要执行的掩蔽。
立即数字段3172–其内容允许对立即数(immediate)的指定。此字段是可选的,因为在不支持立即数的通用向量友好格式的实现方式中其不存在,并且在不使用立即数的指令中其不存在。
类别字段3168–其内容区分指令的不同类别。参考图31A-图31B,此字段的内容在类别A和类别B指令之间进行选择。在图31A-图31B 中,圆角方形用于指示特定的值存在于一字段中(例如,图31A-图31B 中分别用于类别字段3168的类别A 3168A和类别B 3168B)。
类别A的指令模板
在类别A的非存储器访问3105指令模板的情况下,阿尔法字段3152 被解读为RS字段3152A,其内容区分不同的增强操作类型中的哪一个要被执行(例如,对于无存储器访问舍入型操作3110和无存储器访问数据变换型操作3115指令模板分别指定舍入3152A.1和数据变换3152A.2),而贝塔字段3154区分指定类型的操作中的哪一个要被执行。在无存储器访问3105指令模板中,缩放比例字段3160、位移字段3162A和位移缩放比例字段3162B不存在。
无存储器访问指令模板–完全舍入控制型操作
在无存储器访问完全舍入控制型操作3110指令模板中,贝塔字段 3154被解读为舍入控制字段3154A,其(一个或多个)内容提供静态舍入。虽然在本公开的描述实施例中舍入控制字段3154A包括抑制所有浮点异常(suppress all floating point exceptions,SAE)字段3156和舍入操作控制字段3158,但替换实施例可支持可将这两个概念都编码到同一字段中或者可只具有这些概念/字段中的一者或另一者(例如,可只具有舍入操作控制字段3158)。
SAE字段3156–其内容区分是否禁用异常事件报告;当SAE字段 3156的内容指示抑制被使能时,给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序。
舍入操作控制字段3158–其内容区分要执行一组舍入操作中的哪一个 (例如,向上舍入、向下舍入、朝零舍入和朝最近舍入)。从而,舍入操作控制字段3158允许了基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段 3150的内容推翻该寄存器值。
无存储器访问指令模板–数据变换型操作
在无存储器访问数据变换型操作3115指令模板中,贝塔字段3154被解读为数据变换字段3154B,其内容区分若干个数据变换中的哪一个要被执行(例如,无数据变换、调配(swizzle)、广播)。
在类别A的存储器访问3120指令模板的情况下,阿尔法字段3152被解读为逐出提示字段3152B,其内容区分要使用逐出提示中的哪一个(在图31A中,对于存储器访问暂态3125指令模板和存储器访问非暂态3130 指令模板分别指定暂态3152B.1和非暂态3152B.2),而贝塔字段3154被解读为数据操纵字段3154C,其内容区分若干个数据操纵操作(也称为基元)中的哪一个要被执行(例如,无操纵;广播;源的向上转换;以及目标的向下转换)。存储器访问3120指令模板包括缩放比例字段3160,并且可选地包括位移字段3162A或者位移缩放比例字段3162B。
向量存储器指令执行从存储器的向量加载和向存储器的向量存储,带有转换支持。与常规向量指令一样,向量存储器指令以按数据元素的方式从/向存储器传送数据,其中被实际传送的元素由被选择为写入掩码的向量掩码的内容来规定。
存储器访问指令模板–暂态
暂态数据是可能很快就被再使用、快到足以受益于缓存的数据。然而,这是一个提示,并且不同的处理器可按不同的方式实现它,包括完全忽略该提示。
存储器访问指令模板–非暂态
非暂态数据是这样的数据:该数据不太可能快到足以受益于第1级缓存中的缓存地被再使用,并且应当被赋予逐出优先级。然而,这是一个提示,并且不同的处理器可按不同的方式实现它,包括完全忽略该提示。
类别B的指令模板
在类别B的指令模板的情况下,阿尔法字段3152被解读为写入掩码控制(Z)字段3152C,其内容区分由写入掩码字段3170控制的写入掩蔽应当是合并还是归零。
在类别B的非存储器访问3105指令模板的情况下,贝塔字段3154的一部分被解读为RL字段3157A,其内容区分不同的增强操作类型中的哪一个要被执行(例如,对于无存储器访问、写入掩码控制、部分舍入控制型操作3112指令模板和无存储器访问、写入掩码控制、VSIZE型操作 3117指令模板分别指定舍入3157A.1和向量长度(VSIZE)3157A.2),而贝塔字段3154的其余部分区分指定类型的操作中的哪一个要被执行。在无存储器访问3105指令模板中,缩放比例字段3160、位移字段3162A 和位移缩放比例字段3162B不存在。
在无存储器访问、写入掩码控制、部分舍入控制型操作3110指令模板中,贝塔字段3154的其余部分被解读为舍入操作字段3159A并且异常事件报告被禁用(给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序)。
舍入操作控制字段3159A–正如舍入操作控制字段3158一样,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零舍入和朝最近舍入)。从而,舍入操作控制字段3159A允许了基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段3150的内容推翻该寄存器值。
在无存储器访问、写入掩码控制、VSIZE型操作3117指令模板中,贝塔字段3154的其余部分被解读为向量长度字段3159B,其内容区分要在若干个数据向量长度中的哪一个上执行(例如,128、256或512字节)。
在类别B的存储器访问3120指令模板的情况下,贝塔字段3154的一部分被解读为广播字段3157B,其内容区分是否要执行广播型数据操纵操作,而贝塔字段3154的其余部分被解读为向量长度字段3159B。存储器访问3120指令模板包括缩放比例字段3160,并且可选地包括位移字段 3162A或者位移缩放比例字段3162B。
对于通用向量友好指令格式3100,完整操作码字段3174被示为包括格式字段3140、基本操作字段3142和数据元素宽度字段3164。虽然示出了其中完整操作码字段3174包括所有这些字段的一个实施例,但完整操作码字段3174在不支持所有这些字段的实施例中只包括这些字段中的一些。完整操作码字段3174提供操作代码(操作码)。
增强操作字段3150、数据元素宽度字段3164和写入掩码字段3170允许了在通用向量友好指令格式中基于每个指令来指定这些特征。
写入掩码字段和数据元素宽度字段的组合创建了类型化指令,因为它们允许基于不同的数据元素宽度来应用掩码。
在类别A和类别B内找到的各种指令模板在不同的情形中是有益的。在本公开的一些实施例中,不同的处理器或处理器内的不同核心可只支持类别A、只支持类别B或者支持两个类别。例如,打算用于通用计算的高性能通用乱序核心可只支持类别B,打算主要用于图形和/或科学(吞吐量)计算的核心可只支持类别A,并且打算用于两者的核心可支持这两者 (当然,具有来自两个类别的模板和指令的某种混合、但不具有来自两个类别的所有模板和指令的核心是在本公开的范围内的)。另外,单个处理器可包括多个核心,所有这些核心都支持相同类别或者其中不同的核心支持不同的类别。例如,在具有分开的图形和通用核心的处理器中,打算主要用于图形和/或科学计算的图形核心之一可只支持类别A,而通用核心中的一个或多个可以是只支持类别B的打算用于通用计算的具有乱序执行和寄存器重命名的高性能通用核心。不具有单独的图形核心的另一处理器可包括支持类别A和类别B两者的一个或多个通用有序或乱序核心。当然,在本公开的不同实施例中,来自一个类别的特征也可被实现在另一类别中。以高级别语言编写的程序将被置于(例如,被即时编译或静态编译到)多种不同的可执行形式中,包括:1)只具有由目标处理器支持的 (一个或多个)类别的指令以便执行的形式;或者2)具有利用所有类别的指令的不同组合编写的替换例程并且具有基于当前执行代码的处理器所支持的指令来选择要执行的例程的控制流程代码的形式。
示范性特定向量友好指令格式
图32是根据本公开的实施例图示出示范性特定向量友好指令格式的框图。图32示出了在如下意义上特定的特定向量友好指令格式3200:其指定字段的位置、大小、解读和顺序,以及这些字段中的一些的值。特定向量友好指令格式3200可被用于扩展x86指令集,从而字段中的一些与现有的x86指令集及其扩展(例如,AVX)中使用的那些相似或相同。此格式与带有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即数字段保持一致。图示出了来自图32的字段所映射到的来自图31的字段。
应当理解,虽然出于说明目的在通用向量友好指令格式3100的上下文中参考特定向量友好指令格式3200描述了本公开的实施例,但除非有声明,否则本公开不限于特定向量友好指令格式3200。例如,通用向量友好指令格式3100对于各种字段设想了多种可能的大小,而特定向量友好指令格式3200被示为具有特定大小的字段。作为具体示例,虽然数据元素宽度字段3164在特定向量友好指令格式3200中被示为一比特字段,但本公开不限于此(也就是说,通用向量友好指令格式3100设想了数据元素宽度字段3164的其他大小)。
通用向量友好指令格式3100包括按图32A中所示的顺序的下面列出的以下字段。
EVEX前缀(字节0-3)3202–被编码为四字节形式。
格式字段3140(EVEX字节0,比特[7:0])-第一字节(EVEX字节 0)是格式字段3140并且其包含0x62(在本公开的一个实施例中用于区分向量友好指令格式的唯一值)。
第二—第四字节(EVEX字节1-3)包括提供特定能力的若干个比特字段。
REX字段3205(EVEX字节1,比特[7-5])-由EVEX.R比特字段 (EVEX字节1,比特[7]–R)、EVEX.X比特字段(EVEX字节1,比特 [6]–X)和3157BEX字节1,比特[5]–B)构成。EVEX.R、EVEX.X和 EVEX.B比特字段提供与相应的VEX比特字段相同的功能,并且被利用反码形式来编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其他字段如本领域中已知的那样对寄存器索引的较低三个比特编码(rrr、xxx和bbb),从而Rrrr、Xxxx和Bbbb可通过添加EVEX.R、 EVEX.X和EVEX.B来形成。
REX’字段3110–这是REX’字段3110的第一部分并且是用于对扩展 32寄存器集合的高16或低16编码的EVEX.R’比特字段(EVEX字节1,比特[4]-R’)。在本公开的一个实施例中,此比特以及如下所示的其他比特被以比特反转格式来存储以与BOUND指令相区分(在公知的x86 32比特模式中),BOUND指令的真实操作码字节是62,但不在MOD R/M字段(下文描述)中接受MOD字段中的11的值;本公开的替换实施例不以反转格式存储这个比特和下面指示的其他比特。值1被用于对低16寄存器编码。换言之,R’Rrrr是通过组合EVEX.R’、EVEX.R和来自其他字段的其他RRR形成的。
操作码映射字段3215(EVEX字节1,比特[3:0]–mmmm)–其内容编码了暗示的主导操作码字节(0F、0F 38或0F 3)。
数据元素宽度字段3164(EVEX字节2,比特[7]–W)-由符号 EVEX.W表示。EVEX.W被用于定义数据类型的粒度(大小)(32比特数据元素或64比特数据元素)。
EVEX.vvvv 3220(EVEX字节2,比特[6:3]-vvvv)-EVEX.vvvv的作用可包括以下的:1)EVEX.vvvv编码了以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)EVEX.vvvv编码了对于某些向量移位以反码形式指定的目标寄存器操作对象;或者3)EVEX.vvvv不编码任何操作对象,该字段被预留并且应当包含1111b。从而,EVEX.vvvv字段3220编码了以反转(反码)形式存储的第一源寄存器指定符的4个低阶比特。取决于指令,一额外的不同EVEX比特字段被用于将指定符大小扩展到32寄存器。
EVEX.U 3168类别字段(EVEX字节2,比特[2]-U)–如果EVEX.U =0,则其指示类别A或EVEX.U0;如果EVEX.U=1,则其指示类别B 或者EVEX.U1。
前缀编码字段3225(EVEX字节2,比特[1:0]-pp)–为基本操作字段提供额外比特。除了对于采取EVEX前缀格式的传统SSE指令提供支持以外,这还具有使SIMD前缀紧缩的益处(EVEX前缀只要求2个比特,而不是要求一字节来表达SIMD前缀)。在一个实施例中,为了支持采取传统格式和采取EVEX前缀格式两者的使用SIMD前缀(66H、F2H、F3H) 的传统SSE指令,这些传统SIMD前缀被编码到SIMD前缀编码字段中;并且在运行时被扩展成传统SIMD前缀,然后才被提供到解码电路的PLA (因此PLA可执行这些传统指令的传统和EVEX格式两者,而无需修改)。虽然更新的指令可直接使用EVEX前缀编码字段的内容作为操作码扩展,但某些实施例为了一致性以类似的方式扩展,但允许这些传统 SIMD前缀指定不同的含义。替换实施例可重设计PLA来支持2比特 SIMD前缀编码,从而不要求扩展。
阿尔法字段3152(EVEX字节3,比特[7]–EH;也称为EVEX.EH、 EVEX.rs、EVEX.RL、EVEX.写入掩码控制以及EVEX.N;也用α来图示)–如前所述,此字段是依上下文而定的。
贝塔字段3154(EVEX字节3,比特[6:4]–SSS;也称为EVEX.s2-0、 EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ来图示)–如前所述,此字段是依上下文而定的。
REX’字段3110–这是REX’字段的剩余部分并且是可用于对扩展32 寄存器集合的高16或低16编码的EVEX.V’比特字段(EVEX字节3,比特[3]-V’)。此比特被以比特反转格式来存储。值1被用于对低16寄存器编码。换言之,V’VVVV是通过组合EVEX.V’、EVEX.vvvv形成的。
写入掩码字段3170(EVEX字节3,比特[2:0]-kkk)-其内容指定如前所述的写入掩码寄存器中的寄存器的索引。在本公开的一个实施例中,特定值EVEX.kkk=000具有暗示对于特定指令没有使用写入掩码的特殊行为(这可通过多种方式来实现,包括使用被硬连线到全一的写入掩码或者绕过掩蔽硬件的硬件)。
真实操作码字段3230(字节4)也被称为操作码字节。操作码的一部分在此字段中指定。
MOD R/M字段3240(字节5)包括MOD字段3242、Reg字段3244 和R/M字段3246。如前所述,MOD字段3242的内容区分存储器访问和非存储器访问操作。Reg字段3244的作用可被总结成两个情形:编码目标寄存器操作对象或者源寄存器操作对象,或者被作为操作码扩展来对待并且不被用于编码任何指令操作对象。R/M字段3246的作用可包括以下的:编码引用存储器地址的指令操作对象,或者编码目标寄存器操作对象或源寄存器操作对象。
缩放比例、索引、基数(Scale,Index,Base,SIB)字节(字节6)- 如前所述,缩放比例字段3150的内容被用于存储器地址生成。SIB.xxx 3254和SIB.bbb 3256–先前已对于寄存器索引Xxxx和Bbbb提及了这些字段的内容。
位移字段3162A(字节7-10)-当MOD字段3242包含10时,字节 7-10是位移字段3162A,并且其工作方式与传统32比特位移(disp32)相同并且在字节粒度上工作。
位移因子字段3162B(字节7)-当MOD字段3242包含01时,字节 7是位移因子字段3162B。此字段的位置与传统x86指令集8比特位移 (disp8)的相同,其在字节粒度上工作。由于disp8被符号扩展,所以其只能在-128和127字节偏移量之间寻址;就64字节缓存线而言,disp8使用8个比特,这8个比特可被设置到仅四个真正有用的值-128、-64、0和 64;由于经常需要更大的范围,所以使用disp32;然而,disp32要求4个字节。与disp8和disp32不同,位移因子字段3162B是对disp8的重解读;当使用位移因子字段3162B时,实际位移由位移因子字段的内容乘以存储器操作对象访问的大小(N)来确定。这种类型的位移被称为 disp8*N。这减小了平均指令长度(单个字节被用于位移,但具有大得多的范围)。这种压缩的位移是基于如下假设的:有效位移是存储器访问的粒度的倍数,并且因此,地址偏移量的冗余低阶比特不需要被编码。换言之,位移因子字段3162B代替了传统x86指令集8比特位移。从而,位移因子字段3162B被按与x86指令集8比特位移相同的方式编码(因此在 ModRM/SIB编码规则中没有变化),唯一例外是disp8被超载到 disp8*N。换言之,在编码规则或编码长度中没有变化,而只在硬件对位移值的解读中有变化(硬件需要按存储器操作对象的大小来缩放位移以获得按字节地址偏移量)。立即数字段3172如前所述那样操作。
完整操作码字段
图32B是根据本公开的一个实施例图示出构成完整操作码字段3174 的特定向量友好指令格式3200的字段的框图。具体而言,完整操作码字段3174包括格式字段3140、基本操作字段3142和数据元素宽度(W)字段3164。基本操作字段3142包括前缀编码字段3225、操作码映射字段 3215和真实操作码字段3230。
寄存器索引字段
图32C是根据本公开的一个实施例图示出构成寄存器索引字段3144 的特定向量友好指令格式3200的字段的框图。具体而言,寄存器索引字段3144包括REX字段3205、REX’字段3210、MODR/M.reg字段3244、 MODR/M.r/m字段3246、VVVV字段3220、xxx字段3254和bbb字段 3256。
增强操作字段
图32D是根据本公开的一个实施例图示出构成增强操作字段3150的特定向量友好指令格式3200的字段的框图。当类别(U)字段3168包含0 时,其表示EVEX.U0(类别A3168A);当其包含1时,其表示 EVEX.U1(类别B 3168B)。当U=0并且MOD字段3242包含11时(表示无存储器访问操作),阿尔法字段3152(EVEX字节3,比特[7]–EH) 被解读为rs字段3152A。当rs字段3152A包含1时(舍入3152A.1),贝塔字段3154(EVEX字节3,比特[6:4]-SSS)被解读为舍入控制字段 3154A。舍入控制字段3154A包括一比特SAE字段3156和两比特舍入操作字段3158。当rs字段3152A包含0时(数据变换3152A.2),贝塔字段 3154(EVEX字节3,比特[6:4]-SSS)被解读为三比特数据变换字段 3154B。当U=0并且MOD字段3242包含00、01或10时(表示存储器访问操作),阿尔法字段3152(EVEX字节3,比特[7]–EH)被解读为逐出提示(eviction hint,EH)字段3152B并且贝塔字段3154(EVEX字节3,比特[6:4]-SSS)被解读为三比特数据操纵字段3154C。
当U=1时,阿尔法字段3152(EVEX字节3,比特[7]–EH)被解读为写入掩码控制(Z)字段3152C。当U=1并且MOD字段3242包含11 时(表示无存储器访问操作),贝塔字段3154的一部分(EVEX字节3,比特[4]–S0)被解读为RL字段3157A;当其包含1(舍入3157A.1)时,贝塔字段3154的其余部分(EVEX字节3,比特[6-5]-S2-1)被解读为舍入操作字段3159A,而当RL字段3157A包含0(VSIZE 3157.A2)时,贝塔字段3154的其余部分(EVEX字节3,比特[6-5]-S2-1)被解读为向量长度字段3159B(EVEX字节3,比特[6-5]-L1-0)。当U=1并且MOD字段 3242包含00、01或10时(表示存储器访问操作),贝塔字段3154 (EVEX字节3,比特[6:4]-SSS)被解读为向量长度字段3159B(EVEX 字节3,比特[6-5]-L1-0)和广播字段3157B(EVEX字节3,比特[4]- B)。
示范性寄存器体系结构
图33是根据本公开的一个实施例的寄存器体系结构3300的框图。在图示的实施例中,存在32个512比特宽的向量寄存器3310;这些寄存器被称为zmm0至zmm31。低16zmm寄存器的低阶256比特被覆盖在寄存器ymm0-16上。低16zmm寄存器的低阶128比特(ymm寄存器的低阶 128比特)被覆盖在寄存器xmm0-15上。特定向量友好指令格式3200如以下表格中所示在这些覆盖的寄存器文件上操作。
Figure BDA0002954989590000681
Figure BDA0002954989590000691
换言之,向量长度字段3159B在最大长度和一个或多个其他更短长度之间做出选择,其中每个这种更短长度是前一长度的一半;并且没有向量长度字段3159B的指令模板在最大向量长度上操作。另外,在一个实施例中,特定向量友好指令格式3200的类别B指令模板在紧缩或标量单/双精度浮点数据和紧缩或标量整数数据上操作。标量操作是在zmm/ymm/xmm 寄存器中的最低阶数据元素位置上执行的操作;更高阶数据元素位置或者被保持与其在该指令之前相同,或者被归零,这取决于实施例。
写入掩码寄存器3315–在图示的实施例中,有8个写入掩码寄存器 (k0至k7),每个的大小是64比特。在替换实施例中,写入掩码寄存器 3315的大小是16比特。如前所述,在本公开的一个实施例中,向量掩码寄存器k0可被用作写入掩码;当通常将会指示k0的编码被用于写入掩码时,其选择硬连线的写入掩码0xFFFF,实际上对于该指令禁用了写入掩蔽。
通用寄存器3325–在图示的实施例中,有十六个64比特通用寄存器,它们与现有的x86寻址模式一起被用于寻址存储器操作对象。这些寄存器被用名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8 至R15来引用。
标量浮点堆栈寄存器文件(x87堆栈)3345,其上化名了MMX紧缩整数平坦寄存器文件3350–在图示的实施例中,x87堆栈是用于利用x87 指令集扩展在32/64/80比特浮点数据上执行标量浮点操作的八元素堆栈;而MMX寄存器被用于在64比特紧缩整数数据上执行操作,以及为在 MMX和XMM寄存器之间执行的一些操作保持操作对象。
本公开的替换实施例可使用更宽或更窄的寄存器。此外,本公开的替换实施例可使用更多、更少或不同的寄存器文件和寄存器。
示范性核心体系结构、处理器和计算机体系结构
处理器核心可按不同的方式、为了不同的目的、在不同的处理器中实现。例如,这种核心的实现方式可包括:1)打算用于通用计算的通用有序核心;2)打算用于通用计算的高性能通用乱序核心;3)主要打算用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可包括:1)包括打算用于通用计算的一个或多个通用有序核心和/或打算用于通用计算的一个或多个通用乱序核心的CPU;以及2)包括主要打算用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器导致不同的计算机系统体系结构,这些体系结构可包括:1)协处理器在与CPU分开的芯片上;2)协处理器在与CPU相同的封装中、分开的晶粒上;3)协处理器与CPU在同一晶粒上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可在同一晶粒上包括描述的CPU (有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)、上述的协处理器以及额外的功能。接下来描述示范性核心体系结构,然后是对示范性处理器和计算机体系结构的描述。
示范性核心体系结构
有序和乱序核心框图
图34A是根据本公开的实施例图示出示范性有序流水线和示范性寄存器重命名、乱序发出/执行流水线两者的框图。图34B是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、乱序发出/执行体系结构核心两者的框图。图34A-34B 中的实线框图示了有序流水线和有序核心,而虚线框的可选添加图示了寄存器重命名、乱序发出/执行流水线和核心。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图34A中,处理器流水线3400包括取得级3402、长度解码级 3404、解码级3406、分配级3408、重命名级3410、调度(也称为调遣或发出)级3412、寄存器读取/存储器读取级3414、执行级3416、写回/存储器写入级3418、异常处理级3422和提交级3424。
图34B示出了处理器核心3490包括耦合到执行引擎单元3450的前端单元3430,并且两者都耦合到存储器单元3470。核心3490可以是精简指令集计算(reduced instructionset computing,RISC)核心、复杂指令集计算(complex instruction set computing,CISC)核心、超长指令字(very long instruction word,VLIW)核心或者混合或替换核心类型。作为另外一个选项,核心3490可以是专用核心,例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purpose computing graphics processingunit,GPGPU)核心、图形核心,等等。
前端单元3430包括分支预测单元3432,其耦合到指令缓存单元 3434,指令缓存单元3434耦合到指令转化后备缓冲器(translation lookaside buffer,TLB)3436,该TLB3436耦合到指令取得单元3438,该指令取得单元3438耦合到解码单元3440。解码单元3440(例如,解码电路)可对指令(例如,宏指令)解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。解码单元3440 可利用各种不同的机制来实现。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(programmable logic array,PLA)、微代码只读存储器(read only memory,ROM),等等。在一个实施例中,核心3490 包括微代码ROM或其他介质,其为某些宏指令存储微代码(例如,在解码单元3440中或者以其他方式在前端单元3430内)。解码单元3440耦合到执行引擎单元3450中的重命名/分配器单元3452。
执行引擎单元3450包括耦合到引退单元3454和一组一个或多个调度器单元3456的重命名/分配器单元3452。(一个或多个)调度器单元3456 表示任何数目的不同调度器,包括预留站、中央指令窗口等等。(一个或多个)调度器单元3456耦合到(一个或多个)物理寄存器文件单元 3458。物理寄存器文件单元3458的每一者表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针),等等。在一个实施例中,物理寄存器文件单元3458包括向量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可提供体系结构式向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器文件单元3458与引退单元3454重叠以例示出可用来实现寄存器重命名和乱序执行的各种方式(例如,利用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;利用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;利用寄存器映射和寄存器的池;等等)。引退单元3454和(一个或多个)物理寄存器文件单元3458耦合到(一个或多个)执行集群3460。(一个或多个)执行集群 3460包括一组一个或多个执行单元3462(例如,执行电路)和一组一个或多个存储器访问单元3464。执行单元3462可在各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)上执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可包括专用于特定功能或功能集合的若干个执行单元,但其他实施例可只包括一个执行单元或者全都执行所有功能的多个执行单元。(一个或多个)调度器单元 3456、(一个或多个)物理寄存器文件单元3458和(一个或多个)执行集群3460被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/ 向量整数/向量浮点流水线和/或存储器访问流水线,它们各自具有其自己的调度器单元、物理寄存器文件单元和/或执行集群–并且在单独的存储器访问流水线的情况下,实现了某些实施例,其中只有此流水线的执行集群具有(一个或多个)存储器访问单元3464)。还应当理解,在使用分开流水线的情况下,这些流水线中的一个或多个可以是乱序发出/执行,其余的是有序的。
存储器访问单元3464的集合耦合到存储器单元3470,存储器单元 3470包括数据TLB单元3472,数据TLB单元3472耦合到数据缓存单元3474,数据缓存单元3474耦合到第2级(L2)缓存单元3476。在一个示范性实施例中,存储器访问单元3464可包括加载单元、存储地址单元和存储数据单元,其中每一者耦合到存储器单元3470中的数据TLB单元3472。指令缓存单元3434进一步耦合到存储器单元3470中的第2级 (L2)缓存单元3476。L2缓存单元3476耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。
作为示例,示范性寄存器重命名、乱序发出/执行核心体系结构可实现流水线3400如下:1)指令取得3438执行取得和长度解码级3402和 3404;2)解码单元3440执行解码级3406;3)重命名/分配器单元3452 执行分配级3408和重命名级3410;4)(一个或多个)调度器单元3456 执行调度级3412;5)(一个或多个)物理寄存器文件单元3458和存储器单元3470执行寄存器读取/存储器读取级3414;执行集群3460执行执行级3416;6)存储器单元3470和(一个或多个)物理寄存器文件单元 3458执行写回/存储器写入级3418;7)在异常处理级3422中可涉及各种单元;并且8)引退单元3454和(一个或多个)物理寄存器文件单元3458执行提交级3424。
核心3490可支持一个或多个指令集(例如,x86指令集(带有已随着更新版本添加的一些扩展);加州森尼维耳市的MIPS技术公司的MIPS 指令集;加州森尼维耳市的ARM控股公司的ARM指令集(带有可选的额外扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核心3490包括逻辑来支持紧缩数据指令集扩展(例如, AVX1、AVX2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。
应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按多种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心为该物理核心在同时进行多线程处理的每个线程提供逻辑核心),或者这些的组合(例如,时间切片式取得和解码,然后是同时多线程处理,例如像
Figure BDA0002954989590000731
Hyper-threading技术中那样)。
虽然寄存器重命名是在乱序执行的上下文中描述的,但应当理解寄存器重命名可用于有序体系结构中。虽然处理器的图示实施例还包括分开的指令和数据缓存单元3434/3474和共享的L2缓存单元3476,但替换实施例可对于指令和数据两者具有单个内部缓存,例如第1级(L1)内部缓存,或者多级别的内部缓存。在一些实施例中,系统可包括内部缓存和在核心和/或处理器外部的外部缓存的组合。或者,所有缓存都可在核心和/ 或处理器外部。
具体示范性有序核心体系结构
图35A-图35B图示出更具体的示范性有序核心体系结构的框图,该核心将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核心)之一。逻辑块通过高带宽互连网络(例如,环状网络)与某些固定功能逻辑、存储器I/O接口和其他必要I/O逻辑通信,这取决于应用。
图35A是根据本公开的实施例的单个处理器核心及其与片上互连网络 3502以及与第2级(L2)缓存3504的其本地子集的连接的框图。在一个实施例中,指令解码单元3500支持具有紧缩数据指令集扩展的x86指令集。L1缓存3506允许低时延访问以将存储器缓存到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元3508和向量单元3510使用分开的寄存器集合(分别是标量寄存器3512和向量寄存器3514)并且在它们之间传送的数据被写入到存储器,然后被从第1级(L1)缓存 3506读回,但本公开的替换实施例可使用不同的方案(例如,使用单个寄存器集合或者包括允许数据在两个寄存器文件之间传送而不被写入和读回的通信路径)。
L2缓存的本地子集3504是全局L2缓存的一部分,全局L2缓存被划分成单独的本地子集,每个处理器核心有一个。每个处理器核心具有到其自己的L2缓存的本地子集3504的直接访问路径。处理器核心读取的数据被存储在其L2缓存子集3504中并且可被迅速访问,与其他处理器核心访问其自己的本地L2缓存子集并行。处理器核心写入的数据被存储在其自己的L2缓存子集3504中并且在必要时被从其他子集冲刷出。环状网络确保了共享数据的一致性。环状网络是双向的,以允许诸如处理器核心、L2 缓存和其他逻辑块之类的代理在芯片内与彼此通信。每个环状数据路径在每个方向上是1012比特宽的。
图35B是根据本公开的实施例的图35A中的处理器核心的一部分的扩展视图。图35B包括L1缓存3504的L1数据缓存3506A部分,以及关于向量单元3510和向量寄存器3514的更多细节。具体而言,向量单元3510 是16宽向量处理单元(vector processing unit,VPU)(参见16宽ALU 3528),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。 VPU支持利用调配单元3520调配寄存器输入,利用数值转换单元3522A- B进行的数值转换,以及利用复制单元3524对存储器输入的复制。写入掩码寄存器3526允许断言结果向量写入。
图36是根据本公开的实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器3600的框图。图36中的实线框图示了具有单个核心3602A、系统代理3610和一组一个或多个总线控制器单元3616的处理器3600,而虚线框的可选添加图示了具有多个核心3602A-N、系统代理单元3610中的一组一个或多个集成存储器控制单元3614和专用逻辑3608的替换处理器3600。
从而,处理器3600的不同实现方式可包括:1)其中专用逻辑3608 是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心)并且核心3602A-N是一个或多个通用核心(例如,通用有序核心、通用乱序核心或者两者的组合)的CPU;2)其中核心3602A-N是主要打算用于图形和/ 或科学(吞吐量)的大量的专用核心的协处理器;以及3)其中核心 3602A-N是大量的通用有序核心的协处理器。从而,处理器3600可以是通用处理器、协处理器或专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核 (many integrated core,MIC)协处理器(包括30或更多个核心)、嵌入式处理器,等等。处理器可实现在一个或多个芯片上。处理器3600可以是一个或多个基片的一部分和/或可利用若干个工艺技术中的任何一者实现在一个或多个基片上,这些技术例如是BiCMOS、CMOS或NMOS。
存储器层次体系可包括核心内的一级或多级缓存、一组或一个或多个共享缓存单元3606以及耦合到该组集成存储器控制器单元3614的外部存储器(未示出)。该组共享缓存单元3606可包括一个或多个中间级别缓存,例如第2级(L2)、第3级(L3)、第4级(4)或其他级别的缓存,最后一级缓存(last level cache,LLC),和/或这些的组合。虽然在一个实施例中基于环的互连单元3612互连集成图形逻辑3608、该组共享缓存单元3606和系统代理单元3610/(一个或多个)集成存储器控制器单元 3614,但替换实施例也可使用任何数目的公知技术来互连这种单元。在一个实施例中,在一个或多个缓存单元3606和核心3602A-N之间维持一致性。
在一些实施例中,核心3602A-N中的一个或多个能够进行多线程处理。系统代理3610包括协调和操作核心3602A-N的那些组件。系统代理单元3610可包括例如功率控制单元(power control unit,PCU)和显示单元。PCU可以是或者可以包括调控核心3602A-N和集成图形逻辑3608的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核心3602A-N就体系结构指令集而言可以是同构的或者异构的;也就是说,核心3602A-N中的两个或更多个可能够执行同一指令集,而其他的可只能够执行该指令集的子集或者不同的指令集。
示范性计算机体系结构
图37-图40是示范性计算机体系结构的框图。本领域中已知的用于膝上型计算机、桌面型计算机、手持PC、个人数字助理、工程工作站、服务器、网络装置、网络集线器、交换机、嵌入式处理器、数字信号处理器 (digital signal processor,DSP)、图形装置、视频游戏装置、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持装置和各种其他电子装置的其他系统设计和配置也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的许多种系统或电子装置一般是适当的。
现在参考图37,其中示出了根据本公开的一个实施例的系统3700的框图。系统3700可包括一个或多个处理器3710、3715,它们耦合到控制器中枢3720。在一个实施例中,控制器中枢3720包括图形存储器控制器中枢(graphics memory controller hub,GMCH)3790和输入/输出中枢 (Input/Output Hub,IOH)3750(它们可在分开的芯片上);GMCH3790 包括与存储器3740和协处理器3745耦合的存储器和图形控制器;IOH 3750将输入/输出(I/O)装置3760耦合到GMCH 3790。或者,存储器和图形控制器的一者或两者被集成在处理器内(如本文所述),存储器3740 和协处理器3745直接耦合到处理器3710,并且控制器中枢3720与IOH 3750在单个芯片中。存储器3740可包括例如矩阵加速代码3740A,其存储当被执行时使得处理器执行本公开的任何方法的代码。
额外的处理器3715的可选性在图37中用虚线表示。每个处理器 3710、3715可包括本文描述的处理核心中的一个或多个并且可以是处理器 3600的某个版本。
存储器3740可例如是动态随机访问存储器(dynamic random access memory,DRAM)、相变存储器(phase change memory,PCM)或者两者的组合。对于至少一个实施例,控制器中枢3720经由多点分支总线(例如前端总线(frontside bus,FSB))、点到点接口(例如Quickpath Interconnect(QPI))或者类似的连接3795与(一个或多个)处理器 3710、3715通信。
在一个实施例中,协处理器3745是专用处理器,例如高吞吐量MIC 处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个实施例中,控制器中枢3720可包括集成的图形加速器。
在物理资源3710、3715之间,就包括体系结构特性、微体系结构特性、热特性、功率消耗特性等等在内的价值度量的范围而言可以有多种差异。
在一个实施例中,处理器3710执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器3710将这些协处理器指令识别为应当由附接的协处理器3745执行的类型。因此,处理器3710在协处理器总线或其他互连上向协处理器3745发出这些协处理器指令(或者表示协处理器指令的控制信号)。(一个或多个)协处理器3745接受和执行接收到的协处理器指令。
现在参考图38,其中示出了根据本公开的实施例的第一更具体示范性系统3800的框图。如图38中所示,多处理器系统3800是点到点互连系统,并且包括经由点到点互连3850耦合的第一处理器3870和第二处理器 3880。处理器3870和3880的每一者可以是处理器3600的某个版本。在本公开的一个实施例中,处理器3870和3880分别是处理器3710和3715,而协处理器3838是协处理器3745。在另一实施例中,处理器3870和 3880分别是处理器3710和协处理器3745。
处理器3870和3880被示为分别包括集成存储器控制器(integrated memorycontroller,IMC)单元3872和3882。处理器3870还包括点到点 (P-P)接口3876和3878作为其总线控制器单元的一部分;类似地,第二处理器3880包括P-P接口3886和3888。处理器3870、3880可利用P-P接口电路3878、3888经由点到点(P-P)接口3850交换信息。如图38中所示,IMC 3872和3882将处理器耦合到各自的存储器,即存储器3832和存储器3834,存储器3832和存储器3834可以是在本地附接到各个处理器的主存储器的一部分。
处理器3870、3880可各自利用点到点接口电路3876、3894、3886、 3898经由个体P-P接口3852、3854与芯片集3890交换信息。芯片集3890 可以可选地经由高性能接口3839与协处理器3838交换信息。在一个实施例中,协处理器3838是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享缓存(未示出)可被包括在任一处理器中,或者在两个处理器之外,但经由P-P互连与处理器连接,从而使得任一个或两个处理器的本地缓存信息在处理器被置于低功率模式中的情况下可被存储在该共享缓存中。
芯片集3890可经由接口3896耦合到第一总线3816。在一个实施例中,第一总线3816可以是外围组件互连(Peripheral Component Interconnect,PCI)总线,或者诸如快速PCI总线或另一种第三代I/O互连总线之类的总线,虽然本公开的范围不限于此。
如图38中所示,各种I/O装置3814可耦合到第一总线3816,以及将第一总线3816耦合到第二总线3820的总线桥3818。在一个实施例中,一个或多个额外的处理器3815,例如协处理器、高吞吐量MIC处理器、 GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或者任何其他处理器,耦合到第一总线3816。在一个实施例中,第二总线3820可以是低引脚数(low pin count,LPC)总线。各种装置可耦合到第二总线3820,例如包括键盘和/或鼠标3822、通信装置 3827和存储单元3828,例如盘驱动器或者其他大容量存储装置,它们在一个实施例中可包括指令/代码和数据3830。另外,音频I/O 3824可耦合到第二总线3820。注意其他体系结构是可能的。例如,取代图38的点到点体系结构,系统可实现多点分支总线或者其他这种体系结构。
现在参考图39,其中示出了根据本公开的实施例的第二更具体示范性系统3900的框图。图38和图39中的相似元素带有相似的标号,并且图 38的某些方面被从图39中省略以避免模糊图39的其他方面。
图39图示出处理器3870、3880可分别包括集成存储器和I/O控制逻辑(“CL”)3872和3882。从而,CL 3872、3882包括集成存储器控制器单元并且包括I/O控制逻辑。图39图示出不仅存储器3832、3834耦合到CL 3872、3882,而且I/O装置3914也耦合到控制逻辑3872、3882。传统I/O装置3915耦合到芯片集3890。
现在参考图40,其中示出了根据本公开的实施例的SoC 4000的框图。图36中的相似元素带有相似的标号。另外,虚线框是更先进SoC上的可选特征。在图40中,(一个或多个)互连单元4002耦合到:应用处理器4010,其包括一组一个或多个核心3602A-N,和(一个或多个)共享缓存单元3606;系统代理单元3610;(一个或多个)总线控制器单元 3616;(一个或多个)集成存储器控制器单元3614;一组或一个或多个协处理器4020,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机访问存储器(static random accessmemory,SRAM)单元4030;直接存储器访问(direct memory access,DMA)单元4032;以及显示单元4040,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器4020包括专用处理器,例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器,等等。
本文公开的(例如,机制的)实施例可以用硬件、软件、固件或者这种实现方案的组合来实现。本公开的实施例可实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置的可编程系统上执行的计算机程序或程序代码。
程序代码,例如图38中所示的代码3830,可被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可按已知的方式被应用到一个或多个输出装置。对于本申请而言,处理系统包括任何具有处理器的系统,例如;数字信号处理器(digital signalprocessor,DSP)、微控制器、专用集成电路(application specific integrated circuit,ASIC)或者微处理器。
程序代码可以用高级过程式或面向对象的编程语言实现来与处理系统通信。如果希望,程序代码也可以用汇编或机器语言来实现。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是经编译或者解译的语言。
至少一个实施例的一个或多个方面可由存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令实现,这些代表性指令当被机器读取时使得该机器制作逻辑来执行本文描述的技术。这种被称为“IP核心”的表示可被存储在有形机器可读介质上并且被提供到各种客户或制造设施以加载到实际制作该逻辑或处理器的制作机器中。
这种机器可读存储介质可包括但不限于由机器或装置制造或形成的物品的非暂态有形布置,包括存储介质,例如硬盘,任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(compact disk read-only memory,CD- ROM)、可改写致密盘(compact diskrewritable,CD-RW)和磁光盘,半导体装置,例如只读存储器(read-only memory,ROM),随机访问存储器(random access memory,RAM),例如动态随机访问存储器(dynamic randomaccess memory,DRAM),静态随机访问存储器(static random access memory,SRAM),可擦除可编程只读存储器(erasable programmable read-only memory,EEPROM),闪速存储器,电可擦除可编程只读存储器(electrically erasable programmable read-only memory,EEPROM),相变存储器(phase change memory,PCM),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。
因此,本公开的实施例还包括非暂态有形机器可读介质,其包含指令或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计数据,例如硬件描述语言(Hardware Description Language,HDL)。这种实施例也可被称为程序产品。
仿真(包括二进制转化、代码变形等等)
在一些情况下,指令转换器可用于将指令从源指令集转换到目标指令集。例如,指令转换器可将指令转化(例如,利用静态二进制转化、包括动态编译的动态二进制转化)、变形、仿真或以其他方式转换到要被核心处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或者其组合来实现。指令转换器可以在处理器上、在处理器外或者一部分在处理器上一部分在处理器外。
图41是根据本公开的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。在图示的实施例中,指令转换器是软件指令转换器,虽然可替换地,指令转换器可以用软件、固件、硬件或者其各种组合来实现。图41示出了高级别语言 4102的程序可被利用x86编译器4104来编译以生成x86二进制代码4106,x86二进制代码4106可由具有至少一个x86指令集核心4116的处理器原生执行。具有至少一个x86指令集核心4116的处理器表示任何这样的处理器:这种处理器可通过兼容地执行或以其他方式处理(1)
Figure BDA0002954989590000811
x86指令集核心的指令集的实质部分或者(2)针对在具有至少一个x86指令集核心的
Figure BDA0002954989590000812
处理器上运行的应用或其他软件的目标代码版本来执行与具有至少一个x86指令集核心的
Figure BDA0002954989590000821
处理器基本上相同的功能,以便实现与具有至少一个x86指令集核心的
Figure BDA0002954989590000822
处理器基本上相同的结果。 x86编译器4104表示可操作来生成x86二进制代码4106(例如,目标代码)的编译器,x86二进制代码4106在带有或不带有额外的链接处理的情况下可被在具有至少一个x86指令集核心的处理器4116上执行。类似地,图41示出了高级别语言4102的程序可被利用替换指令集编译器4108 来编译以生成替换指令集二进制代码4110,替换指令集二进制代码4110 可由没有至少一个x86指令集核心的处理器4114(例如,具有执行加州森尼维耳市的MIPS技术公司的MIPS指令集和/或执行加州森尼维耳市的 ARM控股公司的ARM指令集的核心的处理器)原生执行。指令转换器4112用于将x86二进制代码4106转换成可由没有x86指令集核心的处理器4114原生执行的代码。这个转换后的代码不太可能与替换指令集二进制代码4110相同,因为能够做到这一点的指令转换器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替换指令集的指令构成。从而,指令转换器4112表示通过仿真、模拟或任何其他过程允许不具有x86指令集处理器或核心的处理器或其他电子装置执行x86二进制代码4106 的软件、固件、硬件或者其组合。

Claims (24)

1.一种装置,包括:
矩阵操作加速器电路,包括:
处理元件的二维网格,
多个寄存器,表示二维矩阵并且耦合到所述处理元件的二维网格,以及
到缓存的耦合件;以及
硬件处理器核心,包括:
向量寄存器,
解码器,用于将单个指令解码为经解码的单个指令,所述单个指令包括识别所述二维矩阵的第一字段、识别所述二维矩阵的元素的集合的第二字段、以及识别所述向量寄存器的第三字段,以及
执行电路,用于执行所述经解码的单个指令,以使得:通过与所述到缓存的耦合件分开的、所述硬件处理器核心到所述矩阵操作加速器电路的耦合件,来将所述元素的集合从表示所述二维矩阵的所述多个寄存器存储到所述向量寄存器中。
2.如权利要求1所述的装置,其中,所述二维矩阵的所述元素的集合是所述二维矩阵的元素的真子集,并且所述第二字段是所述单个指令中识别所述二维矩阵的元素的真子集的立即数。
3.如权利要求1所述的装置,其中,所述元素的集合是由所述第二字段识别的所述二维矩阵的单行或单列,并且所述第二字段是所述硬件处理器核心的寄存器。
4.如权利要求1所述的装置,其中,在被请求的行或者被请求的列分别超过所述二维矩阵的行数目或列数目时,所述执行电路生成出错指示。
5.如权利要求1所述的装置,其中,在所述二维矩阵的被请求的行或者被请求的列中的元素的数目小于所述向量寄存器的元素的数目时,所述执行电路生成出错指示。
6.如权利要求1所述的装置,其中,所述单个指令包括第四字段,该第四字段识别到所述二维矩阵的被请求的行或者被请求的列中的偏移量,以用于从所述多个寄存器源发所述元素的集合。
7.如权利要求1所述的装置,还包括:转换电路,耦合到所述硬件处理器核心到所述矩阵操作加速器电路的耦合件,并且所述硬件处理器核心的所述执行电路用于执行所述经解码的单个指令,以将来自表示所述二维矩阵的所述多个寄存器的所述元素的集合从第一数字格式转换到不同的第二数字格式,并且使得将采取所述不同的第二数字格式的所述元素的集合存储到所述向量寄存器中。
8.如权利要求1所述的装置,其中,所述向量寄存器包括多个向量寄存器,所述元素的集合是所述二维矩阵的所有元素,并且所述执行电路用于执行所述经解码的单个指令,以将所述所有元素从表示所述二维矩阵的所述多个寄存器存储到所述多个向量寄存器中。
9.一种方法,包括:
从矩阵操作加速器电路的处理元件的二维网格生成到所述矩阵操作加速器电路的表示二维矩阵的多个寄存器中的输出,所述矩阵操作加速器电路包括到缓存的耦合件;
利用硬件处理器核心的解码器将单个指令解码为经解码的单个指令,所述单个指令包括识别所述二维矩阵的第一字段、识别所述二维矩阵的元素的集合的第二字段、以及识别所述硬件处理器核心的向量寄存器的第三字段;以及
利用所述硬件处理器核心的执行电路执行所述经解码的单个指令,以使得:通过与所述到缓存的耦合件分开的、所述硬件处理器核心到所述矩阵操作加速器电路的耦合件,来将所述元素的集合从表示所述二维矩阵的所述多个寄存器存储到所述向量寄存器中。
10.如权利要求9所述的方法,其中,所述二维矩阵的所述元素的集合是所述二维矩阵的元素的真子集,并且所述第二字段是所述单个指令中识别所述二维矩阵的元素的真子集的立即数。
11.如权利要求9所述的方法,其中,所述元素的集合是由所述第二字段识别的所述二维矩阵的单行或单列,并且所述第二字段是所述硬件处理器核心的寄存器。
12.如权利要求9所述的方法,还包括:在被请求的行或者被请求的列分别超过所述二维矩阵的行数目或列数目时,由所述执行电路生成出错指示。
13.如权利要求9所述的方法,在所述二维矩阵的被请求的行或者被请求的列中的元素的数目小于所述向量寄存器的元素的数目时,由所述执行电路生成出错指示。
14.如权利要求9所述的方法,其中,所述单个指令包括第四字段,该第四字段识别到所述二维矩阵的被请求的行或者被请求的列中的偏移量,以用于从所述多个寄存器源发所述元素的集合。
15.如权利要求9所述的方法,其中,所述执行还包括:利用转换电路,将来自表示所述二维矩阵的所述多个寄存器的所述元素的集合从第一数字格式转换到不同的第二数字格式,并且使得将采取所述不同的第二数字格式的所述元素的集合存储到所述向量寄存器中,其中,所述转换电路耦合到所述硬件处理器核心到所述矩阵操作加速器电路的耦合件。
16.如权利要求9所述的方法,其中,所述向量寄存器包括多个向量寄存器,所述元素的集合是所述二维矩阵的所有元素,并且所述执行包括:将所述所有元素从表示所述二维矩阵的所述多个寄存器存储到所述多个向量寄存器中。
17.一种存储有代码的非暂态机器可读介质,所述代码当被机器执行时使得所述机器执行一种方法,该方法包括:
从矩阵操作加速器电路的处理元件的二维网格生成到所述矩阵操作加速器电路的表示二维矩阵的多个寄存器中的输出,所述矩阵操作加速器电路包括到缓存的耦合件;
利用硬件处理器核心的解码器将单个指令解码为经解码的单个指令,所述单个指令包括识别所述二维矩阵的第一字段、识别所述二维矩阵的元素的集合的第二字段、以及识别所述硬件处理器核心的向量寄存器的第三字段;以及
利用所述硬件处理器核心的执行电路执行所述经解码的单个指令,以使得:通过与所述到缓存的耦合件分开的、所述硬件处理器核心到所述矩阵操作加速器电路的耦合件,来将所述元素的集合从表示所述二维矩阵的所述多个寄存器存储到所述向量寄存器中。
18.如权利要求17所述的非暂态机器可读介质,其中,所述二维矩阵的所述元素的集合是所述二维矩阵的元素的真子集,并且所述第二字段是所述单个指令中识别所述二维矩阵的元素的真子集的立即数。
19.如权利要求17所述的非暂态机器可读介质,其中,所述元素的集合是由所述第二字段识别的所述二维矩阵的单行或单列,并且所述第二字段是所述硬件处理器核心的寄存器。
20.如权利要求17所述的非暂态机器可读介质,还包括:在被请求的行或者被请求的列分别超过所述二维矩阵的行数目或列数目时,由所述执行电路生成出错指示。
21.如权利要求17所述的非暂态机器可读介质,在所述二维矩阵的被请求的行或者被请求的列中的元素的数目小于所述向量寄存器的元素的数目时,由所述执行电路生成出错指示。
22.如权利要求17所述的非暂态机器可读介质,其中,所述单个指令包括第四字段,该第四字段识别到所述二维矩阵的被请求的行或者被请求的列中的偏移量,以用于从所述多个寄存器源发所述元素的集合。
23.如权利要求17所述的非暂态机器可读介质,其中,所述执行还包括:利用转换电路,将来自表示所述二维矩阵的所述多个寄存器的所述元素的集合从第一数字格式转换到不同的第二数字格式,并且使得将采取所述不同的第二数字格式的所述元素的集合存储到所述向量寄存器中,其中,所述转换电路耦合到所述硬件处理器核心到所述矩阵操作加速器电路的耦合件。
24.如权利要求17所述的非暂态机器可读介质,其中,所述向量寄存器包括多个向量寄存器,所述元素的集合是所述二维矩阵的所有元素,并且所述执行包括:将所述所有元素从表示所述二维矩阵的所述多个寄存器存储到所述多个向量寄存器中。
CN202110218707.XA 2020-06-27 2021-02-26 用于移动数据的指令的装置、方法和系统 Pending CN113849224A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/914,347 2020-06-27
US16/914,347 US20210406018A1 (en) 2020-06-27 2020-06-27 Apparatuses, methods, and systems for instructions for moving data between tiles of a matrix operations accelerator and vector registers

Publications (1)

Publication Number Publication Date
CN113849224A true CN113849224A (zh) 2021-12-28

Family

ID=73854725

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110218707.XA Pending CN113849224A (zh) 2020-06-27 2021-02-26 用于移动数据的指令的装置、方法和系统

Country Status (3)

Country Link
US (1) US20210406018A1 (zh)
EP (1) EP3929736A1 (zh)
CN (1) CN113849224A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116954722A (zh) * 2023-09-21 2023-10-27 北京数渡信息科技有限公司 一种寄存器间数据转移的方法
WO2023236929A1 (zh) * 2022-06-06 2023-12-14 上海寒武纪信息科技有限公司 基于指令读取数据中的目标数据的方法及其设备
CN117851278A (zh) * 2024-03-08 2024-04-09 上海芯联芯智能科技有限公司 一种共享静态随机存取存储器的方法及中央处理器

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11263008B2 (en) 2017-03-20 2022-03-01 Intel Corporation Systems, methods, and apparatuses for tile broadcast
GB2617828A (en) * 2022-04-13 2023-10-25 Advanced Risc Mach Ltd Technique for handling data elements stored in an array storage

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7386703B2 (en) * 2003-11-18 2008-06-10 International Business Machines Corporation Two dimensional addressing of a matrix-vector register array
US8356162B2 (en) * 2008-03-18 2013-01-15 International Business Machines Corporation Execution unit with data dependent conditional write instructions
US11216720B2 (en) * 2015-10-08 2022-01-04 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit that manages power consumption based on memory accesses per period
US10817587B2 (en) * 2017-02-28 2020-10-27 Texas Instruments Incorporated Reconfigurable matrix multiplier system and method
US10990396B2 (en) * 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023236929A1 (zh) * 2022-06-06 2023-12-14 上海寒武纪信息科技有限公司 基于指令读取数据中的目标数据的方法及其设备
CN116954722A (zh) * 2023-09-21 2023-10-27 北京数渡信息科技有限公司 一种寄存器间数据转移的方法
CN116954722B (zh) * 2023-09-21 2024-01-16 北京数渡信息科技有限公司 一种寄存器间数据转移的方法
CN117851278A (zh) * 2024-03-08 2024-04-09 上海芯联芯智能科技有限公司 一种共享静态随机存取存储器的方法及中央处理器

Also Published As

Publication number Publication date
US20210406018A1 (en) 2021-12-30
EP3929736A1 (en) 2021-12-29

Similar Documents

Publication Publication Date Title
CN114356417A (zh) 实行16位浮点矩阵点积指令的系统和方法
CN110955453A (zh) 用于执行矩阵压缩和解压缩指令的系统和方法
US10963256B2 (en) Systems and methods for performing instructions to transform matrices into row-interleaved format
CN110968346A (zh) 用于执行用于快速元素解包到二维寄存器中的指令的系统
CN113050990A (zh) 用于矩阵操作加速器的指令的装置、方法和系统
CN106030514B (zh) 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
CN113849224A (zh) 用于移动数据的指令的装置、方法和系统
CN114153498A (zh) 用于加载片寄存器对的系统和方法
CN111177648A (zh) 用于执行16位浮点向量点积指令的系统和方法
CN113076139A (zh) 用于执行指令以转换成16位浮点格式的系统和方法
CN110909883A (zh) 用于执行指定三元片逻辑操作的指令的系统和方法
JP2021057004A (ja) 行列演算アクセラレータの命令のための装置、方法、及びシステム
CN112148251A (zh) 跳过无意义的矩阵运算的系统和方法
EP3974966A1 (en) Large scale matrix restructuring and matrix-scalar operations
CN111752618A (zh) 浮点加法器的交错流水线
CN110909882A (zh) 用于执行水平铺块操作的系统和方法
CN113849769A (zh) 矩阵转置和乘法
EP4276608A2 (en) Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions
CN111752605A (zh) 使用浮点乘法-累加结果的模糊-j位位置
CN114675883A (zh) 用于对齐矩阵操作加速器瓦片的指令的装置、方法和系统
CN114721624A (zh) 用于处理矩阵的处理器、方法和系统
TW202223633A (zh) 用於實施16位元浮點矩陣點積指令的裝置、方法及系統
CN113849770A (zh) 矩阵数据按行分散和收集
CN113849768A (zh) 伴随数据类型转换来加载和存储矩阵数据
CN112988230A (zh) 用于将大约为一的浮点值相乘的指令的装置、方法和系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination