CN116127261B - 处理器中矩阵乘累加方法、装置及电子设备 - Google Patents
处理器中矩阵乘累加方法、装置及电子设备 Download PDFInfo
- Publication number
- CN116127261B CN116127261B CN202310417588.XA CN202310417588A CN116127261B CN 116127261 B CN116127261 B CN 116127261B CN 202310417588 A CN202310417588 A CN 202310417588A CN 116127261 B CN116127261 B CN 116127261B
- Authority
- CN
- China
- Prior art keywords
- matrix
- vector register
- elements
- vector
- multiply
- 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
- 239000011159 matrix material Substances 0.000 title claims abstract description 485
- 238000000034 method Methods 0.000 title claims abstract description 48
- 238000012545 processing Methods 0.000 claims abstract description 15
- 238000007667 floating Methods 0.000 claims description 50
- 238000004364 calculation method Methods 0.000 claims description 17
- 210000004556 brain Anatomy 0.000 claims description 7
- 238000009825 accumulation Methods 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 11
- 238000013473 artificial intelligence Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000003491 array Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
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
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/491—Computations with decimal numbers radix 12 or 20.
- G06F7/498—Computations with decimal numbers radix 12 or 20. using counter-type accumulators
- G06F7/4983—Multiplying; Dividing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computing Systems (AREA)
- Computational Mathematics (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
Abstract
本公开提出一种处理器中矩阵乘累加方法、装置及电子设备,方法包括:获取处理器中待计算的第一矩阵、第二矩阵以及第三矩阵,其中,第一矩阵与第二矩阵为乘法运算关系,第三矩阵与乘法运算的结果为加法运算关系,以及基于预设的矩阵乘累加指令,分别将第一矩阵和第二矩阵中的元素依次写入第一向量寄存器组和第二向量寄存器组,将第三矩阵中的元素依次写入第三向量寄存器组,并将第一向量寄存器组与第二向量寄存器组中元素相乘以得到中间元素,并将中间元素与第三向量寄存器组中的元素进行累加,并将累加结果写入第三向量寄存器组,能够在处理器中设计专门的向量矩阵乘累加指令,提高处理器处理数据的性能。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种处理器中矩阵乘累加方法、装置及电子设备。
背景技术
随着大数据和人工智能技术的发展,人们对数据分析应用和人工智能算法运行性能的要求越来越高,对计算机的处理能力提出了越来越高的要求,向量处理技术成为了当前学术界和工业界共同关注的热点问题。向量处理技术,一条指令处理多个数据,提供数据级并行性,可极大提升数据处理的效率,是提升数据处理能力的重要手段,被广泛应用于人工智能、超算和图形图像处理等领域中进行各类算法和应用的加速。矩阵乘累加是在计算机程序开发过程最常用的运算,在高性能计算、人工智能等领域中广泛应用,加速矩阵乘累加运算成为算法性能提升的有效方法。
现有技术中,通常采用NPU(神经网络处理器)、GPU(图形处理器)等加速器来进行一系列矩阵乘累加计算,单独的加速器需要和CPU(中央处理器)进行数据流和控制流的交互,以及需要进行加速器、CPU和内存间数据的搬运,数据传输成为主要的性能瓶颈。另一种现有技术在CPU中设计专门的矩阵乘累加部件,然而矩阵乘累加部件耗费的硬件资源大,而且不灵活。
发明内容
本公开提出了一种处理器中矩阵乘累加方法、装置及电子设备,旨在至少在一定程度上解决相关技术中的技术问题之一。
本公开第一方面实施例提出了一种处理器中矩阵乘累加方法,包括:获取处理器中待计算的第一矩阵、第二矩阵以及第三矩阵,其中,第一矩阵与第二矩阵为乘法运算关系,第三矩阵与乘法运算的结果为加法运算关系;以及基于预设的矩阵乘累加指令,分别将第一矩阵和第二矩阵中的元素依次写入第一向量寄存器组和第二向量寄存器组,将第三矩阵中的元素依次写入第三向量寄存器组;以及将第一向量寄存器组与第二向量寄存器组中元素相乘以得到中间元素,并将中间元素与第三向量寄存器组中的元素进行累加,并将累加结果写入第三向量寄存器组。
本公开第二方面实施例提出了一种处理器中矩阵乘累加装置,包括:获取模块,用于获取处理器中待计算的第一矩阵、第二矩阵以及第三矩阵,其中,第一矩阵与第二矩阵为乘法运算关系,第三矩阵与乘法运算的结果为加法运算关系;写入模块,用于基于预设的矩阵乘累加指令,分别将第一矩阵和第二矩阵中的元素依次写入第一向量寄存器组和第二向量寄存器组,将第三矩阵中的元素依次写入第三向量寄存器组;以及处理模块,用于将第一向量寄存器组与第二向量寄存器组中元素相乘以得到中间元素,并将中间元素与第三向量寄存器组中的元素进行累加,并将累加结果写入第三向量寄存器组。
本公开第三方面实施例提出了一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本公开实施例的处理器中矩阵乘累加方法。
本公开第四方面实施例提出了一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使所述计算机执行本公开实施例公开的处理器中矩阵乘累加方法。
本实施例中,通过获取处理器中待计算的第一矩阵、第二矩阵以及第三矩阵,其中,第一矩阵与第二矩阵为乘法运算关系,第三矩阵与乘法运算的结果为加法运算关系,以及基于预设的矩阵乘累加指令,分别将第一矩阵和第二矩阵中的元素依次写入第一向量寄存器组和第二向量寄存器组,将第三矩阵中的元素依次写入第三向量寄存器组,并将第一向量寄存器组与第二向量寄存器组中元素相乘以得到中间元素,并将中间元素与第三向量寄存器组中的元素进行累加,并将累加结果写入第三向量寄存器组,能够在处理器中设计专门的向量矩阵乘累加指令,提高处理器处理数据的性能。
本公开附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本公开的实践了解到。
附图说明
本公开上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1是根据本公开一实施例提供的处理器中矩阵乘累加方法的流程示意图;
图2是根据本公开实施例提供的处理器中定点矩阵乘累加计算过程的示意图;
图3是根据本公开实施例提供的处理器中浮点矩阵乘累加计算过程的示意图;
图4是根据本公开实施例提供的另一种处理器中浮点矩阵乘累加计算过程的示意图;
图5是根据本公开另一实施例提供的处理器中矩阵乘累加装置的示意图;
图6示出了适于用来实现本公开实施方式的示例性电子设备的框图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
需要说明的是,本实施例的处理器中矩阵乘累加方法的执行主体可以为处理器中矩阵乘累加装置,该装置可以由软件和/或硬件的方式实现,该装置可以配置在电子设备中,电子设备可以包括但不限于终端、服务器端等。
图1是根据本公开一实施例提供的处理器中矩阵乘累加方法的流程示意图,该方法可以由处理器执行,如图1所示,该方法包括:
S101:获取处理器中待计算的第一矩阵、第二矩阵以及第三矩阵。
其中,本实施例的处理器例如可以是应用在人工智能、大数据等领域中的处理器,并且处理器可以对矩阵进行乘累加运算,即:矩阵乘法以及加法运算。
而本公开实施例,首先可以获取待计算的第一矩阵、第二矩阵以及第三矩阵,其中,第一矩阵与第二矩阵为乘法运算关系,第三矩阵与乘法运算结果(第一矩阵*第二矩阵)为加法运算关系。其中,第一矩阵、第二矩阵以及第三矩阵可以是满足乘累加运算关系的任意维度的矩阵,对此不作限制。
一些实施例,目前人工智能领域处理器通常需要处理4*8维矩阵与8*4维矩阵的乘法运算,再将乘法运算结果与4*4维矩阵进行累加运算。鉴于此,本公开实施例的第一矩阵和第二矩阵例如分别为4*8和8*4矩阵,第三矩阵例如为4*4矩阵。
举例而言,图2是根据本公开实施例提供的处理器中定点矩阵乘累加计算过程的示意图,如图2所示,第一矩阵为4*8矩阵A,第二矩阵为8*4矩阵B,第三矩阵为4*4矩阵C。
另一些实施例,根据第一矩阵、第二矩阵以及第三矩阵中元素的数据类型,可以确定第一矩阵、第二矩阵以及第三矩阵的矩阵类型,矩阵类型例如定点矩阵或者浮点矩阵,其中,定点矩阵表示第一矩阵、第二矩阵以及第三矩阵中元素均为整型,例如,图2中的4*8矩阵A(第一矩阵)、8*4矩阵B(第二矩阵)中的元素、4*4矩阵C(第三矩阵)中的元素均为整型;而浮点矩阵表示第一矩阵、第二矩阵以及第三矩阵中元素均为浮点型,图3是根据本公开实施例提供的处理器中浮点矩阵乘累加计算过程的示意图,如图3所示,矩阵A(第一矩阵)、8*4矩阵B(第二矩阵)中的元素为16位浮点、4*4矩阵C(第三矩阵)中的元素为32位浮点。
另一些实施例,在矩阵类型为定点矩阵的情况下,根据矩阵中元素的符号情况,第一矩阵、第二矩阵可以有不同的组合方式,例如,第一矩阵、第二矩阵中的元素均为无符号数,或者第一矩阵、第二矩阵中的元素均为有符号数,或者第一矩阵中的元素为有符号数、第二矩阵中的元素为无符号数,或者第一矩阵中的元素为无符号数、第二矩阵中的元素为有符号数等,对此不作限制。
另一些实施例,浮点数主要由符号位S、阶码Exp、以及尾数Mantissa三个部分组成,符号位用于表示浮点数的正负,阶码用于表示小数点在该数中的位置,阶码是一个带符号的整数,尾数用于表示数的有效数值。人工智能算法中用到最多的浮点数据类型是BF16(16位脑浮点,brain floating point)数据格式、FP16(IEEE 754标准数据格式的半精度浮点,16位)数据格式、FP32(IEEE 754标准数据格式的单精度浮点,32位)数据格式,每种数据格式的符号位S、阶码Exp、以及尾数如下表1:
表1
两种16位浮点数据格式BF16和FP16的区别仅在于阶码和尾数分别的位数,总宽度相同都是16位,可以统一进行处理,16位元素的浮点矩阵乘累加结果从精度考虑,均保留32位浮点元素,因此16位数据格式的浮点矩阵乘累加结果为FP32数据格式,即:两个单宽度浮点格式元素乘法计算产生二宽度结果元素:2*SEW=SEW op SEW。鉴于此,如图3所示,本实施例在矩阵类型为浮点矩阵的情况下,第一矩阵、第二矩阵还可以有不同的组合方式,例如,第一矩阵、第二矩阵中的元素均为16位脑浮点数(BF16),或者第一矩阵、第二矩阵中的元素均为16位半精度浮点数(FP16),对此不作限制。
S102:基于预设的矩阵乘累加指令,分别将第一矩阵和第二矩阵中的元素依次写入第一向量寄存器组和第二向量寄存器组,将第三矩阵中的元素依次写入第三向量寄存器组。
具体地,本实施例的处理器可以支持多个向量寄存器,例如,RISC-V向量指令集包括的32个向量寄存器(v0-v31),并且,多个向量寄存器可以是不同元素宽度(SEW)的寄存器,对此不作限制。而本实施例处理器在执行矩阵乘累加运算过程中,处理器可以基于预设的矩阵乘累加指令,将第一矩阵、第二矩阵以及第三矩阵中的元素写入(也可以称为映射)向量寄存器中进行运算。其中,第一矩阵、第二矩阵以及第三矩阵均按照矩阵元素先行后列,同行列从序号低到高,写入向量寄存器从低位到高位中。
其中,用于写入第一矩阵中元素的向量寄存器分组可以被称为第一向量寄存器组,同理,用于写入第二矩阵中元素的向量寄存器分组可以被称为第二向量寄存器组,其中,该第一向量寄存器组和第二向量寄存器组由一个或者多个向量寄存器构成。
一些实施例,在将第一矩阵和第二矩阵中的元素依次写入第一向量寄存器组和第二向量寄存器组之前,可以确定该第一向量寄存器组和第二向量寄存器组。具体地,本实施例的第一矩阵与第二矩阵的元素总数以及每个元素的宽度(SEW)相同,本实施例首先计算第一矩阵中元素的总位数,或者计算第二矩阵中元素的总位数,该总位数可以被称为第一总位数,其中,该第一总位数为第一矩阵或第二矩阵中元素总数与每个元素的宽度(SEW)的乘积;进一步地,计算第一总位数与处理器支持的向量寄存器宽度(即,向量寄存器宽度VLEN)的比值作为第一向量寄存器分组数(LMUL),其中,向量寄存器分组数表示每个分组中寄存器的数量,即:第一向量寄存器分组数LMUL=第一总位数/VLEN;进一步地,从多个向量寄存器(例如上述的32个寄存器)中选择第一向量寄存器分组数LMUL个向量寄存器,该向量寄存器可以被称为源向量寄存器,并将该源向量寄存器作为第一向量寄存器组中的寄存器;同理,从多个向量寄存器(例如上述的32个寄存器)中选择第一向量寄存器分组数LMUL个源向量寄存器作为第二向量寄存器组中的寄存器,也即是说,从多个向量寄存器中选择第一向量寄存器分组数LMUL个寄存器构建第一向量寄存器组,并且从多个向量寄存器中选择第一向量寄存器分组数LMUL个寄存器构建第二向量寄存器组,其中,该源向量寄存器的元素宽度(SEW)与第一矩阵每个元素的元素宽度(SEW)相同,或者与第二矩阵中每个元素的元素宽度(SEW)相同。需要说明的是,第一向量寄存器组与第二向量寄存器组中源向量寄存器不同。
举例而言,如图2所示,处理器例如支持宽度VLEN为256位、元素宽度SEW为8位的多个向量寄存器;第一矩阵和第二矩阵为定点矩阵,第一矩阵(矩阵A)的维度为4*8,第二矩阵(矩阵A)的维度为4*8,即:32个元素,每个元素为8位整型(SEW=8)。因此,可以计算第一总位数=32*8=256位,第一向量寄存器分组数LMUL=第一总位数(256)/VLEN(256)=1;进一步地,从VLEN=256位、SEW=8位的多个向量寄存器中选择1个源向量寄存器(例如编号vs1的向量寄存器)构成该第一向量寄存器组,并从多个向量寄存器中选择另1个源向量寄存器(例如编号vs2的向量寄存器)构成该第二向量寄存器组。在这种情况下,可以将第一矩阵(矩阵A)中的32个元素按照先行后列、同行列从序号低到高,依次写入(映射)至vs1向量寄存器的低位到高位;同理,将第二矩阵(矩阵B)中的32元素按照先行后列、同行列从序号低到高,依次写入至vs2向量寄存器的低位到高位。
又例如,如图3所示,处理器还支持宽度VLEN为512位、元素宽度SEW为16位的向量寄存器;第一矩阵和第二矩阵为浮点矩阵,第一矩阵(矩阵A)的维度为4*8,第二矩阵(矩阵A)的维度为4*8,即:32个元素,每个元素为16位浮点(BF16或FP16),即:SEW=16。在这种情况下,可以计算第一总位数=32*16=512位,第一向量寄存器分组数LMUL=第一总位数(512)/VLEN(512)=1;进一步地,从VLEN=512位、SEW=16位的多个向量寄存器中选择1个源向量寄存器(例如编号vs1的向量寄存器)构成该第一向量寄存器组,并从多个向量寄存器中选择1个源向量寄存器(例如编号vs2的向量寄存器)构成该第二向量寄存器组。在这种情况下,可以将第一矩阵(矩阵A)中的32个元素按照先行后列、同行列从序号低到高,依次写入(映射)至vs1向量寄存器的低位到高位;同理,将第二矩阵(矩阵B)中的32元素按照先行后列、同行列从序号低到高,依次写入至vs2向量寄存器的低位到高位。
又例如,图4是根据本公开实施例提供的另一种处理器中浮点矩阵乘累加计算过程的示意图,如图4所示,处理器例如还支持宽度VLEN为256位、元素宽度SEW为16位的向量寄存器;第一矩阵和第二矩阵为浮点矩阵,第一矩阵(矩阵A)的维度为4*8,第二矩阵(矩阵A)的维度为4*8,即:32个元素,每个元素为16位浮点(BF16或FP16),即:元素宽度SEW=16。在这种情况下,可以计算第一总位数=32*16=512位,第一向量寄存器分组数LMUL=第一总位数(512)/VLEN(256)=2;进一步地,从VLEN=256位、SEW=16位的多个向量寄存器中选择2个源向量寄存器(例如编号vs1和vs1+1的向量寄存器)构成该第一向量寄存器组,并从多个向量寄存器中选择2个源向量寄存器(例如编号vs2和vs2+1的向量寄存器)构成该第二向量寄存器组,也即是说,第一向量寄存器组和第二向量寄存器组中各包含2个向量寄存器。在这种情况下,可以将第一矩阵(矩阵A)中的32个元素按照先行后列、同行列从序号低到高依次写入(映射)至vs1向量寄存器,再将剩余的元素按照先行后列、同行列从序号低到高依次写入(映射)至vs1+1向量寄存器;同理,将第二矩阵(矩阵B)中的32元素按照先行后列、同行列从序号低到高,依次写入至vs2和vs2+1向量寄存器的低位到高位。
另一些实施例,在将第三矩阵中的元素依次写入第三向量寄存器组之前,可以确定第三向量寄存器组。具体地,本实施例首先计算第三矩阵中元素的的总位数,该总位数可以被称为第二总位数,其中,该第二总位数为第三矩阵中元素总数与每个元素的宽度(SEW)的乘积;进一步地,计算第二总位数与处理器支持的向量寄存器宽度(即,VLEN)的比值作为第二向量寄存器分组数(LMUL),即:第二向量寄存器分组数LMUL=第二总位数/VLEN;进一步地,从多个向量寄存器选择第二向量寄存器分组数LMUL个向量寄存器,该向量寄存器可以被称为目的向量寄存器,并将该目的向量寄存器作为第三向量寄存器组中的寄存器,也即是说,选择第二向量寄存器分组数LMUL个目的向量寄存器构成第三向量寄存器组。其中,本实施例的目的向量寄存器的元素宽度(SEW)与第三矩阵中每个元素的元素宽度(SEW)相同。
举例而言,如图2所示,处理器还支持宽度VLEN为256位、元素宽度(SEW)为32位的向量寄存器;第三矩阵为定点矩阵,第三矩阵(矩阵C)的维度为4*4,即:16个元素,每个元素为32位整型(SEW=32)。因此,可以计算第二总位数=16*32=512位,第二向量寄存器分组数LMUL=第二总位数(512)/VLEN(256)=2;进一步地,从VLEN为256位、元素宽度SEW为32的向量寄存器中选择2个目的向量寄存器(例如编号vd和vd+1的向量寄存器)构成该第三向量寄存器组,也即是说,第三向量寄存器组包含2个向量寄存器。在这种情况下,本实施例可以将第三矩阵(矩阵C)中的16个元素按照先行后列、同行列从序号低到高依次写入(映射)至vd向量寄存器,再将剩余的元素按照先行后列、同行列从序号低到高依次写入(映射)至vd+1向量寄存器。
又例如,如图3所示,处理器还支持宽度VLEN为512位、元素宽度(SEW)为32位的向量寄存器;第三矩阵为浮点矩阵,第三矩阵(矩阵C)的维度为4*4,即:16个元素,每个元素为32位浮点(FP32),即:元素宽度SEW=32。因此,可以计算第二总位数=16*32=512位,第二向量寄存器分组数LMUL=第二总位数(512)/VLEN(512)=1;进一步地,从VLEN为512位、元素宽度SEW为32位的向量寄存器中选择1个目的向量寄存器(例如编号vd的向量寄存器)构成该第三向量寄存器组,也即是说,第三向量寄存器组包含1个VLEN为512位、元素宽度SEW为32的向量寄存器。在这种情况下,本实施例可以将第三矩阵(矩阵C)中的16个元素按照先行后列、同行列从序号低到高依次写入(映射)至vd向量寄存器。
又例如,如图4所示,处理器还支持宽度VLEN为256位、元素宽度(SEW)为32位的向量寄存器;第三矩阵为浮点矩阵,第三矩阵(矩阵C)的维度为4*4,即:16个元素,每个元素为32位浮点(FP32),即:元素宽度SEW=32。因此,可以计算第二总位数=16*32=512位,第二向量寄存器分组数LMUL=第二总位数(512)/VLEN(256)=2;进一步地,从VLEN为256位、元素宽度SEW为32的向量寄存器中选择2个目的向量寄存器(例如编号vd和vd+1的向量寄存器)构成该第三向量寄存器组,也即是说,第三向量寄存器组包含2个向量寄存器。在这种情况下,本实施例可以将第三矩阵(矩阵C)中的16个元素按照先行后列、同行列从序号低到高依次写入(映射)至vd向量寄存器,再将剩余的元素按照先行后列、同行列从序号低到高依次写入(映射)至vd+1向量寄存器。
一些实施例,在基于预设的矩阵乘累加指令,分别将第一矩阵和第二矩阵中的元素依次写入第一向量寄存器组和第二向量寄存器组之前,本实施还可以根据第一矩阵、第二矩阵以及第三矩阵的矩阵类型,确定对应的矩阵乘累加指令,其中,矩阵类型分为定点矩阵或者浮点矩阵。
一些实施例,在矩阵类型为定点矩阵的情况下,可以确定矩阵乘累加指令为向量定点矩阵加宽整数乘累加指令(Vector Widening Integer Matrix Multiply-AddInstructions),使得该指令具备向量增宽功能(widen)。
其中,在第一矩阵、第二矩阵中的元素均为无符号数的情况下,矩阵乘累加指令的形式例如为:vwmlau.vv vd, vs1, vs2;或者,在第一矩阵、第二矩阵中的元素均为有符号数的情况下,矩阵乘累加指令的形式例如为:vwmla.vv vd, vs1, vs2;或者,在第一矩阵中的元素为有符号数、第二矩阵中的元素为无符号数的情况下,矩阵乘累加指令的形式例如为:vwmlasu.vv vd, vs1, vs2;或者,在第一矩阵中的元素为无符号数、第二矩阵中的元素为有符号数的情况下,矩阵乘累加指令的形式例如为:vwmlaus.vv vd, vs1, vs2;其中,vd表示第三向量寄存器组中首个寄存器编号(即,目的向量寄存器编号),vs1表示第一向量寄存器组中首个寄存器编号,vs2表示第二向量寄存器组中首个寄存器编号(即,源向量寄存器编号)。例如,第三向量寄存器组中有一个寄存器,则该寄存器为首个寄存器,其寄存器编号为vd;又例如,第三向量寄存器组中有两个寄存器,首个寄存器编号表示为vd,第二个寄存器的编号则为vd+1;同理,第一向量寄存器组中有一个寄存器,则该寄存器为首个寄存器,其寄存器编号为vs1;又例如,第一向量寄存器组中有两个寄存器,首个寄存器编号表示为vs1,第二个寄存器的编号则为vs1+1。同理,第二向量寄存器组中有一个寄存器,则该寄存器为首个寄存器,其寄存器编号为vs2;又例如,第二向量寄存器组中有两个寄存器,首个寄存器编号表示为vs2,第二个寄存器的编号则为vs2+1。
另一些实施例,在矩阵类型为浮点矩阵的情况下,第一矩阵、第二矩阵中的元素均为16位脑浮点数时,矩阵乘累加指令的形式例如为:vbf16mla.vv vd, vs1, vs2;或者,第一矩阵、第二矩阵中的元素均为16位半精度浮点数时,矩阵乘累加指令的形式为:Vfp16mla.vv vd, vs1, vs2。
也即是说,本公开实施例可以根据矩阵类型以及矩阵中元素数据类型确定具体的矩阵乘累加指令。
S103:将第一向量寄存器组与第二向量寄存器组中元素相乘以得到中间元素,并将中间元素与第三向量寄存器组中的元素进行累加,并将累加结果写入第三向量寄存器组。
上述基于矩阵乘累加指令,将第一矩阵、第二矩阵以及第三矩阵中的元素依次写入对应的向量寄存器组后,向量寄存器组则写有矩阵中的元素。例如,如图2所示,第一矩阵(矩阵A)中的元素写入第一向量寄存器组后,第一向量寄存器组写入32个元素(包括a00-a07、a10-a17、a20-a27、a30-a37),每个元素为8位;同理,第二向量寄存器组写入32个元素(包括b00-b07、b10-b17、b20-b27、b30-b37),每个元素为8位;第三向量寄存器组写入16个元素(包括 c00-c03、c10-c13、c20-c23、c30-c33),每个元素为32位。
在这种情况下,处理器可以基于该矩阵乘累加指令,对第一向量寄存器组、第二向量寄存器组以及第三向量寄存器组中的元素执行乘累加运算。
具体地,本实施例首先将第一向量寄存器组与第二向量寄存器组中元素相乘以得到中间元素。其中,在第一矩阵和第二矩阵为定点矩阵的情况下,即:第一向量寄存器组与第二向量寄存器组中元素为整型,本实施例配置两个单宽度整型元素相乘产生四宽度结果,即:SEW op SEW=4*SEW,也即是说,4*8和8*4的两个8位定点矩阵写入第一向量寄存器组与第二向量寄存器组后,第一向量寄存器组与第二向量寄存器组中元素相乘可以得到16个中间元素,每个中间元素为32位整型;在第一矩阵和第二矩阵为浮点矩阵的情况下,即:第一向量寄存器组与第二向量寄存器组中元素为浮点数,16位元素的浮点矩阵乘累加结果从精度考虑,均保留32位浮点元素,即:两个单宽度浮点格式元素乘法计算产生二宽度结果元素:2*SEW=SEW op SEW,因此16位数据格式的浮点元素相乘结果为FP32数据格式,即:4*8和8*4的两个16位浮点矩阵(FP16或BF16)写入第一向量寄存器组与第二向量寄存器组后,第一向量寄存器组与第二向量寄存器组中元素相乘可以得到16个中间元素,每个中间元素为32位浮点(FP16)。
其中,4*8第一矩阵得到的第一向量寄存器组与8*4第二矩阵得到的第二向量寄存器组相乘可以得到16个中间元素,中间元素例如表示为temp00-temp03、temp10-temp13、temp20-temp23、temp30-temp33,其中,相乘计算过程如下:
temp00 = a00*b00 + a01*b10 + a02*b20 + a03*b30 + a04*b40 + a05*b50 +a06*b60 + a07*b70
temp01 = a00*b01 + a01*b11 + a02*b21 + a03*b31 + a04*b41 + a05*b51 +a06*b61 + a07*b71
temp02 = a00*b02 + a01*b12 + a02*b22 + a03*b32 + a04*b42 + a05*b52 +a06*b62 + a07*b72
temp03 = a00*b03 + a01*b13 + a02*b23 + a03*b33 + a04*b43 + a05*b53 +a06*b63 + a07*b73
temp10 = a10*b00 + a11*b10 + a12*b20 + a13*b30 + a14*b40 + a15*b50 +a16*b60 + a17*b70
temp11 = a10*b01 + a11*b11 + a12*b21 + a13*b31 + a14*b41 + a15*b51 +a16*b61 + a17*b71
temp12 = a10*b02 + a11*b12 + a12*b22 + a13*b32 + a14*b42 + a15*b52 +a16*b62 + a17*b72
temp13 = a10*b03 + a11*b13 + a12*b23 + a13*b33 + a14*b43 + a15*b53 +a16*b63 + a17*b73
temp20 = a20*b00 + a21*b10 + a22*b20 + a23*b30 + a24*b40 + a25*b50 +a26*b60 + a27*b70
temp21 = a20*b01 + a21*b11 + a22*b21 + a23*b31 + a24*b41 + a25*b51 +a26*b61 + a27*b71
temp22 = a20*b02 + a21*b12 + a22*b22 + a23*b32 + a24*b42 + a25*b52 +a26*b62 + a27*b72
temp23 = a20*b03 + a21*b13 + a22*b23 + a23*b33 + a24*b43 + a25*b53 +a26*b63 + a27*b73
temp30 = a30*b00 + a31*b10 + a32*b20 + a33*b30 + a34*b40 + a35*b50 +a36*b60 + a37*b70
temp31 = a30*b01 + a31*b11 + a32*b21 + a33*b31 + a34*b41 + a35*b51 +a36*b61 + a37*b71
temp32 = a30*b02 + a31*b12 + a32*b22 + a33*b32 + a34*b42 + a35*b52 +a36*b62 + a37*b72
temp33 = a30*b03 + a31*b13 + a32*b23 + a33*b33 + a34*b43 + a35*b53 +a36*b63 + a37*b73
进一步地,将中间元素与第三向量寄存器组中的元素进行累加得到累加结果,累加计算过程如下:
c00 = temp00 + c00
c01 = temp01 + c01
c02 = temp02 + c02
c03 = temp03 + c03
c10 = temp10 + c10
c11 = temp11 + c11
c12 = temp12 + c12
c13 = temp13 + c13
c20 = temp20 + c20
c21 = temp21 + c21
c22 = temp22 + c22
c23 = temp23 + c23
c30 = temp30 + c30
c31 = temp31 + c31
c32 = temp32 + c32
c33 = temp33 + c33
可以理解的是,32位整型的中间元素与第三向量寄存器组中的32位整型元素累加结果还是32位整型,同理,32位浮点的中间元素与第三向量寄存器组中的32位浮点元素累加结果还是32位浮点。其中,不同矩阵类型的乘累加运算过程相同,只是每个元素的数值不同,具体计算过程本实施例不作具体限制。
进一步地,将累加结果写入第三向量寄存器组。
举例而言,如图2所示,第三向量寄存器组包括vd和vd+1两个向量寄存器,本实施例可以将累加结果c00、c01、c02、c03、c10、c11、c12、c13写入向量寄存器vd从低位到高位中,将c20、c21、c22、c23、c30、c31、c32、c33写入向量寄存器vd+1从低位到高位中。
本实施例中,通过获取处理器中待计算的第一矩阵、第二矩阵以及第三矩阵,其中,第一矩阵与第二矩阵为乘法运算关系,第三矩阵与乘法运算的结果为加法运算关系,以及基于预设的矩阵乘累加指令,分别将第一矩阵和第二矩阵中的元素依次写入第一向量寄存器组和第二向量寄存器组,将第三矩阵中的元素依次写入第三向量寄存器组,并将第一向量寄存器组与第二向量寄存器组中元素相乘以得到中间元素,并将中间元素与第三向量寄存器组中的元素进行累加,并将累加结果写入第三向量寄存器组,能够在处理器中设计专门的向量矩阵乘累加指令,提高处理器处理数据的性能。
为了实现上述实施例,本公开还提出一种处理器中矩阵乘累加装置。
图5是根据本公开另一实施例提供的处理器中矩阵乘累加装置的示意图。
如图5所示,该处理器中矩阵乘累加装置70,包括:
获取模块501,用于获取处理器中待计算的第一矩阵、第二矩阵以及第三矩阵,其中,第一矩阵与第二矩阵为乘法运算关系,第三矩阵与乘法运算的结果为加法运算关系;
写入模块502,用于基于预设的矩阵乘累加指令,分别将第一矩阵和第二矩阵中的元素依次写入第一向量寄存器组和第二向量寄存器组,将第三矩阵中的元素依次写入第三向量寄存器组;以及
处理模块503,用于将第一向量寄存器组与第二向量寄存器组中元素相乘以得到中间元素,并将中间元素与第三向量寄存器组中的元素进行累加,并将累加结果写入第三向量寄存器组。
一些实施例,装置50还包括:第一计算模块,用于计算第一总位数与处理器支持的向量寄存器宽度的比值作为第一向量寄存器分组数,其中,第一总位数为第一矩阵中元素的总位数,或者为第二矩阵中元素的总位数;以及第一确定模块,用于分别选择第一向量寄存器分组数个源向量寄存器构成第一向量寄存器组和第二向量寄存器组,其中,源向量寄存器的元素宽度与第一矩阵的元素宽度相同,或者与第二矩阵的元素宽度相同。
一些实施例,装置50还包括:第二计算模块,用于计算第三矩阵中元素的第二总位数与向量寄存器宽度的比值作为第二向量寄存器分组数;以及第二确定模块,用于选择第二向量寄存器分组数个目的向量寄存器构成第三向量寄存器组,其中,目的向量寄存器的元素宽度与第三矩阵的元素宽度相同。
一些实施例,其中,第一矩阵和第二矩阵分别为4*8和8*4矩阵,第三矩阵为4*4矩阵。
一些实施例,装置50还包括:第三确定模块,用于根据第一矩阵、第二矩阵以及第三矩阵的矩阵类型,确定对应的矩阵乘累加指令,其中,矩阵类型分为定点矩阵或者浮点矩阵。
一些实施例,在矩阵类型为定点矩阵的情况下,源向量寄存器和目的向量寄存器的宽度为256位,并且第一矩阵、第二矩阵中元素宽度为8位,第三矩阵中元素宽度为32位。
一些实施例,在矩阵类型为浮点矩阵的情况下,源向量寄存器和目的向量寄存器的宽度为256位或者512位,并且第一矩阵、第二矩阵中元素宽度为16位,第三矩阵中元素宽度为32位。
一些实施例,其中,在矩阵类型为定点矩阵的情况下,第一矩阵、第二矩阵中的元素均为无符号数,并且矩阵乘累加指令的形式为:vwmlau.vv vd, vs1, vs2;或者第一矩阵、第二矩阵中的元素均为有符号数,并且矩阵乘累加指令的形式为:vwmla.vv vd, vs1,vs2;或者第一矩阵中的元素为有符号数、第二矩阵中的元素为无符号数,并且矩阵乘累加指令的形式为:vwmlasu.vv vd, vs1, vs2;或者第一矩阵中的元素为无符号数、第二矩阵中的元素为有符号数,并且矩阵乘累加指令的形式为:vwmlaus.vv vd, vs1, vs2;其中,vd表示第三向量寄存器组中首个寄存器编号,vs1表示第一向量寄存器组中首个寄存器编号,vs2表示第二向量寄存器组中首个寄存器编号。
一些实施例,在矩阵类型为浮点矩阵的情况下,第一矩阵、第二矩阵中的元素均为16位脑浮点数,并且矩阵乘累加指令的形式为:vbf16mla.vv vd, vs1, vs2;或者第一矩阵、第二矩阵中的元素均为16位半精度浮点数,并且矩阵乘累加指令的形式为:Vfp16mla.vv vd, vs1, vs2。
本实施例中,通过获取处理器中待计算的第一矩阵、第二矩阵以及第三矩阵,其中,第一矩阵与第二矩阵为乘法运算关系,第三矩阵与乘法运算的结果为加法运算关系,以及基于预设的矩阵乘累加指令,分别将第一矩阵和第二矩阵中的元素依次写入第一向量寄存器组和第二向量寄存器组,将第三矩阵中的元素依次写入第三向量寄存器组,并将第一向量寄存器组与第二向量寄存器组中元素相乘以得到中间元素,并将中间元素与第三向量寄存器组中的元素进行累加,并将累加结果写入第三向量寄存器组,能够在处理器中设计专门的向量矩阵乘累加指令,提高处理器处理数据密集型数据的性能。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
为了实现上述实施例,本公开还提出一种计算机程序产品,当计算机程序产品中的指令处理器执行时,执行如本公开前述实施例提出的处理器中矩阵乘累加方法。
图6示出了适于用来实现本公开实施方式的示例性电子设备的框图。图6显示的电子设备12仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图6所示,电子设备12以通用计算设备的形式表现。电子设备12的组件可以包括但不限于:一个或者多个处理器16,系统存储器28,连接不同系统组件(包括系统存储器28和处理器16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(Industry StandardArchitecture;以下简称:ISA)总线,微通道体系结构(Micro Channel Architecture;以下简称:MAC)总线,增强型ISA总线、视频电子标准协会(Video Electronics StandardsAssociation;以下简称:VESA)局域总线以及外围组件互连(Peripheral ComponentInterconnection;以下简称:PCI)总线。
电子设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被电子设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(Random Access Memory;以下简称:RAM)30和/或高速缓存存储器32。电子设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图6未显示,通常称为“硬盘驱动器”)。
尽管图6中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如:光盘只读存储器(Compact Disc Read OnlyMemory;以下简称:CD-ROM)、数字多功能只读光盘(Digital Video Disc Read OnlyMemory;以下简称:DVD-ROM)或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本公开各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本公开所描述的实施例中的功能和/或方法。
电子设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该电子设备12交互的设备通信,和/或与使得该电子设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,电子设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(Local Area Network;以下简称:LAN),广域网(Wide Area Network;以下简称:WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与电子设备12的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理器16通过运行存储在系统存储器28中的程序,从而执行各种功能应用,例如实现前述实施例中提及的处理器中矩阵乘累加方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
需要说明的是,在本公开的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本公开的描述中,除非另有说明,“多个”的含义是两个或两个以上。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本公开的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本公开的实施例所属技术领域的技术人员所理解。
应当理解,本公开的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本公开各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本公开的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管上面已经示出和描述了本公开的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本公开的限制,本领域的普通技术人员在本公开的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (14)
1.一种处理器中矩阵乘累加方法,其特征在于,所述方法包括:
获取处理器中待计算的第一矩阵、第二矩阵以及第三矩阵,其中,所述第一矩阵与所述第二矩阵为乘法运算关系,所述第三矩阵与所述乘法运算的结果为加法运算关系;
基于预设的矩阵乘累加指令,分别将所述第一矩阵和第二矩阵中的元素依次写入第一向量寄存器组和第二向量寄存器组,将所述第三矩阵中的元素依次写入第三向量寄存器组;以及
将所述第一向量寄存器组与所述第二向量寄存器组中元素相乘以得到中间元素,并将所述中间元素与所述第三向量寄存器组中的元素进行累加,并将累加结果写入所述第三向量寄存器组;
所述分别将所述第一矩阵和第二矩阵中的元素依次写入第一向量寄存器组和第二向量寄存器组,将所述第三矩阵中的元素依次写入第三向量寄存器组包括:
分别将所述第一矩阵、所述第二矩阵和所述第三矩阵按照矩阵元素先行后列、同行列从序号低到高的方式依次写入对应的向量寄存器的低位到高位中;
所述第一矩阵和所述第二矩阵分别为4*8和8*4矩阵,所述第三矩阵为4*4矩阵;
在所述第一矩阵、所述第二矩阵以及所述第三矩阵的矩阵类型为定点矩阵的情况下,构成所述第一向量寄存器组和所述第二向量寄存器组中的源向量寄存器和构成所述第三向量寄存器组的目的向量寄存器的宽度为256位,并且所述第一矩阵、所述第二矩阵中元素宽度为8位,所述第三矩阵中元素宽度为32位;
在所述矩阵类型为浮点矩阵的情况下,所述源向量寄存器和所述目的向量寄存器的宽度为256位或者512位,并且所述第一矩阵、所述第二矩阵中元素宽度为16位,所述第三矩阵中元素宽度为32位。
2.如权利要求1所述的方法,其特征在于,所述分别将所述第一矩阵和第二矩阵中的元素依次写入第一向量寄存器组和第二向量寄存器组之前,还包括:
计算第一总位数与所述处理器支持的向量寄存器宽度的比值作为第一向量寄存器分组数,其中,所述第一总位数为所述第一矩阵中元素的总位数,或者为第二矩阵中元素的总位数;以及
分别选择第一向量寄存器分组数个源向量寄存器构成所述第一向量寄存器组和第二向量寄存器组,其中,所述源向量寄存器的元素宽度与所述第一矩阵的元素宽度相同,或者与所述第二矩阵的元素宽度相同。
3.如权利要求2所述的方法,其特征在于,所述将所述第三矩阵中的元素依次写入第三向量寄存器组之前,还包括:
计算所述第三矩阵中元素的第二总位数与所述向量寄存器宽度的比值作为第二向量寄存器分组数;以及
选择第二向量寄存器分组数个目的向量寄存器构成所述第三向量寄存器组,其中,所述目的向量寄存器的元素宽度与所述第三矩阵的元素宽度相同。
4.如权利要求1所述的方法,其特征在于,所述基于预设的矩阵乘累加指令,分别将所述第一矩阵和第二矩阵中的元素依次写入第一向量寄存器组和第二向量寄存器组之前,还包括:
根据所述第一矩阵、所述第二矩阵以及所述第三矩阵的矩阵类型,确定对应的所述矩阵乘累加指令,其中,所述矩阵类型分为定点矩阵或者浮点矩阵。
5.如权利要求4所述的方法,其特征在于,其中,在所述矩阵类型为所述定点矩阵的情况下,
所述第一矩阵、所述第二矩阵中的元素均为无符号数,并且所述矩阵乘累加指令的形式为:vwmlau.vv vd, vs1, vs2;或者
所述第一矩阵、所述第二矩阵中的元素均为有符号数,并且所述矩阵乘累加指令的形式为:vwmla.vv vd, vs1, vs2;或者
所述第一矩阵中的元素为有符号数、所述第二矩阵中的元素为无符号数,并且所述矩阵乘累加指令的形式为:vwmlasu.vv vd, vs1, vs2;或者
所述第一矩阵中的元素为无符号数、所述第二矩阵中的元素为有符号数,并且所述矩阵乘累加指令的形式为:vwmlaus.vv vd, vs1, vs2;
其中,vd表示第三向量寄存器组中首个寄存器编号,vs1表示第一向量寄存器组中首个寄存器编号,vs2表示第二向量寄存器组中首个寄存器编号。
6.如权利要求4所述的方法,其特征在于,其中,在所述矩阵类型为所述浮点矩阵的情况下,
所述第一矩阵、所述第二矩阵中的元素均为16位脑浮点数,并且所述矩阵乘累加指令的形式为:vbf16mla.vv vd, vs1, vs2;或者
所述第一矩阵、所述第二矩阵中的元素均为16位半精度浮点数,并且所述矩阵乘累加指令的形式为:Vfp16mla.vv vd, vs1, vs2。
7.一种处理器中矩阵乘累加装置,其特征在于,包括:
获取模块,用于获取处理器中待计算的第一矩阵、第二矩阵以及第三矩阵,其中,所述第一矩阵与所述第二矩阵为乘法运算关系,所述第三矩阵与所述乘法运算的结果为加法运算关系;
写入模块,用于基于预设的矩阵乘累加指令,分别将所述第一矩阵和第二矩阵中的元素依次写入第一向量寄存器组和第二向量寄存器组,将所述第三矩阵中的元素依次写入第三向量寄存器组;以及
处理模块,用于将所述第一向量寄存器组与所述第二向量寄存器组中元素相乘以得到中间元素,并将所述中间元素与所述第三向量寄存器组中的元素进行累加,并将累加结果写入所述第三向量寄存器组;
所述写入模块具体用于:
分别将所述第一矩阵、所述第二矩阵和所述第三矩阵按照矩阵元素先行后列、同行列从序号低到高的方式依次写入对应的向量寄存器的低位到高位中;
所述第一矩阵和所述第二矩阵分别为4*8和8*4矩阵,所述第三矩阵为4*4矩阵;
在所述第一矩阵、所述第二矩阵以及所述第三矩阵的矩阵类型为定点矩阵的情况下,构成所述第一向量寄存器组和所述第二向量寄存器组中的源向量寄存器和构成所述第三向量寄存器组的目的向量寄存器的宽度为256位,并且所述第一矩阵、所述第二矩阵中元素宽度为8位,所述第三矩阵中元素宽度为32位;
在所述矩阵类型为浮点矩阵的情况下,所述源向量寄存器和所述目的向量寄存器的宽度为256位或者512位,并且所述第一矩阵、所述第二矩阵中元素宽度为16位,所述第三矩阵中元素宽度为32位。
8.如权利要求7所述的装置,其特征在于,所述装置还包括:
第一计算模块,用于计算第一总位数与所述处理器支持的向量寄存器宽度的比值作为第一向量寄存器分组数,其中,所述第一总位数为所述第一矩阵中元素的总位数,或者为第二矩阵中元素的总位数;以及
第一确定模块,用于分别选择第一向量寄存器分组数个源向量寄存器构成所述第一向量寄存器组和第二向量寄存器组,其中,所述源向量寄存器的元素宽度与所述第一矩阵的元素宽度相同,或者与所述第二矩阵的元素宽度相同。
9.如权利要求8所述的装置,其特征在于,所述装置还包括:
第二计算模块,用于计算所述第三矩阵中元素的第二总位数与所述向量寄存器宽度的比值作为第二向量寄存器分组数;以及
第二确定模块,用于选择第二向量寄存器分组数个目的向量寄存器构成所述第三向量寄存器组,其中,所述目的向量寄存器的元素宽度与所述第三矩阵的元素宽度相同。
10.如权利要求9所述的装置,其特征在于,所述装置还包括:
第三确定模块,用于根据所述第一矩阵、所述第二矩阵以及所述第三矩阵的矩阵类型,确定对应的所述矩阵乘累加指令,其中,所述矩阵类型分为定点矩阵或者浮点矩阵。
11.如权利要求10所述的装置,其特征在于,其中,在所述矩阵类型为所述定点矩阵的情况下,
所述第一矩阵、所述第二矩阵中的元素均为无符号数,并且所述矩阵乘累加指令的形式为:vwmlau.vv vd, vs1, vs2;或者
所述第一矩阵、所述第二矩阵中的元素均为有符号数,并且所述矩阵乘累加指令的形式为:vwmla.vv vd, vs1, vs2;或者
所述第一矩阵中的元素为有符号数、所述第二矩阵中的元素为无符号数,并且所述矩阵乘累加指令的形式为:vwmlasu.vv vd, vs1, vs2;或者
所述第一矩阵中的元素为无符号数、所述第二矩阵中的元素为有符号数,并且所述矩阵乘累加指令的形式为:vwmlaus.vv vd, vs1, vs2;
其中,vd表示第三向量寄存器组中首个寄存器编号,vs1表示第一向量寄存器组中首个寄存器编号,vs2表示第二向量寄存器组中首个寄存器编号。
12.如权利要求10所述的装置,其特征在于,其中,在所述矩阵类型为所述浮点矩阵的情况下,
所述第一矩阵、所述第二矩阵中的元素均为16位脑浮点数,并且所述矩阵乘累加指令的形式为:vbf16mla.vv vd, vs1, vs2;或者
所述第一矩阵、所述第二矩阵中的元素均为16位半精度浮点数,并且所述矩阵乘累加指令的形式为:Vfp16mla.vv vd, vs1, vs2。
13.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-6中任一项所述的方法。
14.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1-6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310417588.XA CN116127261B (zh) | 2023-04-19 | 2023-04-19 | 处理器中矩阵乘累加方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310417588.XA CN116127261B (zh) | 2023-04-19 | 2023-04-19 | 处理器中矩阵乘累加方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116127261A CN116127261A (zh) | 2023-05-16 |
CN116127261B true CN116127261B (zh) | 2023-08-25 |
Family
ID=86312191
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310417588.XA Active CN116127261B (zh) | 2023-04-19 | 2023-04-19 | 处理器中矩阵乘累加方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116127261B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118466899A (zh) * | 2024-07-09 | 2024-08-09 | 深圳比特微电子科技有限公司 | 运算电路、处理器和计算装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112434256A (zh) * | 2020-12-03 | 2021-03-02 | 海光信息技术股份有限公司 | 矩阵乘法器和处理器 |
CN114398593A (zh) * | 2022-01-04 | 2022-04-26 | 平头哥(杭州)半导体有限公司 | 向量矩阵乘法加速方法、单元、加速单元和片上系统 |
CN115880132A (zh) * | 2023-02-06 | 2023-03-31 | 南京砺算科技有限公司 | 图形处理器、矩阵乘法任务处理方法、装置及存储介质 |
CN115951937A (zh) * | 2023-03-10 | 2023-04-11 | 北京微核芯科技有限公司 | 处理器中向量指令填表和查表方法、装置及电子设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8577950B2 (en) * | 2009-08-17 | 2013-11-05 | International Business Machines Corporation | Matrix multiplication operations with data pre-conditioning in a high performance computing architecture |
-
2023
- 2023-04-19 CN CN202310417588.XA patent/CN116127261B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112434256A (zh) * | 2020-12-03 | 2021-03-02 | 海光信息技术股份有限公司 | 矩阵乘法器和处理器 |
CN114398593A (zh) * | 2022-01-04 | 2022-04-26 | 平头哥(杭州)半导体有限公司 | 向量矩阵乘法加速方法、单元、加速单元和片上系统 |
CN115880132A (zh) * | 2023-02-06 | 2023-03-31 | 南京砺算科技有限公司 | 图形处理器、矩阵乘法任务处理方法、装置及存储介质 |
CN115951937A (zh) * | 2023-03-10 | 2023-04-11 | 北京微核芯科技有限公司 | 处理器中向量指令填表和查表方法、装置及电子设备 |
Non-Patent Citations (1)
Title |
---|
面向多核向量处理器的矩阵乘法向量化方法;刘仲;田希;;计算机学报(10);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN116127261A (zh) | 2023-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113330421B (zh) | 点积计算器及其操作方法 | |
EP3623941A2 (en) | Systems and methods for performing instructions specifying ternary tile logic operations | |
CN103180820A (zh) | 用于执行浮点除法的方法和装置 | |
CN116127261B (zh) | 处理器中矩阵乘累加方法、装置及电子设备 | |
EP3623940A2 (en) | Systems and methods for performing horizontal tile operations | |
WO2023077769A1 (zh) | 数据处理方法、装置以及设备和计算机可读存储介质 | |
JP2019057249A (ja) | 演算処理装置および演算処理方法 | |
WO2021136259A1 (zh) | 浮点数乘法计算的方法、装置和算术逻辑单元 | |
EP4020169A1 (en) | Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions | |
CN115951937B (zh) | 处理器中向量指令填表和查表方法、装置及电子设备 | |
CN108875043A (zh) | 用户数据处理方法、装置、计算机设备和存储介质 | |
KR100847934B1 (ko) | 스케일링된 정수를 사용하는 부동 소수점 연산 | |
CN116795324A (zh) | 混合精度浮点乘法装置和混合精度浮点数处理方法 | |
US20210044303A1 (en) | Neural network acceleration device and method | |
US11625225B2 (en) | Applications of and techniques for quickly computing a modulo operation by a Mersenne or a Fermat number | |
US11256940B1 (en) | Method, apparatus and system for gradient updating of image processing model | |
TWI777319B (zh) | 幹細胞密度確定方法、裝置、電腦裝置及儲存介質 | |
CN115827555A (zh) | 数据处理方法、计算机设备、存储介质和乘法器结构 | |
CN115269003A (zh) | 数据处理方法及装置、处理器、电子设备、存储介质 | |
CN118312130B (zh) | 数据处理方法及装置、处理器、电子设备、存储介质 | |
JPH09293137A (ja) | 並列プロセッサにおける画像のスケール変更 | |
CN118760415A (zh) | 数据处理方法及装置、处理器、电子设备、存储介质 | |
CN116028011B (zh) | 一种用于gpu数据库任意精度十进制数据的计算方法 | |
US11704092B2 (en) | High-precision anchored-implicit processing | |
US20220309125A1 (en) | Data compressor for approximation of matrices for matrix multiply operations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |