CN113722669B - 数据处理方法、装置、设备及存储介质 - Google Patents
数据处理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN113722669B CN113722669B CN202111291162.1A CN202111291162A CN113722669B CN 113722669 B CN113722669 B CN 113722669B CN 202111291162 A CN202111291162 A CN 202111291162A CN 113722669 B CN113722669 B CN 113722669B
- Authority
- CN
- China
- Prior art keywords
- data
- matrix
- operation data
- vector register
- target operation
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 49
- 239000011159 matrix material Substances 0.000 claims abstract description 485
- 239000013598 vector Substances 0.000 claims abstract description 289
- 230000015654 memory Effects 0.000 claims description 47
- 238000000034 method Methods 0.000 description 21
- 238000010586 diagram Methods 0.000 description 12
- 230000001360 synchronised effect Effects 0.000 description 5
- 238000004590 computer program Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000013479 data entry Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000000758 substrate Substances 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/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
-
- 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/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
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)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
本公开提供了一种应用于矩阵运算的数据处理方法、装置、设备和存储介质。该数据处理方法包括:确定存储有第一矩阵的至少一个第一向量寄存器和存储有第二矩阵的至少一个第二向量寄存器,第一矩阵包括多个第一操作数据,第二矩阵包括多个第二操作数据;获取第一数据选择信息和第二数据选择信息;基于第一数据选择信息,从多个第一操作数据中选择至少一个第一操作数据,以得到至少一个第一目标操作数据;基于第二数据选择信息,从多个第二操作数据中选择至少一个第二操作数据,以得到至少一个第二目标操作数据。该数据处理方法充分利用了矩阵特性,在线程之间有效地复用数据,大大减少了数据的读取次数,降低了功耗。
Description
技术领域
本公开的实施例涉及一种数据处理方法、数据处理装置、数据处理设备及计算机可读存储介质。
背景技术
图形处理器(GPU,graphic process unit)中包括大量数据处理单元,每个数据处理单元是单指令多数据流(SIMD,Single-Instruction-Multiple-Data)结构,SIMD可以通过执行一条指令同时控制多个线程上执行相同的操作,每个SIMD结构中都有其专用的一组向量寄存器和大量可并行执行的运算单元,例如乘法单元。因为SIMD结构具有高度的并行性,所以SIMD结构被广泛应用于矩阵运算。
发明内容
本公开至少一实施例提供一种数据处理方法,应用于矩阵运算,包括:确定存储有第一矩阵的至少一个第一向量寄存器和存储有第二矩阵的至少一个第二向量寄存器,其中,第一矩阵包括多个第一操作数据,第二矩阵包括多个第二操作数据;获取第一数据选择信息和第二数据选择信息;基于第一数据选择信息,从多个第一操作数据中选择至少一个第一操作数据,以得到至少一个第一目标操作数据,将至少一个第一目标操作数据,以第二矩阵的第二矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第一乘法因子;基于第二数据选择信息,从多个第二操作数据中选择至少一个第二操作数据,以得到至少一个第二目标操作数据,将至少一个第二目标操作数据,以第一矩阵的第一矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第二乘法因子,其中,第一矩阵维数和第二矩阵维数均为正整数,且第一矩阵维数的类型和第二矩阵维数的类型不相同。
例如,在本公开至少一实施例提供的数据处理方法中,至少一个第一目标操作数据包括M个第一目标操作数据,多个运算器包括P个运算器组,每个运算器组包括M个运算器,第二矩阵维数为P,M和P均为正整数,将至少一个第一目标操作数据,以第二矩阵的第二矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第一乘法因子,包括:将M个第一目标操作数据复制P份,以得到P个第一目标操作数据组,其中,每个第一目标操作数组包括M个第一目标操作数据;将P个第一目标操作数据组分别提供至P个运算器组,以确定多个第一乘法因子,其中,每个运算器组的M个运算器对应的M个第一乘法因子分别为M个第一目标操作数据。
例如,在本公开至少一实施例提供的数据处理方法中,至少一个第二目标操作数据包括P个第二目标操作数据,多个运算器包括P个运算器组,每个运算器组包括M个运算器,第一矩阵维数为M,M和P均为正整数,将至少一个第二目标操作数据,以第一矩阵的第一矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第二乘法因子,包括:将P个第二目标操作数据复制M份,以得到P个第二目标操作数据组,其中,每个第二目标操作数组与一个第二目标操作数据对应,且包括相同的M个第二目标操作数据,将P个第二目标操作数据组分别提供至P个运算器组,以确定多个第二乘法因子,其中,每个运算器组中的M个运算器对应的M个第二乘法因子相同且为每个运算器组对应的第二目标操作数据组中的第二目标操作数据。
例如,在本公开至少一实施例提供的数据处理方法中,矩阵运算包含多个线程,多个运算器分别对应于多个线程,至少一个第一向量寄存器具有多个第一通路,至少一个第二向量寄存器具有多个第二通路,多个线程中的每一线程分别对应于多个第一通路中的相应的第一通路和多个第二通路中的相应的第二通路,多个第一操作数据对应于多个第一通路,多个第二操作数据对应于多个第二通路,基于第一数据选择信息,从多个第一操作数据中选择至少一个第一操作数据,以得到至少一个第一目标操作数据,包括:基于第一数据选择信息,在多个第一通路中确定被选择的至少一个第一通路,并将被选择的至少一个第一通路所对应的至少一个第一操作数据作为至少一个第一目标操作数据;以及基于第二数据选择信息,从多个第二操作数据中选择至少一个第二操作数据,以得到至少一个第二目标操作数据,包括:基于第二数据选择信息,在多个第二通路中确定被选择的至少一个第二通路,并将被选择的至少一个第二通路所对应的至少一个第二操作数据作为至少一个第二目标操作数据。
例如,本公开至少一实施例提供的数据处理方法还包括:确定至少一个目的向量寄存器;基于多个第一乘法因子和多个第二乘法因子,通过多个运算器执行乘法运算,以得到多个运算器对应的多个乘法运算结果,其中,每个运算器用于对其对应的第一乘法因子和第二乘法因子执行乘法运算,以得到每个运算器对应的乘法运算结果;以及将多个乘法运算结果发送到至少一个目的向量寄存器中。
例如,在本公开至少一实施例提供的数据处理方法中,将多个乘法运算结果发送到至少一个目的向量寄存器中,包括:将多个乘法运算结果与至少一个目的向量寄存器中已经存储的多个存储数据一一对应地进行加法运算,以得到多个加法运算结果;将多个加法运算结果存储在至少一个目的向量寄存器中。
例如,在本公开至少一实施例提供的数据处理方法中,获取第一数据选择信息和第二数据选择信息,包括:获取数据选择指令;解析数据选择指令,以得到第一数据选择信息和第二数据选择信息。
例如,在本公开至少一实施例提供的数据处理方法中,至少一个第一向量寄存器包括第一目标向量寄存器,至少一个第一目标操作数据均存储在第一目标向量寄存器中,至少一个第二向量寄存器包括第二目标向量寄存器,至少一个第二目标操作数据均存储在第二目标向量寄存器中。
例如,在本公开至少一实施例提供的数据处理方法中,第一矩阵为列矩阵,至少一个第一目标操作数据位于第一矩阵的同一列;以及第二矩阵为行矩阵,至少一个第二目标操作数据位于第二矩阵的同一行。
例如,在本公开至少一实施例提供的数据处理方法中,确定存储有第一矩阵的至少一个第一向量寄存器和存储有第二矩阵的至少一个第二向量寄存器,包括:获取至少一个第一地址和至少一个第二地址;基于至少一个第一地址,确定至少一个第一向量寄存器;基于至少一个第二地址,确定至少一个第二向量寄存器。
例如,在本公开至少一实施例提供的数据处理方法中,获取至少一个第一地址和至少一个第二地址,包括:获取矩阵运算指令;解析矩阵运算指令,以得到至少一个第一地址和至少一个第二地址。
例如,在本公开至少一实施例提供的数据处理方法中,获取第一数据选择信息和第二数据选择信息,包括:解析矩阵运算指令,以得到第一数据选择信息和第二数据选择信息。
例如,本公开至少一实施例提供的数据处理方法还包括:获取至少一条第一数据读取指令和至少一条第二数据读取指令;解析至少一条第一数据读取指令,以得到至少一个第一读地址和至少一个第一地址;基于至少一个第一读地址从存储器上读取多个第一操作数据,基于至少一个第一地址,确定至少一个第一向量寄存器并将多个第一操作数据写入至少一个第一向量寄存器;解析至少一条第二数据读取指令,以得到至少一个第二读地址和至少一个第二地址;基于至少一个第二读地址从存储器上读取多个第二操作数据,基于至少一个第二地址,确定至少一个第二向量寄存器并将多个第二操作数据写入至少一个第二向量寄存器。
例如,在本公开至少一实施例提供的数据处理方法中,多个运算器并行执行乘法运算。
本公开至少一实施例提供一种数据处理装置,应用于矩阵运算,其中,数据处理装置包括:寄存器确定单元,用于确定存储有第一矩阵的至少一个第一向量寄存器和存储有第二矩阵的至少一个第二向量寄存器,其中,第一矩阵包括多个第一操作数据,第二矩阵包括多个第二操作数据;信息获取单元,用于获取第一数据选择信息和第二数据选择信息;数据选择单元,用于基于第一数据选择信息,从多个第一操作数据中选择至少一个第一操作数据,以得到至少一个第一目标操作数据,以及基于第二数据选择信息,从多个第二操作数据中选择至少一个第二操作数据,以得到至少一个第二目标操作数据;数据广播单元,用于将至少一个第一目标操作数据,以第二矩阵的第二矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第一乘法因子,以及将至少一个第二目标操作数据,以第一矩阵的第一矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第二乘法因子,其中,第一矩阵维数和第二矩阵维数均为正整数,且第一矩阵维数的类型和第二矩阵维数的类型不相同。
本公开至少一实施例提供一种数据处理设备,包括:处理器和存储介质,存储介质用于存储有计算机可执行指令,其中,计算机可执行指令在被处理器执行时实现本公开至少一实施例提供的数据处理方法。
本公开至少一实施例提供一种计算机可读存储介质,用于非瞬时性地存储计算机可执行指令,其中,计算机可执行指令在被处理器执行时实现本公开至少一实施例提供的数据处理方法。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1示出了根据本公开实施例的用于矩阵运算的数据处理方法的示意性流程图;
图2示出了根据本公开实施例的执行矩阵运算的线程与向量寄存器的通路之间的对应关系的示意图;
图3示出了根据本公开实施例的矩阵运算的数据处理的一个示例的示意图;
图4示出了根据本公开实施例的应用于矩阵运算的数据处理装置的一个示例的示意框图;
图5示出了根据本公开实施例的数据处理后半部分所涉及的示例数据选择单元和数据广播单元的工作示意图;
图6示出了根据本公开实施例的数据处理设备的示意图。
具体实施方式
为了使得本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
为了保持本公开实施例的以下说明清楚且简明,本公开省略了部分已知功能和已知部件的详细说明。
GPU的SIMD结构处理单元通过执行矩阵运算指令来同时控制多个线程上执行相同的操作,以实现矩阵读取、运算操作、结果存入等。例如,对于SIMD 32结构,执行一条指令可以同时控制32个线程上执行的操作,每个SIMD 32结构中都有其专用的一组向量寄存器,每个向量寄存器具有32个通路。下表1示出了通用的矩阵运算指令,其是SIMD结构中执行矩阵运算操作时采用的传统指令,矩阵运算指令包括源操作数1、源操作数2、源操作数3、目的操作数和操作码,源操作数1用于指示第一向量寄存器的地址,源操作数2用于指示第二向量寄存器的地址,源操作数3用于指示第三向量寄存器的地址,目的操作数用于指示用于存储矩阵运算的结果的目的向量寄存器的地址,操作码用于指示该矩阵运算指令所执行的具体操作,即矩阵运算指令的类型,例如,通过将矩阵运算指令中的操作码设置为指示乘加运算的相应值,该矩阵运算指令即为矩阵乘加指令,通过将矩阵运算指令中的操作码设置为指示乘法操作的相应值,该矩阵运算指令即为矩阵运算指令。
表1
例如,在SIMD32结构下采用通用的矩阵运算指令格式的矩阵运算指令来执行矩阵乘法运算A*B,矩阵A是尺寸为8*4的矩阵,即矩阵A包含八行四列的数据,四列分别是列向量A(:,1)、A(:,2)、A(:,3)、A(:,4),每个列向量包含8个数据,矩阵B是尺寸为4*4的矩阵,即矩阵B包含四行四列的数据,四行分别是行向量B(1,:)、B(2,:)、B(3,:)、B(4,:),每个行向量包含4个数据。
对于上述矩阵乘法运算,常采用的现有技术是将矩阵A和矩阵B的数据从DDR(双倍速同步动态随机存取存储器,Double-Data-Rate Synchronous Dynamic Random-AccessMemory,内存的一种)经由缓存(Cache,高速缓冲存储器)逐个读入向量寄存器,然后再从向量寄存器读出并传送给运算器进行运算。首先将矩阵A的四个列向量A(:,1)、A(:,2)、A(:,3)、A(:,4)分别读入四个向量寄存器(分别称为V0、V1、V2和V3)中,然后将矩阵B的四个行向量B(1,:)、B(2,:)、B(3,:)、B(4,:)分别读入四个向量寄存器(分别称为V80、V81、V82和V83)中,每次运算将向量寄存器V0、V1、V2或V3的第一通路对应的数据,与向量寄存器V80、V81、V82或V83的第二通路对应的数据送至对应的运算器进行乘法运算。此运算过程涉及多次从DDR中读取数据的过程,例如在此运算过程中从DDR中读取数据的次数为8次,从而造成了不必要的数据冗余以及额外功耗。
本公开至少一实施例提供一种数据处理方法,应用于矩阵运算,包括:确定存储有第一矩阵的至少一个第一向量寄存器和存储有第二矩阵的至少一个第二向量寄存器,其中,第一矩阵包括多个第一操作数据,第二矩阵包括多个第二操作数据;获取第一数据选择信息和第二数据选择信息;基于第一数据选择信息,从多个第一操作数据中选择至少一个第一操作数据,以得到至少一个第一目标操作数据,将至少一个第一目标操作数据,以第二矩阵的第二矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第一乘法因子;基于第二数据选择信息,从多个第二操作数据中选择至少一个第二操作数据,以得到至少一个第二目标操作数据,将至少一个第二目标操作数据,以第一矩阵的第一矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第二乘法因子,其中,第一矩阵维数和第二矩阵维数均为正整数,且第一矩阵维数的类型和第二矩阵维数的类型不相同。
本公开的实施例提供的用于矩阵运算的数据处理方法通过对第一向量寄存器的多个第一通路进行选择和对第二向量寄存器的多个第二通路进行选择,将所选择的第一通路和所选择的第二通路对应的操作数据进行复制以参与对应线程的乘法运算,充分利用了矩阵特性,在线程之间有效地复用数据,减少线程间的数据存冗余,大大减少了从DDR中读取数据的次数,降低了功耗。
在本公开的实施例中,在矩阵运算的过程中,可以对第一矩阵中的第一操作数据进行选择并复制和对第二矩阵中的第二操作数据进行选择并复制,从而实现矩阵运算,由此,在从DDR读取数据(例如,第一操作数据和第二操作数据)并写入向量寄存器的过程中,不需要对读取的数据(例如,第一操作数据和第二操作数据)进行复制,从而减少从DDR中读取数据的次数(例如,在一些情况下,第一矩阵中的所有第一操作数据可以通过一次数据读取过程被读取并写入向量寄存器,第二矩阵中的所有第二操作数据可以通过一次数据读取过程被读取并写入向量寄存器),加快从DDR中读取数据的速度,节省从DDR中读取数据的时间,节省功耗,减少或避免在将数据写入向量寄存器的过程造成的数据冗余,减少用于存储第一矩阵的第一操作数据和第二矩阵的第二操作数据的存储空间(例如,减少存储第一矩阵和第二矩阵的向量寄存器的数量),节省存储空间。
本公开至少一个实施例还提供一种对应于上述数据处理方法的数据处理装置、数据处理设备和计算机可读存储介质。
下面将结合附图对本公开的实施例进行进一步描述。
图1示出了根据本公开实施例的用于矩阵运算的数据处理方法100的示意性流程图。例如,矩阵运算用于实现对第一矩阵和第二矩阵进行运算。
如图1所示,本公开实施例提供的数据处理方法100包括步骤S101至步骤S104。
步骤S101:确定存储有第一矩阵的至少一个第一向量寄存器和存储有第二矩阵的至少一个第二向量寄存器,其中,第一矩阵包括多个第一操作数据,第二矩阵包括多个第二操作数据。
步骤S102:获取第一数据选择信息和第二数据选择信息。
步骤S103:基于第一数据选择信息,从多个第一操作数据中选择至少一个第一操作数据,以得到至少一个第一目标操作数据,将至少一个第一目标操作数据,以第二矩阵的第二矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第一乘法因子。
步骤S104:基于第二数据选择信息,从多个第二操作数据中选择至少一个第二操作数据,以得到至少一个第二目标操作数据,将至少一个第二目标操作数据,以第一矩阵的第一矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第二乘法因子。
例如,第一矩阵维数和第二矩阵维数均为正整数,且第一矩阵维数的类型和第二矩阵维数的类型不相同。
第一矩阵维数表示矩阵的行数,第二矩阵维数表示矩阵的列数。例如,一个矩阵为8*4的矩阵,即,该矩阵的第一矩阵维数为8,该矩阵的第二矩阵维数为4。
在本公开的实施例中,基于矩阵运算自身的特点,针对第一矩阵中的第一操作数据和第二矩阵中的第二操作数据进行不同的选择复制操作,即将至少一个第一目标操作数据以第二矩阵的第二矩阵维数为倍数进行复制,将至少一个第二目标操作数据以第一矩阵的第一矩阵维数为倍数进行复制,从而使得复制后的数据满足矩阵运算的实现过程。
此外,由于在矩阵运算的过程中,可以基于矩阵运算的特点对第一矩阵中的第一操作数据进行选择并复制,也可以对第二矩阵中的第二操作数据进行选择并复制,从而可以使得向量寄存器所存储的第一操作数据和第二操作数据可以不受矩阵运算的限制,第一操作数据和第二操作数据的存储过程和存储位置更加灵活多变,避免数据冗余。
根据本公开实施例,步骤S101包括:获取至少一个第一地址和至少一个第二地址;基于至少一个第一地址,确定至少一个第一向量寄存器;基于至少一个第二地址,确定至少一个第二向量寄存器。第一地址或第二地址可以是第一向量寄存器或第二向量寄存器在该SIMD结构处理单元对应的所有寄存器中的索引。
根据本公开实施例,获取至少一个第一地址和至少一个第二地址,包括:获取矩阵运算指令;解析矩阵运算指令,以得到至少一个第一地址和至少一个第二地址。
例如,至少一个第一地址表示存储有第一矩阵的至少一个第一向量寄存器的地址,至少一个第二地址表示存储有第二矩阵的至少一个第二向量寄存器的地址,基于至少一个第一地址可以确定至少一个第一向量寄存器,基于至少一个第二地址可以确定至少一个第二向量寄存器。可以从存储器(例如DDR等)中获取矩阵运算指令。在本公开的一些实施例中,矩阵运算指令的格式可以如下面的表2所示,矩阵运算指令可以包括源操作数1、源操作数2、源操作数3、目的操作数、操作码和控制域,源操作数1、源操作数2、源操作数3、目的操作数、操作码的含义与上述表1所示的矩阵运算指令中的各个部分的含义相同,在此不再赘述。对于控制域,后续将详细描述。例如,在步骤S101中,通过解析矩阵运算指令,可以根据源操作数1和源操作数2得到至少一个第一地址和至少一个第二地址。
表2
例如,第一矩阵可以被存储到至少一个第一向量寄存器中,第二矩阵可以被存储到至少一个第二向量寄存器中。至少一个第一向量寄存器具有多个第一通路,至少一个第二向量寄存器具有多个第二通路,在一些示例中,第一向量寄存器和第二向量寄存器具有相同数量的通路,第一矩阵的第一操作数据对应于第一向量寄存器的第一通路,也就是说,第一向量寄存器中的第一通路可以传输对应的第一操作数据,第二矩阵的第二操作数据对应于第二向量寄存器的第二通路,也就是说,第二向量寄存器中的第二通路可以传输对应的第二操作数据。例如,对于SIMD 32结构,第一向量寄存器具有32个第一通路,第二向量寄存器具有32个第二通路,因此第一向量寄存器或第二向量寄存器可以同时提供所存储的矩阵中的最多32个数据参与运算。在另一些示例中,第一向量寄存器具有的第一通路的数量和第二向量寄存器具有的第二通路的数量可以不相同。
例如,对于矩阵乘法A*B,矩阵A为第一矩阵的一个示例,矩阵A的尺寸为8*4,矩阵A包含四个列向量A(:,1)、A(:,2)、A(:,3)、A(:,4),每个列向量包含8个数据,矩阵B为第二矩阵的一个示例,矩阵B的尺寸为4*4,矩阵B包含四个行向量B(1,:)、B(2,:)、B(3,:)、B(4,:),每个行向量包含4个数据。矩阵A的32个数据即为多个第一操作数据,矩阵B的16个数据即为多个第二操作数据。假设矩阵A和矩阵B中的每个数据包括32比特(bit,binary digit),且每个向量寄存器(第一向量寄存器或第二向量寄存器)是一个可以存储32个32bit的标量元素的向量寄存器,则此时,矩阵A的32个数据可以被存储至一个第一向量寄存器中,矩阵B的16个数据可以被存储至一个第二向量寄存器中。存储有矩阵A的第一向量寄存器的32个第一通路0-31分别对应于矩阵A的32个数据,例如,第一通路0-7对应列向量A(:,1)的8个数据,第一通路8-15对应列向量A(:,2)的8个数据,第一通路16-23对应列向量A(:,3)的8个数据,以及第一通路24-31对应列向量A(:,4)中的8个数据,而存储有矩阵B的第二向量寄存器的32个第二通路中的前16个通路分别对应于矩阵B的16个数据,例如,第二通路0-3对应行向量B(1,:)的4个数据,第二通路4-7对应行向量B(2,:)的4个数据,第二通路8-11对应行向量B(3,:)的4个数据,以及第二通路12-15对应行向量B(4,:)的4个数据,第二向量寄存器中的其它第二通路不与矩阵B中的任何数据对应。需要说明的是,若矩阵B包括32个数据,则存储有矩阵B的第二向量寄存器的32个第二通路分别对应于矩阵B的32个数据。
例如,矩阵A中包括的数据的数量大于32时,则矩阵A的数据可以被存储至多个第一向量寄存器中,矩阵B中包括的数据的数量大于32时,矩阵B的数据可以被存储至多个第二向量寄存器中。
本公开是以矩阵A和矩阵B中的每个数据包括32比特(bit,binary digit),且每个向量寄存器(第一向量寄存器或第二向量寄存器)是一个可以存储32个32bit的标量元素的向量寄存器为例进行描述,但本公开的实施例并不限于此。
在步骤S102中,可以获取第一数据选择信息和第二数据选择信息。
例如,在一些实施例中,可以从存储器(例如DDR等)中获取数据选择指令,数据选择指令包括第一数据选择信息和第二数据选择信息,通过解析数据选择指令则可以得到第一数据选择信息和第二数据选择信息。数据选择指令如下面的表3所示。例如,数据选择指令还可以包括保留字段,以用于实现其他功能(由用户根据实际情况设置)。
表3
例如,在另一些实施例中,可以从存储器(例如DDR等)中获取矩阵运算指令,通过解析矩阵运算指令则可以得到第一数据选择信息和第二数据选择信息。根据本公开的实施例,矩阵运算指令如表2所示,表2在表1所示的矩阵运算指令的基础上增加了控制域,控制域中包含指令字段SRC1_SVF_MODE和SRC2_SVF_MODE,SRC1_SVF_MODE为第一数据选择信息,用于操作第一矩阵中的第一操作数据,以指导矩阵运算过程中第一矩阵内参与运算的数据的选择和复制,SRC2_SVF_MODE为第二数据选择信息,用于操作第二矩阵中的第二操作数据,以指导矩阵运算过程中第二矩阵内参与运算的数据的选择和复制。
根据本公开的实施例,矩阵运算指令和数据选择指令可以为两个指令,或者可以为一个指令的两个部分。例如,在矩阵运算指令和数据选择指令为两个指令的情况下,获取第一数据选择信息和第二数据选择信息可以包括:获取数据选择指令并解析数据选择指令得到第一数据选择信息和第二数据选择信息;在矩阵运算指令和数据选择指令作为一个指令的两个部分的情况下,获取第一数据选择信息和第二数据选择信息可以包括:通过获取并解析矩阵运算指令得到第一数据选择信息和第二数据选择信息。在下面的描述中,以矩阵运算指令和数据选择指令为一个指令的两个部分为例进行说明,例如,矩阵运算指令和数据选择指令可以为同一个SIMD指令的两个部分,即SIMD指令包括矩阵运算指令和数据选择指令。
例如,在一些实施例中,SIMD指令的长度可以为64比特,其前48比特[0:47]为矩阵运算指令的部分,矩阵运算指令中各字段的定义及相关描述如表4所示;其后16比特[48:63]为数据选择指令的部分,数据选择指令中各字段的定义及相关描述如表5所示。
参见表4,在此SIMD指令的矩阵运算指令的部分中,第0至7比特[0:7]为源操作数1字段,此字段可指示存储有第一矩阵的至少一个第一向量寄存器的地址。第8至15比特[8:15]为源操作数2字段,此字段可指示存储有第二矩阵的至少一个第二向量寄存器的地址。第16至23比特[16:23]为源操作数3字段,此字段可指示存储有第三矩阵的至少一个第三向量寄存器的地址。第三矩阵是矩阵乘加运算的初始矩阵,例如,对于矩阵乘加运算A*B+C,第一矩阵为矩阵A,第二矩阵为矩阵B,第三矩阵就是矩阵C。第24至31比特[24:31]为目的操作数字段,此字段可指示存储有矩阵运算的结果的目的向量寄存器的地址。需要说明的是,在一些实施例中,第三向量寄存器与目的向量寄存器可以为同一个。第32至47比特[32:47]为操作码字段,操作码字段可以包括指定的多个值。例如,操作码为0则指示进行乘法操作,此时,矩阵运算指令为矩阵乘法指令,操作码为1则指示进行乘加操作,此时,矩阵运算指令为矩阵乘加指令。
表4
参见表5,在此SIMD指令的数据选择指令的部分中,第48至52比特[48:52]为SRC2_SVF_MODE字段,第53至57比特为SRC1_SVF_MODE字段,长度为5比特的SRC1_SVF_MODE/SRC2_SVF_MODE可用于指示多个线程之间的数据的复制操作。其余比特[63:58]为数据选择指令的保留字段,可保留用于后续实现其它操作。SRC1_SVF_MODE和SRC2_SVF_MODE的比特数不限于5比特,SRC1_SVF_MODE和SRC2_SVF_MODE所具有的比特的位数可以取决于矩阵的大小。需要说明的是,在表5中,以P为4,即P个运算器组(后续描述)分别为第一个运算器组、第二个运算器组、第三个运算器组和第四个运算器组,且每个运算器组包括8个运算器为例,然而应该理解是,表5仅是示意性的,SRC1_SVF_MODE和SRC2_SVF_MODE的具体含义可以根据实际情况设计,本公开对此不作具体限制。
表5
图2示出了根据本公开实施例的执行矩阵运算的线程与向量寄存器的通路之间的对应关系的示意图。
根据本公开的实施例,矩阵运算包含多个线程,多个运算器分别对应于多个线程,多个线程中的每一线程分别对应于多个第一通路中的相应的第一通路和多个第二通路中的相应的第二通路,多个第一操作数据对应于多个第一通路,多个第二操作数据对应于多个第二通路。
如图2所示,在一些实施例中,矩阵A为第一矩阵的一个示例,矩阵B为第二矩阵的一个示例,矩阵运算包含32个线程,即线程0~线程31,例如,线程0对应于第一向量寄存器的通路0(第一通路的一个示例)和第二向量寄存器的通路0(第二通路的一个示例),线程1对应于第一向量寄存器的通路1和第二向量寄存器的通路1,以此类推。需要说明的是,在图2中,第一向量寄存器的通路0~通路31由图2中从第一向量寄存器指向选择器A的带箭头的线表示,第二向量寄存器的通路0~通路15由图2中从第二向量寄存器指向选择器B的带箭头的线表示。
接下来,回到图1,在步骤S103中,基于第一数据选择信息,从多个第一操作数据中选择至少一个第一操作数据,以得到至少一个第一目标操作数据,包括:基于第一数据选择信息,在多个第一通路中确定被选择的至少一个第一通路,并将被选择的至少一个第一通路所对应的至少一个第一操作数据作为至少一个第一目标操作数据。
例如,在一些实施例中,第一矩阵为列矩阵,即第一矩阵中位于同一列的数据在内存中是被连续存储的,至少一个第一目标操作数据可以位于第一矩阵的同一列。例如,位于第一矩阵的同一列的所有第一操作数据均为第一目标操作数据,此时,从多个第一操作数据中选择至少一个第一操作数据以得到至少一个第一目标操作数据是选择位于第一矩阵的同一列中的所有第一操作数据。例如,第一矩阵为8*4的矩阵,则至少一个第一目标操作数据为位于第一矩阵的第一列或第二列或第三列或第四列中的第一操作数据,至少一个第一目标操作数据的个数为8个。
在本公开的实施例中,由于矩阵运算自身的特点,针对第一矩阵中的第一操作数据的选择逻辑和针对第二矩阵中的第二操作数据的选择逻辑本质上不相同,例如,对于第一矩阵,可以从同一列中选择第一操作数据并对选择得到的第一操作数据以第二矩阵的第二矩阵维数为倍数进行数据复制,而对于第二矩阵,则可以从同一行中选择第二操作数据并对选择得到的第二操作数据以第一矩阵的第一矩阵维数为倍数进行数据复制。在硬件实现上,对矩阵的同一列数据进行选择所需要的硬件实现和对矩阵的同一行数据进行选择所需要的硬件实现是不相同。例如,第一数据选择信息为SRC1_SVF_MODE,基于SRC1_SVF_MODE的值可以在多个第一通路中确定被选择的至少一个第一通路。例如,基于上述表5所示,当SRC1_SVF_MODE=5’d0时,将至少一个第一向量寄存器的通路0-7作为被选择的至少一个第一通路,第一向量寄存器的通路0-7所对应的8个第一操作数据确定为8个第一目标操作数据,该8个第一目标操作数据分别复制给第一个运算器组、第二个运算器组、第三个运算器组以及第四个运算器组。
例如,根据本公开的实施例,至少一个第一向量寄存器包括第一目标向量寄存器,至少一个第一目标操作数据均存储在第一目标向量寄存器中,即至少一个第一目标操作数据被存储在同一个向量寄存器(即第一目标向量寄存器)中,例如,上述确定的8个第一目标操作数据均被存储在第一目标向量寄存器中。
根据本公开的实施例,至少一个第一目标操作数据包括M个第一目标操作数据,多个运算器包括P个运算器组,每个运算器组包括M个运算器,第二矩阵的第二矩阵维数为P,例如,P和M均为正整数。在步骤S103中,将至少一个第一目标操作数据,以第二矩阵的第二矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第一乘法因子,包括:将M个第一目标操作数据复制P份,以得到P个第一目标操作数据组,其中,每个第一目标操作数据组包括M个第一目标操作数据;将P个第一目标操作数据组分别提供至P个运算器组,以确定多个第一乘法因子,其中,每个运算器组的M个运算器对应的M个第一乘法因子分别为M个第一目标操作数据。
例如,如图2所示,若第一矩阵为8*4的矩阵A,第二矩阵为4*4的矩阵B,第二矩阵的第二矩阵维数为4,至少一个第一目标操作数据包括8个第一目标操作数据,此时,M为8,如图2所示,该8个第一目标操作数据可以为矩阵A的第一列的数据A(1,1)~A(8,1),多个运算器包括4个运算器组,此时,P为4,每个运算器组包括8个运算器。将8个第一目标操作数据A(1,1)~A(8,1)复制4份,以得到4个第一目标操作数据组,其中,每个第一目标操作数据组包括8个第一目标操作数据A(1, 1)~A(8,1),将4个第一目标操作数据组分别提供至4个运算器组,以确定多个第一乘法因子,多个第一乘法因子即为4个第一目标操作数据组中的32个数据。每个运算器组对应一个第一目标操作数据组,每个运算器组的8个运算器对应的8个第一乘法因子分别为其对应的第一目标操作数据组中的8个第一目标操作数据A(1,1)~A(8,1)。
在步骤S104中,基于第二数据选择信息,从多个第二操作数据中选择至少一个第二操作数据,以得到至少一个第二目标操作数据,将至少一个第二目标操作数据,以第一矩阵的第一矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第二乘法因子。
在步骤S104中,从多个第二操作数据中选择至少一个第二操作数据,以得到至少一个第二目标操作数据,包括:基于第二数据选择信息,在多个第二通路中确定被选择的至少一个第二通路,并将被选择的至少一个第二通路所对应的至少一个第二操作数据作为至少一个第二目标操作数据。
例如,在一些实施例中,第二矩阵为行矩阵,即第二矩阵中位于同一行的数据在内存中是被连续存储的,至少一个第二目标操作数据可以位于第二矩阵的同一行。例如,位于第二矩阵的同一行的所有第二操作数据均为第二目标操作数据,此时,从多个第二操作数据中选择至少一个第二操作数据以得到至少一个第二目标操作数据是选择位于第二矩阵的同一行中的所有第二操作数据。例如,第二矩阵为4*4的矩阵,则至少一个第二目标操作数据为位于第二矩阵的第一行或第二行或第三行或第四行的第二操作数据,至少一个第二目标操作数据的个数为4个。
例如,第二数据选择信息为SRC2_SVF_MODE,基于SRC2_SVF_MODE的值可以在多个第二通路中确定被选择的至少一个第二通路。例如,例如,基于上述表5所示,当SRC2_SVF_MODE=5’d0时,将至少一个第二向量寄存器的通路0-3作为被选择的至少一个第二通路,第二向量寄存器的通路0-3所对应的4个第二操作数据确定为4个第二目标操作数据,其中,第二向量寄存器的通路0对应的第二目标操作数据复制给第一个运算器组;第二向量寄存器的通路1对应的第二目标操作数据复制给第二个运算器组;第二向量寄存器的通路2对应的第二目标操作数据复制给第三个运算器组;第二向量寄存器的通路3对应的第二目标操作数据复制给第四个运算器组。
例如,根据本公开的实施例,至少一个第二向量寄存器包括第二目标向量寄存器,至少一个第二目标操作数据均存储在第二目标向量寄存器中,即至少一个第二目标操作数据被存储在同一个量寄存器(即第二目标向量寄存器)中,例如,上述确定的4个第二目标操作数据均被存储在第二目标向量寄存器中。
根据本公开的实施例,至少一个第二目标操作数据包括P个第二目标操作数据,多个运算器包括P个运算器组,每个运算器组包括M个运算器,第一矩阵的第一矩阵维数为M,M和P均为正整数,在步骤S104中,将至少一个第二目标操作数据,以第一矩阵的第一矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第二乘法因子,包括:将P个第二目标操作数据复制M份,以得到P个第二目标操作数据组,其中,每个第二目标操作数组与一个第二目标操作数据对应,且包括相同的M个第二目标操作数据,将P个第二目标操作数据组分别提供至P个运算器组,以确定多个第二乘法因子,其中,每个运算器组中的M个运算器对应的M个第二乘法因子相同且为每个运算器组对应的第二目标操作数据组中的第二目标操作数据。
例如,如图2所示,在第一矩阵为8*4的矩阵A,第二矩阵为4*4的矩阵B的情况下,第一矩阵的第一矩阵维数为8,至少一个第二目标操作数据包括4个第二目标操作数据,如图2所示,该4个第二目标操作数据可以为矩阵B的第一行的数据B(1,1)~B(1,4),多个运算器包括4个运算器组,每个运算器组包括8个运算器。将4个第二目标操作数据B(1,1)~B(1,4)分别复制8份,以得到4个第二目标操作数据组,其中,每个第二目标操作数据组与一个第二目标操作数据对应,且包括相同的8个第二目标操作数据,将4个第二目标操作数据组分别提供至4个运算器组,以确定多个第二乘法因子,多个第二乘法因子即为4个第二目标操作数据组中的32个数据。每个运算器组对应一个第二目标操作数据组,每个运算器组中的8个运算器对应的8个第二乘法因子相同且为每个运算器组对应的第二目标操作数据组中的第二目标操作数据。
例如,如图2所示,选择器A对应的通路0~通路31(选择器A对应的通路0~通路31由图2中从选择器A指向运算器的带箭头的线表示)分别对应于线程0~线程31,选择器B对应的通路0~通路31(选择器B对应的通路0~通路31由图2中从选择器B指向运算器的带箭头的线表示)也分别对应于线程0~线程31。线程0至线程7对应的第一向量寄存器的通路0至通路7对应于矩阵A中的列向量A(:,1)的8个第一操作数据A(1,1),A(2,1),…,A(8,1),在一些示例中,矩阵A中的列向量A(:,1)的8个第一操作数据A(1,1),A(2,1),…,A(8,1)作为第一目标操作数据,经过将第一向量寄存器的通路0至通路7对应的第一操作数据A(1,1),A(2,1),…,A(8,1)分别复制到选择器A对应的通路0至通路7、选择器A对应的通路8至通路15、选择器A对应的通路16至通路23、选择器A对应的通路24至通路31,则线程0至线程7所对应的数据分别为A(1,1),A(2,1),…,A(8,1),线程8至线程15所对应的数据分别为A(1,1),A(2,1),…,A(8,1),线程16至线程23所对应的数据分别为A(1,1),A(2,1),…,A(8,1),线程24至线程31所对应的数据分别为A(1,1),A(2,1),…,A(8,1)。选择器A对应的通路传输的数据为上述第一乘法因子。线程0至线程3对应的第二向量寄存器的通路0至通路3对应于矩阵B的行向量B(1,:)的4个第二操作数据B(1,1),B(1,2),B(1,3),B(1,4),在一些示例中,矩阵B的行向量B(1,:)的4个第二操作数据B(1,1),B(1,2),B(1,3),B(1,4)作为第二目标操作数据,经过将第二向量寄存器的通路0对应的第二操作数据B(1,1)复制到选择器B对应的通路0至通路7,将第二向量寄存器的通路1对应的第二操作数据B(1,2)复制到选择器B对应的通路8至通路15,将第二向量寄存器的通路2对应的第二操作数据B(1,3)复制到选择器B对应的通路16至通路23,将第二向量寄存器的通路3对应的第二操作数据B(1,4)复制到选择器B对应的通路24至通路31中,线程0至线程7对应的数据都为B(1,1),线程8至线程15对应的数据都为B(1,2),线程16至线程23对应的数据都为B(1,3),线程24至线程31对应的数据都为B(1,4)。选择器B对应的通路传输的数据为上述第二乘法因子。上述是以矩阵A的第一列和矩阵B的第一行为例来说明矩阵运算中的数据复制操作,矩阵A的其它列和矩阵B的其它行和此示例类似,在此不再赘述。
除了步骤S101~S104,如图1所示,本公开的实施例提供的数据处理方法还包括步骤S105~S107。
步骤S105:确定至少一个目的向量寄存器。
例如,可以从存储器(例如DDR等)中获取矩阵运算指令,并解析矩阵运算指令以得到至少一个目的向量寄存器的地址,基于至少一个目的向量寄存器的地址确定至少一个目的向量寄存器。
步骤S106:基于多个第一乘法因子和多个第二乘法因子,通过多个运算器执行乘法运算,以得到多个运算器对应的多个乘法运算结果,其中,每个运算器用于对其对应的第一乘法因子和第二乘法因子执行乘法运算,以得到每个运算器对应的乘法运算结果。
例如,第一矩阵为8*4的矩阵,第二矩阵为4*4的矩阵,根据步骤S103和步骤S104,确定多个第一乘法因子和多个第二乘法因子。在此实施例中,第一目标操作数据为位于第一矩阵的同一列中的8个第一操作数据,第二目标操作数据为位于第二矩阵的同一行中的4个第二操作数据。8个第一目标操作数据以第二矩阵的第二矩阵维数(即4)为倍数进行复制以得到32个第一乘法因子,将32个第一乘法因子分别提供至32个运算器,32个第一乘法因子与32个运算器一一对应;4个第二目标操作数据以第一矩阵的第一矩阵维数(即8)为倍数进行复制以得到32个第二乘法因子,将32个第二乘法因子分别提供至32个运算器,32个第二乘法因子与32个运算器一一对应。每个运算器对应一个第一乘法因子和一个第二乘法因子并且对该第一乘法因子和该第二乘法因子执行乘法运算以得到乘法运算结果。
例如,如图2所示,对于矩阵乘法A*B=C,第一矩阵为8*4的矩阵A,第二矩阵为4*4的矩阵B,相应地,结果矩阵C为8*4的矩阵。多个运算器包括运算器0~运算器31(图2仅示出了运算器0、运算器1、运算器24和运算器31),每个运算器包括乘法器以用于执行乘法运算。运算器0对应于选择器A的通路0和选择器B的通路0,运算器0用于对选择器A的通路0传输的第一乘法因子和选择器B的通路0传输的第二乘法因子进行乘法运算,以得到运算器0对应的乘法运算结果C(1,1);运算器1对应于选择器A的通路1和选择器B的通路1,运算器1用于对选择器A的通路1传输的第一乘法因子和选择器B的通路1传输的第二乘法因子进行乘法运算,以得到运算器1对应的乘法运算结果C(2,1),以此类推。图2还示出了结果矩阵C中的运算器24对应的乘法运算结果C(1,4),运算器31对应的乘法运算结果C(8,4)。
根据本公开的实施例,多个运算器并行执行乘法运算。例如,32个运算器同时执行乘法运算。
步骤S107:将多个乘法运算结果发送到至少一个目的向量寄存器中。
例如,至少一个目的向量寄存器用于存储多个乘法运算结果。
根据本公开的实施例,步骤S107包括:将多个乘法运算结果与至少一个目的向量寄存器中已经存储的多个存储数据一一对应地进行加法运算,以得到多个加法运算结果;将多个加法运算结果存储在至少一个目的向量寄存器中。
例如,第一矩阵为8*4的矩阵,第二矩阵为4*4的矩阵,第一矩阵和第二矩阵相乘以得到结果矩阵,结果矩阵为8*4的矩阵。第一矩阵的第一列的8个数据分别和第二矩阵的第一行的第一个数据相乘得到一组8个乘法运算结果,第一矩阵的第一列的8个数据分别和第二矩阵的第一行的第二个数据相乘得到一组8个乘法运算结果,以此类推,第一矩阵的第一列和第二矩阵的第一行相乘得到4组乘法运算结果,每组乘法运算结果包含8个乘法运算结果,这四组乘法运算结果(一共32个乘法运算结果)发送到目的向量寄存器并作为存储数据存储在目的向量寄存器中。接着,第一矩阵的第二列和第二矩阵的第二行相乘得到的32个乘法运算结果被发送到目的向量寄存器并和该目的向量寄存器中先前已经存储的32个存储数据(例如,第一矩阵的第一列和第二矩阵的第一行相乘得到的32个乘法运算结果)一一对应地进行加法运算,以得到32个加法运算结果,这32个加法运算结果作为更新的32个存储数据存储在目的向量寄存器中。以此类推,第一矩阵的第四列和第二矩阵的第四行相乘得到的32个乘法运算结果被发送到目的向量寄存器并和先前已经存储的32个存储数据一一对应地进行加法运算,以得到32个加法运算结果,这32个加法运算结果为最终的结果存储在目的向量寄存器中。需要说明的是,第一矩阵的某一列和第二矩阵的某一行相乘得到的乘法运算结果被发送到目的向量寄存器的顺序不唯一,例如,第一矩阵的第一列和第二矩阵的第一行相乘得到的乘法运算结果可以最先被发送到目的向量寄存器也可以最后被发送到目的向量寄存器。
例如,可以采用至少一条第一数据读取指令将第一矩阵的第一操作数据从存储器(例如,内存)中读出并写入至少一个第一向量寄存器中,可以采用至少一条第二数据读取指令将第二矩阵的第二操作数据从存储器中读出并写入至少一个第二向量寄存器中。
针对第一操作数据的读取和写入以及第二操作数据的读取和写入,本公开的实施例提供的数据处理方法还包括以下步骤:获取至少一条第一数据读取指令和至少一条第二数据读取指令;解析至少一条第一数据读取指令,以得到至少一个第一读地址和至少一个第一地址;基于至少一个第一读地址从存储器上读取多个第一操作数据,基于至少一个第一地址,确定至少一个第一向量寄存器并将多个第一操作数据写入至少一个第一向量寄存器;解析至少一条第二数据读取指令,以得到至少一个第二读地址和至少一个第二地址;基于至少一个第二读地址从存储器上读取多个第二操作数据,基于至少一个第二地址,确定至少一个第二向量寄存器并将多个第二操作数据写入至少一个第二向量寄存器。
例如,可以从存储器(例如DDR等)中获取第一数据读取指令和第二数据读取指令。第一数据读取指令包含第一读地址和第一地址,第二数据读取指令包含第二读地址和第二地址。第一读地址指示第一操作数据在存储器上的存储位置,第二读地址指示第二操作数据在存储器上的存储位置。基于第一读地址和第二读地址,可以从存储器读取第一操作数据和第二操作数据。第一地址指示用于存储第一操作数据的第一向量寄存器的地址,第二地址指示用于存储第二操作数据的第二向量寄存器的地址,基于第一地址和第二地址,可以确定第一向量寄存器和第二向量寄存器,并将第一操作数据写入第一向量寄存器以及将第二操作数据写入第二向量寄存器。
通过首先将整个第一矩阵一次性读入第一向量寄存器,将整个第二矩阵一次性读入第二向量寄存器,然后对第一向量寄存器的多个第一通路进行选择和对第二向量寄存器的多个第二通路进行选择,将所选择的第一通路对应的操作数据和所选择的第二通路对应的操作数据进行复制以参与对应线程的乘法运算,充分利用了矩阵特性,在线程之间有效地复用数据,减少线程间的数据存冗余,大大减少了数据的读取次数,降低了功耗。
图3示出了根据本公开实施例的矩阵运算的数据处理的一个示例的示意图。
如图3所示,本实施例中SIMD示例为SIMD 32结构,每个第一向量寄存器包括32个第一通路,每个第二向量寄存器包括32个第二通路,在此结构下执行矩阵乘法A*B=C,其中第一矩阵为8*4的矩阵A,第二矩阵为4*4的矩阵B,相应地,结果矩阵C为8*4的矩阵,涉及的硬件通用矩阵算法为:
本实施例中具体操作如下:
第一向量寄存器有32个第一通路,如图2所示,第一向量寄存器的通路0至通路7对应矩阵A的列向量A(:,1)的8个数据A(1,1),A(2,1),…,A(8,1),第一向量寄存器的通路8至通路15对应矩阵A的列向量A(:,2)的8个数据A(1,2),A(2,2),…,A(8,2),第一向量寄存器的通路16至通路23对应矩阵A的列向量A(:,3)的8个数据A(1,3),A(2,3),…,A(8,3),第一向量寄存器的通路24至通路31对应矩阵A的列向量A(:,4)的8个数据A(1,4),A(2,4),…,A(8,4)。第二向量寄存器具有32个第二通路,如图2所示,第二向量寄存器的通路0至通路3对应矩阵B的行向量B(1,:)中的4个数据B(1,1),B(1,2),B(1,3),B(1,4),第二向量寄存器的通路4至通路7(图2未示出)对应矩阵B的行向量B(2,:)中的4个数据B(2,1),B(2,2),B(2,3),B(2,4),第二向量寄存器的通路8至通路11(图2未示出)对应矩阵B的行向量B(3,:)中的4个数据B(3,1),B(3,2),B(3,3),B(3,4),第二向量寄存器的通路12至通路15对应矩阵B的行向量B(4,:)中的4个数据B(4,1),B(4,2),B(4,3),B(4,4)。需要说明的是,图2仅示出了第二向量寄存器的通路0~通路15,第二向量寄存器的剩余16个通路(第二向量寄存器的通路16~通路31)未示出,但并不表示其不存在,且第二向量寄存器的剩余16个通路所对应的数据根据实际情况设置。
参见表5,当SRC1_SVF_MODE=5’d0时,将第一操作数据A(1,1),A(2,1),…,A(8,1)作为第一目标操作数据相应地复制给选择器A对应的通路0~7、通路8~15、通路16~23以及通路24~31(图3中用一个实线箭头表示此过程),即以矩阵B的第二矩阵维数4为倍数将8个第一目标操作数据复制4份,当SRC1_SVF_MODE=5’d1时,将A(1,2),A(2,2),…,A(8,2)相应地复制给的选择器A对应的通路0~7、通路8~15、通路16~23以及通路24~31;当SRC1_SVF_MODE=5’d2时,将A(1,3),A(2,3),…,A(8,3)相应地复制给选择器A对应的通路0~7、通路8~15、通路16~23以及通路24~31;当SRC1_SVF_MODE=5’d3时,将A(1,4),A(2,4),…,A(8,4)相应地复制给选择器A对应的通路0~7、通路8~15、通路6~23以及通路24~31。
当SRC2_SVF_MODE=5’d0时,将第二操作数据B(1,1)复制给选择器B对应的通路0~7,将第二操作数据B(1,2)复制给选择器B对应的通路8~15,将第二操作数据B(1,3)复制给选择器B对应的通路16~23,将第二操作数据B(1,4)复制给选择器B对应的通路24~31(图3中用一个实线箭头表示此过程);当SRC1_SVF_MODE=5’d1时,将第二操作数据B(2,1),B(2,2),B(2,3),B(2,4)相应地分别复制给选择器B对应的通路0~7、通路8~15、通路16~23以及通路24~31;当SRC1_SVF_MODE=5’d2时,将第二操作数据B(3,1),B(3,2),B(3,3),B(3,4)相应地分别复制给选择器B对应的通路0~7、通路8~15、通路16~23以及通路24~31;当SRC1_SVF_MODE=5’d3时,将第二操作数据B(4,1),B(4,2),B(4,3),B(4,4)相应地分别复制给选择器B对应的通路0~7、通路8~15、通路16~23以及通路24~31。
SRC1_SVF_MODE=5’d0且SRC2_SVF_MODE=5’d0时,第一目标向量寄存器的32个第一通路所对应的数据和第二目标向量寄存器的32个第二通路所对应的数据分别对应相乘,得到矩阵C的列向量C(:,1),以此类推,SRC1_SVF_MODE=5’d1且SRC2_SVF_MODE=5’d1时,得到矩阵C的列向量C(:,2),SRC1_SVF_MODE=5’d2且SRC2_SVF_MODE=5’d2时,得到矩阵C的列向量C(:,3),SRC1_SVF_MODE=5’d3且SRC2_SVF_MODE=5’d3时,得到矩阵C的列向量C(:,4)。
下面,具体描述根据本公开的实施例的用于矩阵运算的数据处理过程的具体操作。例如,该矩阵运算用于实现将第一矩阵和第二矩阵进行运算。
首先,将用于矩阵运算的第一矩阵读入至少一个第一向量寄存器,将用于矩阵运算的第二矩阵读入至少一个第二向量寄存器,然后基于第一数据选择信息从至少一个第一向量寄存器存储的多个第一操作数据中选择至少一个第一操作数据,以得到至少一个第一目标操作数据,基于第二数据选择信息从至少一个第二向量寄存器存储的多个第二操作数据中选择至少一个第二操作数据,以得到至少一个第二目标操作数据,接着,将至少一个第一目标操作数据,以第二矩阵的第二矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第一乘法因子;将至少一个第二目标操作数据,以所述第一矩阵的第一矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第二乘法因子,最后,多个运算器对多个第一乘法因子和多个第二乘法因子进行乘法运算,从而实现该矩阵运算。在上述数据处理过程中,可以减少执行数据读取和存储的次数,例如,执行数据读取和存储的次数可以减少至一次,仅通过一次数据读取即可完成第一矩阵和第二矩阵的矩阵运算。例如,上述矩阵运算的部分汇编指令示例可表示如下:
vec_load_b32 v0, v_addr_0;
vec_load_b32 v80, v_addr_1;
vec_mul_u32 v100, v0, v80, SRC1_SVF_MODE = 5’d0, SRC2_SVF_MODE = 5’d0;
vec_mul_u32 v101, v0, v80, SRC1_SVF_MODE = 5’d1, SRC2_SVF_MODE = 5’d1;
vec_mul_u32 v102, v0, v80, SRC1_SVF_MODE = 5’d2, SRC2_SVF_MODE = 5’d2;
vec_mul_u32 v103, v0, v80, SRC1_SVF_MODE = 5’d3, SRC2_SVF_MODE = 5’d3;
具体地,在上述汇编指令中,首先,通过一条vec_load_b32指令,将矩阵A从存储器(地址v_addr_0)中的读入第一向量寄存器v0中,通过一条vec_load_b32指令,将矩阵B从存储器(地址v_addr_1)读入第二向量寄存器v80中,第一向量寄存器v0和第二向量寄存器v80均能存储32个数据。
接下来,对第一向量寄存器v0和第二向量寄存器v80中的数据进行矩阵运算。具体地,对于指令“vec_mul_u32 v100, v0, v80, SRC1_SVF_MODE = 5’d0, SRC2_SVF_MODE =5’d0”,vec_mul_u32为操作码,其指示了32位乘法操作,其中,v0指示了存储第一矩阵A的第一向量寄存器的地址,v80指示了存储第二矩阵B的第二向量寄存器的地址,通过设置SRC1_SVF_MODE和SRC2_SVF_MODE的值来选择第一矩阵A中的第一目标操作数据和第二矩阵B中的第二目标操作数据,v100/v101/v102/v103指示用于存储乘法运算结果的目的向量寄存器的地址,从而实现了SIMD结构下基于单次读取操作矩阵的矩阵运算。
应当理解,SIMD结构以及参与乘法运算的矩阵不限于上述举例,而是本领域技术人员可以根据实际情况进行调整,在此不一一举例。
图4示出了根据本公开实施例的应用于矩阵运算的数据处理的示例装置400的示意框图。
如图4所示,根据本公开实施例的应用于矩阵运算的数据处理装置400可以包括:寄存器确定单元401、信息获取单元402、数据选择单元403、数据广播单元404。
寄存器确定单元401可以被配置用于确定存储有第一矩阵的至少一个第一向量寄存器和存储有第二矩阵的至少一个第二向量寄存器,其中,第一矩阵包括多个第一操作数据,第二矩阵包括多个第二操作数据。例如,寄存器确定单元401可以从存储器(例如DDR等)中获取矩阵运算指令,通过解析矩阵运算指令,得到指示至少一个第一向量寄存器的至少一个第一地址以及指示至少一个第二向量寄存器的至少一个第二地址,从而基于至少一个第一地址和至少一个第二地址确定至少一个第一向量寄存器和至少一个第二向量寄存器。
信息获取单元402可以被配置用于获取第一数据选择信息和第二数据选择信息。例如,信息获取单元402可以从存储器(例如DDR等)中获取数据选择指令,数据选择指令中包含第一数据选择信息和第二数据选择信息。信息获取单元402通过解析数据选择指令得到第一数据选择信息和第二数据选择信息。
数据选择单元403可以被配置用于基于第一数据选择信息,从多个第一操作数据中选择至少一个第一操作数据,以得到至少一个第一目标操作数据,以及基于第二数据选择信息,从多个第二操作数据中选择至少一个第二操作数据,以得到至少一个第二目标操作数据。例如,数据选择单元403可以包括第一选择器4031和第二选择器4032,第一选择器4031基于第一数据选择信息(例如,SRC1_SVF_MODE)从第一矩阵的至少一个第一操作数据中选出至少一个第一操作数据,以得到至少一个第一目标操作数据,第二选择器4032基于第二数据选择信息(例如,SRC2_SVF_MODE)从第二矩阵的至少一个第二操作数据中选出至少一个第二操作数据,以得到至少一个第二目标操作数据。
例如,第一选择器4031和第二选择器4032均为多选一选择器,在图5所示的示例中,第一选择器4031可以为上述选择器A,选择器A可以为一个32选8的选择器,第二选择器4032可以为上述选择器B,选择器B可以为一个32选4的选择器。
数据广播单元404可以被配置用于将至少一个第一目标操作数据,以第二矩阵的第二矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第一乘法因子,以及将至少一个第二目标操作数据,以第一矩阵的第一矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第二乘法因子,其中,第一矩阵维数和第二矩阵维数均为正整数,且第一矩阵维数的类型和第二矩阵维数的类型不相同。
图5示出了根据本公开实施例的数据处理后半部分所涉及的示例数据选择单元403和数据广播单元404的工作示意图。
如图5所示,第一向量寄存器具有32个通路(即第一向量寄存器对应的通路0~通路31),矩阵A的32个第一操作数据对应于第一向量寄存器的32个通路。第二向量寄存器具有32个通路(即第二向量寄存器对应的通路0~通路31),矩阵B的16个第二操作数据对应于第二向量寄存器的前16个通路。数据选择单元403基于从信息获取单元402所接收的第一数据选择信息SRC1_SVF_MODE和第二数据选择信息SRC2_SVF_MODE,在第一向量寄存器的32个通路上,将矩阵A(本公开的第一矩阵的一个示例)的32个第一操作数据经过一个32选8的选择器A,选出8个第一目标操作数据,在第二向量寄存器的32个通路上,将矩阵B(本公开的第二矩阵的一个示例)的16个第二操作数据经过一个32选4的选择器B,选出4个第二目标操作数据。之后,由数据广播单元404将8个第一目标操作数据,以矩阵B的第二矩阵维数4为倍数,相应地复制到选择器A对应的通路0~7、通路8~15、通路16~23以及通路24~31上,然后选择器A的32个通路传输的数据被提供至4个乘法器组(每个乘法器组包括8个乘法器),选择器A对应的通路传输的数据为与32个乘法器一一对应的上述第一乘法因子。由数据广播单元404将4个第二目标操作数据,以矩阵A的第一矩阵维数8为倍数,相应地复制到选择器B对应的通路0~7、通路8~15、通路16~23、通路24~31上,然后选择器B的32个通路传输的数据被提供至4个乘法器组,选择器B对应的通路传输的数据为与32个乘法器一一对应的上述第二乘法因子。第一乘法因子和第二乘法因子在乘法器中进行矩阵乘法运算得到4组乘法运算结果,每组乘法运算结果包含8个乘法运算结果,这四组乘法运算结果(一共32个乘法运算结果)分别发送到四个加法器组中,每个加法器组包括8个加法器,以实现加法运算,每组乘法运算结果中的8个乘法运算结果对应发送到一个加法器组中的8个加法器以作为一个加法因子。这四组乘法运算结果分别和目的向量寄存器中相对应的存储数据(作为加法器的另一个加法因子)相加,得到多个加法运算结果,将多个加法运算结果作为更新的存储数据存储在至少一个目的向量寄存器。
例如,寄存器确定单元401、信息获取单元402、数据选择单元403、数据广播单元404可以采用硬件、软件、固件以及它们的任意可行的组合实现。
例如,在执行确定存储有第一矩阵的至少一个第一向量寄存器和存储有第二矩阵的至少一个第二向量寄存器的步骤时,寄存器确定单元401可以被配置用于获取至少一个第一地址和至少一个第二地址;基于至少一个第一地址,确定至少一个第一向量寄存器;基于至少一个第二地址,确定至少一个第二向量寄存器。
例如,在执行获取至少一个第一地址和至少一个第二地址的步骤时,寄存器确定单元401可以被配置用于获取矩阵运算指令;解析矩阵运算指令,以得到至少一个第一地址和至少一个第二地址。
例如,在一些实施例中,在执行获取第一数据选择信息和第二数据选择信息的步骤时,信息获取单元402还可以被配置用于解析矩阵运算指令,以得到第一数据选择信息和第二数据选择信息。
例如,在另一些实施例中,在执行获取第一数据选择信息和第二数据选择信息的步骤时,信息获取单元402可以被配置用于获取数据选择指令;解析数据选择指令,以得到第一数据选择信息和第二数据选择信息。
例如,在一些实施例中,数据处理装置400还包括数据读取与写入单元,数据读取与写入单元可以被配置用于获取至少一条第一数据读取指令和至少一条第二数据读取指令;解析至少一条第一数据读取指令,以得到至少一个第一读地址和至少一个第一地址;基于至少一个第一读地址从存储器上读取多个第一操作数据,基于至少一个第一地址,确定至少一个第一向量寄存器并将多个第一操作数据写入至少一个第一向量寄存器;解析至少一条第二数据读取指令,以得到至少一个第二读地址和至少一个第二地址;基于至少一个第二读地址从存储器上读取多个第二操作数据,基于至少一个第二地址,确定至少一个第二向量寄存器并将多个第二操作数据写入至少一个第二向量寄存器。
例如,矩阵运算包含多个线程,多个运算器分别对应于多个线程,至少一个第一向量寄存器具有多个第一通路,至少一个第二向量寄存器具有多个第二通路,多个线程中的每一线程分别对应于多个第一通路中的相应的第一通路和多个第二通路中的相应的第二通路,多个第一操作数据对应于多个第一通路,多个第二操作数据对应于多个第二通路。在执行基于第一数据选择信息,从多个第一操作数据中选择至少一个第一操作数据,以得到至少一个第一目标操作数据的步骤时,数据选择单元403可以被配置用于基于第一数据选择信息,在多个第一通路中确定被选择的至少一个第一通路,并将被选择的至少一个第一通路所对应的至少一个第一操作数据作为至少一个第一目标操作数据;在执行基于所述第二数据选择信息,从所述多个第二操作数据中选择至少一个第二操作数据,以得到至少一个第二目标操作数据的步骤时,数据选择单元403可以被配置用于基于第二数据选择信息,在多个第二通路中确定被选择的至少一个第二通路,并将被选择的至少一个第二通路所对应的至少一个第二操作数据作为至少一个第二目标操作数据。
例如,在一些实施例中,数据处理装置400还包括数据运算与写入单元,数据运算与写入单元可以被配置用于确定至少一个目的向量寄存器;基于多个第一乘法因子和多个第二乘法因子,通过多个运算器执行乘法运算,以得到多个运算器对应的多个乘法运算结果,其中,每个运算器用于对其对应的第一乘法因子和第二乘法因子执行乘法运算,以得到每个运算器对应的乘法运算结果;以及将多个乘法运算结果发送到至少一个目的向量寄存器中。
例如,在执行将多个乘法运算结果发送到至少一个目的向量寄存器中的步骤时,数据运算与写入单元可以被配置用于将多个乘法运算结果与至少一个目的向量寄存器中已经存储的多个存储数据一一对应地进行加法运算,以得到多个加法运算结果;将多个加法运算结果存储在至少一个目的向量寄存器中。
例如,至少一个第一目标操作数据包括M个第一目标操作数据,多个运算器包括P个运算器组,每个运算器组包括M个运算器,第二矩阵维数为P,M和P均为正整数。在执行将至少一个第一目标操作数据,以第二矩阵的第二矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第一乘法因子的步骤时,数据广播单元404可以被配置用于将M个第一目标操作数据复制P份,以得到P个第一目标操作数据组,每个第一目标操作数组包括M个第一目标操作数据;将P个第一目标操作数据组分别提供至P个运算器组,以确定多个第一乘法因子,其中,每个运算器组的M个运算器对应的M个第一乘法因子分别为M个第一目标操作数据。
例如,至少一个第二目标操作数据包括P个第二目标操作数据,多个运算器包括P个运算器组,每个运算器组包括M个运算器,第一矩阵维数为M,M和P均为正整数。在执行将至少一个第二目标操作数据,以第一矩阵的第一矩阵维数为倍数,提供至多个运算器以确定与多个运算器一一对应的多个第二乘法因子的步骤时,数据广播单元404可以被配置用于将P个第二目标操作数据复制M份,以得到P个第二目标操作数据组,每个第二目标操作数组与一个第二目标操作数据对应,且包括相同的M个第二目标操作数据,将P个第二目标操作数据组分别提供至P个运算器组,以确定多个第二乘法因子,其中,每个运算器组中的M个运算器对应的M个第二乘法因子相同且为每个运算器组对应的第二目标操作数据组中的第二目标操作数据。
例如,多个运算器并行执行乘法运算。
例如,至少一个第一向量寄存器包括第一目标向量寄存器,至少一个第一目标操作数据均存储在所述第一目标向量寄存器中,至少一个第二向量寄存器包括第二目标向量寄存器,至少一个第二目标操作数据均存储在第二目标向量寄存器中。
例如,第一矩阵为列矩阵,至少一个第一目标操作数据位于第一矩阵的同一列;以及第二矩阵为行矩阵,至少一个第二目标操作数据位于第二矩阵的同一行。
图6示出了根据本公开实施例的数据处理设备600的示意图。
如图6所示,根据本公开实施例的数据处理设备600可以包括处理器601以及存储介质602,其可以通过总线603进行互连。
处理器601可以根据存储在存储介质602中的程序或代码执行各种动作和处理。具体地,处理器601可以是一种集成电路芯片,具有信号的处理能力。上述处理器可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本公开实施例中公开的各种方法、步骤、流程及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,可以是X86架构或者是ARM架构等。
存储介质602存储有计算机可执行指令,其中,计算机可执行指令在被处理器601执行时实现本公开至少一实施例提供的数据处理方法。存储介质602可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)或闪存。易失性存储器可以是随机存取存储器(RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(SDRAM)、双倍数据速率同步动态随机存取存储器(DDRSDRAM)、增强型同步动态随机存取存储器(ESDRAM)、同步连接动态随机存取存储器(SLDRAM)和直接内存总线随机存取存储器(DRRAM)。应注意,本文描述的方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
本公开的实施例还提供了一种计算机可读存储介质,用于非瞬时性地存储计算机可执行指令,该计算机可执行指令在被处理器执行时实现本公开至少一实施例提供的数据处理方法。类似地,本公开实施例中的计算机可读存储介质可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。例如,计算机可读存储介质可以为上述存储介质602。应注意,本文描述的方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
本公开的实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行根据本公开实施例的数据处理方法。
对于本公开,还有以下几点需要说明:
(1)本公开实施例附图只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)为了清晰起见,在用于描述本发明的实施例的附图中,层或结构的厚度和尺寸被放大。可以理解,当诸如层、膜、区域或基板之类的元件被称作位于另一元件“上”或“下”时,该元件可以“直接”位于另一元件“上”或“下”,或者可以存在中间元件。
(3)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
Claims (17)
1.一种数据处理方法,应用于矩阵运算,包括:
确定存储有第一矩阵的至少一个第一向量寄存器和存储有第二矩阵的至少一个第二向量寄存器,其中,所述第一矩阵包括多个第一操作数据,所述第二矩阵包括多个第二操作数据;
获取第一数据选择信息和第二数据选择信息;
基于所述第一数据选择信息,从所述多个第一操作数据中选择至少一个第一操作数据,以得到至少一个第一目标操作数据,将所述至少一个第一目标操作数据,以所述第二矩阵的第二矩阵维数为倍数进行数据复制并提供至多个运算器以确定与所述多个运算器一一对应的多个第一乘法因子;
基于所述第二数据选择信息,从所述多个第二操作数据中选择至少一个第二操作数据,以得到至少一个第二目标操作数据,将所述至少一个第二目标操作数据,以所述第一矩阵的第一矩阵维数为倍数进行数据复制并提供至所述多个运算器以确定与所述多个运算器一一对应的多个第二乘法因子,
其中,所述第一矩阵维数和所述第二矩阵维数均为正整数,且所述第一矩阵维数的类型和所述第二矩阵维数的类型不相同。
2.根据权利要求1所述的数据处理方法,其中,所述至少一个第一目标操作数据包括M个第一目标操作数据,所述多个运算器包括P个运算器组,每个运算器组包括M个运算器,所述第二矩阵维数为P,M和P均为正整数,
将所述至少一个第一目标操作数据,以所述第二矩阵的第二矩阵维数为倍数进行数据复制并提供至多个运算器以确定与所述多个运算器一一对应的多个第一乘法因子,包括:
将所述M个第一目标操作数据复制P份,以得到P个第一目标操作数据组,其中,每个第一目标操作数组包括所述M个第一目标操作数据;
将所述P个第一目标操作数据组分别提供至所述P个运算器组,以确定所述多个第一乘法因子,其中,每个运算器组的M个运算器对应的M个第一乘法因子分别为所述M个第一目标操作数据。
3.根据权利要求1所述的数据处理方法,其中,所述至少一个第二目标操作数据包括P个第二目标操作数据,所述多个运算器包括P个运算器组,每个运算器组包括M个运算器,所述第一矩阵维数为M,M和P均为正整数,
将所述至少一个第二目标操作数据,以所述第一矩阵的第一矩阵维数为倍数进行数据复制并提供至所述多个运算器以确定与所述多个运算器一一对应的多个第二乘法因子,包括:
将所述P个第二目标操作数据复制M份,以得到P个第二目标操作数据组,其中,每个第二目标操作数组与一个第二目标操作数据对应,且包括相同的M个所述第二目标操作数据,
将所述P个第二目标操作数据组分别提供至所述P个运算器组,以确定所述多个第二乘法因子,其中,每个运算器组中的M个运算器对应的M个第二乘法因子相同且为所述每个运算器组对应的第二目标操作数据组中的第二目标操作数据。
4.根据权利要求1所述的数据处理方法,其中,所述矩阵运算包含多个线程,所述多个运算器分别对应于所述多个线程,所述至少一个第一向量寄存器具有多个第一通路,所述至少一个第二向量寄存器具有多个第二通路,所述多个线程中的每一线程分别对应于所述多个第一通路中的相应的第一通路和所述多个第二通路中的相应的第二通路,所述多个第一操作数据对应于所述多个第一通路,所述多个第二操作数据对应于所述多个第二通路,
基于所述第一数据选择信息,从所述多个第一操作数据中选择至少一个第一操作数据,以得到至少一个第一目标操作数据,包括:
基于所述第一数据选择信息,在所述多个第一通路中确定被选择的至少一个第一通路,并将所述被选择的至少一个第一通路所对应的至少一个第一操作数据作为所述至少一个第一目标操作数据;以及
基于所述第二数据选择信息,从所述多个第二操作数据中选择至少一个第二操作数据,以得到至少一个第二目标操作数据,包括:
基于所述第二数据选择信息,在所述多个第二通路中确定被选择的至少一个第二通路,并将所述被选择的至少一个第二通路所对应的至少一个第二操作数据作为所述至少一个第二目标操作数据。
5.根据权利要求1所述的数据处理方法,还包括:确定至少一个目的向量寄存器;
基于所述多个第一乘法因子和所述多个第二乘法因子,通过所述多个运算器执行乘法运算,以得到所述多个运算器对应的多个乘法运算结果,其中,每个运算器用于对其对应的第一乘法因子和第二乘法因子执行乘法运算,以得到所述每个运算器对应的乘法运算结果;以及
将所述多个乘法运算结果发送到所述至少一个目的向量寄存器中。
6.根据权利要求5所述的数据处理方法,其中,将所述多个乘法运算结果发送到所述至少一个目的向量寄存器中,包括:
将所述多个乘法运算结果与所述至少一个目的向量寄存器中已经存储的多个存储数据一一对应地进行加法运算,以得到多个加法运算结果;
将所述多个加法运算结果存储在所述至少一个目的向量寄存器中。
7.根据权利要求1-6任一项所述的数据处理方法,其中,获取第一数据选择信息和第二数据选择信息,包括:
获取数据选择指令;
解析所述数据选择指令,以得到所述第一数据选择信息和所述第二数据选择信息。
8.根据权利要求1-6任一项所述的数据处理方法,其中,所述至少一个第一向量寄存器包括第一目标向量寄存器,所述至少一个第一目标操作数据均存储在所述第一目标向量寄存器中,
所述至少一个第二向量寄存器包括第二目标向量寄存器,所述至少一个第二目标操作数据均存储在所述第二目标向量寄存器中。
9.根据权利要求1-6任一项所述的数据处理方法,其中,所述第一矩阵为列矩阵,所述至少一个第一目标操作数据位于所述第一矩阵的同一列;以及
所述第二矩阵为行矩阵,所述至少一个第二目标操作数据位于所述第二矩阵的同一行。
10.根据权利要求1-6任一项所述的数据处理方法,其中,确定存储有第一矩阵的至少一个第一向量寄存器和存储有第二矩阵的至少一个第二向量寄存器,包括:
获取至少一个第一地址和至少一个第二地址;
基于所述至少一个第一地址,确定所述至少一个第一向量寄存器;
基于所述至少一个第二地址,确定所述至少一个第二向量寄存器。
11.根据权利要求10所述的数据处理方法,其中,获取至少一个第一地址和至少一个第二地址,包括:
获取矩阵运算指令;
解析所述矩阵运算指令,以得到所述至少一个第一地址和所述至少一个第二地址。
12.根据权利要求11所述的数据处理方法,其中,获取第一数据选择信息和第二数据选择信息,包括:
解析所述矩阵运算指令,以得到所述第一数据选择信息和所述第二数据选择信息。
13.根据权利要求1-6任一项所述的数据处理方法,还包括:
获取至少一条第一数据读取指令和至少一条第二数据读取指令;
解析所述至少一条第一数据读取指令,以得到至少一个第一读地址和至少一个第一地址;
基于所述至少一个第一读地址从存储器上读取所述多个第一操作数据,基于所述至少一个第一地址,确定所述至少一个第一向量寄存器并将所述多个第一操作数据写入所述至少一个第一向量寄存器;
解析所述至少一条第二数据读取指令,以得到至少一个第二读地址和至少一个第二地址;
基于所述至少一个第二读地址从所述存储器上读取所述多个第二操作数据,基于所述至少一个第二地址,确定所述至少一个第二向量寄存器并将所述多个第二操作数据写入所述至少一个第二向量寄存器。
14.根据权利要求1-6任一项所述的数据处理方法,其中,所述多个运算器并行执行乘法运算。
15.一种数据处理装置,应用于矩阵运算,其中,
所述数据处理装置包括:
寄存器确定单元,用于确定存储有第一矩阵的至少一个第一向量寄存器和存储有第二矩阵的至少一个第二向量寄存器,其中,所述第一矩阵包括多个第一操作数据,所述第二矩阵包括多个第二操作数据;
信息获取单元,用于获取第一数据选择信息和第二数据选择信息;
数据选择单元,用于基于所述第一数据选择信息,从所述多个第一操作数据中选择至少一个第一操作数据,以得到至少一个第一目标操作数据,以及基于所述第二数据选择信息,从所述多个第二操作数据中选择至少一个第二操作数据,以得到至少一个第二目标操作数据;
数据广播单元,用于将所述至少一个第一目标操作数据,以所述第二矩阵的第二矩阵维数为倍数进行数据复制并提供至多个运算器以确定与所述多个运算器一一对应的多个第一乘法因子,以及将所述至少一个第二目标操作数据,以所述第一矩阵的第一矩阵维数为倍数进行数据复制并提供至所述多个运算器以确定与所述多个运算器一一对应的多个第二乘法因子,
其中,所述第一矩阵维数和所述第二矩阵维数均为正整数,且所述第一矩阵维数的类型和所述第二矩阵维数的类型不相同。
16.一种数据处理设备,包括:
处理器;和
存储介质,存储有计算机可执行指令,
其中,所述计算机可执行指令在被所述处理器执行时实现根据权利要求1-14中任一项所述的数据处理方法。
17.一种计算机可读存储介质,用于非瞬时性地存储计算机可执行指令,
其中,所述计算机可执行指令在被处理器执行时实现根据权利要求1-14中任一项所述的数据处理方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111291162.1A CN113722669B (zh) | 2021-11-03 | 2021-11-03 | 数据处理方法、装置、设备及存储介质 |
PCT/CN2022/092990 WO2023077770A1 (zh) | 2021-11-03 | 2022-05-16 | 数据处理方法、装置、设备及存储介质 |
KR1020247012789A KR20240056771A (ko) | 2021-11-03 | 2022-05-16 | 데이터 프로세싱 방법, 장치 및 디바이스, 및 저장 매체 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111291162.1A CN113722669B (zh) | 2021-11-03 | 2021-11-03 | 数据处理方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113722669A CN113722669A (zh) | 2021-11-30 |
CN113722669B true CN113722669B (zh) | 2022-01-21 |
Family
ID=78686543
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111291162.1A Active CN113722669B (zh) | 2021-11-03 | 2021-11-03 | 数据处理方法、装置、设备及存储介质 |
Country Status (3)
Country | Link |
---|---|
KR (1) | KR20240056771A (zh) |
CN (1) | CN113722669B (zh) |
WO (1) | WO2023077770A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113722669B (zh) * | 2021-11-03 | 2022-01-21 | 海光信息技术股份有限公司 | 数据处理方法、装置、设备及存储介质 |
CN116795432B (zh) * | 2023-08-18 | 2023-12-05 | 腾讯科技(深圳)有限公司 | 运算指令的执行方法、装置、电路、处理器及设备 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101986264A (zh) * | 2010-11-25 | 2011-03-16 | 中国人民解放军国防科学技术大学 | 用于simd向量微处理器的多功能浮点乘加运算装置 |
CN108108189A (zh) * | 2017-12-15 | 2018-06-01 | 北京中科寒武纪科技有限公司 | 一种计算方法及相关产品 |
CN110414630A (zh) * | 2019-08-12 | 2019-11-05 | 上海商汤临港智能科技有限公司 | 神经网络的训练方法、卷积计算的加速方法、装置及设备 |
CN110807170A (zh) * | 2019-10-21 | 2020-02-18 | 中国人民解放军国防科技大学 | 多样本多通道卷积神经网络Same卷积向量化实现方法 |
CN112182496A (zh) * | 2020-09-24 | 2021-01-05 | 成都海光集成电路设计有限公司 | 用于矩阵乘法的数据处理方法及装置 |
CN112416256A (zh) * | 2020-12-01 | 2021-02-26 | 海光信息技术股份有限公司 | 数据写入方法、装置及数据读取方法、装置 |
CN112434256A (zh) * | 2020-12-03 | 2021-03-02 | 海光信息技术股份有限公司 | 矩阵乘法器和处理器 |
CN112506567A (zh) * | 2020-11-27 | 2021-03-16 | 海光信息技术股份有限公司 | 数据读取方法和数据读取电路 |
CN112506468A (zh) * | 2020-12-09 | 2021-03-16 | 上海交通大学 | 支持高吞吐多精度乘法运算的risc-v通用处理器 |
CN113569193A (zh) * | 2021-01-25 | 2021-10-29 | 腾讯科技(深圳)有限公司 | 用于神经网络模型的矩阵向量运算方法、设备及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7912889B1 (en) * | 2006-06-16 | 2011-03-22 | Nvidia Corporation | Mapping the threads of a CTA to the elements of a tile for efficient matrix multiplication |
US20200341772A1 (en) * | 2019-04-29 | 2020-10-29 | DeGirum Corporation | Efficient Architectures For Deep Learning Algorithms |
CN112434255B (zh) * | 2020-12-03 | 2023-12-08 | 成都海光微电子技术有限公司 | 向量-矩阵运算和数据处理方法、乘法器和处理器芯片 |
CN113722669B (zh) * | 2021-11-03 | 2022-01-21 | 海光信息技术股份有限公司 | 数据处理方法、装置、设备及存储介质 |
-
2021
- 2021-11-03 CN CN202111291162.1A patent/CN113722669B/zh active Active
-
2022
- 2022-05-16 KR KR1020247012789A patent/KR20240056771A/ko unknown
- 2022-05-16 WO PCT/CN2022/092990 patent/WO2023077770A1/zh active Application Filing
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101986264A (zh) * | 2010-11-25 | 2011-03-16 | 中国人民解放军国防科学技术大学 | 用于simd向量微处理器的多功能浮点乘加运算装置 |
CN108108189A (zh) * | 2017-12-15 | 2018-06-01 | 北京中科寒武纪科技有限公司 | 一种计算方法及相关产品 |
CN112230994A (zh) * | 2017-12-15 | 2021-01-15 | 安徽寒武纪信息科技有限公司 | 一种计算方法及相关产品 |
CN110414630A (zh) * | 2019-08-12 | 2019-11-05 | 上海商汤临港智能科技有限公司 | 神经网络的训练方法、卷积计算的加速方法、装置及设备 |
CN110807170A (zh) * | 2019-10-21 | 2020-02-18 | 中国人民解放军国防科技大学 | 多样本多通道卷积神经网络Same卷积向量化实现方法 |
CN112182496A (zh) * | 2020-09-24 | 2021-01-05 | 成都海光集成电路设计有限公司 | 用于矩阵乘法的数据处理方法及装置 |
CN112506567A (zh) * | 2020-11-27 | 2021-03-16 | 海光信息技术股份有限公司 | 数据读取方法和数据读取电路 |
CN112416256A (zh) * | 2020-12-01 | 2021-02-26 | 海光信息技术股份有限公司 | 数据写入方法、装置及数据读取方法、装置 |
CN112434256A (zh) * | 2020-12-03 | 2021-03-02 | 海光信息技术股份有限公司 | 矩阵乘法器和处理器 |
CN112506468A (zh) * | 2020-12-09 | 2021-03-16 | 上海交通大学 | 支持高吞吐多精度乘法运算的risc-v通用处理器 |
CN113569193A (zh) * | 2021-01-25 | 2021-10-29 | 腾讯科技(深圳)有限公司 | 用于神经网络模型的矩阵向量运算方法、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
KR20240056771A (ko) | 2024-04-30 |
CN113722669A (zh) | 2021-11-30 |
WO2023077770A1 (zh) | 2023-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113722669B (zh) | 数据处理方法、装置、设备及存储介质 | |
US20180081689A1 (en) | Apparatus and method of improved extract instructions | |
US6006315A (en) | Computer methods for writing a scalar value to a vector | |
US11568022B2 (en) | Bit matrix multiplication | |
US11301580B2 (en) | Instruction execution that broadcasts and masks data values at different levels of granularity | |
US10459728B2 (en) | Apparatus and method of improved insert instructions | |
CN113918883B (zh) | 数据处理方法、装置以及设备和计算机可读存储介质 | |
CN112416256B (zh) | 数据写入方法、装置及数据读取方法、装置 | |
US20090238478A1 (en) | Image processing apparatus | |
JP3958224B2 (ja) | 結果が分散される並列サブワード命令 | |
CN112182496B (zh) | 用于矩阵乘法的数据处理方法及装置 | |
US20120191956A1 (en) | Processor having increased performance and energy saving via operand remapping | |
US10719316B2 (en) | Apparatus and method of improved packed integer permute instruction | |
US7769989B2 (en) | Processor for processing data using access addresses linked to the data type of the processed data | |
US10496411B2 (en) | Functional unit for instruction execution pipeline capable of shifting different chunks of a packed data operand by different amounts | |
US20090063808A1 (en) | Microprocessor and method of processing data | |
US7788471B2 (en) | Data processor and methods thereof | |
JP3547316B2 (ja) | プロセッサ |
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 |