CN115552371A - 用于矩阵处理的可变位置移位 - Google Patents
用于矩阵处理的可变位置移位 Download PDFInfo
- Publication number
- CN115552371A CN115552371A CN202180034380.9A CN202180034380A CN115552371A CN 115552371 A CN115552371 A CN 115552371A CN 202180034380 A CN202180034380 A CN 202180034380A CN 115552371 A CN115552371 A CN 115552371A
- Authority
- CN
- China
- Prior art keywords
- matrix
- row
- column
- operand
- input
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 810
- 238000012545 processing Methods 0.000 title claims abstract description 270
- 230000008859 change Effects 0.000 claims abstract description 10
- 230000000873 masking effect Effects 0.000 claims description 241
- 239000013598 vector Substances 0.000 claims description 74
- 230000004044 response Effects 0.000 claims description 19
- 238000009825 accumulation Methods 0.000 claims description 7
- 238000003672 processing method Methods 0.000 claims description 5
- 238000013459 approach Methods 0.000 description 25
- 238000000034 method Methods 0.000 description 18
- 230000006870 function Effects 0.000 description 15
- 238000010801 machine learning Methods 0.000 description 8
- 230000017105 transposition Effects 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 6
- 238000013528 artificial neural network Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 210000004027 cell Anatomy 0.000 description 3
- 229910052739 hydrogen Inorganic materials 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 101100269850 Caenorhabditis elegans mask-1 gene Proteins 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000001788 irregular Effects 0.000 description 2
- 238000013139 quantization Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000003708 edge detection Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 210000000352 storage cell Anatomy 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/01—Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/764—Masking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30141—Implementation provisions of register files, e.g. ports
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Complex Calculations (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明提供了一种装置,该装置具有:矩阵处理电路,该矩阵处理电路用于对第一输入操作数和第二输入操作数执行矩阵处理操作以生成2D结果矩阵;操作数存储电路,该操作数存储电路用于存储用于形成该矩阵处理电路的该第一输入操作数和该第二输入操作数的信息;以及位置移位电路,该位置移位电路用于应用可变位置移位以在给定矩阵处理操作期间基于存储在该操作数存储电路中的该第一输入操作数和该第二输入操作数中的一者的给定元素来改变该结果矩阵的哪一行或哪一列被更新。该可变位置移位基于多个替代移位量中的一个替代移位量,每个替代移位量对应于该第一输入操作数和该第二输入操作数中的该一者相对于该结果矩阵的不同行数/列数的位置移位。这可用于执行2D卷积操作。
Description
背景技术
本技术涉及数据处理领域。更具体地,本发明涉及矩阵处理。
生成二维矩阵作为结果矩阵的矩阵处理操作可以是某些数据处理领域中(例如,在机器学习或图像处理中)的重要操作。
至少一些示例提供了一种装置,该装置包括:矩阵处理电路,该矩阵处理电路用于对第一输入操作数和第二输入操作数执行矩阵处理操作以生成结果矩阵,其中该结果矩阵是二维矩阵;操作数存储电路,该操作数存储电路用于存储用于形成该矩阵处理电路的该第一输入操作数和该第二输入操作数的信息;以及位置移位电路,该位置移位电路用于应用可变位置移位,以在给定的矩阵处理操作期间,基于存储在该操作数存储电路中的该第一输入操作数和该第二输入操作数中的一者的给定元素来改变该结果矩阵的哪个行或列被更新,该可变位置移位基于针对该给定矩阵处理操作可选择的多个替代移位量中的一个替代移位量,每个替代移位量对应于该第一输入操作数和该第二输入操作数中的该一者相对于该结果矩阵的不同行数或列数的位置移位。
至少一些示例提供了一种装置,该装置包括:用于对第一输入操作数和第二输入操作数执行矩阵处理操作以生成结果矩阵的构件,其中该结果矩阵是二维矩阵;用于存储形成用于所述用于执行的装置的所述第一输入操作数和所述第二输入操作数的信息的构件;以及用于应用可变位置移位以在给定矩阵处理操作期间基于存储在该用于存储的构件中的该第一输入操作数和该第二输入操作数中的一者的给定元素来改变该结果矩阵的哪个行或列被更新的构件,该可变位置移位基于针对该给定矩阵处理操作可选择的多个替代移位量中的一个替代移位量,每个替代移位量对应于该第一输入操作数和该第二输入操作数中的该一者相对于该结果矩阵的不同行数或列数的位置移位。
至少一些示例提供了一种数据处理方法,该数据处理方法包括:对第一输入操作数和第二输入操作数执行矩阵处理操作以生成结果矩阵,其中该结果矩阵是二维矩阵并且该第一输入操作数和该第二输入操作数取决于操作数存储电路中存储的信息;以及在给定的矩阵处理操作期间,应用可变位置移位以基于存储在该操作数存储电路中的该第一输入操作数和该第二输入操作数中的一者的给定元素来改变该结果矩阵的哪个行或列被更新,该可变位置移位基于针对该给定矩阵处理操作可选择的多个替代移位量中的一个替代移位量,每个替代移位量对应于该第一输入操作数和该第二输入操作数中的该一者相对于该结果矩阵的不同行数或列数的位置移位。
附图说明
本技术的另外的方面、特征和优点将从结合附图阅读的示例的以下描述中显而易见,在这些附图中:
图1示出了无填充二维(2D)卷积的示例;
图2示出了填充2D卷积的示例;
图3示出了将2D卷积应用于包括多个通道的输入数据以生成包括多个通道的输出数据的示例;
图4示出了用于将输入数据的数据存储在存储器中的存储器布局的示例;
图5示出了用于比较的一种方法,其中存储在存储器中的输入通道数据被重新布置以产生存储在存储器中的多个数据行,以简化应用于重新映射的行的后续2D卷积处理;
图6示出了一种不同的方法,其中2D卷积操作被拆分为多个1×1卷积;
图7示出了操作数矩阵的所选行或列的掩蔽如何使2D卷积能够通过一系列1×1卷积来实现,而无需重新布置存储器中的数据的步骤;
图8示出了在给定矩阵操作的输入和输出之间应用可变位置移位如何使从存储器加载的同一组输入通道数据能够在针对不同内核位置的多个不同1×1卷积操作上重用;
图9示意性地示出了具有矩阵处理电路的数据处理装置;
图10示意性地示出了矩阵处理电路的一部分和矩阵处理电路所使用的寄存器;
图11至图13示出了表示矩阵处理操作的寻址信息和掩蔽状态信息的不同方式;
图14示出了其中矩阵处理操作是外积信息并且该装置具有位置移位电路以应用可变位置移位的示例;
图15示出了处理加载指令以加载用于矩阵处理操作的目标行或列的示例;
图16示出了处理矩阵处理指令的方法;并且
图17示出了处理矩阵处理指令的第二示例。
具体实施方式
用于矩阵处理操作的行或列掩蔽
二维(2D)卷积操作是机器学习领域中的一种流行操作,特别是对于神经网络。2D卷积还可用于其他目的,诸如将滤波器应用于图像。在2D卷积操作中,提供内核来定义要应用的滤波器或其他操作。内核被应用于一个或多个输入通道,每个通道包括通常比内核大的矩阵。在2D卷积操作中,对于输出矩阵内的给定输出元素位置,给定输出元素位置的值取决于相应内核值和输入通道值对的乘积之和。对于每个输出矩阵位置,要与相应内核值相乘的输入通道值的选择是不同的。对于给定的输出元素位置,与对应的输入矩阵元素相乘的内核值是当内核被逻辑定位时在位置上对齐的内核值,使得中心内核元素位于输入矩阵的元素之上,该元素在位置上对应于给定的输出元素位置。下面进一步描述2D卷积的示例。
2D卷积操作在数据处理中实现起来相对复杂的一个原因是,对于内核值和输入元素的许多不同组合,它们可能需要计算若干对内核值和输入元素的乘积之和,包括添加涉及可能未存储在存储器地址空间内的相邻地址处的输入矩阵元素的乘积。因此,用于执行2D卷积的典型方法是(在乘积和计算本身之前)执行一些重映射(重新布置)操作,以重新映射存储器中为输入矩阵存储的数据,从而生成多个定制数据结构,这些数据结构对应于要对内核的每个相应内核位置进行操作的值。然而,此重新映射涉及将数据从一个存储器位置复制到另一存储器位置的许多实例,这会产生额外的延迟并浪费存储器空间。因此,可能期望找到一种实现2D卷积的方式,使得可基于存储器空间内的输入通道数据的布局来直接应用所需的操作,而无需这种重新映射。
在下文的示例中,一种装置具有:矩阵处理电路,该矩阵处理电路用于对第一输入操作数和第二输入操作数执行矩阵处理操作以生成结果矩阵,其中该结果矩阵是二维矩阵。第一输入操作数和第二输入操作数本身不需要是二维的,并且在一些示例中可以是一维向量,尽管其他示例可将矩阵处理操作应用于二维输入操作数。提供操作数存储电路以存储用于形成矩阵处理电路的第一输入操作数和第二输入操作数的信息。掩蔽电路执行掩蔽操作以基于指示将被视为表示掩蔽值的一个或多个掩蔽的行或列位置的掩蔽状态数据来掩蔽所述矩阵处理操作或存储到所述操作数存储电路的信息的至少一部分。掩蔽状态数据可以被定义为指示矩阵处理电路执行矩阵处理操作的矩阵处理指令的操作数,或者可以是单独配置且未被矩阵处理指令明确引用的一些存储状态数据。
通过基于指示掩蔽的行位置/列位置的掩蔽状态数据来提供掩蔽,这使得矩阵处理能够跳过输入数据的某些行或列,这对于2D卷积操作特别有用。掩蔽电路可在将操作数加载到操作数存储电路中时,或者在执行矩阵处理操作本身时,或者同时在加载操作数存储系统和执行矩阵处理操作时执行掩蔽操作。
这种方法有助于支持更有效的2D卷积操作。2D卷积操作可(通过软件)拆分为多个单独的1×1卷积操作,这些卷积操作将来自较大内核矩阵内的单个内核位置的内核值应用于给定输入通道的多个输入矩阵元素,并基于结果更新输出矩阵内的各个元素(在某些情况下,这种1×1卷积处理的多个通道可并行进行)。这种1×1卷积将允许在不需要重新映射存储器中的结构的情况下应用给定内核位置的操作,其中不同内核位置的1×1卷积的连续结果累积在一起(其中输出矩阵元素的适当移位相对于用于计算这些输出的输入矩阵元素进行更新,以说明正在应用哪个内核位置),使得在对每个内核位置执行1×1卷积之后,结果等同于2D卷积的结果。
为了支持这一点,提供掩蔽电路是有用的,该掩蔽电路可基于掩蔽状态数据被控制以掩蔽给定的行或列位置,使得来自相应输入通道的一些行/列的数据可被视为表示掩蔽值,而不是存储在存储器中的实际数据。这是因为当2D卷积被拆分为连续的1×1卷积时,而对于大多数输出元素位置,给定1×1卷积的正确结果可通过读取对应的输入矩阵元素、将该元素乘以对应的内核值并将结果写入对应的输出矩阵元素来实现(其中在输入矩阵内的输入矩阵元素的相对位置与输出矩阵内的对应输出矩阵元素的位置之间存在位置移位,并且对于给定的内核位置执行的每个乘法,该移位是相同数量的元素位置)。然而,在矩阵的边缘处存在一些元素,对于这些元素,例如由于输出矩阵的一个边缘上的元素基于输入矩阵的相对边缘处的元素被更新,因此这种方法可能会给出错误的结果,从而导致以下首选的错误,即“绕回”错误。通过提供掩蔽操作,这允许掩蔽掉不应影响输出的输入数据的行或列。因此,通过提供对行/列的掩蔽的支持,这可改善2D卷积操作的性能,这对神经网络性能非常重要。
应当理解,对矩阵的哪些特定行/列被掩蔽掉的控制由软件控制,因此不是特定处理器实现的特征。该装置提供使软件能够选择要掩蔽的行/列的特征。
当给定操作数矩阵的给定行或列被掩蔽状态数据指示为掩蔽时,可能存在不同的选项用于选择要用于该行/列位置的掩蔽值。对于许多实际应用,掩蔽值为零可能很有用。这可帮助支持跳过行以处理上述“环绕”问题,其中应防止输入矩阵的一个边缘上的行/列影响相对边缘上的输出矩阵元素的计算。此外,当应用填充的2D卷积操作并且内核位于输入矩阵的边缘附近的中心位置时,零的掩蔽值可用于使要提供的填充值与位于输入矩阵边界之外的内核元素相乘。因此,在一些硬件具体实施中,掩蔽电路仅支持用于任何掩蔽的行/列位置的固定掩蔽值(例如,掩蔽值为零)就可能足够了。
然而,对于使用了2D卷积的一些应用,可能期望使用除零以外的填充值(例如,如果使用量化方案来表示矩阵,其中每个值从其真实值偏移一定数值,使得“零点”由除零之外的数值表示)。为了支持此类操作,提供选择非零值作为掩蔽值的能力可能很有用。因此,在一些具体实施中,在掩蔽操作中,可基于以下中的至少一者从多个掩蔽值(例如,零或另一预先配置的值)中选择掩蔽值:掩蔽值选择参数,该掩蔽值选择参数由导致执行掩蔽操作的指令指定(例如,用于将信息加载到操作数存储电路的加载指令,或用于控制矩阵处理电路执行矩阵处理操作的矩阵处理指令);控制值,所述控制值存储在控制寄存器中;和掩蔽向量,该掩蔽向量为掩蔽的行/列的多个元素指定单独的掩蔽值。使用最后一个选项,可从向量寄存器中读取掩蔽向量。
掩蔽状态数据可具有在元素的二维阵列内标识将被视为表示掩蔽值的元素的编码。因此,掩蔽状态数据可(全部或部分地)标识掩蔽元素在二维上的位置。提供可在二维中应用掩蔽的状态数据对于处理2D卷积处理中涉及的许多问题可能很有用,包括上文讨论的“绕回”错误问题,在循环的尾部可能有许多未使用的“越界”元素,这些元素延伸到要处理的数据结构的末尾,并为下文更详细描述的“位置移位”功能提供支持。
例如,掩蔽状态数据可指定:第一掩蔽状态数据,该第一掩蔽状态数据指示一个或多个掩蔽的行或列位置,对于该一个或多个掩蔽的行或列位置,掩蔽的行或列位置中的所有元素将被视为表示掩蔽值;和第二掩蔽状态数据,该第二掩蔽状态数据指示给定行或列内的各个元素位置是否要被掩蔽。使用第一掩蔽状态数据掩蔽整个行或列对于处理第一维度中的“绕回”错误和/或“越界”行/列可能很有用,并且在未完全掩蔽的行或列中单独掩蔽特定元素对于支持第二维度中的“越界”列/行和/或下文描述的位置移位特征(或更一般的每元素谓词)可能很有用。第一掩蔽状态数据可包括标识一个维度(行或列)中的掩蔽/非掩蔽行/列位置的一组元素,而第二掩蔽状态信息可包括标识正交维度(列或行)中的掩蔽/非掩蔽位置的一组元素。在一些情况下,第二掩蔽状态数据可仅针对单个行/列指定掩蔽/非掩蔽元素的各个指示,因为同一组第二掩蔽状态数据可跨行/列共享(或者如果不同的行/列需要不同模式的掩蔽/非掩蔽元素,则可以在处理一行/列和下一个行/列之间调整第二掩蔽状态数据)。
掩蔽状态数据可具有能够将由至少一个非掩蔽行或列位置分隔的至少两个非相邻行或列位置指示为掩蔽行或列位置的编码。这认识到,当2D卷积被拆分为多个1×1卷积时,可能存在多个非相邻行或列位置需要被掩蔽,以防止输入矩阵的一个边缘上的输入值影响输出矩阵的相对边缘处的输出值。此外,要为填充的2D卷积填充的位置可能不对应于存储器中的连续地址。
掩蔽状态数据可以多种不同方式表示。一般来讲,掩蔽状态数据可以是可指示矩阵结构内的哪些行/列位置将被掩蔽的任何信息集。一种方法可以是掩蔽状态数据(例如,上述第一掩蔽状态信息)包括多个掩蔽状态指示符,每个掩蔽状态指示符对应于给定操作数矩阵的相应行或列位置,并且指示相应行或列位置是否是掩蔽的行或列位置。例如,掩蔽状态数据可包括位图,其中每个位对应于给定的行或列位置,并且如果该行或列位置要被掩蔽,则设置为一个值,而如果该行或列位置要保持未掩蔽,则设置为另一值。类似地,第二掩蔽信息可包括指示特定行/列内的掩蔽的行/元素位置的第二位图。
掩蔽状态数据不必区分它是指给定操作数矩阵的相应行还是给定操作数矩阵的相应列。不同的软件应用程序可为存储器内的矩阵选择不同的布局(例如,行优先或列优先),但掩蔽状态数据的格式可以是相同的。
操作数存储电路可以不同方式实现。在一些示例中,操作数存储电路可包括一组输入寄存器,当执行给定的矩阵处理操作时,可从该组输入寄存器读取第一操作数和第二操作数。
然而,作为操作数存储电路的一部分,提供矩阵转置电路是有用的,该矩阵转置电路包括多个存储单元以存储给定操作数矩阵的相应矩阵元素。矩阵转置电路的存储单元可在对应于给定操作数矩阵的行的行组中可读,并且也可在对应于给定操作数矩阵的列的列组中可读。提供这样的矩阵转置电路对于处理不同的机器学习算法可能使用不同的布局来将输入通道数据存储在存储器中这一事实非常有帮助。例如,一些算法可在存储器中使用行优先布局,其中矩阵的同一行的相邻元素的存储器地址之间的偏移小于给定操作数矩阵的同一列中的相邻元素中的元素的存储器位置之间的偏移。其他算法可使用列优先布局,其中同一列中的相邻元素的地址之间的偏移小于同一行中的相邻元素之间的偏移。矩阵转置电路能够即时重新映射使用的是行优先格式还是列优先格式,因为如果给定的操作数矩阵以行组的形式写入矩阵转置电路,则可以列组的形式从矩阵转置电路中读出该操作数矩阵,反之亦然,使得后续矩阵处理操作可采用一致的格式,而不管存储在存储器中的输入矩阵的数据是行优先还是列优先。这可以简化代码开发并避免对存储器本身内的数据重新映射或重新安排的需要。
需注意,矩阵转置电路的存储单元不需要物理地以行和列的形式布置。矩阵转置电路的存储单元在对应于行的存储元件组或对应于列的组中是逻辑可读的就足够了。例如,矩阵转置电路可实现为具有多个读/写端口的寄存器组,从而可以不同的组合对寄存器的部分进行寻址。例如,如果每个寄存器存储一个行组,则可认为列组由一组数据部分组成(该组包括每个寄存器的一个部分,位于每个寄存器内的对应位置)。另选地,可使用相反的映射,其中每个列组映射到一个寄存器并且行组是每个寄存器中的对应位置内的数据部分的条带。此外,需注意,将存储在存储器中的矩阵的“行”写入矩阵转置电路的“行组”不是必需的,虽然这是可能的,但矩阵的这些行同样可很好地写入矩阵转置电路的“列组”。因此,矩阵转置电路中的存储单元的“行组”和“列组”指的是正交分组,通过正交分组可读取矩阵转置的存储单元,但不需要与存储器中的矩阵一致的行/列方向。实际上,为了改进矩阵转置电路的读/写流水线,有时可以交替选择输入矩阵的连续行组(行或列)是以行组还是列组的形式写入矩阵转置电路中。
因此,当将数据加载到矩阵转置电路时,加载电路可基于存储器中的矩阵数据结构的一部分来选择是加载矩阵转置电路的存储单元的至少一个行组还是至少一个列组。是加载至少一个行组还是至少一个列组的选择可基于以下中的一者或两者:由加载指令指定的行/列方向选择信息;以及存储在控制寄存器中的行/列方向选择信息,该信息可响应于行/列方向切换指令而更新。一些具体实施可仅使用这些选项中的一者来确定是加载行组还是列组(由加载指令指定的信息或控制寄存器中指定的信息)。另选地,具体实施可将这两条信息组合起来。例如,控制寄存器位可指示行模式或列模式,但加载指令中的一个位可指示存储位的含义是否应该反转(因此,对于设置了“反转”位的加载指令,当存储位指示列时,指令将加载行,当存储的位指示行时,指令会加载列)。类似地,在从矩阵转置电路读出数据以提供用于矩阵处理操作的操作数(或将信息传送到操作数寄存器,随后可从操作数寄存器获得操作数以用于矩阵处理操作)时,行/列方向选择信息可指定是读取矩阵转置电路的行组还是列组(同样,选择信息可由指令和/或在控制寄存器中指定,可以选择将寄存器中的行/列方向位和指令中的“反转”位组合用于存储指令,类似于上述加载指令)。
基于掩蔽状态数据的掩蔽操作可在相对于用于矩阵处理的操作数的加载和矩阵处理操作本身的处理的不同时间执行。
在一些具体实施中,矩阵处理电路可包括掩蔽电路。矩阵处理电路的掩蔽电路可响应于掩蔽信息来执行矩阵处理操作,其中第一操作数和第二操作数中的一者的对应于一个或多个掩蔽的行或列位置被视为表示掩蔽值,而不是存储在操作数存储电路中的第一操作数和第二操作数中的一者的部分的实际值。因此,尽管来自输入通道的实际数据可正常地从存储器加载到操作数存储电路,但可通过在输入到矩阵处理电路时掩蔽从操作数存储电路读取的数据来控制用掩蔽值替换这种输入数据以提供填充或避免上述绕回错误。这种方法对于还支持应用可变位置移位的选项的具体实施特别有用,如下文进一步讨论的。
在一些具体实施中,掩蔽电路可包括加载电路,该加载电路响应于加载指令而基于存储在存储器中的矩阵数据结构的一部分将对应于给定操作数矩阵的目标行或列的信息加载到操作数存储电路。在这种情况下,当目标行或列对应于由掩蔽状态数据指示的掩蔽的行或列位置时,加载电路可为该操作数存储电路中对应于该目标行或列的一部分加载具有掩蔽值的数据,而不是基于存储在存储器中的矩阵数据结构的部分的数据。利用这种方法,可在从存储器加载操作数时应用掩蔽,这避免了不必要地加载无论如何都会被掩蔽的矩阵元素。也可使用掩蔽电路来掩蔽越界数据(对应于要处理的数据结构末尾之外的地址,这些地址在循环的最后迭代中被加载指令引用,因为要处理的数据量与一次迭代中可以处理的数据量的精确倍数不对应),以防止它们被加载,从而防止由于访问可能无效的地址而引发地址错误。
一些硬件具体实施可支持两种类型的掩蔽,这可能是有用的,因为例如,通过在加载时进行掩蔽可更高效地处理越界数据的填充和掩蔽,但如果支持可变位置移位,则处理上述类型的“绕回”错误可能需要在不同的输入行/列处针对读取同一组输入数据的不同实例进行掩蔽,在这种情况下,在读取操作数存储电路以执行特定矩阵处理操作时应用掩蔽可能更有效。因此,为了提供最大的灵活性,一些具体实施可支持两种类型的掩蔽。
对于提供包括掩蔽电路的加载电位以在从存储器加载操作数数据时应用掩蔽的那些具体实施现,当对应于目标行或列的掩蔽状态数据指示目标行或列对应于掩蔽的行或列位置时,加载电位可基于在目标行或列的两个或更多个矩阵元素之间共享的掩蔽状态数据的共享项来确定是否应掩蔽目标行或列的多个矩阵元素中的每个矩阵元素。因此,没有必要为目标行或列内的每个单独元素提供单独的掩蔽状态(尽管如果需要,这将是可能的,如上文关于提供2D掩蔽的第二掩蔽状态数据的示例所述)。为了支持处理2D卷积的“拆分为1×1卷积”方法,输入通道数据的公共存储器布局是在存储器的连续块中将多个输入通道的相同x-y位置处的输入元素分组在一起,在这种情况下,可将掩蔽应用于定义这些输入通道中的每个输入通道的输入数据的输入矩阵结构的整个行或列。这意味着在正在处理的操作数矩阵的整个行或列之间共享一项掩蔽状态数据就足够了。
对于加载掩蔽示例,可使用一组掩蔽状态指示符(例如,位图)来表示掩蔽状态数据,如上所述。
然而,另一种方法可以是掩蔽状态数据包括多个偏移值,每个偏移值对应于给定操作数矩阵的相应行或列位置,并且指示矩阵数据结构的对应部分在存储器中的地址相对于基地址的偏移。在这种情况下,掩蔽的行或列位置可由具有预定预留偏移值的掩蔽的行或列位置的偏移值指示。这种方法可能是有用的,因为这意味着可使用寻址信息的一部分来表示掩蔽状态数据,该部分用于标识应从中加载存储器中的矩阵数据结构的部分的存储器地址。因此,对于每个相应的行或列位置,可使用该行或列位置的基地址和对应的偏移值来标识存储器中的地址,当偏移值不具有预定的预留偏移值时,应从该地址加载矩阵数据结构的一部分。然而,如果给定行或列位置的偏移值具有预定的预留偏移值,则可将掩蔽值写入操作数存储电路的部分(该部分原本存储该行或列的矩阵的部分),而不是加载到存储器中的矩阵数据结构的对应部分中。因此,这种方法避免了在用于寻址存储器中的矩阵数据结构的状态数据之外提供单独的掩蔽状态数据的需要。预定的预留偏移值可以是被指定为不允许用于真实偏移值的任何预留值,诸如-1(例如,在带符号的二进制表示中,所有偏移位都为1的值)。
在一个示例中,掩蔽状态数据可存储在处理装置内提供的至少一个掩蔽状态寄存器内。例如,在执行用于在掩蔽状态数据的控制下加载操作数矩阵的部分的加载指令之前,可能存在用于将掩蔽状态信息写入掩蔽状态寄存器的特定指令。
掩蔽状态寄存器可以是专门提供用于在执行矩阵处理和/或加载矩阵处理的操作数时控制掩蔽的专用寄存器。
在其他示例中,至少一个掩蔽状态寄存器可包括至少一个谓词寄存器。响应于用于控制处理电路使用包括一维元素阵列的一个或多个向量操作数执行向量处理的向量指令(或单指令多数据指令),可读取向量谓词寄存器以提供控制向量处理的相应通道是否被掩蔽的谓词值。因此,可在指示向量操作的向量谓词和指示矩阵操作的掩蔽状态数据之间共享同一寄存器。
可提供至少一个掩蔽状态寻址寄存器来存储掩蔽状态寻址信息,该掩蔽状态寻址信息标识存储器中可从中获得掩蔽状态数据的位置。例如,当如上所述使用一组偏移值来表示掩蔽状态数据时,该组偏移值可存储在存储器中,并且掩蔽状态寻址寄存器中的掩蔽状态地址信息可标识该阵列存储在存储器的何处。这种方法可减少架构上需要提供的用于支持矩阵处理的寄存器的数量,这对于一些低功耗微架构具体实施可能是优选的。
然而,即使在架构上不需要提供用于存储掩蔽状态信息本身的寄存器(因为那些不希望提供用于存储该信息的专用硬件的微架构可在需要时从存储器加载该信息),一些微架构设计者仍然可选择提供掩蔽状态高速缓存来高速缓存从存储器获得的掩蔽状态数据,使得能够更快地访问掩蔽状态数据以用于将来的访问,以帮助提高性能。这可能很有用,因为对于许多矩阵操作,掩蔽/未掩蔽的行/列的模式可能相同,因此高速缓存可以节省大量存储器访问。
不管掩蔽状态数据的形式如何,加载电路都可基于寻址信息来确定矩阵数据结构的部分在存储器中的目标地址,该寻址信息可以各种方式定义。寻址信息可从导致执行加载的指令显式引用的寄存器中获得,或者可从加载指令隐式引用的默认寄存器中获得。
在一个示例中,寻址信息可包括一组地址指针,其中每个地址指针指示对应于给定操作数矩阵的相应行或列位置的矩阵数据结构的一部分的地址。
在另一示例中,寻址信息可包括存储在存储器中的矩阵数据结构的基地址和用于确定矩阵数据结构中对应于给定操作数矩阵的给定行或列的部分相对于基地址的地址的偏移信息。虽然在一些示例中,该偏移信息可使用与用于掩蔽状态数据的同一组偏移值来表示,但这不是必需的,并且在其他示例中,偏移信息可与掩蔽状态数据分开。偏移信息可例如使用步幅值来以不同的方式表示,该步幅值指示对应于给定操作数矩阵的一个行或列的矩阵数据结构的部分的地址与对应于给定操作数矩阵的下一行或列的矩阵数据结构的部分的地址之间的差值,或者通过在偏移数据结构中显式地记录多个行/列的偏移,如前所述。步幅值的使用避免了对相应行的每个单独的偏移值进行显式编码的需要,但更显式的偏移数据结构的使用允许以与偏移相同的结构来表示掩蔽状态,并且将允许对具有针对相应行/列的存储器访问的不规则模式的矩阵进行处理。无论哪种方式,使用相对于基地址的偏移信息来表示地址可允许使用比寻址信息指示与给定操作数矩阵的每一行/列位置相对应的绝对地址更少的位来表示寻址信息。
在一些示例中,寻址信息还可包括另外的信息,该另外的信息提供子部分选择信息,以在加载给定的目标行或列时选择将基于寻址信息标识的存储器中的矩阵数据结构部分的哪个子部分加载到操作数存储电路。这认识到,考虑到硬件中可处理矩阵的最大大小的限制,当处理较大大小的输入矩阵时,可能需要将操作拆分为多个子操作,每个子操作作用于输入矩阵的较小部分。由于存储器中的矩阵数据的布局可能包括比要由给定的一组矩阵处理指令操作的矩阵数据块更大大小的行或列,因此子部分选择信息可用于缩小应针对给定操作处理行或列的哪个子部分。
因此,存在许多用于表示寻址信息的选项,该寻址信息标识存储器中要加载给定目标行或列的位置。可提供至少一个寻址寄存器来存储寻址信息。在执行加载指令或矩阵处理指令之前,正在执行的程序可向至少一个寻址寄存器加载适当的寻址信息,以选择要处理的矩阵数据结构的部分。
在一些具体实施中,可提供预取电路,以根据存储在至少一个寻址寄存器中的寻址信息,生成用于从存储器预取给定操作数矩阵的部分的预取请求。例如,如果寻址信息包括偏移值阵列,则在为较早的行或列加载给定操作数矩阵的行或行时,预取电路可向前看,并基于较晚的行/列的偏移开始预取数据,从而改善性能。另选地,其他微架构可能倾向于不提供预取电路以节省功率和电路面积。
对于一些具体实施,用于矩阵处理操作的第一输入操作数和第二输入操作数可以是二维矩阵操作数。例如,矩阵处理电路可以支持在单个指令中执行的全矩阵乘法操作,这对性能可能是有益的。然而,这种方法在功耗和电路面积方面可能更昂贵。
因此,其他具体实施可能更倾向于提供支持对一维向量操作数执行矩阵处理操作以生成二维结果矩阵的矩阵处理电路。例如,矩阵处理操作可包括应用于1D向量操作数以生成2D结果矩阵的外积操作。这认识到,在实践中,应用于两个2D矩阵操作数以生成2D结果矩阵的矩阵乘法操作可被分解为多个单独的外积操作,这些外积操作被应用于输入矩阵操作数的相应行/列的相应组合,其中外积操作的结果被累积在一起以生成与2D矩阵乘法结果等效的最终结果。因此,外积操作包括外积累加(outer-product-and-accumulate)操作可能特别有用,对于该外积累加操作,结果矩阵包括累加器矩阵的相应元素的更新值,其中累加器矩阵的给定元素的更新值对应于将累加器矩阵的给定元素的先前值添加到外积结果矩阵的对应元素的结果,该外积结果矩阵的对应元素对应于对第一输入操作数和第二输入操作数执行所述外积操作的结果。该操作可用于支持上述2D卷积操作。
矩阵处理电路可以响应于单个指令,基于第一输入操作数和第二输入操作数将结果矩阵生成为二维矩阵。因此,即使矩阵乘法操作被拆分为执行单独外积操作的多个指令,其中每个外积操作作用于一维向量操作数,每个单独的外积操作仍然可生成二维结果矩阵。与使用向量处理电路来执行与矩阵操作等效的一系列向量操作的方法相比,这可提供改进的性能,其中每个向量操作处理1D向量操作数以生成1D向量结果。
用于矩阵处理的位置移位
一种示例性装置具有:矩阵处理电路,该矩阵处理电路用于对第一操作数和第二操作数执行矩阵处理操作以生成结果矩阵,其中该结果矩阵是2D矩阵。操作数存储电路存储用于形成该矩阵处理电路的该第一输入操作数和该第二输入操作数的信息。提供位置移位电路以应用可变位置移位以在给定矩阵处理操作期间基于存储在操作数存储电路中的第一输入操作数和第二输入操作数中的一者的给定元素来改变结果矩阵的哪一行或哪一列被更新。可变位置移位基于针对给定矩阵处理操作可选择的多个替代移位量中的一个替代移位量。每个替代移位量对应于第一输入操作数和第二输入操作数中的一者相对于结果矩阵的不同行数或列数的位置移位。
位置移位电路对于支持将2D卷积操作分解为累加到结果矩阵中的多个单独的1×1卷积的方法是有用的。本发明人认识到,在这样的一系列1×1卷积中,对应于多个相邻内核位置的1×1卷积操作需要非常类似的输入数据,但在相应内核位置的输入之间存在一个或多个行/列位置的相对移位。因此,通过提供电路以将输入的可变行/列位置移位应用于相对于输出的给定矩阵处理操作,这意味着在实现2D卷积操作的一系列1×1卷积期间,从存储器加载的相同操作数数据可充当针对多个不同内核位置的矩阵处理操作的输入,这可减少从存储器加载数据以执行给定2D卷积操作所需的加载操作的数量。
如上所述,虽然一些具体实施可实现全矩阵乘法操作,但为了限制硬件成本,其他具体实施可将矩阵处理操作实现为应用于作为第一输入操作数和第二输入操作数的一维向量操作数的外积操作,以生成二维结果矩阵。因此,在这种情况下,可变位置移位可基于第一向量操作数和第二向量操作数中的一者内的给定元素来改变结果矩阵的哪个行或列被更新。同样,出于与上面讨论的原因类似的原因,将矩阵处理操作作为外积累加操作可能特别有用,其中结果矩阵包括累加器矩阵的相应元素的更新值,这些更新值是基于累加器阵的先前值和为外积结果生成的对应元素而形成的。该操作可用于支持1×1卷积方法来处理2D卷积。
位置移位电路可基于由矩阵处理指令指定的参数来在相应替代移位量之间进行选择,该矩阵处理指令用于控制矩阵处理电路以执行矩阵处理操作。在一些具体实施中,标识移位量的参数可以是矩阵处理指令的操作码的一部分,使得可针对相应的移位量分配多个不同的操作码,每个操作码对应于相同类型的矩阵处理操作(不同的移位量除外)。另选地,可定义指令编码中的单独参数,例如与标识要执行的特定矩阵处理操作的操作码分开的移位量选择字段。用于选择移位量的参数可表示为指令编码内的立即值,或可在由矩阵处理指令指定的寄存器内标识。
另选地,在一些具体实施中,可提供用于存储移位量选择参数的特定专用寄存器,使得响应于矩阵处理指令读取以获得移位量选择参量的寄存器是隐式的,因此在指令编码中不需要显式编码。
矩阵处理电路还可支持谓词,其中结果矩阵内的某些行或列可被标识为活动或非活动行或列位置,如由矩阵处理电路可访问的谓词信息所标识的。因此,当结果矩阵的给定行或列对应于由谓词信息指示的活动行或列位置时,则矩阵处理电路可生成结果矩阵的给定行或列的元素,这些元素具有取决于第一输入操作数和第二输入操作数中的一者的对应行或列的值(哪个行或列是对应行或列取决于为针对特定矩阵处理操作选择的替代移位量中的一个替代移位量)。当结果矩阵的给定行或列对应于由谓词信息指示的非活动行或列位置时,则生成结果矩阵的给定行或列的元素,这些元素具有独立于第一输入操作数和第二输入操作数中的一者的对应行或列的值。例如,当结果矩阵的给定行或列不活动时,则对应的元素可保留它们先前的值,而无需基于输入操作数的对应行或列进行更新。通过提供防止输入操作数的某些行或列影响输出的能力,这有助于处理上文讨论的“绕回”问题。该谓词可以是前面描述的掩蔽操作的一个示例。
同样,对于上面讨论的掩蔽示例,操作数存储电路可包括矩阵转置电路,该矩阵转置电路能够以行组或列组的形式读取和写入矩阵转置电路的存储单元。这有助于支持更有效地处理存储在存储器中的矩阵数据结构,这些矩阵数据结构以行优先或列优先的形式表示。当使用位置移位示例时,也可提供上面讨论的矩阵转置电路的所有特征。
当提供矩阵转置电路时,操作数存储电路还可包括操作数寄存器,该操作数寄存器用于存储用于矩阵处理操作的第一操作数和第二输入操作数,该操作数寄存器与矩阵转置电路本身分开。操作数寄存器可以是存储电路,响应于用于控制处理电路执行矩阵处理分离的矩阵处理指令,从该存储电路读取用于给定处理操作的操作数。
可提供专用移动指令来控制操作数移动电路从矩阵转置电路读出给定操作数矩阵的至少一个行或列,并将该至少一个行或列写入操作数寄存器。这可简化矩阵处理指令的编码,因为用于选择要从矩阵转置电路读取列还是行(或用于选择应读取哪个特定行或列)的任何附加参数都可在移动指令中编码,使得在矩阵处理指令中需要在此类参数上花费更少的编码空间。
然而,另一种方法是,可响应于矩阵处理指令从矩阵转置电路读出操作数,并将其直接提供给电路逻辑以执行矩阵处理操作,而无需经由一组操作数寄存器。
虽然对于使用掩蔽的示例,上文并未明确描述响应于移动指令的此类操作数移动电路,或从矩阵转置电路直接读取操作数的能力,但在该示例中也可提供这些特征。
此外,前面部分中描述的掩蔽功能可与上述位置移位功能相结合。因此,即使在位置移位示例中,也可以提供如上所述基于掩蔽状态数据执行掩蔽操作的掩蔽电路。
实际上,将加载上的掩蔽功能和位置移位(包括在矩阵处理操作的输入处应用的谓词)结合起来可能特别有用。可能认为,在支持加载掩蔽的情况下,谓词只是多余的,但实际上提供这两种功能可能很有用。这是因为加载上的掩蔽可用于插入支持填充的2D卷积的填充值,即使在矩阵处理操作的输入处应用的谓词随后被进一步掩蔽以防止某些行影响输出(以处理上文讨论的绕回问题)。这是因为受绕回问题影响的行的位置可能因内核位置而异,因此当使用位置移位功能来允许基于为单个内核位置加载的一组数据计算多个内核位置时,则可使用基于谓词值的谓词来为每个单独的内核位置选择要抑制的单独行,如果仅在从存储器加载数据时处理此类环绕,这将难以处理。然而,掩蔽方法可用于提供填充值。
然而,在先前描述的示例中,如果不支持位置移位,那么如果对每个内核位置执行单独的加载,则执行加载操作时的掩蔽足以处理绕回问题,或者替代地,可能根本不支持加载掩蔽,而是可在执行矩阵处理操作时应用掩蔽/谓词。
同样,对于掩蔽示例,为矩阵处理操作生成的结果矩阵可以是响应于单个指令从第一输入操作数和第二输入操作数生成的二维结果矩阵,因此不需要对各自生成一维向量结果的各向量指令进行单独处理。
2D卷积
图1示出了对输入矩阵和内核矩阵执行2D卷积操作以生成输出矩阵的示例。在该示例中,输入矩阵是4×4矩阵,内核是3×3矩阵,并且输出是2×2矩阵。应当理解,所涉及的矩阵不一定是对于行数和列数具有相同维度的方阵,并且图1所示的一组特定矩阵大小仅仅是一个示例。
在2D卷积操作中,对于输出矩阵内的每个输出元素,内核以输入矩阵中位于与正在生成的输出元素对应的位置处的元素为中心,并且生成输出元素,输出元素的值对应于相应内核元素与输入矩阵元素的乘积之和,输入矩阵元素位于相对于中心内核的对应位置处。例如,对于在位置上对应于输入元素F的输出矩阵元素F’,假设中心内核元素K5位于对应于输出位置F’的输入元素F上方,则通过将位于对应位置处的相应的输入元素和内核元素对相乘来生成F’的值。因此,F’=A*K1+B*K2+C*K3+E*K4+F*K5+G*K6+I*K7+J*K8+K*K9。
类似地,对于输出矩阵中的每个其他矩阵元素,该元素是基于乘积之和生成的,但其内核位于输入矩阵的不同元素上方。例如,对于输出元素G',内核矩阵的中心元素K5位于输入矩阵元素G上方,这意味着乘积之和是G'=B*K1+C*K2+D*K3+F*K4+G*K5+H*K6+J*K7+K*K8+L*K9。执行类似的操作,以生成输出元素J'和K'。
图1示出了无填充2D卷积操作,这意味着输出元素F’、G’、J’、K’仅针对那些输入位置F、G、J、K生成,在这些输入位置处,可以将内核集中在该输入位置,而内核矩阵的任何内核元素都不延伸到输入矩阵的边界之外。例如,输入元素A、B、C、D、E、H、I、L、N、M、O、P在输出矩阵中不具有对应的元素,因为这将需要内核的一部分延伸到输入矩阵的边界之外。因此,对于无填充2D卷积,输出通常可能小于输入。
如图2所示,还可以通过针对输入矩阵边界之外的元素位置提供填充值(PV)(这将需要应用以输入矩阵边缘附近的位置为中心的内核)来执行填充2D卷积,其中输出矩阵以与输入矩阵相同的维度生成。在图2的示例中,输入矩阵和内核可能与图1中的相同,但这次输出矩阵也是4×4矩阵,其除了以与图1相同的方式计算的元素F’、G’、J’和K’之外,还包括周围元素A'至P’,以使输出矩阵与输入矩阵位于同一侧。
对于当内核以这些外部元素位置中的一个外部元素位置为中心时的计算,将位于输入矩阵之外的内核元素与填充值(PV)相乘。例如,对于用于生成输出元素A'的计算,这将要求中心内核位置K5位于输入矩阵的元素A上方,并且因此当输入矩阵中对应于内核元素K5、K6、K8、K9的位置A、B、E、F存在有效的输入值时,在生成乘积之和时,将其他内核元素K1、K2、K3、K4、K7与填充值相乘,以生成输出矩阵A’的新值。
类似地,对于输出矩阵边界周围的其他元素,填充值将位于相对于内核的不同位置,这取决于该内核重叠的输入矩阵的边缘。例如,对于输出位置L’,内核K3、K6、K9的右侧列将需要填充值,因为这些位置是当内核以位置L为中心时将延伸到输入矩阵之外的位置。类似地,对于输出元素N’,内核位置K5将以位置N为中心,因此这意味着内核位置K7、K8、K9的底行延伸到输入矩阵之外,因此需要填充。
在一个示例中,填充值可简单地为零。然而,一些2D卷积操作可能需要其他类型的填充值。例如,在一些情况下,可使用量化方案,其中在生成每个矩阵元素的存储数值时,将偏移应用于矩阵的真值,使得“零”实际上可使用非零数值表示。在这种情况下,填充值可以是表示零点的非零值。可基于输入矩阵内的其他元素的平均来设置填充值。用于设置填充值的精确规则可能取决于正在执行的特定应用。因此,支持在多个替代类型的填充值之间进行选择的能力(例如,基于控制寄存器和/或矩阵处理指令指定的参数)可能是有用的。
虽然图1和图2的示例中未示出,但也可以进行跨步卷积,其中当以给定输入元素为中心时,将内核值应用于与中心输入元素隔开恒定步幅间隔的相邻输入元素(与图1和2中步幅为1的情况相反,其他示例可具有2或更大的步幅)。
无填充2D卷积和填充2D卷积操作可用于一系列处理应用。例如,2D卷积可用于将滤波器应用于图像,例如用于模糊、锐化、边缘检测等。所应用的内核可基于所需滤波器的类型来选择,并且可具有将带来某些特征(诸如边缘)的内核元素的特定值。有效地,内核可在每个连续的图像像素上滑动,并应用操作以使用由内核定义的关系基于该像素和周围像素的数量为输出像素生成新值。
另一种类型的处理(其可包括2D卷积)是在机器学习领域,例如在实现神经网络中。例如,可使用在2D卷积操作中应用于图像数据的一组内核来实现经训练以检测图像数据内的特征的神经网络。更一般地,表示要处理的一些数据的特征图可用内核处理,以便对数据进行推断。
如图3所示,对于机器学习算法,为了能够从一组数据中导出多个不同的推断,支持多通道输入和输出数据以及多组内核权重可能是有用的。每个输入/输出通道可包括元素的二维矩阵。例如,输入通道的数量可以是IC,并且每个输入通道的高度和宽度可以是IH(输入高度)和IW(输入宽度)。输出通道的数量是OC,并且每个输出通道的高度和宽度可以是OH(输出高度)和OW(输出宽度)。提供了OC组内核权重,其中OC与输出通道的数量匹配。每组内核权重包括KH*KW*IC权重(其中KH和KW是内核高度KH和内核宽度KW,并且IC是输入通道的数量)。通过执行图1或图2所示类型的基本2D卷积操作的IC实例来生成给定的输出通道,每个实例将单个输入通道IC与对应的KH*KW核权重子集组合,并将每个输入通道的基本2D卷积的结果累积在一起以生成对应的输出通道(或通过执行给出相同结果的其他操作序列,如稍后将描述的)。其他输出通道使用类似的操作计算,但对于每个输出通道使用一组不同的KH*KW*IC内核权重。OH和OW是否等于或小于输入高度IH和输入宽度IW可能取决于是否正在执行填充或无填充2D卷积。
在该示例中,输出通道OC的数量等于输入通道IC的数量,但这不是必需的。其他示例可能具有不同数量的IC和OC。此外,图3所示的2D卷积可能仅仅是2D卷积树中的一个步骤,因此输入通道本身可形成为早期卷积的输出,并且图3中的输出通道本身可通过另外的卷积来处理。
当2D卷积要应用于多个输入通道时,则对于用于将输入通道的数据存储在存储器中的布局可能存在许多选择。图4示出了一种可能的存储器布局,称为NHWC存储器布局,其中C是指输入通道,W是指宽度,H是指高度,并且N是指由独立的IC输入通道组表示的不同对象的数量。NHWC符号表示当从存储器中的数据结构内的连续地址读取数据时,输入通道标识变量C是变化最快的变量,而对象标识变量N是变化最慢的变量。因此,在NHWC布局中,当遍历存储器中数据结构内连续增加的地址时,首先将每个IC输入通道的给定x-y矩阵位置的输入矩阵元素存储在存储器内的连续地址块中,然后布局与第一矩阵元素在同一行内的下一位置的每个输入通道内的元素,对于每个其他x-y位置,以此类推。也就是说,元素首先循环通过一个元素位置的所有输入通道,然后移动到同一行中的下一个元素(因为宽度W是通道ID之后变化最快的变量),然后一旦已经为所有通道存储了同一行中的所有位置(具有相同y矩阵坐标的元素),则存储的下一元素将用于下一最高y位置的下一行。
因此,当参考图3时,图4所示的存储器布局的第一行可对应于交叉阴影框内的元素,这些元素对应于每个输入通道内的位置A,然后下一行可对应于以虚线阴影示出的元素,这些元素对应于每个输入通道内的位置B,对于该第一行内的其余元素C、D,依此类推。一旦到达行的末尾,则从每个输入通道内的位置E处的元素开始,对下一行执行同样的操作。在使用一组单独的IC输入通道分别表示要处理的多个对象(例如,多个单独的图像)的情况下,一个对象(N=0)的所有数据在下一个对象的数据(N=1)之前存储在存储器中。
应当理解,虽然为了便于理解,图4示出了地址空间的一个“行”中的所有通道中的给定输入矩阵位置的元素,然后移动到图4的2D表示的下一“行”,以将元素存储在下一输入位置B,但实际上,地址空间仅仅是单调递增的地址序列,并且不存在如图4所示的地址的2D布置。图4所示的2D表示是为了简洁而使用的图形表示,以将信息适配到页面上。然而,存储在存储器中的信息表示矩阵的多个通道,其中这些矩阵是在逻辑上以行和列的形式布置的二维结构。
图4所示的NHWC存储器布局是一种可能的布局,但其他具体实施可将矩阵结构存储在不同的布局中。例如,如果使用NCHW存储器布局,则布局可提供通道0的所有X/Y值,然后提供通道1的所有X/Y值,依此类推。
不管为给定应用选择的特定存储器布局如何,2D卷积方法的一个问题是,与用于在输出矩阵内生成给定输出元素的内核元素组合所需的元素可能不在存储器地址空间内的连续存储器地址内。例如,为了计算图2的填充2D卷积中的左上输出位置A',这可能需要从存储器中获得位置A、B、E、F的输入元素,但如图4所示,当存储在NHWC存储器布局中时,这些元素不在地址空间的连续部分内,因为它们被输入位置C和D的元素分隔开。每个内核位置可能需要从存储器中定义输入矩阵的数据结构中提取元素的不同定制子集。
图5示出了一种用于处理此问题的方法,称为im2row。在im2row中,在执行2D卷积操作本身之前,首先重新布置表示输入通道的输入矩阵结构,以生成存储在地址空间部分中与原始输入数据结构不同的多个行2数据,其中每个行2对应于将由内核矩阵针对输出矩阵中的特定输出元素位置进行操作的数据。例如,对于输出位置A',可将相应输入通道的所需元素A、B、E、F聚集在一起,并与适当的填充组合,使得它们处于对应于内核元素K1至K9的顺序的正确位置。这意味着后续矩阵处理操作可简单地将多个内核通道的每个内核元素与行2内匹配位置处的对应数据相乘,并将所得乘积相加以生成该输出位置的数据。需注意,给定行2具有彼此相邻定位的输入通道IC中的每个输入通道的相应输入值,并且这些输入值将由不同内核通道内的相同内核位置的相应内核值来操作。
类似地,对于输出矩阵内的每个其他输出位置,通过将生成该输出位置所需的相应输入元素聚集在一起来生成不同的行2。因此,这需要生成附加数据的OH*OW行2,其中每行包括KH*KW*IC元素。虽然这可能在从存储在存储器中的数据中提取元素的相应子组并将它们复制到存储器中的其他位置以生成行时生成大量开销,但这可极大地简化后续的2D卷积操作,该操作然后可简单地将内核值直接应用于矩阵处理操作中的连续存储器块以生成对应的输出矩阵。
然而,这种方法具有若干问题。一个问题是,在给定数据处理系统中实现的矩阵处理操作的性能日益提高。随着矩阵处理性能的提高,阿姆达尔定律意味着与矩阵处理操作本身一起执行的其他操作对整体性能的影响越来越重要。即使矩阵处理操作本身可继续改善性能,但如果其他操作(诸如图5所示的im2row操作)不能显示出与矩阵处理操作类似的性能改善(因为im2row操作受存储器带宽限制),则无法实现矩阵处理中性能改善的全部好处。因此,对于某些处理应用,执行如图5所示的im2row的开销日益不可接受。另一个问题是,这些重新映射操作消耗大量存储器。例如,需注意,在图5的示例中,位置F的输入矩阵元素显示在多个行2中。因此,这也浪费了存储器地址空间,因为输入值的复制仅仅是为了提供输入矩阵相对于内核矩阵的适当相对定位。例如,对于某些机器学习算法,im2row可能需要原始输入数据结构8-9倍的存储器。
另一种类型的卷积操作是1×1卷积操作,其类似于上述2D卷积,但其内核是1×1矩阵而不是具有2维范围。对于1×1内核,1×1卷积操作的结果只是输出矩阵,其中每个元素对应于输入矩阵的相应元素乘以相同内核元素的结果。如图6所示,通过使用一系列1×1卷积,可以通过将多个1×1卷积的结果与给定1×1卷积操作的结果与给定1×1卷积操作的结果相加到先前1×1卷积操作结果的位置处的相对移位进行累加来生成与2D卷积相同的结果。
在上文所示的2D卷积的示例中,对于输出矩阵的每个位置,已分别示出乘积之和的计算,每组乘积用于不同的输入位置/内核位置对,但输出位置相同。
然而,还可将乘法划分为不同的分组,将与单个内核位置相关联的乘法集视为一个组,其中该组乘法为每个输出位置生成要求和的乘积中的一个乘积。考虑图2的示例,即,当考虑单个内核位置(例如,位置K1)时,该内核值K1当生成输出值A’时需要乘以填充值,当生成输入值L’时需要乘以输入值G,以及当生成输出元素N’时需要乘以输入值I。因此,图6的顶部示出了要乘以K1以形成在输出矩阵中对应输出元素A’至P’中的每个对应输出元素的和中使用的一个部分积的输入元素之间的关系。
类似地,对于每个其他内核位置K2-K9,可确定哪个输入元素(或填充值)应与该内核元素相乘,以生成针对输出位置中的每个输出位置求和的乘积中的另一乘积。需注意,给定的输入矩阵元素对每个内核位置的输出矩阵的不同元素都起作用。例如,当考虑输入元素F时,这将在与内核元素K1相乘时对输出元素K'起作用,在与内核元素K2相乘时对输出元素J'起作用,在与内核元素K3相乘时对输出元素I'起作用,以此类推,直到F与内核元素K9相乘时对输出元素A’起作用。
因此,在相应内核元素位置之间,在输出矩阵中的给定输出元素的位置与对该特定内核元素位置的给定输出元素起作用的对应输入元素的位置之间存在相对移位。例如,有效输入矩阵在K1乘法和K2乘法之间的移位是左移一列位置。
这意味着,通过执行一系列1×1卷积并将每个1×1卷积的结果累加到表示输出矩阵的运行总数的累加器矩阵中,结果可等同于在大于1×1的内核大小上执行的2D卷积操作的结果。例如,所示的K2乘法中的每个K2乘法的结果可被加到由K1乘法产生的累加器矩阵的对应元素(例如,K2*B的结果加到基于K1 1×1卷积中的K1*A设置的位置F'处的累加器矩阵元素),并且K3乘法中的每个K3乘法的结果然后可被加到由K1乘法和K2乘法产生的累加器矩阵的对应元素(K3*C的结果被添加到输出元素F'的累加值,使得F'现在等于K1*A+K2*B+K3*C)。这对于每个连续的核位置都是连续的,因此在第九次1×1卷积操作结束时,输出矩阵具有与使用3×3核矩阵执行2D卷积操作相同的结果。可以理解,不必按照图6所示的顺序K1、K2、K3、…、K9计算1×1卷积,并且可使用任何顺序的内核点。然而,如果如下所述使用位置移位示例,则连续计算相邻内核位置可有助于改善性能,因为用于计算连续1×1卷积的给定输出位置的输入位置之间的移位将更小,因此当使用如下文关于图8所述的可变位置移位技术时,这可促进跨多个1×1卷积更频繁地重用从存储器加载的数据。
如图7所示,使用图6所示的拆分1×1卷积方法的一个优点在于,这意味着给定内核位置Kn所需的乘法可应用于从存储器块加载的数据,该存储器块或者是单个连续的存储器块,或者是以规则步幅间隔分离的若干这样的连续块,这意味着1×1卷积操作可直接应用于与存储器中的数据结构类似格式的数据,并且不需要图5所示的性能密集型和存储器密集型im2row技术。
图7示出了如何扩展1×1卷积以处理类似于先前示例的多个输入和输出通道。图7示出了用于计算对应于x-y维中的单个内核位置(诸如图7的示例中的内核位置K1)的乘积集的矩阵乘法操作。也就是说,图7仅示出了针对图6顶部的乘积计算,但扩展为处理多个输入/输出通道。应当理解,然后可针对每个其他内核位置执行类似的操作。
图7示出了用于实现2D卷积操作的一部分的示例,其中在输入通道之间存在交叉以生成每个输出通道(即,应用于每对内核/输入通道的2D卷积的结果将相加以给出用于给定输出通道的矩阵)。这意味着,对于对应于给定内核点K1的1×1卷积,给定输出通道中的给定位置F’处的值对应于乘积之和∑K1i*Ai,其中i在所有输入通道上递增,并且K1i是每个内核通道内的对应位置处的内核值,并且Ai是每个输入通道内的对应位置处的输入元素。可针对多组不同的内核通道并行执行对应的操作(以允许并行检测多个特征),以生成多个输出通道。
因此,如图7所示,当在多个输入/输出通道上评估时,给定内核位置K1的1×1卷积可扩展为矩阵乘法操作,该矩阵乘法操作将Z×IC输入矩阵10(其为IC输入通道中的每个IC输入通道提供一组Z输入元素值A至K)与IC×OC内核矩阵11(其为对应于相应输出通道的OC组不同内核通道中的每个内核通道内的每个IC输入通道提供内核位置K1的内核值组)相乘。矩阵相乘的结果是Z×OC输出矩阵12,该输出矩阵为每个输出通道OC提供一组Z个输出元素F’至P’。需注意,输入/输出矩阵10、12的Z维度将根据正在处理的内核位置Kn而变化,因为对于K1,所需的非填充元素位置的范围从A延伸到K,但对于不同的元素位置(例如,K2),非填充元素的范围可以更大(例如,从A延伸至L)。此外,如果使用非零填充值,则输入/输出矩阵中可能需要附加的矩阵行来适应非零填充。
输入矩阵10可直接从如图4所示布局的数据结构从存储器加载,因为输入矩阵10的每一行包括一组元素,用于输入矩阵内跨IC输入通道中的每个IC输入通道的单个x-y位置。例如,输入矩阵10的顶行为每个不同的输入通道提供“A”元素(例如,x=0,y=0),然后输入矩阵10的下一行提供所有“B”元素(x=0,y=1),以此类推。因此,如果数据以如图4所示的NHWC布局而布局在存储器中,则此输入矩阵10仅完全对应于存储在存储器中的数据格式,因此可作为单个连续的存储器块加载。另选地,如果处理硬件在一次操作中可以处理的输入通道数IC小于存储器中存储的矩阵结构中使用的实际通道数Cmax,则输入矩阵10可对应于以恒定步幅间隔分离的多个不连续块,与以如图2所示的方式执行2D卷积的情况相比,从存储器加载2D卷积仍然要简单得多,这将需要许多不规则的存储器访问模式,如im2row示例所示。因此,1×1卷积方法意味着在执行用于计算1×1卷积的乘法之前不需要对存储在存储器中的矩阵结构进行重新映射。
类似地,输出矩阵12具有与输入矩阵10对应的布局,因此一旦2D卷积的所有1×1卷积都已累积在一起,结果就可直接写回到如图4所示布局的存储器中的矩阵数据结构。
如图6的顶部所示,当考虑左上的内核权重K1时,输入位置和输出位置之间的相对移位使得输入矩阵的行A应与内核权重K1相乘,以生成输出矩阵的行F的输出,输入矩阵的行B对输出矩阵的行G起作用,以此类推。这通常适用于大多数行,因为对于K1权重示例,在输入矩阵和输出矩阵之间存在向下5行的恒定位置移位。然而,输入矩阵存在某些行D、H,将这些行乘以内核权重并将结果累加到输出矩阵的对应移位位置I’、M’将得出错误的结果,因为如图6所示,这意味着输出矩阵最左侧的元素将基于使用输入矩阵右侧边缘上的元素的乘法进行更新,这对于2D卷积是不正确的。这个问题可以称为“绕回”问题。虽然可通过将图7所示的矩阵10和11之间的矩阵乘法拆分为多个单独的操作来避免绕回问题,其中每个操作对应于输入矩阵10的块,输入矩阵的块仅包括行A-C(或E-G或I-K)的块,其中所有那些行都需要对输出矩阵起作用,但这将需要执行附加的指令并且将降低性能。
因此,为了允许在较大数量的行上应用1×1卷积,即使存在遇到绕回问题的所选择行,支持掩蔽操作也可能是有用的,该掩蔽操作允许在生成输出时跳过输入的某些行。这由在输入行D、H和输出行I'、M'之间的路径上标记的“X”示出。掩蔽操作可通过掩蔽状态数据来控制,该掩蔽状态数据定义掩蔽行的位置(或者如果矩阵被布置为具有在同一列内延伸的给定输入通道位置的输入元素,则定义掩蔽列的位置)。下文描述对掩蔽状态数据进行编码的示例。掩蔽操作可在将数据从存储器加载到寄存器中时实现(使得代替从存储器加载实际数据元素,而是将掩蔽值加载到操作数存储器的对应部分中,用于存储用于形成输入通道矩阵10的信息)。另选地,可在执行矩阵处理操作本身时执行掩蔽操作,使得当矩阵处理电路读取操作数进行处理时,应用谓词来掩蔽掉读取的元素行,并确保矩阵处理电路将这些元素视为表示掩蔽值,而不是存储在操作数存储器中的实际值。如果使用非零值表示零点,则掩蔽值可以为零,或者可以为非零。无论哪种方式,这都意味着可以防止绕回问题导致错误,并且这使得能够在更少的指令中执行1×1卷积,因为1×1卷积可应用于比不遇到绕回问题的连续行块更大的矩阵大小。
对于其他内核权重位置K2-K9,可针对K1执行与图7所示类似的矩阵乘法操作,并将结果累加在一起。
图8示出了另外的观察结果,该观察结果可用于通过减少从存储器中的矩阵数据结构加载数据的次数来提高性能,以便对一系列内核权重位置执行1×1卷积。从图6可以观察到,当评估同一行内不同内核位置的相应的1×1卷积时,这些内核位置中的每个内核位置所需的输入矩阵非常类似。例如,图8分别示出了左中内核位置K4、右中内核位置K5和右中内核位置K6的输入矩阵10。对于中心内核权重K5,输入矩阵将与输出矩阵完全对准,因为内核权重K5当生成输出A时乘以位置A,当生成输出B时乘以位置B,对于输入/输出矩阵10、12中的其他位置中的每个其他位置,以此类推。
对于左中内核位置K4,当生成输出元素B时,K4需要与输入矩阵的元素A相乘(因为当内核K5的中心位置在元素B上时,K4将与A相乘)。类似地,对于输入/输出矩阵10、12内的其他位置中的每个其他位置,在输入元素和输出元素之间存在1个位置移位。
类似地,对于右中内核位置,K6需要与输入元素B相乘以生成输出元素A,与输入元素C相乘以生成输出元素B,依此类推。
如图8所示,对于左中和右中位置,由于关于图7所描述的绕回问题,存在一些行需要跳过,并且跳过的行的特定位置根据内核权重位置而变化(例如,对于K4,跳过的输入行是行D、H、L,但对于K6,跳过的输入行是行E、I、M,并且对于K5,不存在跳过的输入行)。
然而,可以看出,一般来讲,对于三个内核权重位置K4、K5、K6中的每个内核权重位置,输入矩阵10的行A-P的输入数据基本上是相同的,不同的是相对于中心位置K5,对于左中位置K4,输入矩阵10相对于输出向下移位一行位置,使得输入行A用于生成输出行B,而不是如在中心位置K5中那样生成行A。类似地,对于右中位置,输入矩阵10相对于输出矩阵12向上移位一行,使得输入行B馈送到输出行A。
因此,可以观察到,通过提供执行输入相对于输出的可变位置移位的电路,使得可基于输入矩阵的特定行来调整输出矩阵的哪一行被更新,并且支持可被选择的多个不同的替代移位量,这使得从存储器加载的矩阵数据块能够被重新用于多个不同内核位置的1×1卷积。这意味着与加载输入行A-P的加载相关的存储器带宽可在多个不同的矩阵处理操作中分摊,这大大改善了性能。如果使用此位置移位,则由于用于处理绕回问题的掩蔽行的位置因内核位置而异,因此在从寄存器或矩阵转置框读取先前加载的操作数时需要进行掩蔽。
支持矩阵处理的数据处理装置
图9示意性地示出了数据处理装置20的示例。数据处理装置具有包括多个流水线阶段的处理流水线24。在该示例中,该流水线包括:提取级26,该提取级用于从指令高速缓存28中提取指令;解码级30,该解码级用于对所提取的程序指令进行解码,以生成要由流水线的其余级处理的微操作;发出级32,该发出级用于检查微操作所需的操作数在寄存器文件34中是否可用,并且一旦给定微操作所需的操作数可用就发出供执行的微操作;执行级36,该执行级用于通过处理从寄存器文件34读取的操作数以生成结果值来执行对应于微操作的数据处理操作;以及写回级38,该写回级用于将处理的结果写回到寄存器文件34。应当理解,这仅仅是可能的流水线架构的一个示例,并且其他系统可具有附加阶段或不同的阶段配置。例如,在乱序处理器中,可以包括寄存器重命名级,该寄存器重命名级用于将由程序指令或微操作指定的架构寄存器映射到标识寄存器文件34中的物理寄存器的物理寄存器指定符。
执行级36包括用于执行不同类别的处理操作的多个处理单元。例如,执行单元可包括标量算术/逻辑单元(ALU)40,该标量ALU用于对从寄存器34读取的标量操作数执行算术或逻辑操作;浮点单元42,该浮点单元用于对浮点值进行操作;分支单元44,该分支单元用于评估分支操作的结果并且相应地调整表示当前执行点的程序计数器;矩阵处理单元46,该矩阵处理单元用于矩阵处理(其将在下面更详细地讨论);以及加载/存储单元48,该加载/存储单元用于执行加载/存储操作以访问存储器系统28、50、52、54中的数据。
在该示例中,存储器系统包括一级数据高速缓存50、一级指令高速缓存28、共享二级高速缓存52和主系统存储器54。应当理解,这仅为可能的内存分级结构的一个示例,并且还可以提供其他高速缓存布置方式。在执行阶段36中示出的处理单元40到48的具体类型仅为一个示例,并且其他具体实施可具有一组不同的处理单元或可包括同一类型的处理单元的多个实例,使得可以并行处理同一类型的多个微操作。应当理解,图1仅仅是可能的处理器流水线架构的一些组件的简化表示,并且处理器可包括其他许多为简洁起见未示出的元件。
在一些具体实施中,数据处理装置20可以是多处理器装置,其包括多个CPU(中央处理单元或处理器内核)60,每个CPU具有与针对图9的CPU 60中的一个CPU所示的处理流水线类似的处理流水线24。装置20还可包括至少一个图形处理单元(GPU)62和/或其他主装置64,这些主装置可经由用于访问存储器54的互连66彼此通信并与CPU通信。
支持矩阵处理操作的一种方法可以是将给定矩阵处理操作的各个乘法分解为单独的整数或向量指令,这些指令可在给定CPU 60的处理流水线24上处理。然而,这可能相对较慢。
加速矩阵处理的另一种方法可以是,作为连接到互连66的装置64中的一个装置,提供具有专用硬件的硬件加速器,该专用硬件被设计用于处理矩阵操作。为了与这样的硬件加速器交互,CPU24将使用加载/存储单元48来执行加载/存储指令,以向硬件加速器写入配置数据,该配置数据定义要由硬件加速器从存储器读取的矩阵操作数,并定义要应用于操作数的处理操作。然后,CPU可使用指定映射到硬件加速器内的寄存器的地址的加载指令从硬件加速器读回矩阵处理的结果。虽然这种方法可能比在流水线内使用整数操作更快,但仍然可能存在与使用加载/存储机制在通用处理器60和硬件加速器64之间传输信息相关联的开销,当在同一处理系统上运行的不同虚拟机需要共享对硬件加速器的访问时,硬件加速器方法也可能会带来挑战。因此,这种方法在具有多个虚拟机的虚拟化具体实施中可能无法很好地缩放。
因此,如图9所示,可以在给定CPU 60的常规处理流水线24内提供矩阵处理电路46,该矩阵处理电路可被控制以响应于由流水线的解码级30解码的矩阵算术程序指令来执行矩阵处理(类似于使用ALU 40或浮点单元42控制常规整数或浮点算术操作)。这避免了在CPU 60和硬件加速器之间来回传输数据的需要,并且使得允许多个不同的虚拟机执行矩阵操作变得更加简单。
虽然图9示出了具有若干CPU 60的多处理器装置20,但这不是必需的,矩阵处理电路46也可在单核系统中实现。
图10更详细地示出了矩阵处理电路46的一部分和用于支持矩阵处理的相关寄存器。矩阵处理电路46可包括操作数存储电路,该操作数存储电路包括输入操作数寄存器组70、输出矩阵寄存器组72和矩阵转置电路74(以下称为矩阵转置框)。此外,矩阵处理电路包括:矩阵加载电路80,该矩阵加载电路用于处理数据从存储器中的矩阵结构到操作数存储电路70、74中的加载;操作数移动电路82,该操作数移动电路用于在矩阵转置框74和输入操作数寄存器70之间移动操作数数据;和矩阵处理逻辑电路84,该矩阵处理逻辑电路用于对存储在输入操作数寄存器70中的输入操作数本身执行矩阵处理操作,以生成存储在输出矩阵寄存器72中的二维结果矩阵。
矩阵转置框74包括多个存储元件88,每个存储元件用于存储给定操作数(输入)矩阵的不同矩阵元素。存储元件88逻辑上以行和列的形式布置,使得它们可作为行组90来访问,其中对应于输入矩阵的同一行的所有存储元件88是可读/可写的,或者作为列组92来访问,其中对应于输入矩阵的同一列的所有存储元件88是可读/可写的。集成电路上的存储元件88的物理布置不需要遵循行和列形式的逻辑布置,并且可采取任何物理布置。替代地,通过提供读/写端口和多路复用电路来提供以行组90和列组92的形式读取或写入元素88的能力,使得可读取对应于给定行或给定列的相关元素,而不管它们在芯片中的物理位置如何。
这意味着当从存储器中的矩阵数据结构加载数据时,矩阵加载电路80可选择(响应于行/列方向选择参数89)为矩阵转置框74的单独行组90还是单独列组92加载来自存储器中的基于寻址信息94选择的矩阵结构的一部分的数据。由指令解码器30解码以控制矩阵加载电路80的加载指令98可指定行/列ID 99,该行/列标识要加载哪个特定行或列。该指令可将行/列ID99直接指定为立即参数,或者通过指定包含行/列ID99的寄存器来间接指定。
行/列选择参数89可使用指令编码内的字段在加载指令98中显式编码,该字段选择矩阵转置框74的行组90还是列组92加载有来自存储器的数据。另选地,行/列方向选择参数可被隐式编码。例如,可能存在存储在控制寄存器中的控制参数,该控制参数指定矩阵加载指令98当前应该选择应该加载矩阵转置框74的行还是应该加载列。当执行行/列方向切换指令时,控制寄存器中的控制参数可切换状态。这避免了每个矩阵加载指令指定明确的行/列方向选择参数的需要。此外,可以使用在指令编码中指定的参数和存储在控制寄存器中的参数,其中指令编码中的控制寄存器位和行/列选择位的组合选择使用行/列方向中的哪个行/列方向。例如,控制寄存器位可指示是否选择行/列,但指令编码中的位可选择控制寄存器中的位是否反转,例如:
当然,也替代地使用其他编码,这仅是一个示例。
此外,加载电路80响应于掩蔽状态信息96、97来选择是否用掩蔽值代替从存储器加载的值来替换加载到矩阵转置框74中的值。在该示例中,掩蔽状态信息包括第一掩蔽状态信号96和第二掩蔽状态信号97。
第一掩蔽状态信息96用于控制某些行/列位置的掩蔽,以防止矩阵转置框74的对应行/列组基于存储器的对应值而被更新。对于矩阵转置框74中的每个行/列位置,第一掩蔽状态信息96标识该行/列位置是掩蔽的行/列位置还是未掩蔽的行/列位置。也就是说,如果行/列选择参数89指示元素将以行的形式写入,则第一掩蔽状态信息的掩蔽指示对应于不同的行位置。如果行/列选择参数89指示元素将以列的形式写入矩阵转置框74,则第一掩蔽状态信息的掩蔽指示对应于不同的列位置。
如果第一掩蔽状态信息96指定要加载的目标行/列是未掩蔽的行/列,则第二掩蔽状态信息98可用于标识目标行/列中的哪些单独元素位置被掩蔽,并且矩阵加载电路80从存储在存储器中的矩阵结构中获得对应的数据,并将目标行/列的未掩蔽的元素写入矩阵转置框74的所选择的行/列组的对应元素88中(而将所选择的行/列组中的任何掩蔽的元素设置为掩蔽值)。因此,第二掩蔽状态信息98可提供一组掩蔽指示,其中每个掩蔽指示对应于在与第一掩蔽状态信息的掩蔽指示相关联的位置相反的维度上延伸的不同位置。也就是说,如果行/列选择参数89指示元素将以行的形式写入,则第二掩蔽状态信息的掩蔽指示对应于不同的列位置。如果行/列选择参数89指示元素将以列的形式写入矩阵转置框74,则第二掩蔽状态信息的掩蔽指示对应于不同的行位置。
第一掩蔽状态信息96和第二掩蔽状态信息97一起表示二维掩蔽状态信息,因为它们指示在要加载到矩阵转置框74中的矩阵的二维上的掩蔽元素的位置。然而,每个单独的指令仅使用第一掩蔽状态信息中对应于单个目标行/列的部分(第一掩蔽状态信息中与其他行/列相关的部分被忽略)。然而,第一掩蔽状态信息96和第二掩蔽状态信息97可一起定义整个2D矩阵转置框上的掩蔽位置,使得不必在加载一个行/列与下一行/列之间改变掩蔽状态数据。
另一方面,如果所选择的行/列位置由第一掩蔽状态信息96指示为掩蔽的行/列位置,则不是提供从存储器加载的数据,而是将掩蔽值写入所选择的行/列中的每个矩阵元素88。这里,所选择的行/列中的每个元素可共享第一掩蔽状态数据96的相同项,或者将所选择的行/列中的所有元素标识为掩蔽的,或者将所选择的行/列中的所有矩阵元素88标识为未掩蔽的。当加载指令指定掩蔽的行/列时;然后,响应于掩蔽状态信息96,矩阵加载电路80替代地将掩蔽值写入掩蔽的行/列内的元素中的每个元素。
不管掩蔽值是由于基于第一掩蔽状态数据96对整行的掩蔽还是基于第二掩蔽状态数据97对单个元素的掩蔽而被提供给矩阵转置框74的特定元素88,掩蔽值都可以是诸如零的预定值,或者可以是基于掩蔽选择信息可选择的多个替代掩蔽值中的一个替代掩蔽值,这些掩蔽选择值可存储在寄存器中或者存储在加载指令明确指定的参数内。
寻址信息94可存储在CPU的通用寄存器34中,这些通用寄存器也用于一般整数操作数,或者在一些示例中可存储在一些专用矩阵寻址信息寄存器中,这些专用矩阵寻址寄存器存储特定于标识要从存储器加载的矩阵结构的一部分的信息。
图11至图13示出了可对掩蔽状态信息和寻址信息94进行编码的方式的一些示例。在图11的示例中,寻址信息94在通用寄存器34中指定,也用于整数操作数。在这种情况下,在执行矩阵加载指令98之前,较早的指令可能需要确保所引用的通用寄存器包括用于表示矩阵的所需行或列的地址的适当地址操作数,并且在执行针对输入矩阵的不同行的连续加载指令98之间,则需要更新这些地址操作数以指向下一行或列。
同样在图11的示例中,第一掩蔽状态信息(mask1)96表示为位图,该位图包括多个位标志指示符100,每个位标志指示剂对应于矩阵转置框74内的给定行/列位置。使用由加载指令98指定的行/列号99来选择读取掩蔽位图96的位标志指示符100中的哪个位标志指示符,并且取决于读取的位标志100的值,这控制是否要掩蔽对应的行(例如,位标志1可表示未掩蔽的行/列,并且位标志0可表示掩蔽的行或列,反之亦然)。
类似地,第二掩蔽状态信息(mask2)97表示为位图,该位图包括多个位标志指示符101,每个位标志指示符对应于列/行位置(与mask1位图96中的每个位标志指示符100指示的位置相反的维度),使得mask2指示具有由加载指令98指定的行/列号99的目标行/列内的各个掩蔽元素的位置,如上所述。
存储第一掩蔽状态信息96/第二掩蔽状态信息97的寄存器可以是专用寄存器,这些专用寄存器用于存储用于掩蔽矩阵操作数/处理的掩蔽状态信息(并且不用于其他目的),或者可具有双重功,使得在处理除矩阵处理相关指令之外的指令时,相同的寄存器也可用于其他信息。例如,可从谓词寄存器读取掩蔽状态信息96、97,该谓词寄存器还可用于存储向量谓词,当执行向量指令时,该向量谓词控制向量处理通道的掩蔽。
图12示出了其中第一掩蔽状态信息96/第二掩蔽状态信息97再次表示为与图11中相同的位图的另一示例。然而,在这种情况下,矩阵处理电路可访问一组矩阵寻址寄存器102(该组矩阵寻址寄存器至少指定基地址104和步幅值106),并且任选地指定行内/列内偏移(子部分选择信息)108。利用这种方法,可在执行用于加载给定输入矩阵的所有行或列的一组加载之前设置寻址信息寄存器102,并且不必在同一输入矩阵中的不同行或列的各个加载之间改变寻址信息102,因为矩阵加载电路80能够基于寻址信息102和由加载指令98指定的行/列选择号99来计算单个行/列的地址。参考图4所示的存储器布局进行比较,基地址104可被设置为指向与要处理的矩阵的一部分相对应的存储器区域的开始,并且步幅值106可被设置为指示标记矩阵数据结构的一行的开始的地址与标记下一行(或者如果正在使用列优先布局,则是列)的开始的地址之间的偏移。行内/列内偏移108可用于选择存储在存储器中的整个矩阵结构的一个行内的单个部分,这在存储器中整个矩阵结构大于转置框74和矩阵处理逻辑84内硬件支持的最大行/列长度的情况下是有用的。这允许将存储器中的大数据结构的处理分解为更小的块,这些块可由硬件多次处理。因此,行内/列内偏移可选择存储在存储器中的“行”内的单个部分。支持行内/列内偏移值108不是必要的,因为替代方案是在处理给定行的一个块和处理下一块之间,可更新基地址104以指向下一块的位置,而不是更新行内/列内偏移值108。此外,偏移值108可替代地提供在通用寄存器内,该通用寄存器被加载指令引用为源寄存器。
利用这种方法,当处理单个加载指令98时,矩阵加载电路80可通过将基地址与步幅值106和由指令指定的行/列号99的乘积相加(如果需要的话,任选地偏移行内/列偏移值108)来计算要加载到矩阵转置框74的所选择的行或列中的数据部分的地址。
图13示出了表示寻址信息94和掩蔽状态信息96、97的另一示例。在该示例中,寻址信息94再次包括基地址104,但这次寻址信息还包括偏移数据结构110,该偏移数据结构存储在存储器中由偏移结构基地址112标识的位置处。这里,存储在存储器中的偏移数据结构110既用作寻址信息94的一部分,也用作第一掩蔽状态信息96。第二掩蔽状态信息97仍可作为单独的掩蔽寄存器“mask2”提供,类似于图11和图12的示例。
偏移数据结构110定义偏移值的阵列,其中每个偏移114对应于可由单个矩阵加载指令98选择的特定行/列号。当加载指令指定了给定的行/列号(例如,列2,如图10中所示的示例中所示)时,则将选择该列的对应偏移值114-2,并且可通过将该所选择的偏移值与存储在基地址寄存器104中的基地址相加来导出存储在存储器中的矩阵结构中的对应行/列数据的地址。在大多数情况下,如果所选择的行/列被指示为未掩蔽的行或列,则加载将正常进行。
然而,某些偏移值被预留,使得它们不能用于有效偏移,而是指示掩蔽的行/列的位置。例如,预留的偏移值可以是-1(即具有最高有效位1且所有其他位设置为0以补充表示的二进制值)。因此,当计算单个加载指令的地址时,如果确定所选择的行/列号的所选择的偏移值114-2具有预留值,则这被解释为掩蔽的行或列位置,并且因此代替从存储在存储器中的矩阵数据结构的部分执行实际加载,而是为矩阵转置框74的相关行或列组90、92填充该行中具有掩蔽值(例如,零)的元素88中的每个元素。
因此,利用这种方法,定义存储器中输入矩阵的相应行或列将从其加载到矩阵转置框中的位置的偏移也用作掩蔽状态信息,这避免了对用于掩蔽状态值的单独寄存器的需要。
使用偏移值114的阵列110作为寻址信息的一部分的优点在于,与在存储器中存储指示矩阵数据的相应行/列的地址的绝对地址表的替代方法相比,这需要少得多的存储容量,因为偏移可相对于公共基地址来指示,因此可使用更少的位来表示。然而,其他具体实施可能省略图13的示例中的基地址寄存器104,使得每个偏移实际上是相对于0的偏移,但这将需要每个偏移值114的更多位。
此外,使用偏移字段110的特殊预留值来表示掩蔽的行/列位置可能比替代地通过将填充值存储在存储器本身中并通过在对应于掩蔽的行/列的偏移阵列110的字段中指定指向存储器中存储填充值的实际位置的偏移值来表示掩蔽的列/行而支持填充的情况更有效。利用特殊的预留值方法,不需要为了获得填充值而对存储器执行实际加载,因为填充值可替代地由加载电位80基于检测到预留偏移值而实时生成。
虽然图13示出了偏移结构110存储在存储器系统中从偏移结构基地址112导出的地址处的示例,但一些微架构设计可选择在硬件中提供偏移高速缓存116,该偏移高速缓存可高速缓存偏移结构的值,以便矩阵加载电路80更快地访问,以避免将来需要再次从存储器中获取它们。这认识到,对于矩阵内的多个不同位置,要应用的偏移模式通常可能是相同的,使得保留相同的偏移结构是有效的,因为它可以被重用。然而,其他具体实施可提供架构上所需的偏移寄存器来存储偏移结构110,使得根本不需要在存储器中为偏移结构110分配空间。
不管如何表示特定的掩蔽状态信息96、97和寻址信息94,该功能使得存储在存储器中的矩阵的所需部分能够被加载到矩阵转置框74中,以允许前面描述的操作的1×1卷积应用于矩阵的该部分。如图7所示,掩蔽允许跳过输入的某些行来处理绕回问题。此外,通过使帧内矩阵的某些行或列被掩蔽掉,这对于提供填充值以处理图2所示类型的填充卷积可能是有用的。此外,在一些情况下,2D卷积操作可应用于宽度或高度小于硬件中支持的最大宽度或高度的矩阵,因此可使用掩蔽状态来掩蔽矩阵末尾的未使用的行或列。
在将给定操作数矩阵的行或列写入矩阵转置框74之后,可由操作数移动电路82以行组或列组的形式读出数据,并将其传送到输入操作数寄存器70以准备进行矩阵处理。操作数移动电路82不限于以与矩阵加载电路80加载数据的方向相同的行/列方向从矩阵转置框74读出数据。在实践中,如果存储在存储器中的用于输入操作数的数据结构以与输出数据结构不同的行优先/列优先格式存储,则操作数移动电路82在与加载时使用的相反的行/列方向上读出数据可能是有用的。当矩阵被加载到矩阵转置框74中并被读出以供处理时,矩阵的这种实时转置可在硬件中执行,这比在存储器内重新映射数据布局所可能的效率高得多。因此,这可极大地改善处理潜在不同存储器布局的输入矩阵的性能。
需注意,对于存储在存储器中的矩阵结构的任何给定存储器布局,可将同一布局逐列或逐行加载到矩阵转置框74中,因此行/列选择参数89指定行方向还是列方向可完全独立于存储器中底层矩阵结构中使用的实际布局来选择。这是因为要使用矩阵转置框转置矩阵的方向,数据是逐列加载还是逐行读取,或者是逐行加载还是逐列读取,都是无关的,因为这两者都能获得相同的结果。实际上,当执行此类实时转置时,在逐行加载矩阵数据和逐列加载矩阵数据之间进行交替是有用的,以实现对用于处理的矩阵的较早行或列的读出和矩阵的较晚行或列的加载的更好流水线化。
例如,设想一系列操作,其中存储器中的矩阵结构的一系列行被加载到矩阵转置框74的行0至7中,但随后被逐列读出,因为与它们组合的输出数据结构具有相反的存储器布局。在这种情况下,在将最后一行7加载到矩阵转置框中之后,操作数移动电路82可从列0开始并以列7结束逐一开始读出列。然而,一旦已读出列0的数据,则在操作数移动电路82继续读出连续列1-7以供矩阵处理对象84处理时,矩阵加载电路80可开始从存储器加载矩阵结构的另外的行,以用于要处理的矩阵的下一块。由于矩阵处理逻辑84可能仍然需要列1-7,因此,当那些列由于操作数移动电路将它们读出以进行处理而相继变为空闲时,开始将矩阵列的那些另外的行加载到相应的列0、1、2等中更有效。因此,矩阵的后面部分的加载可加载到矩阵转置框74的相应列中的早期列位置0、1,而与前一矩阵块相关联的后面列的读出仍在进行中。例如,一旦由操作数移动电路82移动的矩阵已读出某一列(例如,列2)中的数据,则可开始加载到该列中进行下一次读出,因此这通过流水线实现了一些性能改善。然后,一旦已为存储器中要处理的矩阵的下一块加载了所有列,则可逐行执行由操作数移动电路82执行的下一组操作数移动操作,同时刚好在后面继续加载,以填充刚刚由操作数移动电路82读取的矩阵转置框的行组90。因此,可以看出(当使用动态转置时),通过交替将哪个方向用于一组加载,这可提供比在整个矩阵中使用相同行/列方向时更好的性能。
另选地,如果正在执行一组特定的操作,其中不需要实时变换矩阵布局(例如,由于输出数据结构在存储器中具有与输入数据结构相同的布局),则可为矩阵加载操作和操作数移动操作两者选择行/列方向中的一个固定行/列方向。然而,仍可能存在流水线化,使得可从某些行/列读出操作数以供处理,同时将加载执行到其他行/列中。
在图10的示例中,为了限制矩阵处理逻辑84的硬件复杂性和与单个指令相关联的延迟,矩阵处理逻辑84不支持在一条指令中对两个二维矩阵操作数执行完整的矩阵乘法操作,而是可将这样的2D矩阵乘法操作分解为多个单独的外积累加操作,每个操作都对一对一维向量操作数执行。图7的示例用于解释外积操作。在图7的示例中,为了从输入矩阵10和内核矩阵11生成输出矩阵12,图7的示例要求将11×4输入矩阵10与4×4内核矩阵11相乘,得到11×4输出矩阵12。全矩阵乘法操作将要求输出矩阵12的给定输出元素(例如,图7中在位置F'处标记为200的元素)应基于输入矩阵10的对应行202内的对应元素与内核矩阵11的对应列204内的对应元素的成对乘积之和来生成。由于矩阵乘法是作为一系列1×1卷积的一部分进行的,这些卷积被累加以生成更大2D卷积的等效物,因此将行202和列204的成对乘积相加的结果与元素F′的输出矩阵12的先前值相加,以生成元素F′的更新值。
然而,对于输出矩阵12的每个输出元素位置,这样的矩阵乘法操作将需要计算4个单独的乘积,然后将5项相加(4个乘积和输出元素的先前值)。这可能实施起来很慢并且难以适应其他操作的流水线时序。
相比之下,外积操作取第一向量操作数u=(u1,u2,…,um)和第二向量操作数v=(v1,v2,…,vn),每个向量操作数都包括一维元素阵列,并将它们组合以形成二维结果矩阵W,其因此,结果矩阵的每个元素都是从输入向量操作数的单个元素与第二向量操作数单个元素的单个乘积导出的。
因此,即使对于外积累加操作,每个元素也只需要计算加在一个附加项上的单个乘积。这可以更低的硬件成本更快地执行。
全矩阵乘法操作可分解为单独的外积操作。例如,当取如图7所示的对应于11×4输入矩阵的一个列的向量操作数206和对应于内核矩阵11的一个行的第二向量操作数208时,对于每对列和行位置,将第一向操作数206的每个元素与第二向量操作数208的对应元素相乘,得到中间结果的2D阵列,其中例如,图7中标识的元素200由列206中标记为A的元素与从内核矩阵11提取的行208中的左上角K1内核等待的乘积得出。通过在输入矩阵10中的列位置和内核矩阵11中的行位置的每个相应组合上执行外积累加操作的迭代,在处理了输入列和内核行的每个组合之后,结果将与执行了全矩阵乘法操作一样,但硬件成本更低。
因此,为了支持由矩阵处理逻辑84执行的外积累加操作,输入操作数寄存器70存储一维向量操作数,并且操作数移动电路82一次一行或一列地读出矩阵转置框74中的输入矩阵的部分。因此,即使正在对其执行操作的底层给定操作数矩阵是二维矩阵结构,在应用矩阵处理操作时,它也被视为一系列一维向量操作数,然而矩阵处理逻辑84能够在一条指令中生成结果矩阵作为二维矩阵结构,该结果矩阵对应于对一对向量操作数应用外积/累加操作的结果。这意味着该操作仍然比处理单独的向量处理指令更快,每个向量处理指令一次只能生成结果矩阵的单个行/列。
在图10的示例中,矩阵处理逻辑84的输入寄存器70包括各自用于存储第一向量操作数的两个输入寄存器A0、A1和各自用于存储第二向量操作数的两个输入寄存器B0、B1。此外,提供了四个结果矩阵寄存器C0至C372,每个寄存器都能够存储二维范围的结果矩阵(虽然图10示出了尺寸为N×N的正方形矩阵,但其他示例可支持结果矩阵的不同高度/宽度)。在一些具体实施中,矩阵处理逻辑可硬连线至在生成要放置在给定结果矩阵寄存器72中的结果矩阵时使用的输入寄存器的哪个组合。例如,可分别基于输入操作数对A0*B0;A0*B1;A1*B0;和A1*B1生成结果矩阵寄存器C0至C3。这认识到,通常在执行矩阵处理时,可能需要以不同的组合处理一个输入矩阵的同一组行或列以及第二输入矩阵的对应一组行或列。例如,对于图7的1×1组合示例,输入矩阵10的列206不仅需要与内核矩阵11的行208中的元素相乘以进行第一外积操作,而且需要与内核矩阵11的下一行中的相应元素相乘以进行后续的外积操作,对于其余行,依此类推。类似地,内核行208可能需要与输入矩阵中的多个不同列206相乘。通过提供足够的输入寄存器存储装置70以一次存储多个行或列,则针对操作数A的行或列和针对操作数B的行或列的不同组合可通过单组操作数加载/移动操作来实现以填充寄存器70,然后可将针对操作数的多个不同组合的多个不同矩阵处理操作应用于那些操作数,而无需为每个单独的矩阵处理操作重复加载/移动。因此,图10所示的使用四个输出矩阵寄存器的方法能够增加每个矩阵加载指令处理的矩阵处理指令的数量。其他示例可提供另外的输入寄存器70/输出寄存器72,但所选择的寄存器的精确数量可以是硬件成本和性能之间的折衷。
另选地,其他方法可能仅为单个向量操作数对提供足够的输入操作数寄存器存储装置70,在这种情况下,对于要相乘的相应输入矩阵的行/列的每个不同组合,需要为单个向量寄存器对加载新的值。
此外,为两个操作数A、B提供单独的寄存器组不是必要的。在另一示例中,可从单个组合寄存器文件中的相应寄存器中选择操作数A和B两者。
如图10所示,单独的矩阵处理指令240可指定给定的结果目的地寄存器72、用于为操作提供源操作数的一对输入向量寄存器70,以及包括谓词(掩蔽状态)信息242和移位选择信息244的控制信息。如上所述,在一些具体实施中,要用于给定操作的结果矩阵寄存器72的选择可从所选择的源寄存器70的组合中隐含,因此在这种情况下,指令可能不需要指定单独的目的地寄存器标识符,但如果允许更任意地选择目的地,则提供附加的目的地寄存器说明符可能是有用的。
图14更详细地示出了矩阵处理逻辑84,包括谓词信息242和移位选择信息244的使用。图14示出了应用于存储在操作数存储装置的“A”输入向量寄存器70中的给定一个“A”输入向量寄存器中的第一向量操作数250和存储在操作数存储装置的“B”输入向量寄存器中的给定一个“B”输入向量寄存器中的第二向量操作数252的向量外积操作。例如,在上述卷积示例中,“A”寄存器可用于输入矩阵10,而B寄存器可用于内核权重11。
矩阵处理逻辑84包括位置移位电路260,该位置移位电路用于在输入操作数250中的一个输入操作数的元素与响应于矩阵处理指令240生成的输出矩阵270中的对应元素位置之间施加可变位置移位。移位信息244可表示为矩阵处理指令240内的显式参数,或可由存储在控制寄存器中的控制参数表示。移位参数244指定多个可变移位量中的一个可变移位量。基于所选择的移位量,位置移位电路激活多个多路复用器,以选择来自第一向量操作数250的哪些输入元素被提供给移位输入操作数272内的每个元素位置。例如,如果选择可变移位量0,则输入向量250的每个元素被传递到移位输入向量272中对应定位的元素,而如果选择可变移位量1,则将移位输入向量272内给定元素位置处的元素设置为原始输入向量250内下一最高元素位置处的元素的值。对于移位输入向量272内最高元素位置处的元素,如果选择大于0的可变移位量,则可提供填充值274,因为在原始输入向量内不存在更高的元素位置要注入。类似地,对于较高的移位量值,则可应用较大的位置移位,以便调整输入向量250的哪个位置被提供到移位输入向量272中的移位位置。并不向仅在其原始位置使用的第二向量操作数252应用移位。
然后,矩阵处理逻辑84执行外积操作,使得根据表达式C’[i,j]=C[i,j]+P[i].Ashift[i]×B[j]生成每个元素C’[i,j],其中i在结果矩阵C’[i,j]的所有行上迭代,并且j在结果矩阵C’[i,j]的所有列上迭代。这里,对应于结果矩阵中的给定行位置i的谓词位P[i]指定该行是被掩蔽(非活动)还是未被掩蔽(活动)。在该示例中,输出矩阵270的非活动行由等于0的谓词位指示,而活动行由谓词位1指示,但应理解,其他示例可采用谓词值的相反映射,使得可使用谓词位1来标识非活动行,并且可使用谓词位0来标识活动行。对于非活动行,在该示例中,假定移位输入向量272的对应元素被零掩蔽值替换,但其他示例可使用非零掩蔽值。
因此,利用这种方法,由位置移位电路260提供的可变位置移位有助于支持图8所示的方法,其中,在将表示输入矩阵的给定行或列的特定向量250加载到输入操作数寄存器70之后,可执行指定可变移位量244的不同值的多个矩阵处理指令,这些指令作用于寄存器70中的输入向量250的完全相同的内容,以解释输入向量250和输出矩阵270之间的相对位置移位,这些相对位置移位是为不同的内核位置应用内核权重所需的,如图8所示。这避免了为每个内核位置重新加载向量操作数寄存器250的需要。此外,使用谓词值242提供谓词函数有助于处理跳过某些行的需要,如图8所示,以解决关于图7讨论的绕回问题。谓词还可帮助处理列的行数不足以填满硬件中支持的整个向量的情况。
虽然图14示出了在从给定输入寄存器70读取输入向量操作数250和将移位的操作数提供给矩阵处理逻辑84以执行外积/累加操作之间提供的位置移位电路260,但也可以在生成外积/累加操作的结果的矩阵处理逻辑84和将结果写回到结果矩阵寄存器72之间应用位置移位,尽管这种方法会稍微复杂一些,因为如果正在执行累加操作,则这也需要将输出矩阵的先前值的一部分移位,这些值被读取为外部乘积/累加操作的输入(即,上述表达式中的C[i,j])。
因此,提供上文关于图10至图14讨论的特征有助于处理流水线内的矩阵处理功能更有效地处理在机器学习领域非常普遍的2D卷积操作。可以理解,程序员可能会发现相同功能的其他用途,因此这些功能不必专门用于此类2D卷积操作。
虽然图10示出了矩阵转置框74,该矩阵转置框可用于允许使用同一组指令来处理存储器中矩阵结构的不同布局,而不管它们的存储布局如何,但矩阵转置框74不是必需的,一些具体实施可以省略该矩阵转置框,并且在这种情况下,如果输入矩阵和输出矩阵的存储器布局之间存在差异,则任何转置都需要通过在应用任何矩阵处理操作之前使用加载/存储指令重新映射存储在存储器中的数据来单独处理,或者通过生成输出,然后在将其写回与输出对应的存储器的数据结构之前转换其格式来单独处理。如果没有提供矩阵转置框74,则矩阵加载电路80可替代地在执行矩阵处理操作时将存储器中的矩阵结构的行或列直接加载到矩阵处理逻辑可读取的输入寄存器70中。
此外,在一些具体实施中,可能根本不需要提供输入操作数寄存器70,就好像提供了矩阵转置框74一样,那么另一种方法可以是矩阵处理逻辑84直接从矩阵转置框74的存储元件88读取其操作数。因此,虽然一般来讲可提供一些操作数存储电路以由矩阵加载电路80加载矩阵的行或列,并且矩阵处理逻辑84可从这些操作数存储电路获得操作数,但不必同时提供矩阵转置框74和输入操作数寄存器70,并且这两者可以单独地提供,或者可以如图10的示例中那样组合地提供。
虽然图10示出了应用于正方形矩阵的示例,其中矩阵中的行数和列数相等,但这不是必需的,并且其他示例可能支持非对称的行数和列数。
如果提供上述行/列掩蔽功能和位置移位功能两者,则可最大程度地改善性能,但这不是必需的,并且一些具体实施可仅提供这些功能中的一个功能或另一个功能。
图15是示出在其中在执行加载操作时应用掩蔽的一个示例中处理矩阵加载指令的方法的流程图。当在步骤300处遇到此类指令时,在步骤302处,指令解码器30解码加载指令以生成控制信号,这些控制信号控制矩阵加载电路80,以从CPU 60内的内部寄存器(例如,在寄存器组34中或在与矩阵加载电路80相关联的内部寄存器中)、从存储器中的数据结构110或从偏移高速缓存116获得第一掩蔽状态数据96。第一掩蔽状态数据96是“整行/列”掩蔽状态数据,其指示整个行/列是否被掩蔽。矩阵加载电路80获得整个第一掩蔽状态数据96不是必需的,只要参考对应于要加载的目标行/列的行/列号99的掩蔽指示100或114就足够了。因此,在步骤304处,矩阵加载电路基于获得的第一掩蔽状态数据96确定由矩阵加载指令指定的行/列号99是否对应于正在处理的输入矩阵内的掩蔽的行或列位置。如果指定的行/列是掩蔽的行/列,则在步骤306处,为操作数存储电路74、70中对应于目标行/列的对应部分加载具有含掩蔽值的数据,而不是实际上针对存储在存储器中的矩阵数据结构的对应部分执行对存储器的加载。掩蔽值可基于由加载指令编码的或在控制寄存器中的其他地方指定的选择参数从多个选项中选择。另选地,默认情况下,一些具体实施可能始终使用固定掩蔽值,诸如零。
另一方面,如果目标行或列位置并非掩蔽的行或列位置,则在步骤308处,矩阵加载电位80获得第二掩蔽状态数据97,该第二掩蔽状态数据是每元素掩蔽状态数据,其指示目标行/列内的任何单独的掩蔽的列/行位置的位置。在步骤310处,矩阵加载电路确定目标行/列内是否存在任何活动元素(即使第一掩蔽状态数据96指示目标行/列未被掩蔽,第二掩蔽状态数据97也可能已将目标行/列中的所有元素设置为非活动的)。如果在目标行/列中存在至少一个活动元素,则在步骤312处,矩阵加载电路80触发加载操作以从存储器读取矩阵数据结构中对应于目标行或列的一部分。在图12的示例中,例如通过将基地址104加到行/列号和指定步幅106的倍数,可从寻址信息94中导出从中加载数据的地址。然后,从存储器获得相关数据块之后,对于该行或列内的任何活动元素,将加载的数据写入矩阵转置框74的对应的存储元件88,或直接加载到所选择的输入操作数寄存器70的对应部分中。相比之下,对于由第二掩蔽状态数据97指示的目标行/列的任何非活动元素,为对应的存储元件88或所选择的输入操作数寄存器70的部分填充掩蔽值,该掩蔽值也可以是零或非零,并且可以是固定的或可编程控制的。
如果在步骤310处,矩阵加载电路80确定目标行/列中的所有元素都被第二掩蔽状态数据97指示为非活动的,则在步骤314处阻止加载操作发生,并且为操作数存储电路(即,矩阵转置框74的存储元件88或输入操作数寄存器70)中的目标行/列的每个元素填充掩蔽值,而根本不需要执行任何来自存储器的加载。
虽然图15示出了用于获得第一掩蔽状态数据96和第二掩蔽状态数据97的两个单独步骤302、308,但其他示例可在检查目标行/列是否被第一掩蔽状态96掩蔽掉之前,在步骤302处获得两条掩蔽状态数据96、97。
图16示出了在支持在矩阵处理时应用的掩蔽的实施方案中处理矩阵处理指令240的第一示例。在步骤320处,流水线的指令解码器30标识出要处理的指令是矩阵处理指令,并生成控制信号以控制矩阵处理电路46来处理该指令。在步骤322处,响应于这些控制信号,矩阵处理逻辑84根据存储在操作数存储电路70、74中的信息获得第一操作数和第二操作数。如前所讨论的,这些操作数可直接从矩阵转置框74获得,或者可从输入操作数寄存器70获得。此外,矩阵处理电路获得掩蔽状态数据96(例如,谓词向量242,如图14所示),该掩蔽状态数据指示掩蔽的行/列位置,对于这些掩蔽的行/列位置,输入值将被视为好像它们表示掩蔽值那样。在步骤324处,矩阵处理电路46对第一操作数和第二操作数执行矩阵处理操作以生成二维结果矩阵,然后可将该二维结果矩阵写回到结果矩阵寄存器72中的一个结果矩阵寄存器。例如,此操作可以是如上文所讨论的外积累加操作,其中第一操作数和第二操作数是向量操作数。对于指示为由掩蔽状态数据96掩蔽掉的任何非活动行/列,结果矩阵的对应元素可保留它们先前的值,或者另选地可被设置为如果对应的输入值被设置为掩蔽值会产生的值。
图17示出了在支持参照图8和图14描述的可变位置移位特征的实施方案中处理矩阵处理指令的第二示例。步骤320、322和324类似于图16的对应步骤(图17中未明确示出掩蔽特征,但在一些实施方案中仍可提供掩蔽特征)。然而,在图17中,也支持图14所示的位置移位功能。在步骤326处,由矩阵处理电路46根据由矩阵处理指令指定的可变移位量244选择多个替代移位量中的一个替代移位量。虽然图14示出了具有三个不同的可能移位量以对应于图8所示的三个选项的示例,但应当理解,支持更大内核大小的其他具体实施可能需要多于三个可以选择的不同移位量。另选地,为了限制位置移位电路260的复杂性,即使支持更大的内核大小,位置移位也可能被限制在某个最大大小,并且如果需要另外的加载来支持较大的内核大小,则这仍然是可能的。
因此,在步骤328处,由位置移位电路260基于在步骤326处所选择的移位量来应用可变位置移位,使得基于输入操作数250中的一个输入操作数的给定元素来改变2D结果矩阵270的哪个行或列被更新。在图17的步骤324处,然后基于可变位置移位来应用矩阵处理操作以生成结果矩阵270。
因此,总之,这些想法有助于支持更高效的硬件来支持2D卷积操作的处理,2D卷积操作是机器学习和图像处理领域的常见操作。
其他示例在以下条款中阐述:
(1)一种装置,该装置包括:矩阵处理电路,该矩阵处理电路用于对第一输入操作数和第二输入操作数执行矩阵处理操作以生成结果矩阵,其中该结果矩阵是二维矩阵;操作数存储电路,该操作数存储电路用于存储用于形成该矩阵处理电路的该第一输入操作数和该第二输入操作数的信息;和掩蔽电路,该掩蔽电路用于执行掩蔽操作以基于指示将被视为表示掩蔽值的一个或多个掩蔽的行或列位置的掩蔽状态数据来掩蔽该矩阵处理操作或存储到该操作数存储电路的信息的至少一部分。
(2)根据任一前述条款所述的装置,其中该掩蔽值为零。
(3)根据任一前述条款所述的装置,其中该掩蔽值是根据以下中的至少一者从多个掩蔽值中选择的:掩蔽值选择参数,该掩蔽值选择参数由使该掩蔽操作得以执行的指令指定;控制值,该控制值存储在控制寄存器中;和掩蔽向量,该掩蔽向量为掩蔽的行/列的多个元素指定单独的掩蔽值。
(4)根据任一前述条款所述的装置,其中该掩蔽状态数据具有在元素的二维阵列内标识将被视为表示该掩蔽值的元素的编码。
(5)根据条款(4)所述的装置,其中该掩蔽状态数据指定:
第一掩蔽状态数据,该第一掩蔽状态数据指示一个或多个掩蔽的行或列位置,对于该一个或多个掩蔽的行或列位置,该掩蔽的行或列位置中的所有元素将被视为表示该掩蔽值;并且
第二掩蔽状态数据,该第二掩蔽状态数据指示给定行或列内的各个元素位置是否要被掩蔽。
(6)根据任一前述条款所述的装置,其中该掩蔽状态数据具有能够将由至少一个非掩蔽行或列位置隔开的至少两个非相邻行或列位置指示为掩蔽的行或列位置的编码。
(7)根据任一前述条款所述的装置,其中该操作数存储电路包括矩阵转置电路,该矩阵转置电路包括用于存储给定操作数矩阵的相应矩阵元素的多个存储单元,其中该矩阵转置电路的该存储单元在对应于该给定操作数矩阵的行的行组中是可读的,并且在对应于该给定操作数矩阵的列的列组中也是可读的。
(8)根据条款(7)所述的装置,其中:当该给定操作数矩阵以行组的形式被写入该矩阵转置电路时,该矩阵转置电路被配置为支持以列组的形式从该矩阵转置电路读出该给定操作数矩阵;以及当该给定操作数矩阵以列组的形式被写入该矩阵转置电路时,该矩阵转置电路被配置为支持以行组的形式从该矩阵转置电路读取该给定操作数矩阵。
(9)根据任一前述条款所述的装置,其中:该矩阵处理电路包括该掩蔽电路,并且响应于该掩蔽信息来执行该矩阵处理操作,其中该第一操作数和该第二操作数中的一者的对应于该一个或多个掩蔽的行或列位置的一部分被视为表示该掩蔽值,而不是存储在该操作数存储电路中的该第一操作数和第二操作数中的该一者的该部分的实际值。
(10)根据任一前述条款所述的装置,该装置包括加载电路,该加载电路响应于加载指令而基于存储在存储器中的矩阵数据结构的一部分将对应于给定操作数矩阵的目标行或列的信息加载到该操作数存储电路;其中:该加载电路包括该掩蔽电路,并且当该目标行或列对应于由该掩蔽状态数据指示的掩蔽的行或列位置时,该加载电路被配置成为该操作数存储电路中对应于该目标行或列的一部分加载具有该掩蔽值的数据,而不是基于存储在存储器中的该矩阵数据结构的该部分的数据。
(11)根据条款(10)所述的装置,其中响应于该加载指令,当对应于该目标行或列的该掩蔽状态数据指示该目标行或列对应于掩蔽的行或列位置时,该加载电路被配置为基于在该目标行或列的多个矩阵元素之间共享的掩蔽状态数据的共享项来确定是否应掩蔽该目标行或列的该多个矩阵元素中的每个矩阵元素。
(12)根据条款(10)和(11)中任一项所述的装置,其中该掩蔽状态数据包括多个偏移值,每个偏移值对应于该给定操作数矩阵的相应行或列位置,并且指示该矩阵数据结构的对应部分在存储器中的地址相对于基地址的偏移;并且该掩蔽的行或列位置由具有预定预留偏移值的该掩蔽的行或列位置的该偏移值指示。
(13)根据条款(10)至(12)中任一项所述的装置,其中该加载电位被配置为基于存储在至少一个掩蔽状态寻址寄存器中的掩蔽状态寻址信息从存储器获得该掩蔽状态数据。
(14)根据条款(11)至(13)中任一项所述的装置,其中该加载电位被配置为基于寻址信息确定该矩阵数据结构的该部分在存储器中的目标地址。
(15)根据条款14所述的装置,其中该寻址信息包括多个地址指针,每个地址指针指示该矩阵数据结构中对应于该给定操作数矩阵的相应行或列位置的一部分的地址。
(16)根据条款(14)所述的装置,其中该寻址信息包括:该矩阵数据结构的基地址;以及步幅值,该步幅值指示该矩阵数据结构中对应于该给定操作数矩阵的一个行或列的部分的地址与该矩阵数据结构中对应于该给定操作数矩阵的下一行或列的部分的地址之间的差值。
(17)根据条款(14)所述的装置,其中该寻址信息包括:该矩阵数据结构的基地址;偏移信息,该偏移信息包括以下中的一者:多个偏移值,每个偏移值对应于该给定操作数矩阵的相应行或列位置,并且指示该矩阵数据结构的对应部分在存储器中的地址相对于该基地址的偏移;以及偏移数据结构地址,该偏移数据结构地址指示存储器中提供该多个偏移值的数据结构的地址。
(18)根据条款(14)至(17)中任一项所述的装置,该寻址信息还包括子部分选择信息,用于选择存储器中基于该寻址信息标识的该矩阵数据结构的该部分的哪个子部分将被加载到该操作数存储电路。(19)根据条款(14)至(18)中任一项所述的装置,该装置包括:至少一个寻址寄存器,该至少一个寻址寄存器用于存储该寻址信息;以及预取电路,该预取电路用于根据存储在该至少一个寻址寄存器中的该寻址信息,生成用于从存储器预取该给定操作数矩阵的部分的预取请求。
(20)根据任一前述条款所述的装置,其中该第一输入操作数和该第二输入操作数是一维向量操作数。
(21)根据任一前述条款所述的装置,其中该矩阵处理操作包括应用于该第一输入操作数和该第二输入操作数以生成该结果矩阵的外积操作。
(22)根据条款(21)所述的装置,其中该外积操作包括外积累加操作,对于该外积累加操作,该结果矩阵包括累加器矩阵的相应元素的更新值,其中该累加器矩阵的给定元素的该更新值对应于将该累加器矩阵的该给定元素的先前值加到该外积结果矩阵的对应元素的结果,该对应元素对应于对该第一输入操作数和该第二输入操作数执行该外积操作的结果。
(23)根据任一前述条款所述的装置,其中该矩阵处理电路被配置为响应于单个指令从该第一输入操作数和该第二输入操作数生成该结果矩阵。
(24)一种装置,该装置包括:用于对第一输入操作数和第二输入操作数执行矩阵处理操作以生成结果矩阵的构件,其中该结果矩阵是二维矩阵;用于存储形成用于该用于执行的装置的该第一输入操作数和该第二输入操作数的信息的构件;以及用于执行掩蔽操作以基于指示将被视为表示掩蔽值的一个或多个掩蔽的行或列位置的掩蔽状态数据来掩蔽该矩阵处理操作或存储到该操作数存储电路的信息的至少一部分的构件。
(25)一种数据处理方法,该数据处理方法包括:在操作数存储电路中存储用于形成用于矩阵处理操作的第一输入操作数和第二输入操作数的信息;以及对该第一输入操作数和该第二输入操作数执行矩阵处理操作以生成结果矩阵,其中该结果矩阵是二维矩阵;以及执行掩蔽操作以基于指示将被视为表示掩蔽值的一个或多个掩蔽的行或列位置的掩蔽状态数据来掩蔽该矩阵处理操作或存储到该操作数存储电路的该信息的至少一部分。
在本申请中,字词“被配置为…”用于意指装置的元件具有能够执行所限定的操作的配置。在该上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,该装置可具有提供所限定的操作的专用硬件,或者可对处理器或其他处理设备进行编程以执行该功能。“被配置为”并不意味着装置元件需要以任何方式改变以便提供所限定的操作。
虽然本文已结合附图详细描述了本发明的示例性实施方案,但应当理解,本发明并不限于那些精确的实施方案,并且在不脱离所附权利要求书所限定的本发明的范围的前提下,本领域的技术人员可在其中实现各种变化和修改。
Claims (14)
1.一种装置,所述装置包括:
矩阵处理电路,所述矩阵处理电路用于对第一输入操作数和第二输入操作数执行矩阵处理操作以生成结果矩阵,其中所述结果矩阵是二维矩阵;
操作数存储电路,所述操作数存储电路用于存储用于形成所述矩阵处理电路的所述第一输入操作数和所述第二输入操作数的信息;和
位置移位电路,所述位置移位电路用于应用可变位置移位,以在给定的矩阵处理操作期间,基于存储在所述操作数存储电路中的所述第一输入操作数和所述第二输入操作数中的一者的给定元素来改变所述结果矩阵的哪个行或列被更新,所述可变位置移位基于针对所述给定矩阵处理操作可选择的多个替代移位量中的一个替代移位量,每个替代移位量对应于所述第一输入操作数和所述第二输入操作数中的所述一者相对于所述结果矩阵的不同行数或列数的位置移位。
2.根据权利要求1所述的装置,其中所述第一输入操作数和所述第二输入操作数包括一维向量操作数。
3.根据权利要求2所述的装置,其中所述矩阵处理操作包括应用于所述第一输入操作数和所述第二输入操作数以生成所述结果矩阵的外积操作。
4.根据权利要求3所述的装置,其中所述外积操作包括外积累加操作,对于所述外积累加操作,所述结果矩阵包括累加器矩阵的相应元素的更新值,其中所述累加器矩阵的给定元素的所述更新值对应于将所述累加器矩阵的所述给定元素的先前值加到外积结果矩阵的对应元素的结果,所述对应元素对应于对所述第一输入操作数和所述第二输入操作数执行所述外积操作的结果。
5.根据任一前述权利要求所述的装置,其中所述位置移位电路被配置为基于由矩阵处理指令指定的参数来选择所述多个替代移位量中的所述一个替代移位量,所述矩阵处理指令用于控制所述矩阵处理电路以执行所述矩阵处理操作。
6.根据任一前述权利要求所述的装置,其中:
当所述结果矩阵的给定行或列对应于由所述矩阵处理电路可访问的谓词信息指示的活动行或列位置时,所述矩阵处理电路被配置为生成所述结果矩阵的所述给定行或列的元素,所述元素具有取决于所述第一输入操作数和所述第二输入操作数中的所述一者的对应行或列的值,所述对应行或列取决于针对所述给定矩阵处理操作选择的所述多个替代移位量中的所述一个替代移位量来选择;并且
当所述给定行或列对应于由所述谓词信息指示的非活动行或列位置时,所述矩阵处理电路被配置为生成结果矩阵值的所述给定行或列的元素,所述元素具有独立于所述第一输入操作数和所述第二输入操作数中的所述一者的所述对应行或列的值。
7.根据任一前述权利要求所述的装置,其中所述操作数存储电路包括矩阵转置电路,所述矩阵转置电路包括用于存储给定操作数矩阵的相应矩阵元素的多个存储单元,其中所述矩阵转置电路的所述存储单元在对应于所述给定操作数矩阵的行的行组中是可读的,并且在对应于所述给定操作数矩阵的列的列组中也是可读的。
8.根据权利要求7所述的装置,其中:
当所述给定操作数矩阵以行组的形式被写入所述矩阵转置电路时,所述矩阵转置电路被配置为支持以列组的形式从所述矩阵转置电路读出所述给定操作数矩阵;并且
当所述给定操作数矩阵以列组的形式被写入所述矩阵转置电路时,所述矩阵转置电路被配置为支持以行组的形式从所述矩阵转置电路读取所述给定操作数矩阵。
9.根据权利要求7和8中任一项所述的装置,其中所述操作数存储电路包括操作数寄存器,所述操作数寄存器用于存储用于所述矩阵处理操作的所述第一输入操作数和第二输入操作数;并且
所述装置包括操作数移动电路,所述操作数移动电路响应于移动指令以从所述矩阵转置电路读出所述给定操作数矩阵的至少一个行或列,并将所述至少一个行或列写入所述操作数寄存器。
10.根据权利要求7至9中任一项所述的装置,其中所述装置包括操作数移动电路,所述操作数移动电路响应于矩阵处理指令以从所述矩阵转置电路读出所述给定操作数矩阵的至少一个行或列,并将所述至少一个行或列作为所述第一输入操作数和所述第二输入操作数中的一者提供给所述矩阵处理电路。
11.根据任一前述权利要求所述的装置,所述装置包括加载电路,所述加载电路响应于加载指令而基于存储在存储器中的矩阵数据结构的一部分将对应于给定操作数矩阵的目标行或列的信息加载到所述操作数存储电路;其中:
响应于所述加载指令,所述加载电路被配置为获得用于指示所述给定操作数矩阵内的一个或多个掩蔽的行或列位置的掩蔽状态数据,并且当所述目标行或列对应于由所述掩蔽状态数据指示的掩蔽的行或列位置时,所述加载电路被配置成为所述操作数存储电路中对应于所述目标行或列的一部分加载具有含掩蔽值的数据,而不是基于存储在存储器中的所述矩阵数据结构的所述部分的数据。
12.根据任一前述权利要求所述的装置,其中所述矩阵处理电路被配置为响应于单个指令从所述第一输入操作数和所述第二输入操作数生成所述结果矩阵。
13.一种装置,所述装置包括:
用于对第一输入操作数和第二输入操作数执行矩阵处理操作以生成结果矩阵的构件,其中所述结果矩阵是二维矩阵;
用于存储形成用于所述用于执行的装置的所述第一输入操作数和所述第二输入操作数的信息的构件;以及
用于应用可变位置移位以在给定矩阵处理操作期间基于存储在所述用于存储的构件中的所述第一输入操作数和所述第二输入操作数中的一者的给定元素来改变所述结果矩阵的哪个行或列被更新的构件,所述可变位置移位基于针对所述给定矩阵处理操作能够选择的多个替代移位量中的一个替代移位量,每个替代移位量对应于所述第一输入操作数和所述第二输入操作数中的所述一者相对于所述结果矩阵的不同行数或列数的位置移位。
14.一种数据处理方法,所述数据处理方法包括:
对第一输入操作数和第二输入操作数执行矩阵处理操作以生成结果矩阵,其中所述结果矩阵是二维矩阵并且所述第一输入操作数和所述第二输入操作数取决于操作数存储电路中存储的信息;以及
在给定的矩阵处理操作期间,应用可变位置移位以基于存储在所述操作数存储电路中的所述第一输入操作数和所述第二输入操作数中的一者的给定元素来改变所述结果矩阵的哪个行或列被更新,所述可变位置移位基于针对所述给定矩阵处理操作可选择的多个替代移位量中的一个替代移位量,每个替代移位量对应于所述第一输入操作数和所述第二输入操作数中的所述一者相对于所述结果矩阵的不同行数或列数的位置移位。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2007068.6A GB2594971B (en) | 2020-05-13 | 2020-05-13 | Variable position shift for matrix processing |
GB2007068.6 | 2020-05-13 | ||
PCT/GB2021/051153 WO2021229232A1 (en) | 2020-05-13 | 2021-05-13 | Variable position shift for matrix processing |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115552371A true CN115552371A (zh) | 2022-12-30 |
Family
ID=71134967
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180034380.9A Pending CN115552371A (zh) | 2020-05-13 | 2021-05-13 | 用于矩阵处理的可变位置移位 |
Country Status (7)
Country | Link |
---|---|
US (1) | US20230229730A1 (zh) |
EP (1) | EP4150447A1 (zh) |
JP (1) | JP2023525811A (zh) |
KR (1) | KR20230005393A (zh) |
CN (1) | CN115552371A (zh) |
GB (1) | GB2594971B (zh) |
WO (1) | WO2021229232A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102548283B1 (ko) * | 2021-12-22 | 2023-06-27 | (주)뉴로컴즈 | 콘볼루션 신경망 컴퓨팅 장치 |
GB2614886A (en) * | 2022-01-19 | 2023-07-26 | Advanced Risc Mach Ltd | Data processing |
GB2622581A (en) * | 2022-09-14 | 2024-03-27 | Advanced Risc Mach Ltd | Multiple-outer-product instruction |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108205700B (zh) * | 2016-12-20 | 2021-07-30 | 上海寒武纪信息科技有限公司 | 神经网络运算装置和方法 |
JP6767660B2 (ja) * | 2017-01-27 | 2020-10-14 | 富士通株式会社 | プロセッサ、情報処理装置及びプロセッサの動作方法 |
US10810281B2 (en) * | 2017-02-24 | 2020-10-20 | Texas Instruments Incorporated | Outer product multipler system and method |
EP3800563B1 (en) * | 2017-05-17 | 2024-01-24 | Google LLC | Low latency matrix multiply unit |
US10902087B2 (en) * | 2018-10-31 | 2021-01-26 | Advanced Micro Devices, Inc. | Device and method for accelerating matrix multiply operations as a sum of outer products |
-
2020
- 2020-05-13 GB GB2007068.6A patent/GB2594971B/en active Active
-
2021
- 2021-05-13 KR KR1020227043451A patent/KR20230005393A/ko active Search and Examination
- 2021-05-13 WO PCT/GB2021/051153 patent/WO2021229232A1/en unknown
- 2021-05-13 US US17/998,224 patent/US20230229730A1/en active Pending
- 2021-05-13 JP JP2022568859A patent/JP2023525811A/ja active Pending
- 2021-05-13 EP EP21726963.8A patent/EP4150447A1/en active Pending
- 2021-05-13 CN CN202180034380.9A patent/CN115552371A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2021229232A1 (en) | 2021-11-18 |
EP4150447A1 (en) | 2023-03-22 |
GB2594971A (en) | 2021-11-17 |
GB2594971B (en) | 2022-10-05 |
GB202007068D0 (en) | 2020-06-24 |
US20230229730A1 (en) | 2023-07-20 |
JP2023525811A (ja) | 2023-06-19 |
KR20230005393A (ko) | 2023-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115552371A (zh) | 用于矩阵处理的可变位置移位 | |
CN108205448B (zh) | 具有在每个维度上可选择的多维循环寻址的流引擎 | |
CN115562729A (zh) | 具有带读取和读取/前进操作数编码的流引擎的数据处理设备 | |
TWI759372B (zh) | 複製分區指令 | |
US20230289186A1 (en) | Register addressing information for data transfer instruction | |
CN115552372A (zh) | 为矩阵处理掩蔽行或列位置 | |
TWI759373B (zh) | 複製元件指令 | |
WO2023148467A1 (en) | Technique for performing memory access operations | |
WO2023199015A1 (en) | Technique for handling data elements stored in an array storage |
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 |