CN113918883B - 数据处理方法、装置以及设备和计算机可读存储介质 - Google Patents
数据处理方法、装置以及设备和计算机可读存储介质 Download PDFInfo
- Publication number
- CN113918883B CN113918883B CN202111292008.6A CN202111292008A CN113918883B CN 113918883 B CN113918883 B CN 113918883B CN 202111292008 A CN202111292008 A CN 202111292008A CN 113918883 B CN113918883 B CN 113918883B
- Authority
- CN
- China
- Prior art keywords
- vector registers
- matrix
- destination
- address
- register
- 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.)
- Active
Links
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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
Abstract
一种数据处理方法、数据处理装置、数据处理设备和计算机可读存储介质。该数据处理方法应用于矩阵运算,且包括:获取并解析矩阵运算指令,以获取多个目的地址和目的寄存器选择信息;基于矩阵运算指令,计算得到多个运算结果;基于多个目的地址,确定多个目的向量寄存器;基于目的寄存器选择信息,从多个目的向量寄存器中选择N1个目的向量寄存器,其中,多个目的向量寄存器分别对应的多个地址索引是连续的,N1个目的向量寄存器分别对应的N1个地址索引不是完全连续的,N1为正整数且大于1;将多个运算结果存储在N1个目的向量寄存器中。
Description
技术领域
本公开的实施例涉及一种数据处理方法、数据处理装置、数据处理设备和计算机可读存储介质。
背景技术
图形处理器(GPU(graphic process unit))是一种专用于图形和图像处理的处理器。GPU包括多个处理单元,每个处理单元包括单指令多数据流(SIMD,Single-Instruction-Multiple-Data)结构,SIMD是GPU中执行并行计算的最小单元,可以通过执行一条指令同时控制多个线程执行相同的操作,每个SIMD结构中都有其专用的一组向量寄存器(VREG,Vector Register)和大量的可以并行执行的运算单元(例如,乘法单元)。因为GPU的运算单元具有高度的并行性,所以GPU被广泛应用于矩阵运算。
发明内容
本公开至少一个实施例提供一种数据处理方法,应用于矩阵运算,所述数据处理方法包括:获取并解析矩阵运算指令,以获取多个目的地址和目的寄存器选择信息;基于所述矩阵运算指令,计算得到多个运算结果;基于所述多个目的地址,确定多个目的向量寄存器;基于所述目的寄存器选择信息,从所述多个目的向量寄存器中选择N1个目的向量寄存器,其中,所述多个目的向量寄存器分别对应的多个地址索引是连续的,所述N1个目的向量寄存器分别对应的N1个地址索引不是完全连续的,N1为正整数且大于1;将所述多个运算结果存储在所述N1个目的向量寄存器中。
例如,在本公开至少一个实施例提供的数据处理方法中,基于所述目的寄存器选择信息,从所述多个目的向量寄存器中选择N1个目的向量寄存器,包括:响应于所述目的寄存器选择信息为第一目的选择信息,按照每间隔P1个地址索引选择一个目的向量寄存器的方式从所述多个目的向量寄存器中选择得到所述N1个目的向量寄存器,其中,P1为正整数且大于1。
例如,在本公开至少一个实施例提供的数据处理方法中,基于所述目的寄存器选择信息,从所述多个目的向量寄存器中选择N1个目的向量寄存器,包括:响应于所述目的寄存器选择信息为第二目的选择信息,按照每间隔P2个地址索引选择至少两个目的向量寄存器的方式从所述多个目的向量寄存器中选择得到T1个目的向量寄存器组,其中,每个目的向量寄存器组包括至少两个目的向量寄存器;将所述T1个目的向量寄存器组中的所有目的向量寄存器作为所述N1个目的向量寄存器,其中,T1和P2均为正整数,且P2大于1。
例如,在本公开至少一个实施例提供的数据处理方法中,每个目的向量寄存器组中的至少两个目的向量寄存器对应的地址索引是连续的。
例如,在本公开至少一个实施例提供的数据处理方法中,基于所述目的寄存器选择信息,从所述多个目的向量寄存器中选择N1个目的向量寄存器,包括:响应于所述目的寄存器选择信息为第三目的选择信息,基于所述第三目的选择信息,从所述多个目的向量寄存器分别对应的多个地址索引中随机地选择得到所述N1个地址索引;从所述多个目的向量寄存器中选择得到与所述N1个地址索引一一对应的所述N1个目的向量寄存器。
例如,在本公开至少一个实施例提供的数据处理方法中,所述矩阵运算用于实现将第一矩阵和第二矩阵进行乘法运算以得到第三矩阵,并将所述第三矩阵与第四矩阵进行加法运算,基于所述矩阵运算指令,计算得到多个运算结果,包括:基于所述矩阵运算指令,获取多个第一操作数据和多个第二操作数据,其中,所述第一矩阵包括所述多个第一操作数据,所述第二矩阵包括所述多个第二操作数据;对所述多个第一操作数据和所述多个第二操作数据进行乘法运算,以得到多个乘法运算结果,其中,所述第三矩阵包括所述多个乘法运算结果;基于所述矩阵运算指令,获取多个第三操作数据,其中,所述第四矩阵包括所述多个第三操作数据;将所述多个乘法运算结果和所述多个第三操作数据进行加法运算,以得到所述多个运算结果。
例如,在本公开至少一个实施例提供的数据处理方法中,所述矩阵运算用于实现将第一矩阵和第二矩阵进行乘法运算,基于所述矩阵运算指令,计算得到多个运算结果,包括:基于所述矩阵运算指令,获取多个第一操作数据和多个第二操作数据,其中,所述第一矩阵包括所述多个第一操作数据,所述第二矩阵包括所述多个第二操作数据;对所述多个第一操作数据和所述多个第二操作数据进行乘法运算,以得到所述多个运算结果。
例如,在本公开至少一个实施例提供的数据处理方法中,基于所述矩阵运算指令,获取多个第一操作数据和多个第二操作数据,包括:解析所述矩阵运算指令,以获取至少一个第一地址和至少一个第二地址;基于所述至少一个第一地址,确定至少一个第一向量寄存器;基于所述至少一个第二地址,确定至少一个第二向量寄存器;从所述至少一个第一向量寄存器中读取所述多个第一操作数据;从所述至少一个第二向量寄存器中读取所述多个第二操作数据。
例如,在本公开至少一个实施例提供的数据处理方法中,在所述至少一个第一向量寄存器包括多个第一向量寄存器的情况下,所述多个第一向量寄存器分别对应的多个地址索引是连续的,从所述至少一个第一向量寄存器中读取所述多个第一操作数据,包括:解析所述矩阵运算指令,以获取第一寄存器选择信息;基于所述第一寄存器选择信息,从所述多个第一向量寄存器中选择N2个第一向量寄存器,其中,N2为正整数且大于1;从所述N2个第一向量寄存器中读取所述多个第一操作数据。
例如,在本公开至少一个实施例提供的数据处理方法中,所述N2个第一向量寄存器分别对应的N2个地址索引不是完全连续的。
例如,在本公开至少一个实施例提供的数据处理方法中,基于所述第一寄存器选择信息,从所述多个第一向量寄存器中选择N2个第一向量寄存器,包括:响应于所述第一寄存器选择信息为第一操作选择信息,按照每间隔P3个地址索引选择一个第一向量寄存器的方式从所述多个第一向量寄存器中选择得到所述N2个第一向量寄存器,其中,P3为正整数且大于1;响应于所述第一寄存器选择信息为第二操作选择信息,按照每间隔P4个地址索引选择至少两个第一向量寄存器的方式从所述多个第一向量寄存器中选择得到T2个第一向量寄存器组,其中,每个第一向量寄存器组包括至少两个第一向量寄存器,将所述T2个第一向量寄存器组中的所有第一向量寄存器作为所述N2个第一向量寄存器,其中,T2和P4均为正整数,且P4大于1;响应于所述第一寄存器选择信息为第三操作选择信息,基于所述第三操作选择信息,从所述多个第一向量寄存器分别对应的多个地址索引中随机地选择得到N2个地址索引,从所述多个第一向量寄存器中选择得到与所述N2个地址索引一一对应的所述N2个第一向量寄存器。
例如,在本公开至少一个实施例提供的数据处理方法中,在所述至少一个第二向量寄存器包括多个第二向量寄存器的情况下,所述多个第二向量寄存器分别对应的多个地址索引是连续的,从所述至少一个第二向量寄存器中读取所述多个第二操作数据,包括:解析所述矩阵运算指令,以获取第二寄存器选择信息;基于所述第二寄存器选择信息,从所述多个第二向量寄存器中选择N3个第二向量寄存器,其中,N3为正整数且大于1;从所述N3个第二向量寄存器中读取所述多个第二操作数据。
例如,在本公开至少一个实施例提供的数据处理方法中,所述N3个第二向量寄存器分别对应的N3个地址索引不是完全连续的。
例如,在本公开至少一个实施例提供的数据处理方法中,基于所述第二寄存器选择信息,从所述多个第二向量寄存器中选择N3个第二向量寄存器,包括:响应于所述第二寄存器选择信息为第四操作选择信息,按照每间隔P5个地址索引选择一个第二向量寄存器的方式从所述多个第二向量寄存器中选择得到所述N3个第二向量寄存器,其中,P5为正整数且大于1;响应于所述第二寄存器选择信息为第五操作选择信息,按照每间隔P6个地址索引选择至少两个第二向量寄存器的方式从所述多个第二向量寄存器中选择得到T3个第二向量寄存器组,其中,每个第二向量寄存器组包括至少两个第二向量寄存器,将所述T3个第二向量寄存器组中的所有第二向量寄存器作为所述N3个第二向量寄存器,其中,T3和P6均为正整数,且P6大于1;响应于所述第二寄存器选择信息为第六操作选择信息,基于所述第六操作选择信息,从所述多个第二向量寄存器分别对应的多个地址索引中随机地选择得到N3个地址索引,从所述多个第二向量寄存器中选择得到与所述N3个地址索引一一对应的所述N3个第二向量寄存器。
例如,在本公开至少一个实施例提供的数据处理方法中,所述多个第一操作数据和所述多个第二操作数据基于同一条矩阵运算指令进行乘法运算。
例如,在本公开至少一个实施例提供的数据处理方法中,所述第一矩阵中的所有第一操作数据排列为多行至少一列,在所述第一矩阵中位于同一列的第一操作数据被写入到多个第一向量寄存器的情况下,所述多个第一向量寄存器对应的地址索引是连续的,所述第二矩阵中的所有第二操作数据排列为至少一行多列,在所述第二矩阵中位于同一行的第二操作数据被写入到多个第二向量寄存器的情况下,所述多个第二向量寄存器对应的地址索引是连续的。
例如,在本公开至少一个实施例提供的数据处理方法中,基于所述矩阵运算指令,计算得到多个运算结果,包括:基于所述矩阵运算指令对多个矩阵进行运算,以得到所述多个运算结果,其中,用于存储所述多个矩阵中的至少一个矩阵包括的操作数据的向量寄存器对应的地址索引不是完全连续的。
本公开至少一个实施例还提供一种数据处理方法,应用于矩阵运算,包括:获取矩阵运算指令,其中,所述矩阵运算指令包括:第一地址信息、第二地址信息、目的地址信息和操作控制码,所述操作控制码用于指示对所述目的地址信息指示的多个目的向量寄存器进行写入时的地址索引步进设置,所述多个目的向量寄存器进行写入时的地址索引步进设置用于指示从所述多个目的向量寄存器中选择得到的N1个目的向量寄存器的地址索引的编址方式,所述N1个目的向量寄存器分别对应的N1个地址索引不是完全连续的,N1为正整数且大于1;从所述第一地址信息指示的至少一个第一向量寄存器中读取进行所述矩阵运算的第一矩阵;从所述第二地址信息指示的至少一个第二向量寄存器中读取进行所述矩阵运算的第二矩阵;将所述第一矩阵与所述第二矩阵进行乘法运算得到第三矩阵,根据所述操作控制码将所述第三矩阵写入所述目的地址信息指示的所述多个目的向量寄存器中的N1个目的向量寄存器。
例如,在本公开至少一个实施例提供的数据处理方法中,在所述至少一个第一向量寄存器包括多个第一向量寄存器的情况下,所述操作控制码还用于指示对所述第一地址信息指示的所述多个第一向量寄存器进行读取时的地址索引步进设置,所述多个第一向量寄存器进行读取时的地址索引步进设置用于指示从所述多个第一向量寄存器中选择得到的N2个第一向量寄存器的地址索引的编址方式,N2为正整数且大于1。
例如,在本公开至少一个实施例提供的数据处理方法中,在所述至少一个第二向量寄存器包括多个第二向量寄存器的情况下,所述操作控制码还用于指示对所述第二地址信息指示的所述多个第二向量寄存器进行读取时的地址索引步进设置,所述多个第二向量寄存器进行读取时的地址索引步进设置用于指示从所述多个第二向量寄存器中选择得到的N3个第二向量寄存器的地址索引的编址方式,N3为正整数且大于1。
例如,在本公开至少一个实施例提供的数据处理方法中,所述矩阵运算指令还包括:第三地址信息,所述操作控制码还用于指示对所述第三地址信息指示的多个第三向量寄存器进行读取时的地址索引步进设置,所述多个第三向量寄存器进行读取时的地址索引步进设置用于指示从所述多个第三向量寄存器中选择得到的N4个第三向量寄存器的地址索引的编址方式,N4为正整数且大于1,根据所述操作控制码将所述第三矩阵写入所述目的地址信息指示的所述多个目的向量寄存器中的N1个目的向量寄存器,包括:从所述第三地址信息指示的所述多个第三向量寄存器中读取进行所述矩阵运算的第四矩阵;将所述第三矩阵中的数据与所述第四矩阵中的数据一一对应地进行加法运算,以得到多个运算结果;根据所述操作控制码将所述多个运算结果写入所述多个目的向量寄存器中的N1个目的向量寄存器。
本公开至少一个实施例还提供一种数据处理装置,应用于矩阵运算,所述数据处理装置包括:指令处理单元,用于获取并解析矩阵运算指令,以获取多个目的地址和目的寄存器选择信息;计算单元,用于基于所述矩阵运算指令,计算得到多个运算结果;寄存器确定单元,用于基于所述多个目的地址,确定多个目的向量寄存器;寄存器选择单元,用于基于所述目的寄存器选择信息,从所述多个目的向量寄存器中选择N1个目的向量寄存器,其中,所述多个目的向量寄存器分别对应的多个地址索引是连续的,所述N1个目的向量寄存器分别对应的N1个地址索引不是完全连续的,N1为正整数,且N1大于1;结果存储单元,用于将所述多个运算结果存储在所述N1个目的向量寄存器中。
本公开至少一个实施例还提供一种数据处理装置,应用于矩阵运算,数据处理装置包括:指令获取单元,用于获取矩阵运算指令,其中,所述矩阵运算指令包括:第一地址信息、第二地址信息、目的地址信息和操作控制码,所述操作控制码用于指示对所述目的地址信息指示的多个目的向量寄存器进行写入时的地址索引步进设置,所述多个目的向量寄存器进行写入时的地址索引步进设置用于指示从所述多个目的向量寄存器中选择得到的N1个目的向量寄存器的地址索引的编址方式,所述N1个目的向量寄存器分别对应的N1个地址索引不是完全连续的,N1为正整数且大于1;第一数据读取单元,用于从所述第一地址信息指示的至少一个第一向量寄存器中读取进行所述矩阵运算的第一矩阵;第二数据读取单元,用于从所述第二地址信息指示的至少一个第二向量寄存器中读取进行所述矩阵运算的第二矩阵;计算与写回单元,用于将所述第一矩阵与所述第二矩阵进行乘法运算得到第三矩阵,根据所述操作控制码将所述第三矩阵写入所述目的地址信息指示的所述多个目的向量寄存器中的N1个目的向量寄存器。
本公开至少一个实施例还提供一种数据处理设备,包括:处理器和存储器,存储器存储有计算机可执行指令,所述计算机可执行指令在被所述处理器执行时实现根据本公开任一实施例所述的数据处理方法。
本公开至少一个实施例还提供一种计算机可读存储介质,用于非瞬时性地存储计算机可执行指令,所述计算机可执行指令在被处理器执行时实现根据本公开任一实施例所述的数据处理方法。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1A为本公开一实施例提供的一种矩阵和向量寄存器之间存储关系的示意图;
图1B为本公开一实施例提供的另一种矩阵和向量寄存器之间存储关系的示意图;
图2为本公开至少一个实施例提供的一种数据处理方法的示意性流程图;
图3为本公开至少一个实施例提供的一种矩阵运算指令的格式的示意图;
图4A为本公开一实施例提供的又一种矩阵和向量寄存器之间存储关系的示意图;
图4B为本公开一实施例提供的再一种矩阵和向量寄存器之间存储关系的示意图;
图5为本公开另一些实施例提供的一种数据处理方法的示意性流程图;
图6A为本公开一些实施例提供的一种数据处理装置的示意图;
图6B为本公开一些实施例提供的另一种数据处理装置的示意图;
图7为本公开一实施例提供的一种数据处理设备的示意图;以及
图8为本公开至少一实施例提供的一种计算机可读存储介质的示意图。
具体实施方式
为了使得本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
在本说明书和附图中,根据实施例,元素以单数或复数的形式来描述。然而,单数和复数形式被适当地选择用于所提出的情况仅仅是为了方便解释而无意将本公开限制于此。因此,单数形式可以包括复数形式,并且复数形式也可以包括单数形式,除非上下文另有明确说明。
为了保持本公开实施例的以下说明清楚且简明,本公开省略了部分已知功能和已知部件的详细说明。
需要说明的是,在本公开中,“连续的多个向量寄存器”表示多个向量寄存器的地址索引是连续的。
GPU的处理单元通过执行矩阵运算指令来同时控制多个线程执行相同的操作,以实现矩阵读取、运算操作、结果存入等操作。在进行矩阵运算时,为了提高效率,越来越多的设计使用单条矩阵运算指令实现矩阵运算,通常的做法是在单条矩阵运算指令中,使用连续的多个向量寄存器(VREG,Vector Register)去存储矩阵的数据,即在某条矩阵指令中,通常采用连续的多个VREG存储矩阵。例如,如果一个VREG可以存储64个元素,那么存储一个尺寸为16*16的矩阵(即该矩阵包括16*16个数据)就需要使用4个连续的VREG。由于在单条矩阵运算指令中通常采用连续的VREG进行数据的读取或写入,在进行矩阵运算时,通常需要采用多条读/写指令以实现对矩阵的数据的读取和写入,指令数量较多,效率较低。
下面通过两个例子简单地说明现有的矩阵运算的实现过程,第一个例子是单精度浮点数的矩阵乘加运算,第二个例子是双精度浮点数的矩阵乘加运算。
图1A为本公开一实施例提供的一种矩阵和向量寄存器之间存储关系的示意图;图1B为本公开一实施例提供的另一种矩阵和向量寄存器之间存储关系的示意图。
需要说明的是,在图1A和图1B中,每个矩形块用于表示矩阵中的一个数据。
在第一个例子中,如图1A所示,矩阵A和矩阵B中的每个数据为单精度浮点类型的数据,即矩阵A和矩阵B中的每个数据包括32比特(bit,binary digit),矩阵A包括矩阵块A0和包括矩阵块A1,矩阵A和矩阵B进行乘法运算以得到乘法运算结果,乘法运算结果加上矩阵C的初始数据以得到最终的矩阵C,最终的矩阵C包括矩阵块C0和矩阵块C1。
例如,矩阵块A0和矩阵B进行乘法运算并加上矩阵块C0的初始数据,则可以得到进行乘加运算之后的矩阵块C0,即C0+=A0*B(即C0=A0*B+C0),乘加运算C0+=A0*B可以由一个线程束实现。假设每个VREG是一个可以存储16个32bit的标量元素的向量寄存器,如图1A所示,以矩阵块A0的尺寸是16*4,矩阵B的尺寸为4*16,矩阵块C0的尺寸为16*16为例,那么,可以使用连续的4个向量寄存器R[80:83](即R80、R81、R82、R83)存储矩阵块A0,使用连续的4个向量寄存器R[90:93](即R90、R91、R92、R93)存储矩阵B,使用连续的16个向量寄存器R[0:15](即R[0:3]、R[4:7]、R[8:11]、R[12:15])存储矩阵块C0。R[0:3]可以表示R0、R1、R2和R3。例如,如图1A所示,实现矩阵乘加运算C0+=A0*B的矩阵乘加指令的汇编形式为:mat16*16*4_muladd_fp32,R[0:15],R[80:83],R[90:93],R[0:15]。
对于更大尺寸的矩阵乘加运算,可以采用多条矩阵乘加指令实现。如图1A所示,矩阵A的尺寸为32*4,矩阵B的尺寸为4*16时,矩阵块A0和矩阵B进行乘法运算并加上矩阵块C0的初始数据,则可以得到矩阵块C0,即C0+=A0*B;矩阵块A1和矩阵B进行乘法运算并加上矩阵块C1的初始数据,则得到矩阵块C1,即C1+=A1*B(即C1=A1*B+C1)。乘加运算C0+=A0*B和乘加运算C1+=A1*B可以分别由两个线程束实现。例如,可以使用连续的4个向量寄存器R[84:87]存储矩阵块A1,使用连续的16个向量寄存器R[16:31]存储矩阵块C1。如图1A所示,实现矩阵乘加运算C1+=A1*B的矩阵乘加指令的汇编形式为:mat16*16*4_muladd_fp32,R[16:31],R[84:87],R[90:93],R[16:31]。也就是说,可以采用两条矩阵乘加指令实现图1A所示的矩阵乘加运算C+=A*B。
需要说明的是,存储矩阵C的初始数据的向量寄存器和存储进行乘加运算之后得到的矩阵C的数据的向量寄存器是相同的,例如,均为图1A所示的向量寄存器R[0:31]。
当矩阵C是以列方向进行线性存储时,向量寄存器R0存储的数据和向量寄存器R16存储的数据在内存(例如,DDR:Double-Data-Rate Synchronous Dynamic Random-AccessMemory,双倍速同步动态随机存取内存)中是连续存放的,对于图1A所示的数据排列方式,需要使用两条指令实现将数据读取或写入向量寄存器R0和向量寄存器R16。
在第二个例子中,如图1B所示,矩阵A和矩阵B中的每个数据为双精度浮点类型的数据,即矩阵A和矩阵B中的每个数据包括64bit,矩阵A包括矩阵块A0和包括矩阵块A1,矩阵A和矩阵B进行乘法运算以得到乘法运算结果,乘法运算结果加上矩阵C的初始数据以得到最终的矩阵C,最终的矩阵C包括矩阵块C0和包括矩阵块C1。假设每个VREG是一个可以存储16个32bit的标量元素的向量寄存器,由于矩阵A、矩阵B和矩阵C中的数据是双精度浮点类型的数据,即具有64bit,因此,每个VREG只能存储8个双精度浮点类型的数据。
例如,如图1B所示,以矩阵块A0的尺寸是16*4,矩阵B的尺寸为4*16,矩阵块C0的尺寸为16*16为例,那么,可以使用连续的8个向量寄存器R[70:77]存储矩阵块A0,使用连续的8个向量寄存器R[90:97]存储矩阵B,使用连续的32个向量寄存器R[0:31](即R[0:7]、R[8:15]、R[16:23]、R[24:31])存储矩阵块C0。如图1B所示,矩阵B的第一行的数据存储在向量寄存器R[90:91]中,矩阵B的第二行的数据存储在向量寄存器R[92:93]中,矩阵B的第三行的数据存储在向量寄存器R[94:95]中,矩阵B的第四行的数据存储在向量寄存器R[96:97]中。
例如,如图1B所示,实现矩阵乘加运算C0+=A0*B的矩阵乘加指令的汇编形式为:mat16*16*4_muladd_fp64,R[0:31],R[70:77],R[90:97],R[0:31]。
对于更大尺寸的矩阵乘加运算,可以采用多条矩阵乘加指令实现。如图1B所示,矩阵A的尺寸为32*4,矩阵B的尺寸为4*16时,矩阵块A0和矩阵B进行乘法运算并加上矩阵块C0的初始数据,则可以得到矩阵块C0,即C0+=A0*B;矩阵块A1和矩阵B进行乘法运算并加上矩阵块C1的初始数据,则得到矩阵块C1,即C1+=A1*B。乘加运算C0+=A0*B和乘加运算C1+=A1*B可以分别由两个线程束实现。例如,可以使用连续的8个向量寄存器R[78:85]存储矩阵块A1,使用连续的32个向量寄存器R[32:63]存储矩阵块C1。如图1B所示,实现矩阵乘加运算C1+=A1*B的矩阵乘加指令的汇编形式为:mat16*16*4_muladd_fp64,R[32:63],R[78:85],R[90:97],R[32:63]。也就是说,可以采用两条矩阵乘加指令实现图1B所示的矩阵运算C+=A*B。
在上述第一个例子和第二个例子中,需要采用8条读取指令(即load指令,Vec16_load_b32或者Vec16_load_b64)实现将矩阵A的数据从内存中读出并写入向量寄存器中,需要采用4条读取指令实现将矩阵B的数据从内存中读出并写入向量寄存器中,需要采用32条读取指令实现将矩阵C的初始数据从内存中读出并写入向量寄存器中,在执行完矩阵乘加运算之后,还需要采用32条回写指令(即store指令,Vec16_store_b32或者Vec16_store_b64)实现将计算得到的矩阵C的数据写入内存中,指令数量较多,运行时间较长,效率较低。
本公开至少一个实施例提供一种数据处理方法。该数据处理方法应用于矩阵运算,且包括:获取并解析矩阵运算指令,以获取多个目的地址和目的寄存器选择信息;基于矩阵运算指令,计算得到多个运算结果;基于多个目的地址,确定多个目的向量寄存器;基于目的寄存器选择信息,从多个目的向量寄存器中选择N1个目的向量寄存器,其中,多个目的向量寄存器分别对应的多个地址索引是连续的,N1个目的向量寄存器分别对应的N1个地址索引不是完全连续的,N1为正整数,且N1大于1;将多个运算结果存储在N1个目的向量寄存器中。
本公开的实施例提供的数据处理方法通过在矩阵运算指令中加入选择信息(例如,目的寄存器选择信息),从而在单条矩阵运算指令中就可以使用地址索引不连续的多个向量寄存器的来存储矩阵,使得矩阵指令的易用性和灵活性更好,减少在执行矩阵运算时读取指令和回写指令的数量,减少了数据的读取和回写次数,降低了功耗,提升矩阵运算的效率。
本公开至少一个实施例还提供一种对应于上述数据处理方法的数据处理装置、数据处理设备和计算机可读存储介质。
下面结合附图对本公开的实施例进行详细说明,但是本公开并不限于这些具体的实施例。
图2为本公开至少一个实施例提供的一种数据处理方法的示意性流程图,图3为本公开至少一个实施例提供的一种矩阵运算指令的格式的示意图。
本公开的一些实施例提供一种数据处理方法,该数据处理方法应用于矩阵运算。
如图2所示,该数据处理方法包括以下步骤S10~S14。
步骤S10:获取并解析矩阵运算指令,以获取多个目的地址和目的寄存器选择信息。
步骤S11:基于矩阵运算指令,计算得到多个运算结果。
步骤S12:基于多个目的地址,确定多个目的向量寄存器。
步骤S13:基于目的寄存器选择信息,从多个目的向量寄存器中选择N1个目的向量寄存器。例如,多个目的向量寄存器分别对应的多个地址索引是连续的,例如,当多个目的向量寄存器分别对应的多个地址索引从Z0开始编号,则可以逐次增加1,以得到多个目的向量寄存器分别对应的多个地址索引,即多个目的向量寄存器分别对应的多个地址索引可以为Z0、Z0+1、Z0+2、Z0+3、Z0+4、…。Z0可以为自然数,N1个目的向量寄存器分别对应的N1个地址索引不是完全连续的。N1为正整数且大于1。
步骤S14:将多个运算结果存储在N1个目的向量寄存器中。
例如,在一些实施例中,矩阵运算可以包括矩阵乘加运算,矩阵乘加运算用于实现将第一矩阵和第二矩阵进行乘法运算,以得到第三矩阵,然后将第三矩阵中的数据与第四矩阵中的数据一一对应地进行加法运算,以得到多个运算结果。例如,第三矩阵的尺寸和第四矩阵的尺寸是相同的。在另一些实施例中,矩阵运算可以包括矩阵乘法运算,矩阵乘法运算用于实现将第一矩阵和第二矩阵进行乘法运算,以得到第三矩阵,第三矩阵中的数据即为多个运算结果。
需要说明的是,第四矩阵中的数据即为上面描述的矩阵C的初始数据。
例如,在步骤S10中,矩阵运算指令可以包括多个目的地址和目的寄存器选择信息等信息,首先可以从指令高速缓存器中取出矩阵运算指令,然后解析矩阵运算指令即可得到多个目的地址和目的寄存器选择信息。
下面结合图3详细描述矩阵运算指令。
例如,如图3所示,每条矩阵运算指令的长度可以为64比特,每条矩阵运算指令包括第一地址信息、第二地址信息、目的地址信息和操作控制码RSTEP,第一地址信息用于指示存储第一矩阵的至少一个第一向量寄存器的地址,第二地址信息用于指示存储第二矩阵的至少一个第二向量寄存器的地址,目的地址信息用于指示存储多个运算结果的至少一个目的向量寄存器的地址,当至少一个目的向量寄存器包括多个目的向量寄存器时,操作控制码用于指示对目的地址信息指示的多个目的向量寄存器进行写入时的地址索引步进设置。如图3所示,每条矩阵运算指令还可以包括操作码OpCode和第三地址信息,操作码用于指示矩阵运算指令的类型,例如,通过将矩阵运算指令中的操作码设置为指示乘加运算的相应值,该矩阵运算指令即为矩阵乘加指令。第三地址信息用于指示存储第四矩阵的至少一个第三向量寄存器的地址。需要说明的是,在本公开的实施例中,以矩阵运算为矩阵乘加运算/矩阵乘法运算,矩阵运算指令为矩阵乘加指令/矩阵乘法指令为例详细描述本公开提供的数据处理方法。
需要说明的是,第四矩阵的数据从内存中读取之后可以被存储到至少一个第三向量寄存器。第三向量寄存器和目的向量寄存器可以为同一个向量寄存器,也可以为不同的向量寄存器,本公开对此不作限定。在本公开的实施例中,以第三向量寄存器和目的向量寄存器为同一个向量寄存器为例进行说明。
例如,矩阵运算指令中的目的地址信息即表示多个目的地址,矩阵运算指令中的操作控制码包括目的寄存器选择信息。目的寄存器选择信息用于指示对目的地址信息指示的多个目的向量寄存器进行写入时的地址索引步进设置。
例如,如图3所示,在每条矩阵运算指令中,第0至7比特(即比特[7:0],一共8位)用于存储第一地址信息,第8至15比特(即比特[15:8],一共8位)用于存储第二地址信息,第16至23比特(即比特[23:16])用于存储第三地址信息,第24至31比特(即比特[31:24],一共8位)用于存储目的地址信息,第32至47比特(即比特[47:32],一共16位)用于存储操作控制码RSTEP,第48至63比特(即比特[63:48],一共16位)用于存储操作码OpCode。需要说明的是,在另一些实施例中,每条矩阵运算指令还可以设置多个比特作为保留字段,以用于实现其他功能,例如,第32至39比特(即比特[39:32],一共8位)用于存储操作控制码RSTEP,第40至55比特(即比特[55:40],一共16位)用于存储操作码OpCode,而第56至63比特则可以作为保留字段。
下表1示出了图3所示的矩阵运算指令中各个比特的含义的一种示例。
需要说明的是,表1仅示出了操作码的一些示例,本公开包括但不限于此,可以根据实际情况设置操作码的具体值及其指示的功能等。
例如,在本公开的实施例中,“地址索引步进设置”可以表示设置向量寄存器的地址索引的编址方式。
下表2示出了图3所示的操作控制码RSTEP中各个比特的含义的一种示例。
需要说明的是,表2仅示出了操作控制码的一些示例,本公开包括但不限于此,可以根据实际情况设置操作控制码的具体值及其指示的功能等。在上述表2中,N、M、L和K均自然数。
例如,参见上述表2,操作控制码可以包括RSTEP_A、RSTEP_B、RSTEP_C和RSTEP_D。
例如,参见上述表2,第32至35比特用于表示RSTEP_A,RSTEP_A用于指示存储第一矩阵的多个第一向量寄存器的地址索引的编址方式。第36至39比特用于表示RSTEP_B,RSTEP_B用于指示存储第二矩阵的多个第二向量寄存器的地址索引的编址方式。第40至43比特用于表示RSTEP_C,RSTEP_C用于指示存储第四矩阵的多个第三向量寄存器的地址索引的编址方式。第44至47比特用于表示RSTEP_D,RSTEP_D用于指示存储多个运算结果的多个目的向量寄存器的地址索引的编址方式。
下面以RSTEP_A为例进行详细说明,下面对应RSTEP_A的描述,在不矛盾的情况下,也适用于RSTEP_B、RSTEP_C和RSTEP_D。
例如,通过设置RSTEP_A的具体值及其对应的功能,可以实现对第一向量寄存器的地址索引进行间接编址,使得在同一条矩阵运算指令中,可以采用不连续的多个第一向量寄存器(即多个第一向量寄存器对应的多个地址索引不连续)存储数据或者从不连续的多个第一向量寄存器中读取数据。
当RSTEP_A的值为0时,表示用于存储第一矩阵的多个第一向量寄存器的地址索引连续编址,即多个第一向量寄存器分别对应的多个地址索引是连续的,例如,多个第一向量寄存器分别对应的多个地址索引为Src1[R(N),R(N+1),R(N+2)…]。
当RSTEP_A的值为1时,表示用于存储第一矩阵的多个第一向量寄存器的地址索引按照每间隔2的方式离散编址,即多个第一向量寄存器分别对应的多个地址索引不是连续的,相邻两个第一向量寄存器(例如,R(N)和R(N+2)为相邻两个第一向量寄存器)的地址索引之差为2,例如,多个第一向量寄存器分别对应的多个地址索引为Src1[R(N),R(N+2),R(N+4)…]。
当RSTEP_A的值为2时,表示用于存储第一矩阵的多个第一向量寄存器的地址索引按照每间隔4的方式离散编址,即多个第一向量寄存器分别对应的多个地址索引不是连续的,相邻两个第一向量寄存器(例如,R(N)和R(N+4)为相邻两个第一向量寄存器)的地址索引之差为4,例如,多个第一向量寄存器分别对应的多个地址索引为Src1[R(N),R(N+4),R(N+8)…]。
当RSTEP_A的值为4时,表示用于存储第一矩阵的多个第一向量寄存器的地址索引成对连续编址,此时,多个第一向量寄存器包括多个第一向量寄存器组,每个第一向量寄存器组包括两个第一向量寄存器,多个第一向量寄存器分别对应的多个地址索引是连续的,然而,每个第一向量寄存器组共同用于存储数据。例如,当第一向量寄存器是一个可以存储32个32bit的标量元素的向量寄存器,而需要存储的每个数据均具有64bit,则此时可以采用一个第一向量寄存器组(两个第一向量寄存器)存储32个具有64bit的数据,一个第一向量寄存器组中的一个第一向量寄存器用于存储每个数据的高32bit,一个第一向量寄存器组中的另一个第一向量寄存器用于存储每个数据的低32bit。例如,多个第一向量寄存器分别对应的多个地址索引为Src1[R(N,N+1),R(N+2,N+3),R(N+4,N+5)…],对于一个第一向量寄存器组R(N)和R(N+1),第一向量寄存器R(N)用于存储数据的高32bit,而第一向量寄存器R(N+1)用于存储数据的低32bit。
当RSTEP_A的值为5时,表示用于存储第一矩阵的多个第一向量寄存器的地址索引按照每间隔4的方式成对离散编址,此时,多个第一向量寄存器包括多个第一向量寄存器组,每个第一向量寄存器组包括两个第一向量寄存器,每个第一向量寄存器组中的两个第一向量寄存器对应的两个地址索引是连续的,多个第一向量寄存器对应的多个地址索引是不完全连续的(即部分连续,部分不连续)。例如,多个第一向量寄存器分别对应的多个地址索引为Src1[R(N,N+1),R(N+4,N+5),R(N+8,N+9)…],相邻两第一向量寄存器组(例如,第一向量寄存器组R(N)和R(N+1)和第一向量寄存器组R(N+4)和R(N+5))的地址索引之差(即第一向量寄存器组R(N)和R(N+1)对应的地址索引中的最小值(即N)和第一向量寄存器组R(N+4)和R(N+5)对应的地址索引中的最小值(即N+4)之差)为4。例如,第一向量寄存器R(N)对应的地址索引和第一向量寄存器R(N+1)对应的地址索引是连续的,第一向量寄存器R(N+1)对应的地址索引和第一向量寄存器R(N+4)对应的地址索引是不连续的。
需要说明的是,本公开包括但不限于上述RSTEP_A的值及其对应的功能,在一些实施例中,RSTEP_A的值为6时,可以表示多个第一向量寄存器对应的地址索引是随机值,等等。多个第一向量寄存器的地址索引按照每间隔数值G1的方式离散编址,G1可以为上述示例中的2或4,还可以为其他值,G1可以根据实际情况设置;此外,多个第一向量寄存器的地址索引按照每间隔数值G2的方式成对离散编址,G2可以为上述示例中的4,还可以为其他值,G2可以根据实际情况设置。地址索引之间的间隔数值可以根据实际情况由用户设置。又例如,每个第一向量寄存器组也可以包括多个(例如,3个、4个等)第一向量寄存器,或者,多个第一向量寄存器组分别对应的多个第一向量寄存器数量(即每个第一向量寄存器数量表示对应的第一向量寄存器组中的第一向量寄存器的数量)可以至少部分不相同,例如,在一些示例中,一个第一向量寄存器组可以包括2个第一向量寄存器,另一个第一向量寄存器组可以包括3个第一向量寄存器等,每个第一向量寄存器组对应的第一向量寄存器数量可以根据实际情况由用户设定。
例如,操作控制码中的RSTEP_D即表示目的寄存器选择信息。
图4A为本公开一实施例提供的又一种矩阵和向量寄存器之间存储关系的示意图;图4B为本公开一实施例提供的再一种矩阵和向量寄存器之间存储关系的示意图。
例如,在图4A和图4B所示,每个向量寄存器可以存储16个数据,每个数据具有32bit。在图4A中,矩阵A中的每个数据具有32bit,矩阵B中的每个数据具有32bit,矩阵C中的每个数据具有32bit,例如,图4A中的每个数据可以为单精度浮点类型的数据;而在图4B中,矩阵A中的每个数据具有64bit,矩阵B中的每个数据具有64bit,矩阵C中的每个数据具有64bit,例如,图4B中的每个数据可以为双精度浮点类型的数据。
例如,在一些实施例中,矩阵运算指令为矩阵乘法指令,步骤S11可以包括:基于矩阵运算指令,获取多个第一操作数据和多个第二操作数据;对多个第一操作数据和多个第二操作数据进行乘法运算,以得到多个运算结果。
例如,多个第一操作数据和多个第二操作数据基于同一条矩阵运算指令(即矩阵乘法指令)进行乘法运算。例如,多个第一操作数据和多个第二操作数据的乘法运算可以由同一个线程束执行。
例如,在另一些实施例中,矩阵运算指令为矩阵乘加指令,步骤S11可以包括:基于矩阵运算指令,获取多个第一操作数据和多个第二操作数据;对多个第一操作数据和多个第二操作数据进行乘法运算,以得到多个乘法运算结果;基于矩阵运算指令,获取多个第三操作数据;将多个乘法运算结果和多个第三操作数据进行加法运算,以得到多个运算结果。
例如,多个第一操作数据、多个第二操作数据和多个第三操作数据基于同一条矩阵运算指令(即矩阵乘加指令)进行乘加运算。例如,多个第一操作数据、多个第二操作数据和多个第三操作数据的乘加运算可以由同一个线程束执行。
例如,第三矩阵包括多个乘法运算结果。
例如,第一矩阵包括多个第一操作数据,第二矩阵包括多个第二操作数据,第四矩阵包括多个第三操作数据。如图4A和图4B所示,第一矩阵可以为矩阵A,第二矩阵可以为矩阵B,第四矩阵可以为矩阵C,第一矩阵A包括矩阵块A0和矩阵块A1,第四矩阵C包括矩阵块C0和矩阵块C1。第一矩阵A可以包括32*4个第一操作数据,第二矩阵B可以包括4*16个第二操作数据,第四矩阵C可以包括32*16个第三操作数据。
例如,在一个实施例中,在步骤S11中,基于矩阵运算指令,获取多个第一操作数据和多个第二操作数据,包括:解析矩阵运算指令,以获取至少一个第一地址和至少一个第二地址;基于至少一个第一地址,确定至少一个第一向量寄存器;基于至少一个第二地址,确定至少一个第二向量寄存器;从至少一个第一向量寄存器中读取多个第一操作数据;从至少一个第二向量寄存器中读取多个第二操作数据。
例如,矩阵运算指令中的第一地址信息表示至少一个第一地址,矩阵运算指令中的第二地址信息表示至少一个第二地址。至少一个第一地址与至少一个第一向量寄存器一一对应,第一地址可以表示对应的第一向量寄存器的真实物理地址;至少一个第二地址与至少一个第二向量寄存器一一对应,第二地址可以表示对应的第二向量寄存器的真实物理地址。
例如,在一个实施例中,在步骤S11中,基于矩阵运算指令,获取多个第三操作数据,包括:解析矩阵运算指令,以获取至少一个第三地址;基于至少一个第三地址,确定至少一个第三向量寄存器;从至少一个第三向量寄存器中读取多个第三操作数据。
例如,矩阵运算指令中的第三地址信息表示至少一个第三地址。至少一个第三地址与至少一个第三向量寄存器一一对应,第三地址可以表示对应的第三向量寄存器的真实物理地址。
例如,每个第一向量寄存器用于存储至少一个第一操作数据,每个第二向量寄存器用于存储至少一个第二操作数据。如图4A所示,向量寄存器R80~向量寄存器R87均为第一向量寄存器,向量寄存器R90~向量寄存器R93均为第二向量寄存器,每个第一向量寄存器用于存储16个第一操数据,且该16个第一操数据位于同一列,例如,第一向量寄存器R80用于存储位于矩阵块A0的第一列的16个第一操作数据,第一向量寄存器R82用于存储位于矩阵块A0的第二列的16个第一操作数据,第一向量寄存器R84用于存储位于矩阵块A0的第三列的16个第一操作数据,第一向量寄存器R86用于存储位于矩阵块A0的第四列的16个第一操作数据,第一向量寄存器R81用于存储位于矩阵块A1的第一列的16个第一操作数据,第一向量寄存器R83用于存储位于矩阵块A1的第二列的16个第一操作数据,第一向量寄存器R85用于存储位于矩阵块A1的第三列的16个第一操作数据,第一向量寄存器R87用于存储位于矩阵块A1的第四列的16个第一操作数据。每个第二向量寄存器用于存储16个第二操数据,且该16个第二操数据位于同一行,例如,第二向量寄存器R90用于存储位于矩阵B的第一行的16个第二操作数据,第二向量寄存器R91用于存储位于矩阵B的第二行的16个第二操作数据,第二向量寄存器R92用于存储位于矩阵B的第三行的16个第二操作数据,第二向量寄存器R93用于存储位于矩阵B的第四行的16个第二操作数据。
例如,每个第三向量寄存器用于存储至少一个第三操作数据,如图4A所示,向量寄存器R0~向量寄存器R31均为第三向量寄存器,每个第三向量寄存器用于存储16个第三操数据,且该16个第三操数据位于同一列。
例如,在一些实施例中,在至少一个第一向量寄存器包括多个第一向量寄存器的情况下,多个第一向量寄存器分别对应的多个地址索引是连续的,例如,当多个第一向量寄存器分别对应的多个地址索引从Z1开始编号,则可以逐次增加1,以得到多个第一向量寄存器分别对应的多个地址索引,即多个第一向量寄存器分别对应的多个地址索引可以为Z1、Z1+1、Z1+2、Z1+3、Z1+4、…。Z1可以为自然数。
例如,在步骤S11中,从至少一个第一向量寄存器中读取多个第一操作数据,包括:解析矩阵运算指令,以获取第一寄存器选择信息;基于第一寄存器选择信息,从多个第一向量寄存器中选择N2个第一向量寄存器;从N2个第一向量寄存器中读取多个第一操作数据。例如,N2为正整数,且N2大于1。
例如,操作控制码中的RSTEP_A即表示第一寄存器选择信息。
例如,在一些实施例中,N2个第一向量寄存器分别对应的N2个地址索引不是完全连续的。也就是说,参与矩阵运算的第一矩阵中的多个第一操作数据可以不连续存储。又例如,在另一些实施例中,N2个第一向量寄存器分别对应的N2个地址索引可以是连续的。
例如,在一些实施例中,在步骤S11中,基于第一寄存器选择信息,从多个第一向量寄存器中选择N2个第一向量寄存器,包括:响应于第一寄存器选择信息为第一操作选择信息,按照每间隔P3个地址索引选择一个第一向量寄存器的方式从多个第一向量寄存器中选择得到N2个第一向量寄存器。此时,N2个第一向量寄存器对应的N2个地址索引可以为N、N+P3、N+2*P3、…。
例如,P3为正整数且大于1。参考表2,当第一寄存器选择信息RSTEP_A的值为1或2时,第一寄存器选择信息为第一操作选择信息。
例如,在另一些实施例中,在步骤S11中,基于第一寄存器选择信息,从多个第一向量寄存器中选择N2个第一向量寄存器,包括:响应于第一寄存器选择信息为第二操作选择信息,按照每间隔P4个地址索引选择至少两个第一向量寄存器的方式从多个第一向量寄存器中选择得到T2个第一向量寄存器组,将T2个第一向量寄存器组中的所有第一向量寄存器作为N2个第一向量寄存器。
例如,T2和P4均为正整数,且P4大于1。参考表2,当第一寄存器选择信息RSTEP_A的值为4或5时,第一寄存器选择信息为第二操作选择信息。
例如,每个第一向量寄存器组包括至少两个第一向量寄存器,例如,每个第一向量寄存器组包括的至少两个第一向量寄存器对应的地址索引是连续的,例如,一个第一向量寄存器组中的三个第一向量寄存器分别为R[N]、R[N+1]、R[N+2],此时,该三个第一向量寄存器分别对应的三个地址索引为N、N+1和N+2,其是连续的。又例如,每个第一向量寄存器组包括的至少两个第一向量寄存器对应的地址索引不是完全连续的,例如,一个第一向量寄存器组中的三个第一向量寄存器分别为R[N]、R[N+2]、R[N+4],此时,该三个第一向量寄存器分别对应的三个地址索引为N、N+2和N+4,其不是连续的。
例如,在一些示例中,当每个第一向量寄存器组包括两个第一向量寄存器,且该两个第一向量寄存器对应的两个地址索引是连续的时,N2个第一向量寄存器对应的N2个地址索引可以为[N,N+1]、[N+P4,N+P4+1]、[N+2*P4,N+2*P4+1]、…;当每个第一向量寄存器组包括三个第一向量寄存器,且该三个第一向量寄存器对应的两个地址索引是连续的时,P4大于等于3,N2个第一向量寄存器对应的N2个地址索引可以为[N,N+1,N+2]、[N+P4,N+P4+1,N+P4+2]、[N+2*P4,N+2*P4+1,N+2*P4+2]、…;依次类推。
例如,在另一些实施例中,在步骤S11中,基于第一寄存器选择信息,从多个第一向量寄存器中选择N2个第一向量寄存器,包括:响应于第一寄存器选择信息为第三操作选择信息,基于第三操作选择信息,从多个第一向量寄存器分别对应的多个地址索引中随机地选择得到N2个地址索引,从多个第一向量寄存器中选择得到与N2个地址索引一一对应的N2个第一向量寄存器。
例如,N2个地址索引可以为在多个第一向量寄存器分别对应的多个地址索引确定的数值范围内的随机值。
例如,在另一些实施例中,第三操作选择信息可以包括由用户预先设置的N2个地址索引,此时,N2个地址索引也可以不为随机值,而由用户自定义。
例如,在一些实施例中,在至少一个第二向量寄存器包括多个第二向量寄存器的情况下,多个第二向量寄存器分别对应的多个地址索引是连续的,例如,当多个第二向量寄存器分别对应的多个地址索引从Z2开始编号,则可以逐次增加1,以得到多个第二向量寄存器分别对应的多个地址索引,即多个第二向量寄存器分别对应的多个地址索引可以为Z2、Z2+1、Z2+2、Z2+3、Z2+4、…。Z2可以为自然数。
例如,在步骤S11中,从至少一个第二向量寄存器中读取多个第二操作数据,包括:解析矩阵运算指令,以获取第二寄存器选择信息;基于第二寄存器选择信息,从多个第二向量寄存器中选择N3个第二向量寄存器;从N3个第二向量寄存器中读取多个第二操作数据。例如,N3为正整数,且N3大于1。
例如,操作控制码中的RSTEP_B即表示第二寄存器选择信息。
例如,在一些实施例中,N3个第二向量寄存器分别对应的N3个地址索引不是完全连续的。也就是说,参与矩阵运算的第二矩阵中的多个第二操作数据可以不连续存储。又例如,在另一些实施例中,N3个第二向量寄存器分别对应的N3个地址索引可以是连续的。
例如,在一些实施例中,在步骤S11中,基于第二寄存器选择信息,从多个第二向量寄存器中选择N3个第二向量寄存器,包括:响应于第二寄存器选择信息为第四操作选择信息,按照每间隔P5个地址索引选择一个第二向量寄存器的方式从多个第二向量寄存器中选择得到N3个第二向量寄存器。此时,N3个第二向量寄存器对应的N3个地址索引可以为M、M+P5、M+2*P5、…。
例如,P5为正整数且大于1。参考表2,当第二寄存器选择信息RSTEP_B的值为1或2时,第二寄存器选择信息为第四操作选择信息。
例如,在一些实施例中,在步骤S11中,基于第二寄存器选择信息,从多个第二向量寄存器中选择N3个第二向量寄存器,包括:响应于第二寄存器选择信息为第五操作选择信息,按照每间隔P6个地址索引选择至少两个第二向量寄存器的方式从多个第二向量寄存器中选择得到T3个第二向量寄存器组,将T3个第二向量寄存器组中的所有第二向量寄存器作为N3个第二向量寄存器。
例如,T3和P6均为正整数,且P6大于1。参考表2,当第二寄存器选择信息RSTEP_B的值为4或5时,第二寄存器选择信息为第五操作选择信息。
例如,每个第二向量寄存器组包括至少两个第二向量寄存器,每个第二向量寄存器组包括的至少两个第二向量寄存器对应的地址索引可以是连续的,也可以不是完全连续的。
例如,在一些示例中,当每个第二向量寄存器组包括两个第二向量寄存器,且该两个第二向量寄存器对应的两个地址索引是连续的时,N3个第二向量寄存器对应的N3个地址索引可以为[M,M+1]、[M+P6,M+P6+1]、[M+2*P6,M+2*P6+1]、…;当每个第二向量寄存器组包括三个第二向量寄存器,且该三个第二向量寄存器对应的两个地址索引是连续的时,P6大于等于3,N3个第二向量寄存器对应的N3个地址索引可以为[M,M+1,M+2]、[M+P6,M+P6+1,M+P6+2]、[M+2*P6,M+2*P6+1,M+2*P6+2]、…;依次类推。
例如,在一些实施例中,在步骤S11中,基于第二寄存器选择信息,从多个第二向量寄存器中选择N3个第二向量寄存器,包括:响应于第二寄存器选择信息为第六操作选择信息,基于第六操作选择信息,从多个第二向量寄存器分别对应的多个地址索引中随机地选择得到N3个地址索引,从多个第二向量寄存器中选择得到与N3个地址索引一一对应的N3个第二向量寄存器。
例如,N3个地址索引可以为在多个第二向量寄存器分别对应的多个地址索引确定的数值范围内的随机值。
例如,在另一些实施例中,第六操作选择信息可以包括由用户预先设置的N3个地址索引,此时,N3个地址索引也可以不为随机值,而由用户自定义。
例如,在一些实施例中,在至少一个第三向量寄存器包括多个第三向量寄存器的情况下,多个第三向量寄存器分别对应的多个地址索引是连续的。
例如,在步骤S11中,从至少一个第三向量寄存器中读取多个第三操作数据,包括:解析矩阵运算指令,以获取第三寄存器选择信息;基于第三寄存器选择信息,从多个第三向量寄存器中选择N4个第三向量寄存器;从N4个第三向量寄存器中读取多个第三操作数据。例如,N4为正整数,且N4大于1。
例如,操作控制码中的RSTEP_C即表示第三寄存器选择信息。
例如,在一些实施例中,N4个第三向量寄存器分别对应的N4个地址索引不是完全连续的。又例如,在另一些实施例中,N4个第三向量寄存器分别对应的N4个地址索引可以是连续的。
例如,在一些实施例中,在步骤S11中,基于第三寄存器选择信息,从多个第三向量寄存器中选择N4个第三向量寄存器,包括:响应于第三寄存器选择信息为第七操作选择信息,按照每间隔P7个地址索引选择一个第三向量寄存器的方式从多个第三向量寄存器中选择得到N4个第三向量寄存器;或者,响应于第三寄存器选择信息为第八操作选择信息,按照每间隔P8个地址索引选择至少两个第三向量寄存器的方式从多个第三向量寄存器中选择得到T4个第三向量寄存器组,将T4个第三向量寄存器组中的所有第三向量寄存器作为N4个第三向量寄存器;或者,响应于第三寄存器选择信息为第九操作选择信息,基于第九操作选择信息,从多个第三向量寄存器分别对应的多个地址索引中随机地选择得到N4个地址索引,从多个第三向量寄存器中选择得到与N4个地址索引一一对应的N4个第三向量寄存器。
例如,每个第三向量寄存器组包括的至少两个第三向量寄存器对应的地址索引可以是连续的,也可以不是完全连续的。
例如,在另一些实施例中,步骤S11可以包括:基于矩阵运算指令对多个矩阵进行运算(乘加运算或乘法运算等),以得到多个运算结果。例如,多个矩阵可以为至少两个矩阵,当多个矩阵为两个矩阵时,其可以分别为上述第一矩阵A和第二矩阵B。例如,用于存储多个矩阵中的至少一个矩阵包括的操作数据的向量寄存器对应的地址索引不是完全连续的,也就是说,在本公开的实施例中,参与矩阵运算的多个矩阵中的至少一个矩阵中的操作数据可以不完全连续存储,即至少一个矩阵中的操作数据可以存储在地址索引不完全连续的向量寄存器中。例如,当多个矩阵包括第一矩阵A和第二矩阵B时,在一些示例中,用于存储第一矩阵A中的多个第一操作数据的多个第一向量寄存器(例如,N2个第一向量寄存器)对应的地址索引可以是不完全连续的,用于存储第二矩阵B中的多个第二操作数据的多个第二向量寄存器(例如,N3个第二向量寄存器)对应的地址索引可以是连续的;在一些示例中,用于存储第一矩阵A中的多个第一操作数据的多个第一向量寄存器对应的地址索引可以是连续的,用于存储第二矩阵B中的多个第二操作数据的多个第二向量寄存器对应的地址索引可以是不完全连续的;在一些示例中,用于存储第一矩阵A中的多个第一操作数据的多个第一向量寄存器对应的地址索引可以是不完全连续的,用于存储第二矩阵B中的多个第二操作数据的多个第二向量寄存器对应的地址索引可以是不完全连续的。
需要说明的是,在本公开的一些实施例中,用于存储多个矩阵中的每个矩阵包括的操作数据的向量寄存器对应的地址索引可以是连续的,例如,当多个矩阵包括第一矩阵A和第二矩阵B时,用于存储第一矩阵A中的多个第一操作数据的多个第一向量寄存器对应的地址索引可以是连续的,用于存储第二矩阵B中的多个第二操作数据的多个第二向量寄存器对应的地址索引也可以是连续的。
例如,如图4A和图4B所示,第一矩阵A中的所有第一操作数据排列为多行至少一列,在第一矩阵中位于同一列的第一操作数据被写入到多个第一向量寄存器的情况下,多个第一向量寄存器对应的地址索引是连续的。例如,位于第一矩阵A的第一列的所有第一操作数据被写入到第一向量寄存器R80和第一向量寄存器R81,第一向量寄存器R80对应的地址索引80和第一向量寄存器R81对应的地址索引81是连续的。
例如,第二矩阵B中的所有第二操作数据排列为至少一行多列,在第二矩阵中位于同一行的第二操作数据被写入到多个第二向量寄存器的情况下,多个第二向量寄存器对应的地址索引是连续的。例如,在一些示例中,每个第二向量寄存器可以存储16个数据,每个数据具有32bit,当第二矩阵B的尺寸为4*32,第二矩阵B中的每个第二操作数据为64bit的数据,则位于第二矩阵B的同一行的所有第二操作数据可以被写入到两个第二向量寄存器,两个第二向量寄存器对应的地址索引是连续的,例如,两个第二向量寄存器对应的地址索引分别为90和91。
例如,在步骤S12中,可以直接基于多个目的地址,确定多个目的向量寄存器,多个目的向量寄存器与多个目的地址一一对应。
例如,在一些实施例中,步骤S13可以包括:响应于目的寄存器选择信息为第一目的选择信息,按照每间隔P1个地址索引选择一个目的向量寄存器的方式从多个目的向量寄存器中选择得到N1个目的向量寄存器。此时,N1个目的向量寄存器分别对应的N1个地址索引是完全不连续的。此时,N1个目的向量寄存器分别对应的N1个地址索引可以为[K]、[K+P1]、[K+2*P1]、…。
例如,P1为正整数且大于1。参考表2,当目的寄存器选择信息RSTEP_D的值为1或2时,目的寄存器选择信息为第一目的选择信息。
例如,在另一些实施例中,步骤S13可以包括:响应于目的寄存器选择信息为第二目的选择信息,按照每间隔P2个地址索引选择至少两个目的向量寄存器的方式从多个目的向量寄存器中选择得到T1个目的向量寄存器组;将T1个目的向量寄存器组中的所有目的向量寄存器作为N1个目的向量寄存器。例如,T1和P2均为正整数,且P2大于1。参考表2,当目的寄存器选择信息RSTEP_D的值为4或5时,目的寄存器选择信息为第二目的选择信息。
例如,每个目的向量寄存器组包括至少两个目的向量寄存器,每个目的向量寄存器组包括的至少两个目的向量寄存器对应的地址索引可以是连续的,例如,一个目的向量寄存器组中的三个目的向量寄存器分别为R[K]、R[K+1]、R[K+2],此时,该三个目的向量寄存器分别对应的三个地址索引为K、K+1和K+2,其是连续的。又例如,每个目的向量寄存器组包括的至少两个目的向量寄存器对应的地址索引也可以不是完全连续的,例如,一个目的向量寄存器组中的三个目的向量寄存器分别为R[K]、R[K+2]、R[K+4],此时,该三个目的向量寄存器分别对应的三个地址索引为K、K+2和K+4,其不是连续的。
例如,在一些示例中,当每个目的向量寄存器组包括两个目的向量寄存器,且该两个目的向量寄存器对应的地址索引是连续的时,N1个目的向量寄存器对应的N1个地址索引可以为[K,K+1]、[K+P2,K+P2+1]、[K+2*P2,K+2*P2+1]、…;当每个目的向量寄存器组包括三个目的向量寄存器,且该三个目的向量寄存器对应的地址索引是连续的时,P2大于等于3,N1个目的向量寄存器对应的N1个地址索引可以为[K,K+1,K+2]、[K+P2,K+P2+1,K+P2+2]、[K+2*P2,K+2*P2+1,K+2*P2+2]、…;依次类推。
例如,在另一些实施例中,步骤S13可以包括:响应于目的寄存器选择信息为第三目的选择信息,基于第三目的选择信息,从多个目的向量寄存器分别对应的多个地址索引中随机地选择得到N1个地址索引;从多个目的向量寄存器中选择得到与N1个地址索引一一对应的N1个目的向量寄存器。
例如,N1个地址索引可以为在多个目的向量寄存器分别对应的多个地址索引确定的数值范围内的随机值。
例如,在另一些实施例中,第三目的选择信息可以包括由用户预先设置的N1个地址索引,此时,N1个地址索引也可以不为随机值,而由用户自定义。
需要说明的是,在本公开的实施例中,向量寄存器(第一向量寄存器、第二向量寄存器、第三向量寄存器或目的向量寄存器)对应的地址索引表示各个向量寄存器之间的相对地址关系,例如,如图4A所示,对于向量寄存器R80~R87,其中,数值80~87即表示地址索引,如图4B所示,对于向量寄存器R70~R85,其中,70~85即表示地址索引。向量寄存器R80、向量寄存器R81、向量寄存器R82等在实际存储空间中可以占用连续的存储空间,也可以不占用连续的存储空间,即向量寄存器80、向量寄存器81、向量寄存器R82等对应的真实物理地址可以是连续,也可以不是连续的。
图5为本公开另一些实施例提供的一种数据处理方法的示意性流程图。本公开的一些实施例还提供一种数据处理方法,该数据处理方法应用于矩阵运算。矩阵运算可以包括矩阵乘法运算、矩阵乘加运算等。
如图5所示,该数据处理方法包括以下步骤S20~S23。
步骤S20:获取矩阵运算指令。
例如,如图3所示,矩阵运算指令包括:第一地址信息、第二地址信息、目的地址信息和操作控制码,操作控制码用于指示对目的地址信息指示的多个目的向量寄存器进行写入时的地址索引步进设置。例如,多个目的向量寄存器进行写入时的地址索引步进设置用于指示从多个目的向量寄存器中选择得到的N1个目的向量寄存器的地址索引的编址方式,N1个目的向量寄存器分别对应的N1个地址索引不是完全连续的,N1为正整数且大于1。例如,参考表2,操作控制码包括目的寄存器选择信息RSTEP_D,目的寄存器选择信息RSTEP_D用于指示对目的地址信息指示的多个目的向量寄存器进行写入时的地址索引步进设置,关于目的寄存器选择信息RSTEP_D的具体功能可以参考上述实施例中对于RSTEP_D的描述,重复之处在此不再赘述。例如,如图3所示,矩阵运算指令还包括操作码OpCode。对于矩阵运算指令的详细说明可以参考上述实施例中对表1和表2的相关描述,重复之处在此不再赘述。
步骤S21:从第一地址信息指示的至少一个第一向量寄存器中读取进行矩阵运算的第一矩阵。
步骤S22:从第二地址信息指示的至少一个第二向量寄存器中读取进行矩阵运算的第二矩阵。
步骤S23:将第一矩阵与第二矩阵进行乘法运算得到第三矩阵,根据操作控制码将第三矩阵写入目的地址信息指示的多个目的向量寄存器中的N1个目的向量寄存器。
例如,步骤S21包括:解析矩阵运算指令,以获取第一地址信息,基于第一地址信息指示的至少一个第一地址,确定至少一个第一向量寄存器;从至少一个第一向量寄存器中读取第一矩阵。第一矩阵包括多个第一操作数据。
例如,步骤S22包括:解析矩阵运算指令,以获取第二地址信息,基于第二地址信息指示的至少一个第二地址,确定至少一个第二向量寄存器;从至少一个第二向量寄存器中读取第二矩阵。第二矩阵包括多个第二操作数据。
例如,在一些实施例中,在至少一个第一向量寄存器包括多个第一向量寄存器的情况下,操作控制码还用于指示对第一地址信息指示的多个第一向量寄存器进行读取时的地址索引步进设置。例如,多个第一向量寄存器进行读取时的地址索引步进设置用于指示从多个第一向量寄存器中选择得到的N2个第一向量寄存器的地址索引的编址方式,N2为正整数且大于1。
例如,参考表2,操作控制码还包括第一寄存器选择信息RSTEP_A,第一寄存器选择信息RSTEP_A用于指示对多个第一向量寄存器进行读取时的地址索引步进设置,关于第一寄存器选择信息RSTEP_A的具体功能可以参考上述实施例中对于RSTEP_A的描述,重复之处在此不再赘述。
例如,在一些实施例中,在至少一个第二向量寄存器包括多个第二向量寄存器的情况下,操作控制码还用于指示对第二地址信息指示的多个第二向量寄存器进行读取时的地址索引步进设置。例如,多个第二向量寄存器进行读取时的地址索引步进设置用于指示从多个第二向量寄存器中选择得到的N3个第二向量寄存器的地址索引的编址方式,N3为正整数且大于1。
例如,参考表2,操作控制码还包括第二寄存器选择信息RSTEP_B,第二寄存器选择信息RSTEP_B用于指示对多个第二向量寄存器进行读取时的地址索引步进设置,关于第二寄存器选择信息RSTEP_B的具体功能可以参考上述实施例中对于RSTEP_B的描述,重复之处在此不再赘述。
例如,如图3所示,矩阵运算指令还包括第三地址信息。操作控制码还用于指示对第三地址信息指示的多个第三向量寄存器进行读取时的地址索引步进设置,例如,多个第三向量寄存器进行读取时的地址索引步进设置用于指示从多个第三向量寄存器中选择得到的N4个第三向量寄存器的地址索引的编址方式,N4为正整数且大于1。例如,参考表2,操作控制码还包括第三寄存器选择信息RSTEP_C,第三寄存器选择信息RSTEP_C用于指示对多个第三向量寄存器进行读取时的地址索引步进设置,关于第三寄存器选择信息RSTEP_C的具体功能可以参考上述实施例中对于RSTEP_C的描述,重复之处在此不再赘述。
例如,在一些实施例中,在步骤S23中,多个目的向量寄存器分别对应的多个地址索引是连续的。
例如,在步骤S23中,根据操作控制码将第三矩阵写入目的地址信息指示的多个目的向量寄存器中的N1个目的向量寄存器,包括:从第三地址信息指示的多个第三向量寄存器中读取进行矩阵运算的第四矩阵;将第三矩阵中的数据与第四矩阵中的数据一一对应地进行加法运算,以得到多个运算结果;根据操作控制码将多个运算结果写入多个目的向量寄存器中的N1个目的向量寄存器。
例如,根据操作控制码将多个运算结果写入多个目的向量寄存器,包括:从基于目的地址信息,确定多个目的向量寄存器;按照操作控制码中的目的寄存器选择信息RSTEP_D所指示的地址索引步进设置方式,从多个目的向量寄存器中选择得到N1个目的向量寄存器,将多个运算结果写入N1个目的向量寄存器。例如,N1为正整数且大于1,N1个目的向量寄存器分别对应的N1个地址索引不是完全连续的。
需要说明的是,在本公开的实施例中,“地址索引步进设置”可以包括对地址索引的编址方式,例如,连续编址、按照每间隔多个地址索引的方式离散编址、成组连续编址(例如,成对(每组包括两个)连续编址)、按照每间隔多个地址索引的方式成组离散编址(例如,按照每间隔多个地址索引的方式成对连续编址)、随机编址等。
下面通过两个例子具体说明本公开的实施例提供的数据处理方法进行矩阵运算的过程,例如,在下面的两个例子中,矩阵运算为矩阵乘加运算,矩阵运算指令为矩阵乘加指令。
例如,在一些实施例中,如图4A所示,对于单精度浮点类型的数据的矩阵乘加运算C+=A*B,矩阵A为第一矩阵,矩阵B为第二矩阵,第一矩阵A的尺寸是32*4,即第一矩阵A包括32*4个第一操作数据,第二矩阵B的尺寸为4*16,即第二矩阵B包括4*16个第二操作数据。矩阵C为第四矩阵,第四矩阵C的尺寸为32*16,即第四矩阵C包括32*16个第三操作数据。
例如,如图4A所示,位于第一矩阵A的同一列的第一操作数据可以被写入地址索引连续的两个第一向量寄存器,例如,位于第一矩阵A的第一列的第一操作数据被写入第一向量寄存器R80和第一向量寄存器R81,位于第一矩阵A的第二列的第一操作数据被写入第一向量寄存器R82和第一向量寄存器R83,位于第一矩阵A的第三列的第一操作数据被写入第一向量寄存器R84和第一向量寄存器R85,位于第一矩阵A的第四列的第一操作数据被写入第一向量寄存器R86和第一向量寄存器R87。由此,可以使用同一条指令将位于第一矩阵A的同一列的第一操作数据从第一向量寄存器中读取或写入至第一向量寄存器,从而可以减少用于存储/读取第一矩阵A的指令的数量,例如,用于存储/读取第一矩阵A的指令可以减少一半,例如,可以采用四条读取指令(Vec32_load_b32)将第一矩阵A中的所有第一操作数据写入8个第一向量寄存器R80~R87。
例如,如图4A所示,位于第二矩阵B的同一行的第二操作数据可以被写入一个第二向量寄存器,例如,位于第二矩阵B的第一行的第二操作数据被写入第二向量寄存器R90,位于第二矩阵B的第二行的第二操作数据被写入第二向量寄存器R91,位于第二矩阵B的第三行的第二操作数据被写入第二向量寄存器R92,位于第二矩阵B的第四行的数据被写入第二向量寄存器R93,例如,可以采用四条读取指令(Vec16_load_b32)将第二矩阵B中的所有第二操作数据写入4个第一向量寄存器R90~R93。需要说明的是,若第二矩阵B的尺寸为4*32,即第二矩阵B的每一行包括32个第二操作数据,此时,位于第二矩阵B的同一行的第二操作数据可以被写入地址索引连续的两个第二向量寄存器。
例如,如图4A所示,位于第四矩阵C的同一列的第三操作数据可以被写入地址索引连续的两个第三向量寄存器,例如,位于第四矩阵C的第一列的第三操作数据被写入第三向量寄存器R0和第三向量寄存器R1,位于第四矩阵C的第二列的第三操作数据被写入第三向量寄存器R2和第三向量寄存器R3,依次类推,位于第四矩阵C的第十六列的第三操作数据被写入第三向量寄存器R30和第一向量寄存器R31。由此,可以使用同一条指令将位于第四矩阵C的同一列的第三操作数据从第三向量寄存器中读取或写入至第三向量寄存器,从而可以减少用于存储/读取第四矩阵C的指令的数量,例如,用于存储/读取第四矩阵C的指令可以减少一半,例如,可以采用16条读取指令(Vec32_load_b32)将第四矩阵C中的所有第三操作数据写入32个第三向量寄存器R0~R31。
需要说明的是,在图4A中,目的向量寄存器和第三向量寄存器是同一个向量寄存器,多个运算结果也被写入到存储第四矩阵C的多个向量寄存器R0~R31。
例如,如图4A所示,第一矩阵A包括矩阵块A0和包括矩阵块A1,第四矩阵C包括矩阵块C0和矩阵块C1。例如,实现图4A所示矩阵乘加运算C0+=A0*B的矩阵乘加指令的汇编形式为:Mat16*16*4_muladd_fp32,R[0:30],R[80:86],R[90:93],R[0:30],RSTEP_A==0x1,RSTEP_C==0x1,RSTEP_D==0x1;实现图4A所示矩阵乘加运算C1+=A1*B的矩阵乘加指令的汇编形式为:Mat16*16*4_muladd_fp32,R[1:31],R[81:87],R[90:93],R[1:31],RSTEP_A==0x1,RSTEP_C==0x1,RSTEP_D==0x1。实现矩阵乘加运算C1+=A1*B的矩阵乘加指令与实现矩阵乘加运算C0+=A0*B的矩阵乘加指令类似,下面以矩阵乘加运算C0+=A0*B为例说明上述矩阵乘加指令。
例如,对于矩阵乘加运算C0+=A0*B,在获取矩阵块A0中的多个第一操作数据时,解析上述矩阵乘加指令,以获取多个第一地址[80:86]和第一寄存器选择信息RSTEP_A(0x1,即RSTEP_A为1);基于多个第一地址[80:86],确定多个第一向量寄存器R80~R86;由于第一寄存器选择信息RSTEP_A为1,即第一寄存器选择信息RSTEP_A为第一操作选择信息,按照每间隔P3(例如,如图4A所示的示例中,P3为2)个地址索引选择一个第一向量寄存器的方式从多个第一向量寄存器R80~R86中选择得到N2(例如,如图4A所示的示例中,N2为4)个第一向量寄存器,即第一向量寄存器R80、第一向量寄存器R82、第一向量寄存器R84、第一向量寄存器R86;然后,从第一向量寄存器R80、第一向量寄存器R82、第一向量寄存器R84、第一向量寄存器R86中读取矩阵块A0中的多个第一操作数据。
例如,对于矩阵乘加运算C0+=A0*B,在获取第一矩阵B中的多个第二操作数据时,解析上述矩阵乘加指令,以获取多个第二地址[90:93];基于多个第二地址[90:93],确定多个第二向量寄存器R90~R93;由于上述矩阵乘加指令中,第二寄存器选择信息RSTEP_B空缺,则可以直接从多个第二向量寄存器R90~R93中读取第一矩阵B中的多个第二操作数据。
例如,对于图4A所示的矩阵乘加运算C0+=A0*B,在获取矩阵块C0中的多个第三操作数据时,解析上述矩阵乘加指令,以获取多个第三地址[0:30]和第三寄存器选择信息RSTEP_C(0x1,即RSTEP_C为1);基于多个第三地址[0:30],确定多个第三向量寄存器R0~R30;由于第三寄存器选择信息RSTEP_C为1,即第三寄存器选择信息RSTEP_C为第七操作选择信息,按照每间隔P7(例如,如图4A所示的示例中,P7为2)个地址索引选择一个第三向量寄存器的方式从多个第三向量寄存器R0~R30中选择得到N4(例如,如图4A所示的示例中,N4为16)个第三向量寄存器,即第三向量寄存器R0、第三向量寄存器R2、第三向量寄存器R4、…、第三向量寄存器R30;然后,从第三向量寄存器R0、第三向量寄存器R2、第三向量寄存器R4、…、第三向量寄存器R30中读取矩阵块C0中的多个第三操作数据。
例如,对于矩阵乘加运算C0+=A0*B,解析上述矩阵乘加指令,以获取多个目的地址[0:30]和目的寄存器选择信息RSTEP_D(0x1,即RSTEP_D为1),基于多个目的地址[0:30],确定多个目的向量寄存器R0~R30;由于目的寄存器选择信息RSTEP_D为1,即目的寄存器选择信息RSTEP_D为第一目的选择信息,按照每间隔P1(例如,如图4A所示的示例中,P1为2)个地址索引选择一个目的向量寄存器的方式从多个目的向量寄存器R0~R30中选择得到N1(例如,如图4A所示的示例中,N1为16)个目的向量寄存器,即目的向量寄存器R0、目的向量寄存器R2、目的向量寄存器R4、…、目的向量寄存器R30;然后,将计算得到的矩阵乘加运算C0+=A0*B的运算结果存储到目的向量寄存器R0、目的向量寄存器R2、目的向量寄存器R4、…、目的向量寄存器R30中。
例如,多个运算结果(即A*B+C)为32*16的矩阵,在将多个运算结果(即A*B+C)写回内存时,位于同一列的运算结果可以通过同一条写回指令(Vec32_store_b32)被写回内存,从而多个运算结果(即A*B+C)可以通过例如16条写回指令(Vec32_store_b32)被写回内存,由此减少指令数量,提高数据写回的效率。
例如,在一些实施例中,如图4B所示,对于双精度浮点类型的数据的矩阵乘加运算C+=A*B,矩阵A为第一矩阵,矩阵B为第二矩阵,第一矩阵A的尺寸是32*4,即第一矩阵A包括32*4个第一操作数据,第二矩阵B的尺寸为4*16,即第二矩阵B包括4*16个第二操作数据。矩阵C为第四矩阵,第四矩阵C的尺寸为32*16,即第四矩阵C包括32*16个第三操作数据。第一矩阵A包括矩阵块A0和包括矩阵块A1,第四矩阵C包括矩阵块C0和矩阵块C1。
例如,如图4B所示,位于第一矩阵A的同一列的第一操作数据可以被写入地址索引连续的四个第一向量寄存器,例如,位于第一矩阵A的第一列的第一操作数据被写入第一向量寄存器R70~R73,其中,位于矩阵块A0的第一列的第一操作数据被写入第一向量寄存器R70~R71,位于矩阵块A1的第一列的第一操作数据被写入第一向量寄存器R72~R73;类似地,位于第一矩阵A的第二列的第一操作数据被写入第一向量寄存器74~77,位于第一矩阵A的第三列的第一操作数据被写入第一向量寄存器R78~81,位于第一矩阵A的第四列的第一操作数据被写入第一向量寄存器R82~R85。由此,可以使用同一条指令将位于第一矩阵A的同一列的第一操作数据从第一向量寄存器中读取或写入至第一向量寄存器,从而可以减少用于存储/读取第一矩阵A的指令的数量,例如,用于存储/读取第一矩阵A的指令可以减少一半,例如,可以采用四条读取指令(Vec32_load_b64)将第一矩阵A中的所有第一操作数据写入16个第一向量寄存器R70~R85。
例如,如图4B所示,位于第二矩阵B的同一行的第二操作数据可以被写入地址索引连续的两个第二向量寄存器,例如,位于第二矩阵B的第一行的第二操作数据被写入第二向量寄存器R90~R91,位于第二矩阵B的第二行的第二操作数据被写入第二向量寄存器R92~R93,位于第二矩阵B的第三行的第二操作数据被写入第二向量寄存器R94~R95,位于第二矩阵B的第四行的数据被写入第二向量寄存器R96~R97,例如,可以采用四条读取指令(Vec16_load_b64)将第二矩阵B中的所有第二操作数据写入8个第一向量寄存器R90~R97。需要说明的是,若第二矩阵B的尺寸为4*32,即第二矩阵B的每一行包括32个第二操作数据,此时,位于第二矩阵B的同一行的第二操作数据可以被写入地址索引连续的四个第二向量寄存器。
例如,如图4B所示,位于第四矩阵C的同一列的第三操作数据可以被写入地址索引连续的四个第三向量寄存器,例如,位于第四矩阵C的第一列的第三操作数据被写入第三向量寄存器R0~R3,其中,位于矩阵块C0的第一列的第三操作数据被写入第三向量寄存器R0~R1,位于矩阵块C1的第一列的第三操作数据被写入第三向量寄存器R2~R3;类似地,位于第四矩阵C的第二列的第三操作数据被写入第三向量寄存器R4~R7,依次类推,位于第四矩阵C的第十六列的第三操作数据被写入第三向量寄存器R60~R63。由此,可以使用同一条指令将位于第四矩阵C的同一列的第三操作数据从第三向量寄存器中读取或写入至第三向量寄存器,从而可以减少用于存储/读取第四矩阵C的指令的数量,例如,用于存储/读取第四矩阵C的指令可以减少一半,例如,可以采用16条读取指令(Vec32_load_b64)将第四矩阵C中的所有第三操作数据写入64个第三向量寄存器R0~R63。
需要说明的是,在图4B中,目的向量寄存器和第三向量寄存器是同一个向量寄存器,多个运算结果也被写入到存储第四矩阵C的多个向量寄存器R0~R63。
例如,实现图4B所示矩阵乘加运算C0+=A0*B的矩阵乘加指令的汇编形式为:Mat16*16*4_muladd_fp64,R[0:61],R[70:83],R[90:97],R[0:61],RSTEP_A==0x5,RSTEP_B==0x4,RSTEP_C==0x5,RSTEP_D==0x5;实现图4B所示矩阵乘加运算C1+=A1*B的矩阵乘加指令的汇编形式为:Mat16*16*4_muladd_fp64,R[2:63],R[72:85],R[90:97],R[2:63],RSTEP_A==0x5,RSTEP_B==0x4,RSTEP_C==0x5,RSTEP_D==0x5。实现矩阵乘加运算C1+=A1*B的矩阵乘加指令与实现矩阵乘加运算C0+=A0*B的矩阵乘加指令类似,下面以矩阵乘加运算C0+=A0*B为例说明上述矩阵乘加指令。
例如,对于图4B所示的矩阵乘加运算C0+=A0*B,在获取矩阵块A0中的多个第一操作数据时,解析上述矩阵乘加指令,以获取多个第一地址[70:83]和第一寄存器选择信息RSTEP_A(0x5,即RSTEP_A为5);基于多个第一地址[70:83],确定多个第一向量寄存器R70~R83;由于第一寄存器选择信息RSTEP_A为5,即第一寄存器选择信息RSTEP_A为第二操作选择信息,按照每间隔P4(例如,如图4B所示的示例中,P4为4)个地址索引选择两个第一向量寄存器的方式从多个第一向量寄存器R70~R83中选择得到N2(例如,如图4B所示的示例中,N2为8)个第一向量寄存器,即第一向量寄存器R70~71、第一向量寄存器R74~75、第一向量寄存器R78~79、第一向量寄存器R82~83;然后,从第一向量寄存器R70~71、第一向量寄存器R74~75、第一向量寄存器R78~79、第一向量寄存器R82~83中读取矩阵块A0中的多个第一操作数据。
例如,对于图4B所示的矩阵乘加运算C0+=A0*B,在获取第一矩阵B中的多个第二操作数据时,解析上述矩阵乘加指令,以获取多个第二地址[90:97]和第二寄存器选择信息RSTEP_B(0x4,即RSTEP_B为4);基于多个第一地址[90:97],确定多个第二向量寄存器R90~R97;由于第二寄存器选择信息RSTEP_B为4,即第二寄存器选择信息RSTEP_B为第五操作选择信息,按照每间隔P6(例如,如图4B所示的示例中,P6为2)个地址索引选择两个第一向量寄存器的方式从多个第二向量寄存器R90~R97中选择得到N3(例如,如图4B所示的示例中,N3为8)个第二向量寄存器,即R90~R97,然后从N3个第二向量寄存器R90~R97中读取第一矩阵B中的多个第二操作数据。
例如,对于图4B所示的矩阵乘加运算C0+=A0*B,在获取矩阵块C0中的多个第三操作数据时,解析上述矩阵乘加指令,以获取多个第三地址[0:61]和第三寄存器选择信息RSTEP_C(0x5,即RSTEP_C为5);基于多个第三地址[0:61],确定多个第三向量寄存器R0~R61;由于第三寄存器选择信息RSTEP_C为5,即第三寄存器选择信息RSTEP_C为第八操作选择信息,按照每间隔P8(例如,如图4B所示的示例中,P8为4)个地址索引选择两个第三向量寄存器的方式从多个第三向量寄存器R0~R61中选择得到N4(例如,如图4B所示的示例中,N4为32)个第三向量寄存器,即第三向量寄存器R0~R1、第三向量寄存器R4~R5、…、第三向量寄存器R60~R61;然后,从第三向量寄存器R0~R1、第三向量寄存器R4~R5、…、第三向量寄存器R60~R61中读取矩阵块C0中的多个第三操作数据。
例如,对于矩阵乘加运算C0+=A0*B,解析上述矩阵乘加指令,以获取多个目的地址[0:61]和目的寄存器选择信息RSTEP_D(0x5,即RSTEP_D为5),基于多个目的地址[0:61],确定多个目的向量寄存器R0~R61;由于目的寄存器选择信息RSTEP_D为5,即目的寄存器选择信息RSTEP_D为第二目的选择信息,按照每间隔P2(例如,如图4B所示的示例中,P2为4)个地址索引选择两个目的向量寄存器的方式从多个目的向量寄存器R0~R61中选择得到N1(例如,如图4B所示的示例中,N1为32)个目的向量寄存器,即目的向量寄存器R0~R1、目的向量寄存器R4~R5、…、目的向量寄存器R60~R61;然后,将计算得到的矩阵乘加运算C0+=A0*B的运算结果存储到目的向量寄存器R0~R1、目的向量寄存器R4~R5、…、目的向量寄存器R60~R61中。
例如,多个运算结果(即A*B+C)为32*16的矩阵,在将多个运算结果(即A*B+C)写回内存时,位于同一列的运算结果可以通过同一条写回指令(Vec32_store_b64)被写回内存,从而多个运算结果(即A*B+C)可以通过16条写回指令(Vec32_store_b64)被写回内存,由此减少指令数量,提高数据写回的效率。
需要说明的是,在本公开的实施例中,“0x”表示十六进制数据。
值得注意的是,以上是以浮点类型的数据为例描述了本公开的实施例提供的数据处理方法,但是本公开的实施例不限于此,本公开的实施例提供的数据处理方法也适用于整型或者长整型等其他数据格式的矩阵乘加运算,以及其他矩阵运算过程。
本公开一些实施例还提供一种数据处理装置。图6A为本公开一些实施例提供的一种数据处理装置的示意图。
例如,数据处理装置可以应用于矩阵运算。例如,矩阵运算可以为矩阵乘法运算,矩阵乘法运算用于对第一矩阵和第二矩阵进行乘法运算;又例如,矩阵运算可以为矩阵乘加运算,矩阵乘加运算用于实现将第一矩阵和第二矩阵进行乘法运算以得到第三矩阵,并将第三矩阵与第四矩阵进行加法运算。该数据处理装置可以用于实现上述图2所示的数据处理方法。
例如,如图6A所示,数据处理装置600可以包括指令处理单元601、计算单元602、寄存器确定单元603、寄存器选择单元604和结果存储单元605。
指令处理单元601用于获取并解析矩阵运算指令,以获取多个目的地址和目的寄存器选择信息。指令处理单元601可以从诸如DDR(内存的一种)的存储器中获取矩阵运算指令(例如,矩阵乘加指令、矩阵乘法指令等),然后,按照预定的指令格式来对获取的指令进行拆分和解释,获得目的地址和目的寄存器选择信息等信息。指令处理单元601可以用于实现图2所示的数据处理方法中的步骤S10,关于指令处理单元601可以实现的功能的具体说明可以参考上述数据处理方法的实施例中对于步骤S10的描述。
计算单元602用于基于矩阵运算指令,计算得到多个运算结果。例如,在一些实施例中,计算单元602可以解析矩阵运算指令,以获取至少一个第一地址和至少一个第二地址;基于至少一个第一地址,确定至少一个第一向量寄存器,并从至少一个第一向量寄存器中读取第一矩阵中的多个第一操作数据;基于至少一个第二地址,确定至少一个第二向量寄存器,并从至少一个第二向量寄存器中读取第二矩阵中的多个第二操作数据;然后,对多个第一操作数据和多个第二操作数据进行乘法运算,以得到多个运算结果。计算单元602可以用于实现图2所示的数据处理方法中的步骤S11,关于计算单元602可以实现的功能的具体说明可以参考上述数据处理方法的实施例中对于步骤S11的描述。
例如,计算单元602可以包括多个乘法器等,以实现对多个第一操作数据和多个第二操作数据进行乘法运算的操作。又例如,计算单元602还可以包括多个加法器等硬件器件。
寄存器确定单元603用于基于多个目的地址,确定多个目的向量寄存器。寄存器确定单元603可以用于实现图2所示的数据处理方法中的步骤S12,关于寄存器确定单元603可以实现的功能的具体说明可以参考上述数据处理方法的实施例中对于步骤S12的描述。
寄存器选择单元604用于基于目的寄存器选择信息,从多个目的向量寄存器中选择N1个目的向量寄存器。例如,多个目的向量寄存器分别对应的多个地址索引是连续的,N1个目的向量寄存器分别对应的N1个地址索引不是完全连续的,N1为正整数,且N1大于1。寄存器选择单元604可以用于实现图2所示的数据处理方法中的步骤S13,关于寄存器选择单元604可以实现的功能的具体说明可以参考上述数据处理方法的实施例中对于步骤S13的描述。
例如,寄存器选择单元604可以包括选择器等器件。
结果存储单元605用于将多个运算结果存储在N1个目的向量寄存器中。结果存储单元605可以用于实现图2所示的数据处理方法中的步骤S14,关于结果存储单元605可以实现的功能的具体说明可以参考上述数据处理方法的实施例中对于步骤S14的描述。
例如,指令处理单元601、计算单元602,寄存器确定单元603、寄存器选择单元604和结果存储单元605之间可以实现数据传输。
例如,指令处理单元601、计算单元602,寄存器确定单元603、寄存器选择单元604和结果存储单元605可以采用硬件、软件、固件以及它们的任意可行的组合实现。
在一些实施例中,指令处理单元601、计算单元602,寄存器确定单元603、寄存器选择单元604和/或结果存储单元605包括存储在存储器中的代码和程序;处理器可以执行该代码和程序以实现如上所述的指令处理单元601、计算单元602,寄存器确定单元603、寄存器选择单元604和/或结果存储单元605的一些功能或全部功能。在另一些实施例中,指令处理单元601、计算单元602,寄存器确定单元603、寄存器选择单元604和/或结果存储单元605可以是专用硬件器件,用来实现如上所述的指令处理单元601、计算单元602,寄存器确定单元603、寄存器选择单元604和/或结果存储单元605的一些或全部功能。例如,指令处理单元601、计算单元602,寄存器确定单元603、寄存器选择单元604和/或结果存储单元605可以是一个电路板或多个电路板的组合,用于实现如上所述的功能。在本公开的实施例中,该一个电路板或多个电路板的组合可以包括:(1)一个或多个处理器;(2)与处理器相连接的一个或多个非暂时的计算机可读的存储器;以及(3)处理器可执行的存储在存储器中的固件。
例如,在一些实施例中,在执行基于目的寄存器选择信息,从多个目的向量寄存器中选择N1个目的向量寄存器的步骤时,寄存器选择单元604用于:响应于目的寄存器选择信息为第一目的选择信息,按照每间隔P1个地址索引选择一个目的向量寄存器的方式从多个目的向量寄存器中选择得到N1个目的向量寄存器,其中,P1为正整数且大于1。
例如,在一些实施例中,在执行基于目的寄存器选择信息,从多个目的向量寄存器中选择N1个目的向量寄存器的步骤时,寄存器选择单元604用于:响应于目的寄存器选择信息为第二目的选择信息,按照每间隔P2个地址索引选择至少两个目的向量寄存器的方式从多个目的向量寄存器中选择得到T1个目的向量寄存器组,其中,每个目的向量寄存器组包括至少两个目的向量寄存器;将T1个目的向量寄存器组中的所有目的向量寄存器作为N1个目的向量寄存器,其中,T1和P2均为正整数,且P2大于1。
例如,在一些实施例中,每个目的向量寄存器组中的至少两个目的向量寄存器对应的地址索引是连续的。
例如,在一些实施例中,在执行基于目的寄存器选择信息,从多个目的向量寄存器中选择N1个目的向量寄存器的步骤时,寄存器选择单元604用于:响应于目的寄存器选择信息为第三目的选择信息,基于第三目的选择信息,从多个目的向量寄存器分别对应的多个地址索引中随机地选择得到N1个地址索引;从多个目的向量寄存器中选择得到与N1个地址索引一一对应的N1个目的向量寄存器。
例如,在一些实施例中,矩阵运算用于实现将第一矩阵和第二矩阵进行乘法运算以得到第三矩阵,并将第三矩阵与第四矩阵进行加法运算,在执行基于矩阵运算指令,计算得到多个运算结果的步骤时,计算单元602用于:基于矩阵运算指令,获取多个第一操作数据和多个第二操作数据,其中,第一矩阵包括多个第一操作数据,第二矩阵包括多个第二操作数据;对多个第一操作数据和多个第二操作数据进行乘法运算,以得到多个乘法运算结果,其中,第三矩阵包括多个乘法运算结果;基于矩阵运算指令,获取多个第三操作数据,其中,第四矩阵包括多个第三操作数据;将多个乘法运算结果和多个第三操作数据进行加法运算,以得到多个运算结果。
例如,在一些实施例中,矩阵运算用于实现将第一矩阵和第二矩阵进行乘法运算,在执行基于矩阵运算指令,计算得到多个运算结果的步骤时,计算单元602用于:基于矩阵运算指令,获取多个第一操作数据和多个第二操作数据,其中,第一矩阵包括多个第一操作数据,第二矩阵包括多个第二操作数据;对多个第一操作数据和多个第二操作数据进行乘法运算,以得到多个运算结果。
例如,在一些实施例中,在执行基于矩阵运算指令,计算得到多个运算结果的步骤时,计算单元602用于:基于矩阵运算指令对多个矩阵进行运算,以得到多个运算结果。用于存储多个矩阵中的至少一个矩阵包括的操作数据的向量寄存器对应的地址索引不是完全连续的。
例如,在一些实施例中,在执行基于矩阵运算指令,获取多个第一操作数据和多个第二操作数据的步骤时,计算单元602用于:解析矩阵运算指令,以获取至少一个第一地址和至少一个第二地址;基于至少一个第一地址,确定至少一个第一向量寄存器;基于至少一个第二地址,确定至少一个第二向量寄存器;从至少一个第一向量寄存器中读取多个第一操作数据;从至少一个第二向量寄存器中读取多个第二操作数据。
例如,在一些实施例中,在至少一个第一向量寄存器包括多个第一向量寄存器的情况下,多个第一向量寄存器分别对应的多个地址索引是连续的,在执行从至少一个第一向量寄存器中读取多个第一操作数据的步骤时,计算单元602用于:解析矩阵运算指令,以获取第一寄存器选择信息;基于第一寄存器选择信息,从多个第一向量寄存器中选择N2个第一向量寄存器,其中,N2为正整数且大于1;从N2个第一向量寄存器中读取多个第一操作数据。
例如,在一些实施例中,N2个第一向量寄存器分别对应的N2个地址索引不是完全连续的。
例如,在一些实施例中,在执行基于第一寄存器选择信息,从多个第一向量寄存器中选择N2个第一向量寄存器的步骤时,计算单元602用于:响应于第一寄存器选择信息为第一操作选择信息,按照每间隔P3个地址索引选择一个第一向量寄存器的方式从多个第一向量寄存器中选择得到N2个第一向量寄存器,其中,P3为正整数且大于1;响应于第一寄存器选择信息为第二操作选择信息,按照每间隔P4个地址索引选择至少两个第一向量寄存器的方式从多个第一向量寄存器中选择得到T2个第一向量寄存器组,其中,每个第一向量寄存器组包括至少两个第一向量寄存器,将T2个第一向量寄存器组中的所有第一向量寄存器作为N2个第一向量寄存器,其中,T2和P4均为正整数,且P4大于1;响应于第一寄存器选择信息为第三操作选择信息,基于第三操作选择信息,从多个第一向量寄存器分别对应的多个地址索引中随机地选择得到N2个地址索引,从多个第一向量寄存器中选择得到与N2个地址索引一一对应的N2个第一向量寄存器。
例如,在一些实施例中,在至少一个第二向量寄存器包括多个第二向量寄存器的情况下,多个第二向量寄存器分别对应的多个地址索引是连续的,在执行从至少一个第二向量寄存器中读取多个第二操作数据的步骤时,计算单元602用于:解析矩阵运算指令,以获取第二寄存器选择信息;基于第二寄存器选择信息,从多个第二向量寄存器中选择N3个第二向量寄存器,其中,N3为正整数且大于1;从N3个第二向量寄存器中读取多个第二操作数据。
例如,在一些实施例中,N3个第二向量寄存器分别对应的N3个地址索引不是完全连续的。
例如,在一些实施例中,在执行基于第二寄存器选择信息,从多个第二向量寄存器中选择N3个第二向量寄存器的步骤时,计算单元602用于:响应于第二寄存器选择信息为第四操作选择信息,按照每间隔P5个地址索引选择一个第二向量寄存器的方式从多个第二向量寄存器中选择得到N3个第二向量寄存器,其中,P5为正整数且大于1;响应于第二寄存器选择信息为第五操作选择信息,按照每间隔P6个地址索引选择至少两个第二向量寄存器的方式从多个第二向量寄存器中选择得到T3个第二向量寄存器组,其中,每个第二向量寄存器组包括至少两个第二向量寄存器,将T3个第二向量寄存器组中的所有第二向量寄存器作为N3个第二向量寄存器,其中,T3和P6均为正整数,且P6大于1;响应于第二寄存器选择信息为第六操作选择信息,基于第六操作选择信息,从多个第二向量寄存器分别对应的多个地址索引中随机地选择得到N3个地址索引,从多个第二向量寄存器中选择得到与N3个地址索引一一对应的N3个第二向量寄存器。
例如,在一些实施例中,多个第一操作数据和多个第二操作数据基于同一条矩阵运算指令进行乘法运算。
例如,在一些实施例中,第一矩阵中的所有第一操作数据排列为多行至少一列,在第一矩阵中位于同一列的第一操作数据被写入到多个第一向量寄存器的情况下,多个第一向量寄存器对应的地址索引是连续的,第二矩阵中的所有第二操作数据排列为至少一行多列,在第二矩阵中位于同一行的第二操作数据被写入到多个第二向量寄存器的情况下,多个第二向量寄存器对应的地址索引是连续的。
本公开一些实施例还提供一种数据处理装置。图6B为本公开一些实施例提供的另一种数据处理装置的示意图。例如,图6B所示的数据处理装置610可以应用于矩阵运算,该数据处理装置610可以用于实现上述图5所示的数据处理方法。
例如,数据处理装置610可以包括指令获取单元611、第一数据读取单元612、第二数据读取单元613、计算与写回单元614。
指令获取单元611用于获取矩阵运算指令。例如,矩阵运算指令包括:第一地址信息、第二地址信息、目的地址信息和操作控制码,操作控制码用于指示对目的地址信息指示的多个目的向量寄存器进行写入时的地址索引步进设置。多个目的向量寄存器进行写入时的地址索引步进设置用于指示从多个目的向量寄存器中选择得到的N1个目的向量寄存器的地址索引的编址方式,N1个目的向量寄存器分别对应的N1个地址索引不是完全连续的,N1为正整数且大于1。指令获取单元611可以用于实现图5所示的数据处理方法中的步骤S20,关于指令获取单元611可以实现的功能的具体说明可以参考上述数据处理方法的实施例中对于步骤S20的描述。
第一数据读取单元612用于从第一地址信息指示的至少一个第一向量寄存器中读取进行矩阵运算的第一矩阵。第一数据读取单元612可以用于实现图5所示的数据处理方法中的步骤S21,关于第一数据读取单元612可以实现的功能的具体说明可以参考上述数据处理方法的实施例中对于步骤S21的描述。
第二数据读取单元613用于从第二地址信息指示的至少一个第二向量寄存器中读取进行矩阵运算的第二矩阵。第二数据读取单元613可以用于实现图5所示的数据处理方法中的步骤S22,关于第二数据读取单元613可以实现的功能的具体说明可以参考上述数据处理方法的实施例中对于步骤S22的描述。
计算与写回单元614用于将第一矩阵与第二矩阵进行乘法运算得到第三矩阵,根据操作控制码将第三矩阵写入目的地址信息指示的多个目的向量寄存器中的N1个目的向量寄存器。计算与写回单元614可以用于实现图5所示的数据处理方法中的步骤S23,关于计算与写回单元614可以实现的功能的具体说明可以参考上述数据处理方法的实施例中对于步骤S23的描述。
例如,指令获取单元611、第一数据读取单元612、第二数据读取单元613、计算与写回单元614之间可以实现数据传输。
例如,指令获取单元611、第一数据读取单元612、第二数据读取单元613、计算与写回单元614可以采用硬件、软件、固件以及它们的任意可行的组合实现。
例如,在数据处理装置的一些实施例中,在至少一个第一向量寄存器包括多个第一向量寄存器的情况下,操作控制码还用于指示对第一地址信息指示的多个第一向量寄存器进行读取时的地址索引步进设置,多个第一向量寄存器进行读取时的地址索引步进设置用于指示从多个第一向量寄存器中选择得到的N2个第一向量寄存器的地址索引的编址方式,N2为正整数且大于1。
例如,在数据处理装置的一些实施例中,在至少一个第二向量寄存器包括多个第二向量寄存器的情况下,操作控制码还用于指示对第二地址信息指示的多个第二向量寄存器进行读取时的地址索引步进设置,多个第二向量寄存器进行读取时的地址索引步进设置用于指示从多个第二向量寄存器中选择得到的N3个第二向量寄存器的地址索引的编址方式,N3为正整数且大于1。
例如,在数据处理装置的一些实施例中,矩阵运算指令还包括第三地址信息,操作控制码还用于指示对第三地址信息指示的多个第三向量寄存器进行读取时的地址索引步进设置,多个第三向量寄存器进行读取时的地址索引步进设置用于指示从多个第三向量寄存器中选择得到的N4个第三向量寄存器的地址索引的编址方式,N4为正整数且大于1。
在执行根据操作控制码将第三矩阵写入目的地址信息指示的多个目的向量寄存器中的N1个目的向量寄存器的步骤时,计算与写回单元614用于:从第三地址信息指示的多个第三向量寄存器中读取进行矩阵运算的第四矩阵;将第三矩阵中的数据与第四矩阵中的数据一一对应地进行加法运算,以得到多个运算结果;根据操作控制码将多个运算结果写入多个目的向量寄存器中的N1个目的向量寄存器。
本公开至少一实施例还提供一种数据处理设备。图7为本公开一实施例提供的一种数据处理设备的示意图。
例如,如图7所示,数据处理设备700可以包括存储器701和处理器702。应当注意,图7所示的数据处理设备700的组件只是示例性的,而非限制性的,根据实际应用需要,该数据处理设备700还可以具有其他组件。存储器701和处理器702可以通过总线进行互联,或者,处理器702和存储器701等组件之间也可以通过网络连接进行通信,本公开的实施例对此不作限制。
例如,存储器701用于非瞬时性地存储有计算机可执行指令;处理器702用于运行计算机可执行指令,计算机可执行指令被处理器702执行时实现根据上述任一实施例所述的数据处理方法中的一个或多个步骤。
例如,处理器702可以根据存储在存储器701中的程序或代码执行各种动作和处理。具体地,处理器702可以是一种集成电路芯片,具有信号的处理能力。上述处理器602可以是图形处理器(GPU)、通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本公开实施例中公开的各种方法、步骤、流程及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等,可以是X86架构或者是ARM架构等。
例如,存储器701可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data Rate SDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(ESDRAM)、同步连接动态随机存取存储器(SLDRAM)和直接内存总线随机存取存储器(DRRAM)。非易失性存储器例如可以包括只读存储器(ROM)、可编程只读存储器(PROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。应注意,本公开描述的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
例如,关于数据处理设备700执行数据处理方法的过程的详细说明可以参考数据处理方法的实施例中的相关描述,重复之处不再赘述。
图8为本公开至少一实施例提供的一种计算机可读存储介质的示意图。例如,如图7所示,计算机可读存储介质800可以为非瞬时性存储介质,计算机可读存储介质800上可以非暂时性地存储一个或多个计算机可执行指令801。例如,当计算机可执行指令801由处理器执行时可以执行根据上文所述的数据处理方法中的一个或多个步骤。
例如,该计算机可读存储介质800可以应用于上述数据处理设备700中,例如,其可以包括数据处理设备700中的存储器701。
例如,关于计算机可读存储介质800的说明可以参考数据处理设备700的实施例中对于存储器701的描述,重复之处不再赘述。
需要说明的是,附图中的流程图和框图,图示了按照本公开的各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含至少一个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
一般而言,本公开的各种示例实施例可以在硬件或专用电路、软件、固件、逻辑,或其任何组合中实施。某些方面可以在硬件中实施,而其他方面可以在可以由控制器、微处理器或其他计算设备执行的固件或软件中实施。当本公开的实施例的各方面被图示或描述为框图、流程图或使用某些其他图形表示时,将理解此处描述的方框、装置、系统、技术或方法可以作为非限制性的示例在硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其他计算设备,或其某些组合中实施。
对于本公开,还有以下几点需要说明:
(1)本公开实施例附图只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)为了清晰起见,在用于描述本发明的实施例的附图中,层或结构的厚度和尺寸被放大。可以理解,当诸如层、膜、区域或基板之类的元件被称作位于另一元件“上”或“下”时,该元件可以“直接”位于另一元件“上”或“下”,或者可以存在中间元件。
(3)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
Claims (25)
1.一种数据处理方法,应用于矩阵运算,其中,所述数据处理方法包括:
获取并解析矩阵运算指令,以获取多个目的地址和目的寄存器选择信息;
基于所述矩阵运算指令,计算得到多个运算结果;
基于所述多个目的地址,确定多个目的向量寄存器;
基于所述目的寄存器选择信息,从所述多个目的向量寄存器中选择N1个目的向量寄存器,其中,所述多个目的向量寄存器分别对应的多个地址索引是连续的,所述N1个目的向量寄存器分别对应的N1个地址索引不是完全连续的,N1为正整数且大于1;
将所述多个运算结果存储在所述N1个目的向量寄存器中。
2.根据权利要求1所述的数据处理方法,其中,
基于所述目的寄存器选择信息,从所述多个目的向量寄存器中选择N1个目的向量寄存器,包括:
响应于所述目的寄存器选择信息为第一目的选择信息,按照每间隔P1个地址索引选择一个目的向量寄存器的方式从所述多个目的向量寄存器中选择得到所述N1个目的向量寄存器,
其中,P1为正整数且大于1。
3.根据权利要求1所述的数据处理方法,其中,
基于所述目的寄存器选择信息,从所述多个目的向量寄存器中选择N1个目的向量寄存器,包括:
响应于所述目的寄存器选择信息为第二目的选择信息,按照每间隔P2个地址索引选择至少两个目的向量寄存器的方式从所述多个目的向量寄存器中选择得到T1个目的向量寄存器组,其中,每个目的向量寄存器组包括至少两个目的向量寄存器;
将所述T1个目的向量寄存器组中的所有目的向量寄存器作为所述N1个目的向量寄存器,
其中,T1和P2均为正整数,且P2大于1。
4.根据权利要求3所述的数据处理方法,其中,每个目的向量寄存器组中的至少两个目的向量寄存器对应的地址索引是连续的。
5.根据权利要求1所述的数据处理方法,其中,
基于所述目的寄存器选择信息,从所述多个目的向量寄存器中选择N1个目的向量寄存器,包括:
响应于所述目的寄存器选择信息为第三目的选择信息,基于所述第三目的选择信息,从所述多个目的向量寄存器分别对应的多个地址索引中随机地选择得到所述N1个地址索引;
从所述多个目的向量寄存器中选择得到与所述N1个地址索引一一对应的所述N1个目的向量寄存器。
6.根据权利要求1所述的数据处理方法,其中,所述矩阵运算用于实现将第一矩阵和第二矩阵进行乘法运算以得到第三矩阵,并将所述第三矩阵与第四矩阵进行加法运算,
基于所述矩阵运算指令,计算得到多个运算结果,包括:
基于所述矩阵运算指令,获取多个第一操作数据和多个第二操作数据,其中,所述第一矩阵包括所述多个第一操作数据,所述第二矩阵包括所述多个第二操作数据;
对所述多个第一操作数据和所述多个第二操作数据进行乘法运算,以得到多个乘法运算结果,其中,所述第三矩阵包括所述多个乘法运算结果;
基于所述矩阵运算指令,获取多个第三操作数据,其中,所述第四矩阵包括所述多个第三操作数据;
将所述多个乘法运算结果和所述多个第三操作数据进行加法运算,以得到所述多个运算结果。
7.根据权利要求1所述的数据处理方法,其中,所述矩阵运算用于实现将第一矩阵和第二矩阵进行乘法运算,
基于所述矩阵运算指令,计算得到多个运算结果,包括:
基于所述矩阵运算指令,获取多个第一操作数据和多个第二操作数据,其中,所述第一矩阵包括所述多个第一操作数据,所述第二矩阵包括所述多个第二操作数据;
对所述多个第一操作数据和所述多个第二操作数据进行乘法运算,以得到所述多个运算结果。
8.根据权利要求6或7所述的数据处理方法,其中,基于所述矩阵运算指令,获取多个第一操作数据和多个第二操作数据,包括:
解析所述矩阵运算指令,以获取至少一个第一地址和至少一个第二地址;
基于所述至少一个第一地址,确定至少一个第一向量寄存器;
基于所述至少一个第二地址,确定至少一个第二向量寄存器;
从所述至少一个第一向量寄存器中读取所述多个第一操作数据;
从所述至少一个第二向量寄存器中读取所述多个第二操作数据。
9.根据权利要求8所述的数据处理方法,其中,在所述至少一个第一向量寄存器包括多个第一向量寄存器的情况下,所述多个第一向量寄存器分别对应的多个地址索引是连续的,
从所述至少一个第一向量寄存器中读取所述多个第一操作数据,包括:
解析所述矩阵运算指令,以获取第一寄存器选择信息;
基于所述第一寄存器选择信息,从所述多个第一向量寄存器中选择N2个第一向量寄存器,其中,N2为正整数且大于1;
从所述N2个第一向量寄存器中读取所述多个第一操作数据。
10.根据权利要求9所述的数据处理方法,其中,所述N2个第一向量寄存器分别对应的N2个地址索引不是完全连续的。
11.根据权利要求9所述的数据处理方法,其中,基于所述第一寄存器选择信息,从所述多个第一向量寄存器中选择N2个第一向量寄存器,包括:
响应于所述第一寄存器选择信息为第一操作选择信息,按照每间隔P3个地址索引选择一个第一向量寄存器的方式从所述多个第一向量寄存器中选择得到所述N2个第一向量寄存器,其中,P3为正整数且大于1;
响应于所述第一寄存器选择信息为第二操作选择信息,按照每间隔P4个地址索引选择至少两个第一向量寄存器的方式从所述多个第一向量寄存器中选择得到T2个第一向量寄存器组,其中,每个第一向量寄存器组包括至少两个第一向量寄存器,将所述T2个第一向量寄存器组中的所有第一向量寄存器作为所述N2个第一向量寄存器,其中,T2和P4均为正整数,且P4大于1;
响应于所述第一寄存器选择信息为第三操作选择信息,基于所述第三操作选择信息,从所述多个第一向量寄存器分别对应的多个地址索引中随机地选择得到N2个地址索引,从所述多个第一向量寄存器中选择得到与所述N2个地址索引一一对应的所述N2个第一向量寄存器。
12.根据权利要求8所述的数据处理方法,其中,在所述至少一个第二向量寄存器包括多个第二向量寄存器的情况下,所述多个第二向量寄存器分别对应的多个地址索引是连续的,
从所述至少一个第二向量寄存器中读取所述多个第二操作数据,包括:
解析所述矩阵运算指令,以获取第二寄存器选择信息;
基于所述第二寄存器选择信息,从所述多个第二向量寄存器中选择N3个第二向量寄存器,其中,N3为正整数且大于1;
从所述N3个第二向量寄存器中读取所述多个第二操作数据。
13.根据权利要求12所述的数据处理方法,其中,所述N3个第二向量寄存器分别对应的N3个地址索引不是完全连续的。
14.根据权利要求12所述的数据处理方法,其中,基于所述第二寄存器选择信息,从所述多个第二向量寄存器中选择N3个第二向量寄存器,包括:
响应于所述第二寄存器选择信息为第四操作选择信息,按照每间隔P5个地址索引选择一个第二向量寄存器的方式从所述多个第二向量寄存器中选择得到所述N3个第二向量寄存器,其中,P5为正整数且大于1;
响应于所述第二寄存器选择信息为第五操作选择信息,按照每间隔P6个地址索引选择至少两个第二向量寄存器的方式从所述多个第二向量寄存器中选择得到T3个第二向量寄存器组,其中,每个第二向量寄存器组包括至少两个第二向量寄存器,将所述T3个第二向量寄存器组中的所有第二向量寄存器作为所述N3个第二向量寄存器,其中,T3和P6均为正整数,且P6大于1;
响应于所述第二寄存器选择信息为第六操作选择信息,基于所述第六操作选择信息,从所述多个第二向量寄存器分别对应的多个地址索引中随机地选择得到N3个地址索引,从所述多个第二向量寄存器中选择得到与所述N3个地址索引一一对应的所述N3个第二向量寄存器。
15.根据权利要求6或7所述的数据处理方法,其中,所述多个第一操作数据和所述多个第二操作数据基于同一条矩阵运算指令进行乘法运算。
16.根据权利要求6或7所述的数据处理方法,其中,所述第一矩阵中的所有第一操作数据排列为多行至少一列,在所述第一矩阵中位于同一列的第一操作数据被写入到多个第一向量寄存器的情况下,所述多个第一向量寄存器对应的地址索引是连续的,
所述第二矩阵中的所有第二操作数据排列为至少一行多列,在所述第二矩阵中位于同一行的第二操作数据被写入到多个第二向量寄存器的情况下,所述多个第二向量寄存器对应的地址索引是连续的。
17.根据权利要求1-5任一项所述的数据处理方法,其中,
基于所述矩阵运算指令,计算得到多个运算结果,包括:基于所述矩阵运算指令对多个矩阵进行运算,以得到所述多个运算结果,其中,用于存储所述多个矩阵中的至少一个矩阵包括的操作数据的向量寄存器对应的地址索引不是完全连续的。
18.一种数据处理方法,应用于矩阵运算,包括:
获取矩阵运算指令,其中,所述矩阵运算指令包括:第一地址信息、第二地址信息、目的地址信息和操作控制码,所述操作控制码用于指示对所述目的地址信息指示的多个目的向量寄存器进行写入时的地址索引步进设置,所述多个目的向量寄存器进行写入时的地址索引步进设置用于指示从所述多个目的向量寄存器中选择得到的N1个目的向量寄存器的地址索引的编址方式,所述N1个目的向量寄存器分别对应的N1个地址索引不是完全连续的,N1为正整数且大于1;
从所述第一地址信息指示的至少一个第一向量寄存器中读取进行所述矩阵运算的第一矩阵;
从所述第二地址信息指示的至少一个第二向量寄存器中读取进行所述矩阵运算的第二矩阵;
将所述第一矩阵与所述第二矩阵进行乘法运算得到第三矩阵,根据所述操作控制码将所述第三矩阵写入所述目的地址信息指示的所述多个目的向量寄存器中的N1个目的向量寄存器。
19.根据权利要求18所述的数据处理方法,其中,在所述至少一个第一向量寄存器包括多个第一向量寄存器的情况下,
所述操作控制码还用于指示对所述第一地址信息指示的所述多个第一向量寄存器进行读取时的地址索引步进设置,所述多个第一向量寄存器进行读取时的地址索引步进设置用于指示从所述多个第一向量寄存器中选择得到的N2个第一向量寄存器的地址索引的编址方式,N2为正整数且大于1。
20.根据权利要求18所述的数据处理方法,其中,在所述至少一个第二向量寄存器包括多个第二向量寄存器的情况下,
所述操作控制码还用于指示对所述第二地址信息指示的所述多个第二向量寄存器进行读取时的地址索引步进设置,所述多个第二向量寄存器进行读取时的地址索引步进设置用于指示从所述多个第二向量寄存器中选择得到的N3个第二向量寄存器的地址索引的编址方式,N3为正整数且大于1。
21.根据权利要求18-20任一项所述的数据处理方法,其中,所述矩阵运算指令还包括:第三地址信息,
所述操作控制码还用于指示对所述第三地址信息指示的多个第三向量寄存器进行读取时的地址索引步进设置,所述多个第三向量寄存器进行读取时的地址索引步进设置用于指示从所述多个第三向量寄存器中选择得到的N4个第三向量寄存器的地址索引的编址方式,N4为正整数且大于1,
根据所述操作控制码将所述第三矩阵写入所述目的地址信息指示的所述多个目的向量寄存器中的N1个目的向量寄存器,包括:
从所述第三地址信息指示的所述多个第三向量寄存器中读取进行所述矩阵运算的第四矩阵;
将所述第三矩阵中的数据与所述第四矩阵中的数据一一对应地进行加法运算,以得到多个运算结果;
根据所述操作控制码将所述多个运算结果写入所述多个目的向量寄存器中的N1个目的向量寄存器。
22.一种数据处理装置,应用于矩阵运算,其中,
所述数据处理装置包括:
指令处理单元,用于获取并解析矩阵运算指令,以获取多个目的地址和目的寄存器选择信息;
计算单元,用于基于所述矩阵运算指令,计算得到多个运算结果;
寄存器确定单元,用于基于所述多个目的地址,确定多个目的向量寄存器;
寄存器选择单元,用于基于所述目的寄存器选择信息,从所述多个目的向量寄存器中选择N1个目的向量寄存器,其中,所述多个目的向量寄存器分别对应的多个地址索引是连续的,所述N1个目的向量寄存器分别对应的N1个地址索引不是完全连续的,N1为正整数,且N1大于1;
结果存储单元,用于将所述多个运算结果存储在所述N1个目的向量寄存器中。
23.一种数据处理装置,应用于矩阵运算,其中,
所述数据处理装置包括:
指令获取单元,用于获取矩阵运算指令,其中,所述矩阵运算指令包括:第一地址信息、第二地址信息、目的地址信息和操作控制码,所述操作控制码用于指示对所述目的地址信息指示的多个目的向量寄存器进行写入时的地址索引步进设置,所述多个目的向量寄存器进行写入时的地址索引步进设置用于指示从所述多个目的向量寄存器中选择得到的N1个目的向量寄存器的地址索引的编址方式,所述N1个目的向量寄存器分别对应的N1个地址索引不是完全连续的,N1为正整数且大于1;
第一数据读取单元,用于从所述第一地址信息指示的至少一个第一向量寄存器中读取进行所述矩阵运算的第一矩阵;
第二数据读取单元,用于从所述第二地址信息指示的至少一个第二向量寄存器中读取进行所述矩阵运算的第二矩阵;
计算与写回单元,用于将所述第一矩阵与所述第二矩阵进行乘法运算得到第三矩阵,根据所述操作控制码将所述第三矩阵写入所述目的地址信息指示的所述多个目的向量寄存器中的N1个目的向量寄存器。
24.一种数据处理设备,包括:
处理器;和
存储器,存储有计算机可执行指令,
其中,所述计算机可执行指令在被所述处理器执行时实现根据权利要求1-21中任一项所述的数据处理方法。
25.一种计算机可读存储介质,用于非瞬时性地存储计算机可执行指令,其中,所述计算机可执行指令在被处理器执行时实现根据权利要求1-21中任一项所述的数据处理方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111292008.6A CN113918883B (zh) | 2021-11-03 | 2021-11-03 | 数据处理方法、装置以及设备和计算机可读存储介质 |
PCT/CN2022/092988 WO2023077769A1 (zh) | 2021-11-03 | 2022-05-16 | 数据处理方法、装置以及设备和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111292008.6A CN113918883B (zh) | 2021-11-03 | 2021-11-03 | 数据处理方法、装置以及设备和计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113918883A CN113918883A (zh) | 2022-01-11 |
CN113918883B true CN113918883B (zh) | 2022-05-27 |
Family
ID=79245119
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111292008.6A Active CN113918883B (zh) | 2021-11-03 | 2021-11-03 | 数据处理方法、装置以及设备和计算机可读存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113918883B (zh) |
WO (1) | WO2023077769A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113918883B (zh) * | 2021-11-03 | 2022-05-27 | 海光信息技术股份有限公司 | 数据处理方法、装置以及设备和计算机可读存储介质 |
CN115794671B (zh) * | 2023-02-07 | 2023-04-14 | 成都申威科技有限责任公司 | 一种兼容向量数据的访存系统及方法 |
CN116483536B (zh) * | 2023-04-24 | 2024-05-10 | 上海芷锐电子科技有限公司 | 数据调度方法、计算芯片及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010045028A1 (en) * | 2008-10-18 | 2010-04-22 | Micron Technology, Inc. | System and method of indirect register access |
CN103268214A (zh) * | 2013-04-19 | 2013-08-28 | 荣成市鼎通电子信息科技有限公司 | 基于查找表的深空通信中准循环矩阵高速乘法器 |
CN107408038A (zh) * | 2015-02-02 | 2017-11-28 | 优创半导体科技有限公司 | 配置成使用图形处理指令对可变长度向量进行操作的向量处理器 |
CN109522254A (zh) * | 2017-10-30 | 2019-03-26 | 上海寒武纪信息科技有限公司 | 运算装置及方法 |
CN109791487A (zh) * | 2016-09-30 | 2019-05-21 | 英特尔公司 | 用于将多个数据元素加载到除紧缩数据寄存器之外的目的地存储位置的处理器、方法、系统和指令 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0731669B2 (ja) * | 1986-04-04 | 1995-04-10 | 株式会社日立製作所 | ベクトル・プロセツサ |
US5513366A (en) * | 1994-09-28 | 1996-04-30 | International Business Machines Corporation | Method and system for dynamically reconfiguring a register file in a vector processor |
GB2409066B (en) * | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | A data processing apparatus and method for moving data between registers and memory |
CN105527881B (zh) * | 2014-09-30 | 2019-02-22 | 上海安川电动机器有限公司 | 一种指令处理方法及装置 |
US9875214B2 (en) * | 2015-07-31 | 2018-01-23 | Arm Limited | Apparatus and method for transferring a plurality of data structures between memory and a plurality of vector registers |
CN113918883B (zh) * | 2021-11-03 | 2022-05-27 | 海光信息技术股份有限公司 | 数据处理方法、装置以及设备和计算机可读存储介质 |
-
2021
- 2021-11-03 CN CN202111292008.6A patent/CN113918883B/zh active Active
-
2022
- 2022-05-16 WO PCT/CN2022/092988 patent/WO2023077769A1/zh unknown
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010045028A1 (en) * | 2008-10-18 | 2010-04-22 | Micron Technology, Inc. | System and method of indirect register access |
CN103268214A (zh) * | 2013-04-19 | 2013-08-28 | 荣成市鼎通电子信息科技有限公司 | 基于查找表的深空通信中准循环矩阵高速乘法器 |
CN107408038A (zh) * | 2015-02-02 | 2017-11-28 | 优创半导体科技有限公司 | 配置成使用图形处理指令对可变长度向量进行操作的向量处理器 |
CN109791487A (zh) * | 2016-09-30 | 2019-05-21 | 英特尔公司 | 用于将多个数据元素加载到除紧缩数据寄存器之外的目的地存储位置的处理器、方法、系统和指令 |
CN109522254A (zh) * | 2017-10-30 | 2019-03-26 | 上海寒武纪信息科技有限公司 | 运算装置及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113918883A (zh) | 2022-01-11 |
WO2023077769A1 (zh) | 2023-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113918883B (zh) | 数据处理方法、装置以及设备和计算机可读存储介质 | |
US20240070226A1 (en) | Accelerator for sparse-dense matrix multiplication | |
US7313645B2 (en) | Processor to reduce data rearrangement instructions for matrices in multiple memory banks | |
TWI841041B (zh) | 用於融合乘加運算的系統、裝置及方法 | |
JP5658556B2 (ja) | メモリ制御装置、及びメモリ制御方法 | |
CN114816530A (zh) | 用于点积操作的系统、方法和装置 | |
CN109992304A (zh) | 用于加载片寄存器对的系统和方法 | |
CN110909883A (zh) | 用于执行指定三元片逻辑操作的指令的系统和方法 | |
CN107145335B (zh) | 用于大整数运算的向量指令的装置和方法 | |
WO2001035224A1 (en) | Bit-serial memory access with wide processing elements for simd arrays | |
JP2010521729A (ja) | 自明な算術演算を利用するプロセッサ | |
CN111611202A (zh) | 脉动阵列加速器系统和方法 | |
JP4901754B2 (ja) | 単一命令複数データ実行エンジンのフラグレジスタのための評価ユニット | |
CN109992305A (zh) | 用于将片寄存器对归零的系统和方法 | |
EP4394623A1 (en) | Data processing method, apparatus and device, and storage medium | |
CN116860334A (zh) | 用于计算两个区块操作数中的半字节的数量积的系统和方法 | |
CN112416256A (zh) | 数据写入方法、装置及数据读取方法、装置 | |
JP6773378B2 (ja) | 3d座標から3dのz曲線インデックスを計算するための機械レベル命令 | |
JP4686435B2 (ja) | 演算装置 | |
CN109643235B (zh) | 用于多源混合操作的装置、方法和系统 | |
KR20200094771A (ko) | 벡터 자리올림이 있는 가산 명령 | |
US20180004515A1 (en) | Processor and control method of processor | |
CN109992303A (zh) | 用于将片寄存器对存储到存储器的系统和方法 | |
US8332447B2 (en) | Systems and methods for performing fixed-point fractional multiplication operations in a SIMD processor | |
US8001358B2 (en) | Microprocessor and method of processing data including peak value candidate selecting part and peak value calculating part |
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 |