CN110494846A - 用于矩阵加法、减法和乘法的系统、方法和装置 - Google Patents
用于矩阵加法、减法和乘法的系统、方法和装置 Download PDFInfo
- Publication number
- CN110494846A CN110494846A CN201780088609.0A CN201780088609A CN110494846A CN 110494846 A CN110494846 A CN 110494846A CN 201780088609 A CN201780088609 A CN 201780088609A CN 110494846 A CN110494846 A CN 110494846A
- Authority
- CN
- China
- Prior art keywords
- operand
- source matrix
- source
- matrix operand
- matrix
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0207—Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/485—Adding; Subtracting
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/487—Multiplying; Dividing
- G06F7/4876—Multiplying
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/76—Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
- G06F7/762—Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data having at least two separately controlled rearrangement levels, e.g. multistage interconnection networks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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 OR CALCULATING; 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 OR CALCULATING; 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 OR CALCULATING; 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/30112—Register structure comprising data of variable length
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/30196—Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3818—Decoding for concurrent execution
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/454—Vector or matrix data
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/455—Image or video data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Nonlinear Science (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本文详述的实施例涉及矩阵运算。特别地,描述了对于矩阵(块片)加法、减法和乘法的支持。例如,详述了支持用于逐元素矩阵(块片)加法、减法和乘法的指令的电路。在一些实施例中,对于矩阵(块片)加法,解码电路将对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码;并且执行电路将执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置执行如下操作:将该数据元素位置处的第一数据值与所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值相加,并且将相加的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
Description
技术领域
发明领域总地涉及计算机处理器架构,并且更具体地涉及矩阵操作。
背景技术
矩阵在诸如机器学习和其他批量数据处理之类的许多计算任务中日益重要。
附图说明
通过示例而非限制的方式在附图的各图中图示本发明,在附图中相似的标记指示类似的元素,并且在附图中:
图1图示配置的块片(tile)的实施例;
图2图示矩阵存储的若干示例;
图3图示利用矩阵(块片)运算加速器的系统的实施例;
图4和图5示出使用矩阵运算加速器如何共享存储器的不同实施例;
图6图示使用块片(“TMMA”)的矩阵乘法累加运算的实施例;
图7图示链式融合乘法累加指令的迭代的执行的子集的实施例;
图8图示链式融合乘法累加指令的迭代的执行的子集的实施例;
图9图示链式融合乘法累加指令的迭代的执行的子集的实施例;
图10图示链式融合乘法累加指令的迭代的执行的子集的实施例;
图11图示根据实施例的二次幂大小的SIMD实施方式,其中累加器使用大于乘法器的输入的输入大小;
图12图示利用矩阵运算电路的系统的实施例;
图13图示使用块片来支持矩阵运算的处理器核流水线的实施例;
图14图示使用块片来支持矩阵运算的处理器核流水线的实施例;
图15图示以行主要格式和列主要格式表达的矩阵的示例;
图16图示矩阵(块片)的使用的示例;
图17图示矩阵(块片)的使用的方法的实施例;
图18图示TILECONFIG指令的示例性执行;
图19(A)至图19(D)图示寄存器的示例;
图20图示要支持的矩阵(块片)的描述的实施例;
图21图示由处理器执行来处理TILECONFIG指令的方法的实施例;
图22图示使用存储器寻址来执行TILECONFIG指令的更详细描述;
图23图示用于执行TILECONFIG指令的示例性伪代码;
图24图示TILEADD指令的示例性执行;
图25图示由处理器执行来处理TILEADD指令的方法的实施例;
图26图示描述由处理器执行来处理TILEADD指令的方法的示例过程;
图27图示用于当源矩阵(块片)操作数包含单精度元素时执行TILEADD运算的示例方法;
图28图示TILESUB指令的示例性执行;
图29图示由处理器执行来处理TILESUB指令的方法的实施例;
图30图示描述由处理器执行来处理TILESUB指令的方法的示例过程;
图31图示用于当源矩阵(块片)操作数包含单精度元素时执行TILESUB运算的示例方法;
图32图示TILEMUL指令的示例性执行;
图33图示由处理器执行来处理TILEMUL指令的方法的实施例;
图34图示描述由处理器执行来处理TILEMUL指令的方法的示例过程;
图35图示用于当源矩阵(块片)操作数包含单精度元素时执行TILEMUL运算的示例方法;
图36A至图36C图示示例性指令格式;
图37是根据本发明的一个实施例的寄存器架构的框图;
图38A和图38B图示顺序流水线和顺序核;
图39A和图39B图示更具体的示例性顺序核架构的框图,该核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)中的一个;
图40是根据本发明的实施例的处理器4000的框图,所述处理器4000可以具有多于一个核,可以具有集成存储器控制器,并且可以具有集成图形;
图41至图44是示例性计算机架构的框图;以及
图45是根据本发明的实施例的对比用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图。
具体实施例
在以下描述中,阐述了许多具体细节。然而,应理解的是,可以在没有这些具体细节的情况下实践本发明的实施例。在其他情况下,未详细地示出众所周知的电路、结构和技术,以免模糊对本说明书的理解。
在本说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但是每个实施例可能不一定包括该特定特征、结构或特性。此外,这样的短语不一定指代同一实施例。进一步地,当结合实施例描述特定特征、结构或特性时,认为结合(明确描述或未明确描述的)其他实施例影响这样的特征、结构或特性在本领域的技术人员的知识范围内。
在许多主流处理器中,处理矩阵是一项困难和/或指令密集的任务。例如,矩阵的行可被放置到多个压缩数据(例如,SIMD或向量)寄存器中,然后单独地在上面操作。例如,取决于数据大小,加法两个8x2矩阵可能需要加载或聚集到四个压缩数据寄存器中。然后执行与来自每个矩阵的第一行相对应的压缩数据寄存器的第一加法,并且执行与来自每个矩阵的第二行相对应的压缩数据寄存器的第二加法。然后所得到的压缩数据寄存器被分散回到存储器。虽然对于小矩阵此场景可能是可接受的,但是它对较大矩阵常常是不可接受的。
I.高级讨论
本文描述的是用于在诸如中央处理单元(CPU)、图形处理单元(GPU)和加速器这样的计算机硬件中支持矩阵运算的机制。矩阵运算利用表示诸如寄存器这样的存储器的一个或多个压缩区域的二维(2-D)数据结构。贯穿本说明书,这些2-D数据结构被称为块片。注意的是,矩阵可以比块片小(使用小于一个块片的整体),或者利用多个块片(矩阵大于任何一个块片的大小)。贯穿说明书,矩阵(块片)语言用于指示使用影响矩阵的块片所执行的运算,该矩阵是否大于任何一个块片通常不是相关的。
可以通过不同的运算对每个块片进行操作,所述不同的运算诸如本文详述的那些运算,并且包括但不限于:矩阵(块片)乘法、块片加法、块片减法、块片对角线、块片归零、块片转置、块片点积、块片广播、块片行广播、块片列广播、块片乘法、块片乘法和累加、块片移动等。附加地,对于诸如比例和/或偏差的使用的运算符的支持可以与这些运算一起使用或者支持将来的非数值应用,例如,OpenCL“本地存储器”、数据压缩/解压缩等。
存储的各部分(诸如存储器(非易失性和易失性)、寄存器、缓存等)被布置成不同水平和垂直维度的块片。例如,块片可以具有4的水平维度(例如,矩阵的4行)和8的垂直维度(例如,矩阵的8列)。通常,水平维度是相关元素大小(例如,2、4、8、16、32、64、128位等)。可以支持多种数据类型(单精度浮点、双精度浮点、整数等)。
A.配置的块片的示例性使用
图1图示配置的块片的实施例。如所示,存在从应用存储器101加载的四个块片111、113、115和117。在此示例中,块片T0 111和T1 113具有有4个元素字节(例如,单精度数据)的M行和N列。块片T2 115和T3 117具有有8个元素字节(例如,双精度数据)的M行和N/2列。当双精度操作数是单精度的宽度的两倍时,此配置与用于提供块片选项的调色板(palette)一致,供应总存储为16*N*M个字节的至少4个名称。取决于所使用的指令编码方案,可用块片的数量变化。
在一些实施例中,块片参数是可定义的。例如,“调色板”用于提供块片选项。示例性选项包括但不限于:块片名称数、存储的一行中的字节数、块片中的行数和列数等。例如,可以将块片的最大“高度”(行数)定义为:
块片最大行=架构存储/(调色板名称数*每行的字节数)
因此,可编写应用,使得名称的固定使用将能够跨越实施方式利用不同的存储大小。
块片的配置使用块片配置(“TILECONFIG”)指令来完成,其中在所选调色板中定义特定块片使用。此声明包括要使用的块片名称数、所请求的每名称(块片)的行数和列数,并且在一些实施例中,包括所请求的每个块片的数据类型。在一些实施例中,在执行TILECONFIG指令期间执行一致性检查以确定它与调色板条目的限制匹配。
B.示例性块片存储类型
图2图示矩阵存储的若干示例。在(A)中,块片被存储在存储器中。如所示,每“行”由四个压缩数据元素构成。为了到达下一“行”,使用步幅值。注意的是,行可以被连续地存储在存储器中。当块片存储未映射底层存储器阵列行宽度时,跨越式(strided)存储器允许一行接一行地访问。
块片从存储器加载和存储到存储器通常是从应用存储器到数据的压缩行的跨越式访问。在一些实施例中,在加载运算指令中作为TILE操作数对应用存储器的示例性TILELOAD和TILESTORE指令或其他指令引用是可重新起动的,以每指令处理(多达)2*行的页面错误、未屏蔽浮点异常和/或中断。
在(B)中,矩阵被存储在由诸如压缩数据寄存器(单指令、多数据(SIMD)或向量寄存器)这样的多个寄存器组成的块片中。在此示例中,块片被重叠在三个物理寄存器上。通常,使用连续的寄存器,然而,情况不一定是这样。
在(C)中,矩阵被存储在对于块片运算中使用的融合多累加(FMA)电路可访问的非寄存器存储中的块片中。此存储可以在FMA内部或者与它相邻。附加地,在下面讨论的一些实施例中,该存储可以用于数据元素而不是整个行或块片。
经由CPUID报告用于TMMA架构的支持参数。在一些实施例中,信息的列表包括最大高度和最大SIMD维度。配置TMMA架构需要指定每个块片的维度、每个块片的元素大小和调色板标识符。此配置通过执行TILECONFIG指令来完成。
TILECONFIG指令的成功执行启用后续TILE运算符。TILERELEASEALL指令清除块片配置并且禁用TILE运算(直到执行下一个TILECONFIG指令)。在一些实施例中,在使用块片的上下文切换中使用XSAVE、XSTORE等。在一些实施例中,在XSAVE中使用2个XCR0位,一个位用于TILECONFIF元数据并且一个位对应于实际块片净荷数据。
TILECONFIG不仅配置块片使用,而且还设置指示程序在配置了块片的代码的区域中的状态变量。实施方式可以枚举对可与块片区域一起使用的其他指令的限制,诸如不使用现有寄存器组等。
退出块片区域通常用TILERELEASEALL指令来完成。它不取任何参数并且很快地使所有块片无效(指示数据不再需要任何保存或恢复)并且清除与位于块片区域中相对应的内部状态。
在一些实施例中,块片运算将使超过通过块片配置所指定的维度的任何行和任何列归零。例如,当每行被写入时,块片运算将使超过已配置数量的列的数据归零(将元素的大小考虑进来)。例如,在64字节行以及配置有10行和12列的块片情况下,写入FP32元素的运算将写入前10行中的每一行,其中12*4个字节具有输出/结果数据,并且使剩余每行中的4*4个字节归零。块片运算还完全使前10个配置的行之后的任何行归零。当使用具有64字节行的1K块片时,将有16行,所以在此示例中,最后6行也将被归零。
在一些实施例中,上下文恢复(例如,XRSTOR)在加载数据时,强制对于块片超过所配置的行的数据将被维持为零。如果没有有效的配置,则所有行都被归零。块片数据的XRSTOR可能在超过所配置的那些列中加载垃圾。XRSTOR应该不可能清除超过所配置的列数,因为没有与块片配置相关联的元素宽度。
上下文保存(例如,XSAVE)在将块片写入到存储器时暴露整个TILE存储区域。如果XRSTOR将垃圾数据加载到块片的最右边部分中,则该数据将通过XSAVE保存。XSAVE将针对超过为每个块片所指定的数量的行写入零。
在一些实施例中,块片指令是可重新启动的。访问存储器的运算允许在页面故障之后重新启动。处理浮点运算的计算指令还允许未屏蔽浮点异常,其中异常的屏蔽由控制和/或状态寄存器控制。
为了支持在这些事件之后重新启动指令,指令将信息存储在下面详述的启动寄存器中。
II.矩阵(块片)运算系统
A.示例性硬件支持
图3图示利用矩阵(块片)运算加速器的系统的实施例。在此图示中,主机处理器/处理系统301将命令311(例如,诸如算术或矩阵操作运算这样的矩阵操纵运算、或加载和存储操作)传递到矩阵运算加速器307。然而,这是仅为了讨论目的而示出的。如稍后详述的,此加速器307可以是处理核的一部分。通常,作为块片操作运算符指令的命令311将块片称为寄存器-寄存器(“reg-reg”)或寄存器-存储器(“reg-mem”)格式。诸如TILESTORE、TILELOAD、TILECONFIG等这样的其他命令不对块片执行数据运算。命令可以是用于加速器307处理的解码指令(例如,微运算)或宏指令。
在此示例中,相干存储器接口303耦合到主机处理器/处理系统301和矩阵运算加速器405,使得它们可共享存储器。图4和图5示出使用矩阵运算加速器如何共享存储器的不同实施例。如图4中所示,主机处理器401和矩阵运算加速器电路405共享同一存储器403。图5图示主机处理器501和矩阵运算加速器505不共享存储器但是可访问彼此的存储器的实施例。例如,处理器501可正常访问块片存储器507并利用其主机存储器503。类似地,矩阵运算加速器505可访问主机存储器503,但是更典型地使用它自己的存储器507。注意这些存储器可以是不同类型的。
矩阵运算加速器307包括耦合到数据缓冲器305的多个FMA 309(在一些实施例中,这些缓冲器305中的一个或多个被存储在如所示的网格的FMA中)。数据缓冲器305缓冲从存储器加载的块片和/或要存储到存储器的块片(例如,使用块片加载或块片存储指令)。数据缓冲器可以是例如多个寄存器。通常,这些FMA被布置为能够读取和写入块片的链式FMA309的网格。在此示例中,矩阵运算加速器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(存储在块片A 601中)使其行的元素被转置以与FMA的矩形网格的列维度相匹配。在网格中的每个FMA处,A和B的元素被相乘并加到传入加数(从图中上方),并且传出和被传递到FMA的下一行(或最终输出)。
单个步骤的等待时间与K(矩阵B的行高度)成比例并且从属TMMA通常具有足够的源-目标行(在单个块片中或跨越块片)以隐藏该等待时间。实施方式还可以跨越时间步进分割SIMD(压缩数据元素)维度M(矩阵A的行高度),但是这简单地改变乘以K的常数。当程序指定比通过TMACC枚举的最大值小的K时,实施方式自由地用“屏蔽”或“早期输出”实现这个。
整个TMMA的等待时间与N*K成比例。重复率与N成比例。每TMMA指令的MAC数是N*K*M。
图7图示链式融合乘法累加指令的迭代的执行的子集的实施例。特别地,这图示了目的地的一个压缩数据元素位置的迭代的执行电路。在此实施例中,链式融合乘法累加在有符号源上运算,其中累加器是输入数据大小的2倍。
第一有符号源(源1 701)和第二有符号源(源2 703)各自具有四个压缩数据元素。这些压缩数据元素中的每一个均存储诸如浮点数据这样的有符号数据。第三有符号源(源3709)具有两个压缩数据元素,其中的每一个均存储有符号数据。第一有符号源701和第二有符号源703的大小是第三有符号源(初始值或先前结果)709的大小的一半。例如,第一有符号源701和第二有符号源703可以具有32位压缩数据元素(例如,单精度浮点),而第三有符号源709可以具有64位压缩数据元素(例如,双精度浮点)。
在此图示中,示出了仅第一有符号源701和第二有符号源703的两个最高有效压缩数据元素位置以及第三有符号源709的最高有效压缩数据元素位置。当然,还将处理其他压缩数据元素位置。
如所图示的,压缩数据元素被成对处理。例如,使用乘法器电路705来将第一有符号源701和第二有符号源703的最高有效数据元素位置的数据相乘,并且使用乘法器电路707来将来自第一有符号源701和第二有符号源703的第二最高有效数据元素位置的数据相乘。在一些实施例中,这些乘法器电路705和707被重用于其他压缩数据元素位置。在其他实施例中,使用附加乘法器电路,使得压缩数据元素被并行处理。在一些上下文中,并行执行使用为有符号第三源709的大小的通道来完成。使用加法电路711来将每个乘法的结果相加。
乘法的结果的相加的结果被加到来自有符号源3 709的最高有效压缩数据元素位置的数据(使用不同的加法器713或相同的加法器711)。
最后,第二加法的结果被存储到压缩数据元素位置中的有符号目的地715中,或者在存在下一次迭代的情况下被传递到下一次迭代,所述压缩数据元素位置对应于从有符号第三源709使用的压缩数据元素位置。在一些实施例中,写入掩码被应用于此存储,使得如果设置了对应的写入掩码(位),则发生存储,而如果未设置对应的写入掩码(位),则不会发生存储。
图8图示链式融合乘法累加指令的迭代的执行的子集的实施例。特别地,这图示目的地的一个压缩数据元素位置的迭代的执行电路。在此实施例中,链式融合乘法累加在有符号源上运算,其中累加器是输入数据大小的2倍。
第一有符号源(源1 801)和第二有符号源(源2 803)各自具有四个压缩数据元素。这些压缩数据元素中的每一个均存储诸如整数数据这样的有符号数据。第三有符号源(源3809)具有两个压缩数据元素,其中的每一个均存储有符号数据。第一有符号源801和第二有符号源803的大小是第三有符号源809的大小的一半。例如,第一有符号源801和第二有符号源803可以具有32位压缩数据元素(例如,单精度浮点),第三有符号源809可以具有64位压缩数据元素(例如,双精度浮点)。
在此图示中,示出了仅第一有符号源801和第二有符号源803的两个最高有效压缩数据元素位置以及第三有符号源809的最高有效压缩数据元素位置。当然,还将处理其他压缩数据元素位置。
如所图示的,压缩数据元素被成对处理。例如,使用乘法器电路805来将第一有符号源801和第二有符号源803的最高有效数据元素位置的数据相乘,并且使用乘法器电路807来将来自第一有符号源801和第二有符号源803的第二最高有效数据元素位置的数据相乘。在一些实施例中,这些乘法器电路805和807被重用于其他压缩数据元素位置。在其他实施例中,使用附加乘法器电路,使得压缩数据元素被并行处理。在一些上下文中,并行执行使用为有符号第三源(初始值或先前迭代结果)809的大小的通道来完成。使用加法/饱和电路811来将每个乘法的结果加到有符号第三源809。
当加法产生太大的值时,加法/饱和(累加器)电路811保存操作数的符号。特别地,在多路加与写入到目的地或下一次迭代之间的无限精度结果上发生饱和评估。当累加器811是浮点并且输入项是整数时,乘积和与浮点累加器输入值变成无限精度值(数百位的定点数),乘法结果和第三输入的相加被执行,并且到实际累加器类型的单个舍入被执行。
无符号饱和意味着输出值被限制为该元素宽度的最大无符号数(全1)。有符号饱和意味着值被限制为在该元素宽度的最小负数和最大正数之间的范围内(例如对于字节,范围是从-128(=-2^7)到127(=2^7-1))。
加法和饱和检查的结果被存储到压缩数据元素位置中的有符号结果815中,所述压缩数据元素位置对应于从有符号第三源809使用的压缩数据元素位置,或者在存在下一次迭代的情况下被传递到下一次迭代。在一些实施例中,写入掩码被应用于此存储,使得如果设置了对应的写入掩码(位),则发生存储,而如果未设置对应的写入掩码(位),则不会发生存储。
图9图示链式融合乘法累加指令的迭代的执行的子集的实施例。特别地,这图示目的地的一个压缩数据元素位置的迭代的执行电路。在此实施例中,链式融合乘法累加在有符号源和无符号源上运算,其中累加器是输入数据大小的4倍。
第一有符号源(源1 901)和第二无符号源(源2 903)各自具有四个压缩数据元素。这些压缩数据元素中的每一个均具有诸如浮点数或整数数据这样的数据。第三有符号源(初始值或结果915)具有存储有符号数据的压缩数据元素。第一源901和第二源903的大小是第三有符号源915的四分之一。例如,第一源901和第二源903可以具有16位压缩数据元素(例如,字)并且第三有符号源915可以具有64位压缩数据元素(例如,双精度浮点或64位整数)。
在此图示中,示出了第一源901和第二源903的四个最高有效压缩数据元素位置以及第三有符号源915的最高有效压缩数据元素位置。当然,如果存在任何其他压缩数据元素位置,则还将处理其他压缩数据元素位置。
如所图示的,压缩数据元素以四元组的形式被处理。例如,使用乘法器电路905来将第一源901和第二源903的最高有效压缩数据元素位置的数据相乘,使用乘法器电路907来将来自第一源901和第二源903的第二最高有效压缩数据元素位置的数据相乘,使用乘法器电路909来将来自第一源901和第二源903的第三最高有效压缩数据元素位置的数据相乘,并且使用乘法器电路911来将来自第一源901和第二源903的最低有效压缩数据元素位置的数据相乘。在一些实施例中,在乘法之前,第一源901的有符号压缩数据元素被符号扩展并且第二源903的无符号压缩数据元素被零扩展。
在一些实施例中,这些乘法器电路905-911被重用于其他压缩数据元素位置。在其他实施例中,使用附加乘法器电路,使得压缩数据元素被并行处理。在一些上下文中,并行执行使用为有符号第三源915的大小的通道来完成。使用加法电路911来将每个乘法的结果相加。
乘法结果相加的结果被加到来自有符号源3 915的最高有效压缩数据元素位置的数据(使用不同的加法器913或相同的加法器911)。
最后,第二加法的结果919被存储到压缩数据元素位置中的有符号目的地中,所述压缩数据元素位置对应于从有符号第三源915使用的压缩数据元素位置,或者被传递到下一次迭代。在一些实施例中,写入掩码被应用于此存储,使得如果设置了对应的写入掩码(位),则发生存储,而如果未设置对应的写入掩码(位),则不会发生存储。
图10图示链式融合乘法累加指令的迭代的执行的子集的实施例。特别地,这图示目的地的一个压缩数据元素位置的迭代的执行电路。在此实施例中,链式融合乘法累加在有符号源和无符号源上运算,其中累加器是输入数据大小的4倍。
第一有符号源(源1 1001)和第二无符号源(源2 1003)各自具有四个压缩数据元素。这些压缩数据元素中的每一个均存储诸如浮点数或整数数据这样的数据。第三有符号源(初始或先前结果1015)具有存储有符号数据的压缩数据元素。第一源1001和第二源1003的大小是第三有符号源1015的四分之一。例如,第一源1001和第二源1003可以具有16位压缩数据元素(例如,字)并且第三有符号源1015可以具有64位压缩数据元素(例如,双精度浮点或64位整数)。
在此图示中,示出了第一源1001和第二源1003的四个最高有效压缩数据元素位置以及第三有符号源1015的最高有效压缩数据元素位置。当然,如果存在任何其他压缩数据元素位置,则还将处理其他压缩数据元素位置。
如所图示的,压缩数据元素以四元组的形式被处理。例如,使用乘法器电路1005来将第一源1001和第二源1003的最高有效压缩数据元素位置的数据相乘,使用乘法器电路1007来将来自第一源1001和第二源1003的第二最高有效压缩数据元素位置的数据相乘,使用乘法器电路1009来将来自第一源1001和第二源1003的第三最高有效压缩数据元素位置的数据相乘,并且使用乘法器电路1011来将来自第一源1001和第二源1003的最低有效压缩数据元素位置的数据相乘。在一些实施例中,在乘法之前,第一源1001的有符号压缩数据元素被符号扩展,并且第二源1003的无符号压缩数据元素被零扩展。
在一些实施例中,这些乘法器电路1005-1011被重用于其他压缩数据元素位置。在其他实施例中,使用附加乘法器电路,以便压缩数据元素被并行处理。在一些上下文中,并行执行使用为有符号第三源1015的大小的通道来完成。乘法结果相加的结果使用加法/饱和电路1013被加到来自有符号源3 1015的最高有效压缩数据元素位置的数据。
当加法产生对于有符号饱和来说太大或太小的值时,加法/饱和(累加器)电路1013保存操作数的符号。特别地,在多路加与写入到目的地之间的无限精度结果上发生饱和评估。当累加器1013是浮点并且输入项是整数时,乘积和与浮点累加器输入值变成无限精度值(数百位的定点数),乘法结果与第三输入的加法被执行,并且到实际累加器类型的单个舍入被执行。
加法和饱和检查的结果1019被存储到压缩数据元素位置中的有符号目的地中,所述压缩数据元素位置对应于从有符号第三源1015使用的压缩数据元素位置,或者被传递到下一次迭代。在一些实施例中,写入掩码被应用于此存储,使得如果设置了对应的写入掩码(位),则发生存储,而如果未设置对应的写入掩码(位),则不会发生存储。
图11图示根据实施例的二次幂大小的SIMD实施例,其中累加器使用大于乘法器的输入的输入大小。注意源(对乘法器而言)和累加器值可以是有符号值或无符号值。对于具有2倍输入大小的累加器(换句话说,累加器输入值是源的压缩数据元素大小的两倍),表1101图示不同的配置。对于字节大小的源,累加器使用大小为16位的字或半精度浮点(HPFP)值。对于字大小的源,累加器使用大小为32位的32位整数或单精度浮点(SPFP)值。对于SPFP或32位整数大小的源,累加器使用大小为64位的64位整数或双精度浮点(DPFP)值。
对于具有4倍输入大小的累加器(换句话说,累加器输入值是源的压缩数据元素大小的四倍),表1103图示不同的配置。对于字节大小的源,累加器使用大小为32位的32位整数或单精度浮点(SPFP)值。对于字大小的源,在一些实施例中累加器使用大小为64位的64位整数或双精度浮点(DPFP)值。
对于具有8倍输入大小的累加器(换句话说,累加器输入值是源的压缩数据元素大小的八倍),表1105图示配置。对于字节大小的源,累加器使用64位整数。
如早先示意的,矩阵运算电路可以被包括在核中,或者作为外部加速器被包括。图12图示利用矩阵运算电路的系统的实施例。在此图示中,多个实体与环形互连1245耦合。
多个核1201、1203、1205和1207提供基于非块片的指令支持。在一些实施例中,在核1203中提供矩阵运算电路,而在其他实施例中,可在环形互连1245上访问矩阵运算电路1211和1213。
附加地,提供一个或多个存储器控制器1223-1225以代表核和/或矩阵运算电路与存储器1233和1231进行通信。
图13图示使用块片来支持矩阵运算的处理器核流水线的实施例。分支预测和解码电路1303根据存储在指令存储装置1301中的指令来执行指令的分支预测、指令的解码和/或两者。例如,本文详述的指令可以被存储在指令存储装置中。在一些实施方式中,单独的电路被用于分支预测,并且在一些实施例中,使用微码1305来将至少一些指令解码成一个或多个微运算、微码入口点、微指令、其他指令或其他控制信号。可以使用各种不同的机制来实现分支预测和解码电路1303。适合的机制的示例包括但不限于查找表、硬件实施方式、可编程逻辑阵列(PLA)、微码只读存储器(ROM)等。
分支预测和解码电路1303耦合到重命名/分配器电路1307,其在一些实施例中耦合到调度器电路1309。在一些实施例中,这些电路通过执行以下步骤中的一个或多个来提供寄存器重命名、寄存器分配和/或调度功能:1)将逻辑操作数值重命名为物理操作数值(例如,在一些实施例中为寄存器别名表),2)将状态位和标志分配给经解码的指令,以及3)调度经解码的指令以供在指令池外的执行电路上执行(例如,在一些实施例中使用预留站)。
调度器电路1309表示任何数量的不同调度器,包括预留站、中央指令窗口等。调度器单元调度器电路1309耦合到或者包括物理寄存器堆1315。物理寄存器堆1315中的每一个均表示一个或多个物理寄存器堆,其中的不同物理寄存器堆存储一种或多种不同的数据类型,诸如标量整数、标量浮点、压缩整数、压缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一个指令的地址的指令指针)、块片等。在一个实施例中,物理寄存器堆1315包括向量寄存器电路、写入掩码寄存器电路和标量寄存器电路。这些寄存器电路可以提供架构向量寄存器、向量屏蔽寄存器和通用寄存器。物理寄存器堆1315与引退电路1317交叠以图示可以实现寄存器重命名和乱序执行的各种方式(例如,使用重排序缓冲器和引退寄存器堆;使用未来寄存器堆、历史缓冲器和引退寄存器堆;使用寄存器映射和寄存器池;等)。引退电路1317和物理寄存器堆1315耦合到执行电路1311。
虽然在乱序执行的上下文中描述寄存器重命名,但是应该理解的是,可以在顺序架构中使用寄存器重命名。虽然所图示的处理器的实施例还可以包括单独的指令和数据缓存单元以及共享L2缓存单元,但是替代实施例可以具有用于指令和数据两者的单个内部缓存,诸如例如,第1级(L1)内部缓存或多级内部缓存。在一些实施例中,系统可以包括内部缓存以及在核和/或处理器外部的外部缓存的组合。可替代地,所有缓存都可以在核和/或处理器外部。
执行电路1311是一个或多个执行电路1321、1323和1327的集合以及一个或多个存储器存取电路1325的集合。执行电路1321、1323和1327对各种类型的数据(例如,标量浮点、压缩整数、压缩浮点、向量整数、向量浮点)执行各种运算(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于具体功能或功能集的许多执行单元,但是其他实施例可以包括仅一个执行单元或全部都执行所有功能的多个执行单元。标量电路1321执行标量运算,向量/SIMD电路1323执行向量/SIMD运算,并且矩阵运算电路1327执行本文详述的矩阵(块片)运算。
存储器存取单元组1364耦合到存储器单元1370,其包括耦合到数据缓存单元1374的数据TLB单元1372,数据缓存单元1374又耦合到第2级(L2)缓存单元1376。在一个示例性实施例中,存储器存取单元1364可以包括加载单元、存储地址单元和存储数据单元,其中的每个单元耦合到存储器单元1370中的数据TLB单元1372。指令缓存单元1334进一步耦合到存储器单元1370中的第2级(L2)缓存单元1376。L2缓存单元1376耦合到一个或多个其他级别的缓存并最终耦合到主存储器。
作为示例,示例性寄存器重命名、乱序发布/执行核架构可以实现如下的流水线:1)指令提取电路执行提取和长度解码级;2)分支和解码电路1303执行解码级;3)重命名/分配器电路1307执行分配级和重命名级;4)调度器电路1309执行调度级;5)物理寄存器堆(耦合到或者包括在调度器电路1307及重命名/分配电路1307中)和存储器单元执行寄存器读取/存储器读取级;执行电路1311执行执行级;6)存储器单元和物理寄存器堆单元执行写回/存储器写入级;7)各种单元可能在异常处理级中被涉及;并且8)引退单元和物理寄存器堆单元执行提交级。
核可以支持一个或多个指令集(例如,x86指令集(具有已被添加有较新版本的一些扩展);加利福尼亚州桑尼维尔的MIPS Technologies的MIPS指令集;加利福尼亚州桑尼维尔的ARM Holdings的ARM指令集(具有诸如NEON这样的可选附加扩展),包括本文描述的指令。在一个实施例中,核1390包括用于支持压缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许使用压缩数据来执行由许多多媒体应用所使用的运算。
应该理解的是,核可以支持多线程处理(执行两个或更多个并行运算或线程集),并且可以以各种方式这样做,所述各种方式包括时间分片多线程处理、同时多线程处理(其中单个物理核为物理核正在同时地多线程处理的每个线程提供逻辑核)或其组合(例如,时间分片提取和解码以及此后诸如超线程技术中的同时多线程处理)。
图14图示使用块片来支持矩阵运算的处理器核流水线的实施例。分支预测和解码电路1403根据存储在指令存储装置1401中的指令来执行指令的分支预测、指令的解码和/或两者。例如,本文详述的指令可以被存储在指令存储装置中。在一些实施例中,单独的电路被用于分支预测,并且在一些实施例中,使用微码1405来将至少一些指令解码成一个或多个微运算、微码入口点、微指令、其他指令或其他控制信号。可以使用各种不同的机制来实现分支预测和解码电路1403。适合的机制的示例包括但不限于查找表、硬件实施方式、可编程逻辑阵列(PLA)、微码只读存储器(ROM)等。
分支预测和解码电路1403耦合到重命名/分配器电路1407,其在一些实施例中耦合到调度器电路1409。在一些实施例中,这些电路通过执行以下步骤中的一个或多个来提供寄存器重命名、寄存器分配和/或调度功能:1)将逻辑操作数值重命名为物理操作数值(例如,在一些实施例中为寄存器别名表),2)将状态位和标志分配给经解码的指令,以及3)调度经解码的指令以供在指令池外的执行电路上执行(例如,在一些实施例中使用预留站)。
调度器电路1409表示任何数量的不同调度器,包括预留站、中央指令窗口等。调度器单元调度器电路1409耦合到或者包括物理寄存器堆1415。物理寄存器堆1415中的每一个均表示一个或多个物理寄存器堆,其中的不同物理寄存器堆存储一种或多种不同的数据类型,诸如标量整数、标量浮点、压缩整数、压缩浮点、向量整数、向量浮点数、状态(例如,作为要执行的下一个指令的地址的指令指针)、块片等。在一个实施例中,物理寄存器堆1415包括向量寄存器电路、写入掩码寄存器电路和标量寄存器电路。这些寄存器电路可以提供架构向量寄存器、向量屏蔽寄存器和通用寄存器。物理寄存器堆1415与引退电路1417交叠以图示可以实现寄存器重命名和乱序执行的各种方式(例如,使用重排序缓冲器和引退寄存器堆);使用未来寄存器堆、历史缓冲器和引退寄存器堆;使用寄存器映射和寄存器池;等)。引退电路1417和物理寄存器堆1415耦合到执行电路1411。
虽然在乱序执行的上下文中描述寄存器重命名,但是应该理解的是,可以在顺序架构中使用寄存器重命名。虽然所图示的处理器的实施例还可以包括单独的指令和数据缓存单元以及共享L2缓存单元,但是替代实施例可以具有用于指令和数据两者的单个内部缓存,诸如例如,第1级(L1)内部缓存或多级内部缓存。在一些实施例中,系统可以包括内部缓存以及在核和/或处理器外部的外部缓存的组合。可替代地,所有缓存都可以在核和/或处理器外部。
执行电路1411是一个或多个执行电路1427的集合和一个或多个存储器存取电路1425的集合。执行电路1427执行本文详述的矩阵(块片)运算。
存储器存取单元组1464耦合到存储器单元1470,其包括耦合到数据缓存单元1474的数据TLB单元1472,数据缓存单元1474又耦合到第2级(L2)缓存单元1476。在一个示例性实施例中,存储器存取单元1464可以包括加载单元、存储地址单元和存储数据单元,其中的每个单元均耦合到存储器单元1470中的数据TLB单元1472。指令缓存单元1434进一步耦合到存储器单元1470中的第2级(L2)缓存单元1476。L2缓存单元1476耦合到一个或多个其他级别的缓存并最终耦合到主存储器。
作为示例,示例性寄存器重命名、乱序发布/执行核架构可以实现如下的流水线:1)指令提取电路执行提取和长度解码级;2)分支和解码电路1403执行解码级;3)重命名/分配器电路1407执行分配级和重命名级;4)调度器电路1409执行调度级;5)物理寄存器堆(耦合到或者包括在调度器电路1407和重命名/分配电路1407中)和存储器单元执行寄存器读取/存储器读取级;执行电路1411执行执行级;6)存储器单元和物理寄存器堆单元执行写回/存储器写入级;7)各种单元可能在异常处理级中被涉及;并且8)引退单元和物理寄存器堆单元执行提交级。
核可以支持一个或多个指令集(例如,x86指令集(具有已被添加有较新版本的一些扩展);加利福尼亚州桑尼维尔的MIPS Technologies的MIPS指令集;加利福尼亚州桑尼维尔的ARM Holdings的ARM指令集(具有诸如NEON这样的可选附加扩展),包括本文描述的指令。在一个实施例中,核1490包括用于支持压缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许使用压缩数据来执行由许多多媒体应用所使用的运算。
应该理解的是,核可以支持多线程处理(执行两个或更多个并行运算或线程集),并且可以以各种方式这样做,所述各种方式包括时间分片多线程处理、同时多线程处理(其中单个物理核为物理核正在同时地多线程处理的每个线程提供逻辑核)或其组合(例如,时间分片提取和解码以及此后诸如超线程技术中的同时多线程处理)。
B.布局
贯穿本说明书,使用行主要(row major)数据布局来表达数据。列主要(columnmajor)用户应该根据其取向转换项目。图15图示以行主要格式和列主要格式表达的矩阵的示例。如所示,矩阵A是2×3矩阵。当以行主要格式存储此矩阵时,行的数据元素是连续的。当以列主要格式存储此矩阵时,列的数据元素是连续的。矩阵的公知属性是AT*BT=(BA)T,其中上标T意指转置。读取列主要数据作为行主要数据导致矩阵看起来像转置矩阵。
在一些实施例中,在硬件中利用行主要语义,并且列主要数据是为了交换操作数顺序,其结果是矩阵的转置,但是对于来自存储器的后续列主要读取,它是正确的非转置矩阵。
例如,如果有两个列主矩阵要相乘:
输入矩阵将被存储在线性存储器(列主要)中如下:
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
交换顺序和矩阵乘:
转置矩阵输出并且然后可以行主要顺序被存储:
ag+bh cg+dh eg+fh ai+bj ci+dj ei+fj ak+bl ck+dl ek+fl
并且用在后续列主要计算中,它是正确的非转置矩阵:
III.示例性使用
图16图示矩阵(块片)的使用的示例。在此示例中,矩阵C1601包括两个块片,矩阵A1603包括一个块片,并且矩阵B1605包括两个块片。此图示出用于计算矩阵乘法的算法的内循环的示例。在此示例中,来自矩阵C1601的两个结果块片tmm0和tmm1用于累加中间结果。来自A矩阵1603的一个块片(tmm2)被重用两次,因为它与来自B矩阵1605的两个块片相乘。指针用于从通过箭头指示的方向加载新A块片和两个新B块片。未示出的外循环调整用于C块片的指针。
如所示的示例性代码包括块片配置指令的使用并且被执行来配置块片使用,加载块片,循环处理块片,将块片存储到存储器,并且释放块片使用。
图17图示矩阵(块片)的使用的实施例。在1701处,配置块片使用。例如,执行TILECONFIG指令以配置块片使用,包括设置每块片的行数和列数。通常,在1703处从存储器加载至少一个矩阵(块片)。
IV.示例性指令
A.块片配置
如上面所讨论的,通常需要在使用之前配置块片使用。例如,可能不需要所有行和列的完全使用。在一些实施例中不仅不配置这些行和列节约功率,而且配置可以用于确定运算是否将生成错误。例如,如果M和L不相同,则形式(N×M)*(L*N)的矩阵乘法通常将不工作。
本文详述的是矩阵(块片)配置(“TILECONFIG”)指令及其执行的实施例。在使用利用块片的矩阵之前,在一些实施例中,将配置块片支持。例如,配置每块片的行数和列数、要使用的块片等。TILECONFIG指令是对计算机本身的改进,因为它提供支持以将计算机配置成使用矩阵加速器(作为处理器核的一部分或者作为外部设备)。特别地,TILECONFIG指令的执行使得配置从存储器中被检索并应用于矩阵加速器内的矩阵(块片)设置。
i.示例性执行
图18图示TILECONFIG指令的示例性执行。TILECONFIG指令格式包括用于操作码和存储器地址的字段。
如所图示的,TILECONFIG指令使用地址作为指向包含要支持的矩阵(块片)的描述1803的存储器1801位置的指针。
处理器/核1805的执行电路1811通过以下步骤来执行TILECONFIG:经由存储器控制器1815从存储器1801中检索描述1803,在块片配置1817中配置用于调色板的块片(设置行数和列数),并且标记矩阵支持在使用中。特别地,指令执行资源1811被配置为使用如通过设置块片配置1817所指定的块片。指令执行资源还可以包括机器特定寄存器或配置寄存器以指示块片使用。
块片配置1817被设置为经由对TILECONFIG指令的执行来指示如块片描述1803所指示的每块片的参数。所设置的参数是每块片的行数和列数。还设置了诸如在使用中和起始值这样的附加值。块片配置1817利用一个或多个寄存器1819来存储块片使用和配置信息。
II.示例性块片存储
图19(A)至图19(D)图示寄存器1819的示例。图19(A)图示多个寄存器1819。如所示,每个块片(TMM0 1901...TMMN 1903)具有单独的寄存器,其中每个寄存器存储该特定块片的行和列大小。StartK和StartM被存储在单独的寄存器1911和1913中。设置了一个或多个状态寄存器1915(例如,TILES_CONFIGURED=1)以指示块片被配置用于使用。
图19(B)图示多个寄存器1819。如所示,每个块片具有用于其行和列的单独的寄存器。例如,TMM0行配置1921、TMM0列配置1923、StartK和StartM被存储在单独的寄存器1911和1913中。设置了一个或多个状态寄存器1915(例如,TILES_CONFIGURED=1)以指示块片被配置用于使用。
图19(C)图示单个寄存器1819。如所示,此寄存器存储块片配置(每块片的行和列)1931,StartK 1933和StartM 1933被存储在作为压缩数据寄存器的单个寄存器中。设置了一个或多个状态寄存器1915(例如,TILES_CONFIGURED=1)以指示块片被配置用于使用。
图19(D)图示多个寄存器1819。如所示,单个寄存器存储块片配置(每块片的行和列)1931。StartK和StartM被存储在单独的寄存器1911和1913中。设置了一个或多个状态寄存器1915(例如,TILES_CONFIGURED=1)以指示块片被配置用于使用。
设想了其他组合,诸如将起始寄存器组合成它们被单独地示出的单个寄存器中等。
III.示例性存储的矩阵(块片)描述
图20图示要支持的矩阵(块片)的描述的实施例。在此示例中,每个字段都是一字节。在字节[0]中,存储调色板ID 2001。调色板ID用于索引调色板表1813,所述调色板表1813按照调色板ID存储块片中的字节数以及如通过配置所定义的与此ID相关联的块片的每行字节数。字节1-7被保留并且通常为零。
字节8-9存储用于“startM”寄存器2003的值并且字节10-11存储用于“startK”寄存器2005的值。为了支持在这些事件之后重新启动指令,指令将信息存储在这些寄存器中。startM指示应该被用于重新启动的行。startK指示用于相关运算的内积中的位置。不需要行(列)中的位置。像逐元素加法/减法/乘法这样的二维运算仅使用startM。三维运算使用来自startM和startK两者的值。通常,仅需要startM的运算将在写入startM时使startK归零。
在一些实施例中,在任何时候中断的块片指令未被重新启动,软件的责任是使startM和startK值归零。例如,未屏蔽浮点异常处理程序可能决定在软件中完成运算并且将程序计数器值改变为另一指令,通常是下一个指令。在这种情况下软件异常处理程序必须在恢复程序之前在由操作系统呈现给它的异常帧中使startM和startK值归零。操作系统将随后重新加载这些值。
字节16-17存储用于块片0的行2013和列2015的数量,字节18-19存储用于块片1的行数和列数等。换句话说,每个2字节组指定用于块片的行数和列数。如果不使用2个字节的组来指定块片参数,则它们应该具有零值。与实施限制或调色板限制相比,为更多的块片指定块片参数导致故障。未配置的块片被设置为具有0行、0列的INIT状态。
最后,存储器中的配置通常以结束划界来结束,例如若干连续字节全为零。
IV.示例性格式
用于TILECONFIG指令的格式的实施例是TILECONFIG地址。在一些实施例中,TILECONFIG是指令的操作码助记符。地址是指向存储器中的矩阵(块片)描述的指针。在一些实施例中,地址字段是R/M值(诸如2446)。
在实施例中,指令的编码包括间接地标识存储器中的多个索引目标位置的比例-索引-基数(SIB)类型存储器寻址操作数(例如,字段2450)。在一个实施例中,SIB类型存储器操作数可以包括标识基地址寄存器的编码。基地址寄存器的内容可以表示存储器中的基地址,根据该基地址来计算存储器中的特定目标位置的地址。例如,基地址可以是用于扩展向量指令的潜在目标位置的块中的第一位置的地址。在一个实施例中,SIB类型存储器操作数可以包括标识索引寄存器的编码。索引寄存器的每个元素可以指定可用于从基地址计算潜在目标位置的块内的相应目标位置的地址的索引或偏移值。在一个实施例中,SIB类型存储器操作数可以包括指定要在计算相应目标地址时应用于每个索引值的比例因子的编码。例如,如果比例因子值4被编码在SIB类型存储器操作数中,则可以将从索引寄存器的元素获得的每个索引值乘以4并且然后与基地址相加以计算目标地址。
在一个实施例中,形式vm32{x,y,z}的SIB类型存储器操作数可以标识使用SIB类型存储器寻址所指定的存储器操作数的向量数组。在此示例中,使用公共基寄存器、常数比例因子以及包含各个元素的向量索引寄存器来指定存储器地址的数组,每个元素都是32位索引值。向量索引寄存器可以是128位(例如,XMM)寄存器(vm32x)、256位(例如,YMM)寄存器(vm32y)或512位(例如,ZMM)寄存器(vm32z)。在另一实施例中,形式vm64{x,y,z}的SIB类型存储器操作数可以标识使用SIB类型存储器寻址所指定的存储器操作数的向量数组。在此示例中,使用公共基寄存器、常数比例因子以及包含各个元素的向量索引寄存器来指定存储器地址的数组,每个元素都是64位索引值。向量索引寄存器可以是128位(例如,XMM)寄存器(vm64x)、256位(例如,YMM)寄存器(vm64y)或512位(例如,ZMM)寄存器(vm64z)。
v.执行的示例性方法
图21图示由处理器执行来处理TILECONFIG指令的方法的实施例。
在2101处,指令被提取。例如,TILECONFIG指令被提取。TILECONFIG指令的实施例包括用于操作码和存储器地址操作数的字段。
在2103处对所提取的指令进行解码。例如,所提取的TILECONFIG指令由诸如本文详述的解码电路这样的解码电路进行解码。
在2105处检索在存储器地址操作数的存储器地址处找到的描述,并且(按需要)对经解码的指令进行调度。
在2107处,经解码的指令由诸如本文详述的执行电路(硬件)这样的执行电路(硬件)执行。对于TILECONFIG指令,执行将使得执行电路在块片配置中配置块片的使用(设置行数和列数)并且标记矩阵(块片)支持在使用中(激活)。例如,配置一个或多个寄存器1819。通常通过在状态、控制或机器特定寄存器中设置一位来指示块片支持使用(例如,“TILES_CONFIGURED”)。特别地,指令执行资源1811被配置为使用如通过所检索到的配置所指定的块片。
在一些实施例中,在2109处提交或者引退指令。
图22图示使用存储器寻址来执行TILECONFIG指令的更详细描述。通常,这由诸如上面详述的执行电路这样的执行电路在已从存储器中检索到描述之后执行。虽然未图示,但是在一些实施例中,首先执行检查以确定是否支持块片。通常通过CPUID检查来发现支持。
在2201处,确定是否支持调色板ID。例如,CPUID是否声明支持此ID?如果不是,则在2203处发生一般保护故障。
在2205处,读取第一块片特定分组。例如,读取用于块片0(T0)的行数和列数。
在2207处确定所读取的分组是否有效。例如,如果行数或列数中的一个(不是两者)被设置为0,则分组无效并且配置暂停并且在2203处块片未被认为是在使用中。例如,当行或列中的一个(不是两者)为零时,发生无效组。附加地,当用于行数的值大于所支持的行的最大值(通过针对如调色板表中所找到的调色板ID将调色板ID的块片字节大小除以每行的字节数来发现这一情况)时发生故障。另一潜在故障是当存在比支持的名称更多的名称时。
如果读取分组是有效的,则在2211处与读取分组相关联的块片被配置为使用在块片配置中通过分组所指定的行数和列数。块片中的元素的大小通过用于调色板ID的调色板表条目来设置。
在2213处确定是否已配置了所检索到的配置的所有块片。例如,是否已处理了所有可能的块片名称?在一些实施例中,当特定块片的行和列都是0时,则已处理了所有块片。
当尚未配置所有块片时,在2215处,块片编号被递增,使得将评估配置中的下一个块片。
在2217处,读取已递增的块片的分组。例如,读取用于块片1(T1)的行数和列数。在2207处确定所读取的分组是否有效等。
当已配置了所有块片时,然后指令在2209处完成。块片将被标记为在使用中以用于矩阵运算,例如,通过在寄存器中设置在使用中指示符。
vi.示例性伪代码
图23图示用于执行TILECONFIG指令的示例性伪代码。
B.块片加法
本文详述的是矩阵(块片)加法(“TILEADD”)指令及其执行的实施例。TILEADD指令是对计算机本身的改进,因为它提供用单个指令对数据值的矩阵(块片)进行相加的支持。特别地,TILEADD指令的执行引起第一源矩阵(块片)的元素与第二源矩阵(块片)的对应元素的逐元素加法并且将结果存储在目标矩阵(块片)的对应数据元素位置中。源矩阵和目标矩阵中的数据值的大小取决于指令和块片支持而变化。示例性大小包括但不限于16位、32位、64位、128位和256位。在一些实施例中,在源矩阵(块片)中没有对应元素的目标矩阵(块片)的行的元素被归零。
i.示例性执行
图24图示TILEADD指令的示例性执行。TILEADD指令格式包括用于操作码(例如,在图中示出为“TADDP{H,S}”)、目标操作数(例如,在图中示出为“目标矩阵(块片)”)以及两个源操作数(例如,在图中示出为“第一源矩阵(块片)”和“第二源矩阵(块片)”)的字段。
源和目标矩阵(块片)操作数字段表示第一源矩阵(块片)2401、第二源矩阵(块片)2403和目标矩阵(块片)2407。如早先详述的,矩阵(块片)可以被存储在寄存器的合集、存储器中的位置(例如,作为跨越式行)中,或者存储在执行电路可访问的其他存储形式中。
如所示,执行电路2405执行经解码的TADD指令以执行第一源矩阵(块片)2401和第二源矩阵(块片)2403的元素的逐元素加法并且将结果存储在目标矩阵(块片)2407的对应数据元素位置中。在一些实施例中,矩阵(块片)被配置为仅使用可能的行和列的子集。例如,矩阵(块片)可以具有多达16行和列以使用,但是仅使用每个中的4个。每个矩阵(块片)的配置通常通过在矩阵(块片)使用之前执行配置指令来完成。在此示例中,可能有N列和M行。第一源矩阵(块片)2401和第二源矩阵(块片)2403中的每一个均使用3行和3列。尽管图24的示例图示对两个3×3矩阵相加的示例,然而一般而言,TILEADD指令可在具有相同维度的任何两个矩阵(块片)(即,具有相同列数N和相同行数M的源矩阵(块片))上运算。
在一些实施例中,执行电路2405使用融合乘法加法器(FMA)的网格来通过将对两个源矩阵(块片)操作数相加的结果存储到目标矩阵(块片)2407的对应数据元素位置中来执行经解码的TILEADD指令。特别地,FMA的网格对于第一源矩阵(块片)2401的每个数据元素位置[行,列],生成该数据元素位置处的值与第二源矩阵(块片)2403的对应数据元素位置[行,列]处的值的和。参考示例源矩阵(块片)操作数2401,2403,执行电路2405生成第一源矩阵(块片)2401位置[0,0]和第二源矩阵(块片)2403位置[0,0]处的值的和(A+J)并且将结果存储在目标矩阵(块片)2407的位置[0,0]中,生成第一源矩阵(块片)2401位置[0,1]和第二源矩阵(块片)2403位置[0,1]处的值的和(B+K)并且将结果存储在目标矩阵(块片)2407的位置[0,1]中,依此类推。
ii.示例性格式
用于TILEADD指令的格式的实施例是TADDP{H/S}TMM1、TMM2、TMM3。在一些实施例中,TADDP{H/S}是指令的操作码助记符,其中S或H标识符指示源矩阵(块片)包括单精度(PS)还是半精度(PH)浮点数据值。TMM1是用于目标矩阵(块片)操作数的字段。TMM2和TMM3是用于矩阵(块片)源操作数的字段。在一些实施例中,TMM3字段是R/M值(诸如3646),TMM1字段是REG 3644,并且在3665中找到数据元素大小。
在实施例中,指令的编码包括间接地标识存储器中的多个索引目标位置的比例-索引-基数(SIB)类型存储器寻址操作数。在一个实施例中,SIB类型存储器操作数可以包括标识基地址寄存器的编码。基地址寄存器的内容可以表示存储器中基地址,根据该基地址来计算存储器中的特定目标位置的地址。例如,基地址可以是用于扩展向量指令的潜在目标位置的块中的第一位置的地址。在一个实施例中,SIB类型存储器操作数可以包括标识索引寄存器的编码。索引寄存器的每个元素可以指定可用于从基地址计算潜在目标位置的块内的相应目标位置的地址的索引或偏移值。在一个实施例中,SIB类型存储器操作数可以包括指定在计算相应目标地址时要应用于每个索引值的比例因子的编码。例如,如果比例因子值4被编码在SIB类型存储器操作数中,则可以将从索引寄存器的元素获得的每个索引值乘以4并且然后与基地址相加以计算目标地址。
在一个实施例中,形式vm32{x,y,z}的SIB类型存储器操作数可以标识使用SIB类型存储器寻址所指定的存储器操作数的向量数组。在此示例中,使用公共基寄存器、常数比例因子以及包含各个元素的向量索引寄存器来指定存储器地址的数组,每个元素都是32位索引值。向量索引寄存器可以是128位(例如,XMM)寄存器(vm32x)、256位(例如,YMM)寄存器(vm32y)或512位(例如,ZMM)寄存器(vm32z)。在另一实施例中,形式vm64{x,y,z}的SIB类型存储器操作数可以标识使用SIB类型存储器寻址所指定的存储器操作数的向量数组。在此示例中,使用公共基寄存器、常数比例因子以及包含各个元素的向量索引寄存器来指定存储器地址的数组,每个元素都是64位索引值。向量索引寄存器可以是128位(例如,XMM)寄存器(vm64x)、256位(例如,YMM)寄存器(vm64y)或512位(例如,ZMM)寄存器(vm64z)。
iii.执行的示例性方法
图25图示由处理器执行来处理TILEADD指令的方法的实施例。
在2501处,指令被提取。例如,TILEADD指令被提取。TILEADD指令包括用于操作码、第一和第二源矩阵(块片)操作数标识符以及目标矩阵(块片)操作数标识符的字段。在一些实施例中,从指令缓存中提取指令。源操作数和目标操作数由压缩数据构成。TILEADD指令的操作码指示将生成源操作数的和。在实施例中,操作码进一步指示源操作数由半精度浮点值还是单精度浮点值构成。
在2503处对所提取的指令进行解码。例如,所提取的TILEADD指令由诸如本文详述的解码电路这样的解码电路进行解码。
在2505处检索与经解码的指令的源矩阵(块片)操作数相关联的数据值并且(按需)对经解码的指令进行调度。例如,当源矩阵(块片)操作数中的一个或多个是存储器操作数时,检索来自所指示的存储器位置的数据。
在2507处,经解码的指令由诸如本文详述的执行电路(硬件)这样的执行电路(硬件)执行。对于TILEADD指令,执行将使执行电路对源数据执行逐元素矩阵加法运算。在一些实施例中,对经解码的矩阵加法运算指令的执行使执行电路针对第一源矩阵操作数的每个数据元素位置:将该数据元素位置处的第一数据值与第二源矩阵操作数的对应数据元素位置处的第二数据值相加,并且将相加的结果存储到目标矩阵操作数的对应数据元素位置中。
在一些实施例中,当与第一源矩阵(块片)操作数相关联的数据元素行的数量不同于与第二源矩阵(块片)操作数相关联的数据元素行的数量或者不同于与目标矩阵(块片)操作数相关联的数据元素行的数量时生成故障。类似地,当与第一源矩阵(块片)操作数相关联的数据元素列的数量不同于与第二源矩阵(块片)操作数相关联的数据元素列的数量或者不同于与目标矩阵(块片)操作数关联的数据元素列的数量不同时生成故障。如本文别处所描述的,可以通过执行TILECONFIG指令来设置用于每个矩阵的维度、用于每个矩阵的数据元素的元素大小以及其他配置。
如本文别处所描述的,TILECONFIG指令的成功执行启用后续块片运算符并且设置指示对应的代码在配置了块片的区域中的状态变量。在一些实施例中,如果块片模式被确定为未激活,则生成故障作为执行TILEADD指令的一部分。例如,执行电路可检查作为TILECONFIG指令的成功执行的一部分而设置的状态变量是否指示块片模式是激活的。
在一些实施例中,在2509处提交或者引退指令。
图26图示描述由处理器执行来处理TILEADD指令的方法的示例过程。例如,过程2601图示用于当源矩阵(块片)操作数包含半精度元素时执行TILEADD运算的示例方法。过程2701图示用于当源矩阵(块片)操作数包含单精度元素时执行TILEADD运算的示例方法。
如所示,过程2601确定下列中的任一个是否为真:1)块片模式是否未激活?2)目标矩阵(块片)操作数和第一源矩阵(块片)操作数是否具有不同的列数?3)目标矩阵(块片)操作数和第二源矩阵(块片)操作数是否具有不同的列数?4)目标矩阵(块片)操作数和第一源矩阵(块片)操作数是否具有不同的行数?5)目标矩阵(块片)操作数和第二源矩阵(块片)操作数是否具有不同的行数?6)目标矩阵(块片)操作数是否具有多于指定的最大列数的列数?7)第一源矩阵(块片)操作数是否具有多于指定的最大列数的列数?8)第二源矩阵(块片)操作数是否具有多于指定的最大列数的列数?如果这些中的任一个为真,则生成故障。
如果上述条件均不为真,则执行电路针对所标识的目标矩阵(块片)操作数的每个配置的行和列来将来自第一源矩阵(块片)操作数和第二源矩阵(块片)操作数的对应元素值的和写入到目标矩阵(块片)操作数的对应数据元素位置中。在一些实施例中,在源矩阵(块片)中没有对应列的目标矩阵(块片)的行的未配置的元素被归零。
v.示例
示例1一种处理器,所述处理器包括:解码电路,所述解码电路用于对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码;以及执行电路,所述执行电路用于执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置:将该数据元素位置处的第一数据值与所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值相加,并且将所述相加的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
示例2根据示例1所述的处理器,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是存储器位置。
示例3根据示例1所述的处理器,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是压缩数据寄存器。
示例4根据示例1至3中的任一项所述的处理器,其中,所述执行电路包括多个融合乘法加法器。
示例5根据示例1所述的处理器,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括半精度浮点值。
示例6根据示例1所述的处理器,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括单精度浮点值。
示例7根据示例1至6中的任一项所述的处理器,其中,当所述第一源矩阵操作数具有与所述第二源矩阵操作数不同数量的数据元素时生成故障。
示例8根据示例1至7中的任一项所述的处理器,其中,当与所述第一源矩阵操作数相关联的行数不同于与所述第二源矩阵操作数相关联的行数时生成故障。
示例9根据示例1至8中的任一项所述的处理器,其中,当与所述第一源矩阵操作数相关联的列数不同于与所述第二源矩阵操作数相关联的列数时生成故障。
示例10根据示例1至9中的任一项所述的处理器,其中,所述执行电路进一步检查指示矩阵运算模式是否激活的状态变量,并且其中,当确定了所述矩阵运算模式未激活时生成故障。
示例11提供一种方法,所述方法包括:对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码;以及执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置:将该数据元素位置处的第一数据值与所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值相加,并且将所述相加的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
示例12根据示例11所述的方法,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是存储器位置。
示例13根据示例11所述的方法,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是压缩数据寄存器。
示例14根据示例11至13中的任一项所述的方法,其中,所述执行电路包括多个融合乘法加法器。
示例15根据示例11所述的方法,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括半精度浮点值。
示例16根据示例11所述的方法,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括单精度浮点值。
示例17示例11至16中的任一项所述的方法,其中,当所述第一源矩阵操作数具有与所述第二源矩阵操作数不同数量的数据元素时生成故障。
示例18根据示例11至17中的任一项所述的方法,其中,当与所述第一源矩阵操作数相关联的行数不同于与所述第二源矩阵操作数相关联的行数时生成故障。
示例19根据示例11至18所述的方法,其中,当与所述第一源矩阵操作数相关联的列数不同于与所述第二源矩阵操作数相关联的列数时生成故障。
示例20根据示例11至19中的任一项所述的方法,其中,执行经解码的指令包括检查指示矩阵运算模式是否激活的状态变量,并且其中,当确定了所述矩阵运算模式未激活时生成故障。
示例21提供一种存储指令的非暂时性机器可读介质,所述指令当由处理器执行时使所述处理器执行方法,所述方法包括:对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码;以及执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置:将该数据元素位置处的第一数据值与所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值相加,并且将所述相加的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
示例22根据示例21所述的非暂时性机器可读介质,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是存储器位置。
示例23根据示例21所述的非暂时性机器可读介质,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是压缩数据寄存器。
示例24根据示例21所述的非暂时性机器可读介质,其中,所述执行电路包括多个融合乘法加法器。
示例25根据示例21所述的非暂时性机器可读介质,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括半精度浮点值。
示例26根据示例21所述的非暂时性机器可读介质,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包含单精度浮点值。
示例27根据示例21至26中的任一项所述的非暂时性机器可读介质,其中,当所述第一源矩阵操作数具有与所述第二源矩阵操作数不同数量的数据元素时生成故障。
示例28根据示例21至27中的任一项所述的非暂时性机器可读介质,其中,当与所述第一源矩阵操作数相关联的行数不同于与所述第二源矩阵操作数相关联的行数时生成故障。
示例29根据示例21至28中的任一项所述的非暂时性机器可读介质,其中,当与所述第一源矩阵操作数相关联的列数不同于与所述第二源矩阵操作数相关联的列数时生成故障。
示例30根据示例21至29中的任一项所述的非暂时性机器可读介质,其中,执行经解码的指令包括检查指示矩阵运算模式是否激活的状态变量,并且其中,当确定了所述矩阵运算模式未激活时生成故障。
示例31提供一种系统,所述系统包括:处理器;以及加速器,所述加速器耦合到所述处理器,所述加速器包括:解码电路,所述解码电路用于对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码;以及执行电路,所述执行电路用于执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置:将该数据元素位置处的第一数据值与所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值相加,并且将所述相加的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
示例32根据示例31所述的系统,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是存储器位置。
示例33根据示例31所述的系统,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是压缩数据寄存器。
示例34根据示例31至33中的任一项所述的系统,其中,所述执行电路包括多个融合乘法加法器。
示例35根据示例31所述的系统,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括半精度浮点值。
示例36根据示例31所述的系统,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括单精度浮点值。
示例37根据示例31至36中的任一项所述的系统,其中,当所述第一源矩阵操作数具有与所述第二源矩阵操作数不同数量的数据元素时生成故障。
示例38根据示例31至37中的任一项所述的系统,其中,当与所述第一源矩阵操作数相关联的行数不同于与所述第二源矩阵操作数相关联的行数时生成故障。
示例39根据示例31至38中的任一项所述的系统,其中,当与所述第一源矩阵操作数相关联的列数不同于与所述第二源矩阵操作数相关联的列数时生成故障。
示例40根据示例31至39中的任一项所述的系统,其中,所述执行电路进一步检查指示矩阵运算模式是否激活的状态变量,并且其中,当确定了所述矩阵运算模式未激活时生成故障。
C.块片减法
本文详述的是矩阵(块片)减法(“TILESUB”)指令及其执行的实施例。TILESUB指令是对计算机本身的改进,因为它提供用单个指令对数据值的矩阵(块片)进行相减的支持。特别地,TILESUB指令的执行引起从第一源矩阵(块片)的对应元素中逐元素地减去第二源矩阵(块片)的元素并且将结果存储在目标矩阵(块片)的对应数据元素位置中。源矩阵和目标矩阵中的数据值的大小取决于指令和块片支持而变化。示例性大小包括但不限于16位、32位、64位、128位和256位。在一些实施例中,在源矩阵(块片)中没有对应元素的目标矩阵(块片)的行的元素被归零。
i.示例性执行
图28图示TILESUB指令的示例性执行。TILESUB指令格式包括用于操作码(例如,在图中示出为“TSUBP{H/S}”)、目标操作数(例如,在图中示出为“目标矩阵(块片)”)和两个源操作数(例如,在图中示出为“第一源矩阵(块片)”和“第二源矩阵(块片)”)的字段。
源和目标矩阵(块片)操作数字段表示第一源矩阵(块片)2801、第二源矩阵(块片)2803和目标矩阵(块片)2807。如早先详述的,矩阵(块片)可以被存储在寄存器的合集、存储器中的位置(例如,作为跨越式行)中,或者存储在执行电路可访问的其他存储形式中。
如所示,执行电路2805执行经解码的TSUB指令以执行第一源矩阵(块片)2801和第二源矩阵(块片)2803的元素的逐元素减法并且将结果存储在目标矩阵(块片)2807的对应数据元素位置中。在一些实施例中,矩阵(块片)被配置为仅使用可能的行和列的子集。例如,矩阵(块片)可以具有多达16行和列供使用,但是仅使用每个中的4个。每个矩阵(块片)的配置通常通过在矩阵(块片)使用之前执行配置指令来完成。在此示例中,可能有N列和M行。第一源矩阵(块片)2801和第二源矩阵(块片)2803中的每一个均使用3行和3列。尽管图28的示例图示两个3×3矩阵相减的示例,然而一般而言,TILESUB指令可在具有相同维度的任何两个矩阵(块片)(即,具有相同列数N和相同行数M的源矩阵(块片))上运算。
在一些实施例中,执行电路2805使用融合乘法加法器(FMA)的网格来通过将两个源矩阵(块片)操作数相减的结果存储到目标矩阵(块片)2807的对应数据元素位置中来执行经解码的TILESUB指令。特别地,FMA的网格针对第一源矩阵(块片)2801的每个数据元素位置[行,列]来生成指示该数据元素位置处的值与第二源矩阵(块片)2803的对应数据元素位置[行,列]处的值之间的差异的结果值。参考示例源矩阵(块片)操作数2801和2803,执行电路2805将第一源矩阵(块片)2801在位置[0,0]处的值减去第二源矩阵(块片)2803在位置[0,0]处的值(A-J)并且将结果存储在目标矩阵(块片)2807的位置[0,0]中,将第一源矩阵(块片)2803在位置[0,1]处的值减去第二源矩阵(块片)2803在位置[0,1]处的值(B-K)并且将结果存储在目标矩阵(块片)2807的位置[0,1]中,依此类推。
ii.示例性格式
用于TILESUB指令的格式的实施例是TSUBP{H/S}TMM1、TMM2、TMM3。在一些实施例中,TSUBP{H/S}是指令的操作码助记符,其中S或H标识符指示源矩阵(块片)包括单精度(PS)还是半精度(PH)浮点数据值。TMM1是用于目标矩阵(块片)操作数的字段。TMM2和TMM3是用于矩阵(块片)源操作数的字段。在一些实施例中,TMM3字段是R/M值(诸如3646),TMM1字段是REG 3644,并且在3665中找到数据元素大小。
在实施例中,指令的编码包括间接地标识存储器中的多个索引目标位置的比例-索引-基数(SIB)类型存储器寻址操作数。在一个实施例中,SIB类型存储器操作数可以包括标识基地址寄存器的编码。基地址寄存器的内容可以表示存储器中基地址,根据该基地址来计算存储器中的特定目标位置的地址。例如,基地址可以是用于扩展向量指令的潜在目标位置的块中的第一位置的地址。在一个实施例中,SIB类型存储器操作数可以包括标识索引寄存器的编码。索引寄存器的每个元素可以指定可用于从基地址计算潜在目标位置的块内的相应目标位置的地址的索引或偏移值。在一个实施例中,SIB类型存储器操作数可以包括指定在计算相应目标地址时要应用于每个索引值的比例因子的编码。例如,如果比例因子值4被编码在SIB类型存储器操作数中,则可以将从索引寄存器的元素获得的每个索引值乘以4并且然后与基地址相加以计算目标地址。
在一个实施例中,形式vm32{x,y,z}的SIB类型存储器操作数可以标识使用SIB类型存储器寻址所指定的存储器操作数的向量数组。在此示例中,使用公共基寄存器、常数比例因子以及包含各个元素的向量索引寄存器来指定存储器地址的数组,每个元素都是32位索引值。向量索引寄存器可以是128位(例如,XMM)寄存器(vm32x)、256位(例如,YMM)寄存器(vm32y)或512位(例如,ZMM)寄存器(vm32z)。在另一实施例中,形式vm64{x,y,z}的SIB类型存储器操作数可以标识使用SIB类型存储器寻址所指定的存储器操作数的向量数组。在此示例中,使用公共基寄存器、常数比例因子以及包含各个元素的向量索引寄存器来指定存储器地址的数组,每个元素都是64位索引值。向量索引寄存器可以是128位(例如,XMM)寄存器(vm64x)、256位(例如,YMM)寄存器(vm64y)或512位(例如,ZMM)寄存器(vm64z)。
iii.执行的示例性方法
图29图示由处理器执行来处理TILESUB指令的方法的实施例。
在2901处,指令被提取。例如,TILESUB指令被提取。TILESUB指令包括用于操作码、第一和第二源矩阵(块片)操作数标识符以及目标矩阵(块片)操作数标识符的字段。在一些实施例中,从指令缓存中提取指令。源操作数和目标操作数由压缩数据构成。TILESUB指令的操作码指示将生成源操作数的逐元素减法。在实施例中,操作码进一步指示源操作数由半精度浮点值还是单精度浮点值构成。
在2903处对所提取的指令进行解码。例如,所提取的TILESUB指令由诸如本文详述的解码电路这样的解码电路进行解码。
在2905处检索与经解码的指令的源矩阵(块片)操作数相关联的数据值,并且(按需)对经解码的指令进行调度。例如,当源矩阵(块片)操作数中的一个或多个是存储器操作数时,检索来自所指示的存储器位置的数据。
在2907处,经解码的指令由诸如本文详述的执行电路(硬件)这样的执行电路(硬件)执行。对于TILESUB指令,执行将使执行电路对源数据执行逐元素矩阵减法运算。在一些实施例中,经解码矩阵减法运算指令的执行使执行电路针对第一源矩阵操作数的每个数据元素位置:将该数据元素位置处的第一数据值减去所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值,并且将减法的结果存储到目标矩阵操作数的对应数据元素位置中。
在一些实施例中,当与第一源矩阵(块片)操作数相关联的数据元素行的数量不同于与第二源矩阵(块片)操作数相关联的数据元素行的数量或者不同于与目标矩阵(块片)操作数相关联的数据元素行的数量时生成故障。类似地,当与第一源矩阵(块片)操作数相关联的数据元素列的数量不同于与第二源矩阵(块片)操作数相关联的数据元素列的数量或者不同于与目标矩阵(块片)操作数相关联的数据元素列的数量时生成故障。如本文别处所描述的,可通过执行TILECONFIG指令来设置用于每个矩阵的维度、用于每个矩阵的数据元素的元素大小以及其他配置。
如本文别处所描述的,TILECONFIG指令的成功执行启用后续块片运算符并且设置指示对应的代码在配置了块片的区域中的状态变量。在一些实施例中,如果块片模式被确定为未激活,则生成故障作为执行TILE SUBTRACT指令的一部分。例如,执行电路可检查作为TILECONFIG指令的成功执行的一部分而设置的状态变量是否指示块片模式是激活的。
在一些实施例中,在2909处提交或者引退指令。
图30图示描述由处理器执行来处理TILESUB指令的方法的示例过程。例如,过程3001图示用于当源矩阵(块片)操作数包含半精度元素时执行TILESUB运算的示例方法。如图31中所示的过程3101图示用于当源矩阵(块片)操作数包含单精度元素时执行TILESUB运算的示例方法。
如所示,过程3001确定下列中的任一个是否为真:1)块片模式是否未激活?2)目标矩阵(块片)操作数和第一源矩阵(块片)操作数是否具有不同的列数?3)目标矩阵(块片)操作数和第二源矩阵(块片)操作数是否具有不同的列数?4)目标矩阵(块片)操作数和第一源矩阵(块片)操作数是否具有不同的行数?5)目标矩阵(块片)操作数和第二源矩阵(块片)操作数是否具有不同的行数?6)目标矩阵(块片)操作数是否具有多于指定的最大列数的列数?7)第一源矩阵(块片)操作数是否具有多于指定的最大列数的列数?8)第二源矩阵(块片)操作数是否具有多于指定的最大列数的列数?如果这些中的任一个为真,则产生故障。
如果上述条件均不为真,则执行电路针对所标识的目标矩阵(块片)操作数的每个配置的行和列来将来自第一源矩阵(块片)操作数和第二源矩阵(块片)操作数的对应的元素值的和写入到目标矩阵(块片)操作数的对应的数据元素位置中。在一些实施例中,在源矩阵(块片)中没有对应列的目标矩阵(块片)的行的未配置的元素被归零。
iv.示例
示例1一种处理器,所述处理器包括:解码电路,所述解码电路用于对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码;以及执行电路,所述执行电路用于执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置:将该数据元素位置处的第一数据值减去所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值,并且将所述减法的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
示例2根据示例1所述的处理器,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是存储器位置。
示例3根据示例1所述的处理器,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是压缩数据寄存器。
示例4根据示例1至3中的任一项所述的处理器,其中,所述执行电路包括多个融合乘法加法器。
示例5根据示例1所述的处理器,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括半精度浮点值。
示例6根据示例1的处理器,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括单精度浮点值。
示例7根据示例1至6中的任一项所述的处理器,其中,当所述第一源矩阵操作数具有与所述第二源矩阵操作数不同数量的数据元素时生成故障。
示例8根据示例1至7中的任一项所述的处理器,其中,当与所述第一源矩阵操作数相关联的行数不同于与所述第二源矩阵操作数相关联的行数时生成故障。
示例9根据示例1至8中的任一项所述的处理器,其中,当与所述第一源矩阵操作数相关联的列数不同于与所述第二源矩阵操作数相关联的列数时生成故障。
示例10示例1至9中的任一项所述的处理器,其中,所述执行电路进一步检查指示矩阵运算模式是否激活的状态变量,并且其中,当确定了所述矩阵运算模式未激活时生成故障。
示例11提供一种方法,所述方法包括:对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码;以及执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置:将该数据元素位置处的第一数据值减去所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值,并且将所述减法的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
示例12根据示例11所述的方法,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是存储器位置。
示例13根据示例11所述的方法,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是压缩数据寄存器。
示例14根据示例11至13中的任一项所述的方法,其中,所述执行电路包括多个融合乘法加法器。
示例15根据示例11所述的方法,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括半精度浮点值。
示例16根据示例11所述的方法,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括单精度浮点值。
示例17根据示例11至16中的任一项所述的方法,其中,当所述第一源矩阵操作数具有与所述第二源矩阵操作数不同数量的数据元素时生成故障。
示例18根据示例11至17中的任一项所述的方法,其中,当与所述第一源矩阵操作数相关联的行数不同于与所述第二源矩阵操作数相关联的行数时生成故障。
示例19根据示例11至18所述的方法,其中,当与所述第一源矩阵操作数相关联的列数不同于与所述第二源矩阵操作数相关联的列数时生成故障。
示例20根据示例11至19中的任一项所述的方法,其中,执行经解码的指令包括检查指示矩阵运算模式是否激活的状态变量,并且其中,当确定了所述矩阵运算模式未激活时生成故障。
示例21提供一种存储指令的非暂时性机器可读介质,所述指令当由处理器执行时使所述处理器执行方法,所述方法包括:对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码;以及执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置:将该数据元素位置处的第一数据值减去所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值,并且将所述减法的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
示例22根据示例21所述的非暂时性机器可读介质,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是存储器位置。
示例23根据示例21所述的非暂时性机器可读介质,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是压缩数据寄存器。
示例24根据示例21所述的非暂时性机器可读介质,其中,所述执行电路包括多个融合乘法加法器。
示例25根据示例21所述的非暂时性机器可读介质,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括半精度浮点值。
示例26根据示例21所述的非暂时性机器可读介质,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包含单精度浮点值。
示例27根据示例21至26中的任一项所述的非暂时性机器可读介质,其中,当所述第一源矩阵操作数具有与所述第二源矩阵操作数不同数量的数据元素时生成故障。
示例28根据示例21至27中的任一项所述的非暂时性机器可读介质,其中,当与所述第一源矩阵操作数相关联的行数不同于与所述第二源矩阵操作数相关联的行数时生成故障。
示例29根据示例21至28中的任一项所述的非暂时性机器可读介质,其中,当与所述第一源矩阵操作数相关联的列数不同于与所述第二源矩阵操作数相关联的列数时生成故障。
示例30根据示例21至29中的任一项所述的非暂时性机器可读介质,其中,执行经解码的指令包括检查指示矩阵运算模式是否激活的状态变量,并且其中,当确定了所述矩阵运算模式未激活时生成故障。
示例31提供一种系统,所述系统包括:处理器;以及加速器,所述加速器耦合到所述处理器,所述加速器包括:解码电路,所述解码电路用于对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码;以及执行电路,所述执行电路用于执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置:将该数据元素位置处的第一数据值减去所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值,并且将所述减法的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
示例32根据示例31所述的系统,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是存储器位置。
示例33根据示例31所述的系统,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是压缩数据寄存器。
示例34根据示例31至33中的任一项所述的系统,其中,所述执行电路包括多个融合乘法加法器。
示例35根据示例31所述的系统,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括半精度浮点值。
示例36根据示例31所述的系统,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括单精度浮点值。
示例37根据示例31至36中的任一项所述的系统,其中,当所述第一源矩阵操作数具有与所述第二源矩阵操作数不同数量的数据元素时生成故障。
示例38根据示例31至37中的任一项所述的系统,其中,当与所述第一源矩阵操作数相关联的行数不同于与所述第二源矩阵操作数相关联的行数时生成故障。
示例39根据示例31至38中的任一项所述的系统,其中,当与所述第一源矩阵操作数相关联的列数不同于与所述第二源矩阵操作数相关联的列数时生成故障。
示例40根据示例31至39中的任一项所述的系统,其中,所述执行电路进一步检查指示矩阵运算模式是否激活的状态变量,并且其中,当确定了所述矩阵运算模式未激活时生成故障。
D.块片乘法
本文详述的是矩阵(块片)乘法(“TILEMUL”)指令及其执行的实施例。TILEMUL指令是对计算机本身的改进,因为它提供用单个指令执行数据值的矩阵(块片)的逐元素乘法的支持。特别地,TILEMUL指令的执行引起第一源矩阵(块片)的元素与第二源矩阵(块片)的对应元素的逐元素乘法并且将结果存储在目标矩阵(块片)的对应的数据元素位置中。源矩阵和目标矩阵中的数据值的大小取决于指令和块片支持而变化。示例性大小包括但不限于16位、32位、64位、128位和256位。在一些实施例中,在源矩阵(块片)中没有对应元素的目标矩阵(块片)的行的元素被归零。
i.示例性执行
图32图示TILEMUL指令的示例性执行。TILEMUL指令格式包括用于操作码(例如,在图中示出为“TMULP{H,S}”)、目标操作数(例如,在图中示出为“目标矩阵(块片)”)以及两个源操作数(例如,在图中示出为“第一源矩阵(块片)”和“第二源矩阵(块片)”)的字段。
源和目标矩阵(块片)操作数字段表示第一源矩阵(块片)3201、第二源矩阵(块片)3203和目标矩阵(块片)3207。如早先详述的,矩阵(块片)可以被存储在寄存器的合集,存储器中的位置(例如,作为跨越式行)中,或者存储在执行电路可访问的其他存储形式中。
如所示,执行电路3205执行经解码的TMUL指令以执行第一源矩阵(块片)3201和第二源矩阵(块片)3203的元素的逐元素乘法并且将结果存储在目标矩阵(块片)3207的对应数据元素位置中。在一些实施例中,矩阵(块片)被配置为仅使用可能的行和列的子集。例如,矩阵(块片)可以具有多达16行和列供使用,但是仅使用每个中的4个。每个矩阵(块片)的配置通常通过在矩阵(块片)使用之前执行配置指令来完成。在此示例中,可能有N列和M行。第一源矩阵(块片)3201和第二源矩阵(块片)3203中的每一个均使用3行和3列。尽管图32的示例图示执行两个3×3矩阵的逐元素乘法的示例,然而一般而言,TILEMUL指令可在具有相同维度的任何两个矩阵(块片)(即,具有相同列数N和相同行数M的源矩阵(块片))上运算。
在一些实施例中,执行电路3205使用融合乘法加法器(FMA)的网格来通过将执行两个源矩阵(块片)操作数的逐元素乘法的结果存储到目标矩阵(块片)3207的对应的数据元素位置中来执行经解码的TILEMUL指令。特别地,FMA的网格针对第一源矩阵(块片)3201的每个数据元素位置[行,列]来生成该数据元素位置处的值与第二源矩阵(块片)3203的对应的数据元素位置[行,列]处的值的相乘。参考示例源矩阵(块片)操作数3201、3203,执行电路3205将第一源矩阵(块片)3201位置[0,0]处的值乘以第二源矩阵(块片)3203位置[0,0]处的值(A*J)并且将结果存储在目标矩阵(块片)3207的位置[0,0]中,将第一源矩阵(块片)3201位置[0,1]处的值乘以第二源矩阵(块片)3203位置[0,1]处的值(B*K)并且将结果存储在目标矩阵(块片)3207的位置[0,1]中,依此类推。
ii.示例性格式
用于TILEMUL指令的格式的实施例是TMULP{H/S}TMM1、TMM2、TMM3。在一些实施例中,TMULP{H/S}是指令的操作码助记符,其中S或H标识符指示源矩阵(块片)包括单精度(PS)还是半精度(PH)浮点数据值。TMM1是用于目标矩阵(块片)操作数的字段。TMM2和TMM3是用于矩阵(块片)源操作数的字段。在一些实施例中,TMM3字段是R/M值(诸如3646),TMM1字段是REG 3644,并且在3665中找到数据元素大小。
在实施例中,指令的编码包括间接地标识存储器中的多个索引目标位置的比例-索引-基数(SIB)类型存储器寻址操作数。在一个实施例中,SIB类型存储器操作数可以包括标识基地址寄存器的编码。基地址寄存器的内容可以表示存储器中基地址,根据该基地址来计算存储器中的特定目标位置的地址。例如,基地址可以是用于扩展向量指令的潜在目标位置的块中的第一位置的地址。在一个实施例中,SIB类型存储器操作数可以包括标识索引寄存器的编码。索引寄存器的每个元素可以指定可用于从基地址计算潜在目标位置的块内的相应目标位置的地址的索引或偏移值。在一个实施例中,SIB类型存储器操作数可以包括指定在计算相应目标地址时要应用于每个索引值的比例因子的编码。例如,如果比例因子值4被编码在SIB类型存储器操作数中,则可以将从索引寄存器的元素获得的每个索引值乘以4并且然后与基地址相加以计算目标地址。
在一个实施例中,形式vm32{x,y,z}的SIB类型存储器操作数可以标识使用SIB类型存储器寻址所指定的存储器操作数的向量数组。在此示例中,使用公共基寄存器、常数比例因子以及包含各个元素的向量索引寄存器来指定存储器地址的数组,每个元素都是32位索引值。向量索引寄存器可以是128位(例如,XMM)寄存器(vm32x)、256位(例如,YMM)寄存器(vm32y)或512位(例如,ZMM)寄存器(vm32z)。在另一实施例中,形式vm64{x,y,z}的SIB类型存储器操作数可以标识使用SIB类型存储器寻址所指定的存储器操作数的向量数组。在此示例中,使用公共基寄存器、常数比例因子以及包含各个元素的向量索引寄存器来指定存储器地址的数组,每个元素都是64位索引值。向量索引寄存器可以是128位(例如,XMM)寄存器(vm64x)、256位(例如,YMM)寄存器(vm64y)或512位(例如,ZMM)寄存器(vm64z)。
iii.执行的示例性方法
图33图示由处理器执行来处理TILEMUL指令的方法的实施例。
在3301处,指令被提取。例如,TILEMUL指令被提取。TILEMUL指令包括用于操作码、第一和第二源矩阵(块片)操作数标识符以及目标矩阵(块片)操作数标识符的字段。在一些实施例中,从指令缓存中提取指令。源操作数和目标操作数由压缩数据构成。TILEMUL指令的操作码指示将生成源操作数的和。在实施例中,操作码进一步指示源操作数由半精度浮点值还是单精度浮点值构成。
在3303处对所提取的指令进行解码。例如,所提取的TILEMUL指令由诸如本文详述的解码电路这样的解码电路进行解码。
在3305处检索与经解码的指令的源矩阵(块片)操作数相关联的数据值,并且(按需)对经解码的指令进行调度。例如,当源矩阵(块片)操作数中的一个或多个是存储器操作数时,检索来自所指示的存储器位置的数据。
在3307处,经解码的指令由诸如本文详述的执行电路(硬件)这样的执行电路(硬件)执行。对于TILEMUL指令,该执行将使执行电路对源数据执行逐元素矩阵乘法运算。在一些实施例中,经解码矩阵乘法运算指令的执行使执行电路针对第一源矩阵操作数的每个数据元素位置:将该数据元素位置处的第一数据值乘以第二源矩阵操作数的对应数据元素位置处的第二数据值,并且将乘法的结果存储到目标矩阵操作数的对应数据元素位置中。
在一些实施例中,当与第一源矩阵(块片)操作数相关联的数据元素行的数量不同于与第二源矩阵(块片)操作数相关联的数据元素行的数量或者不同于与目标矩阵(块片)操作数相关联的数据元素行的数量时生成故障。类似地,当与第一源矩阵(块片)操作数相关联的数据元素列的数量不同于与第二源矩阵(块片)操作数相关联的数据元素列的数量或者不同于与目标矩阵(块片)操作数相关联的数据元素列的数量时生成故障。如本文别处所描述的,可通过执行TILECONFIG指令来设置用于每个矩阵的维度、用于每个矩阵的数据元素的元素大小以及其他配置。
如本文别处所描述的,TILECONFIG指令的成功执行启用后续TILE运算符并且设置指示对应的代码在配置了块片的区域中的状态变量。在一些实施例中,如果块片模式被确定为未激活,则生成故障作为执行TILEMUL指令的一部分。例如,执行电路可检查作为TILECONFIG指令的成功执行的一部分而设置的状态变量是否指示块片模式是激活的。
在一些实施例中,在3309处提交或者引退指令。
图34图示描述由处理器执行来处理TILEMUL指令的方法的示例过程。例如,过程3401图示用于当源矩阵(块片)操作数包含半精度元素时执行TILEMUL运算的示例方法。如图35中所示的过程3501图示用于当源矩阵(块片)操作数包含单精度元素时执行TILEMUL运算的示例方法。
如所示,过程3401确定下列中的任一个是否为真:1)块片模式是否未激活?2)目标矩阵(块片)操作数和第一源矩阵(块片)操作数是否具有不同的列数?3)目标矩阵(块片)操作数和第二源矩阵(块片)操作数是否具有不同的列数?4)目标矩阵(块片)操作数和第一源矩阵(块片)操作数是否具有不同的行数?5)目标矩阵(块片)操作数和第二源矩阵(块片)操作数是否具有不同的行数?6)目标矩阵(块片)操作数是否具有多于指定的最大列数的列数?7)第一源矩阵(块片)操作数是否具有多于指定的最大列数的列数?8)第二源矩阵(块片)操作数是否具有多于指定的最大列数的列数?如果这些中的任一个为真,则生成故障。
如果上述条件均不为真,则执行电路针对所标识的目标矩阵(块片)操作数的每个配置的行和列来将来自第一源矩阵(块片)操作数和第二源矩阵(块片)操作数的对应的元素值的和写入到目标矩阵(块片)操作数的对应的数据元素位置中。在一些实施例中,在源矩阵(块片)中没有对应列的目标矩阵(块片)的行的未配置的元素被归零。
iv.示例
示例1一种处理器,所述处理器包括:解码电路,所述解码电路用于对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码;以及执行电路,所述执行电路用于执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置:将该数据元素位置处的第一数据值乘以所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值,并且将所述乘法的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
示例2根据示例1所述的处理器,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是存储器位置。
示例3根据示例1所述的处理器,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是压缩数据寄存器。
示例4根据示例1至3中的任一项所述的处理器,其中,所述执行电路包括多个融合乘法加法器。
示例5根据示例1所述的处理器,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括半精度浮点值。
示例6根据示例1所述的处理器,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括单精度浮点值。
示例7示例1至6中的任一项所述的处理器,其中,当所述第一源矩阵操作数具有与所述第二源矩阵操作数不同数量的数据元素时生成故障。
示例8根据示例1至7中的任一项所述的处理器,其中,当与所述第一源矩阵操作数相关联的行数不同于与所述第二源矩阵操作数相关联的行数时生成故障。
示例9根据示例1至8中的任一项所述的处理器,其中,当与所述第一源矩阵操作数相关联的列数不同于与所述第二源矩阵操作数相关联的列数时生成故障。
示例10根据示例1至9中的任一项所述的处理器,其中,所述执行电路进一步检查指示矩阵运算模式是否激活的状态变量,并且其中,当确定了所述矩阵运算模式未激活时生成故障。
示例11提供一种方法,所述方法包括:对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码;以及执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置:将该数据元素位置处的第一数据值乘以所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值,并且将所述乘法的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
示例12根据示例11所述的方法,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是存储器位置。
示例13根据示例11所述的方法,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是压缩数据寄存器。
示例14根据示例11至13中的任一项所述的方法,其中,所述执行电路包括多个融合乘法加法器。
示例15根据示例11所述的方法,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括半精度浮点值。
示例16根据示例11所述的方法,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括单精度浮点值。
示例17根据示例11至16中的任一项所述的方法,其中,当所述第一源矩阵操作数具有与所述第二源矩阵操作数不同数量的数据元素时生成故障。
示例18根据示例11至17中的任一项所述的方法,其中,当与所述第一源矩阵操作数相关联的行数不同于与所述第二源矩阵操作数相关联的行数时生成故障。
示例19根据示例11至18所述的方法,其中,当与所述第一源矩阵操作数相关联的列数不同于与所述第二源矩阵操作数相关联的列数时生成故障。
示例20根据示例11至19中的任一项所述的方法,其中,执行经解码的指令包括检查指示矩阵运算模式是否激活的状态变量,并且其中,当确定了所述矩阵运算模式未激活时生成故障。
示例21提供一种存储指令的非暂时性机器可读介质,所述指令当由处理器执行时使所述处理器执行方法,所述方法包括:对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码;以及执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置:将该数据元素位置处的第一数据值乘以所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值,并且将所述乘法的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
示例22根据示例21所述的非暂时性机器可读介质,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是存储器位置。
示例23根据示例21所述的非暂时性机器可读介质,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是压缩数据寄存器。
示例24根据示例21所述的非暂时性机器可读介质,其中,所述执行电路包括多个融合乘法加法器。
示例25根据示例21所述的非暂时性机器可读介质,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括半精度浮点值。
示例26根据示例21所述的非暂时性机器可读介质,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包含单精度浮点值。
示例27根据示例21至26中的任一项所述的非暂时性机器可读介质,其中,当所述第一源矩阵操作数具有与所述第二源矩阵操作数不同数量的数据元素时生成故障。
示例28根据示例21至27中的任一项所述的非暂时性机器可读介质,其中,当与所述第一源矩阵操作数相关联的行数不同于与所述第二源矩阵操作数相关联的行数时生成故障。
示例29根据示例21至28中的任一项所述的非暂时性机器可读介质,其中,当与所述第一源矩阵操作数相关联的列数不同于与所述第二源矩阵操作数相关联的列数时生成故障。
示例30根据示例21至29中的任一项所述的非暂时性机器可读介质,其中,执行经解码的指令包括检查指示矩阵运算模式是否激活的状态变量,并且其中,当确定了所述矩阵运算模式未激活时生成故障。
示例31提供一种系统,所述系统包括:处理器;以及加速器,所述加速器耦合到所述处理器,所述加速器包括:解码电路,所述解码电路用于对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码;以及执行电路,所述执行电路用于执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置:将该数据元素位置处的第一数据值乘以所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值,并且将所述乘法的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
示例32根据示例31所述的系统,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是存储器位置。
示例33根据示例31所述的系统,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是压缩数据寄存器。
示例34根据示例31至33中的任一项所述的系统,其中,所述执行电路包括多个融合乘法加法器。
示例35根据示例31所述的系统,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括半精度浮点值。
示例36根据示例31所述的系统,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括单精度浮点值。
示例37根据示例31至36中的任一项所述的系统,其中,当所述第一源矩阵操作数具有与所述第二源矩阵操作数不同数量的数据元素时生成故障。
示例38根据示例31至37中的任一项所述的系统,其中,当与所述第一源矩阵操作数相关联的行数不同于与所述第二源矩阵操作数相关联的行数时生成故障。
示例39根据示例31至38中的任一项所述的系统,其中,当与所述第一源矩阵操作数相关联的列数不同于与所述第二源矩阵操作数相关联的列数时生成故障。
示例40根据示例31至39中的任一项所述的系统,其中,所述执行电路进一步检查指示矩阵运算模式是否激活的状态变量,并且其中,当确定了所述矩阵运算模式未激活时生成故障。
V.详细的示例性系统、处理器和仿真
本文详述的是用于执行上述指令的硬件、软件等的示例。例如,下面描述的内容详述了指令执行的各方面,包括诸如提取、解码、调度、执行、引退等这样的各种流水线级。
指令集包括一种或多种指令格式。给定指令格式定义各种字段(位数、位的位置)以指定要执行的运算(操作码)和要对其执行该运算的操作数等等。通过指令模板(或子格式)的定义进一步分解一些指令格式。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包括的字段通常具有相同的顺序,但是至少一些具有不同的位位置,因为包括有更少的字段)并且/或者定义为使给定字段被不同地解释。因此,ISA的每个指令使用给定指令格式来表达(并且,如果被定义,则在该指令格式的指令模板中的给定一个中)并且包括用于指定运算和操作数的字段。例如,示例性加法指令具有特定操作码和指令格式,所述指令格式包括用于指定该操作码的操作码字段和用于选择操作数(源1/目标和源2)的操作数字段;并且此加法指令在指令流中的发生将在选择特定操作数的操作数字段中具有特定内容。
A.示例性指令格式
可以以不同的格式具体实现本文描述的指令的实施例。附加地,在下面详述示例性系统、架构和流水线。指令的实施例可以在这样的系统、架构和流水线上被执行,但是不限于详述的那些实施例。
VEX指令格式
VEX编码允许指令具有多于两个操作数,并且允许SIMD向量寄存器长于128位。VEX前缀的使用提供三操作数(或更多)语法。例如,先前的双操作数指令执行诸如A=A+B这样的运算,A=A+B覆写源操作数。VEX前缀的使用使得操作数能够执行诸如A=B+C这样的非破坏性运算。
图36A图示包括VEX前缀3602、真实操作码字段3630、Mod R/M字节3640、SIB字节3650、位移字段3662和IMM8 3672的示例性指令格式。图36B图示来自图36A的哪些字段组成完整操作码字段3674和基址运算字段3641。图36C图示来自图36A的哪些字段组成寄存器索引字段3644。
VEX前缀(字节0-2)3602以三字节形式被编码。第一字节是格式字段3690(VEX字节0,位[7:0]),其包含显式C4字节值(用于区分C4指令格式的唯一值)。第二至第三字节(VEX字节1-2)包括提供特定能力的许多位字段。具体地,REX字段3605(VEX字节1,位[7-5])由VEX.R位字段(VEX字节1,位[7]-R)、VEX.X位字段(VEX字节1,位[6]-X)和VEX.B位字段(VEX字节1,位[5]-B)构成。指令的其他字段对如本领域中已知的寄存器索引的低三位(rrr、xxx和bbb)进行编码,使得可以通过添加VEX.R、VEX.X和VEX.B来形成Rrrr、Xxxx和Bbbb。操作码映射字段3615(VEX字节1,位[4:0]-mmmmm)包括用于对隐含的前导操作码字节进行编码的内容。W字段3664(VEX字节2,位[7]-W)由符号VEX.W来表示,并且取决于指令而提供不同的功能。VEX.vvvv 3620(VEX字节2,位[6:3]-vvvv)的作用可以包括下列各项:1)VEX.vvvv对以反转(1补码)形式指定的第一源寄存器操作数进行编码,并且对于具有2个或更多个源操作数的指令有效;2)VEX.vvvv对以1补码形式指定用于某些向量移位的目标寄存器操作数进行编码;或者3)VEX.vvvv不对任何操作数进行编码,字段被保留并且应该包含1111b。如果VEX.L 3668大小字段(VEX字节2,位[2]-L)=0,则它指示128位向量;如果VEX.L=1,则它指示256位向量。前缀编码字段3625(VEX字节2,位[1:0]-pp)为基址运算字段3641提供附加位。
真实操作码字段3630(字节3)也被称为操作码字节。在此字段中指定了操作码的部分。
MOD R/M字段3640(字节4)包括MOD字段3642(位[7-6]),Reg字段3644(位[5-3])和R/M字段3646(位[2-0])。Reg字段3644的作用可以包括下列各项:对目标寄存器操作数或源寄存器操作数(Rrrr的rrr)进行编码,或者被视为操作码扩展而不用于对任何指令操作数进行编码。R/M字段3646的作用可以包括下列各项:对引用存储器地址的指令操作数进行编码,或者对目标寄存器操作数或源寄存器操作数进行编码。
比例、索引、基址(SIB)—比例字段3650(字节5)的内容包括SS3652(位[7-6]),其被用于存储器地址生成。先前已针对寄存器索引Xxxx和Bbbb引用了SIB.xxx 3654(位[5-3])和SIB.bbb 3656(位[2-0])的内容。
位移字段3662和立即数字段(IMM8)3672包含数据。
B.示例性寄存器架构
图37是根据本发明的一个实施例的寄存器架构3700的框图。在所图示的实施例中,存在512位宽的32个向量寄存器3710;这些寄存器被标记为zmm0至zmm31。较低的40个zmm寄存器的低阶256位被重叠在寄存器ymm0-15上。较低的40个zmm寄存器的低阶128位(ymm寄存器的低阶128位)被重叠在寄存器xmm0-15上。
通用寄存器3725—在所图示的实施例中,存在连同现有的x86寻址模式一起用于对存储器操作数进行寻址的十六个64位通用寄存器。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8至R15来引用。
标量浮点堆栈寄存器堆(x87堆栈)3745,其上混叠有MMX压缩整数平坦寄存器堆3750—在所图示的实施例中,x87堆栈是用于使用x87指令集扩展来对32/64/80位浮点数据执行标量浮点运算的八元素堆栈;而MMX寄存器用于对64位压缩整数数据执行运算,以及用于为在MMX和XMM寄存器之间执行的某些运算保存操作数。
在一些实施例中,使用物理寄存器上的覆盖来支持块片3720。例如,取决于实施例,块片可以利用16个1,024位寄存器、32个512位寄存器等。
本发明的替代实施例可以使用更宽或更窄的寄存器。附加地,本发明的替代实施例可以使用更多的、更少的或不同的寄存器堆和寄存器。
示例性核架构、处理器和计算机架构
处理器核可以以不同的方式实现,可以被实现用于不同的目的,并且可以在不同的处理器中实现。例如,这种核的实现方式可以包括:1)用于通用计算的通用有序核;2)用于通用计算的高性能通用乱序核;3)主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现方式可以包括:1)CPU,其包括旨在用于通用计算的一个或多个通用有序核和/或用于通用计算的一个或多个通用乱序核;2)协处理器,包括主要用于图形和/或科学(吞吐量)的一个或多个专用核。这种不同的处理器导致不同的计算机系统架构,其可以包括:1)在与CPU不同的芯片上的协处理器;2)在与CPU相同的封装中的单独管芯(die)上的协处理器;3)在与CPU相同的管芯上的协处理器(在这种情况下,这种协处理器有时被称为专用逻辑(例如,集成图形和/或科学(吞吐量)逻辑)或被称为专用核);4)片上系统,其可以在同一管芯上包括所描述的CPU(有时被称为(一个或多个)应用核或(一个或多个)应用处理器)、以上描述的协处理器、和附加功能。接下来描述示例性核架构,之后描述示例性处理器和计算机架构。这里所详细描述的是包括示例性核、处理器等的电路(单元)。
C.示例性核架构
有序和乱序的核框图
图38A是示出根据本发明的实施例的示例性有序流水线和示例性寄存器重命名、乱序发布/执行流水线两者的框图。图38B是示出根据本发明的实施例的要被包括在处理器中的有序架构核和示例性寄存器重命名、乱序发布/执行架构核两者的示例性实施例的框图。图38A-B中的实线框示出了有序流水线和有序核,而可选择添加的虚线框示出了寄存器重命名、乱序发布/执行流水线和核。假定有序方面是乱序方面的子集,将描述乱序方面。
在图38A中,处理器流水线3800包括提取(fetch)阶段3802、长度解码阶段3804、解码阶段3806、分配阶段3808、重命名阶段3810、调度(也被称为调派或发布)阶段3812、寄存器读取/存储器读取阶段3814、执行阶段3816、写回/存储器写入阶段3818、异常处理阶段3822、和提交阶段(commit stage)3824。
图38B示出了处理器核3890,其包括耦合到执行引擎单元3850的前端单元3830,并且执行引擎单元3850和前端单元3830两者都耦合到存储器单元3870。核3890可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或混合或替代的核类型。作为另一种选择,核3890可以是专用核,例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等。
前端单元3830包括耦合到指令缓存单元3834的分支预测单元3832,指令缓存单元3834耦合到指令转换后备缓冲器(TLB)3836,指令转换后备缓冲器3836耦合到指令提取单元3838,指令提取器3838耦合到解码单元3840。解码单元3840(或解码器)可以解码指令,并且生成作为输出的一个或多个微操作、微代码入口点、微指令、其他指令、或其他控制信号,它们解码自原始指令或以其他方式反映原始指令或导出自原始指令。可以使用各种不同的机制来实现解码单元3840。合适机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核3890包括微代码ROM或存储用于某些宏指令的微代码的其他介质(例如,在解码单元3840中或在前端单元3830内)。解码单元3840耦合到执行引擎单元3850中的重命名/分配器单元3852。
执行引擎单元3850包括重命名/分配器单元3852,其耦合到引退(retirement)单元3854和一组一个或多个调度器单元3856。(一个或多个)调度器单元3856表示任意数目的不同调度器,包括,预留站(reservations station)、中央指令窗等。(一个或多个)调度器单元3856耦合到(一个或多个)物理寄存器堆单元3858。每个物理寄存器堆单元3858表示一个或多个物理寄存器堆,这些物理寄存器堆中的不同的物理寄存器堆存储一个或多个不同的数据类型,例如,标量整数、标量浮点、压缩整数、压缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,物理寄存器堆单元3858包括向量寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、和通用寄存器。(一个或多个)物理寄存器堆单元3858与引退单元3854重叠,以说明寄存器重命名和乱序执行可以被实现的各种方式(例如,使用(一个或多个)重新排序缓冲器和(一个或多个)引退寄存器堆;使用(一个或多个)未来寄存器堆、(一个或多个)历史缓冲器、和(一个或多个)引退寄存器堆;使用寄存器图和寄存器池;等等)。引退单元3854和(一个或多个)物理寄存器堆单元3858耦合到(一个或多个)执行集群3860。(一个或多个)执行集群3860包括一组一个或多个执行单元3862和一组一个或多个存储器访问单元3864。执行单元3862可以对各种类型的数据(例如,标量浮点、压缩整数、压缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于特定功能或功能集的多个执行单元,但是其他实施例可以仅包括一个执行单元或者全部执行所有功能的多个执行单元。(一个或多个)调度器单元3856、(一个或多个)物理寄存器堆单元3858、和(一个或多个)执行集群3860被示为可能是多个,因为某些实施例针对某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/压缩整数/压缩浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,其中每个流水线都有自己的调度器单元、物理寄存器堆单元、和/或执行集群-并且在单独的存储器访问流水线的情况下,其中仅该流水线的执行集群具有(一个或多个)存储器访问单元3864的某些实施例被实现)。还应理解,在使用单独的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行而其余的是有序发布/执行的。
该组存储器访问单元3864耦合到存储器单元3870,存储器单元3870包括耦合到数据缓存单元3874的数据TLB单元3872,其中数据缓存单元3874耦合到2级(L2)缓存单元3876。在一个示例性实施例中,存储器访问单元3864可以包括加载单元、存储地址单元、和存储数据单元,其中的每个单元耦合到存储器单元3870中的数据TLB单元3872。指令缓存单元3834还耦合到存储器单元3870中的2级(L2)缓存单元3876。L2缓存单元3876耦合到一个或多个其他级别的缓存并最终耦合到主存储器。
作为示例,示例性寄存器重命名的乱序发布/执行核架构可以按如下方式实现流水线3800:1)指令提取3838执行提取和长度解码阶段3802和3804;2)解码单元3840执行解码阶段3806;3)重命名/分配器单元3852执行分配阶段3808和重命名阶段3810;4)(一个或多个)调度器单元3856执行调度阶段3812;5)(一个或多个)物理寄存器堆单元3858和存储器单元3870执行寄存器读取/存储器读取阶段3814;执行集群3860执行执行阶段3816;6)存储器单元3870和(一个或多个)物理寄存器堆单元3858执行写回/存储器写入阶段3818;7)异常处理阶段3822中可能涉及各个单元;8)引退单元3854和(一个或多个)物理寄存器堆单元3858执行提交阶段3824。
核3890可以支持一个或多个指令集(例如,x86指令集(具有已经添加有较新版本的一些扩展);美国加利福尼亚州桑尼维尔市的MIP Technologies的MIPS指令集;美国加利福尼亚州桑尼维尔市的ARM Holdings的ARM指令集(具有可选的附加扩展,例如,NEON)),包括本文所描述的(一个或多个)指令。在一个实施例中,核3890包括支持压缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许要使用压缩数据来执行的许多多媒体应用所使用的操作。
应理解,核可以支持多线程(执行两个或更多个并行的操作集或线程集),并且可以以各种方式这样做,这些方式包括时间分片多线程、同时多线程(其中,单个物理核为该物理核正在同时进行多线程的每个线程提供逻辑核)、或它们的组合(例如,时间分片的提取和解码以及此后同时的多线程,例如,在超线程技术中)。
虽然在乱序执行的上下文中描述了寄存器重命名,但应理解,寄存器重命名可以用在有序架构中。虽然所示处理器的实施例还包括单独的指令和数据缓存单元3834/3874以及共享的L2缓存单元3876,但替代实施例可以具有用于指令和数据两者的单个内部缓存,例如,1级(L1)内部缓存、或多级内部缓存。在一些实施例中,系统可以包括内部缓存和外部缓存的组合,其中外部缓存在核和/或处理器外部。替代地,全部缓存可以在核和/或处理器外部。
具体示例性有序核架构
图39A-B示出了更具体的示例性有序核架构的框图,其中核将是芯片中的若干逻辑块(可能包括相同类型和/或不同类型的其他核)中的一个逻辑块。逻辑块通过高带宽互连网络(例如,环形网络)与某固定功能逻辑、存储器I/O接口、和其他必要的I/O逻辑通信,这取决于应用。
图39A是根据本发明实施例的单个处理器核以及其与管芯上互连网络3902的连接以及其在2级(L2)缓存3904的局部子集的框图。在一个实施例中,指令解码器3900支持具有压缩数据指令集扩展的x86指令集。L1缓存3906允许低等待时间的访问以将存储器缓存到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元3908和向量单元3910使用单独的寄存器组(分别为标量寄存器3912和向量寄存器3914),并且它们之间传输的数据被写入到存储器然后从1级(L1)缓存3906中读回,但是本发明的替代实施例可以使用不同的方法(例如,使用单个寄存器组或包括允许数据在两个寄存器堆(file)之间传输而不被写入和读回的通信路径)。
L2缓存的局部子集3904是全局L2缓存的一部分,全局L2缓存被划分为分开的局部子集,每个处理器核一个局部子集。每个处理器核具有到其自己的L2缓存的局部子集3904的直接访问路径。由处理器核读取的数据被存储在其L2缓存子集3904中并且可以与访问它们自己的本地L2缓存子集的其他处理器核并行地被快速访问。由处理器核写入的数据被存储在其自己的L2缓存子集3904中,并且在需要的情况下被从其他子集冲刷(flushed)。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2缓存、和其他逻辑块之类的代理在芯片内彼此通信。在一些实施例中,每个环形数据路径在每个方向上为1024位宽。
图39B是根据本发明实施例的图39A中的处理器核的一部分的展开图。图39B包括L1缓存3906的L1数据缓存3906A部分,以及关于向量单元3910和向量寄存器3914的更多细节。具体地,向量单元3910是40宽的向量处理单元(VPU)(参见16宽的ALU 3928),它执行整数、单精度浮点、和双精度浮点指令中的一个或多个。VPU支持通过调配单元3920对寄存器输入进行调配,使用数字转换单元3922A-B进行数字转换,以及使用复制单元3924对存储器输入进行复制。
具有集成的存储器控制器和图形的处理器
图40是根据本发明实施例的可具有不止一个核、可具有集成存储器控制器、且可具有集成图形的处理器4000的框图。图40中的实线框示出了具有单核4002A、系统代理4010、和一组一个或多个总线控制器单元4016的处理器4000;但虚线框的可选添加示出了具有以下各项的替代处理器4000:多个核4002A-N、系统代理单元4010中的一组一个或多个集成存储器控制器单元4014、以及专用逻辑4008。
因此,处理器4000的不同实现方式可以包括:1)具有专用逻辑4008的CPU(其中专用逻辑是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核)),以及核4002A-N(其是一个或多个通用核(例如,通用有序核、通用乱序核、或两者的组合);2)具有核4002A-N的协处理器(其中核4002A-N是主要用于图形和/或科学(吞吐量)的大量专用核);3)具有核4002A-N的协处理器(其中核4002A-N是大量通用有序核)。因此,处理器4000可以是通用处理器、协处理器、或专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的许多集成核(MIC)协处理器(包括30个或更多个核)、嵌入式处理器等等。处理器可以在一个或多个芯片上实现。处理器4000可以是一个或多个衬底的一部分和/或可以通过使用多种工艺技术(例如,BiCMOS、CMOS或NMOS)中的任何一种来在一个或多个衬底上实现。
存储器层级包括核内的一个或多个级别的缓存4004A-N、一组或一个或多个共享缓存单元4006、以及耦合到该组集成存储器控制器单元4014的外部存储器(未示出)。该组共享缓存单元4006可以包括一个或多个中级缓存(例如,2级(L2)、3级(L3)、4级(L4)),或其他级别的缓存、最后级别缓存(LLC)、和/它们的组合。虽然在一个实施例中,基于环的互连单元4012对集成图形逻辑4008、该组共享缓存单元4006、以及系统代理单元4010/(一个或多个)集成存储器控制器单元4014进行互连,但替代实施例可以使用任何数目的众所周知的技术来互连这些单元。在一个实施例中,在一个或多个缓存单元4006和核4002A-N之间维持一致性。
在一些实施例中,核4002A-N中的一个或多个核能够进行多线程。系统代理4010包括协调和操作核4002A-N的那些组件。系统代理单元4010可以包括例如电源控制单元(PCU)和显示单元。PCU可以是或可以包括调节核4002A-N和集成图形逻辑4008的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核4002A-N在架构指令集方面可以是同构的或异构的;也就是说,核4002A-N中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行仅该指令集的子集或不同的指令集。
D.示例性计算机架构
图41-44是示例性计算机架构的框图。用于膝上型计算机、台式计算机、手持式PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、和各种其他电子设备的本领域已知的其他系统设计和配置也是适合的。通常,能够结合本文所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备通常是合适的。
现在参考图41,示出了根据本发明的一个实施例的系统4100的框图。系统4100可以包括一个或多个处理器4110、4115,其耦合到控制器集线器4120。在一个实施例中,控制器集线器4120包括图形存储器控制器集线器(GMCH)4190和输入/输出集线器(IOH)4150(可以在分开的芯片上);GMCH 4190包括耦合到存储器4140和协处理器4145的存储器和图形控制器;IOH 4150将输入/输出(I/O)设备4160耦合到GMCH 4190。替代地,存储器和图形控制器中的一个或两个被集成在处理器内(如本文所描述的),存储器4140和协处理器4145直接耦合到处理器4110,以及包括IOH 4150的单个芯片中的控制器集线器4120。
图41中用虚线表示附加处理器4115的可选性质。每个处理器4110、4115可以包括本文所描述的处理核中的一个或多个,并且可以是处理器4000的某个版本。
存储器4140可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)、或这两者的组合。对于至少一个实施例,控制器集线器4120经由多点总线(multi-drop bus)与(一个或多个)处理器4110、4115通信,该多点总线例如是前端总线(FSB)、点对点接口、或类似的连接4195。
在一个实施例中,协处理器4145是专用处理器,例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。在一个实施例中,控制器集线器4120可以包括集成图形加速器。
在物理资源4110、4115之间在包括架构特性、微架构特性、热特性、功耗特性等的指标度量的范围方面可存在各种差异。
在一个实施例中,处理器4110执行控制一般类型的数据处理操作的指令。嵌入在指令内的可以是协处理器指令。处理器4110将这些协处理器指令识别为应该由所附接的协处理器4145执行的类型。因此,处理器4110将这些协处理器指令(或表示协处理器指令的控制信号)发布到协处理器总线或其它互连上,以到协处理器4145。(一个或多个)协处理器4145接受并执行所接收的协处理器指令。
现在参考图42,示出了根据本发明的实施例的第一更具体的示例性系统4200的框图。如图42所示,多处理器系统4200是点对点互连系统,并且包括经由点对点互连4250耦合的第一处理器4270和第二处理器4280。处理器4270和4280中的每一个处理器可以是处理器4000的某个版本。在本发明的一个实施例中,处理器4270和4280分别是处理器4110和4115,而协处理器4238是协处理器4145。在另一个实施例中,处理器4270和4280分别是处理器4110和协处理器4145。
处理器4270和4280被示出为分别包括集成存储器控制器(IMC)单元4272和4282。处理器4270还包括作为其总线控制器单元的一部分的点对点(P-P)接口4276和4278;类似地,第二处理器4280包括P-P接口4286和4288。处理器4270、4280可以使用P-P接口电路4278、4288经由点对点(P-P)接口4250来交换信息。如图42所示,IMC 4272和4282将处理器耦合到相应的存储器(即,存储器4232和存储器4234),这些存储器可以是本地附接到相应处理器的主存储器的一部分。
处理器4270、4280可以各自使用点对点接口电路4276、4294、4286、4298经由各个P-P接口4252、4254来与芯片集4290交换信息。芯片集4290可以可选地经由高性能接口4239来与协处理器4238交换信息。在一个实施例中,协处理器4238是专用处理器,例如,高吞吐量MIC处理器、网络或通信处理器、压缩和/或解压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享缓存(未示出)可以被包括在任一处理器中,或者在两个处理器外部但经由P-P互连与处理器连接,使得在处理器进入低功率模式的情况下,任一或两个处理器的本地缓存信息可以被存储在共享缓存中。
芯片集4290可以经由接口4296耦合到第一总线4216。在一个实施例中,第一总线4216可以是外围组件互连(PCI)总线,或诸如PCI Express总线或另一I/O互连总线之类的总线,但本公开的范围不限于此。
如图42所示,各种I/O设备4214可以耦合到第一总线4216,以及将第一总线4216耦合到第二总线4220的总线桥4218。在一个实施例中,一个或多个附加处理器4215(例如,协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列、或任何其他处理器)耦合到第一总线4216。在一个实施例中,第二总线4220可以是低引脚数(LPC)总线。在一个实施例中,各种设备可以耦合到第二总线4220,包括,例如键盘和/或鼠标4222、通信设备4227、和诸如磁盘驱动器或其他大容量存储设备之类的储存装置4228(其可以包括指令/代码和数据4230)。此外,音频I/O 4224可以耦合到第二总线4220。注意,可能有其他架构。例如,代替图42的点对点架构,系统可以实现多点(multi-drop)总线或其他这样的架构。
现在参考图43,示出了根据本发明的实施例的第二更具体的示例性系统4300的框图。图42和43中的相似的元件具有相似的附图标记,并且图42中的某些方面已从图43中省略,以避免模糊图43的其他方面。
图43示出了处理器4270、4280可以分别包括集成存储器和I/O控制逻辑(“CL”)4372和4382。因此,CL 4372、4382包括集成存储器控制器单元并包括I/O控制逻辑。图43示出了不仅存储器4232、4234耦合到CL 4372、4382,而且I/O设备4314也耦合到控制逻辑4372、4382。传统(legacy)I/O设备4315耦合到芯片集4290。
现在参考图44,示出了根据本发明的实施例的SoC 4400的框图。图40中的相似的元件具有相似的附图标记。此外,虚线框是更高级SoC上的可选功能。在图44中,(一个或多个)互连单元4402耦合到以下各项:应用处理器4410,其包括一组一个或多个核4002A-N、缓存单元4004A-N、和(一个或多个)共享缓存单元4006;系统代理单元4010;(一个或多个)总线控制器单元4016;(一个或多个)集成存储器控制器单元4014;一组或一个或多个协处理器4420,其可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元4430;直接存储器存取(DMA)单元4432;以及显示单元4440,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器4420包括专用处理器,例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。
本文公开的机制的实施例可以以硬件、软件、固件或这些实现方法的组合来实现。本发明的实施例可以实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器,储存系统(包括易失性和非易失性存储器和/或储存元件),至少一个输入设备及至少一个输出设备。
程序代码(例如图42中所示的代码4230)可以应用于输入指令以执行本文描述的功能并生成输出信息。输出信息可以以已知的方式应用于一个或多个输出设备。对于本申请,处理系统包括具有处理器的任何系统,例如,数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可以以高级过程或面向对象的编程语言实现,以与处理系统通信。如果需要,程序代码也可以用汇编语言或机器语言实现。实际上,本文描述的机制不限于任何特定编程语言的范围。在任何情况下,该语言可以是经编译或解析的语言。
至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的代表性指令来实现,该代表性指令表示处理器内的各种逻辑,当由机器读取时使得机器构造逻辑以执行本文所描述的技术。这种称为“IP核”的表示可以存储在有形机器可读介质上,并提供给各种客户或制造设施,以加载到实际制造逻辑或处理器的制造机器中。
这样的机器可读储存介质可以包括但不限于通过机器或设备制造或形成的非暂时性有形物品布置,包括诸如硬盘之类的储存介质,任何其他类型的盘,包括软盘、光盘、光盘只读存储器(CD-ROM)、光盘可擦写(CD-RW)和磁光盘、半导体设备(如只读存储器(ROM))、随机存取存储器(RAM)(如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM)、磁卡或光学卡或适用于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括非暂时性实体机器可读介质,其包含指令或包含设计数据,例如硬件描述语言(HDL),其定义本文描述的结构、电路、装置、处理器和/或系统特征。这些实施例也可以被称为程序产品。
E.仿真(包括二进制转换,代码变形等)
在一些情况下,指令转换器可用于将指令从源指令集转换为目标指令集。例如,指令转换器可以转换(例如,使用静态二进制转换,包括动态编译的动态二进制转换)、变形、仿真或以其他方式将指令转换为要由核处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或其组合来实现。指令转换器可以在处理器上、处理器外或者部分在处理器上、部分在处理器外。
图45是根据本发明实施例的对照使用软件指令转换器将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。在所示实施例中,指令转换器是软件指令转换器,但替代地,指令转换器可以用软件、固件、硬件、或其各种组合来实现。图45示出了采用高级语言4502的程序可以使用第一编译器4504来编译以生成第一二进制代码(例如x86)4506,其可以由具有至少一个第一指令集核的处理器4516本地执行。在一些实施例中,具有至少一个第一指令集核的处理器4516表示可以通过进行以下操作来执行与具有至少一个x86指令集核的Intel处理器基本上相同的功能,从而实现与具有至少一个x86指令集核的Intel处理器基本上相同的结果的任何处理器:兼容地执行或以其他方式处理(1)Intelx86指令集核的指令集的大部分或者(2)目标为在具有至少一个x86指令集核的Intel处理器上运行的应用或其他软件的目标代码版本。第一编译器4504表示可操作以生成第一指令集4506的二进制代码(例如,目标代码)的编译器,其中二进制代码可以在具有或不具有附加链接处理的情况下在具有至少一个第一指令集核的处理器4516上被执行。类似地,图45示出了采用高级语言4502的程序可以使用替代指令集编译器4508来编译以生成替代指令集二进制代码4510,该二进制代码可以由不具有至少一个第一指令集核的处理器4514(例如,具有执行美国加利福尼亚州桑尼维尔市的MIPS Technologies的MIPS指令集和/或执行美国加利福尼亚州桑尼维尔市的ARM Holdings的ARM指令集的核的处理器)本地执行。指令转换器4512用于将第一二进制代码4506转换为可由不具有第一指令集核的处理器4514本地执行的代码。该转换后的代码不太可能与替代指令集二进制代码4510相同,因为很难制造出能够实现它的指令转换器;但是,转换后的代码将完成一般操作,并由来自替代指令集的指令组成。因此,指令转换器4512表示通过仿真、模拟、或任何其他过程来允许不具有第一指令集处理器或核的处理器或其他电子设备执行第一二进制代码4506的软件、固件、硬件、或其组合。
Claims (25)
1.一种处理器,包括:
解码电路,所述解码电路用于对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码;以及
执行电路,所述执行电路用于执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置进行如下操作:
将该数据元素位置处的第一数据值与所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值相加,并且
将所述相加的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
2.根据权利要求1所述的处理器,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是存储器位置。
3.根据权利要求1所述的处理器,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是压缩数据寄存器。
4.根据权利要求1所述的处理器,其中,所述执行电路包括多个融合乘法加法器。
5.根据权利要求1所述的处理器,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括半精度浮点值。
6.根据权利要求1所述的处理器,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括单精度浮点值。
7.根据权利要求1所述的处理器,其中,当所述第一源矩阵操作数具有与所述第二源矩阵操作数不同数量的数据元素时生成故障。
8.根据权利要求1所述的处理器,其中,当与所述第一源矩阵操作数相关联的行数不同于与所述第二源矩阵操作数相关联的行数时生成故障。
9.根据权利要求1所述的处理器,其中,当与所述第一源矩阵操作数相关联的列数不同于与所述第二源矩阵操作数相关联的列数时生成故障。
10.根据权利要求1所述的处理器,其中,所述执行电路进一步检查指示矩阵运算模式是否激活的状态变量,并且其中,当确定了所述矩阵运算模式未激活时生成故障。
11.一种方法,包括:
对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码;以及
执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置进行如下操作:
将该数据元素位置处的第一数据值与所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值相加,并且
将所述相加的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
12.根据权利要求11所述的方法,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是存储器位置。
13.根据权利要求11所述的方法,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是压缩数据寄存器。
14.根据权利要求11所述的方法,其中,所述执行电路包括多个融合乘法加法器。
15.根据权利要求11所述的方法,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括半精度浮点值。
16.根据权利要求11所述的方法,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括单精度浮点值。
17.根据权利要求11所述的方法,其中,当所述第一源矩阵操作数具有与所述第二源矩阵操作数不同数量的数据元素时生成故障。
18.根据权利要求11所述的方法,其中,当与所述第一源矩阵操作数相关联的行数不同于与所述第二源矩阵操作数相关联的行数时生成故障。
19.根据权利要求11所述的方法,其中,当与所述第一源矩阵操作数相关联的列数不同于与所述第二源矩阵操作数相关联的列数时生成故障。
20.根据权利要求11所述的方法,其中,执行经解码的指令包括检查指示矩阵运算模式是否激活的状态变量,并且其中,当确定了所述矩阵运算模式未激活时生成故障。
21.一种存储指令的非暂时性机器可读介质,所述指令当由处理器执行时使所述处理器执行方法,所述方法包括:
对具有用于操作码、第一源矩阵操作数标识符、第二源矩阵操作数标识符和目标矩阵操作数标识符的字段的指令进行解码,以及
执行经解码的指令以针对所标识的第一源矩阵操作数的每个数据元素位置进行如下操作:
将该数据元素位置处的第一数据值与所标识的第二源矩阵操作数的对应数据元素位置处的第二数据值相加,并且
将所述相加的结果存储到所标识的目标矩阵操作数的对应数据元素位置中。
22.根据权利要求21所述的非暂时性机器可读介质,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是存储器位置。
23.根据权利要求21所述的非暂时性机器可读介质,其中,所述第一源矩阵操作数是压缩数据寄存器并且所述第二源矩阵操作数是压缩数据寄存器。
24.根据权利要求21所述的非暂时性机器可读介质,其中,所述执行电路包括多个融合乘法加法器。
25.根据权利要求21所述的非暂时性机器可读介质,其中,所述操作码指示所述第一源矩阵操作数、所述第二源矩阵操作数和所述目标矩阵操作数中的每一个均包括半精度浮点值。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202410169239.5A CN118034781A (zh) | 2017-03-20 | 2017-07-01 | 用于矩阵加法、减法和乘法的系统、方法和装置 |
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201762473732P | 2017-03-20 | 2017-03-20 | |
| US62/473,732 | 2017-03-20 | ||
| PCT/US2017/040540 WO2018174930A1 (en) | 2017-03-20 | 2017-07-01 | Systems, methods, and apparatuses for matrix add, subtract, and multiply |
Related Child Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202410169239.5A Division CN118034781A (zh) | 2017-03-20 | 2017-07-01 | 用于矩阵加法、减法和乘法的系统、方法和装置 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN110494846A true CN110494846A (zh) | 2019-11-22 |
Family
ID=63584598
Family Applications (10)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202210132102.3A Pending CN114461276A (zh) | 2017-03-20 | 2017-07-01 | 用于点积操作的系统、方法和装置 |
| CN202311167736.3A Pending CN117130661A (zh) | 2017-03-20 | 2017-07-01 | 用于点积操作的系统、方法和装置 |
| CN201780086978.6A Pending CN110312992A (zh) | 2017-03-20 | 2017-07-01 | 用于片矩阵乘法和累加的系统、方法和装置 |
| CN201780086894.2A Active CN110337635B (zh) | 2017-03-20 | 2017-07-01 | 用于点积操作的系统、方法和装置 |
| CN201780088609.0A Pending CN110494846A (zh) | 2017-03-20 | 2017-07-01 | 用于矩阵加法、减法和乘法的系统、方法和装置 |
| CN202411937513.5A Pending CN119861972A (zh) | 2017-03-20 | 2017-07-01 | 用于片矩阵乘法和累加的系统、方法和装置 |
| CN202311493794.5A Pending CN117407644A (zh) | 2017-03-20 | 2017-07-01 | 用于片矩阵乘法和累加的系统、方法和装置 |
| CN202410169239.5A Pending CN118034781A (zh) | 2017-03-20 | 2017-07-01 | 用于矩阵加法、减法和乘法的系统、方法和装置 |
| CN202210487117.1A Pending CN114816530A (zh) | 2017-03-20 | 2017-07-01 | 用于点积操作的系统、方法和装置 |
| CN202310280501.9A Pending CN116150564A (zh) | 2017-03-20 | 2017-07-01 | 用于片矩阵乘法和累加的系统、方法和装置 |
Family Applications Before (4)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202210132102.3A Pending CN114461276A (zh) | 2017-03-20 | 2017-07-01 | 用于点积操作的系统、方法和装置 |
| CN202311167736.3A Pending CN117130661A (zh) | 2017-03-20 | 2017-07-01 | 用于点积操作的系统、方法和装置 |
| CN201780086978.6A Pending CN110312992A (zh) | 2017-03-20 | 2017-07-01 | 用于片矩阵乘法和累加的系统、方法和装置 |
| CN201780086894.2A Active CN110337635B (zh) | 2017-03-20 | 2017-07-01 | 用于点积操作的系统、方法和装置 |
Family Applications After (5)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202411937513.5A Pending CN119861972A (zh) | 2017-03-20 | 2017-07-01 | 用于片矩阵乘法和累加的系统、方法和装置 |
| CN202311493794.5A Pending CN117407644A (zh) | 2017-03-20 | 2017-07-01 | 用于片矩阵乘法和累加的系统、方法和装置 |
| CN202410169239.5A Pending CN118034781A (zh) | 2017-03-20 | 2017-07-01 | 用于矩阵加法、减法和乘法的系统、方法和装置 |
| CN202210487117.1A Pending CN114816530A (zh) | 2017-03-20 | 2017-07-01 | 用于点积操作的系统、方法和装置 |
| CN202310280501.9A Pending CN116150564A (zh) | 2017-03-20 | 2017-07-01 | 用于片矩阵乘法和累加的系统、方法和装置 |
Country Status (4)
| Country | Link |
|---|---|
| US (29) | US11263008B2 (zh) |
| EP (12) | EP4303724A1 (zh) |
| CN (10) | CN114461276A (zh) |
| WO (12) | WO2018174932A1 (zh) |
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN112668015A (zh) * | 2019-12-12 | 2021-04-16 | 华控清交信息科技(北京)有限公司 | 一种数据处理方法、装置和用于数据处理的装置 |
| CN113536216A (zh) * | 2020-04-22 | 2021-10-22 | 脸谱公司 | 用分布流水线可分离卷积运算将卷积映射到相连处理元件 |
| CN113805940A (zh) * | 2020-08-17 | 2021-12-17 | 阿里巴巴集团控股有限公司 | 用于人工智能和机器学习的向量加速器 |
Families Citing this family (47)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN116009814A (zh) | 2016-10-20 | 2023-04-25 | 英特尔公司 | 用于经融合的乘加的系统、装置和方法 |
| CN114461276A (zh) | 2017-03-20 | 2022-05-10 | 英特尔公司 | 用于点积操作的系统、方法和装置 |
| US11275588B2 (en) | 2017-07-01 | 2022-03-15 | Intel Corporation | Context save with variable save state size |
| US11409692B2 (en) | 2017-07-24 | 2022-08-09 | Tesla, Inc. | Vector computational unit |
| US11157441B2 (en) | 2017-07-24 | 2021-10-26 | Tesla, Inc. | Computational array microprocessor system using non-consecutive data formatting |
| US11893393B2 (en) | 2017-07-24 | 2024-02-06 | Tesla, Inc. | Computational array microprocessor system with hardware arbiter managing memory requests |
| US10671349B2 (en) * | 2017-07-24 | 2020-06-02 | Tesla, Inc. | Accelerated mathematical engine |
| EP3605402B1 (en) * | 2017-08-31 | 2022-08-31 | Cambricon (Xi'an) Semiconductor Co., Ltd. | Chip device and related product |
| US11868804B1 (en) | 2019-11-18 | 2024-01-09 | Groq, Inc. | Processor instruction dispatch configuration |
| US11243880B1 (en) | 2017-09-15 | 2022-02-08 | Groq, Inc. | Processor architecture |
| US11360934B1 (en) | 2017-09-15 | 2022-06-14 | Groq, Inc. | Tensor streaming processor architecture |
| US11114138B2 (en) | 2017-09-15 | 2021-09-07 | Groq, Inc. | Data structures with multiple read ports |
| US11170307B1 (en) | 2017-09-21 | 2021-11-09 | Groq, Inc. | Predictive model compiler for generating a statically scheduled binary with known resource constraints |
| WO2019114842A1 (zh) | 2017-12-14 | 2019-06-20 | 北京中科寒武纪科技有限公司 | 一种集成电路芯片装置 |
| US11093247B2 (en) | 2017-12-29 | 2021-08-17 | Intel Corporation | Systems and methods to load a tile register pair |
| US11809869B2 (en) | 2017-12-29 | 2023-11-07 | Intel Corporation | Systems and methods to store a tile register pair to memory |
| US11789729B2 (en) | 2017-12-29 | 2023-10-17 | Intel Corporation | Systems and methods for computing dot products of nibbles in two tile operands |
| US11669326B2 (en) | 2017-12-29 | 2023-06-06 | Intel Corporation | Systems, methods, and apparatuses for dot product operations |
| US11023235B2 (en) | 2017-12-29 | 2021-06-01 | Intel Corporation | Systems and methods to zero a tile register pair |
| US11816483B2 (en) | 2017-12-29 | 2023-11-14 | Intel Corporation | Systems, methods, and apparatuses for matrix operations |
| US11561791B2 (en) | 2018-02-01 | 2023-01-24 | Tesla, Inc. | Vector computational unit receiving data elements in parallel from a last row of a computational array |
| US11132233B2 (en) * | 2018-05-07 | 2021-09-28 | Micron Technology, Inc. | Thread priority management in a multi-threaded, self-scheduling processor |
| US10901745B2 (en) | 2018-07-10 | 2021-01-26 | International Business Machines Corporation | Method and apparatus for processing storage instructions |
| US11455370B2 (en) | 2018-11-19 | 2022-09-27 | Groq, Inc. | Flattened input stream generation for convolution with expanded kernel |
| US12340300B1 (en) | 2018-09-14 | 2025-06-24 | Groq, Inc. | Streaming processor architecture |
| US10853067B2 (en) | 2018-09-27 | 2020-12-01 | Intel Corporation | Computer processor for higher precision computations using a mixed-precision decomposition of operations |
| US10963256B2 (en) * | 2018-09-28 | 2021-03-30 | Intel Corporation | Systems and methods for performing instructions to transform matrices into row-interleaved format |
| CN111061507A (zh) * | 2018-10-16 | 2020-04-24 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
| US10963246B2 (en) * | 2018-11-09 | 2021-03-30 | Intel Corporation | Systems and methods for performing 16-bit floating-point matrix dot product instructions |
| CN111338974B (zh) * | 2018-12-19 | 2025-05-16 | 超威半导体公司 | 用于矩阵数学指令集的图块化算法 |
| US11042372B2 (en) * | 2019-05-24 | 2021-06-22 | Texas Instruments Incorporated | Vector bit transpose |
| US11687341B2 (en) * | 2019-08-29 | 2023-06-27 | Intel Corporation | Multi-variate strided read operations for accessing matrix operands |
| US11188618B2 (en) * | 2019-09-05 | 2021-11-30 | Intel Corporation | Sparse matrix multiplication acceleration mechanism |
| CN110727412B (zh) * | 2019-09-14 | 2022-01-07 | 无锡江南计算技术研究所 | 一种基于掩码的混合浮点乘法低功耗控制方法及装置 |
| US11049586B2 (en) | 2019-11-26 | 2021-06-29 | Mythic, Inc. | Systems and methods for implementing redundancy for tile-based intelligence processing computing architecture |
| EP4066170A4 (en) | 2019-11-26 | 2024-01-17 | Groq, Inc. | LOADING OPERANDS AND DELIVERING RESULTS FROM A MULTI-DIMENSIONAL ARRAY USING ONLY ONE SIDE |
| CN113094099A (zh) * | 2019-12-23 | 2021-07-09 | 超威半导体(上海)有限公司 | 矩阵数据广播架构 |
| US11714875B2 (en) * | 2019-12-28 | 2023-08-01 | Intel Corporation | Apparatuses, methods, and systems for instructions of a matrix operations accelerator |
| GB2596056B (en) * | 2020-05-27 | 2022-06-08 | Graphcore Ltd | Exception register delay |
| US11593454B2 (en) | 2020-06-02 | 2023-02-28 | Intel Corporation | Matrix operation optimization mechanism |
| US12112167B2 (en) | 2020-06-27 | 2024-10-08 | Intel Corporation | Matrix data scatter and gather between rows and irregularly spaced memory locations |
| US12112171B2 (en) * | 2020-09-26 | 2024-10-08 | Intel Corporation | Loop support extensions |
| US11561794B2 (en) | 2021-05-26 | 2023-01-24 | International Business Machines Corporation | Evicting and restoring information using a single port of a logical register mapper and history buffer in a microprocessor comprising multiple main register file entries mapped to one accumulator register file entry |
| US12425047B2 (en) | 2021-06-15 | 2025-09-23 | Intel Corporation | Methods and apparatus to perform weight and activation compression and decompression |
| US20240320005A1 (en) * | 2023-03-23 | 2024-09-26 | Arm Limited | Matrix multiplication in a dynamically spatially and dynamically temporally dividable architecture |
| US20240320292A1 (en) * | 2023-03-23 | 2024-09-26 | Arm Limited | Matrix multiplication in a dynamically spatially and dynamically temporally dividable architecture |
| CN119225815B (zh) * | 2024-11-28 | 2025-03-11 | 英特尔(中国)研究中心有限公司 | 处理装置、处理方法以及计算机可读存储介质 |
Citations (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20040111587A1 (en) * | 2002-12-09 | 2004-06-10 | Nair Gopalan N | Apparatus and method for matrix data processing |
| US7932910B2 (en) * | 1995-08-16 | 2011-04-26 | Microunity Systems Engineering, Inc. | System and software for performing matrix multiply extract operations |
| CN102081513A (zh) * | 2011-01-24 | 2011-06-01 | 山东大学 | Aes加密算法中列混淆过程指令优化方法及其指令集处理器 |
| CN102411558A (zh) * | 2011-10-31 | 2012-04-11 | 中国人民解放军国防科学技术大学 | 面向向量处理器的大矩阵相乘的向量化实现方法 |
| US20120254588A1 (en) * | 2011-04-01 | 2012-10-04 | Jesus Corbal San Adrian | Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask |
| CN104137055A (zh) * | 2011-12-29 | 2014-11-05 | 英特尔公司 | 点积处理器、方法、系统和指令 |
| CN104969477A (zh) * | 2013-02-08 | 2015-10-07 | 索尼公司 | 数据处理装置和数据处理方法 |
| CN105302522A (zh) * | 2014-06-26 | 2016-02-03 | 英特尔公司 | 提供通用gf(256)simd密码算法功能性的指令和逻辑 |
Family Cites Families (252)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US138524A (en) | 1873-05-06 | Improvement in water-indicators for steam-boilers | ||
| US2002824A (en) | 1932-11-19 | 1935-05-28 | Mayer Bruno | Roll film camera |
| US3933224A (en) | 1973-05-30 | 1976-01-20 | Stockamollan Ab | Fork lift truck |
| US4310879A (en) * | 1979-03-08 | 1982-01-12 | Pandeya Arun K | Parallel processor having central processor memory extension |
| US5142677A (en) | 1989-05-04 | 1992-08-25 | Texas Instruments Incorporated | Context switching devices, systems and methods |
| US5247632A (en) | 1989-01-23 | 1993-09-21 | Eastman Kodak Company | Virtual memory management arrangement for addressing multi-dimensional arrays in a digital data processing system |
| US5025407A (en) | 1989-07-28 | 1991-06-18 | Texas Instruments Incorporated | Graphics floating point coprocessor having matrix capabilities |
| US5170370A (en) | 1989-11-17 | 1992-12-08 | Cray Research, Inc. | Vector bit-matrix multiply functional unit |
| US5263136A (en) | 1991-04-30 | 1993-11-16 | Optigraphics Corporation | System for managing tiled images using multiple resolutions |
| JP2572522B2 (ja) | 1992-05-12 | 1997-01-16 | インターナショナル・ビジネス・マシーンズ・コーポレイション | コンピューティング装置 |
| US5475822A (en) | 1993-11-15 | 1995-12-12 | Motorola, Inc. | Data processing system for resuming instruction execution after an interrupt and method therefor |
| JP2932963B2 (ja) | 1994-01-21 | 1999-08-09 | モトローラ・インコーポレイテッド | 効率的なビット移動能力を有するデータ・プロセッサとその方法 |
| US5426378A (en) | 1994-04-20 | 1995-06-20 | Xilinx, Inc. | Programmable logic device which stores more than one configuration and means for switching configurations |
| US5761466A (en) | 1994-05-09 | 1998-06-02 | Lsi Logic Corporation | Soft programmable single-cycle/pipelined micro-programmed control system |
| US5584027A (en) | 1994-08-31 | 1996-12-10 | Motorola Inc. | Method and apparatus for finding induction variables for use in compiling computer instructions |
| US5513366A (en) | 1994-09-28 | 1996-04-30 | International Business Machines Corporation | Method and system for dynamically reconfiguring a register file in a vector processor |
| US5887183A (en) | 1995-01-04 | 1999-03-23 | International Business Machines Corporation | Method and system in a data processing system for loading and storing vectors in a plurality of modes |
| US6643765B1 (en) | 1995-08-16 | 2003-11-04 | Microunity Systems Engineering, Inc. | Programmable processor with group floating point operations |
| JP3711147B2 (ja) * | 1995-08-31 | 2005-10-26 | インテル・コーポレーション | パック・データを処理する1組の命令 |
| US6041403A (en) | 1996-09-27 | 2000-03-21 | Intel Corporation | Method and apparatus for generating a microinstruction responsive to the specification of an operand, in addition to a microinstruction based on the opcode, of a macroinstruction |
| US5892962A (en) | 1996-11-12 | 1999-04-06 | Lucent Technologies Inc. | FPGA-based processor |
| US6161219A (en) | 1997-07-03 | 2000-12-12 | The University Of Iowa Research Foundation | System and method for providing checkpointing with precompile directives and supporting software to produce checkpoints, independent of environment constraints |
| US6393554B1 (en) * | 1998-01-28 | 2002-05-21 | Advanced Micro Devices, Inc. | Method and apparatus for performing vector and scalar multiplication and calculating rounded products |
| US6418529B1 (en) | 1998-03-31 | 2002-07-09 | Intel Corporation | Apparatus and method for performing intra-add operation |
| US6282634B1 (en) | 1998-05-27 | 2001-08-28 | Arm Limited | Apparatus and method for processing data having a mixed vector/scalar register file |
| US6018799A (en) | 1998-07-22 | 2000-01-25 | Sun Microsystems, Inc. | Method, apparatus and computer program product for optimizing registers in a stack using a register allocator |
| US6069489A (en) | 1998-08-04 | 2000-05-30 | Xilinx, Inc. | FPGA having fast configuration memory data readback |
| EP1105792B1 (en) * | 1998-08-24 | 2010-05-05 | MicroUnity Systems Engineering, Inc. | System with wide operand architecture, and method |
| US6839728B2 (en) | 1998-10-09 | 2005-01-04 | Pts Corporation | Efficient complex multiplication and fast fourier transform (FFT) implementation on the manarray architecture |
| US6282557B1 (en) | 1998-12-08 | 2001-08-28 | International Business Machines Corporation | Low latency fused multiply-adder |
| FR2787233B1 (fr) | 1998-12-11 | 2001-02-16 | St Microelectronics Sa | Procede pour verifier l'integrite des circuits de decodage d'une memoire |
| US6487171B1 (en) | 1999-05-19 | 2002-11-26 | 3Com Corporation | Crossbar switching matrix with broadcast buffering |
| KR100331565B1 (ko) * | 1999-12-17 | 2002-04-06 | 윤종용 | 매트릭스 연산 장치 및 매트릭스 연산기능을 갖는 디지털신호처리 장치 |
| US20020032710A1 (en) | 2000-03-08 | 2002-03-14 | Ashley Saulsbury | Processing architecture having a matrix-transpose capability |
| US6487524B1 (en) | 2000-06-08 | 2002-11-26 | Bbnt Solutions Llc | Methods and apparatus for designing a system using the tensor convolution block toeplitz-preconditioned conjugate gradient (TCBT-PCG) method |
| US6647484B1 (en) | 2000-09-19 | 2003-11-11 | 3 Dsp Corporation | Transpose address mode in general purpose DSP processor |
| GB2370380B (en) | 2000-12-19 | 2003-12-31 | Picochip Designs Ltd | Processor architecture |
| GB0103472D0 (en) | 2001-02-13 | 2001-03-28 | Lsi Logic Corp | Data processing system |
| US6901422B1 (en) * | 2001-03-21 | 2005-05-31 | Apple Computer, Inc. | Matrix multiplication in a vector processing system |
| US7016418B2 (en) | 2001-08-07 | 2006-03-21 | Ati Technologies, Inc. | Tiled memory configuration for mapping video data and method thereof |
| US6683392B2 (en) | 2001-08-20 | 2004-01-27 | The Boeing Company | Switch matrix |
| WO2003021423A2 (en) | 2001-09-04 | 2003-03-13 | Microunity Systems Engineering, Inc. | System and method for performing multiplication |
| US7430578B2 (en) | 2001-10-29 | 2008-09-30 | Intel Corporation | Method and apparatus for performing multiply-add operations on packed byte data |
| US7725521B2 (en) | 2001-10-29 | 2010-05-25 | Intel Corporation | Method and apparatus for computing matrix transformations |
| CN1142484C (zh) * | 2001-11-28 | 2004-03-17 | 中国人民解放军国防科学技术大学 | 微处理器向量处理方法 |
| US6877020B1 (en) | 2001-12-31 | 2005-04-05 | Apple Computer, Inc. | Method and apparatus for matrix transposition |
| US7003542B2 (en) | 2002-01-02 | 2006-02-21 | Intel Corporation | Apparatus and method for inverting a 4×4 matrix |
| US7251811B2 (en) * | 2002-01-02 | 2007-07-31 | Intel Corporation | Controlling compatibility levels of binary translations between instruction set architectures |
| US7315934B2 (en) | 2002-03-06 | 2008-01-01 | Matsushita Electric Industrial Co., Ltd. | Data processor and program for processing a data matrix |
| US20030221089A1 (en) | 2002-05-23 | 2003-11-27 | Sun Microsystems, Inc. | Microprocessor data manipulation matrix module |
| US7209939B2 (en) | 2002-07-11 | 2007-04-24 | Sun Microsystems, Inc. | Precision improvement method for the Strassen/Winograd matrix multiplication method |
| ATE359046T1 (de) | 2002-11-06 | 2007-05-15 | Procter & Gamble | Kits bestehend aus körperkompresse und lösbar befestigbare thermische vorrichtung |
| US7061495B1 (en) | 2002-11-18 | 2006-06-13 | Ati Technologies, Inc. | Method and apparatus for rasterizer interpolation |
| US6873596B2 (en) | 2003-05-13 | 2005-03-29 | Nokia Corporation | Fourier-transform based linear equalization for CDMA downlink |
| US7610466B2 (en) | 2003-09-05 | 2009-10-27 | Freescale Semiconductor, Inc. | Data processing system using independent memory and register operand size specifiers and method thereof |
| US7107436B2 (en) | 2003-09-08 | 2006-09-12 | Freescale Semiconductor, Inc. | Conditional next portion transferring of data stream to or from register based on subsequent instruction aspect |
| US7275148B2 (en) | 2003-09-08 | 2007-09-25 | Freescale Semiconductor, Inc. | Data processing system using multiple addressing modes for SIMD operations and method thereof |
| US7315932B2 (en) | 2003-09-08 | 2008-01-01 | Moyer William C | Data processing system having instruction specifiers for SIMD register operands and method thereof |
| US7298925B2 (en) | 2003-09-30 | 2007-11-20 | International Business Machines Corporation | Efficient scaling in transform domain |
| US7388999B2 (en) | 2003-10-29 | 2008-06-17 | Hewlett-Packard Development Company, L.P. | Transformations for denoising images |
| US8374284B2 (en) * | 2004-02-12 | 2013-02-12 | Apple, Inc. | Universal decoder |
| GB0405283D0 (en) | 2004-03-09 | 2004-04-21 | Aspex Technology Ltd | Multi-port memory for flexible and space efficient corner turning networks in associative processors |
| US7873812B1 (en) | 2004-04-05 | 2011-01-18 | Tibet MIMAR | Method and system for efficient matrix multiplication in a SIMD processor architecture |
| CN1707426A (zh) | 2004-06-09 | 2005-12-14 | 上海华博科技(集团)有限公司 | 基于可配置的乘法器矩阵结构的操作数分配装置及其分配方法 |
| US20050289208A1 (en) | 2004-06-23 | 2005-12-29 | Harrison John R | Methods and apparatus for determining quotients |
| US7350055B2 (en) | 2004-10-20 | 2008-03-25 | Arm Limited | Tightly coupled accelerator |
| US8719819B2 (en) | 2005-06-30 | 2014-05-06 | Intel Corporation | Mechanism for instruction set based thread execution on a plurality of instruction sequencers |
| WO2006081094A2 (en) | 2005-01-27 | 2006-08-03 | Innovasic, Inc. | Deterministic microcontroller |
| US20060190517A1 (en) | 2005-02-02 | 2006-08-24 | Guerrero Miguel A | Techniques for transposition of a matrix arranged in a memory as multiple items per word |
| ATE508549T1 (de) | 2005-05-25 | 2011-05-15 | Mitsubishi Electric Corp | Kodierungsmatrix in einem mimo system |
| US8760994B2 (en) | 2005-10-28 | 2014-06-24 | Qualcomm Incorporated | Unitary precoding based on randomized FFT matrices |
| KR100812225B1 (ko) | 2005-12-07 | 2008-03-13 | 한국전자통신연구원 | 멀티프로세서 SoC 플랫폼에 적합한 크로스바 스위치구조 |
| US20070156949A1 (en) | 2005-12-30 | 2007-07-05 | Rudelic John C | Method and apparatus for single chip system boot |
| US20070186210A1 (en) | 2006-02-06 | 2007-08-09 | Via Technologies, Inc. | Instruction set encoding in a dual-mode computer processing environment |
| EP2011018B1 (en) * | 2006-04-12 | 2016-07-13 | Soft Machines, Inc. | Apparatus and method for processing an instruction matrix specifying parallel and dependent operations |
| US20070271325A1 (en) | 2006-05-08 | 2007-11-22 | Nvidia Corporation | Matrix multiply with reduced bandwidth requirements |
| US8089959B2 (en) | 2006-05-30 | 2012-01-03 | Ted Henryk Szymanski | Method and apparatus to schedule packets through a crossbar switch with delay guarantees |
| US7792895B1 (en) | 2006-06-16 | 2010-09-07 | Nvidia Corporation | Efficient matrix multiplication on a parallel processing device |
| US7506134B1 (en) | 2006-06-16 | 2009-03-17 | Nvidia Corporation | Hardware resource based mapping of cooperative thread arrays (CTA) to result matrix tiles for efficient matrix multiplication in computing system comprising plurality of multiprocessors |
| US7912889B1 (en) | 2006-06-16 | 2011-03-22 | Nvidia Corporation | Mapping the threads of a CTA to the elements of a tile for efficient matrix multiplication |
| US20080071851A1 (en) | 2006-09-20 | 2008-03-20 | Ronen Zohar | Instruction and logic for performing a dot-product operation |
| GB0618921D0 (en) | 2006-09-26 | 2006-11-08 | Trw Ltd | Matrix multiplication |
| US8122078B2 (en) | 2006-10-06 | 2012-02-21 | Calos Fund, LLC | Processor with enhanced combined-arithmetic capability |
| US7797362B2 (en) | 2007-02-23 | 2010-09-14 | Texas Instruments Incorporated | Parallel architecture for matrix transposition |
| GB2447494A (en) | 2007-03-15 | 2008-09-17 | Linear Algebra Technologies Lt | A method and circuit for compressing data using a bitmap to identify the location of data values |
| US8392487B1 (en) | 2007-03-29 | 2013-03-05 | Compass Electro-Optical Systems Ltd | Programmable matrix processor |
| US7917568B2 (en) * | 2007-04-10 | 2011-03-29 | Via Technologies, Inc. | X87 fused multiply-add instruction |
| US7673120B2 (en) | 2007-06-27 | 2010-03-02 | Texas Instruments Incorporated | Inter-cluster communication network and heirarchical register files for clustered VLIW processors |
| US20090019333A1 (en) * | 2007-07-02 | 2009-01-15 | Mcevoy Paul | Generation of parity-check matrices |
| US8161271B2 (en) | 2007-07-11 | 2012-04-17 | International Business Machines Corporation | Store misaligned vector with permute |
| US8051124B2 (en) | 2007-07-19 | 2011-11-01 | Itt Manufacturing Enterprises, Inc. | High speed and efficient matrix multiplication hardware module |
| US8028015B2 (en) | 2007-08-10 | 2011-09-27 | Inside Contactless S.A. | Method and system for large number multiplication |
| US8040349B1 (en) | 2007-12-04 | 2011-10-18 | Nvidia Corporation | System and method for structuring an A-buffer |
| US9529592B2 (en) | 2007-12-27 | 2016-12-27 | Intel Corporation | Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation |
| US8923510B2 (en) | 2007-12-28 | 2014-12-30 | Intel Corporation | Method and apparatus for efficiently implementing the advanced encryption standard |
| US8631261B2 (en) | 2007-12-31 | 2014-01-14 | Intel Corporation | Context state management for processor feature sets |
| US7925853B2 (en) | 2008-01-04 | 2011-04-12 | International Business Machines Corporation | Method and apparatus for controlling memory array gating when a processor executes a low confidence branch instruction in an information handling system |
| US8068365B2 (en) | 2008-02-04 | 2011-11-29 | Mosaid Technologies Incorporated | Non-volatile memory device having configurable page size |
| US8612723B2 (en) | 2008-05-06 | 2013-12-17 | L-3 Communications Integrated Systems, L.P. | System and method for storing a sparse matrix |
| US8533251B2 (en) | 2008-05-23 | 2013-09-10 | International Business Machines Corporation | Optimized corner turns for local storage and bandwidth reduction |
| US8250130B2 (en) | 2008-05-30 | 2012-08-21 | International Business Machines Corporation | Reducing bandwidth requirements for matrix multiplication |
| US8060730B2 (en) | 2008-05-30 | 2011-11-15 | Freescale Semiconductor, Inc. | Selective MISR data accumulation during exception processing |
| US8145880B1 (en) | 2008-07-07 | 2012-03-27 | Ovics | Matrix processor data switch routing systems and methods |
| US8626815B1 (en) | 2008-07-14 | 2014-01-07 | Altera Corporation | Configuring a programmable integrated circuit device to perform matrix multiplication |
| US20100180100A1 (en) | 2009-01-13 | 2010-07-15 | Mavrix Technology, Inc. | Matrix microprocessor and method of operation |
| US9003340B2 (en) | 2009-01-30 | 2015-04-07 | Active-Semi, Inc. | Communicating configuration information across a programmable analog tile to another tile |
| US8577950B2 (en) | 2009-08-17 | 2013-11-05 | International Business Machines Corporation | Matrix multiplication operations with data pre-conditioning in a high performance computing architecture |
| US8650240B2 (en) | 2009-08-17 | 2014-02-11 | International Business Machines Corporation | Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture |
| US8352528B2 (en) | 2009-09-20 | 2013-01-08 | Mimar Tibet | Apparatus for efficient DCT calculations in a SIMD programmable processor |
| US9519947B2 (en) | 2009-09-25 | 2016-12-13 | Nvidia Corporation | Architecture and instructions for accessing multi-dimensional formatted surface memory |
| US8539201B2 (en) | 2009-11-04 | 2013-09-17 | International Business Machines Corporation | Transposing array data on SIMD multi-core processor architectures |
| US8984043B2 (en) * | 2009-12-23 | 2015-03-17 | Intel Corporation | Multiplying and adding matrices |
| KR101639574B1 (ko) | 2009-12-30 | 2016-07-14 | 삼성전자주식회사 | 적응적 뱅크 어드레스를 제공하는 디스플레이 시스템 및 그것의 어드레스 맵핑 방법 |
| GB2476800A (en) * | 2010-01-07 | 2011-07-13 | Linear Algebra Technologies Ltd | Sparse matrix vector multiplier using a bit map of non-zero elements to control scheduling of arithmetic operations |
| US9600281B2 (en) | 2010-07-12 | 2017-03-21 | International Business Machines Corporation | Matrix multiplication operations using pair-wise load and splat operations |
| US8478969B2 (en) | 2010-09-24 | 2013-07-02 | Intel Corporation | Performing a multiply-multiply-accumulate instruction |
| US20120113133A1 (en) | 2010-11-04 | 2012-05-10 | Shpigelblat Shai | System, device, and method for multiplying multi-dimensional data arrays |
| US8825988B2 (en) | 2010-11-12 | 2014-09-02 | Advanced Micro Devices, Inc. | Matrix algorithm for scheduling operations |
| US9727471B2 (en) | 2010-11-29 | 2017-08-08 | Intel Corporation | Method and apparatus for stream buffer management instructions |
| US8762655B2 (en) | 2010-12-06 | 2014-06-24 | International Business Machines Corporation | Optimizing output vector data generation using a formatted matrix data structure |
| JP5782265B2 (ja) | 2011-02-04 | 2015-09-24 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 行列計算処理方法、プログラム及びシステム |
| US20120254591A1 (en) | 2011-04-01 | 2012-10-04 | Hughes Christopher J | Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements |
| WO2012134532A1 (en) | 2011-04-01 | 2012-10-04 | Intel Corporation | Vector friendly instruction format and execution thereof |
| US20120254592A1 (en) | 2011-04-01 | 2012-10-04 | Jesus Corbal San Adrian | Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location |
| GB201105716D0 (en) * | 2011-04-04 | 2011-05-18 | Advanced Risc Mach Ltd | Method of and apparatus for displaying windows on a display |
| US9984124B2 (en) | 2011-05-11 | 2018-05-29 | International Business Machines Corporation | Data management in relational databases |
| US9503741B2 (en) | 2011-06-08 | 2016-11-22 | Vixs Systems, Inc. | Video decoder with multi-format vector processor and methods for use therewith |
| US8838664B2 (en) * | 2011-06-29 | 2014-09-16 | Advanced Micro Devices, Inc. | Methods and apparatus for compressing partial products during a fused multiply-and-accumulate (FMAC) operation on operands having a packed-single-precision format |
| US9398307B2 (en) | 2011-07-11 | 2016-07-19 | Sharp Kabushiki Kaisha | Video decoder for tiles |
| GB2494903B (en) | 2011-09-22 | 2017-12-27 | Advanced Risc Mach Ltd | Graphics processing systems |
| WO2013048369A1 (en) | 2011-09-26 | 2013-04-04 | Intel Corporation | Instruction and logic to provide vector load-op/store-op with stride functionality |
| CN102360344B (zh) | 2011-10-10 | 2014-03-12 | 西安交通大学 | 矩阵处理器及其指令集和嵌入式系统 |
| US9298621B2 (en) * | 2011-11-04 | 2016-03-29 | Hewlett Packard Enterprise Development Lp | Managing chip multi-processors through virtual domains |
| US8941884B1 (en) | 2011-12-02 | 2015-01-27 | Marvell International Ltd. | Method and apparatus for dynamically generating a stochastic threshold table |
| CN103975302B (zh) | 2011-12-22 | 2017-10-27 | 英特尔公司 | 矩阵乘法累加指令 |
| CN104126174B (zh) | 2011-12-22 | 2017-06-06 | 英特尔公司 | 执行groestl散列的指令 |
| CN106775592B (zh) | 2011-12-23 | 2019-03-12 | 英特尔公司 | 处理器、用于计算系统的方法、机器可读介质和计算机系统 |
| CN108196823A (zh) | 2011-12-23 | 2018-06-22 | 英特尔公司 | 用于执行双块绝对差求和的系统、装置和方法 |
| CN104040482B (zh) | 2011-12-28 | 2018-02-16 | 英特尔公司 | 用于在打包数据元素上执行增量解码的系统、装置和方法 |
| US9454371B2 (en) | 2011-12-30 | 2016-09-27 | Intel Corporation | Micro-architecture for eliminating MOV operations |
| JP5840994B2 (ja) | 2012-03-27 | 2016-01-06 | 富士通株式会社 | 行列演算装置 |
| US9606961B2 (en) * | 2012-10-30 | 2017-03-28 | Intel Corporation | Instruction and logic to provide vector compress and rotate functionality |
| US20140149480A1 (en) | 2012-11-28 | 2014-05-29 | Nvidia Corporation | System, method, and computer program product for transposing a matrix |
| US20140157287A1 (en) | 2012-11-30 | 2014-06-05 | Advanced Micro Devices, Inc | Optimized Context Switching for Long-Running Processes |
| US9152827B2 (en) | 2012-12-19 | 2015-10-06 | The United States Of America As Represented By The Secretary Of The Air Force | Apparatus for performing matrix vector multiplication approximation using crossbar arrays of resistive memory devices |
| US9442723B2 (en) | 2012-12-28 | 2016-09-13 | Intel Corporation | Method and apparatus for integral image computation instructions |
| US9256433B2 (en) | 2013-03-15 | 2016-02-09 | Intel Corporation | Systems and methods for move elimination with bypass multiple instantiation table |
| CN103235724A (zh) * | 2013-05-10 | 2013-08-07 | 中国人民解放军信息工程大学 | 基于原子操作语义描述的多源二进制代码一体化翻译方法 |
| US10628156B2 (en) * | 2013-07-09 | 2020-04-21 | Texas Instruments Incorporated | Vector SIMD VLIW data path architecture |
| GB2516826B (en) | 2013-07-23 | 2016-06-22 | Canon Kk | Method, device and computer program for encapsulating partitioned timed media data by creating tracks to be independently encapsulated in at least one media f |
| US9703708B2 (en) | 2013-09-27 | 2017-07-11 | Intel Corporation | System and method for thread scheduling on reconfigurable processor cores |
| US9285997B2 (en) | 2013-10-30 | 2016-03-15 | Intel Corporation | Independently selective tile group access with data structuring |
| US9898330B2 (en) | 2013-11-11 | 2018-02-20 | Intel Corporation | Compacted context state management |
| US9286216B2 (en) | 2014-01-16 | 2016-03-15 | Carnegie Mellon University | 3DIC memory chips including computational logic-in-memory for performing accelerated data processing |
| US9557995B2 (en) | 2014-02-07 | 2017-01-31 | Arm Limited | Data processing apparatus and method for performing segmented operations |
| JP6256088B2 (ja) * | 2014-02-20 | 2018-01-10 | 日本電気株式会社 | ベクトルプロセッサ、情報処理装置および追い越し制御方法 |
| US9298540B2 (en) | 2014-02-26 | 2016-03-29 | Adobe Systems Incorporated | Detection and restoration of erroneous data |
| FR3021428B1 (fr) | 2014-05-23 | 2017-10-13 | Kalray | Multiplication de matrices de bits utilisant des registres explicites |
| US9785565B2 (en) | 2014-06-30 | 2017-10-10 | Microunity Systems Engineering, Inc. | System and methods for expandably wide processor instructions |
| US10019229B2 (en) | 2014-07-02 | 2018-07-10 | Via Alliance Semiconductor Co., Ltd | Calculation control indicator cache |
| US9910670B2 (en) | 2014-07-09 | 2018-03-06 | Intel Corporation | Instruction set for eliminating misaligned memory accesses during processing of an array having misaligned data rows |
| US10223333B2 (en) | 2014-08-29 | 2019-03-05 | Nvidia Corporation | Performing multi-convolution operations in a parallel processing system |
| WO2016034087A1 (en) | 2014-09-03 | 2016-03-10 | Mediatek Inc. | Method for handling mode switching with less unnecessary register data access and related non-transitory machine readable medium |
| EP3021282A1 (en) | 2014-11-14 | 2016-05-18 | Thomson Licensing | Methods and apparatus for learning palette dictionaries for device-ready example-guided recolorization |
| US10255547B2 (en) | 2014-12-04 | 2019-04-09 | Nvidia Corporation | Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system |
| US20160179523A1 (en) | 2014-12-23 | 2016-06-23 | Intel Corporation | Apparatus and method for vector broadcast and xorand logical instruction |
| US10296334B2 (en) | 2014-12-27 | 2019-05-21 | Intel Corporation | Method and apparatus for performing a vector bit gather |
| US9996350B2 (en) | 2014-12-27 | 2018-06-12 | Intel Corporation | Hardware apparatuses and methods to prefetch a multidimensional block of elements from a multidimensional array |
| US20160239706A1 (en) | 2015-02-13 | 2016-08-18 | Qualcomm Incorporated | Convolution matrix multiply with callback for deep tiling for deep convolutional neural networks |
| US9886418B2 (en) | 2015-04-28 | 2018-02-06 | Intel Corporation | Matrix operands for linear algebra operations |
| US9934153B2 (en) | 2015-06-30 | 2018-04-03 | Nvidia Corporation | Patch memory system |
| US10535114B2 (en) | 2015-08-18 | 2020-01-14 | Nvidia Corporation | Controlling multi-pass rendering sequences in a cache tiling architecture |
| US10423411B2 (en) * | 2015-09-26 | 2019-09-24 | Intel Corporation | Data element comparison processors, methods, systems, and instructions |
| US11061672B2 (en) | 2015-10-02 | 2021-07-13 | Via Alliance Semiconductor Co., Ltd. | Chained split execution of fused compound arithmetic operations |
| CN106485321B (zh) * | 2015-10-08 | 2019-02-12 | 上海兆芯集成电路有限公司 | 具有架构神经网络执行单元的处理器 |
| US10152421B2 (en) | 2015-11-23 | 2018-12-11 | Intel Corporation | Instruction and logic for cache control operations |
| US9812180B2 (en) | 2016-01-18 | 2017-11-07 | Hare Krishna Verma | Programmable logic accelerator in system on chip |
| US9875104B2 (en) | 2016-02-03 | 2018-01-23 | Google Llc | Accessing data in multi-dimensional tensors |
| US10600475B2 (en) | 2016-05-18 | 2020-03-24 | Sitaram Yadavalli | Method and apparatus for storing and accessing matrices and arrays by columns and rows in a processing unit |
| US20170337156A1 (en) | 2016-04-26 | 2017-11-23 | Onnivation Llc | Computing machine architecture for matrix and array processing |
| US10073815B2 (en) * | 2016-05-31 | 2018-09-11 | Palo Alto Research Cener Incorporated | System and method for speeding up general matrix-matrix multiplication on the GPU |
| US10191744B2 (en) | 2016-07-01 | 2019-01-29 | Intel Corporation | Apparatuses, methods, and systems for element sorting of vectors |
| US10275243B2 (en) * | 2016-07-02 | 2019-04-30 | Intel Corporation | Interruptible and restartable matrix multiplication instructions, processors, methods, and systems |
| US10067911B2 (en) | 2016-07-26 | 2018-09-04 | Advanced Micro Devices, Inc. | High performance inplace transpose operations |
| CN106228238B (zh) * | 2016-07-27 | 2019-03-22 | 中国科学技术大学苏州研究院 | 现场可编程门阵列平台上加速深度学习算法的方法和系统 |
| CN106445471B (zh) * | 2016-10-13 | 2018-06-01 | 北京百度网讯科技有限公司 | 处理器和用于在处理器上执行矩阵乘运算的方法 |
| US10146535B2 (en) | 2016-10-20 | 2018-12-04 | Intel Corporatoin | Systems, apparatuses, and methods for chained fused multiply add |
| US10949496B2 (en) | 2016-12-30 | 2021-03-16 | Intel Corporation | Dimension shuffling using matrix processors |
| US10846087B2 (en) | 2016-12-30 | 2020-11-24 | Intel Corporation | Systems, apparatuses, and methods for broadcast arithmetic operations |
| EP3812900B1 (en) | 2016-12-31 | 2023-11-29 | Intel Corporation | Systems, methods, and apparatuses for heterogeneous computing |
| JP6912703B2 (ja) | 2017-02-24 | 2021-08-04 | 富士通株式会社 | 演算方法、演算装置、演算プログラム及び演算システム |
| US10817587B2 (en) | 2017-02-28 | 2020-10-27 | Texas Instruments Incorporated | Reconfigurable matrix multiplier system and method |
| CN114461276A (zh) | 2017-03-20 | 2022-05-10 | 英特尔公司 | 用于点积操作的系统、方法和装置 |
| US10338919B2 (en) * | 2017-05-08 | 2019-07-02 | Nvidia Corporation | Generalized acceleration of matrix multiply accumulate operations |
| WO2018228703A1 (en) * | 2017-06-16 | 2018-12-20 | Huawei Technologies Co., Ltd. | Multiply accumulator array and processor device |
| JP7020485B2 (ja) | 2017-06-22 | 2022-02-16 | 日本電気株式会社 | 演算装置、演算方法及びプログラム |
| GB2563878B (en) | 2017-06-28 | 2019-11-20 | Advanced Risc Mach Ltd | Register-based matrix multiplication |
| GB2564696B (en) * | 2017-07-20 | 2020-02-05 | Advanced Risc Mach Ltd | Register-based complex number processing |
| US20190079903A1 (en) | 2017-09-14 | 2019-03-14 | Qualcomm Incorporated | Providing matrix multiplication using vector registers in processor-based devices |
| US11138291B2 (en) | 2017-09-26 | 2021-10-05 | Oracle International Corporation | Assymetric allocation of SRAM and data layout for efficient matrix multiplication |
| FR3075410B1 (fr) * | 2017-12-14 | 2021-03-19 | Safran Electronics & Defense | Procede de traitement d'un signal comprenant une detection de perturbations causees par un impact de foudre |
| US11023382B2 (en) | 2017-12-22 | 2021-06-01 | Intel Corporation | Systems, methods, and apparatuses utilizing CPU storage with a memory reference |
| US20190205137A1 (en) | 2017-12-29 | 2019-07-04 | Lawrence Meadows | Methods and apparatus for multi-load and multi-store vector instructions |
| US11023235B2 (en) * | 2017-12-29 | 2021-06-01 | Intel Corporation | Systems and methods to zero a tile register pair |
| US11809869B2 (en) | 2017-12-29 | 2023-11-07 | Intel Corporation | Systems and methods to store a tile register pair to memory |
| US11669326B2 (en) | 2017-12-29 | 2023-06-06 | Intel Corporation | Systems, methods, and apparatuses for dot product operations |
| US11093247B2 (en) | 2017-12-29 | 2021-08-17 | Intel Corporation | Systems and methods to load a tile register pair |
| US11816483B2 (en) | 2017-12-29 | 2023-11-14 | Intel Corporation | Systems, methods, and apparatuses for matrix operations |
| US11789729B2 (en) * | 2017-12-29 | 2023-10-17 | Intel Corporation | Systems and methods for computing dot products of nibbles in two tile operands |
| US10572568B2 (en) * | 2018-03-28 | 2020-02-25 | Intel Corporation | Accelerator for sparse-dense matrix multiplication |
| US10649772B2 (en) | 2018-03-30 | 2020-05-12 | Intel Corporation | Method and apparatus for efficient matrix transpose |
| US10664287B2 (en) | 2018-03-30 | 2020-05-26 | Intel Corporation | Systems and methods for implementing chained tile operations |
| US10620951B2 (en) | 2018-06-22 | 2020-04-14 | Intel Corporation | Matrix multiplication acceleration of sparse matrices using column folding and squeezing |
| US20200050452A1 (en) * | 2018-08-11 | 2020-02-13 | Intel Corporation | Systems, apparatuses, and methods for generating an index by sort order and reordering elements based on sort order |
| US10970076B2 (en) | 2018-09-14 | 2021-04-06 | Intel Corporation | Systems and methods for performing instructions specifying ternary tile logic operations |
| US11579883B2 (en) | 2018-09-14 | 2023-02-14 | Intel Corporation | Systems and methods for performing horizontal tile operations |
| US20200097291A1 (en) | 2018-09-24 | 2020-03-26 | Intel Corporation | Apparatus and method for tile gather and tile scatter |
| US10990396B2 (en) | 2018-09-27 | 2021-04-27 | Intel Corporation | Systems for performing instructions to quickly convert and use tiles as 1D vectors |
| US10866786B2 (en) | 2018-09-27 | 2020-12-15 | Intel Corporation | Systems and methods for performing instructions to transpose rectangular tiles |
| US10719323B2 (en) | 2018-09-27 | 2020-07-21 | Intel Corporation | Systems and methods for performing matrix compress and decompress instructions |
| US10896043B2 (en) | 2018-09-28 | 2021-01-19 | Intel Corporation | Systems for performing instructions for fast element unpacking into 2-dimensional registers |
| US10963256B2 (en) * | 2018-09-28 | 2021-03-30 | Intel Corporation | Systems and methods for performing instructions to transform matrices into row-interleaved format |
| US10963246B2 (en) * | 2018-11-09 | 2021-03-30 | Intel Corporation | Systems and methods for performing 16-bit floating-point matrix dot product instructions |
| US11284112B2 (en) * | 2018-12-06 | 2022-03-22 | Tencent America LLC | Method and apparatus for a primary transform using an 8-bit transform core |
| US10929503B2 (en) * | 2018-12-21 | 2021-02-23 | Intel Corporation | Apparatus and method for a masked multiply instruction to support neural network pruning operations |
| US11886875B2 (en) * | 2018-12-26 | 2024-01-30 | Intel Corporation | Systems and methods for performing nibble-sized operations on matrix elements |
| US11294671B2 (en) * | 2018-12-26 | 2022-04-05 | Intel Corporation | Systems and methods for performing duplicate detection instructions on 2D data |
| US20200210188A1 (en) * | 2018-12-27 | 2020-07-02 | Intel Corporation | Systems and methods for performing matrix row- and column-wise permute instructions |
| US20200210517A1 (en) | 2018-12-27 | 2020-07-02 | Intel Corporation | Systems and methods to accelerate multiplication of sparse matrices |
| US10942985B2 (en) | 2018-12-29 | 2021-03-09 | Intel Corporation | Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions |
| US10922077B2 (en) | 2018-12-29 | 2021-02-16 | Intel Corporation | Apparatuses, methods, and systems for stencil configuration and computation instructions |
| US11269630B2 (en) * | 2019-03-29 | 2022-03-08 | Intel Corporation | Interleaved pipeline of floating-point adders |
| US11016731B2 (en) * | 2019-03-29 | 2021-05-25 | Intel Corporation | Using Fuzzy-Jbit location of floating-point multiply-accumulate results |
| US11175891B2 (en) | 2019-03-30 | 2021-11-16 | Intel Corporation | Systems and methods to perform floating-point addition with selected rounding |
| US10990397B2 (en) * | 2019-03-30 | 2021-04-27 | Intel Corporation | Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator |
| US11334647B2 (en) * | 2019-06-29 | 2022-05-17 | Intel Corporation | Apparatuses, methods, and systems for enhanced matrix multiplier architecture |
| US20200026745A1 (en) | 2019-09-27 | 2020-01-23 | Intel Corporation | Apparatuses, methods, and systems for instructions of a matrix operations accelerator |
| US11714875B2 (en) | 2019-12-28 | 2023-08-01 | Intel Corporation | Apparatuses, methods, and systems for instructions of a matrix operations accelerator |
| US20210406018A1 (en) | 2020-06-27 | 2021-12-30 | Intel Corporation | Apparatuses, methods, and systems for instructions for moving data between tiles of a matrix operations accelerator and vector registers |
| US12112167B2 (en) * | 2020-06-27 | 2024-10-08 | Intel Corporation | Matrix data scatter and gather between rows and irregularly spaced memory locations |
| US20210406012A1 (en) * | 2020-06-27 | 2021-12-30 | Intel Corporation | Loading and storing matrix data with datatype conversion |
| US11972230B2 (en) * | 2020-06-27 | 2024-04-30 | Intel Corporation | Matrix transpose and multiply |
| US20220100513A1 (en) | 2020-09-26 | 2022-03-31 | Intel Corporation | Apparatuses, methods, and systems for instructions for loading data and padding into a tile of a matrix operations accelerator |
| US11941395B2 (en) | 2020-09-26 | 2024-03-26 | Intel Corporation | Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions |
| US20220197652A1 (en) | 2020-12-22 | 2022-06-23 | Intel Corporation | Processors, methods, systems, and instructions to merge portions of two source two-dimensional arrays without explicit per-portion control |
| US20220197653A1 (en) | 2020-12-22 | 2022-06-23 | Intel Corporation | Processors, methods, systems, and instructions to select and store data elements from strided data element positions in a first dimension from three source two-dimensional arrays in a result two-dimensional array |
| US20220197974A1 (en) | 2020-12-22 | 2022-06-23 | Intel Corporation | Processors, methods, systems, and instructions to select and store data elements from two source two-dimensional arrays indicated by permute control elements in a result two-dimensional array |
| 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 |
| US12020028B2 (en) | 2020-12-26 | 2024-06-25 | Intel Corporation | Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions |
| US12353878B2 (en) | 2021-06-26 | 2025-07-08 | Intel Corporation | Apparatuses, methods, and systems for instructions for matrix multiplication instructions |
| US20240045691A1 (en) | 2022-08-03 | 2024-02-08 | Intel Corporation | Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions |
| US20240220323A1 (en) | 2022-12-30 | 2024-07-04 | Intel Corporation | Apparatuses, methods, and systems for instructions for loading a tile of a matrix operations accelerator |
-
2017
- 2017-07-01 CN CN202210132102.3A patent/CN114461276A/zh active Pending
- 2017-07-01 WO PCT/US2017/040543 patent/WO2018174932A1/en not_active Ceased
- 2017-07-01 EP EP23194771.4A patent/EP4303724A1/en active Pending
- 2017-07-01 WO PCT/US2017/040541 patent/WO2018174931A1/en not_active Ceased
- 2017-07-01 CN CN202311167736.3A patent/CN117130661A/zh active Pending
- 2017-07-01 WO PCT/US2017/040540 patent/WO2018174930A1/en not_active Ceased
- 2017-07-01 US US16/487,774 patent/US11263008B2/en active Active
- 2017-07-01 WO PCT/US2017/040544 patent/WO2018174933A1/en not_active Ceased
- 2017-07-01 US US16/486,960 patent/US11163565B2/en active Active
- 2017-07-01 WO PCT/US2017/040534 patent/WO2018174925A1/en not_active Ceased
- 2017-07-01 US US16/487,777 patent/US11080048B2/en active Active
- 2017-07-01 CN CN201780086978.6A patent/CN110312992A/zh active Pending
- 2017-07-01 US US16/474,483 patent/US10877756B2/en active Active
- 2017-07-01 EP EP22169888.9A patent/EP4053695B1/en active Active
- 2017-07-01 WO PCT/US2017/040538 patent/WO2018174928A1/en not_active Ceased
- 2017-07-01 WO PCT/US2017/040536 patent/WO2018174926A1/en not_active Ceased
- 2017-07-01 US US16/487,784 patent/US11360770B2/en active Active
- 2017-07-01 WO PCT/US2017/040548 patent/WO2018174936A1/en not_active Ceased
- 2017-07-01 US US16/474,507 patent/US11200055B2/en active Active
- 2017-07-01 EP EP24222432.7A patent/EP4553650A1/en active Pending
- 2017-07-01 CN CN201780086894.2A patent/CN110337635B/zh active Active
- 2017-07-01 EP EP17901997.1A patent/EP3602279B1/en active Active
- 2017-07-01 WO PCT/US2017/040546 patent/WO2018174935A1/en not_active Ceased
- 2017-07-01 EP EP22196743.3A patent/EP4137940A1/en active Pending
- 2017-07-01 US US16/487,766 patent/US11567765B2/en active Active
- 2017-07-01 US US16/474,475 patent/US12124847B2/en active Active
- 2017-07-01 EP EP17901884.1A patent/EP3602277B1/en active Active
- 2017-07-01 CN CN201780088609.0A patent/CN110494846A/zh active Pending
- 2017-07-01 EP EP22196776.3A patent/EP4137941A1/en active Pending
- 2017-07-01 US US16/487,787 patent/US11086623B2/en active Active
- 2017-07-01 CN CN202411937513.5A patent/CN119861972A/zh active Pending
- 2017-07-01 EP EP23161367.0A patent/EP4216057A1/en active Pending
- 2017-07-01 WO PCT/US2017/040537 patent/WO2018174927A1/en not_active Ceased
- 2017-07-01 US US16/487,421 patent/US12106100B2/en active Active
- 2017-07-01 CN CN202311493794.5A patent/CN117407644A/zh active Pending
- 2017-07-01 EP EP24153964.2A patent/EP4354303A3/en active Pending
- 2017-07-01 WO PCT/US2017/040539 patent/WO2018174929A1/en not_active Ceased
- 2017-07-01 CN CN202410169239.5A patent/CN118034781A/zh active Pending
- 2017-07-01 US US16/487,747 patent/US11288068B2/en active Active
- 2017-07-01 CN CN202210487117.1A patent/CN114816530A/zh active Pending
- 2017-07-01 WO PCT/US2017/040545 patent/WO2018174934A1/en not_active Ceased
- 2017-07-01 US US16/487,755 patent/US11288069B2/en active Active
- 2017-07-01 EP EP22154164.2A patent/EP4012555A1/en active Pending
- 2017-07-01 EP EP24153968.3A patent/EP4336369A3/en active Pending
- 2017-07-01 EP EP17901887.4A patent/EP3602278B1/en active Active
- 2017-07-01 CN CN202310280501.9A patent/CN116150564A/zh active Pending
-
2021
- 2021-06-28 US US17/360,562 patent/US11847452B2/en active Active
- 2021-07-22 US US17/382,917 patent/US12147804B2/en active Active
- 2021-11-01 US US17/516,023 patent/US12314717B2/en active Active
- 2021-12-10 US US17/548,214 patent/US12260213B2/en active Active
-
2022
- 2022-01-28 US US17/587,637 patent/US12039332B2/en active Active
- 2022-03-28 US US17/706,428 patent/US11714642B2/en active Active
- 2022-03-28 US US17/706,413 patent/US11977886B2/en active Active
- 2022-06-06 US US17/833,643 patent/US20220300286A1/en not_active Abandoned
-
2023
- 2023-01-23 US US18/100,194 patent/US12182571B2/en active Active
- 2023-12-08 US US18/534,012 patent/US12282773B2/en active Active
- 2023-12-29 US US18/400,961 patent/US20240134644A1/en active Pending
-
2024
- 2024-02-05 US US18/432,317 patent/US20240256276A1/en active Pending
- 2024-02-16 US US18/444,254 patent/US20240192954A1/en active Pending
- 2024-05-03 US US18/654,951 patent/US20250004716A1/en active Pending
- 2024-05-14 US US18/663,228 patent/US20240320001A1/en active Pending
- 2024-10-18 US US18/920,691 patent/US20250117221A1/en active Pending
- 2024-10-29 US US18/930,671 patent/US20250117222A1/en active Pending
Patent Citations (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7932910B2 (en) * | 1995-08-16 | 2011-04-26 | Microunity Systems Engineering, Inc. | System and software for performing matrix multiply extract operations |
| US20040111587A1 (en) * | 2002-12-09 | 2004-06-10 | Nair Gopalan N | Apparatus and method for matrix data processing |
| CN102081513A (zh) * | 2011-01-24 | 2011-06-01 | 山东大学 | Aes加密算法中列混淆过程指令优化方法及其指令集处理器 |
| US20120254588A1 (en) * | 2011-04-01 | 2012-10-04 | Jesus Corbal San Adrian | Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask |
| CN102411558A (zh) * | 2011-10-31 | 2012-04-11 | 中国人民解放军国防科学技术大学 | 面向向量处理器的大矩阵相乘的向量化实现方法 |
| CN104137055A (zh) * | 2011-12-29 | 2014-11-05 | 英特尔公司 | 点积处理器、方法、系统和指令 |
| CN104969477A (zh) * | 2013-02-08 | 2015-10-07 | 索尼公司 | 数据处理装置和数据处理方法 |
| CN105302522A (zh) * | 2014-06-26 | 2016-02-03 | 英特尔公司 | 提供通用gf(256)simd密码算法功能性的指令和逻辑 |
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN112668015A (zh) * | 2019-12-12 | 2021-04-16 | 华控清交信息科技(北京)有限公司 | 一种数据处理方法、装置和用于数据处理的装置 |
| CN113536216A (zh) * | 2020-04-22 | 2021-10-22 | 脸谱公司 | 用分布流水线可分离卷积运算将卷积映射到相连处理元件 |
| CN113805940A (zh) * | 2020-08-17 | 2021-12-17 | 阿里巴巴集团控股有限公司 | 用于人工智能和机器学习的向量加速器 |
Also Published As
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US12282773B2 (en) | Systems, methods, and apparatus for tile configuration | |
| US12282525B2 (en) | Systems, methods, and apparatuses for matrix operations |
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 |