CN114675883A - 用于对齐矩阵操作加速器瓦片的指令的装置、方法和系统 - Google Patents
用于对齐矩阵操作加速器瓦片的指令的装置、方法和系统 Download PDFInfo
- Publication number
- CN114675883A CN114675883A CN202111407206.2A CN202111407206A CN114675883A CN 114675883 A CN114675883 A CN 114675883A CN 202111407206 A CN202111407206 A CN 202111407206A CN 114675883 A CN114675883 A CN 114675883A
- Authority
- CN
- China
- Prior art keywords
- matrix
- dimensional matrix
- instruction
- tile
- dimensional
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 470
- 238000000034 method Methods 0.000 title claims abstract description 48
- 238000012545 processing Methods 0.000 claims abstract description 125
- 230000015654 memory Effects 0.000 description 230
- 239000013598 vector Substances 0.000 description 172
- 239000000872 buffer Substances 0.000 description 78
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 72
- 238000007667 floating Methods 0.000 description 50
- 238000010586 diagram Methods 0.000 description 47
- 238000006073 displacement reaction Methods 0.000 description 38
- 238000007792 addition Methods 0.000 description 24
- 230000008878 coupling Effects 0.000 description 20
- 238000010168 coupling process Methods 0.000 description 20
- 238000005859 coupling reaction Methods 0.000 description 20
- 230000001427 coherent effect Effects 0.000 description 11
- 238000004891 communication Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 11
- 230000007246 mechanism Effects 0.000 description 9
- 238000013501 data transformation Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 8
- 230000001052 transient effect Effects 0.000 description 8
- 239000003795 chemical substances by application Substances 0.000 description 7
- 238000013135 deep learning Methods 0.000 description 7
- 230000004044 response Effects 0.000 description 7
- 238000007906 compression Methods 0.000 description 6
- 230000006835 compression Effects 0.000 description 6
- 230000000873 masking effect Effects 0.000 description 6
- 230000001343 mnemonic effect Effects 0.000 description 6
- 238000013519 translation Methods 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 238000003491 array Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 229910052754 neon Inorganic materials 0.000 description 3
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000004088 simulation Methods 0.000 description 3
- 238000011156 evaluation Methods 0.000 description 2
- 238000011773 genetically engineered mouse model Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 230000010076 replication Effects 0.000 description 2
- 238000012358 sourcing Methods 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000009510 drug design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000001693 membrane extraction with a sorbent interface Methods 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 238000006386 neutralization reaction Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
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)
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是根据本公开的实施例图示出LOADTILEROW指令的使用的框图。
图26是根据本公开的实施例图示出LOADTILECOL指令的使用的框图。
图27根据本公开的实施例图示了包括矩阵(瓦片)操作加速器的系统,该矩阵(瓦片)操作加速器利用选择电路来在逻辑上从两个其他预加载的瓦片形成瓦片。
图28根据本公开的实施例图示了与存储装置相耦合的硬件处理器,该存储装置包括一个或多个“瓦片对齐”指令,这些指令在行(或列)粒度上操作以在逻辑上从两个其他预加载的瓦片形成瓦片。
图29根据本公开的实施例图示了处理“瓦片对齐”指令的方法。
图30是根据本公开的实施例图示出TILEALIGNROW指令的使用的框图。
图31是根据本公开的实施例图示出TILEALIGNCOL指令的使用的框图。
图32根据本公开的实施例图示了包括矩阵(瓦片)操作加速器的系统,该矩阵(瓦片)操作加速器利用选择电路和/或移位器电路来从两个其他瓦片生成新的瓦片。
图33根据本公开的实施例图示了与存储装置相耦合的硬件处理器,该存储装置包括一个或多个“瓦片元素对齐”指令,这些指令在元素粒度上操作以从两个其他瓦片生成新的瓦片。
图34根据本公开的实施例图示了处理“瓦片元素对齐”指令的方法。
图35是根据本公开的实施例图示出TILEELEMENTALIGN指令的使用的框图。
图36A是根据本公开的实施例图示出通用向量友好指令格式及其类别A指令模板的框图。
图36B是根据本公开的实施例图示出通用向量友好指令格式及其类别B指令模板的框图。
图37A是根据本公开的实施例图示出图36A和36B中的通用向量友好指令格式的字段的框图。
图37B是根据本公开的一个实施例图示出构成完整操作码字段的图37A中的特定向量友好指令格式的字段的框图。
图37C是根据本公开的一个实施例图示出构成寄存器索引字段的图37A中的特定向量友好指令格式的字段的框图。
图37D是根据本公开的一个实施例图示出构成增强操作字段3650的图37A中的特定向量友好指令格式的字段的框图。
图38是根据本公开的一个实施例的寄存器体系结构的框图。
图39A是根据本公开的实施例图示出示范性有序管线和示范性寄存器重命名、乱序发出/执行管线两者的框图。
图39B是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、乱序发出/执行体系结构核心两者的框图。
图40A是根据本公开的实施例的单个处理器核心及其与片上互连网络以及与第2级(L2)缓存的其本地子集的连接的框图。
图40B是根据本公开的实施例的图40A中的处理器核心的一部分的扩展视图。
图41是根据本公开的实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器的框图。
图42是根据本公开的一个实施例的系统的框图。
图43是根据本公开的实施例的更具体示范性系统的框图。
图44示出了根据本公开的实施例的第二更具体示范性系统的框图。
图45示出了根据本公开的实施例的片上系统(SoC)的框图。
图46是根据本公开的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。
具体实施方式
在接下来的描述中,阐述了许多具体细节。然而,要理解,没有这些具体细节也可实现实施例。在其他情况下,没有详细示出公知的电路、结构和技术,以免模糊对本说明书的理解。
说明书中提及“一个实施例”、“一实施例”、“一示例实施例”等等表明描述的实施例可包括特定的特征、结构或特性,但可能不一定每个实施例都包括该特定特征、结构或特性。另外,这种短语不一定指的是同一实施例。另外,当联系一实施例来描述特定的特征、结构或特性时,认为联系其他实施例(无论是否明确描述)来实现这种特征、结构或特性,是在本领域技术人员的知识范围内的。
矩阵在诸如机器学习和其他海量数据处理之类的许多计算任务中可越来越重要。深度学习是一类机器学习算法。深度学习体系结构,例如深度神经网络,可被应用到包括计算机视觉、话音识别、自然语言处理、音频识别、社交网络过滤、机器翻译、生物信息学和药物设计在内的领域。
推断和训练——用于深度学习的两个工具——可利用低精度算术。最大化深度学习算法和计算的吞吐量可辅助满足深度学习处理器(例如在数据中心中执行深度学习的那些)的需要。
矩阵-矩阵乘法(也称为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的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和瓦片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相邻。此外,在下文论述的一些实施例中,存储可以是对于数据元素的,而不是整个行或瓦片的。
经由CPUID来报告TMMA体系结构的支持参数。在一些实施例中,信息的列表包括最大高度和最大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”)的实施例。
矩阵(瓦片A 601)中的行的数目在某些实施例中匹配包括计算的时延的串行(链式)FMA的数目。一实现方式可自由在更小高度的网格上再循环,但计算保持相同。
源/目的地向量来自N行的瓦片(瓦片C 605)并且FMA 611的网格执行N向量矩阵操作,产生执行瓦片的矩阵乘法的完整指令。瓦片B 603是另一向量源并且在每一阶段中向FMA提供“广播”项。
在操作中,在一些实施例中,矩阵B(存储在瓦片B 603中)的元素散布在FMA的矩形网格上。矩阵B(存储在瓦片B 603中)的一行的元素被变换以与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)指令取得电路执行取得和长度解码阶段;2)分支和解码电路1303执行解码阶段;3)分配/重命名1307电路执行分配阶段和重命名阶段;4)调度器电路1309执行调度阶段;5)耦合到或者包括在调度器电路1309和分配/重命名1307电路中的(一个或多个)物理寄存器堆和存储器单元执行寄存器读取/存储器读取阶段;执行电路1311执行执行阶段;6)存储器单元和(一个或多个)物理寄存器堆单元执行写回/存储器写入阶段;7)在异常处理阶段中可涉及各种单元;并且8)引退单元和(一个或多个)物理寄存器堆单元执行提交阶段。
核心可支持一个或多个指令集(例如,x86指令集(带有已随着更新的版本添加的一些扩展);加州森尼维尔市的MIPS技术公司的MIPS指令集;加州森尼维尔市的ARM控股公司的ARM指令集(带有可选的额外扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核心1390包括逻辑来支持紧缩数据指令集扩展(例如,AVX1、AVX2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。
应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按各种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心针对该物理核心在同时进行多线程处理的每个线程提供逻辑核心),或者这些的组合(例如,时间切片式取得和解码,然后是同时多线程处理,例如像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),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。
应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按各种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心针对该物理核心在同时进行多线程处理的每个线程提供逻辑核心),或者这些的组合(例如,时间切片式取得和解码,然后是同时多线程处理,例如像Hyperthreading技术中那样)。
布局
在本说明书各处,利用行主要数据布局来表达数据。列主要用户应当根据其朝向来转化术语。图15图示了以行主要格式和列主要格式表达的矩阵的示例。如图所示,矩阵A是2x3矩阵。当此矩阵被以行主要格式来存储时,行的数据元素是连续的。当此矩阵被以列主要格式来存储时,列的数据元素是连续的。矩阵的一个公知属性是AT*BT=(BA)T,其中上标T表示变换。将列主要数据读取为行主要数据导致矩阵看起来像变换矩阵。
在一些实施例中,在硬件中利用行主要语义,并且列主要数据将交换操作对象顺序,结果是矩阵的变换,但对于后续从存储器的列主要读取,其是正确的、未变换的矩阵。
例如,如果有两个列主要矩阵要相乘:
a b g i k ag+bh ai+bj ak+bl
c d*h j l= cg+dh ci+dj ck+dl
e f eg+fh ei+fj ek+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+bj ci+dj ei+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图示了矩阵(瓦片)的使用的示例。在这个示例中,矩阵C1601包括两个瓦片,矩阵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利用(一个或多个)寄存器1819来存储瓦片使用和配置信息。
图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...TMMN2003)具有分开的寄存器,其中每个寄存器为该特定瓦片存储行和列大小。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(例如,硬件处理器核心,例如图39B中的处理器核心3990)向矩阵操作加速器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)可包括例如调谴电路2115,来控制接收到的请求(例如,命令)从主机处理器/处理系统2101到矩阵操作加速器2107的一个或多个组件的调谴。
描绘的矩阵操作加速器2107包括数据缓冲器(例如,寄存器)2105。在某些实施例中,数据缓冲器(例如,寄存器)2105可配置来将各个矩阵存储到例如第一多个寄存器(例如,瓦片)中,该第一多个寄存器表示第一二维矩阵(例如,标记为T0的瓦片将矩阵A存储在存储装置2105中),第二二维矩阵(例如,标记为T1的瓦片将矩阵B存储在存储装置2105中),第三二维矩阵(例如,标记为T3的瓦片将矩阵C存储在存储装置2105中),等等。系统(例如,主机处理器/处理系统2101)可包括(例如,一致)存储器接口2103(例如,数据缓存单元)来在主机处理器/处理系统2101(例如,作为乱序(Out of Order,OoO)核心)和矩阵操作加速器2107之间发送和接收数据(例如,与命令相对照)。
在某些实施例中,矩阵操作加速器2107利用处理元件2109(例如,融合乘加(FMA)电路)的网格来执行操作。在一个实施例中,调谴电路2115控制数据(例如,来自瓦片的一个或多个值)从数据缓冲器2105(例如,形成瓦片的寄存器)到处理元件2109的网格的发送。在某些实施例中,处理元件2109的网格是处理元件的二维网格,例如,图6中的FMA的二维网格。
如图21所示,这里的某些实施例利用(例如,一致)存储器接口(例如,图21中的存储器接口2103)来在存储器(例如,缓存)和/或主机处理系统2101(例如,主机处理器)和矩阵操作加速器(例如,矩阵操作加速器2107,例如其数据缓冲器2105(例如,形成瓦片的寄存器)(例如,瓦片寄存器))之间传送数据。然而,在某些实施例中,可能希望允许(例如,经由一个或多个指令)对数据缓冲器2105(例如,形成瓦片的寄存器)的访问(例如,直接访问)。在某些实施例中,处理器的代码的程序员被限于该处理器的指令集体系结构(ISA)。这里的某些实施例提供了一种ISA,其包括一个或多个(例如,宏)指令,这些指令允许了例如通过使用处理器的一个或多个寄存器和矩阵操作加速器的数据缓冲器(例如,形成瓦片的寄存器)之间的一个或多个直接路径(例如,图22中的加载到瓦片连接路径2229和/或从瓦片存储连接路径2231),在处理器的一个或多个寄存器和矩阵操作加速器的数据缓冲器(例如,形成瓦片的寄存器)之间移动数据(例如,作为对利用间接路径(例如但不限于包括存储器接口2103的路径)的附加或替换)。
这里的某些实施例针对的是用于在瓦片和处理器核心的紧缩数据寄存器(例如,具有多个元素的向量寄存器)和/或矩阵操作加速器的数据缓冲器(例如,形成瓦片的寄存器)之间移动数据的指令。
这里的某些实施例提供了一种ISA,其包括一个或多个(例如,宏)指令,这些指令允许了矩阵操作加速器的数据缓冲器(例如,形成瓦片的寄存器)中的元素和/或元素的行/列的对齐,例如,无需在矩阵操作加速器的数据缓冲器(例如,形成瓦片的寄存器)内移动数据元素。
某些工作负载(例如,人工智能工作负载)既涉及矩阵计算(例如,乘法)也涉及按元素计算。一个技术问题是如何利用具有专用瓦片寄存器(例如,AMX)的矩阵操作加速器(例如,其矩阵乘法硬件)与使用向量寄存器(例如,AVX,例如但不限于AVX512)的通用单指令多数据(SIMD)硬件。这里的实施例提供了这个问题的一种解决方案,即通过利用一个或多个(例如,宏)指令,这些指令允许在处理器的一个或多个寄存器和矩阵操作加速器(例如,执行电路)的数据缓冲器(例如,形成瓦片的寄存器)之间移动数据(例如,作为对利用间接路径(例如但不限于包括存储器接口2103的路径)的附加或替换)。在某些实施例中,(例如,2D)瓦片和这(一个或多个)指令所利用的(例如,向量)寄存器之间的耦合(例如,直接路径)是一条或多条电线或者衬底(例如,硅)内的导电沟道。
图22根据本公开的实施例图示了包括矩阵(瓦片)操作加速器2207的系统的实施例,该矩阵(瓦片)操作加速器2207利用一个或多个直接路径(例如,加载到瓦片连接路径2229和/或从瓦片存储连接路径2231)来将数据从向量寄存器2219加载到瓦片中和/或将数据从瓦片2205存储到向量寄存器2219中。在某些实施例中,主机处理器/处理系统2201(例如,硬件处理器核心,例如图39B中的处理器核心3990)向矩阵操作加速器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)将不会如本文所述那样执行。例如,当处理器将单个指令解码成经解码的指令并且该经解码的指令被处理器执行时,该单个指令通过与到存储器接口的(例如,或者经由缓存的)耦合分开的硬件处理器核心到矩阵操作加速器电路的耦合,来使得一个或多个元素从表示二维矩阵的多个寄存器存储到向量寄存器中。例如,当处理器将单个指令解码成经解码的指令并且该经解码的指令被处理器执行时,该单个指令通过与到存储器接口的(例如,或者经由缓存的)耦合分开的硬件处理器核心到矩阵操作加速器电路的耦合,来使得一个或多个元素从向量寄存器存储到表示二维矩阵的多个寄存器中。例如,当处理器将单个指令解码成经解码的指令并且该经解码的指令被处理器执行时,该单个指令通过到缓存的耦合将元素从缓存中的位置加载到表示二维矩阵的多个寄存器中,并且通过与到缓存的耦合分开的硬件处理器核心到矩阵操作加速器电路的耦合,来将一个或多个元素从向量寄存器加载到表示二维矩阵的多个寄存器中。例如,当处理器将单个指令解码成经解码的指令并且该经解码的指令被处理器执行时,该单个指令使得从(i)第一二维矩阵和(ii)第二二维矩阵在逻辑上形成第三二维矩阵来输入到处理元件的二维网格中,而不在耦合到处理元件的二维网格的表示第一二维矩阵的第一多个寄存器和耦合到处理元件的二维网格的表示第二二维矩阵的第二多个寄存器内移动数据元素。例如,当处理器将单个指令解码成经解码的指令并且该经解码的指令被处理器执行时,该单个指令使得矩阵操作加速器电路从第一二维矩阵的行或列的元素的真子集和第二二维矩阵的行或列的元素的真子集生成第三二维矩阵并且将第三二维矩阵存储在矩阵操作加速器电路中的目的地处。
在某些实施例中,存储器接口在缓存一致性协议下操作,例如,其中通过利用如本文所述的处理器的一个或多个寄存器和矩阵操作加速器的数据缓冲器(例如,形成瓦片的寄存器)之间的耦合来避免被利用来维持该缓存一致性(例如,设置比特、执行窥探,等等)的额外时间。例如,缓存(例如,线)一致性一般可以指每个缓存(例如,缓存存储器)和/或一致域中的其他(例如,系统)存储器观察到该同一缓存数据(例如缓存线,并且更具体而言是要包含该同一数据的该缓存线的每个实例)的所有修改。例如,当每个后续读取将会返回新(例如,当前)写入的值时,可以说修改被缓存观察到了。在某些实施例中,缓存控制器(例如,缓存一致性控制器)被包括在计算系统中来维持缓存一致性。在一个实施例中,缓存控制器是缓存控制器电路。可根据缓存一致性协议来维持缓存一致性,例如,四状态修改(M)、独占(E)、共享(S)和无效(I)(MESI)协议或者五状态修改(M)、独占(E)、共享(S)、无效(I)和转发(F)(MESIF)协议。(一个或多个)缓存控制器可以为(例如,存储在任何存储器中的)数据项的多个拷贝在该数据项的一个拷贝被改变时提供对该数据项的其他拷贝的更新,以例如确保共享项目(例如,操作对象)的数据值被及时地在整个计算系统内传播。
注意这里的附图可不描绘所有数据通信连接。本领域普通技术人员将会明白,这是为了不模糊附图中的某些细节。注意附图中的双箭头可不要求双向通信,例如,其可指示单向通信(例如,去往或来自该组件或设备)。在这里的某些实施例中可利用通信路径的任何或所有组合。
图23根据本公开的实施例图示了与包括一个或多个“从缓存和向量寄存器加载瓦片”指令2304的存储装置2302相耦合的硬件处理器2300。指令2304可包括一个或多个数据选择字段(例如,操作对象),这些数据选择字段识别(一个或多个)向量寄存器2219(例如,其所有元素或者其元素的真子集)和/或数据缓冲器2205(例如,形成瓦片的寄存器)。
在某些实施例中(例如,其中处理器/核心支持乱序(OoO)执行),处理器包括耦合到寄存器堆/存储器电路2312(例如,单元)的寄存器重命名/分配器电路2310来分配资源并且在寄存器(例如,与指令的初始源和最终目的地相关联的寄存器)上执行寄存器重命名。在某些实施例中,(例如,对于乱序执行),处理器包括与解码器电路2308耦合的一个或多个调度器电路2310。(一个或多个)调度器电路可以调度与解码的指令相关联的一个或多个操作,包括从“从缓存和向量寄存器加载瓦片”指令2304解码出的一个或多个操作,例如,用于在执行电路2314上执行。
作为一个示例,经解码的“从缓存和向量寄存器加载瓦片”指令2304将使得执行电路2314将数据从一致存储器接口2203(例如,缓存)移动到矩阵操作加速器2207的数据缓冲器2205的瓦片中并且将数据从(一个或多个)向量寄存器2219移动到矩阵操作加速器2207的数据缓冲器2205的瓦片中(例如,通过在瓦片中覆写某些数据),例如,无需通过(例如,缓存一致)存储器接口发送该数据。
在某些实施例中,包括了写回电路2316来将指令的结果写回到目的地(例如,将它们写入到(一个或多个)寄存器2219和/或数据缓冲器2205的瓦片),例如,从而这些结果在处理器内是可见的(例如,在产生了这些结果的执行电路之外是可见的)。
这些组件(例如,解码器2308、寄存器重命名/寄存器分配器/调度器2310、执行电路2314、寄存器(例如,寄存器堆)/存储器2312、或者写回电路2316)中的一个或多个可在硬件处理器的单个核心中(例如,以及在多个核心中,每个核心具有这些组件的一个实例)。
图24根据本公开的实施例图示了处理“从缓存和向量寄存器加载瓦片”指令的方法2400。处理器(例如,或者处理器核心)可执行方法2400,例如,响应于从软件接收到执行指令的请求。描绘的方法2400包括通过以下步骤来处理“从缓存和向量寄存器加载瓦片”指令:取得指令(例如,包括识别二维矩阵的第一字段、识别缓存中的位置的第二字段、以及识别向量寄存器的第三字段,以及操作码,该操作码指示出硬件处理器核心的执行电路将通过到缓存的耦合将元素从缓存中的位置加载到表示二维矩阵的多个寄存器中,并且通过与到缓存的耦合分开的硬件处理器核心到矩阵操作加速器电路的耦合来将一个或多个元素从向量寄存器加载到表示二维矩阵的多个寄存器中)2402,将指令解码成经解码的指令2404,取回与第二字段和第三字段相关联的数据2406,(可选地)调度经解码的指令来执行2408,根据操作码执行经解码的指令2410,并且提交执行指令的结果2412。
这里的实施例包括指令来将(一个或多个)(例如,完整)行或(一个或多个)(例如,完整)列(或者其组合)从向量寄存器移动到瓦片中。行或列可由立即数操作对象或者由通用寄存器(例如,图22中的通用寄存器2217)或SIMD寄存器(例如,图22中的向量寄存器2219)来选择。
在某些实施例中,指令允许向二维瓦片追加数据和/或替换瓦片内的某些数据,以例如将来自向量寄存器的数据的行或列添加到二维瓦片中。在一个实施例中,指令包括第一操作对象,以识别瓦片的(例如,目的地)、存储器位置(例如,使用缩放索引字节(scaledindex byte,SIB)寻址,例如,其中索引寄存器作为跨步指示器)、和/或一个或多个寄存器(例如,来作为瓦片内的新行或列使用)。在一个实施例中,指令的格式是LoadRowTile,其具有以下操作对象:目的地瓦片(例如,T1),源向量寄存器(例如,ZMM),以及其他源数据的存储器地址,例如,与LoadRowTile的助记符相对应的操作码。在一个实施例中,指令的格式为LoadColTile,其具有以下操作对象:目的地瓦片(例如,T1),源向量寄存器(例如,ZMM),以及其他源数据的存储器地址,例如,与LoadColTile的助记符相对应的操作码。
在一个实施例中,指令的格式包括一字段来识别要用来自向量寄存器的数据加载瓦片的哪一行(或哪一列),例如,这个字段可以是一个立即数(例如,八比特“imm8”)。在一个实施例中,来自向量寄存器的数据作为新的行(或列)被添加在瓦片中,例如添加在瓦片的末端,并且去除作为瓦片的第一行的数据。在某些实施例中,指令不要求加载瓦片(例如,此时其已经被加载),而可以只是替换一行(或一列)。在某些实施例中,指令利用向量寄存器作为起始寄存器,并且指令的一个字段(例如,立即数)指示出要使用多少个连续的向量寄存器作为行(或列)替换。
图25是根据本公开的实施例图示出LOADTILEROW指令的使用的框图。如图所示,指令2501包括:操作码2502(例如,LOADTILEROW),其指示出处理器要将一个或多个元素(例如,仅完整的行)从源向量寄存器2219移动(例如,加载)到瓦片2205(例如,表示二维矩阵的多个寄存器)中,例如,通过处理器与矩阵操作加速器电路的耦合,这与到存储器(例如,缓存)的耦合是分开的;目的地位置字段2504,其识别出瓦片2205;存储器源位置字段2506,来源发(例如,初始)源数据;以及向量源字段2508,其识别出(一个或多个)源向量寄存器2219;(可选地)行指示字段2510,其识别出要从向量寄存器接收数据的特定行(例如,在瓦片或初始源数据内);以及(可选地)行数目字段2512,来指示出要从(一个或多个)向量寄存器加载在瓦片内的数据的行的数目(例如,1、2、3、4,等等)。
还示出的是用于执行LOADTILEROW指令的系统2500。该系统包括数据(例如,矩阵)的指定存储器源(例如,经由接口2203来自缓存)、执行电路2314、以及指定的(一个或多个)源向量寄存器2219。应当理解,类似的格式可被用于列而不是行的移动,例如,用LOADTILECOL的助记符(其中COL是指列实施例)。
图26是根据本公开的实施例图示出LOADTILECOL指令的使用的框图。如图所示,指令2601包括:操作码2602(例如,LOADTILECOL),其指示出处理器要将一个或多个元素(例如,仅完整的列)从源向量寄存器2219移动(例如,加载)到瓦片2205(例如,表示二维矩阵的多个寄存器)中,例如,通过处理器与矩阵操作加速器电路的耦合,这与到存储器(例如,缓存)的耦合是分开的;目的地位置字段2604,其识别出瓦片2205;存储器源位置字段2606,来源发(例如,初始)源数据;以及向量源字段2608,其识别出(一个或多个)源列寄存器2219;(可选地)列(col.)指示字段2610,其识别出要从向量寄存器接收数据的特定列(例如,在瓦片或初始源数据内);以及(可选地)列数目字段2612,来指示出要从(一个或多个)向量寄存器加载在瓦片内的数据的列的数目(例如,1、2、3、4,等等)。
还示出的是用于执行LOADTILECOL指令的系统2600。该系统包括数据(例如,矩阵)的指定存储器源(例如,经由接口2203来自缓存)、执行电路2314、以及指定的(一个或多个)源向量寄存器2219。
在某些实施例中,如果所请求的行(或列)的数目高于瓦片中的行(或列)的数目,则指令的执行将出错(例如,生成出错指示,包括但不限于提出标志)。在某些实施例中,如果源向量寄存器比瓦片更窄(例如,具有更少的元素),则指令的执行将出错。在某些实施例中,如果源向量寄存器比瓦片更窄(例如,具有更少的元素),则指令的执行会导致向目的地瓦片写入超出为向量寄存器定义的宽度的零。在某些实施例中,如果源向量寄存器比瓦片(例如,瓦片的列或行)更宽(例如,具有更多的元素),则指令的执行将出错。
图27根据本公开的实施例图示了包括矩阵(瓦片)操作加速器2707的系统,该矩阵(瓦片)操作加速器2707利用选择电路2733来在逻辑上从两个其他预加载的瓦片形成瓦片。在某些实施例中,选择电路2377允许矩阵操作加速器2707(例如,PE网格2709)源发从已经加载到数据缓冲器2705(例如,形成瓦片的寄存器)中的两个瓦片形成的逻辑瓦片,例如,无需使用时间和/或资源来在数据缓冲器2705内物理地移动任何数据元素。这可包括在逻辑上改变数据缓冲器2705(例如,形成多个瓦片的寄存器)的元素的什么真子集被单个逻辑瓦片名称所引用。
在某些实施例中,主机处理器/处理系统2701(例如,硬件处理器核心,例如图39B中的处理器核心3990)向矩阵操作加速器2707传达命令(例如,矩阵操纵操作,比如算术或矩阵操纵操作、加载和/或存储操作)。然而,这样示出只是为了论述。如本文详述的,加速器2707可以是处理核心的一部分。是瓦片操纵操作符指令的命令可以把瓦片称呼为寄存器-寄存器(“reg-reg”)或寄存器-存储器(“reg-mem”)格式。诸如TILESTORE、TILELOAD、TILECONFIG等等之类的其他命令在某些实施例中不在瓦片上执行数据操作。命令可以是解码的指令(例如,微操作)或者宏指令来供加速器2707处理。在一个实施例中,硬件处理器核心响应于矩阵操作指令被硬件处理器核心执行而向矩阵(瓦片)操作加速器2707发送微操作。
在一个实施例中,预留站(RS)电路2711向矩阵操作加速器2707发送命令(例如,微操作)。在某些实施例中,矩阵操作加速器2707是瓦片矩阵单元(TMU)。在某些实施例中,矩阵操作加速器2707包括矩阵加速器控制器电路2713。在一个实施例中,矩阵加速器控制器(例如,电路2713)将控制进、出和/或在矩阵操作加速器2707内的数据的操作和流动。矩阵操作加速器2707(例如,矩阵加速器控制器电路2713)可包括例如调谴电路2715,来控制接收到的请求(例如,命令)从主机处理器/处理系统2701到矩阵操作加速器2707的一个或多个组件的调谴。
在某些实施例中,矩阵操作加速器2707利用处理元件2709(例如,融合乘加(FMA)电路)的网格来执行操作。在一个实施例中,调谴电路2715控制数据(例如,来自瓦片的一个或多个值)从数据缓冲器2705(例如,形成瓦片的寄存器)到处理元件2709的网格的发送。在某些实施例中,处理元件2709的网格是处理元件的二维网格,例如,图6中的FMA的二维网格。
描绘的矩阵操作加速器2707包括数据缓冲器(例如,寄存器)2705。在某些实施例中,数据缓冲器(例如,寄存器)2705可配置来将各个矩阵存储到例如第一多个寄存器(例如,瓦片)中,该第一多个寄存器表示第一二维矩阵(例如,标记为T0的瓦片将矩阵A存储在存储装置2705中),第二二维矩阵(例如,标记为T1的瓦片将矩阵B存储在存储装置2705中),第三二维矩阵(例如,标记为T3的瓦片将矩阵C存储在存储装置2705中),等等。系统(例如,主机处理器/处理系统2701)可包括(例如,一致)存储器接口2703(例如,数据缓存单元)来在主机处理器/处理系统2701(例如,作为乱序(OoO)核心)和矩阵操作加速器2707之间发送和接收数据(例如,与命令相对照)(例如,包括来自存储器接口2703的加载到瓦片连接路径2725和/或来自存储器接口2703的从瓦片存储连接路径2727)。
如图27所示,这里的某些实施例利用(例如,一致)存储器接口(例如,图27中的存储器接口2703)来在存储器(例如,缓存)和/或主机处理器2701(例如,主机处理器2701)和矩阵操作加速器(例如,矩阵操作加速器2707,例如其数据缓冲器2705(例如,形成瓦片的寄存器)(例如,瓦片寄存器))之间传送数据。额外地或者替换地,在某些实施例中,可能希望允许(例如,经由一个或多个指令)对数据缓冲器2705(例如,形成瓦片的寄存器)的访问(例如,直接访问)。在某些实施例中,处理器的代码的程序员被限于该处理器的指令集体系结构(ISA)。
这里的某些实施例提供了一种ISA,它包括一个或多个(例如,宏)指令,这些指令允许了将数据的行或列(例如,但不按比整行或整列更细的粒度)对齐到数据的单个二维瓦片中。
图28根据本公开的实施例图示了与包括一个或多个“瓦片对齐”指令2804的存储装置2802相耦合的硬件处理器2800。指令2804可包括一个或多个数据选择字段(例如,操作对象),这些数据选择字段识别数据缓冲器2705(例如,形成瓦片的寄存器)。
在某些实施例中(例如,其中处理器/核心支持乱序(OoO)执行),处理器包括耦合到寄存器堆/存储器电路2812(例如,单元)的寄存器重命名/分配器电路2810来分配资源并且在寄存器(例如,与指令的初始源和最终目的地相关联的寄存器)上执行寄存器重命名。在某些实施例中,(例如,对于乱序执行),处理器包括与解码器电路2808耦合的一个或多个调度器电路2810。(一个或多个)调度器电路可以调度与解码的指令相关联的一个或多个操作,包括从“瓦片对齐”指令2804解码出的一个或多个操作,例如,用于在执行电路2814上执行。
作为一个示例,解码的“瓦片对齐”指令2804将使得执行电路2814从第一二维矩阵和第二二维矩阵(例如,在逻辑上)形成结果二维矩阵,而不移动(例如,删除或覆写)数据缓冲器2705的第一瓦片(例如,第一多个寄存器)和数据缓冲器2705的第二瓦片(例如,第二多个寄存器)内的数据元素。在一个实施例中,选择电路2733从第一瓦片(例如,图28中的瓦片0(T0))和第二瓦片(例如,图28中的瓦片1(T1))源发数据,以便在逻辑上从这些瓦片生成新的二维矩阵“D”,例如,其中新的二维矩阵“D”随后可被用作到PE网格2709中的输入2818(例如,同时将或不将该矩阵“D”保存到数据缓冲器2705的瓦片中)。
在某些实施例中,包括了写回电路2816来将指令的结果写回到目的地(例如,将它们写入到数据缓冲器2705的瓦片),例如,从而这些结果在处理器内是可见的(例如,在产生了这些结果的执行电路之外是可见的)。
这些组件(例如,解码器2808、寄存器重命名/寄存器分配器/调度器2810、执行电路2814、寄存器(例如,寄存器堆)/存储器2812、或者写回电路2816)中的一个或多个可在硬件处理器的单个核心中(例如,以及在多个核心中,每个核心具有这些组件的一个实例)。
图29根据本公开的实施例图示了处理“瓦片对齐”指令的方法2900。处理器(例如,或者处理器核心)可执行方法2900,例如,响应于从软件接收到执行指令的请求。描绘的方法2900包括通过以下步骤来处理“瓦片对齐”指令:取得指令(例如,包括识别第一二维矩阵的第一字段、识别第二二维矩阵的第二字段、以及操作码,该操作码指示出硬件处理器核心的执行电路将使得第三二维矩阵被从第一二维矩阵和第二二维矩阵在逻辑上形成来输入到处理元件的二维网格中,而不移动(例如,或者删除/覆写)第一多个寄存器和第二多个寄存器内的数据元素)2902,将指令解码成经解码的指令2904,(可选地)取回与指令相关联的数据2906,(可选地)调度经解码的指令来执行2908,根据操作码执行经解码的指令2910,并且提交执行指令的结果2912。
这里的实施例包括指令来允许将多个瓦片对齐到单个瓦片中,例如,无需实际移动数据缓冲器2705(例如,形成瓦片的寄存器)内的数据。在第一和/或第二瓦片中从其开始/结束的行或列可由立即数操作对象或者由通用寄存器(例如,图27中的通用寄存器2717)或SIMD寄存器(例如,图27中的向量寄存器2719)来选择。
在一个实施例中,指令的格式为TileAlign,其具有以下操作对象:第一源瓦片(例如,T1)和第二源瓦片(例如,T2),例如,与TileAlign的助记符相对应的操作码。
在一个实施例中,指令的格式包括一字段,来识别出瓦片的哪一行(或列)将是新的(例如,逻辑)瓦片(例如,新瓦片)中的第一行(或列),例如,该字段指示出在第二瓦片(例如,T2)中从哪一行(或哪一列)开始继续第一瓦片(例如,T1)(例如,以及从T1跳过什么)。在一个实施例中,新瓦片、第一源瓦片和第二源瓦片中的每一者是相同大小的(例如,相同的行和列数目)。
在一个实施例中,第一瓦片比要形成的新瓦片小,因此指令从第二瓦片源发一个或多个额外的行(或列)以形成新瓦片。
这样的指令可以在执行多次迭代时被利用,从而希望递增所使用的行(或列),例如,而不是必须重复地不断加载整个瓦片。
图30是根据本公开的实施例图示出TILEALIGNROW指令的使用的框图。如图所示,指令3001包括操作码3002(例如,TILEALIGNROW),该操作码指示出处理器要从缓冲器2705(例如,表示每个二维瓦片的多个寄存器)的第一瓦片(例如,瓦片“A”)和第二瓦片(例如,瓦片“B”)形成新瓦片3003(例如,作为输入2818),例如,通过由选择电路2733选择期望的行;第一源位置字段3004,其识别缓冲器2705中的第一瓦片;第二源位置字段3006,其识别缓冲器2705中的第二瓦片;(可选地)结果瓦片标识符字段3008,来识别出新的(例如,逻辑)瓦片3003将被存储在缓冲器2705中的何处(例如,如果要存储的话);(可选地)从第一瓦片源发到逻辑瓦片3003中的行的数目3010;以及(可选地)从第二瓦片源发到逻辑瓦片3003中的行的数目3012。
还示出的是用于执行TILEALIGNROW指令的系统3000。该系统包括缓冲器2705(例如,形成第一瓦片和第二瓦片)、执行电路2814、以及选择电路2733。应当理解,类似的格式可被用于列而不是行对齐,例如,用TILEALIGNCOL的助记符(其中COL是指列实施例)。
图31是根据本公开的实施例图示出TILEALIGNCOL指令的使用的框图。如图所示,指令3101包括操作码3102(例如,TILEALIGNCOL),该操作码指示出处理器要从缓冲器2705(例如,表示每个二维瓦片的多个寄存器)的第一瓦片(例如,瓦片“A”)和第二瓦片(例如,瓦片“B”)形成新瓦片3103(例如,作为输入2818),例如,通过由选择电路2733选择期望的列;第一源位置字段3104,其识别缓冲器2705中的第一瓦片;第二源位置字段3106,其识别缓冲器2705中的第二瓦片;(可选地)结果瓦片标识符字段3108,来识别出新的(例如,逻辑)瓦片3103将被存储在缓冲器2705中的何处(例如,如果要存储的话);(可选地)从第一瓦片源发到逻辑瓦片3103中的列的数目3110;以及(可选地)从第二瓦片源发到逻辑瓦片3103中的列的数目3112。
还示出的是用于执行TILEALIGNCOL指令的系统3100。该系统包括缓冲器2705(例如,形成第一瓦片和第二瓦片)、执行电路2814、以及选择电路2733。
在某些实施例中,如果所请求的行(或列)的数目高于瓦片中的行(或列)的数目,则指令的执行将出错(例如,生成出错指示,包括但不限于提出标志)。
图32根据本公开的实施例图示了包括矩阵(瓦片)操作加速器3207的系统,该矩阵(瓦片)操作加速器3207利用选择电路3233和/或移位器电路3235来从两个其他瓦片生成新的瓦片。在某些实施例中,允许矩阵操作加速器3207(例如,选择电路3233和/或移位器电路3235)选择两个源瓦片的每一者的某些元素来生成新瓦片。
在某些实施例中,主机处理器/处理系统3201(例如,硬件处理器核心,例如图39B中的处理器核心3990)向矩阵操作加速器3207传达命令(例如,矩阵操纵操作,比如算术或矩阵操纵操作、加载和/或存储操作)。然而,这样示出只是为了论述。如本文详述的,加速器3207可以是处理核心的一部分。是瓦片操纵操作符指令的命令可以把瓦片称呼为寄存器-寄存器(“reg-reg”)或寄存器-存储器(“reg-mem”)格式。诸如TILESTORE、TILELOAD、TILECONFIG等等之类的其他命令在某些实施例中不在瓦片上执行数据操作。命令可以是解码的指令(例如,微操作)或者宏指令来供加速器3207处理。在一个实施例中,硬件处理器核心响应于矩阵操作指令被硬件处理器核心执行而向矩阵(瓦片)操作加速器3207发送微操作。
在一个实施例中,预留站(RS)电路3211向矩阵操作加速器3207发送命令(例如,微操作)。在某些实施例中,矩阵操作加速器3207是瓦片矩阵单元(TMU)。在某些实施例中,矩阵操作加速器3207包括矩阵加速器控制器电路3213。在一个实施例中,矩阵加速器控制器(例如,电路3213)将控制进、出和/或在矩阵操作加速器3207内的数据的操作和流动。矩阵操作加速器3207(例如,矩阵加速器控制器电路3213)可包括例如调谴电路3215,来控制接收到的请求(例如,命令)从主机处理器/处理系统3201到矩阵操作加速器3207的一个或多个组件的调谴。
在某些实施例中,矩阵操作加速器3207利用处理元件3209(例如,融合乘加(FMA)电路)的网格来执行操作。在一个实施例中,调谴电路3215控制数据(例如,来自瓦片的一个或多个值)从数据缓冲器3205(例如,形成瓦片的寄存器)到处理元件3209的网格的发送。在某些实施例中,处理元件3209的网格是处理元件的二维网格,例如,图6中的FMA的二维网格。
描绘的矩阵操作加速器3207包括数据缓冲器(例如,寄存器)3205。在某些实施例中,数据缓冲器(例如,寄存器)3205可配置来将各个矩阵存储到例如第一多个寄存器(例如,瓦片)中,该第一多个寄存器表示第一二维矩阵(例如,标记为T0的瓦片将矩阵A存储在存储装置3205中),第二二维矩阵(例如,标记为T1的瓦片将矩阵B存储在存储装置3205中),第三二维矩阵(例如,标记为T3的瓦片将矩阵C存储在存储装置3205中),等等。系统(例如,主机处理器/处理系统3201)可包括(例如,一致)存储器接口3203(例如,数据缓存单元)来在主机处理器/处理系统3201(例如,作为乱序(OoO)核心)和矩阵操作加速器3207之间发送和接收数据(例如,与命令相对照)(例如,包括来自存储器接口3203的加载到瓦片连接路径3225和/或来自存储器接口3203的从瓦片存储连接路径3227)。
如图32所示,这里的某些实施例利用(例如,一致)存储器接口(例如,图32中的存储器接口3203)来在存储器(例如,缓存)和/或主机处理器3201(例如,主机处理器3201)和矩阵操作加速器(例如,矩阵操作加速器3207,例如其数据缓冲器3205(例如,形成瓦片的寄存器)(例如,瓦片寄存器))之间传送数据。额外地或者替换地,在某些实施例中,可能希望允许(例如,经由一个或多个指令)对数据缓冲器3205(例如,形成瓦片的寄存器)的访问(例如,直接访问)。在某些实施例中,处理器的代码的程序员被限于该处理器的指令集体系结构(ISA)。
这里的某些实施例提供了一种ISA,它包括一个或多个(例如,宏)指令,这些指令允许了将数据的元素(例如,以比仅整行或整列更细的粒度)对齐到数据的单个二维瓦片中。
图33根据本公开的实施例图示了与包括一个或多个“瓦片元素对齐”指令3304的存储装置3302相耦合的硬件处理器3300。指令3304可包括一个或多个数据选择字段(例如,操作对象),这些数据选择字段识别数据缓冲器3205(例如,形成瓦片的寄存器)。
在某些实施例中(例如,其中处理器/核心支持乱序(OoO)执行),处理器包括耦合到寄存器堆/存储器电路3312(例如,单元)的寄存器重命名/分配器电路3310来分配资源并且在寄存器(例如,与指令的初始源和最终目的地相关联的寄存器)上执行寄存器重命名。在某些实施例中,(例如,对于乱序执行),处理器包括与解码器电路3308耦合的一个或多个调度器电路3310。(一个或多个)调度器电路可以调度与解码的指令相关联的一个或多个操作,包括从“瓦片元素对齐”指令3304解码出的一个或多个操作,例如,用于在执行电路3314上执行。
作为一个示例,解码的“瓦片元素对齐”指令3304将使得执行电路3314(例如,在逻辑上)从数据缓冲器3205的第一二维瓦片(例如,第一多个寄存器)和数据缓冲器3205的第二二维瓦片(例如,第二多个寄存器)的元素形成结果二维矩阵。在一个实施例中,选择电路3233从第一瓦片(例如,图33中的瓦片0(T0))和第二瓦片(例如,图33中的瓦片1(T1))源发数据“D”并且移位器电路3235对该数据中的某些进行移位,以便随后从这些瓦片生成新的二维矩阵“T0”,例如,其中新的二维矩阵“T0”随后可被用作到PE网格3209中的输入3318(例如,同时将或不将该矩阵“新T0”保存到数据缓冲器3205的瓦片中)。
在某些实施例中,包括了写回电路3316来将指令的结果写回到目的地(例如,将它们写入到数据缓冲器3205的瓦片),例如,从而这些结果在处理器内是可见的(例如,在产生了这些结果的执行电路之外是可见的)。
这些组件(例如,解码器3308、寄存器重命名/寄存器分配器/调度器3310、执行电路3314、寄存器(例如,寄存器堆)/存储器3312、或者写回电路3316)中的一个或多个可在硬件处理器的单个核心中(例如,以及在多个核心中,每个核心具有这些组件的一个实例)。
图34根据本公开的实施例图示了处理“瓦片元素对齐”指令的方法3400。处理器(例如,或者处理器核心)可执行方法3400,例如,响应于从软件接收到执行指令的请求。描绘的方法3400包括通过以下步骤来处理“瓦片元素对齐”指令:取得指令(例如,包括识别第一二维矩阵的第一字段、识别第二二维矩阵的第二字段、以及操作码,该操作码指示出硬件处理器核心的执行电路将使得矩阵操作加速器电路从第一二维矩阵的行或列的元素的真子集和第二二维矩阵的行或列的元素的真子集生成第三二维矩阵并且将第三二维矩阵存储在矩阵操作加速器电路中的目的地处)3402,将指令解码成经解码的指令3404,(可选地)取回与指令相关联的数据3406,(可选地)调度经解码的指令来执行3408,根据操作码执行经解码的指令3410,并且提交执行指令的结果3412。
这里的实施例包括指令来允许将多个瓦片对齐到单个瓦片中。在第一和/或第二瓦片中从其开始/结束的行或列的元素可由立即数操作对象或者由通用寄存器(例如,图32中的通用寄存器3217)或SIMD寄存器(例如,图32中的向量寄存器3219)来选择。
在一个实施例中,指令的格式为TileElementAlign,其具有以下操作对象:第一源瓦片(例如,T1)和第二源瓦片(例如,T2),例如,与TileElementAlign的助记符相对应的操作码。该格式可包括一字段(例如,立即数或寄存器),来指定(例如,源)瓦片中的特定元素来开始对齐。该字段可包括一个值,该值指定源(例如,第二源(例如,“T2”)瓦片)中的起始元素,例如,用连续数字为二维(2-D)瓦片中的每个元素编号,例如,类似于一维(1-D)阵列。参见例如图35中的瓦片A中的元素的编号。该字段可包括一个值,该值指定源(例如,第二源(例如,“T2”)瓦片)中的起始元素的行和列元素(例如,XY坐标)。
在一个实施例中,指令的格式包括一字段,来识别出第一源瓦片的哪个元素将是新的(例如,逻辑)瓦片(例如,新瓦片)中的第一行(或列)中的第一元素,例如,该字段指示出在第一瓦片(例如,T1)中从哪一元素开始(例如,以及从T1跳过什么)。在一个实施例中,新瓦片、第一源瓦片和第二源瓦片中的每一者是相同大小的(例如,相同的行和列数目)。
在上述图25、图26、图30和图31中,某些瓦片在其元素内被示出了索引值,例如,行.列的二维索引(例如,其中第二行(行1)和第三列(列2)的索引为(1.2))。应当理解,在该索引的元素内可存储值。在图35中,描绘了每个元素中的值的变量,而不是二维索引,以便更容易图示出结果(例如,“新瓦片A”)内的源元素的所产生的移动。
图35是根据本公开的实施例图示出TILEELEMENTALIGN指令的使用的框图。如图所示,指令3501包括操作码3502(例如,TILEELEMENTALIGN),该操作码指示出处理器要从缓冲器3205(例如,表示每个二维瓦片的多个寄存器)的第一瓦片(例如,瓦片“A”)和第二瓦片(例如,瓦片“B”)形成新瓦片(例如,来存储在缓冲器3205中),例如,通过由矩阵操作加速器3207(例如,其选择电路3233和/或移位器电路3235)选择期望的数据(例如,行或列);第一源位置字段3504,其识别缓冲器3205中的第一瓦片;第二源位置字段3506,其识别缓冲器3205中的第二瓦片;(可选地)结果瓦片标识符字段3508,来识别出新的(例如,逻辑)结果瓦片(例如,新瓦片A)将被存储在缓冲器3205中的何处(例如,如果要存储的话);(可选地)对来自第一源瓦片3510的起始元素的指示;以及(可选地)对来自第二源瓦片3512的起始元素的指示。
还示出的是用于执行TILEELEMENTALIGN指令的系统3500。该系统包括缓冲器3205(例如,形成第一瓦片和第二瓦片)、执行电路3314、以及矩阵操作加速器3207。在图35中,瓦片A和B各自具有9个元素(3x3瓦片),并且希望从瓦片A中的元素[1,1](例如,这里用数字“4”标识)源发结果瓦片,因此在某些实施例中,对数据进行操纵,使得来自瓦片A中的第二行(或第二列)的最后两个元素成为结果瓦片的第一行中的前两个元素,元素“6”被移动到结果瓦片的第一行的最后一个元素中,这样一直继续到到达瓦片A的末尾,并且结果瓦片的其余部分是从瓦片B(示为元素a-d)连续填充的。可以通过以行为单位的源发(例如,如图35所示)或者以列为单位的源发来执行对齐。
在某些实施例中,如果所请求的元素不是瓦片中的有效元素(例如,“出界”),则指令的执行将出错(例如,生成出错指示,包括但不限于提出标志)。
下面详述其中可使用上述内容的额外的示范性体系结构、系统等等。
可考虑到以下示例来描述所公开的技术的至少一些实施例:
示例1.一种装置,包括:
矩阵操作加速器电路,其包括:
处理元件的二维网格,
与所述处理元件的二维网格相耦合的表示第一二维矩阵的第一多个寄存器,以及
与所述处理元件的二维网格相耦合的表示第二二维矩阵的第二多个寄存器,以及
硬件处理器核心,其与所述矩阵操作加速器电路相耦合并且包括:
解码器电路,来将单个指令解码成经解码的指令,所述单个指令包括识别所述第一二维矩阵的第一字段、识别所述第二二维矩阵的第二字段、以及操作码,该操作码指示出所述硬件处理器核心的执行电路将使得第三二维矩阵被从所述第一二维矩阵和所述第二二维矩阵在逻辑上形成来输入到所述处理元件的二维网格中,而不移动所述第一多个寄存器和所述第二多个寄存器内的数据元素,以及
所述硬件处理器核心的执行电路,来根据所述操作码执行所述经解码的指令。
示例2.如示例1所述的装置,其中所述操作码指示出所述硬件处理器核心的执行电路将使得所述第三二维矩阵被从所述第一二维矩阵的行的真子集和所述第二二维矩阵的行的真子集在逻辑上形成来输入到所述处理元件的二维网格中。
示例3.如示例2所述的装置,其中所述单个指令包括识别所述第一二维矩阵的行的真子集或者所述第二二维矩阵的行的真子集的字段。
示例4.如示例3所述的装置,其中所述矩阵操作加速器电路还包括选择电路,该选择电路通过根据所述操作码执行所述经解码的指令而被配置为在逻辑上形成所述第三二维矩阵。
示例5.如示例1所述的装置,其中所述操作码指示出所述硬件处理器核心的执行电路将使得所述第三二维矩阵被从所述第一二维矩阵的列的真子集和所述第二二维矩阵的列的真子集在逻辑上形成来输入到所述处理元件的二维网格中。
示例6.如示例5所述的装置,其中所述单个指令包括识别所述第一二维矩阵的列的真子集或者所述第二二维矩阵的列的真子集的字段。
示例7.如示例6所述的装置,其中所述矩阵操作加速器电路还包括选择电路,该选择电路通过根据所述操作码执行所述经解码的指令而被配置为在逻辑上形成所述第三二维矩阵。
示例8.如示例1所述的装置,其中所述矩阵操作加速器电路还包括选择电路,该选择电路通过根据所述操作码执行所述经解码的指令而被配置为在逻辑上形成所述第三二维矩阵。
示例9.一种方法,包括:
由与矩阵操作加速器电路相耦合的硬件处理器核心的解码器电路将单个指令解码成经解码的指令,所述矩阵操作加速器电路包括处理元件的二维网格、与所述处理元件的二维网格相耦合的表示第一二维矩阵的第一多个寄存器、以及与所述处理元件的二维网格相耦合的表示第二二维矩阵的第二多个寄存器,所述单个指令包括识别所述第一二维矩阵的第一字段、识别所述第二二维矩阵的第二字段、以及操作码,该操作码指示出所述硬件处理器核心的执行电路将使得第三二维矩阵被从所述第一二维矩阵和所述第二二维矩阵在逻辑上形成来输入到所述处理元件的二维网格中,而不移动所述第一多个寄存器和所述第二多个寄存器内的数据元素;并且
由所述硬件处理器核心的执行电路根据所述操作码来执行所述经解码的指令。
示例10.如示例9所述的方法,其中所述操作码指示出所述硬件处理器核心的执行电路将使得所述第三二维矩阵被从所述第一二维矩阵的行的真子集和所述第二二维矩阵的行的真子集在逻辑上形成来输入到所述处理元件的二维网格中。
示例11.如示例10所述的方法,其中所述单个指令包括识别所述第一二维矩阵的行的真子集或者所述第二二维矩阵的行的真子集的字段。
示例12.如示例11所述的方法,其中所述矩阵操作加速器电路还包括选择电路,该选择电路通过根据所述操作码执行所述经解码的指令而被配置为在逻辑上形成所述第三二维矩阵。
示例13.如示例9所述的方法,其中所述操作码指示出所述硬件处理器核心的执行电路将使得所述第三二维矩阵被从所述第一二维矩阵的列的真子集和所述第二二维矩阵的列的真子集在逻辑上形成来输入到所述处理元件的二维网格中。
示例14.如示例13所述的方法,其中所述单个指令包括识别所述第一二维矩阵的列的真子集或者所述第二二维矩阵的列的真子集的字段。
示例15.如示例14所述的方法,其中所述矩阵操作加速器电路还包括选择电路,该选择电路通过根据所述操作码执行所述经解码的指令而被配置为在逻辑上形成所述第三二维矩阵。
示例16.如示例9所述的方法,其中所述矩阵操作加速器电路还包括选择电路,该选择电路通过根据所述操作码执行所述经解码的指令而被配置为在逻辑上形成所述第三二维矩阵。
示例17.一种存储代码的非暂态机器可读介质,所述代码当被机器执行时使得所述机器执行一种方法,该方法包括:
由与矩阵操作加速器电路相耦合的硬件处理器核心的解码器电路将单个指令解码成经解码的指令,所述矩阵操作加速器电路包括处理元件的二维网格、与所述处理元件的二维网格相耦合的表示第一二维矩阵的第一多个寄存器、以及与所述处理元件的二维网格相耦合的表示第二二维矩阵的第二多个寄存器,所述单个指令包括识别所述第一二维矩阵的第一字段、识别所述第二二维矩阵的第二字段、以及操作码,该操作码指示出所述硬件处理器核心的执行电路将使得第三二维矩阵被从所述第一二维矩阵和所述第二二维矩阵在逻辑上形成来输入到所述处理元件的二维网格中,而不移动所述第一多个寄存器和所述第二多个寄存器内的数据元素;并且
由所述硬件处理器核心的执行电路根据所述操作码来执行所述经解码的指令。
示例18.如示例17所述的非暂态机器可读介质,其中所述操作码指示出所述硬件处理器核心的执行电路将使得所述第三二维矩阵被从所述第一二维矩阵的行的真子集和所述第二二维矩阵的行的真子集在逻辑上形成来输入到所述处理元件的二维网格中。
示例19.如示例18所述的非暂态机器可读介质,其中所述单个指令包括识别所述第一二维矩阵的行的真子集或者所述第二二维矩阵的行的真子集的字段。
示例20.如示例19所述的非暂态机器可读介质,其中所述矩阵操作加速器电路还包括选择电路,该选择电路通过根据所述操作码执行所述经解码的指令而被配置为在逻辑上形成所述第三二维矩阵。
示例21.如示例17所述的非暂态机器可读介质,其中所述操作码指示出所述硬件处理器核心的执行电路将使得所述第三二维矩阵被从所述第一二维矩阵的列的真子集和所述第二二维矩阵的列的真子集在逻辑上形成来输入到所述处理元件的二维网格中。
示例22.如示例21所述的非暂态机器可读介质,其中所述单个指令包括识别所述第一二维矩阵的列的真子集或者所述第二二维矩阵的列的真子集的字段。
示例23.如示例22所述的非暂态机器可读介质,其中所述矩阵操作加速器电路还包括选择电路,该选择电路通过根据所述操作码执行所述经解码的指令而被配置为在逻辑上形成所述第三二维矩阵。
示例24.如示例17所述的非暂态机器可读介质,其中所述矩阵操作加速器电路还包括选择电路,该选择电路通过根据所述操作码执行所述经解码的指令而被配置为在逻辑上形成所述第三二维矩阵。
示例25.如示例17所述的非暂态机器可读介质,所述方法还包括在所述解码之前将所述单个指令转化成不同指令集体系结构的一个或多个指令,其中所述不同指令集体系结构的一个或多个指令的执行将在功能上等同于根据所述操作码执行所述经解码的指令。
示例26.一种装置,包括:
矩阵操作加速器电路,其包括:
处理元件的二维网格,
与所述矩阵操作加速器电路相耦合的表示二维(例如,输入)矩阵的多个寄存器,以及
到缓存的耦合;以及
硬件处理器核心,其包括:
向量寄存器,
与所述矩阵操作加速器电路相耦合的所述硬件处理器核心的解码器,来将单个指令解码成经解码的指令,所述单个指令包括识别所述二维矩阵的第一字段和识别所述向量寄存器的第二字段,以及
所述硬件处理器核心的执行电路,来执行所述经解码的指令以使得通过与所述到缓存的耦合分开的所述硬件处理器核心到所述矩阵操作加速器电路的耦合来将一个或多个元素从所述向量寄存器存储到表示所述二维矩阵的所述多个寄存器中。
在另外一个实施例中,一种装置包括存储代码的数据存储设备,所述代码当被硬件处理器执行时使得所述硬件处理器执行本文公开的任何方法。一种装置可如详细描述中所描述。一种方法可如详细描述中所描述。
详细示范性系统、处理器和仿真
本文详述的是执行上述指令的硬件、软件等等的示例。例如,下面描述的是指令执行的细节方面,包括诸如取得、解码、调度、执行、引退等等之类的各种管线阶段。
指令集
指令集可包括一个或多个指令格式。给定的指令格式可定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要在其上执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义为具有该指令格式的字段的不同子集(包括的字段通常是按相同顺序的,但至少一些具有不同的比特位置,因为包括的字段更少)和/或被定义为具有以不同方式被解读的给定字段。从而,ISA的每个指令是利用给定的指令格式来表达的(并且如果定义了的话,以该指令格式的指令模板中的给定一个指令模板来表达)并且包括用于指定操作和操作对象的字段。例如,示范性ADD指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码并且包括操作对象字段来选择操作对象(源1/目的地和源2);并且此ADD指令在指令流中的出现将在选择特定操作对象的操作对象字段中具有特定内容。被称为高级向量扩展(Advanced Vector Extension,AVX)(AVX1和AVX2)并且使用向量扩展(Vector Extension,VEX)编码方案的SIMD扩展的集合已被发布和/或发表(例如,参见64和IA-32体系结构软件开发者手册,2018年11月;并且参见体系结构指令集扩展编程参考,2018年10月)。
示范性指令格式
可按不同的格式来实现本文描述的(一个或多个)指令的实施例。此外,下文详述了示范性系统、体系结构和管线。(一个或多个)指令的实施例可在这种系统、体系结构和管线上被执行,但不限于详述的那些。
通用向量友好指令格式
向量友好指令格式是适合于向量指令的指令格式(例如,有某些特定于向量操作的字段)。虽然描述了其中向量和标量操作两者通过向量友好指令格式受到支持的实施例,但替换实施例只使用向量友好指令格式的向量操作。
图36A-图36B是根据本公开的实施例图示出通用向量友好指令格式及其指令模板的框图。图36A是根据本公开的实施例图示出通用向量友好指令格式及其类别A指令模板的框图;而图36B是根据本公开的实施例图示出通用向量友好指令格式及其类别B指令模板的框图。具体而言,针对通用向量友好指令格式3600定义了类别A和类别B指令模板,这两个指令模板都包括无存储器访问3605指令模板和存储器访问3620指令模板。术语“通用”在向量友好指令格式的情境中指的是该指令格式不被绑定到任何特定的指令集。
虽然将描述其中向量友好指令格式支持以下所列项的本公开的实施例: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字节向量操作对象)。
图36A中的类别A指令模板包括:1)在无存储器访问3605指令模板内,示出了无存储器访问、完全舍入控制型操作3610指令模板和无存储器访问、数据变换型操作3615指令模板;以及2)在存储器访问3620指令模板内,示出了存储器访问、暂态3625指令模板以及存储器访问、非暂态3630指令模板。图36B中的类别B指令模板包括:1)在无存储器访问3605指令模板内,示出了无存储器访问、写入掩码控制、部分舍入控制型操作3612指令模板以及无存储器访问、写入掩码控制、vsize型操作3617指令模板;以及2)在存储器访问3620指令模板内,示出了存储器访问、写入掩码控制3627指令模板。
通用向量友好指令格式3600包括下面按图36A-图36B中所示的顺序列出的以下字段。
格式字段3640—此字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,从而标识出采取向量友好指令格式的指令在指令流中的出现。这样,此字段是可选的,因为它对于只具有通用向量友好指令格式的指令集而言是不需要的。
基本操作字段3642—其内容区分不同的基本操作。
寄存器索引字段3644—其内容直接指定或者通过地址生成指定源和目的操作对象的位置,无论它们在寄存器中还是在存储器中。这些包括充分数目的比特来从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器堆中选择N个寄存器。虽然在一个实施例中N可以是多达三个源和一个目的地寄存器,但替换实施例可支持更多或更少的源和目的地寄存器(例如,可支持多达两个源,其中这些源之一也充当目的地;可支持多达三个源,其中这些源之一也充当目的地;可支持多达两个源和一个目的地)。
修饰字段3646—其内容区分通用向量指令格式中指定存储器访问的指令与那些不指定存储器访问的指令的出现;也就是说,区分无存储器访问3605指令模板与存储器访问3620指令模板。存储器访问操作读取和/或写入存储器层次体系(在一些情况下利用寄存器中的值指定源和/或目的地地址),而非存储器访问操作不读取和/或写入存储器层次体系(例如,源和目的地是寄存器)。虽然在一个实施例中这个字段也在执行存储器地址计算的三种不同方式之间进行选择,但替换实施例可支持更多、更少或不同的方式来执行存储器地址计算。
增强操作字段3650—其内容区分除了基本操作以外还要执行各种不同操作中的哪一种。此字段是依情境而定的。在本公开的一个实施例中,此字段被划分成类别字段3668、阿尔法字段3652、以及贝塔字段3654。增强操作字段3650允许了在单个指令而不是2、3或4个指令中执行共同的操作群组。
缩放比例字段3660—其内容允许了缩放索引字段的内容以进行存储器地址生成(例如,对于使用2缩放比例*索引+基址的地址生成)。
位移字段3662A—其内容被用作存储器地址生成的一部分(例如,对于使用2缩放比例*索引+基址+位移的地址生成)。
位移因子字段3662B(注意,将位移字段3662A并列在位移因子字段3662B的正上方表明一者或另一者被使用)—其内容被用作地址生成的一部分;其指定要被存储器访问的大小(N)缩放的位移因子—其中N是存储器访问中的字节的数目(例如,对于使用2缩放比例*索引+基址+经缩放的位移的地址生成)。冗余的低阶比特被忽略,并且因此,位移因子字段的内容被乘以存储器操作对象总大小(N)以便生成要被用于计算有效地址的最终位移。N的值由处理器硬件在运行时基于完整操作码字段3674(本文中稍后描述)和数据操纵字段3654C来确定。位移字段3662A和位移因子字段3662B是可选的,因为它们不被用于无存储器访问3605指令模板,和/或不同的实施例可只实现两者中的一者或者两者都不实现。
数据元素宽度字段3664—其内容区分若干个数据元素宽度中的哪一个要被使用(在一些实施例中是对于所有指令;在其他实施例中只对于指令中的一些)。此字段是可选的,因为在只有一个数据元素宽度受到支持和/或数据元素宽度是利用操作码的某个方面来受到支持的情况下,则不需要该字段。
写入掩码字段3670—其内容基于每数据元素位置来控制目的地向量操作对象中的该数据元素位置是否反映基本操作和增强操作的结果。类别A指令模板支持合并-写入掩蔽,而类别B指令模板支持合并-写入掩蔽和归零-写入掩蔽两者。当合并时,向量掩码允许了目的地中的任何元素集合被保护免于在(由基本操作和增强操作指定的)任何操作的执行期间的更新;在其他的一个实施例中,保留目的地的相应的掩码比特具有0的每个元素的旧值。与之不同,当归零时,向量掩码允许了目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被归零;在一个实施例中,目的地的元素在相应的掩码比特具有0值时被设置到0。这个功能的子集是控制被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不是必须要连续。从而,写入掩码字段3670允许了部分向量操作,包括加载、存储、算术、逻辑,等等。虽然描述了其中写入掩码字段3670的内容选择若干个写入掩码寄存器中包含要使用的写入掩码的那一个(并且从而写入掩码字段3670的内容间接识别要执行的该掩蔽)的本公开实施例,但替换实施例作为替代或附加允许了掩码写入字段3670的内容直接指定要执行的掩蔽。
立即数字段3672—其内容允许对立即数(immediate)的指定。此字段是可选的,因为在不支持立即数的通用向量友好格式的实现方式中该字段不存在并且在不使用立即数的指令中该字段不存在。
类别字段3668—其内容区分指令的不同类别。参考图36A-图36B,此字段的内容在类别A和类别B指令之间进行选择。在图36A-图36B中,圆角方形用于指示特定的值存在于一字段中(例如,图36A-图36B中分别用于类别字段3668的类别A 3668A和类别B 3668B)。
类别A的指令模板
在类别A的非存储器访问3605指令模板的情况下,阿尔法字段3652被解读为RS字段3652A,其内容区分不同的增强操作类型中的哪一个要被执行(例如,对于无存储器访问舍入型操作3610和无存储器访问数据变换型操作3615指令模板分别指定舍入3652A.1和数据变换3652A.2),而贝塔字段3654区分指定类型的操作中的哪一个要被执行。在无存储器访问3605指令模板中,缩放比例字段3660、位移字段3662A和位移缩放比例字段3662B不存在。
无存储器访问指令模板—完全舍入控制型操作
在无存储器访问完全舍入控制型操作3610指令模板中,贝塔字段3654被解读为舍入控制字段3654A,其(一个或多个)内容提供静态舍入。虽然在本公开的描述实施例中舍入控制字段3654A包括抑制所有浮点异常(suppress all floating point exceptions,SAE)字段3656和舍入操作控制字段3658,但替换实施例可支持可将这两个概念都编码到同一字段中或者可只具有这些概念/字段中的一者或另一者(例如,可以只具有舍入操作控制字段3658)。
SAE字段3656—其内容区分是否禁用异常事件报告;当SAE字段3656的内容指示抑制被启用时,给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序。
舍入操作控制字段3658—其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零舍入和朝最近舍入)。从而,舍入操作控制字段3658允许了基于每指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段3650的内容推翻该寄存器值。
无存储器访问指令模板—数据变换型操作
在无存储器访问数据变换型操作3615指令模板中,贝塔字段3654被解读为数据变换字段3654B,其内容区分若干个数据变换中的哪一个要被执行(例如,无数据变换、调配、广播)。
在类别A的存储器访问3620指令模板的情况下,阿尔法字段3652被解读为逐出提示字段3652B,其内容区分要使用逐出提示中的哪一个(在图36A中,对于存储器访问暂态3625指令模板和存储器访问非暂态3630指令模板分别指定暂态3652B.1和非暂态3652B.2),而贝塔字段3654被解读为数据操纵字段3654C,其内容区分若干个数据操纵操作(也称为基元)中的哪一个要被执行(例如,无操纵;广播;源的向上转换;以及目的地的向下转换)。存储器访问3620指令模板包括缩放比例字段3660,并且可选地包括位移字段3662A或者位移缩放比例字段3662B。
向量存储器指令执行从存储器的向量加载和向存储器的向量存储,带有转换支持。与常规向量指令一样,向量存储器指令以按数据元素的方式从/向存储器传送数据,其中被实际传送的元素由向量掩码的内容来规定,该向量掩码被选择作为写入掩码。
存储器访问指令模板—暂态
暂态数据是可能很快就被再使用、快到足以受益于缓存的数据。然而,这是一种提示,并且不同的处理器可按不同的方式实现它,包括完全忽略该提示。
存储器访问指令模板—非暂态
非暂态数据是这样的数据:该数据不太可能很快被再使用、快到足以受益于在第1级缓存中进行缓存,而应当被优先逐出。然而,这是一种提示,并且不同的处理器可按不同的方式实现它,包括完全忽略该提示。
类别B的指令模板
在类别B的指令模板的情况下,阿尔法字段3652被解读为写入掩码控制(Z)字段3652C,其内容区分由写入掩码字段3670控制的写入掩蔽应当是合并还是归零。
在类别B的非存储器访问3605指令模板的情况下,贝塔字段3654的一部分被解读为RL字段3657A,其内容区分不同增强操作类型中的哪一个要被执行(例如,对于无存储器访问、写入掩码控制、部分舍入控制型操作3612指令模板和无存储器访问、写入掩码控制、VSIZE型操作3617指令模板分别指定舍入3657A.1和向量长度(VSIZE)3657A.2),而贝塔字段3654的其余部分区分所指定类型的操作中的哪一个要被执行。在无存储器访问3605指令模板中,缩放比例字段3660、位移字段3662A和位移缩放比例字段3662B不存在。
在无存储器访问、写入掩码控制、部分舍入控制型操作3610指令模板中,贝塔字段3654的其余部分被解读为舍入操作字段3659A并且异常事件报告被禁用(给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序)。
舍入操作控制字段3659A—正如舍入操作控制字段3658一样,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零舍入和朝最近舍入)。从而,舍入操作控制字段3659A允许了基于每指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段3650的内容推翻该寄存器值。
在无存储器访问、写入掩码控制、VSIZE型操作3617指令模板中,贝塔字段3654的其余部分被解读为向量长度字段3659B,其内容区分要在若干个数据向量长度中的哪一个上执行(例如,128、256或512字节)。
在类别B的存储器访问3620指令模板的情况下,贝塔字段3654的一部分被解读为广播字段3657B,其内容区分是否要执行广播型数据操纵操作,而贝塔字段3654的其余部分被解读为向量长度字段3659B。存储器访问3620指令模板包括缩放比例字段3660,并且可选地包括位移字段3662A或者位移缩放比例字段3662B。
关于通用向量友好指令格式3600,完整操作码字段3674被示为包括格式字段3640、基本操作字段3642、以及数据元素宽度字段3664。虽然示出了其中完整操作码字段3674包括所有这些字段的一个实施例,但完整操作码字段3674在不支持所有这些字段的实施例中包括比所有这些字段更少的字段。完整操作码字段3674提供操作代码(操作码)。
增强操作字段3650、数据元素宽度字段3664以及写入掩码字段3670允许了这些特征在通用向量友好指令格式中基于每指令被指定。
写入掩码字段和数据元素宽度字段的组合创建了类型化指令,因为它们允许基于不同的数据元素宽度来应用掩码。
在类别A和类别B内找到的各种指令模板在不同的情形中是有益的。在本公开的一些实施例中,不同的处理器或处理器内的不同核心可只支持类别A、只支持类别B、或者支持两个类别。例如,打算用于通用计算的高性能通用乱序核心可以只支持类别B,打算主要用于图形和/或科学(吞吐量)计算的核心可以只支持类别A,并且打算用于两者的核心可以支持这两者(当然,具有来自两个类别的模板和指令的某种混合、但不具有来自两个类别的所有模板和指令的核心是在本公开的范围内的)。另外,单个处理器可包括多个核心,所有这些核心支持相同类别或者其中不同的核心支持不同的类别。例如,在具有分开的图形和通用核心的处理器中,打算主要用于图形和/或科学计算的图形核心之一可以只支持类别A,而通用核心中的一个或多个可以是只支持类别B的打算用于通用计算的具有乱序执行和寄存器重命名的高性能通用核心。不具有单独的图形核心的另一处理器可包括支持类别A和类别B两者的一个或多个通用有序或乱序核心。当然,在本公开的不同实施例中,来自一个类别的特征也可被实现在另一类别中。以高级别语言编写的程序将被置于(例如,被及时编译或静态编译到)各种不同的可执行形式中,包括:1)只具有受到目标处理器支持的(一个或多个)类别的指令以便执行的形式;或者2)具有利用所有类别的指令的不同组合编写的替换例程并且具有控制流程代码的形式,该控制流程代码基于当前在执行代码的处理器所支持的指令来选择要执行的例程。
示范性特定向量友好指令格式
图37是根据本公开的实施例图示出示范性特定向量友好指令格式的框图。图37示出了在如下意义上特定的特定向量友好指令格式3700:其指定字段的位置、大小、解读和顺序,以及这些字段中的一些的值。特定向量友好指令格式3700可被用于扩展x86指令集,从而字段中的一些与现有的x86指令集及其扩展(例如,AVX)中使用的那些相似或相同。此格式与带有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、MOD R/M字段、SIB字段、位移字段以及立即数字段保持一致。图示出了来自图37的字段所映射到的来自图36的字段。
应当理解,虽然出于说明目的,在通用向量友好指令格式3600的情境中参考特定向量友好指令格式3700描述了本公开的实施例,但除非有声明,否则本公开不限于特定向量友好指令格式3700。例如,通用向量友好指令格式3600对于各种字段设想了各种可能的大小,而特定向量友好指令格式3700被示为具有特定大小的字段。作为具体示例,虽然数据元素宽度字段3664在特定向量友好指令格式3700中被示为一比特字段,但本公开不限于此(也就是说,通用向量友好指令格式3600设想了数据元素宽度字段3664的其他大小)。
通用向量友好指令格式3600包括下面按图37A中所示的顺序列出的以下字段。
EVEX前缀(字节0-3)3702—被编码为四字节形式。
格式字段3640(EVEX字节0,比特[7:0])—第一字节(EVEX字节0)是格式字段3640并且其包含0x62(在本公开的一个实施例中用于区分向量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供特定能力的若干个比特字段。
REX字段3705(EVEX字节1,比特[7-5])—由EVEX.R比特字段(EVEX字节1,比特[7]–R)、EVEX.X比特字段(EVEX字节1,比特[6]–X)和3657BEX字节1,比特[5]–B)构成。EVEX.R、EVEX.X和EVEX.B比特字段提供与相应的VEX比特字段相同的功能,并且被利用反码(1scomplement)形式来编码,即,ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其他字段如本领域中已知的那样对寄存器索引的较低三个比特进行编码(rrr、xxx和bbb),从而可通过添加EVEX.R、EVEX.X和EVEX.B来形成Rrrr、Xxxx和Bbbb。
REX'字段3610—这是REX'字段3610的第一部分并且是用于对扩展32寄存器集合的高16或低16进行编码的EVEX.R'比特字段(EVEX字节1,比特[4]-R')。在本公开的一个实施例中,这个比特以及如下所示的其他比特被以比特反转格式来存储以与BOUND指令相区分(在公知的x8632比特模式中),BOUND指令的真实操作码字节是62,但不在MOD R/M字段(下文描述)中接受MOD字段中的11的值;本公开的替换实施例不以反转格式存储这个比特和下面指示的其他比特。值1被用于对低16寄存器进行编码。换言之,R'Rrrr是通过组合EVEX.R'、EVEX.R和来自其他字段的其他RRR来形成的。
操作码映射字段3715(EVEX字节1,比特[3:0]–mmmm)—其内容编码了所暗示的前导操作码字节(0F、0F 38、或0F 3)。
数据元素宽度字段3664(EVEX字节2,比特[7]–W)—由符号EVEX.W表示。EVEX.W被用于定义数据类型的粒度(大小)(32比特数据元素或64比特数据元素)。
EVEX.vvvv 3720(EVEX字节2,比特[6:3]-vvvv)—EVEX.vvvv的作用可包括以下项:1)EVEX.vvvv编码了以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)EVEX.vvvv编码了对于某些向量移位以反码形式指定的目的地寄存器操作对象;或者3)EVEX.vvvv不编码任何操作对象,该字段被预留并且应当包含1111b。从而,EVEX.vvvv字段3720编码了以反转(反码)形式存储的第一源寄存器指定符的4个低阶比特。取决于指令,一额外的不同EVEX比特字段被用于将指定符大小扩展到32个寄存器。
EVEX.U 3668类别字段(EVEX字节2,比特[2]-U)—如果EVEX.U=0,则其指示类别A或EVEX.U0;如果EVEX.U=1,则其指示类别B或者EVEX.U1。
前缀编码字段3725(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前缀编码,从而不要求扩展。
阿尔法字段3652(EVEX字节3,比特[7]–EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写入掩码控制、以及EVEX.N;也用α来图示)—如前所述,此字段是依情境而定的。
贝塔字段3654(EVEX字节3,比特[6:4]–SSS;也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ来图示)—如前所述,此字段是依情境而定的。
REX'字段3610—这是REX'字段的剩余部分并且是可用于对扩展32寄存器集合的高16或低16进行编码的EVEX.V'比特字段(EVEX字节3,比特[3]-V')。此比特被以比特反转格式来存储。值1被用于对低16寄存器进行编码。换言之,V'VVVV是通过组合EVEX.V'、EVEX.vvvv来形成的。
写入掩码字段3670(EVEX字节3,比特[2:0]-kkk)—其内容指定如前所述的写入掩码寄存器中的寄存器的索引。在本公开的一个实施例中,特定值EVEX.kkk=000具有暗示对于特定指令不使用写入掩码的特殊行为(这可通过多种方式来实现,包括使用被硬连线到全一的写入掩码或者绕过掩蔽硬件的硬件)。
真实操作码字段3730(字节4)也被称为操作码字节。在这个字段中指定操作码的一部分。
MOD R/M字段3740(字节5)包括MOD字段3742、Reg字段3744、以及R/M字段3746。如前所述,MOD字段3742的内容区分存储器访问和非存储器访问操作。Reg字段3744的作用可被总结成两个情形:编码目的地寄存器操作对象或者源寄存器操作对象,或者被作为操作码扩展来对待,而不被用于编码任何指令操作对象。R/M字段3746的作用可包括以下项:编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。
缩放比例、索引、基数(Scale,Index,Base,SIB)字节(字节6)—如前所述,缩放比例字段3650的内容被用于存储器地址生成。SIB.xxx3754和SIB.bbb 3756—先前已关于寄存器索引Xxxx和Bbbb提及了这些字段的内容。
位移字段3662A(字节7-10)—当MOD字段3742包含10时,字节7-10是位移字段3662A,并且其工作方式与传统32比特位移(disp32)相同并且以字节粒度工作。
位移因子字段3662B(字节7)—当MOD字段3742包含01时,字节7是位移因子字段3662B。此字段的位置与传统x86指令集8比特位移(disp8)的相同,其以字节粒度工作。由于disp8被符号扩展,所以其只能在-128和127字节偏移量之间寻址;就64字节缓存线而言,disp8使用8个比特,这8个比特可被设置到仅四个真正有用的值-128、-64、0和64;由于经常需要更大的范围,所以使用disp32;然而,disp32要求4个字节。与disp8和disp32不同,位移因子字段3662B是对disp8的重解读;当使用位移因子字段3662B时,实际位移由位移因子字段的内容乘以存储器操作对象访问的大小(N)来决定。这种类型的位移被称为disp8*N。这减小了平均指令长度(单个字节被用于位移,但具有大得多的范围)。这种压缩的位移是基于如下假设的:有效位移是存储器访问的粒度的倍数,并且因此,地址偏移量的冗余低阶比特不需要被编码。换言之,位移因子字段3662B代替了传统x86指令集8比特位移。从而,位移因子字段3662B被按与x86指令集8比特位移相同的方式来编码(因此在ModRM/SIB编码规则中没有变化),唯一例外是disp8被超载到disp8*N。换言之,在编码规则或编码长度方面没有变化,而只在硬件对位移值的解读方面有变化(硬件需要按存储器操作对象的大小来缩放位移以获得按字节的地址偏移量)。立即数字段3672如前所述那样操作。
完整操作码字段
图37B是根据本公开的一个实施例图示出构成完整操作码字段3674的特定向量友好指令格式3700的字段的框图。具体而言,完整操作码字段3674包括格式字段3640、基本操作字段3642、以及数据元素宽度(W)字段3664。基本操作字段3642包括前缀编码字段3725、操作码映射字段3715、以及真实操作码字段3730。
寄存器索引字段
图37C是根据本公开的一个实施例图示出构成寄存器索引字段3644的特定向量友好指令格式3700的字段的框图。具体而言,寄存器索引字段3644包括REX字段3705、REX'字段3710、MODR/M.reg字段3744、MODR/M.r/m字段3746、VVVV字段3720、xxx字段3754、以及bbb字段3756。
增强操作字段
图37D是根据本公开的一个实施例图示出构成增强操作字段3650的特定向量友好指令格式3700的字段的框图。当类别(U)字段3668包含0时,其表示EVEX.U0(类别A 3668A);当其包含1时,其表示EVEX.U1(类别B 3668B)。当U=0并且MOD字段3742包含11时(表示无存储器访问操作),阿尔法字段3652(EVEX字节3,比特[7]–EH)被解读为rs字段3652A。当rs字段3652A包含1时(舍入3652A.1),贝塔字段3654(EVEX字节3,比特[6:4]-SSS)被解读为舍入控制字段3654A。舍入控制字段3654A包括一比特SAE字段3656和两比特舍入操作字段3658。当rs字段3652A包含0时(数据变换3652A.2),贝塔字段3654(EVEX字节3,比特[6:4]-SSS)被解读为三比特数据变换字段3654B。当U=0并且MOD字段3742包含00、01或10时(表示存储器访问操作),阿尔法字段3652(EVEX字节3,比特[7]–EH)被解读为逐出提示(eviction hint,EH)字段3652B并且贝塔字段3654(EVEX字节3,比特[6:4]-SSS)被解读为三比特数据操纵字段3654C。
当U=1时,阿尔法字段3652(EVEX字节3,比特[7]–EH)被解读为写入掩码控制(Z)字段3652C。当U=1并且MOD字段3742包含11时(表示无存储器访问操作),贝塔字段3654的一部分(EVEX字节3,比特[4]–S0)被解读为RL字段3657A;当其包含1(舍入3657A.1)时,贝塔字段3654的其余部分(EVEX字节3,比特[6-5]-S2-1)被解读为舍入操作字段3659A,而当RL字段3657A包含0(VSIZE 3657.A2)时,贝塔字段3654的其余部分(EVEX字节3,比特[6-5]-S2-1)被解读为向量长度字段3659B(EVEX字节3,比特[6-5]-L1-0)。当U=1并且MOD字段3742包含00、01或10时(表示存储器访问操作),贝塔字段3654(EVEX字节3,比特[6:4]-SSS)被解读为向量长度字段3659B(EVEX字节3,比特[6-5]-L1-0)和广播字段3657B(EVEX字节3,比特[4]-B)。
示范性寄存器体系结构
图38是根据本公开的一个实施例的寄存器体系结构3800的框图。在图示的实施例中,存在32个512比特宽的向量寄存器3810;这些寄存器被称为zmm0至zmm31。低16zmm寄存器的低阶256比特被覆盖在寄存器ymm0-16上。低16zmm寄存器的低阶128比特(ymm寄存器的低阶128比特)被覆盖在寄存器xmm0-15上。特定向量友好指令格式3700如以下表格中所示在这些覆盖的寄存器堆上进行操作。
换言之,向量长度字段3659B在最大长度和一个或多个其他更短的长度之间做出选择,其中每个这种更短长度是前一长度的一半长度;并且没有向量长度字段3659B的指令模板按最大向量长度进行操作。另外,在一个实施例中,特定向量友好指令格式3700的类别B指令模板对紧缩或标量单/双精度浮点数据和紧缩或标量整数数据进行操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;更高阶数据元素位置或者被保持与其在该指令之前相同,或者被归零,这取决于实施例。
写入掩码寄存器3815—在图示的实施例中,有8个写入掩码寄存器(k0至k7),每个的大小是64比特。在替换实施例中,写入掩码寄存器3815的大小是16比特。如前所述,在本公开的一个实施例中,向量掩码寄存器k0可被用作写入掩码;当通常将会指示k0的编码被用于写入掩码时,其选择硬连线的写入掩码0xFFFF,这实际上针对该指令禁用了写入掩蔽。
通用寄存器3825—在图示的实施例中,有十六个64比特通用寄存器,它们与现有的x86寻址模式一起被用于寻址存储器操作对象。这些寄存器被用名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8至R15来引用。
标量浮点堆栈寄存器堆(x87堆栈)3845(在其上化名了MMX紧缩整数平坦寄存器堆3850)—在图示的实施例中,x87堆栈是用于利用x87指令集扩展在32/64/80比特浮点数据上执行标量浮点操作的八元素堆栈;而MMX寄存器被用于在64比特紧缩整数数据上执行操作,以及针对在MMX和XMM寄存器之间执行的一些操作保持操作对象。
本公开的替换实施例可以使用更宽或更窄的寄存器。此外,本公开的替换实施例可以使用更多、更少或不同的寄存器堆和寄存器。
示范性核心体系结构、处理器和计算机体系结构
可以按不同的方式、为了不同的目的、在不同的处理器中实现处理器核心。例如,这种核心的实现方式可包括:1)打算用于通用计算的通用有序核心;2)打算用于通用计算的高性能通用乱序核心;3)主要打算用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可包括:1)包括打算用于通用计算的一个或多个通用有序核心和/或打算用于通用计算的一个或多个通用乱序核心的CPU;以及2)包括主要打算用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器导致不同的计算机系统体系结构,这些体系结构可包括:1)协处理器在与CPU分开的芯片上;2)协处理器在与CPU相同的封装中、分开的管芯上;3)协处理器与CPU在同一管芯上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可在同一管芯上包括所描述的CPU(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)、上述的协处理器以及额外的功能。接下来描述示范性核心体系结构,然后是对示范性处理器和计算机体系结构的描述。
示范性核心体系结构
有序和乱序核心框图
图39A是根据本公开的实施例图示出示范性有序管线和示范性寄存器重命名、乱序发出/执行管线两者的框图。图39B是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、乱序发出/执行体系结构核心两者的框图。图39A-图39B中的实线框图示了有序管线和有序核心,而虚线框的可选添加图示了寄存器重命名、乱序发出/执行管线和核心。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图39A中,处理器管线3900包括取得阶段3902、长度解码阶段3904、解码阶段3906、分配阶段3908、重命名阶段3910、调度(也称为调遣或发出)阶段3912、寄存器读取/存储器读取阶段3914、执行阶段3916、写回/存储器写入阶段3918、异常处理阶段3922、以及提交阶段3924。
图39B示出了处理器核心3990包括耦合到执行引擎单元3950的前端单元3930,并且两者都耦合到存储器单元3970。核心3990可以是精简指令集计算(reduced instructionset computing,RISC)核心、复杂指令集计算(complex instruction set computing,CISC)核心、超长指令字(very long instruction word,VLIW)核心、或者混合或替换核心类型。作为另外一个选项,核心3990可以是专用核心,例如,网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purpose computing graphics processingunit,GPGPU)核心、图形核心,等等。
前端单元3930包括分支预测单元3932,其耦合到指令缓存单元3934,指令缓存单元3934耦合到指令转化后备缓冲器(translation lookaside buffer,TLB)3936,指令TLB3936耦合到指令取得单元3938,指令取得单元3938耦合到解码单元3940。解码单元3940(例如,解码电路)可对指令(例如,宏指令)解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。可利用各种不同的机制来实现解码单元3940。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(programmable logic array,PLA)、微代码只读存储器(read only memory,ROM),等等。在一个实施例中,核心3990包括微代码ROM或其他介质,其为某些宏指令存储微代码(例如,在解码单元3940中或者以其他方式在前端单元3930内)。解码单元3940耦合到执行引擎单元3950中的重命名/分配器单元3952。
执行引擎单元3950包括重命名/分配器单元3952,其耦合到引退单元3954和一组一个或多个调度器单元3956。(一个或多个)调度器单元3956表示任何数目的不同调度器,包括预留站、中央指令窗口,等等。(一个或多个)调度器单元3956耦合到(一个或多个)物理寄存器堆单元3958。物理寄存器堆单元3958中的每一者表示一个或多个物理寄存器堆,这些物理寄存器堆中的不同物理寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针),等等。在一个实施例中,物理寄存器堆单元3958包括向量寄存器单元、写入掩码寄存器单元、以及标量寄存器单元。这些寄存器单元可提供体系结构式向量寄存器、向量掩码寄存器、以及通用寄存器。(一个或多个)物理寄存器堆单元3958与引退单元3954重叠以说明可用来实现寄存器重命名和乱序执行的各种方式(例如,利用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器堆;利用(一个或多个)未来文件、(一个或多个)历史缓冲器、以及(一个或多个)引退寄存器堆;利用寄存器图谱和寄存器的池;等等)。引退单元3954和(一个或多个)物理寄存器堆单元3958耦合到(一个或多个)执行集群3960。(一个或多个)执行集群3960包括一组一个或多个执行单元3962(例如,执行电路)和一组一个或多个存储器访问单元3964。执行单元3962可对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可包括专用于特定功能或功能集合的若干个执行单元,但其他实施例可只包括一个执行单元或者全部执行所有功能的多个执行单元。(一个或多个)调度器单元3956、(一个或多个)物理寄存器堆单元3958、以及(一个或多个)执行集群3960被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管线和/或存储器访问管线,它们各自具有其自己的调度器单元、物理寄存器堆单元和/或执行集群—并且在单独的存储器访问管线的情况下,实现了某些实施例,其中只有此管线的执行集群具有(一个或多个)存储器访问单元3964)。还应当理解,在使用分开管线的情况下,这些管线中的一个或多个可以是乱序发出/执行,并且其余的是有序的。
存储器访问单元3964的集合耦合到存储器单元3970,存储器单元3970包括数据TLB单元3972,数据TLB单元3972耦合到数据缓存单元3974,数据缓存单元3974耦合到第2级(L2)缓存单元3976。在一个示范性实施例中,存储器访问单元3964可包括加载单元、存储地址单元、以及存储数据单元,它们中的每一者耦合到存储器单元3970中的数据TLB单元3972。指令缓存单元3934进一步耦合到存储器单元3970中的第2级(L2)缓存单元3976。L2缓存单元3976耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。
作为示例,示范性寄存器重命名、乱序发出/执行核心体系结构可实现管线3900如下:1)指令取得3938执行取得和长度解码阶段3902和3904;2)解码单元3940执行解码阶段3906;3)重命名/分配器单元3952执行分配阶段3908和重命名阶段3910;4)(一个或多个)调度器单元3956执行调度阶段3912;5)(一个或多个)物理寄存器堆单元3958和存储器单元3970执行寄存器读取/存储器读取阶段3914;执行集群3960执行执行阶段3916;6)存储器单元3970和(一个或多个)物理寄存器堆单元3958执行写回/存储器写入阶段3918;7)在异常处理阶段3922中可涉及各种单元;并且8)引退单元3954和(一个或多个)物理寄存器堆单元3958执行提交阶段3924。
核心3990可支持一个或多个指令集(例如,x86指令集(带有已随着较新版本添加的一些扩展);加州森尼维尔市的MIPS技术公司的MIPS指令集;加州森尼维尔市的ARM控股公司的ARM指令集(带有可选的额外扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核心3990包括逻辑来支持紧缩数据指令集扩展(例如,AVX1、AVX2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。
应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按多种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心为该物理核心在同时进行多线程处理的每个线程提供逻辑核心),或者这些的组合(例如,时间切片式取得和解码,然后是同时多线程处理,例如像Hyper-threading技术中那样)。
虽然是在乱序执行的情境中描述寄存器重命名的,但应当理解,寄存器重命名可被用在有序体系结构中。虽然处理器的图示实施例还包括分开的指令和数据缓存单元3934/3974和共享的L2缓存单元3976,但替换实施例可针对指令和数据两者具有单个内部缓存,例如,第1级(L1)内部缓存或者多级别的内部缓存。在一些实施例中,系统可包括内部缓存与在核心和/或处理器外部的外部缓存的组合。或者,所有缓存可在核心和/或处理器外部。
具体示范性有序核心体系结构
图40A-图40B图示出更具体的示范性有序核心体系结构的框图,该核心将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核心)之一。逻辑块通过高带宽互连网络(例如,环状网络)与某些固定功能逻辑、存储器I/O接口和其他必要I/O逻辑进行通信,这取决于应用。
图40A是根据本公开的实施例的单个处理器核心及其与片上互连网络4002以及与第2级(L2)缓存的其本地子集4004的连接的框图。在一个实施例中,指令解码单元4000支持具有紧缩数据指令集扩展的x86指令集。L1缓存4006允许低时延访问以将存储器缓存到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元4008和向量单元4010使用分开的寄存器集合(分别是标量寄存器4012和向量寄存器4014)并且在它们之间传送的数据被写入到存储器,然后被从第1级(L1)缓存4006读回,但本公开的替换实施例可使用不同的方案(例如,使用单个寄存器集合或者包括允许数据在两个寄存器堆之间传送而不被写入和读回的通信路径)。
L2缓存的本地子集4004是全局L2缓存的一部分,全局L2缓存被划分成单独的本地子集,每个处理器核心有一个。每个处理器核心具有到其自己的L2缓存本地子集4004的直接访问路径。处理器核心所读取的数据被存储在其L2缓存子集4004中并且可被迅速访问,所述访问与其他处理器核心访问其自己的本地L2缓存子集并行进行。处理器核心所写入的数据被存储在其自己的L2缓存子集4004中并且在必要时被从其他子集冲刷出。环状网络确保了共享数据的一致性。环状网络是双向的,以允许诸如处理器核心、L2缓存和其他逻辑块之类的代理在芯片内与彼此通信。每个环状数据路径在每方向上是1012比特宽的。
图40B是根据本公开的实施例的图40A中的处理器核心的一部分的扩展视图。图40B包括L1缓存4004的L1数据缓存4006A部分,以及关于向量单元4010和向量寄存器4014的更多细节。具体而言,向量单元4010是16宽的向量处理单元(vector processing unit,VPU)(参见16宽ALU4028),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。VPU支持利用调配单元4020调配寄存器输入,利用数值转换单元4022A-B进行的数值转换,以及利用复制单元4024对存储器输入进行的复制。写入掩码寄存器4026允许断言结果向量写入。
图41是根据本公开的实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器4100的框图。图41中的实线框图示了具有单个核心4102A、系统代理4110和一组一个或多个总线控制器单元4116的处理器4100,而虚线框的可选添加图示了具有多个核心4102A-N、系统代理单元4110中的一组一个或多个集成存储器控制单元4114和专用逻辑4108的替换处理器4100。
从而,处理器4100的不同实现方式可包括:1)其中专用逻辑4108是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心),并且核心4102A-N是一个或多个通用核心(例如,通用有序核心、通用乱序核心、或者两者的组合)的CPU;2)其中核心4102A-N是大量的主要打算用于图形和/或科学(吞吐量)的专用核心的协处理器;以及3)其中核心4102A-N是大量的通用有序核心的协处理器。从而,处理器4100可以是通用处理器、协处理器或专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核(many integrated core,MIC)协处理器(包括30个或更多个核心)、嵌入式处理器,等等。处理器可被实现在一个或多个芯片上。处理器4100可以是一个或多个衬底的一部分和/或可利用若干个工艺技术中的任何一者被实现在一个或多个衬底上,这些技术例如是BiCMOS、CMOS或NMOS。
存储器层次体系包括核心内的一级或多级缓存、一组或一个或多个共享缓存单元4106、以及与该组集成存储器控制器单元4114相耦合的外部存储器(未示出)。该组共享缓存单元4106可包括一个或多个中间级别缓存(例如第2级(L2)、第3级(L3)、第4级(L4)或者其他级别的缓存),最后一级缓存(last level cache,LLC),和/或这些的组合。虽然在一个实施例中基于环的互连单元4112互连集成图形逻辑4108、该组共享缓存单元4106以及系统代理单元4110/(一个或多个)集成存储器控制器单元4114,但替换实施例也可使用任何数目的公知技术来互连这种单元。在一个实施例中,在一个或多个缓存单元4106和核心4102A-N之间维持一致性。
在一些实施例中,核心4102A-N中的一个或多个能够进行多线程处理。系统代理4110包括协调和操作核心4102A-N的那些组件。系统代理单元4110可包括例如功率控制单元(power control unit,PCU)和显示单元。PCU可以是或者可以包括对核心4102A-N和集成图形逻辑4108的功率状态进行调节所需要的逻辑和组件。显示单元用于驱动一个或多个在外部连接的显示器。
核心4102A-N就体系结构指令集而言可以是同构的或者异构的;也就是说,核心4102A-N中的两个或更多个可能够执行同一指令集,而其他的核心可能够只执行该指令集的子集或者不同的指令集。
示范性计算机体系结构
图42-图45是示范性计算机体系结构的框图。本领域中已知的用于膝上型电脑、桌面型电脑、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(digital signal processor,DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、以及各种其他电子设备的其他系统设计和配置,也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般是适当的。
现在参考图42,其中示出了根据本公开的一个实施例的系统4200的框图。系统4200可包括一个或多个处理器4210、4215,它们耦合到控制器中枢4220。在一个实施例中,控制器中枢4220包括图形存储器控制器中枢(graphics memory controller hub,GMCH)4290和输入/输出中枢(Input/Output Hub,IOH)4250(它们可在分开的芯片上);GMCH 4290包括与存储器4240和协处理器4245耦合的存储器和图形控制器;IOH4250将输入/输出(I/O)设备4260耦合到GMCH 4290。或者,存储器和图形控制器中的一者或两者被集成在处理器内(如本文所述),存储器4240和协处理器4245直接耦合到处理器4210,并且控制器中枢4220与IOH 4250在单个芯片中。存储器4240可包括例如矩阵加速代码4240A,其存储当被执行时使得处理器执行本公开的任何方法的代码。
额外的处理器4215的可选性在图42中用虚线表示。每个处理器4210、4215可包括本文描述的处理核心中的一个或多个并且可以是处理器4100的某个版本。
存储器4240可例如是动态随机访问存储器(dynamic random access memory,DRAM)、相变存储器(phase change memory,PCM)、或者两者的组合。对于至少一个实施例,控制器中枢4220经由多点分支总线(例如前端总线(frontside bus,FSB))、点到点接口(例如Quickpath Interconnect(QPI))或者类似的连接4295与(一个或多个)处理器4210、4215进行通信。
在一个实施例中,协处理器4245是专用处理器,例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个实施例中,控制器中枢4220可包括集成的图形加速器。
在物理资源4210、4215之间,就包括体系结构特性、微体系结构特性、热特性、功率消耗特性等等在内的一系列价值度量而言,可以有各种差异。
在一个实施例中,处理器4210执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器4210将这些协处理器指令识别为应当由附接的协处理器4245执行的类型。因此,处理器4210在协处理器总线或其他互连上向协处理器4245发出这些协处理器指令(或者表示协处理器指令的控制信号)。(一个或多个)协处理器4245接受并且执行接收到的协处理器指令。
现在参考图43,其中示出了根据本公开的实施例的第一更具体示范性系统4300的框图。如图43所示,多处理器系统4300是点到点互连系统,并且包括经由点到点互连4350耦合的第一处理器4370和第二处理器4380。处理器4370和4380中的每一者可以是处理器4100的某个版本。在本公开的一个实施例中,处理器4370和4380分别是处理器4210和4215,而协处理器4338是协处理器4245。在另一实施例中,处理器4370和4380分别是处理器4210和协处理器4245。
处理器4370和4380被示为分别包括集成存储器控制器(integrated memorycontroller,IMC)单元4372和4382。处理器4370还包括点到点(P-P)接口4376和4378作为其总线控制器单元的一部分;类似地,第二处理器4380包括P-P接口4386和4388。处理器4370、4380可利用P-P接口电路4378、4388经由点到点(P-P)接口4350来交换信息。如图43所示,IMC 4372和4382将处理器耦合到各自的存储器,即存储器4332和存储器4334,存储器4332和存储器4334可以是在本地附接到各个处理器的主存储器的一部分。
处理器4370、4380可各自利用点到点接口电路4376、4394、4386、4398经由个体P-P接口4352、4354来与芯片组4390交换信息。芯片组4390可以可选地经由高性能接口4339与协处理器4338交换信息。在一个实施例中,协处理器4338是专用处理器,例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享缓存(未示出)可被包括在任一处理器中,或者在两个处理器之外,但经由P-P互连与处理器连接,从而使得任一个或两个处理器的本地缓存信息在处理器被置于低功率模式中的情况下可被存储在该共享缓存中。
芯片组4390可经由接口4396耦合到第一总线4316。在一个实施例中,第一总线4316可以是外围组件互连(Peripheral Component Interconnect,PCI)总线,或者诸如快速PCI总线或另一种第三代I/O互连总线之类的总线,虽然本公开的范围不限于此。
如图43所示,各种I/O设备4314可耦合到第一总线4316,以及将第一总线4316耦合到第二总线4320的总线桥4318。在一个实施例中,一个或多个额外的处理器4315,例如协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列、或者任何其他处理器,耦合到第一总线4316。在一个实施例中,第二总线4320可以是低引脚数(low pin count,LPC)总线。各种设备可耦合到第二总线4320,包括例如键盘/鼠标4322、通信设备4327和存储单元4328,例如盘驱动器或者其他大容量存储设备,其中该存储单元4328在一个实施例中可包括指令/代码和数据4330。另外,音频I/O4324可耦合到第二总线4320。注意,其他体系结构是可能的。例如,取代图43的点到点体系结构,系统可实现多点分支总线或者其他这种体系结构。
现在参考图44,其中示出了根据本公开的实施例的第二更具体示范性系统4400的框图。图43和图44中的相似元素带有相似的标号,并且图43的某些方面被从图44中省略以避免模糊图44的其他方面。
图44图示出处理器4370、4380可分别包括集成存储器和I/O控制逻辑(“CL”)4372和4382。从而,CL 4372、4382包括集成存储器控制器单元并且包括I/O控制逻辑。图44图示出不仅存储器4332、4334耦合到CL 4372、4382,而且I/O设备4414也耦合到控制逻辑4372、4382。传统I/O设备4415耦合到芯片组4390。
现在参考图45,其中示出了根据本公开的实施例的SoC 4500的框图。图41中的相似元素带有相似的标号。另外,虚线框是更先进SoC上的可选特征。在图45中,(一个或多个)互连单元4502耦合到:应用处理器4510,其包括一组一个或多个核心4102A-N和(一个或多个)共享缓存单元4106;系统代理单元4110;(一个或多个)总线控制器单元4116;(一个或多个)集成存储器控制器单元4114;一组或一个或多个协处理器4520,其可包括集成图形逻辑、图像处理器、音频处理器、以及视频处理器;静态随机访问存储器(static randomaccess memory,SRAM)单元4530;直接存储器访问(direct memory access,DMA)单元4532;以及显示单元4540,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器4520包括专用处理器,例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器,等等。
可以用硬件、软件、固件或者这种实现方案的组合来实现本文公开的(例如,机制的)实施例。本公开的实施例可被实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行的计算机程序或程序代码。
程序代码,例如图43中所示的代码4330,可被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可按已知的方式被应用到一个或多个输出设备。对于本申请而言,处理系统包括任何具有处理器的系统,例如;数字信号处理器(digital signalprocessor,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)。这种实施例也可被称为程序产品。
仿真(包括二进制转化、代码变形等等)
在一些情况下,指令转换器可被用于将指令从源指令集转换到目标指令集。例如,指令转换器可将指令转化(例如,利用静态二进制转化、包括动态编译的动态二进制转化)、变形、仿真或者以其他方式转换到要被核心处理的一个或多个其他指令。可以用软件、硬件、固件或者其组合来实现指令转换器。指令转换器可以在处理器上、在处理器外、或者一部分在处理器上一部分在处理器外。
图46是根据本公开的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。在图示的实施例中,指令转换器是软件指令转换器,虽然可替换地,可以用软件、固件、硬件或者其各种组合来实现指令转换器。图46示出了可以利用x86编译器4604来编译高级别语言4602的程序以生成x86二进制代码4606,x86二进制代码4606可由具有至少一个x86指令集核心的处理器4616原生执行。具有至少一个x86指令集核心的处理器4616表示任何这样的处理器:这种处理器可通过兼容地执行或以其他方式处理(1)x86指令集核心的指令集的实质部分或者(2)针对在具有至少一个x86指令集核心的处理器上运行的应用或其他软件的目标代码版本,来执行与具有至少一个x86指令集核心的处理器基本上相同的功能,以便实现与具有至少一个x86指令集核心的处理器基本上相同的结果。x86编译器4604表示可操作来生成x86二进制代码4606(例如,目标代码)的编译器,x86二进制代码4606在带有或不带有额外的链接处理的情况下可在具有至少一个x86指令集核心的处理器4616上被执行。类似地,图46示出了高级别语言4602的程序可被利用替换指令集编译器4608来编译以生成替换指令集二进制代码4610,替换指令集二进制代码4610可由没有至少一个x86指令集核心的处理器4614(例如,具有执行加州森尼维耳市的MIPS技术公司的MIPS指令集和/或执行加州森尼维耳市的ARM控股公司的ARM指令集的核心的处理器)原生执行。指令转换器4612用于将x86二进制代码4606转换成可由没有x86指令集核心的处理器4614原生执行的代码。这个转换后的代码不太可能与替换指令集二进制代码4610相同,因为能够做到这一点的指令转换器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替换指令集的指令构成。从而,指令转换器4612表示通过仿真、模拟或任何其他过程允许不具有x86指令集处理器或核心的处理器或其他电子设备执行x86二进制代码4606的软件、固件、硬件或者其组合。
Claims (22)
1.一种装置,包括:
矩阵操作加速器电路,其包括:
处理元件的二维网格,
与所述处理元件的二维网格相耦合的表示第一二维矩阵的第一多个寄存器,以及
与所述处理元件的二维网格相耦合的表示第二二维矩阵的第二多个寄存器,以及
硬件处理器核心,其与所述矩阵操作加速器电路相耦合并且包括:
解码器电路,来将单个指令解码成经解码的指令,所述单个指令包括识别所述第一二维矩阵的第一字段、识别所述第二二维矩阵的第二字段、以及操作码,该操作码指示出所述硬件处理器核心的执行电路将使得第三二维矩阵被从所述第一二维矩阵和所述第二二维矩阵在逻辑上形成来输入到所述处理元件的二维网格中,而不移动所述第一多个寄存器和所述第二多个寄存器内的数据元素,以及
所述硬件处理器核心的执行电路,来根据所述操作码执行所述经解码的指令。
2.如权利要求1所述的装置,其中所述操作码指示出所述硬件处理器核心的执行电路将使得所述第三二维矩阵被从所述第一二维矩阵的行的真子集和所述第二二维矩阵的行的真子集在逻辑上形成来输入到所述处理元件的二维网格中。
3.如权利要求2所述的装置,其中所述单个指令包括识别所述第一二维矩阵的行的真子集或者所述第二二维矩阵的行的真子集的字段。
4.如权利要求3所述的装置,其中所述矩阵操作加速器电路还包括选择电路,该选择电路通过根据所述操作码执行所述经解码的指令而被配置为在逻辑上形成所述第三二维矩阵。
5.如权利要求1所述的装置,其中所述操作码指示出所述硬件处理器核心的执行电路将使得所述第三二维矩阵被从所述第一二维矩阵的列的真子集和所述第二二维矩阵的列的真子集在逻辑上形成来输入到所述处理元件的二维网格中。
6.如权利要求5所述的装置,其中所述单个指令包括识别所述第一二维矩阵的列的真子集或者所述第二二维矩阵的列的真子集的字段。
7.如权利要求1-6中任一项所述的装置,其中所述矩阵操作加速器电路还包括选择电路,该选择电路通过根据所述操作码执行所述经解码的指令而被配置为在逻辑上形成所述第三二维矩阵。
8.一种方法,包括:
由与矩阵操作加速器电路相耦合的硬件处理器核心的解码器电路将单个指令解码成经解码的指令,所述矩阵操作加速器电路包括处理元件的二维网格、与所述处理元件的二维网格相耦合的表示第一二维矩阵的第一多个寄存器、以及与所述处理元件的二维网格相耦合的表示第二二维矩阵的第二多个寄存器,所述单个指令包括识别所述第一二维矩阵的第一字段、识别所述第二二维矩阵的第二字段、以及操作码,该操作码指示出所述硬件处理器核心的执行电路将使得第三二维矩阵被从所述第一二维矩阵和所述第二二维矩阵在逻辑上形成来输入到所述处理元件的二维网格中,而不移动所述第一多个寄存器和所述第二多个寄存器内的数据元素;并且
由所述硬件处理器核心的执行电路根据所述操作码来执行所述经解码的指令。
9.如权利要求8所述的方法,其中所述操作码指示出所述硬件处理器核心的执行电路将使得所述第三二维矩阵被从所述第一二维矩阵的行的真子集和所述第二二维矩阵的行的真子集在逻辑上形成来输入到所述处理元件的二维网格中。
10.如权利要求9所述的方法,其中所述单个指令包括识别所述第一二维矩阵的行的真子集或者所述第二二维矩阵的行的真子集的字段。
11.如权利要求10所述的方法,其中所述矩阵操作加速器电路还包括选择电路,该选择电路通过根据所述操作码执行所述经解码的指令而被配置为在逻辑上形成所述第三二维矩阵。
12.如权利要求8所述的方法,其中所述操作码指示出所述硬件处理器核心的执行电路将使得所述第三二维矩阵被从所述第一二维矩阵的列的真子集和所述第二二维矩阵的列的真子集在逻辑上形成来输入到所述处理元件的二维网格中。
13.如权利要求12所述的方法,其中所述单个指令包括识别所述第一二维矩阵的列的真子集或者所述第二二维矩阵的列的真子集的字段。
14.如权利要求8-13中任一项所述的方法,其中所述矩阵操作加速器电路还包括选择电路,该选择电路通过根据所述操作码执行所述经解码的指令而被配置为在逻辑上形成所述第三二维矩阵。
15.一种存储代码的非暂态机器可读介质,所述代码当被机器执行时使得所述机器执行一种方法,该方法包括:
由与矩阵操作加速器电路相耦合的硬件处理器核心的解码器电路将单个指令解码成经解码的指令,所述矩阵操作加速器电路包括处理元件的二维网格、与所述处理元件的二维网格相耦合的表示第一二维矩阵的第一多个寄存器、以及与所述处理元件的二维网格相耦合的表示第二二维矩阵的第二多个寄存器,所述单个指令包括识别所述第一二维矩阵的第一字段、识别所述第二二维矩阵的第二字段、以及操作码,该操作码指示出所述硬件处理器核心的执行电路将使得第三二维矩阵被从所述第一二维矩阵和所述第二二维矩阵在逻辑上形成来输入到所述处理元件的二维网格中,而不移动所述第一多个寄存器和所述第二多个寄存器内的数据元素;并且
由所述硬件处理器核心的执行电路根据所述操作码来执行所述经解码的指令。
16.如权利要求15所述的非暂态机器可读介质,其中所述操作码指示出所述硬件处理器核心的执行电路将使得所述第三二维矩阵被从所述第一二维矩阵的行的真子集和所述第二二维矩阵的行的真子集在逻辑上形成来输入到所述处理元件的二维网格中。
17.如权利要求16所述的非暂态机器可读介质,其中所述单个指令包括识别所述第一二维矩阵的行的真子集或者所述第二二维矩阵的行的真子集的字段。
18.如权利要求17所述的非暂态机器可读介质,其中所述矩阵操作加速器电路还包括选择电路,该选择电路通过根据所述操作码执行所述经解码的指令而被配置为在逻辑上形成所述第三二维矩阵。
19.如权利要求15所述的非暂态机器可读介质,其中所述操作码指示出所述硬件处理器核心的执行电路将使得所述第三二维矩阵被从所述第一二维矩阵的列的真子集和所述第二二维矩阵的列的真子集在逻辑上形成来输入到所述处理元件的二维网格中。
20.如权利要求19所述的非暂态机器可读介质,其中所述单个指令包括识别所述第一二维矩阵的列的真子集或者所述第二二维矩阵的列的真子集的字段。
21.如权利要求15-20中任一项所述的非暂态机器可读介质,其中所述矩阵操作加速器电路还包括选择电路,该选择电路通过根据所述操作码执行所述经解码的指令而被配置为在逻辑上形成所述第三二维矩阵。
22.如权利要求15所述的非暂态机器可读介质,所述方法还包括在所述解码之前将所述单个指令转化成不同指令集体系结构的一个或多个指令,其中所述不同指令集体系结构的一个或多个指令的执行将在功能上等同于根据所述操作码执行所述经解码的指令。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/134,136 | 2020-12-24 | ||
US17/134,136 US20220206800A1 (en) | 2020-12-24 | 2020-12-24 | Apparatuses, methods, and systems for instructions for aligning tiles of a matrix operations accelerator |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114675883A true CN114675883A (zh) | 2022-06-28 |
Family
ID=82071288
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111407206.2A Pending CN114675883A (zh) | 2020-12-24 | 2021-11-24 | 用于对齐矩阵操作加速器瓦片的指令的装置、方法和系统 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20220206800A1 (zh) |
CN (1) | CN114675883A (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12001385B2 (en) * | 2020-12-24 | 2024-06-04 | Intel Corporation | Apparatuses, methods, and systems for instructions for loading a tile of a matrix operations accelerator |
US20220222319A1 (en) * | 2021-01-14 | 2022-07-14 | Microsoft Technology Licensing, Llc | Compressed matrix with sparsity metadata |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10949496B2 (en) * | 2016-12-30 | 2021-03-16 | Intel Corporation | Dimension shuffling using matrix processors |
US10929143B2 (en) * | 2018-09-28 | 2021-02-23 | Intel Corporation | Method and apparatus for efficient matrix alignment in a systolic array |
US11379556B2 (en) * | 2019-05-21 | 2022-07-05 | Arm Limited | Apparatus and method for matrix operations |
US12061910B2 (en) * | 2019-12-05 | 2024-08-13 | International Business Machines Corporation | Dispatching multiply and accumulate operations based on accumulator register index number |
US11188328B2 (en) * | 2019-12-12 | 2021-11-30 | International Business Machines Corporation | Compute array of a processor with mixed-precision numerical linear algebra support |
US20210200711A1 (en) * | 2019-12-28 | 2021-07-01 | Intel Corporation | System and Method for Configurable Systolic Array with Partial Read/Write |
-
2020
- 2020-12-24 US US17/134,136 patent/US20220206800A1/en active Pending
-
2021
- 2021-11-24 CN CN202111407206.2A patent/CN114675883A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US20220206800A1 (en) | 2022-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11392381B2 (en) | Systems and methods for performing instructions to transform matrices into row-interleaved format | |
CN114356417A (zh) | 实行16位浮点矩阵点积指令的系统和方法 | |
CN110955453A (zh) | 用于执行矩阵压缩和解压缩指令的系统和方法 | |
CN110968346A (zh) | 用于执行用于快速元素解包到二维寄存器中的指令的系统 | |
CN113050990A (zh) | 用于矩阵操作加速器的指令的装置、方法和系统 | |
US20210406018A1 (en) | Apparatuses, methods, and systems for instructions for moving data between tiles of a matrix operations accelerator and vector registers | |
CN114153498A (zh) | 用于加载片寄存器对的系统和方法 | |
JP2021057004A (ja) | 行列演算アクセラレータの命令のための装置、方法、及びシステム | |
JP2019197531A (ja) | 連鎖タイル演算を実施するためのシステムおよび方法 | |
CN110909883A (zh) | 用于执行指定三元片逻辑操作的指令的系统和方法 | |
CN118132147A (zh) | 用于执行快速转换片并且将片用作一维向量的指令的系统 | |
CN110909882A (zh) | 用于执行水平铺块操作的系统和方法 | |
CN112148251A (zh) | 跳过无意义的矩阵运算的系统和方法 | |
EP3974966A1 (en) | Large scale matrix restructuring and matrix-scalar operations | |
CN111752618A (zh) | 浮点加法器的交错流水线 | |
CN113885942A (zh) | 用于将片寄存器对归零的系统和方法 | |
CN113849769A (zh) | 矩阵转置和乘法 | |
CN118605946A (zh) | 用于8位浮点矩阵点积指令的装置、方法和系统 | |
CN116860334A (zh) | 用于计算两个区块操作数中的半字节的数量积的系统和方法 | |
CN114675883A (zh) | 用于对齐矩阵操作加速器瓦片的指令的装置、方法和系统 | |
CN114675888A (zh) | 用于加载矩阵操作加速器瓦片的指令的装置、方法和系统 | |
US12001887B2 (en) | Apparatuses, methods, and systems for instructions for aligning tiles of a matrix operations accelerator | |
CN114721624A (zh) | 用于处理矩阵的处理器、方法和系统 | |
CN116097212A (zh) | 用于16比特浮点矩阵点积指令的装置、方法和系统 | |
CN113849770A (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 |