CN110770701A - 基于寄存器的矩阵乘法 - Google Patents
基于寄存器的矩阵乘法 Download PDFInfo
- Publication number
- CN110770701A CN110770701A CN201880041798.0A CN201880041798A CN110770701A CN 110770701 A CN110770701 A CN 110770701A CN 201880041798 A CN201880041798 A CN 201880041798A CN 110770701 A CN110770701 A CN 110770701A
- Authority
- CN
- China
- Prior art keywords
- matrix
- data elements
- register
- source
- square
- 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.)
- Granted
Links
Images
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
- 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
- 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/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/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- 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/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
Abstract
公开了一种用于在数据处理装置中执行矩阵乘法的技术,该技术包括装置、矩阵乘法指令、操作该装置的方法以及虚拟机实施方式。寄存器由矩阵乘法指令引用,每个寄存器用于存储至少四个数据元素,并且响应于矩阵乘法指令,执行矩阵乘法运算。从第一和第二源寄存器提取第一和第二数据元素矩阵,并执行分别作用于第一矩阵的相应行和第二矩阵的相应列的多个点积运算,以生成应用于目的寄存器的结果数据元素的方形矩阵。对于逐元素矢量技术,对于给定数量的寄存器操作数,可以实现更高的计算密度。
Description
技术领域
本公开涉及数据处理装置。更具体地,本公开涉及数据处理装置中矩阵乘法的性能。
背景技术
现代数据处理装置通常设置有多个寄存器,其中可以保存作为数据处理装置的数据处理操作的主体的数据值。数据处理装置可以将这些寄存器的内容视为值的阵列,例如,在寄存器具有保持512位的存储容量的情况下,数据处理装置可以将其视为十六个32位值的阵列。然后,数据处理装置可以例如以SIMD(单指令多数据)方式将数据处理操作应用于该阵列的单独指定的元素,或应用于值的阵列的相应元素,例如将每个元素乘以指定值。
发明内容
在一个示例实施例中,提供了一种装置,包括:具有多个寄存器的寄存器存储电路,每个寄存器用于存储至少四个数据元素;解码器电路,其响应于矩阵乘法指令以生成控制信号,其中,矩阵乘法指令在多个寄存器中指定:第一源寄存器、第二源寄存器以及目的寄存器;以及数据处理电路,其响应于控制信号以执行矩阵乘法运算,包括:从第一源寄存器提取第一数据元素矩阵;从第二源寄存器提取第二数据元素矩阵;执行多个点积运算以生成结果数据元素的方形矩阵,其中每个点积运算作用于第一数据元素矩阵的相应行和第二数据元素矩阵的相应列,以生成结果数据元素的方形矩阵的相应结果数据元素;并且将结果数据元素的方形矩阵(square matrix)应用于目的寄存器。
在另一个示例实施例中,提供了一种操作数据处理装置的方法,该方法包括:响应于矩阵乘法指令生成控制信号,其中矩阵乘法指令在多个寄存器中指定第一源寄存器、第二源寄存器和目的寄存器,每个寄存器能够存储至少四个数据元素;响应于控制信号执行矩阵乘法运算,包括:从第一源寄存器提取第一数据元素矩阵;以及从第二源寄存器提取第二数据元素矩阵;执行多个点积运算以生成结果数据元素的方形矩阵,其中每个点积运算作用于第一数据元素矩阵的相应行和第二数据元素矩阵的相应列,以生成结果数据元素的方形矩阵的相应结果数据元素;并将结果数据元素的方形矩阵应用于目的寄存器。
在另一个示例实施例中,提供了一种装置,该装置包括:用于响应于矩阵乘法指令而生成控制信号的单元,其中矩阵乘法指令在多个寄存器中指定第一源寄存器、第二源寄存器和目的寄存器,每个寄存器能够存储至少四个数据元素;响应于控制信号执行矩阵乘法运算的单元,包括:用于从第一源寄存器提取第一数据元素矩阵的单元;和用于从第二源寄存器提取第二数据元素矩阵的单元;用于执行多个点积运算以生成结果数据元素的方形矩阵的装置,其中每个点积运算作用于第一数据元素矩阵的相应行和第二数据元素矩阵的相应列以生成结果数据元素的方形矩阵的相应结果数据元素;用于将结果数据元素的方形矩阵应用于目的寄存器的单元。
附图说明
参照附图中所示的本技术的实施例,仅以示例的方式进一步描述本技术,在附图中:
图1示意性地示出了可以实现本技术的各种示例的数据处理装置;
图2A示意性地示出了逐元素向量技术,其使用来自源寄存器A的指定元素和来自源寄存器B的值的阵列来生成四个要存储在累加器寄存器C中的元素,而图2B示意性地示出了本技术的一个实施例,根据该技术,将从源寄存器A获取的数据元素的方形矩阵与从源寄存器B获取的元素的方形矩阵相乘,以生成要在目的寄存器C中累加的元素的方形矩阵;
图3示意性地示出了在一个实施例中提供的用以支持诸如图2B所示的矩阵乘法运算的电路;
图4示出了本技术的一个实施例,其中通过将一对4×4矩阵相乘来生成4×4矩阵;
图5示出了本技术的实施例,其中源元素大小与结果元素大小不同,并且其中将2×8元素矩阵与8×2元素矩阵相乘以生成2×2矩阵;
图6示意性地示出了根据本技术的一对4×4矩阵被相乘在一起以形成4×4矩阵;
图7A示意性地示出了针对与图6所示相同的源寄存器和目的寄存器,根据本技术的四个单独的2×2矩阵乘法的性能;
图7B示意性地示出了在一个实施例中实施图7A的示例的电路的更多细节;
图8示意性地示出了在本技术的一个实施例中强加软件定义的最大矢量长度以及对如图6和图7所示的相同的源寄存器和目的寄存器的使用的限制,从而执行了两个2×2矩阵乘法;
图9示意性地示出了将8×2矩阵与2×8矩阵相乘以生成8×8矩阵,并且等效地示出了在4×2和2×4矩阵之间进行四个矩阵乘法运算以生成4×4矩阵的性能;
图10示意性地示出了由本技术提供的指令,该指令用于生成方形结果矩阵,该方形结果矩阵仅占据指定的目的寄存器的一部分,并且在指令内指定了该部分的变型;
图11A示意性地示出了由本技术提供的指令的操作,该指令从源寄存器的一部分提取操作数矩阵,并使用该矩阵与从另一源寄存器的相应部分获取的矩阵来执行矩阵乘法运算,以生成两个结果方形矩阵;
图11B示意性地示出了两个源寄存器的相应部分,用于从每个源寄存器提供两个相应的方形源矩阵,将它们相乘在一起以生成两个方形结果矩阵;以及
图11C示意性地示出了由本技术使用的复制加载操作,其中从指定的存储器位置加载数据值并将其复制到目的寄存器的每一半中;
图11D示意性地示出了在一个实施例中支持图11A和11B的示例的一些电路的示例细节;
图12A和12B示意性地示出了由本技术提供的指令的操作,根据该指令,可以通过在指令中设置或不设置标志来选择性地执行对指定源寄存器的两半的内容的切换;
图12C示意性地示出了在一个实施例中支持图12A和12B的示例的一些电路的示例细节;
图13示意性地示出了根据本技术的矩阵乘法运算的性能,其中用于矩阵乘法的一个操作数矩阵由两个源寄存器提供;
图14示意性地示出了图13所示的技术的变型,其中两个操作数矩阵均由两个源寄存器提供,并且得到的方形矩阵被存储在两个目的寄存器中。
图15示意性地示出了可以使用的虚拟机实施方式;以及
图16示出了根据一个实施例的方法采取的一系列步骤。
具体实施方式
至少一些实施例提供了一种装置,其包括:寄存器存储电路,具有多个寄存器,每个寄存器用于存储至少四个数据元素;解码器电路,响应于矩阵乘法指令以生成控制信号,其中矩阵乘法指令在多个寄存器中指定第一源寄存器、第二源寄存器以及目的寄存器;以及数据处理电路,其响应于控制信号以执行矩阵乘法运算,包括:从第一源寄存器提取第一数据元素矩阵;以及从第二源寄存器提取第二数据元素矩阵;执行多个点积运算以生成结果数据元素的方形矩阵,其中每个点积运算作用于第一数据元素矩阵的相应行和第二数据元素矩阵的相应列,以生成结果数据元素的方形矩阵的相应结果数据元素;并将结果数据元素的方形矩阵应用于目的寄存器。
本技术通过提供矩阵乘法指令以及响应于该指令的装置内的相应电路,使用表示保持在装置的寄存器中的矩阵元素的数据值来促进矩阵乘法运算的性能,其实施了一种方法,根据该方法,指令中指定的寄存器的内容被视为数据元素的矩阵。以这种方式,响应于矩阵乘法指令,数据处理电路分别从指定的第一和第二源寄存器提取第一和第二数据元素矩阵。此外,数据处理电路然后执行多个点积运算以生成结果数据元素的方形矩阵。通过矩阵乘法的性质,可以理解这些点积运算中的每个都是参照数据元素的一个操作数矩阵的相应行以及数据元素的另一操作数矩阵的相应列、针对方形矩阵的相应结果数据元素执行的。要注意的是,得到的矩阵是方形的,即至少包含四个数据元素(2×2配置),但是本技术适用于结果数据元素的任何方形矩阵的生成(例如3×3、4×4、5×5等)。所生成的结果数据元素的结果方形矩阵被应用于指令中指定的目的寄存器,其中该装置理解该目的寄存器保持的矩阵表示。
还应注意,本技术采用的方法不仅是表示的一种,即对给定寄存器内容的语义的任意选择。参照用于在其中寄存器保持多个数据元素的数据处理装置中执行矩阵乘法的替代技术可以理解这一点。在这种替代技术中,可以通过对两个源寄存器的内容执行“逐元素矢量”操作来执行各种矩阵乘法,其中从一个源寄存器提取指定的元素,而从另一个源寄存器提取元素的矢量。以这种方式,可以执行与单个矩阵行(或等效地单个矩阵列)的生成相对应的点积运算。然后可以对应于结果矩阵的其他行(或列)执行进一步的此类操作。然而,本技术认识到,该替代技术的实施方式与本技术的实施方式之间的进一步区别在于,当将所描述的逐元素矢量操作应用于矢量包括四个元素的示例中时,则通常将包括三个矢量读取(对应于两个源寄存器和目标累加器寄存器)四个并行乘法累加运算(即,一个用于在生成的矢量中生成与结果矩阵的行相对应的每个元素),最后一个矢量写入(与将生成的矢量写入目的寄存器相对应)。可以将其与使用根据本技术的矩阵乘法指令的情况进行比较,其中来自第一源寄存器的第一数据元素矩阵与来自第二源寄存器的第二数据元素矩阵相乘以生成结果数据元素的方形矩阵,然后(在某些实施例中)可能会在指定的目的寄存器中累加。因此,类似于上述替代技术,在本示例中的本技术的实施方式还需要三个矢量读取(对于两个源寄存器中的每个以及累加器目的寄存器)和一个矢量写入(以将累加结果写回到目的累加器寄存器中)。然而,在实施矩阵乘法时,本技术的矩阵乘法指令启动八次运算(即,在此示例中生成2×2方形矩阵,对结果方形矩阵中的每个结果数据元素执行两次数据元素相乘,将它们相加在一起以生成将与矩阵中该位置的现有值一起累加的值)。因此,对于相同的寄存器访问,本技术实施了更大的乘法累加运算密度。此外,应当注意,尽管在上面讨论的2×2方形矩阵的生成的示例中,乘法累加运算的密度被加倍,但是该比率随着所生成的方形矩阵的大小而缩放。例如,在生成结果数据元素的4×4方形矩阵时,本技术的指令发起64次乘法累加运算,换句话说,对于相同数量的寄存器访问,乘法累加运算比逐元素矢量方法多四倍。
本技术提出将结果数据元素的方形矩阵应用于矩阵乘法指令中指定的目的寄存器,并且这可以以多种方式来执行。在一些实施例中,将结果数据元素的方形矩阵应用于目的寄存器包括将结果数据元素的方形矩阵存储在目的寄存器中。换句话说,结果数据元素的方形矩阵可以直接存储到目的寄存器中,而无需考虑该目的寄存器的任何先前存在的内容,从而覆盖其内容。取决于装置所执行的数据处理操作的性质,可能需要考虑或可能不需要考虑目的寄存器的预先存在的内容。因此,在其中应考虑目的寄存器的内容的其他示例中,尤其在目的寄存器已经保持数据元素的相应方形矩阵的情况下,可能是生成的结果数据元素的方形矩阵应当使用保持在目的寄存器中的现有方形矩阵来累加的情况,因此,在一些实施例中,将结果数据元素的方形矩阵应用于目的寄存器包括:将结果数据元素的方形矩阵与存储在目的寄存器中的结果数据元素的先前存储的方形矩阵累加。
还提出了以解释源寄存器或目的寄存器的内容的方式的进一步灵活性。特别地,提出了第一数据元素矩阵和第二数据元素矩阵中的数据元素的位长度(取自第一源寄存器和第二源寄存器)不必与结果数据元素的方形矩阵的数据元素的位长度相同。然而,在一些实施例中,这些确实可以是相同的。因此,在一些实施例中,第一数据元素矩阵的每个数据元素和第二数据元素矩阵的每个数据元素具有等于结果数据元素的方形矩阵的每个数据元素的结果元素位长度的源元素位长度。相反,在其他实施例中,第一数据元素矩阵的每个数据元素和第二数据元素矩阵的每个数据元素的源元素位长度与结果数据元素的方形矩阵的每个数据元素的结果元素位长度不同。例如,仅举一个说明性示例,在使用128位寄存器的数据处理装置中,可以存储32位数据元素的方形矩阵,即代表32位数据元素的2×2矩阵。尽管实际上可以通过两个2×2矩阵的矩阵乘法来生成这样的结果方形矩阵,继而这些源矩阵的元素也是32位数据元素,但本技术还提出,结果数据元素的方形矩阵也可以是通过对具有16位数据元素的两个源矩阵进行矩阵乘法(即16位数据元素的2×4矩阵与16位数据元素的4×2矩阵相乘,得到32位数据元素的2×2矩阵)来生成矩阵。同样,也可以通过将8位数据元素的2×8矩阵与8×2矩阵相乘来生成32位数据元素的2×2结果矩阵。
此外,因此,应当理解,本技术预期源元素位长度可以与结果元素位长度相差两倍,但是在一些实施例中,可以预期源元素位长度可以与结果元素位长度相差大于两倍。实际上,要注意的是,取决于要实施的本技术提出的指令的情境,本技术甚至预期源元素位长度的确只能是单个位,即源操作数矩阵中的1位数据元素。还设想了三元实施方式(源元素因此可以从集合-1、0、1中获取值),这些示例不言而喻地适用于输入数据值的精度不那么重要的情境,然而,在本技术支持的并行性可能更有意义。
取决于实施方式,数据元素可以存在预定的位长度,根据该位长度,该装置解释其在实施本技术时所使用的任何源寄存器或目的寄存器的内容。但是,正如上面的讨论所强调的,该位长度也可能具有灵活性。此外,尽管可能存在这样的情况,即对于结果数据元素的方形矩阵的数据元素的给定位长度,其可以直接对应于目的寄存器的大小,但是本技术还提供了其中结果元素的方形矩阵在矩阵乘法指令中指定的变型。例如,这使得矩阵乘法运算能够被执行,其中结果数据元素的方形矩阵小于目的寄存器的全部容量。此外,在其中装置具有给定矢量长度的示例中,指定结果元素的方形矩阵的特定维度以使其与给定矢量长度相匹配的矩阵乘法指令将代表可以支持的结果元素的方形矩阵的维度的上限。因此,例如在具有128位矢量长度的装置中,这可以使矩阵乘法指令执行,这需要执行操作,该操作生成四个32位数据元素的方形矩阵,但是进一步的可能性将对于要生成的十六个8位数据元素的方形矩阵(即4×4方形矩阵)。然而,如果四个32位数据元素的一个方形矩阵表示可以在具有128位矢量长度的装置上生成的矩阵大小的上限(至少需要四个元素),则也可以在支持较宽矢量的另一装置上执行此指令,其优点是针对128位矢量长度装置编写的程序可在具有相同或较宽矢量长度的其他装置上可移植(portable)。实际上,在其中可以将装置的基础架构定义为具有可变(“可缩放”)矢量长度的地方,例如由英国剑桥的有限公司提供的ARMv8-A架构的可伸缩矢量扩展(SVE)提供的,并且因此可以然后构造一系列装置,所有这些装置均等价于该架构,但是具有一系列可能的矢量长度,因此即使这些装置可以具有不同的矢量长度,也可以在这些装置中的任何一个上一致地执行相同的指令。
此外,矩阵乘法指令指定结果数据元素的方形矩阵的维度的能力使得能够进一步支持上述变型,其中结果数据元素的方形矩阵不必填充目的寄存器的容量。例如,再次使用128位矢量长度的示例,尽管这可以容纳8位数据元素的4×4矩阵,但是还可以预期,矩阵乘法指令可以将执行的矩阵乘法运算限制为生成2×2方形结果矩阵,因此将在矢量长度中存储四个8位数据元素(仅占据其容量的四分之一)。
第一数据元素矩阵、第二数据元素矩阵的数据元素和由矩阵乘法器运算得到的数据元素可以采用各种形式。在一些实施例中,它们可以是浮点值,而在其他实施例中,它们可以是整数值。这些整数值可以是无符号的或有符号的。
从以上讨论中将理解,源矩阵(即,第一数据元素矩阵和第二数据元素矩阵)可以采取各种形式和配置,特别是关于这些矩阵的各个维度。因此,在一些实施例中,第一数据元素矩阵和第二数据元素矩阵是方形矩阵。在其他实施例中,第一数据元素矩阵和第二数据元素矩阵是非方形矩阵。
在装置中使用定义的矢量长度(意味着存储多个数据元素的数据处理矢量寄存器(在本文中统称为“矢量”)只能保持处理不超过该长度的用于处理的矢量)对矢量的组成数据元素的总大小自然地施加限制,因为它们的总和不能超过该矢量长度的总大小。然而,如上所述,可用矢量长度可能在一个装置与另一个装置之间变化,并且这里再次具有使便携式软件可以在各种矢量长度上运行的优点。
在这种情境下,本技术考虑了其中装置可由其用户配置以限制其处理的矢量长度的实施例。换句话说,装置的程序员可以对其进行配置,使得其具有允许的最大矢量长度,并且在装置中执行的后续数据处理操作必须遵守所施加的最大矢量长度。因此,在一些实施例中,解码器电路进一步响应于配置指令以生成配置控制信号,其中该配置指令指定最大矢量长度,并且数据处理电路响应于配置控制信号以约束后续的矩阵乘法运算,使得结果数据元素的总大小不超过最大矢量长度。例如,在装置具有例如512位的“本机(native)”矢量长度的情况下,此配置指令将使软件限制可以应用于装置执行的数据处理操作,据此,该装置可能会例如限制为256位的最大矢量长度。因此,如果在此约束下执行的给定软件需要256位矢量,则施加最大矢量长度的机制也可以用于确保其将在碰巧具有更长矢量的装置上运行,无论这样上述示例中的512位本机矢量长度还是比256位施加的限制更长的任何其他矢量长度。
在最大矢量长度上施加这种软件限制可能会以各种方式约束后续的矩阵乘法运算(以最大矢量长度为准)。例如,在一些实施例中,约束后续的矩阵乘法运算包括生成结果数据元素的方形矩阵,该矩阵的维度使得结果数据元素的总大小不超过最大矢量长度。因此,例如,目的寄存器的“本机”容量使得可以将4×4数据元素矩阵存储在那里的情况下(或者,如果不占满容量,则是相同大小的3×3或2×2数据元素矩阵),在数据元素的4×4矩阵对于所定义的最大矢量长度而言太大的情况下,施加软件定义的最大矢量长度约束了矩阵乘法运算,从而仅可以生成数据元素的2×2或3×3方形矩阵。
替代地或另外地,在其他实施例中,这种软件定义的最大矢量长度可以导致结果数据元素的方形矩阵的数量受到限制。因此,在这一点上值得注意的是,尽管本技术提出了矩阵乘法运算,该运算导致矩阵乘法运算被执行,结果是生成了结果数据元素的方形矩阵,但是这并不排除响应于矩阵乘法指令生成结果数据元素的另一个方形矩阵的可能性。仅举一个示例,在目的寄存器具有结果方形矩阵大小的两倍容量的情况下,可以实施响应于矩阵乘法指令的矩阵乘法运算,该矩阵乘法运算生成两个方形矩阵以完全使用目的寄存器的存储容量。然而,进一步在上述软件定义的最大矢量长度的情境中,这然后可以约束可以响应于矩阵乘法指令而生成的方形矩阵的数量。根据以上讨论,将认识到结果元素的总大小可以小于目的寄存器的存储容量。
在矩阵乘法指令中指定结果数据元素方形矩阵的维度的实施例的情境中,这可以直接对应于目的寄存器容量,因此在此类实施例中,具有在矩阵乘法指令中指定的维数的结果数据元素的方形矩阵对应于目的寄存器的存储容量。
如上所述,本技术还提出了其中目的寄存器的存储容量大于存储结果数据元素的结果方形矩阵所需的存储容量的实施例。通常,本技术使用的寄存器均具有存储至少四个数据元素的容量,因此在一些实施例中,目的寄存器具有容纳至少八个数据元素并至少存储结果数据元素的第二方形矩阵的存储容量。因此,虽然生成的结果方形矩阵均可以具有四个数据元素,并且两个矩阵都存储在具有存储8个数据元素的存储容量的目的寄存器中,但在其他示例中,结果方形矩阵可以具有9个数据元素(3×3矩阵)并且可以存储在具有容纳18个数据元素的存储容量的目的寄存器中,两个方形矩阵(每个均具有16个数据元素(4×4矩阵))可以存储在具有容纳32个数据元素等存储容量的目的寄存器中。此外,将认识到,目的寄存器可以具有容纳多于两个的结果数据元素的方形矩阵的存储容量。
因此,在其中在矩阵乘法指令中指定结果数据元素的方形矩阵的维度的实施例的情境中,目的寄存器的存储容量可能能够存储具有矩阵乘法指令中指定的维度的一个以上的结果数据元素的方形矩阵。
在目的寄存器的存储容量足以存储一个以上的结果方形矩阵的实施例中,可以以各种方式将所生成的结果数据元素的方形矩阵应用于目的寄存器。例如,在一些实施例中,数据处理电路响应于控制信号以将结果数据元素的方形矩阵应用于目的寄存器的第一部分。此外,可以以多种方式定义目的寄存器的第一部分,因为在一些实施例中,它是针对数据处理电路预先确定的,即数据处理电路将始终选择将结果数据元素的方形矩阵应用于其的目的寄存器的给定部分,而在其他实施例中,矩阵乘法指令进一步指定目的寄存器的第一部分。换句话说,使用目的寄存器的哪一部分的选择可能对程序员是开放的。将认识到,取决于特定的情况,目的寄存器的第一“部分”可以代表目的寄存器的整个存储容量的不同部分,但是例如可以是例如目的寄存器的一半或四分之一。
在一些实施例中,在目的寄存器具有大于结果数据元素(即结果数据元素的方形矩阵)的总大小的存储容量的示例中,数据处理电路进一步响应于控制信号以执行第二矩阵乘法运算从而生成结果数据元素的第二方形矩阵,并将结果数据元素的第二方形矩阵应用于目的寄存器的第二部分。因此,响应于一个矩阵乘法指令,可以执行一个以上的矩阵乘法运算,以生成一个以上的结果方形矩阵,然后将其应用于目的寄存器的各个部分。
因此,响应于矩阵乘法指令执行一个以上的矩阵乘法运算,本技术设想了多种方式,其中得出这些矩阵乘法运算中的每个的各个源(操作数)矩阵。例如,在一些实施例中,从第一源寄存器的第一部分提取来自第一源寄存器的第一数据元素矩阵,并且数据处理电路响应于控制信号以执行矩阵乘法运算作为第一矩阵乘法运算,包括:从第二源寄存器的第一部分提取第二数据元素矩阵;以及将结果数据元素的方形矩阵应用于目的寄存器的第一部分;数据处理电路响应于控制信号以执行第二矩阵乘法运算,包括:从第二源寄存器的第二部分提取第二数据元素矩阵;以及将结果数据元素的方形矩阵应用于目的寄存器的第二部分。
替代地,在其他实施例中,数据处理电路响应于控制信号以执行矩阵乘法操作作为第一矩阵乘法操作,包括:从第一源寄存器的第一部分提取第一数据元素矩阵;从第二源寄存器的第一部分提取第二数据元素矩阵;以及将结果数据元素的方形矩阵应用于目的寄存器的第一部分;并且其中,数据处理电路响应于控制信号以执行第二矩阵乘法运算,包括:从第一源寄存器的第二部分提取第一数据元素矩阵;从第二源寄存器的第二部分提取第二数据元素矩阵;以及将结果数据元素的方形矩阵应用于目的寄存器的第二部分。
换句话说,取决于特定的实施方式,这两个矩阵乘法运算可以采用相同的第一操作数矩阵(从第一源寄存器的第一部分提取),并将其在相应的矩阵乘法运算中应用于从第二源寄存器提取的第一矩阵和第二矩阵,或者可以从第一源寄存器提取两个源矩阵,并从第二源寄存器提取两个源矩阵,分别将它们相乘以形成第一结果矩阵和第二结果矩阵。
再一次,类似于以上的说明,可以以各种方式定义和指定目的寄存器中应用了结果矩阵的部分,在其中第一源寄存器的相应部分用于相应的矩阵乘法运算的实施例中,这第一部分也可以以各种方式定义。在一些实施例中,第一源寄存器的第一部分针对数据处理电路预先定义。在其他实施例中,矩阵乘法指令还指定第一源寄存器的第一部分。
在数据处理装置响应于矩阵乘法以指令执行第一矩阵乘法运算以生成第一结果方形矩阵并进行第二矩阵乘法运算以生成第二结果方形矩阵的实施例中,本技术不受限制于仅执行的两个矩阵乘法运算,并且在一些实施例中,数据处理电路还响应于控制信号以执行至少一个进一步的矩阵乘法运算,以至少生成结果数据元素的进一步的方形矩阵。
此外,在装置响应于矩阵乘法指令执行一个以上的矩阵乘法运算的实施例中,不仅可以有使用源寄存器的相应部分来提供源矩阵的相应数据元素的各种方式,本技术还提出使用在矩阵乘法指令之前执行的附加指令,该附加指令为后续的矩阵乘法运算准备源寄存器之一的内容。具体地,在一些实施例中,解码器电路响应于矩阵乘法指令之前的复制负载指令并指定存储器位置和第一源寄存器以生成复制负载控制信号,并且数据处理电路响应于复制负载控制信号以执行复制加载操作,包括:将数据元素的第一方形矩阵从指定的存储位置加载到第一源寄存器的第一部分中;以及将数据元素的第一方形矩阵复制到第一源寄存器的第二部分中,并且其中从第二源寄存器的第一部分提取来自第二源寄存器的第二数据元素矩阵。换句话说,将理解的是,在这样的实施例中,由于执行复制加载指令后执行矩阵乘法指令的结果,在作为矩阵乘法指令的结果执行的第一和第二矩阵乘法运算的每个中,将相同的数据元素方形矩阵用作第一操作数矩阵。
如上所述,可以在所讨论的实施例中采用其“部分”的给定寄存器的比例可以采用各种形式,但是在一些特定实施例中,第一源寄存器的第一部分是第一源寄存器的前一半,第二源寄存器的第一部分是第二源寄存器的前一半,目的寄存器的第一部分是目的寄存器的前一半。
在这些比例是各个寄存器的一半的实施例中,本技术还考虑了可以在本技术中使用的寄存器内容交换指令的提供,并且在一些这样的实施例中,数据处理电路进一步响应于寄存器内容交换指令以执行寄存器内容交换操作,该内容交换操作用于交换第一源寄存器和第二源寄存器中之一的前一半和后一半的内容。因此,通过使用该寄存器内容交换指令,第一源寄存器和第二源寄存器之一的一半可以被交换,使得在执行了第一矩阵乘法运算之后,可以在执行第二矩阵乘法运算之前进行交换。这提供了关于第一源寄存器和第二源寄存器的相应的一半彼此相乘以生成第一结果方形矩阵和第二结果方形矩阵的方式的更大程度的灵活性。
然而,本技术并不设想必须明确定义这样的寄存器内容交换指令,并且在一些实施例中,在第一矩阵乘法运算之后且在第二矩阵乘法运算之前,数据处理电路还响应于控制信号以执行寄存器内容交换操作,该寄存器内容交换操作用于交换第一源寄存器和第二源寄存器之一的前一半和后一半的内容。换句话说,在不使用附加寄存器内容交换指令的情况下,在一些实施例中,交换可以在第一矩阵乘法运算和第二矩阵乘法运算的执行之间自动进行。
实际上,在一些实施例中,是否执行该寄存器交换操作是程序员可选的选择,因此,在这样的实施例中,矩阵乘法指令指定是否要执行寄存器内容交换操作。此外,在一些实施例中,矩阵相乘指令指定第一源寄存器和第二源寄存器中的哪一个将成为寄存器内容交换操作的对象。
可能的情况是,以一对一的方式从第一源寄存器提取第一数据元素矩阵,即其中第一矩阵的所有数据元素都是从第一源寄存器并且仅从第一源寄存器提取的。然而,本技术提供了另外的实施例,其中矩阵乘法指令还指定第三源寄存器,并且其中矩阵乘法运算包括从第一源寄存器和第三源寄存器提取第一数据元素矩阵。例如,在这样的实施例中,可能是从第一源寄存器提取第一数据元素矩阵的前一半,而从第三源寄存器提取第一数据元素矩阵的后一半。类似的原理适用于从第二源寄存器提取第二数据元素矩阵,因此,在一些实施例中,矩阵乘法指令还指定了第四源寄存器,并且其中矩阵乘法运算包括从第二源寄存器和第四源寄存器提取第二数据元素矩阵。实际上,相同的原理也适用于矩阵乘法指令中目的寄存器的指定,因此,在一些实施例中,矩阵乘法指令还指定进一步的目的寄存器,并且其中矩阵乘法运算包括应用在目的寄存器和进一步的目的寄存器之间分配的结果数据元素的方形矩阵。这提供了使用本技术提出的矩阵乘法指令的灵活性的进一步方面,因为为矩阵乘法运算提供源操作数矩阵的第一数据元素矩阵和第二数据元素矩阵中的每个都可以从一个以上的源寄存器得出,并且同样地,生成的结果数据元素的方形矩阵可以应用于一个以上的目的寄存器,从而在这些操作数和结果矩阵的相应大小以及从中得出它们或将它们应用于的相应寄存器方面提供了更大的灵活性。
至少一些实施例提供了一种操作数据处理装置的方法,该方法包括:响应于矩阵乘法指令来生成控制信号,其中,该矩阵乘法指令在多个寄存器中指定第一源寄存器、第二源寄存器和目的寄存器,每个寄存器能够存储至少四个数据元素;响应于控制信号执行矩阵乘法运算,包括:从第一源寄存器提取第一数据元素矩阵;以及从第二源寄存器提取第二数据元素矩阵;执行多个点积运算以生成结果数据元素的方形矩阵,其中每个点积运算作用于第一数据元素矩阵的相应行和第二数据元素矩阵的相应列,以生成结果数据元素的方形矩阵的相应结果数据元素;并将结果数据元素的方形矩阵应用于目的寄存器。
至少一些实施例提供了一种装置,该装置包括:用于响应于矩阵乘法指令而生成控制信号的单元,其中矩阵乘法指令在多个寄存器中指定第一源寄存器、第二源寄存器和目的寄存器,每个寄存器能够存储至少四个数据元素;响应于控制信号执行矩阵乘法运算的单元,包括:用于从第一源寄存器提取第一数据元素矩阵的单元;和用于从第二源寄存器提取第二数据元素矩阵的单元;用于执行多个点积运算以生成结果数据元素的方形矩阵的单元,其中每个点积运算作用于第一数据元素矩阵的相应行和第二数据元素矩阵的相应列以产生结果数据元素方形矩阵的相应的结果数据元素;用于将结果数据元素的方形矩阵应用于目的寄存器的单元。
至少一些实施例提供了一种虚拟机计算机程序,该虚拟机计算机程序包括用于控制主机数据处理装置以提供与根据上述任何实施例的装置相对应的指令执行环境的程序指令。
至少一些实施例提供了一种虚拟机计算机程序,该虚拟机计算机程序包括用于控制主机数据处理装置以提供可以执行根据上述任何实施例的方法的指令执行环境的程序指令。
至少一些实施例提供了一种计算机可读存储介质,其中,上述实施例中的任何一个的虚拟机计算机程序以非暂态方式被存储。
现在参考附图描述一些特定的实施例。
图1示意性地示出了可以实现本技术的各种示例的数据处理装置10。该数据处理装置包括处理电路12,其响应于其执行的指令序列而对数据项执行数据处理操作。从数据处理装置可以访问的存储器14中检索这些指令,并且以本领域普通技术人员熟悉的方式,为此目的提供获取电路16。此外,由获取电路16检索的指令被传递到解码电路18,解码电路18生成控制信号,该控制信号被布置为控制处理电路12的配置和操作的各个方面。还示出了一组寄存器20和加载/存储单元22。通常,处理电路12可以以流水线方式布置,但是其细节与本技术无关。本领域普通技术人员将熟悉图1表示的一般配置,并且仅出于简洁的目的而省略其进一步的详细描述。如在图1中可以看到的,寄存器20均包括用于多个数据元素的存储器,使得处理电路可以将数据处理操作应用于指定寄存器内的指定数据元素,或者可以将数据处理操作应用于指定寄存器内的指定的数据元素(“矢量”)组。特别地,示出的数据处理装置涉及关于由保持在寄存器20中的数据元素形成的矩阵的矩阵乘法运算的性能,其进一步的解释将在下面参考一些特定的实施例来更详细地说明。借助于加载/存储单元22将处理电路12在指令执行中所需的数据值以及由于这些数据处理指令而生成的数据值写入存储器14并从存储器14读取这些数据。通常,图1中的存储器14可以被看作是计算机可读存储介质的示例,可以在其上存储本技术的指令,通常作为预定的指令序列(“程序”)的一部分,然后执行处理电路。但是,处理电路可以经由网络接口等从各种不同的源(例如,RAM,ROM,ROM等)访问该程序。本公开描述了处理电路12可以执行的各种新颖指令,并且下面的附图提供了对这些指令的性质、数据处理电路中的变化的进一步说明以支持这些指令的执行等。
图2A和图2B示出了本技术,特别是采用的方法,其中将寄存器的多个数据元素视为矩阵的元素的二维阵列。在图2B的示例中,寄存器A、B和C中的每个中的四个数据元素被视为2×2矩阵的元素。这与图2A所示的示例形成对比,在图2A所示的示例中,寄存器A、B和C的四个数据元素被视为元素的简单一维阵列,即矢量。使用将来自一个源寄存器的一个数据元素(源A中的元素0)和数据元素矢量(源B的四个数据元素)指定为逐元素矢量相乘和累加运算的操作数的技术,图2A示出了如何可以生成数据元素的矢量以在寄存器C中进行累加。该数据元素的矢量可以例如表示矩阵的行,并且因此在该解释中可以将所示出的内容视为代表通过逐元素矢量运算生成的4×4结果矩阵的一行的计算。换句话说,数据元素的完整4×4矩阵的计算将需要另外三个这样的逐元素矢量运算,以生成相应的另外三行。
这与根据本技术的图2B中采用的方法形成对比,其中,每个寄存器的矢量均被视为保持四个数据元素,每个数据元素代表2×2矩阵。使用源寄存器A中保持的2×2矩阵与源寄存器B中保持的2×2矩阵进行矩阵乘法,以生成将在寄存器C中累加的2×2矩阵。参考图2A和2B,需要特别注意的一点是它们都涉及三个矢量读取和一个矢量写入(即,从寄存器A、B和C读取并写入寄存器C)。当然要注意,此处关于“矢量”读取或写入的重点是该读取或写入中涉及的数据元素的多样性,而不是必须将数据元素组解释为表示矢量,因为这恰好是图2A和2B之间比较的重点,即图2A中的矢量解释和图2B中的矩阵解释。换句话说,虽然图2A和2B都代表读取和写入操作,其中每个读取或写入操作最多读取或写入四个数据元素,但是请注意,在图2A所示的操作中,这些操作包括四个乘法累加运算,而在图2B中,它们显示为八个乘法累加运算。注意,这些乘法累加运算在本文中也被称为“融合乘法累加”(fusedmultiply-accumulate,FMA),因为通常用于实施此类计算的特定电路单元是这种“融合乘法累加”设备,而不是两个独立的设备(一个乘法,一个累加)。这样,应当理解,由本技术提供的矩阵乘法指令使得能够指定更高的计算密度。同样重要的是要认识到,本技术可以在矢量处理情境中实现,即,其中上述寄存器内容的“解释”发生在提供该矢量处理支持的装置的矢量长度内。因此,在图2B的示例中,保持代表2×2矩阵的四个数据元素所需的宽度为矢量长度,然后针对装置可以支持的多个矢量中的不同的独立矢量重复图示的处理。该矢量处理概念适用于以下所有示例,但是为了清楚起见,通常仅示出一个矢量长度的数据值和处理。
图3示意性地示出了被提供来支持图2B中示出的那种操作的电路的配置。第一源寄存器30(A)和第二源寄存器32(B)如图所示(在由解码电路18生成的相关控制信号的控制下)连接到四个相同的单元34,每个单元获取来自源寄存器A的两个输入和来自源寄存器B的两个输入,并使用这些输入执行点积运算。这些单元34还(在由解码电路18产生的相关控制信号的控制下)连接到寄存器36(C),结果被存储在其中。因此,从累加器C读取的值形成到每个单元34的进一步的输入,从而可以在加法电路40中将其与乘法电路单元38执行的乘法结果相加,然后将结果写回到累加器C的相关元素(即在寄存器36中)。如本领域的普通技术人员熟悉的,每个单元34可以由融合的乘法-加法电路表示。
图4示出了将被视为示出对两个4×4矩阵相乘以生成结果4×4矩阵的方法的扩展的示例(通过与图2B进行比较)。示出了要在累加器C中累加的结果矩阵的十六个元素的相应元素生成操作。因此请注意,响应于单个矩阵乘法指令触发此4×4矩阵乘法,将执行64个运算(对于C的16个元素中的每个元素的计算,有四个乘法累加部分)。此外,在一次矢量读取/写入中可以读取和写入这些寄存器的内容的情况下,图4所示的计算密度仍比图2B的示例高8倍。将其与其中执行上述逐元素矢量运算进行比较,根据该方法,将十六个元素的矢量视为十六个元素的一维阵列。在可以使用SIMD(单指令多数据)指令来启动16个并行操作的方法中,将需要另外3个指令来完成完整计算C中累积的4×4矩阵所需的64个操作。这些指令中的每个指令都涉及三个矢量读取和一个矢量写入。这将与本技术的方法进行比较,其中在图4所示的示例中,矩阵乘法指令以相同数量的寄存器操作数指定了四倍的融合乘法累加运算,即仅三个矢量读取,一个矢量写入。因此,通常将认识到,使用本技术的矩阵乘法指令有助于矩阵乘法应用的更高计算吞吐量,而不需要额外的寄存器文件带宽。
虽然可能是每个源寄存器中保持的矩阵的数据元素与目的寄存器中累加的数据元素可能具有相同的大小,但事实并非如此。此外,虽然源矩阵可以具有与结果数据元素的方形矩阵相同的维度(如在上面参考图2B和图4所讨论的示例中一样),但是也不必是这种情况。图5图示了这两个点。图5示出了所使用的寄存器是128位寄存器的示例。此外,源寄存器使用此容量来存储16个8位元素,而累加器寄存器使用此容量来存储4个32位元素。因此,如图所示,所表示的矩阵乘法包括在2×8源矩阵和8×2源矩阵之间执行矩阵乘法运算以生成2×2结果矩阵。在其他示例中,源矩阵与结果矩阵之间的维度差可以较小,其中2×4矩阵乘以4×2矩阵以生成2×2矩阵,甚至可能更极端,例如,作为图5示例的变型,可以将2×16矩阵乘以16×2矩阵以生成2×2结果矩阵。仍然以在具有128位寄存器的装置中实施这些的示例为例,将注意到,源矩阵中的数据元素大小与结果矩阵之间的不对称性将更大,即,其中每个源矩阵的32个数据元素都将是4位元素。在这方面,本技术是特别灵活的,并且在给定寄存器内容所表示的数据元素的数量与每个数据元素的相应大小之间的这种折衷表示使用本技术的指令的程序员可以根据其中使用的指令的计算情境来平衡的折衷。在极端的示例中,数据元素的大小可能非常有限,其中指令提供的计算并行性更为重要,而在可能性范围的另一端,可以在源矩阵数据元素与结果矩阵数据元素之间保持相同的数据元素大小,其中源矩阵数据元素的精度更为重要。还要注意,当计算情境合适时,甚至可以提供这样的实现方式,其中最小地表示源矩阵的每个数据元素(例如,二进制或三进制)。
图6示意性地图示了由本技术的矩阵乘法指令发起的矩阵乘法运算的另一示例。图6示出了具有512位大小的寄存器50,使得该寄存器构成其一部分的数据处理装置中的最大“矢量长度”也是512位。此外,该寄存器被示为包括16个32位数据元素。在图6的下部,这十六个数据元素被示为在源寄存器A和B中的每个以及目的寄存器C中被解释为数据元素的4×4矩阵。因此,图6示出了32位浮点(FP)矩阵乘法指令的操作,该指令指定寄存器A、B和C并引起相应的64个操作(参见图4及其上面的描述),以便对从源寄存器A和B中的每个寄存器获取的4×4矩阵进行相乘以生成4×4矩阵,所生成的4×4矩阵被应用于目的寄存器C。应该注意的是,在图6的图示中,每个4×4矩阵由四个数据元素的四个块表示,但是在描述矩阵乘法的示例中,这没有任何意义,而仅是为了便于与下面的图7A进行比较而提供。
转到图7A,示出了相同的512位寄存器50,其中标记了四个部分52、54、56和58。源寄存器A、源寄存器B和目的寄存器C的这四个部分由围绕图7A中的四个数据元素组的虚线图示说明。因此,通过单独的矩阵乘法运算生成要存储在目的寄存器C中的四个2×2结果矩阵中的每个。此外,在图7A的示例中,这些被示为由四个不同的矩阵乘法指令启动,其中每个指令(除了指定矩阵乘法运算使用浮点32位数据值生成2×2矩阵外)还指定了目的寄存器、源寄存器以及每个寄存器的一部分。以这种方式,使用从两个源寄存器的第一部分获取的2×2矩阵执行第一矩阵乘法运算,并将结果存储在目的寄存器C的第一部分中。然后通过另外三个矩阵乘法指令指定另外三个矩阵乘法运算,每个指令都命名寄存器的另外三个部分之一。
图7B示意性地图示了用于实施图7A处理的电路的示例。寄存器A、B和C分别示为四部分寄存器70、71和76。四输入多路复用器72和73连接到寄存器A和B中的每个的相应四个部分,每个多路复用器由从指令得出的“部分”值控制。如此选择的两个部分形成矩阵乘法电路74的两个输入,其可以是图3的示例的形式。得到的结果矩阵的四个元素形成到多路复用器75的单个输入,该多路复用器75连接到寄存器C的相应四个部分。多路复用器75也受从指令中得出的“部分”值的控制,以将结果矩阵的四个元素定向到寄存器C的部分之一中。用于从寄存器的特定部分中选择并将结果写入寄存器的特定部分的这种类型的电路可以等同地用于支持本文所述的其他示例的处理。
因此,对于图7A的示例将认识到,特定的矩阵乘法指令可以选择将数据处理操作限于源寄存器和目的寄存器两者的一部分。但是,类似的限制也可能通过限制矢量长度的软件由应用于数据处理装置的配置所导致,其可以使用为比其“本机”(基于硬件)矢量长度更短的矢量长度。图8还示出了512位寄存器50,其中在该示例中,示出了已经应用了软件定义的最大矢量长度60,以将最大矢量长度限制为256位。该最大矢量长度是“软件定义的”,因为提供了指令,解码电路18通过生成相关的控制信号来响应该指令,以设置该最大矢量长度60的值。一旦以此方式约束了该最大矢量长度,这还对装置可以执行的矩阵乘法运算施加约束。进一步使用图6的示例,可以看到(仍然具有32位数据元素)存储图6的示例的4×4矩阵所需的512位空间不可用,因此无法进行4×4矩阵乘法。然而,参考图7A的示例,存储两个2×2矩阵的容量是可用的,这在图8中表示。尽管如此,将进一步认识到,存在多种方式,其中可以将源寄存器A的8个数据元素与源寄存器B的数据元素矩阵相乘以生成要存储在目的寄存器C中的一个或多个结果矩阵。这些可能性将在下面参考图11A-C和图12A-C进行进一步讨论。然而,参考图8,应该注意的是,软件定义的最大矢量长度的强加可以看作是对在示例中执行的矩阵乘法运算的数量施加的限制,在该示例中,响应于单个矩阵乘法指令,执行了图8所示的目的寄存器C的可用部分的两半中的方形矩阵。替代地,这可以看作是对所生成的矩阵维度的限制,因为无法在施加的256位最大矢量长度的情况下生成(32位数据元素的)4×4矩阵,因此系统受约束以通过生成一个或两个2×2矩阵来响应矩阵乘法指令。
在寄存器的容量和数据元素的大小允许的情况下,关于可以响应于本技术的一个或多个矩阵乘法指令执行的不同矩阵乘法运算,可以具有相当大的灵活性。图9示出了从源寄存器A和源寄存器B中的每个提取的多达16个数据元素。在每种情况下,这些元素都进一步示为潜在地被细分为两部分,每个部分包括从源A和源B的相应一半获取的8个数据元素。基于512位寄存器的示例,在一个示例中,图9所示的完整数据元素集可能涉及单个矩阵乘法运算,主要是在8位数据元素的8×8矩阵被生成为来自源A的32位数据元素的8×2矩阵与来自源B的32位数据元素的2×8矩阵的矩阵的相乘结果。但是,在此示例中,可能有几种排列方式。例如,在图9中的四个正方形的每组仅代表一个数据元素,并且因此将来自源A的128位数据元素的4×1矩阵乘以来自寄存器B的128位数据元素的1×4矩阵以生成一个32位数据元素的4×4矩阵。此外,源A或源B中的任何一个的两个标记部分中的仅一个可以用于提供源矩阵的元素,然后可以生成相应的方形矩阵。例如,在仅源A(0)和源B(0)提供用于操作数矩阵的数据元素的情况下,然后也可以生成相应较小的结果矩阵。在各个数据元素的大小和随后形成给定矩阵的数据元素的数量之间的折衷也可以改变。
图10示出了另一示例,其中目的寄存器具有比存储由特定矩阵乘法运算生成的方形结果矩阵所需的存储容量更大的存储容量。如图所示,此处将2×4矩阵与4×2矩阵相乘得到2×2矩阵以生成一组结果数据元素,这些结果数据元素仅需要目的寄存器的一半容量用于该存储,并在图10中以图形方式示出了应用于目的寄存器的部分0。图10的下部图示了默认情况下可能会导致的结果,其中仅在矩阵乘法指令中命名了目的寄存器,并给出了第二示例,其中在矩阵乘法运算中显式地命名了该部分。
图11A和11B示出了一些进一步的示例,这些示例示出了给定的矩阵乘法运算导致不占据目的寄存器的全部容量的方形结果矩阵。具体而言,在图11A和11B的示例中,所考虑的2×2矩阵乘法运算各自生成2×2结果矩阵,这些矩阵仅占据目的寄存器C的一半。在将这些示例为FP32(即,浮点32位指令)的情况下,这些示例然后代表最大容量为256位的寄存器。例如,这可以是寄存器的本机容量,或者如上面参考图8所讨论的,可以由对最大矢量长度的软件强加限制导致。因此,在图11A的示例中,示出了仅指定源寄存器A和B以及目的寄存器C的第一指令。作为执行该指令的结果,装置默认可以仅选择源寄存器A的一部分,其包含所示的2×2矩阵数据元素。如图11A所示,然后可以将其乘以源寄存器B内容的相应部分,以生成两个结果方形矩阵,以应用于目的寄存器C的两个相应部分。在图11A中所示的另一示例指令中,图A中将要使用的部分在指令中明确命名(即,部分“0”),然后在两次相应的矩阵乘法运算中将其应用于源寄存器B的两半中,以生成存储在寄存器C的相应部分中的两个方形结果矩阵。
图11B示出了另一种方式,其中可以响应于单个矩阵乘法运算来使用源寄存器A和源寄存器B的两个部分的相应内容,以生成两个结果方形矩阵以应用于目的寄存器C的相应部分。在图11B的示例中,源寄存器A的第一部分与源寄存器B的第一部分进行矩阵相乘,并且得到的方形2×2矩阵被应用于目的寄存器C的第一部分。类似地,并行地,源寄存器A的第二部分乘以源寄存器B的第二部分以生成第二方形结果矩阵,其被应用于目的寄存器C的第二部分。
图11C示意性地示出了在一些实施例中的进一步的指令的操作,即,复制加载指令,其指定从中检索数据值并将其存储在指定的寄存器A的一个部分中的存储器位置。该数据值也被复制到寄存器A的其他部分中。可以通过直接将相同的值加载到寄存器A的两半中的加载来实现该复制,也可以通过在加载之后执行从寄存器的前一半到寄存器A的后一半的复制来实现此复制。在本技术的情境中,该复制加载指令使图11A和11B所示的方法具有灵活性。例如,通过在执行图11B的矩阵乘法指令之前执行图11C的复制加载,相同的内容将出现在源寄存器A的每一半中,因此效果与图11A的相同,即从源寄存器A的一半中获取内容与源寄存器B的两半中的相应内容相乘,以生成两个方形结果矩阵,其被应用于目的寄存器C的两半中。
图11D示意性地示出了在一个实施例中提供的支持图11A的第二示例指令的示例电路。源寄存器A和B分别被示为两部分寄存器120和122。两个输入多路复用器124连接到寄存器A的相应两个部分。多路复用器由“元素选择”信号控制,该信号由指令设置(即在图11A的第二指令示例中为“0”)。如此选择的部分形成到矩阵乘法电路126和128的每个实例的一个输入(可以是图3的示例的形式)。矩阵乘法电路126和128的每个的另一输入是源寄存器122(B)的相应部分。将得到的两个2×2矩阵写入寄存器130(C)的相应部分。相比之下,对于“固定部分”示例(图11A的第一指令示例),部分0直接路由到两个乘法电路,而对于图11B示例,从寄存器A的路由与在图11B中所示的针对寄存器B的路由相同(即部分0至矩阵乘法电路0和部分1至矩阵乘法电路1)。
本技术还提出了另一矩阵乘法指令,作为其引起的数据处理操作的一部分,该矩阵乘法指令还可以引起给定源寄存器的两半的内容的交换(至少有效地交换-见下文)。这在图12A和12B的示例中示出,其中该指令指定了源寄存器A和源寄存器B,从而导致执行第一矩阵乘法运算,将从源寄存器A的第一部分获取的2×2矩阵与从源寄存器B的第一部分获取的2×2矩阵相乘。这被存储在目的寄存器C的第一部分中。还执行第二矩阵乘法运算,将从源寄存器A的第二部分获取的2×2矩阵与从源寄存器B的第二部分获取的2×2矩阵相乘。这被存储在目的寄存器C的第二部分。在图12A的示例中,未设置交换标志,因此未发生交换。
在图12B的示例中,设置交换标志。这导致源寄存器A的两个部分的内容被交换,至少出于执行矩阵乘法运算的目的。因此,例如,这可以通过临时切换访问源寄存器A的部分的顺序来完成,使得该指令随后首先使源寄存器A的第二部分用于第一矩阵乘法运算,源寄存器A的第一部分将用于第二矩阵乘法运算。不过,如果需要,可以将源寄存器A的两个部分显式交换,尽管如果以处理速度为主要目标,则这将涉及的附加处理步骤可能不会使其成为有吸引力的选择。无论哪种方式,如图12B所示,交换标志的设置使得生成与图12A中生成的矩阵相反的对角线对矩阵。因此,执行第一矩阵乘法运算,将从源寄存器A的第一部分获取的2×2矩阵(但要注意,在此步骤之前“交换”了A的第一部分和第二部分)与从源矩阵B的第一部分获取的2×2矩阵相乘在一起。这存储在目的寄存器D的第一部分中。然后执行第二矩阵乘法运算,将从源寄存器A的第二部分获取的2×2矩阵(再次,注意这在A的“交换”版本上)与从源寄存器B的第二部分获取的2×2矩阵相乘。这存储在目的寄存器D的第二部分中。因此,图12A和12B的“交换使能”指令允许程序员可以通过设置或取消设置交换标志的简单机制在相反的对角矩阵对之间进行切换。此外,通过执行未设置版本和设置版本两者,如果需要,则可以生成四个2×2子矩阵的完整集合,从而形成源寄存器A和B的每个中的两个源矩阵的全矩阵相乘的结果。在上述图12A和12B的示例中,该完整结果由寄存器C和D的内容给出(每个寄存器具有对角线对的2×2子矩阵)。就所涉及的处理而言,此方法的优势在于,在内部循环中(花费了大部分处理时间),唯一需要的动作是加载A和B并执行两个MMUL操作(即未交换和交换的版本))。尽管两个目的(C和D)以非常规的方式存储结果矩阵(每个半对角线),但可以在内部循环之外对它进行校正,这将对程序的性能影响较小。
图12C示意性地示出了在一个实施例中提供的支持图12A和12B的示例的示例电路。源寄存器A和B分别被示为两部分寄存器80和81。两个输入多路复用器82和83都连接到寄存器A的相应的两个部分,要注意的是,作为输入的部分的顺序在两个多路复用器之间是相反的。多路复用器82和83均由从指令得出的“交换”值(即开或关=1或0)控制。如此选择的两个部分各自形成到矩阵乘法电路84和85的每个实例的一个输入(其可以是图3的示例的形式)。矩阵乘法电路84和85的每个的另一个输入是源寄存器B的相应部分。得到的两个2×2矩阵被写入寄存器C(针对图12A-不交换)或寄存器D(针对图12B-交换)的相应部分-交换。
在前面的示例中,只有一对源寄存器,每个源寄存器提供在矩阵乘法运算中将其相乘的两个矩阵之一。但是,本技术还提供了从一个以上的源寄存器提取至少一个操作数矩阵的示例。在图13中给出了示例,其中指定了第一源寄存器A,从中提取了2×4数据元素矩阵,但是其中指定了两个源寄存器,即B1和B2。因此,可以认为它们代表两个独立的4×2矩阵,或者一个组合的4×4矩阵。无论对源寄存器B1和B2的内容表示采用哪种视图,都将这些源寄存器的相应内容乘以从源寄存器A导出的2×4矩阵,以生成两个方形结果矩阵(在图13中标记为CI和C2),然后将其应用于图13所示的目的寄存器的相应一半。因此,进一步根据源寄存器B1和B2内容的视图,可以将目的寄存器的内容视为结果2×4矩阵或两个独立的2×2矩阵。
但是,矩阵在一个以上的寄存器上的分布不限于源矩阵中的仅一个,图14示意性地说明了其中该方法同时应用于源操作数和结果矩阵的示例。对于图14中以图形方式示出的操作,指令指定了四个源寄存器A1、A2、B1和B2,并且还指定了两个目的寄存器C1和C2。因此,如图所示,在源寄存器A1和A2中保持了16个数据元素,在源寄存器B1和B2中保持了16个数据元素,并且在目的寄存器C1和C2中可以存储16个数据元素。因此,响应于指定所有六个寄存器的单个矩阵乘法指令,可以将4×4矩阵与4×4矩阵相乘以生成结果4×4矩阵,然后将其分成两半应用于目的寄存器C1和C2。
图15示出了可以使用的虚拟机实施方式。虽然较早描述的实施例在用于操作支持有关技术的特定处理硬件的装置和方法方面实现了本发明,但是也可以提供硬件设备的所谓虚拟机实施方式。这些虚拟机实施方式在运行支持虚拟机(VM)程序510的主机操作系统(OS)520的主机处理器(硬件)530上运行。通常,需要功能强大的大型处理器来提供以合理速度执行的虚拟机实施方式,但是在某些情况下(例如出于兼容性或重用原因而希望运行另一个处理器的本机代码时),这种方法可能是合理的。虚拟机程序510可以存储在计算机可读存储介质(可以是非暂时性介质)上,并且向与将由真实硬件提供得应用程序接口相同的应用程序500提供应用程序接口(指令执行环境),该真实硬件是由虚拟机程序510建模的设备。因此,程序指令(包括上述矩阵乘法指令中的任何一个)可以使用虚拟机程序510从应用程序500内执行以对它们与虚拟机硬件的交互进行建模。
图16示出了根据一个实施例的方法所采取的一系列步骤,以响应该装置在从存储器中检索的数据处理指令序列内检索到的本技术的矩阵乘法指令。该流程开始于步骤100,在步骤100中,接收这些矩阵乘法指令之一。这里的“接收到”可以理解为是指从存储器提取指令并对其进行解码的处理,并且还包括由解码电路生成用于处理电路和寄存器的相关控制信号,以便可以进行特定的操作。这些使得执行图16中所示的此过程的以下步骤。因此,下一步骤102包括从在矩阵乘法指令中指定的第一源寄存器提取第一数据元素矩阵。在下一步骤104中,从矩阵乘法指令中指定的第二源寄存器提取第二数据元素矩阵。应当理解,图16示出了当实现本技术时通常执行的步骤序列,并且来自任何上述实施例的细节可以被导入到图16的相关步骤中。例如,在步骤102和104中,从第一和第二源寄存器提取第一和第二矩阵可以包括:当实现本技术的相关实施例时,从第一和第二源寄存器中的一个或两个的指定部分提取这些矩阵。然而,从第一源寄存器和第二源寄存器提取第一矩阵和第二矩阵,然后可以执行由图的步骤106和108表示的迭代处理,其中,对第一矩阵的给定行和第二矩阵的给定列执行点积运算,以针对结果矩阵内的给定位置生成数据元素。在还需要执行进一步的点积运算以生成结果矩阵的进一步得数据元素的情况下,流程从步骤108循环回到106,以便执行这些操作。然而,应当理解,尽管为了说明的简单起见,图11中的步骤106和108被示为以顺序方式执行,但是本技术当然不限于该迭代、顺序方法,并且例如从图3所示的示例电路可以容易地看出,该过程的各个“迭代”实际上可以彼此并行地执行。一旦生成了形成方形结果矩阵的全部数据元素集,然后将其应用于矩阵乘法指令中指定的目的寄存器,例如,通过与该目的寄存器的预先存在的内容进行累加(步骤110)。
总的来说,公开了一种用于在数据处理装置中执行矩阵乘法的技术,该技术包括装置、矩阵乘法指令、操作装置的方法以及虚拟机实施方式。寄存器由矩阵乘法指令引用,每个寄存器用于存储至少四个数据元素,并且响应于矩阵乘法指令,执行矩阵乘法运算。从第一和第二源寄存器提取第一和第二数据元素矩阵,并执行分别作用于第一矩阵的相应行和第二矩阵的相应列的多个点积运算,以生成结果数据元素的方形矩阵,其被应用于目的寄存器。针对逐元素矢量技术,可以实现针对给定数量的寄存器操作数的更高的计算密度。
在本申请中,词语“配置为...”用于表示装置的元件具有能够执行所定义的操作的配置。在本文中,“配置”是指硬件或软件的互连的布置或方式。例如,该装置可以具有提供定义的操作的专用硬件,或者可以对处理器或其他处理设备进行编程以执行功能。“配置为”并不意味着需要以任何方式改变装置元件以提供所定义的操作。
尽管这里已经参考附图详细描述了说明性实施例,但是应当理解,本发明不限于这些精确的实施例,并且在不脱离由所附权利要求限定的本发明的范围和精神的情况下,本领域的技术人员可以在其中进行各种改变、增加和修改。例如,在不背离本发明的范围的情况下,可以将从属权利要求的特征与独立权利要求的特征进行各种组合。
Claims (44)
1.一种装置,包括:
寄存器存储电路,具有多个寄存器,每个寄存器存储至少四个数据元素;
解码器电路,响应于矩阵乘法指令以生成控制信号,其中,所述矩阵乘法指令在所述多个寄存器中指定:第一源寄存器、第二源寄存器以及目的寄存器;以及
数据处理电路,响应于所述控制信号以执行矩阵乘法运算,该矩阵乘法运算包括:
从所述第一源寄存器提取第一数据元素矩阵;
从所述第二源寄存器提取第二数据元素矩阵;
执行多个点积运算以生成结果数据元素的方形矩阵,其中,每个点积运算作用于所述第一数据元素矩阵的相应行和所述第二数据元素矩阵的相应列,以生成结果数据元素的所述方形矩阵的相应结果数据元素;以及
将结果数据元素的所述方形矩阵应用于所述目的寄存器。
2.根据权利要求1所述的装置,其中,将结果数据元素的所述方形矩阵应用于所述目的寄存器包括:将结果数据元素的所述方形矩阵存储在所述目的寄存器中。
3.根据权利要求1所述的装置,其中,将结果数据元素的所述方形矩阵应用于所述目的寄存器包括:将结果数据元素的所述方形矩阵与存储在所述目的寄存器中的先前存储的结果数据元素的方形矩阵进行累加。
4.根据权利要求1至3中任一项所述的装置,其中,所述第一数据元素矩阵的每个数据元素和所述第二数据元素矩阵的每个数据元素具有源元素位长度,该源元素位长度等于结果数据元素的所述方形矩阵的每个数据元素的结果元素位长度。
5.根据权利要求1至3中任一项所述的装置,其中,所述第一数据元素矩阵的每个数据元素和所述第二数据元素矩阵的每个数据元素具有源元素位长度,该源元素位长度与结果数据元素的所述方形矩阵的每个数据元素的结果元素位长度不同。
6.根据权利要求5所述的装置,其中,所述源元素位长度与所述结果元素位长度相差两倍。
7.根据权利要求5所述的装置,其中,所述源元素位长度与所述结果元素位长度相差大于两倍。
8.根据前述权利要求中任一项所述的装置,其中,所述矩阵乘法指令指定结果数据元素的所述方形矩阵的维度。
9.根据权利要求1至8中任一项所述的装置,其中,所述第一数据元素矩阵的数据元素、所述第二数据元素矩阵的数据元素和所述结果数据元素是浮点值。
10.根据权利要求1至8中任一项所述的装置,其中,所述第一数据元素矩阵的数据元素、所述第二数据元素矩阵的数据元素和所述结果数据元素是整数值。
11.根据权利要求10所述的装置,其中,所述第一数据元素矩阵的数据元素、所述第二数据元素矩阵的数据元素和所述结果数据元素是无符号整数值。
12.根据权利要求10所述的装置,其中,所述第一数据元素矩阵的数据元素、所述第二数据元素矩阵的数据元素和所述结果数据元素是有符号整数值。
13.根据权利要求1至12中任一项所述的装置,其中,所述第一数据元素矩阵和所述第二数据元素矩阵是方形矩阵。
14.根据权利要求1至12中任一项所述的装置,其中,所述第一数据元素矩阵和所述第二数据元素矩阵是非方形矩阵。
15.根据前述权利要求中任一项所述的装置,其中,所述解码器电路进一步响应于配置指令以生成配置控制信号,其中,所述配置指令指定最大矢量长度,并且所述数据处理电路响应于所述配置控制信号以约束后续的矩阵乘法运算,使得所述结果数据元素的总大小不超过所述最大矢量长度。
16.根据权利要求15所述的装置,其中,约束所述后续的矩阵乘法运算包括:生成结果数据元素的所述方形矩阵,所述结果数据元素的所述方形矩阵具有以下维度:所述结果数据元素的总大小不超过所述最大矢量长度。
17.根据权利要求15所述的装置,其中,约束所述后续的矩阵乘法运算包括:生成结果数据元素的多个方形矩阵,对于这些方形矩阵,所述结果数据元素的总大小不超过所述最大矢量长度。
18.根据权利要求15至17中任一项所述的装置,其中,所述结果元素的总大小小于所述目的寄存器的存储容量。
19.根据权利要求8或从属于权利要求8的权利要求9-18中任一项所述的装置,其中,具有在所述矩阵乘法指令中指定的维度的结果数据元素的所述方形矩阵对应于所述目的寄存器的存储容量。
20.根据权利要求1至18中任一项所述的装置,其中,所述目的寄存器具有容纳至少八个数据元素的存储容量,并且至少存储结果数据元素的第二方形矩阵。
21.根据权利要求8或从属于权利要求8的权利要求9-18中任一项所述的装置,其中,所述目的寄存器的存储容量能够存储结果数据元素的多于一个的方形矩阵,所述多于一个的方形矩阵具有在所述矩阵乘法指令中指定的维度。
22.根据权利要求20或21所述的装置,其中,所述数据处理电路响应于所述控制信号以将结果数据元素的所述方形矩阵应用于所述目的寄存器的第一部分。
23.根据权利要求22所述的装置,其中,所述目的寄存器的所述第一部分是针对所述数据处理电路预定的。
24.根据权利要求22所述的装置,其中,所述矩阵乘法指令进一步指定所述目的寄存器的所述第一部分。
25.根据从属于权利要求20的权利要求22-24中任一项所述的装置,其中,所述数据处理电路进一步响应于所述控制信号以执行第二矩阵乘法运算,以生成结果数据元素的所述第二方形矩阵并将结果数据元素的所述第二方形矩阵应用到所述目的寄存器的第二部分。
26.根据权利要求25所述的装置,其中,来自所述第一源寄存器的所述第一数据元素矩阵是从所述第一源寄存器的第一部分提取的,并且所述数据处理电路响应于所述控制信号以执行所述矩阵乘法运算作为第一矩阵乘法运算,该第一矩阵乘法运算包括:
从所述第二源寄存器的第一部分提取所述第二数据元素矩阵;以及
将结果数据元素的所述方形矩阵应用于所述目的寄存器的第一部分;
并且所述数据处理电路响应于所述控制信号执行所述第二矩阵乘法运算,该第二矩阵乘法运算包括:
从所述第二源寄存器的第二部分提取所述第二数据元素矩阵;以及
将结果数据元素的所述方形矩阵应用于所述目的寄存器的所述第二部分。
27.根据权利要求25所述的装置,其中,所述数据处理电路响应于所述控制信号以执行所述矩阵乘法运算作为第一矩阵乘法运算,该第一矩阵乘法运算包括:
从所述第一源寄存器的第一部分提取所述第一数据元素矩阵;
从所述第二源寄存器的第一部分提取所述第二数据元素矩阵;以及
将结果数据元素的所述方形矩阵应用于所述目的寄存器的第一部分;
并且其中,所述数据处理电路响应于所述控制信号以执行所述第二矩阵乘法运算,该第二矩阵乘法运算包括:
从所述第一源寄存器的第二部分提取所述第一数据元素矩阵;
从所述第二源寄存器的第二部分提取所述第二数据元素矩阵;以及
将结果数据元素的所述方形矩阵应用于所述目的寄存器的第二部分。
28.根据权利要求26或27所述的装置,其中,所述第一源寄存器的所述第一部分是针对所述数据处理电路预定的。
29.根据权利要求26或27所述的装置,其中,所述矩阵乘法指令进一步指定所述第一源寄存器的所述第一部分。
30.根据权利要求26至29中任一项所述的装置,其中,所述数据处理电路进一步响应于所述控制信号以执行至少一个进一步的矩阵乘法运算,以至少生成结果数据元素的进一步的方形矩阵。
31.根据权利要求26至30中任一项所述的装置,其中,所述解码器电路响应于复制加载指令以生成复制加载控制信号,所述复制加载指令在所述矩阵乘法指令之前并指定存储器位置和所述第一源寄存器,并且所述数据处理电路响应于所述复制加载控制信号以执行复制加载操作,该复制加载操作包括:
将所述数据元素的第一方形矩阵从所指定的存储器位置加载到所述第一源寄存器的所述第一部分中;以及
将所述数据元素的第一方形矩阵复制到所述第一源寄存器的所述第二部分中,
并且其中,来自所述第二源寄存器的所述第二数据元素矩阵是从所述第二源寄存器的所述第一部分提取的。
32.根据权利要求26至31中任一项所述的装置,其中,所述第一源寄存器的第一部分是所述第一源寄存器的前一半,其中,所述第二源寄存器的第一部分是所述第二源寄存器的前一半,并且其中,所述目的寄存器的第一部分是所述目的寄存器的前一半。
33.根据从属于权利要求27的权利要求32所述的装置,其中,所述数据处理电路还响应于寄存器内容交换指令以执行寄存器内容交换操作,该寄存器内容交换操作用于交换所述第一源寄存器和所述第二源寄存器之一的前一半和后一半的内容。
34.根据从属于权利要求27的权利要求32所述的装置,其中,在所述第一矩阵乘法运算之后且在所述第二矩阵乘法运算之前,所述数据处理电路进一步响应于所述控制信号以执行寄存器内容交换操作,该寄存器内容交换操作用于交换所述第一源寄存器和所述第二源寄存器之一的前一半和后一半的内容。
35.根据权利要求34所述的装置,其中,所述矩阵乘法指令指定是否要执行所述寄存器内容交换操作。
36.根据权利要求34或权利要求35所述的装置,其中,所述矩阵乘法指令指定所述第一源寄存器和所述第二源寄存器中的哪一个将成为所述寄存器内容交换操作的主体。
37.根据前述权利要求中任一项所述的装置,其中,所述矩阵乘法指令进一步指定第三源寄存器,并且其中,所述矩阵乘法运算包括:从所述第一源寄存器和所述第三源寄存器提取所述第一数据元素矩阵。
38.根据前述权利要求中任一项所述的装置,其中,所述矩阵乘法指令进一步指定第四源寄存器,并且其中,所述矩阵乘法运算包括:从所述第二源寄存器和所述第四源寄存器提取所述第二数据元素矩阵。
39.根据前述权利要求中任一项所述的装置,其中,所述矩阵乘法指令进一步指定进一步的目的寄存器,并且其中,所述矩阵乘法运算包括:应用在所述目的寄存器和所述进一步的目的寄存器之间划分的结果数据元素的方形矩阵。
40.一种操作数据处理装置的方法,包括:
响应于矩阵乘法指令生成控制信号,其中,所述矩阵乘法指令在多个寄存器中指定第一源寄存器、第二源寄存器和目的寄存器,每个寄存器能够存储至少四个数据元素;以及
响应于所述控制信号执行矩阵乘法运算,包括:
从所述第一源寄存器提取第一数据元素矩阵;
从所述第二源寄存器提取第二数据元素矩阵;
执行多个点积运算以生成结果数据元素的方形矩阵,其中,每个点积运算作用于所述第一数据元素矩阵的相应行和所述第二数据元素矩阵的相应列,以生成结果数据元素的所述方形矩阵的相应结果数据元素;以及
将结果数据元素的所述方形矩阵应用于所述目的寄存器。
41.一种装置,包括:
用于响应于矩阵乘法指令生成控制信号的单元,其中,所述矩阵乘法指令在多个寄存器中指定第一源寄存器、第二源寄存器和目的寄存器,每个寄存器能够存储至少四个数据元素;以及
用于响应于所述控制信号执行矩阵乘法运算的单元,包括:
用于从所述第一源寄存器提取第一数据元素矩阵的单元;
用于从所述第二源寄存器提取第二数据元素矩阵的单元;
用于执行多个点积运算以生成结果数据元素的方形矩阵的单元,其中,每个点积运算作用于所述第一数据元素矩阵的相应行和所述第二数据元素矩阵的相应列,以生成结果数据元素的所述方形矩阵的相应结果数据元素;以及
用于将结果数据元素的所述方形矩阵应用于所述目的寄存器的单元。
42.一种虚拟机计算机程序,包括程序指令,该程序指令用于控制主机数据处理装置,以提供与根据权利要求1至39中任一项所述的装置相对应的指令执行环境。
43.一种虚拟机计算机程序,包括程序指令,该程序指令用于控制主机数据处理装置,以提供能够执行根据权利要求40所述的方法的指令执行环境。
44.一种计算机可读存储介质,在该计算机可读存储介质中,以非暂态的方式存储根据权利要求42或权利要求43所述的虚拟机计算机程序。
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| GB1710332.6 | 2017-06-28 | ||
| GB1710332.6A GB2563878B (en) | 2017-06-28 | 2017-06-28 | Register-based matrix multiplication |
| PCT/GB2018/051573 WO2019002811A1 (en) | 2017-06-28 | 2018-06-08 | REGISTRY-BASED MATRIX MULTIPLICATION |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN110770701A true CN110770701A (zh) | 2020-02-07 |
| CN110770701B CN110770701B (zh) | 2023-11-17 |
Family
ID=59523560
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201880041798.0A Active CN110770701B (zh) | 2017-06-28 | 2018-06-08 | 基于寄存器的矩阵乘法 |
Country Status (8)
| Country | Link |
|---|---|
| US (2) | US11288066B2 (zh) |
| EP (1) | EP3646169B1 (zh) |
| JP (1) | JP7253506B2 (zh) |
| KR (1) | KR102583997B1 (zh) |
| CN (1) | CN110770701B (zh) |
| GB (1) | GB2563878B (zh) |
| IL (1) | IL271174B2 (zh) |
| WO (1) | WO2019002811A1 (zh) |
Cited By (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN112182496A (zh) * | 2020-09-24 | 2021-01-05 | 成都海光集成电路设计有限公司 | 用于矩阵乘法的数据处理方法及装置 |
| CN112433760A (zh) * | 2020-11-27 | 2021-03-02 | 海光信息技术股份有限公司 | 数据排序方法和数据排序电路 |
| CN112434255A (zh) * | 2020-12-03 | 2021-03-02 | 海光信息技术股份有限公司 | 向量-矩阵运算和数据处理方法、乘法器和处理器芯片 |
| CN113569193A (zh) * | 2021-01-25 | 2021-10-29 | 腾讯科技(深圳)有限公司 | 用于神经网络模型的矩阵向量运算方法、设备及存储介质 |
| WO2022053032A1 (zh) * | 2020-09-11 | 2022-03-17 | 北京希姆计算科技有限公司 | 矩阵计算电路、方法、电子设备及计算机可读存储介质 |
| CN116109468A (zh) * | 2023-04-04 | 2023-05-12 | 南京砺算科技有限公司 | 图形处理单元及指令编译方法、存储介质、终端设备 |
| CN118227948A (zh) * | 2024-05-24 | 2024-06-21 | 北京壁仞科技开发有限公司 | 人工智能芯片、操作方法和机器可读存储介质 |
Families Citing this family (27)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2018174936A1 (en) | 2017-03-20 | 2018-09-27 | Intel Corporation | Systems, methods, and apparatuses for tile matrix multiplication and accumulation |
| US11275588B2 (en) | 2017-07-01 | 2022-03-15 | Intel Corporation | Context save with variable save state size |
| US10528642B2 (en) * | 2018-03-05 | 2020-01-07 | International Business Machines Corporation | Multiple precision integer multiple by matrix-matrix multiplications using 16-bit floating point multiplier |
| US10970076B2 (en) * | 2018-09-14 | 2021-04-06 | Intel Corporation | Systems and methods for performing instructions specifying ternary tile logic operations |
| US10719323B2 (en) | 2018-09-27 | 2020-07-21 | Intel Corporation | Systems and methods for performing matrix compress and decompress instructions |
| US10853067B2 (en) * | 2018-09-27 | 2020-12-01 | Intel Corporation | Computer processor for higher precision computations using a mixed-precision decomposition of operations |
| US10963246B2 (en) * | 2018-11-09 | 2021-03-30 | Intel Corporation | Systems and methods for performing 16-bit floating-point matrix dot product instructions |
| US11615307B2 (en) * | 2018-12-06 | 2023-03-28 | MIPS Tech, LLC | Neural network data computation using mixed-precision |
| US20200210517A1 (en) | 2018-12-27 | 2020-07-02 | Intel Corporation | Systems and methods to accelerate multiplication of sparse matrices |
| JP7296574B2 (ja) * | 2019-03-04 | 2023-06-23 | パナソニックIpマネジメント株式会社 | プロセッサ及びプロセッサの制御方法 |
| US11334647B2 (en) * | 2019-06-29 | 2022-05-17 | Intel Corporation | Apparatuses, methods, and systems for enhanced matrix multiplier architecture |
| US12353846B2 (en) * | 2019-07-09 | 2025-07-08 | MemryX | Matrix data reuse techniques in multiply and accumulate units of processing system |
| US11762658B2 (en) * | 2019-09-24 | 2023-09-19 | Advanced Micro Devices, Inc. | Matrix multiplication unit with flexible precision operations |
| US11119772B2 (en) * | 2019-12-06 | 2021-09-14 | International Business Machines Corporation | Check pointing of accumulator register results in a microprocessor |
| US20210200711A1 (en) * | 2019-12-28 | 2021-07-01 | Intel Corporation | System and Method for Configurable Systolic Array with Partial Read/Write |
| US11887647B2 (en) * | 2020-04-09 | 2024-01-30 | Micron Technology, Inc. | Deep learning accelerator and random access memory with separate memory access connections |
| US11355175B2 (en) | 2020-04-09 | 2022-06-07 | Micron Technology, Inc. | Deep learning accelerator and random access memory with a camera interface |
| US11461651B2 (en) | 2020-04-09 | 2022-10-04 | Micron Technology, Inc. | System on a chip with deep learning accelerator and random access memory |
| US11726784B2 (en) | 2020-04-09 | 2023-08-15 | Micron Technology, Inc. | Patient monitoring using edge servers having deep learning accelerator and random access memory |
| US11874897B2 (en) | 2020-04-09 | 2024-01-16 | Micron Technology, Inc. | Integrated circuit device with deep learning accelerator and random access memory |
| CN111753253B (zh) * | 2020-06-28 | 2024-05-28 | 地平线(上海)人工智能技术有限公司 | 数据处理方法和装置 |
| US12020028B2 (en) * | 2020-12-26 | 2024-06-25 | Intel Corporation | Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions |
| CN113722669B (zh) * | 2021-11-03 | 2022-01-21 | 海光信息技术股份有限公司 | 数据处理方法、装置、设备及存储介质 |
| CN114327366B (zh) * | 2021-12-17 | 2025-07-25 | 上海航芯电子科技股份有限公司 | 一种算法加速的硬件架构及方法 |
| US20230273972A1 (en) * | 2022-02-28 | 2023-08-31 | Texas Instruments Incorporated | Processor instruction set architecture for machine learning with low bit precision weights |
| JP2025517518A (ja) * | 2022-05-26 | 2025-06-05 | グーグル エルエルシー | 行列演算用の命令セットアーキテクチャ |
| US20240220248A1 (en) * | 2022-12-29 | 2024-07-04 | Intel Corporation | Restricting vector length in a processor |
Citations (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20030126176A1 (en) * | 2002-01-02 | 2003-07-03 | Zvi Devir | Apparatus and method for inverting a 4x4 matrix |
| US20040111587A1 (en) * | 2002-12-09 | 2004-06-10 | Nair Gopalan N | Apparatus and method for matrix data processing |
| US20050055535A1 (en) * | 2003-09-08 | 2005-03-10 | Moyer William C. | Data processing system using multiple addressing modes for SIMD operations and method thereof |
| US20050055543A1 (en) * | 2003-09-05 | 2005-03-10 | Moyer William C. | Data processing system using independent memory and register operand size specifiers and method thereof |
| WO2009035774A1 (en) * | 2007-09-13 | 2009-03-19 | Freescale Semiconductor, Inc. | Simd dot product operations with overlapped operands |
| US7873812B1 (en) * | 2004-04-05 | 2011-01-18 | Tibet MIMAR | Method and system for efficient matrix multiplication in a SIMD processor architecture |
| US20130159665A1 (en) * | 2011-12-15 | 2013-06-20 | Verisilicon Holdings Co., Ltd. | Specialized vector instruction and datapath for matrix multiplication |
| US20140032881A1 (en) * | 2006-09-20 | 2014-01-30 | Ronen Zohar | Instruction and logic for performing a dot-product operation |
Family Cites Families (9)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6901422B1 (en) * | 2001-03-21 | 2005-05-31 | Apple Computer, Inc. | Matrix multiplication in a vector processing system |
| US20040122887A1 (en) * | 2002-12-20 | 2004-06-24 | Macy William W. | Efficient multiplication of small matrices using SIMD registers |
| US7792895B1 (en) * | 2006-06-16 | 2010-09-07 | Nvidia Corporation | Efficient matrix multiplication on a parallel processing device |
| US8626815B1 (en) * | 2008-07-14 | 2014-01-07 | Altera Corporation | Configuring a programmable integrated circuit device to perform matrix multiplication |
| US8458442B2 (en) * | 2009-08-26 | 2013-06-04 | International Business Machines Corporation | Method and structure of using SIMD vector architectures to implement matrix multiplication |
| US8984043B2 (en) * | 2009-12-23 | 2015-03-17 | Intel Corporation | Multiplying and adding matrices |
| US9600281B2 (en) * | 2010-07-12 | 2017-03-21 | International Business Machines Corporation | Matrix multiplication operations using pair-wise load and splat operations |
| JP5699554B2 (ja) * | 2010-11-11 | 2015-04-15 | 富士通株式会社 | ベクトル処理回路、命令発行制御方法、及びプロセッサシステム |
| CN103975302B (zh) * | 2011-12-22 | 2017-10-27 | 英特尔公司 | 矩阵乘法累加指令 |
-
2017
- 2017-06-28 GB GB1710332.6A patent/GB2563878B/en active Active
-
2018
- 2018-06-08 US US16/626,701 patent/US11288066B2/en active Active
- 2018-06-08 IL IL271174A patent/IL271174B2/en unknown
- 2018-06-08 JP JP2019571000A patent/JP7253506B2/ja active Active
- 2018-06-08 WO PCT/GB2018/051573 patent/WO2019002811A1/en not_active Ceased
- 2018-06-08 KR KR1020207000266A patent/KR102583997B1/ko active Active
- 2018-06-08 CN CN201880041798.0A patent/CN110770701B/zh active Active
- 2018-06-08 EP EP18732444.7A patent/EP3646169B1/en active Active
-
2022
- 2022-02-23 US US17/678,221 patent/US20220291923A1/en active Pending
Patent Citations (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20030126176A1 (en) * | 2002-01-02 | 2003-07-03 | Zvi Devir | Apparatus and method for inverting a 4x4 matrix |
| US20040111587A1 (en) * | 2002-12-09 | 2004-06-10 | Nair Gopalan N | Apparatus and method for matrix data processing |
| US20050055543A1 (en) * | 2003-09-05 | 2005-03-10 | Moyer William C. | Data processing system using independent memory and register operand size specifiers and method thereof |
| US20050055535A1 (en) * | 2003-09-08 | 2005-03-10 | Moyer William C. | Data processing system using multiple addressing modes for SIMD operations and method thereof |
| US7873812B1 (en) * | 2004-04-05 | 2011-01-18 | Tibet MIMAR | Method and system for efficient matrix multiplication in a SIMD processor architecture |
| US20140032881A1 (en) * | 2006-09-20 | 2014-01-30 | Ronen Zohar | Instruction and logic for performing a dot-product operation |
| WO2009035774A1 (en) * | 2007-09-13 | 2009-03-19 | Freescale Semiconductor, Inc. | Simd dot product operations with overlapped operands |
| US20130159665A1 (en) * | 2011-12-15 | 2013-06-20 | Verisilicon Holdings Co., Ltd. | Specialized vector instruction and datapath for matrix multiplication |
Cited By (10)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2022053032A1 (zh) * | 2020-09-11 | 2022-03-17 | 北京希姆计算科技有限公司 | 矩阵计算电路、方法、电子设备及计算机可读存储介质 |
| CN112182496A (zh) * | 2020-09-24 | 2021-01-05 | 成都海光集成电路设计有限公司 | 用于矩阵乘法的数据处理方法及装置 |
| WO2022062004A1 (zh) * | 2020-09-24 | 2022-03-31 | 成都海光集成电路设计有限公司 | 用于矩阵乘法的数据处理方法、装置、设备及介质 |
| CN112433760A (zh) * | 2020-11-27 | 2021-03-02 | 海光信息技术股份有限公司 | 数据排序方法和数据排序电路 |
| CN112434255A (zh) * | 2020-12-03 | 2021-03-02 | 海光信息技术股份有限公司 | 向量-矩阵运算和数据处理方法、乘法器和处理器芯片 |
| CN112434255B (zh) * | 2020-12-03 | 2023-12-08 | 成都海光微电子技术有限公司 | 向量-矩阵运算和数据处理方法、乘法器和处理器芯片 |
| CN113569193A (zh) * | 2021-01-25 | 2021-10-29 | 腾讯科技(深圳)有限公司 | 用于神经网络模型的矩阵向量运算方法、设备及存储介质 |
| CN116109468A (zh) * | 2023-04-04 | 2023-05-12 | 南京砺算科技有限公司 | 图形处理单元及指令编译方法、存储介质、终端设备 |
| CN116109468B (zh) * | 2023-04-04 | 2023-07-21 | 南京砺算科技有限公司 | 图形处理单元及指令编译方法、存储介质、终端设备 |
| CN118227948A (zh) * | 2024-05-24 | 2024-06-21 | 北京壁仞科技开发有限公司 | 人工智能芯片、操作方法和机器可读存储介质 |
Also Published As
| Publication number | Publication date |
|---|---|
| GB2563878B (en) | 2019-11-20 |
| US20220291923A1 (en) | 2022-09-15 |
| WO2019002811A1 (en) | 2019-01-03 |
| JP2020527778A (ja) | 2020-09-10 |
| CN110770701B (zh) | 2023-11-17 |
| US11288066B2 (en) | 2022-03-29 |
| GB201710332D0 (en) | 2017-08-09 |
| IL271174B1 (en) | 2024-03-01 |
| KR20200019942A (ko) | 2020-02-25 |
| GB2563878A (en) | 2019-01-02 |
| EP3646169B1 (en) | 2022-08-31 |
| KR102583997B1 (ko) | 2023-10-04 |
| JP7253506B2 (ja) | 2023-04-06 |
| EP3646169A1 (en) | 2020-05-06 |
| US20200117450A1 (en) | 2020-04-16 |
| IL271174A (en) | 2020-01-30 |
| IL271174B2 (en) | 2024-07-01 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN110770701B (zh) | 基于寄存器的矩阵乘法 | |
| JP7454377B2 (ja) | データ処理装置における拡大算術計算 | |
| JP7253492B2 (ja) | データ処理装置における乗累算 | |
| JP2020533691A (ja) | Simd命令を用いた効率的な直接畳み込み | |
| JP7148526B2 (ja) | データ処理装置におけるベクトルによる要素演算 | |
| TWI766056B (zh) | 用於資料處理的方法、設備、電腦程式及電腦可讀取儲存媒體 | |
| TW202305588A (zh) | 用於向量組合指令之處理設備、方法、及電腦程式 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant |