CN114186186B - 矩阵计算方法及相关设备 - Google Patents
矩阵计算方法及相关设备 Download PDFInfo
- Publication number
- CN114186186B CN114186186B CN202010966997.1A CN202010966997A CN114186186B CN 114186186 B CN114186186 B CN 114186186B CN 202010966997 A CN202010966997 A CN 202010966997A CN 114186186 B CN114186186 B CN 114186186B
- Authority
- CN
- China
- Prior art keywords
- matrix
- matrices
- precision
- floating point
- calculation
- 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
Classifications
-
- 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/485—Adding; Subtracting
-
- 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/487—Multiplying; Dividing
- G06F7/4876—Multiplying
-
- 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
-
- 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/556—Logarithmic or exponential functions
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Nonlinear Science (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
Abstract
一种矩阵计算方法,涉及计算机技术领域,用于基于低精度的矩阵计算单元实现高精度的矩阵计算,从而提高矩阵计算单元的适用性。所述方法包括:获取计算指令,所述计算指令包括待计算矩阵和矩阵计算类型;拆解所述待计算矩阵得到多个拆解后的矩阵,所述拆解后的矩阵中浮点数的精度低于所述待计算矩阵中浮点数的精度;按照所述矩阵计算类型执行所述多个拆解后的矩阵的计算处理。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种矩阵计算方法、装置、电路、系统、芯片及设备。
背景技术
在计算机技术领域,浮点数(float point,FP)主要用于表示小数,且浮点数通常由三部分组成,即符号位、指数位和尾数位。其中,基于浮点数的矩阵计算是一种常用的计算方法,可被应用于人工智能、深度学习和高性能计算等多个场景中。
现有技术中,在浮点数矩阵计算中,提供了一种基于半精度浮点数的矩阵计算单元,该半精度浮点数的位宽为16比特(bits),从而可以称为FP16。如图1所示,该矩阵计算单元包括:缓存器A、缓存器B、计算单元、加法器和缓存器C。其中,缓存器A和缓存器B用于缓存待计算的矩阵,计算单元用于实现矩阵间的乘法运算,累加器用于实现矩阵间的加法运算,缓存器C用于缓存矩阵的计算结果。
但是,上述矩阵计算单元中的尾数计算位宽和指数计算位宽均是根据FP 16设计的,从而仅适用于FP16的矩阵计算,对于位宽较大的浮点数的矩阵计算则无法适用,从而适用性差。
发明内容
本申请提供一种矩阵计算方法、装置、电路、系统、芯片及设备,可基于低精度的矩阵计算单元实现高精度的矩阵计算,从而提高矩阵计算单元的适用性。
第一方面,提供一种矩阵计算方法,该方法由矩阵计算单元执行,该矩阵计算单元可以是基于FP16设计的矩阵计算单元,该方法包括:获取计算指令,该计算指令包括待计算矩阵和矩阵计算类型,该待计算矩阵中浮点数的精度可以大于FP16,该矩阵计算类型可以包括矩阵的乘法、矩阵的加法、以及矩阵的乘加等;拆解该待计算矩阵得到多个拆解后的矩阵,该拆解后的矩阵中浮点数的精度低于该待计算矩阵中浮点数的精度,该拆解后的矩阵中浮点数的精度可以表示为第二精度,该待计算矩阵中浮点数的精度表示为第一精度,比如,第一精度为FP32、FP64或者FP128等,第二精度为FP16;按照该矩阵计算类型执行多个拆解后的矩阵的计算处理,以得到矩阵运算结果。
上述技术方案中,在获取到待计算矩阵和矩阵计算类型时,如果该待计算矩阵中浮点数的精度较大,则可以将该待计算矩阵拆解为多个包括低精度的浮点数的矩阵,比如拆解为多个包括FP16的浮点数的矩阵,按照矩阵计算类型执行这多个包括FP16的浮点数的矩阵的计算处理,即得到该待计算矩阵对应的矩阵运算结果,从而可以基于低精度的矩阵计算单元实现高精度矩阵的计算,提高了矩阵计算单元的适用性;此外,在矩阵计算过程中,基于矩阵计算单元的诸如AI应用和HPC应用等上层软件应用不感知矩阵计算的具体过程,从而可以极大地降低软件适配的成本。
在一种可能的实现方式中,拆解该待计算矩阵得到多个拆解后的矩阵,包括:按照预设规则拆解该待计算矩阵得到多个拆解后的矩阵,该预设规则用于将该待计算矩阵中第一精度的浮点数拆解为第二精度的浮点数,第二精度低于第一精度,比如,第一精度为FP32、FP64或者FP128等,第二精度为FP16。上述可能的实现方式中,通过预设规则可以将该待计算矩阵拆解为多个包括低精度的浮点数的矩阵,比如拆解为多个包括FP16的浮点数的矩阵,从而可以基于低精度的矩阵计算单元实现高精度矩阵的计算,提高了矩阵计算单元的适用性。
在另一种可能的实现方式中,拆解该待计算矩阵得到多个拆解后的矩阵,包括:将包括第一精度的浮点数的该待计算矩阵拆解为多个包括第二精度的浮点数的矩阵和多个指数矩阵,第二精度低于第一精度,比如,第一精度为FP32、FP64或者FP128等,第二精度为FP16。上述可能的实现方式中,通过将包括第一精度的浮点数的该待计算矩阵拆解为多个包括第二精度的浮点数的矩阵和多个指数矩阵,比如拆解为多个包括FP16的浮点数的矩阵和多个指数矩阵,从而可以基于低精度的矩阵计算单元实现高精度矩阵的计算,提高了矩阵计算单元的适用性。
在另一种可能的实现方式中,将包括第一精度的浮点数的该待计算矩阵拆解为多个包括第二精度的浮点数的矩阵和多个指数矩阵,包括:将包括第一精度的浮点数的该待计算矩阵按列拆解为多个列矩阵;将多个列矩阵中的每个列矩阵拆解为一个包括第二精度的浮点数的第一子矩阵和一个第一指数矩阵,以得到多个第一子矩阵和多个第一指数矩阵,同一列矩阵拆解得到的第一子矩阵和第一指数矩阵对应。上述可能的实现方式中,提供了一种将该待计算矩阵拆解为包括第二精度的浮点数的矩阵的方法,可用于在计算第一矩阵与第二矩阵的乘法时,有效地拆解第一矩阵。
在另一种可能的实现方式中,将包括第一精度的浮点数的该待计算矩阵拆解为多个包括第二精度的浮点数的矩阵和多个指数矩阵,包括:将包括第一精度的浮点数的该待计算矩阵按行拆分为多个行矩阵;将多个行矩阵中的每个行矩阵拆解为一个包括第二精度的浮点数的第二子矩阵和一个第二指数矩阵,以得到多个第二子矩阵和多个第二指数矩阵,同一行矩阵拆解得到的包括第二子矩阵和第二指数矩阵对应。上述可能的实现方式中,提供了一种将该待计算矩阵拆解为包括第二精度的浮点数的矩阵的方法,可用于在计算第一矩阵与第二矩阵的乘法时,有效地拆解第二矩阵。
在另一种可能的实现方式中,该待计算矩阵包括第一矩阵和第二矩阵,第一矩阵对应的拆解后的矩阵包括多个第一子矩阵和多个第一指数矩阵,第二矩阵对应的拆解后的矩阵包括多个第二子矩阵和多个第二指数矩阵,多个第一子矩阵、多个第一指数矩阵、多个第二子矩阵与多个第二指数矩阵之间存在对应关系;当该矩阵计算类型为矩阵的乘法时,按照该矩阵计算类型执行多个拆解后的矩阵的计算处理,包括:按照多个第一子矩阵与多个第二子矩阵之间的对应关系,确定每个第一子矩阵与对应的第二子矩阵的第一运算结果,以得到多个第一运算结果;按照多个第一指数矩阵与多个第二指数矩阵之间的对应关系,确定每个第一指数矩阵与对应的第二指数矩阵的第二运算结果,以得到多个第二运算结果;根据多个第一子矩阵与多个第一指数矩阵之间的对应关系,以及多个第一运算结果和多个第二运算结果,确定第一矩阵与第二矩阵的矩阵运算结果。上述可能的实现方式中,提供了一种按照该矩阵计算类型执行多个拆解后的矩阵的计算处理,得到矩阵计算结果的方法,从而可以基于低精度的矩阵计算单元实现高精度矩阵的计算,提高了矩阵计算单元的适用性。
在另一种可能的实现方式中,根据多个第一子矩阵与多个第一指数矩阵之间的对应关系,以及多个第一运算结果和多个第二运算结果,确定第一矩阵与第二矩阵的矩阵运算结果,包括:根据多个第一运算结果中的每个第一运算结果与第一运算结果对应的第二运算结果确定第三运算结果,以得到多个第三运算结果,其中,一个第一子矩阵的第一运算结果与第一子矩阵对应的第一指数矩阵的第二运算结果对应;根据多个第三运算结果,确定第一矩阵与第二矩阵的矩阵运算结果。上述可能的实现方式中,提供了一种确定第一矩阵与第二矩阵的矩阵运算结果的方法,从而可以基于低精度的矩阵计算单元实现高精度矩阵的计算,提高了矩阵计算单元的适用性。
在另一种可能的实现方式中,一个第一指数矩阵与对应的第二指数矩阵中处于相同位置的两个浮点数为X和Y,对应的第二运算结果中处于相同位置的浮点数Z满足如下公式:Z=2^(expX+expY-Q*2);其中,Q与第一矩阵和第二矩阵中包括的浮点数的精度有关,exp表示指数函数。上述可能的实现方式中,提供了一种拆解后的指数矩阵之间的计算处理,从而可以保证根据拆解后的矩阵计算得到待计算矩阵对应的矩阵计算结果,从而可以基于低精度的矩阵计算单元实现高精度矩阵的计算,提高了矩阵计算单元的适用性。
在另一种可能的实现方式中,该矩阵计算单元集成在通用处理器中,则获取计算指令包括:从寄存器中获取计算指令;或者,该矩阵计算单元集成在通用处理器外,则该获取计算指令包括:从内存中获取计算指令。上述可能的实现方式中,提供了两种矩阵计算单元与通用处理器的集成方式,从而可以提高矩阵计算单元集成的灵活性和多样性。
在另一种可能的实现方式中,该待计算矩阵中浮点数的精度为FP32或者FP64,该拆解后的矩阵中浮点数的精度为FP16。上述可能的实现方式中,可以通过对浮点数的精度为FP32或者FP64的待计算矩阵进行拆解,得到多个浮点数的精度为FP16的矩阵,并基于拆解后的矩阵计算得到待计算矩阵对应的矩阵计算结果,从而提高了矩阵计算单元的适用性。
在另一种可能的实现方式中,在该拆解该待计算矩阵得到多个拆解后的矩阵之前,该方法还包括:确定该待计算矩阵中浮点数的精度大于预设精度。上述可能的实现方式中,在基于低精度的矩阵计算单元实现高精度矩阵的计算时,可以在确定该待计算矩阵中浮点数的精度大于预设精度时进行拆解,从而拆解后的矩阵计算得到待计算矩阵对应的矩阵计算结果,进而提高了矩阵计算单元的适用性。
第二方面,提供一种矩阵计算装置,该装置可以是基于FP16设计的矩阵计算单元,该装置包括:获取单元,用于获取计算指令,该计算指令包括待计算矩阵和矩阵计算类型,该待计算矩阵中浮点数的精度可以大于FP16,该矩阵计算类型可以包括矩阵的乘法、矩阵的加法、以及矩阵的乘加等;拆解单元,用于拆解该待计算矩阵得到多个拆解后的矩阵,该拆解后的矩阵中浮点数的精度低于该待计算矩阵中浮点数的精度,该拆解后的矩阵中浮点数的精度低于该待计算矩阵中浮点数的精度,该拆解后的矩阵中浮点数的精度可以表示为第二精度,该待计算矩阵中浮点数的精度表示为第一精度,比如,第一精度为FP32、FP64或者FP128等,第二精度为FP16;计算单元,用于按照该矩阵计算类型执行多个拆解后的矩阵的计算处理,以得到矩阵运算结果。
在一种可能的实现方式中,该拆解单元还用于:按照预设规则拆解该待计算矩阵得到多个拆解后的矩阵,该预设规则用于将该待计算矩阵中第一精度的浮点数拆解为第二精度的浮点数,第二精度低于第一精度,比如,第一精度为FP32、FP64或者FP128等,第二精度为FP16。
在一种可能的实现方式中,该拆解单元还用于:将包括第一精度的浮点数的该待计算矩阵拆解为多个包括第二精度的浮点数的矩阵和多个指数矩阵,第二精度低于第一精度,比如,第一精度为FP32、FP64或者FP128等,第二精度为FP16。
在一种可能的实现方式中,该拆解单元还用于:将包括第一精度的浮点数的该待计算矩阵按列拆解为多个列矩阵;将多个列矩阵中的每个列矩阵拆解为一个包括第二精度的浮点数的第一子矩阵和一个第一指数矩阵,以得到多个第一子矩阵和多个第一指数矩阵,同一列矩阵拆解得到的第一子矩阵和第一指数矩阵对应。
在一种可能的实现方式中,该拆解单元还用于:将包括第一精度的浮点数的该待计算矩阵按行拆分为多个行矩阵;将多个行矩阵中的每个行矩阵拆解为一个包括第二精度的浮点数的第二子矩阵和一个第二指数矩阵,以得到多个第二子矩阵和多个第二指数矩阵,同一行矩阵拆解得到的包括第二子矩阵和第二指数矩阵对应。
在另一种可能的实现方式中,该待计算矩阵包括第一矩阵和第二矩阵,第一矩阵对应的拆解后的矩阵包括多个第一子矩阵和多个第一指数矩阵,第二矩阵对应的拆解后的矩阵包括多个第二子矩阵和多个第二指数矩阵,多个第一子矩阵、多个第一指数矩阵、多个第二子矩阵与多个第二指数矩阵之间存在对应关系;当该矩阵计算类型为矩阵的乘法时,该计算单元还用于:按照多个第一子矩阵与多个第二子矩阵之间的对应关系,确定每个第一子矩阵与对应的第二子矩阵的第一运算结果,以得到多个第一运算结果;按照多个第一指数矩阵与多个第二指数矩阵之间的对应关系,确定每个第一指数矩阵与对应的第二指数矩阵的第二运算结果,以得到多个第二运算结果;根据多个第一子矩阵与多个第一指数矩阵之间的对应关系,以及多个第一运算结果和多个第二运算结果,确定第一矩阵与第二矩阵的矩阵运算结果。
在另一种可能的实现方式中,该计算单元还用于:根据多个第一运算结果中的每个第一运算结果与第一运算结果对应的第二运算结果确定第三运算结果,以得到多个第三运算结果,其中,一个第一子矩阵的第一运算结果与第一子矩阵对应的第一指数矩阵的第二运算结果对应;根据多个第三运算结果,确定第一矩阵与第二矩阵的矩阵运算结果。
在另一种可能的实现方式中,一个第一指数矩阵与对应的第二指数矩阵中处于相同位置的两个浮点数为X和Y,对应的第二运算结果中处于相同位置的浮点数Z满足如下公式:Z=2^(expX+expY-Q*2);其中,Q与第一矩阵和第二矩阵中包括的浮点数的精度有关,exp表示指数函数。
在一种可能的实现方式中,该矩阵计算单元集成在通用处理器中,该获取单元还用于:从寄存器中获取计算指令;或者,该矩阵计算单元集成在通用处理器外,该获取单元还用于:从内存中获取计算指令。
在另一种可能的实现方式中,该待计算矩阵中浮点数的精度为FP32或者FP64,该拆解后的矩阵中浮点数的精度为FP16。
在另一种可能的实现方式中,该拆解单元还用于:确定该待计算矩阵中浮点数的精度大于预设精度。
第三方面,提供一种矩阵计算电路,该矩阵计算电路用于执行上述第一方面或者第一方面的任一种可能的实现方式所提供的矩阵计算方法的操作步骤。
第四方面,提供一种矩阵计算系统,该系统包括处理器和矩阵计算单元,该处理器用于向该矩阵计算单元发送计算指令,该矩阵计算单元用于执行上述第一方面或者第一方面的任一种可能的实现方式所提供的矩阵计算方法的操作步骤。
第五方面,提供一种芯片,该芯片包括处理器,该处理器中集成有矩阵计算单元,该矩阵计算单元用于执行上述第一方面或者第一方面的任一种可能的实现方式所提供的矩阵计算方法的操作步骤。
第六方面,提供一种矩阵计算设备,该设备包括上述第四方面所提供的矩阵计算系统、或者上述第四方面所提供的芯片。
第七方面,提供一种可读存储介质,该可读存储介质中存储有指令,当该可读存储介质在设备上运行时,使得该设备执行第一方面或者第一方面的任一项可能的实现方式所提供的矩阵计算方法的操作步骤。
第八方面,提供一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得该计算机执行第一方面或者第一方面的任一项可能的实现方式所提供的矩阵计算方法的操作步骤。
可以理解地,上述提供的任一种矩阵计算方法的装置、计算机存储介质或者计算机程序产品均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
图1为一种矩阵计算单元的结构示意图;
图2为本申请实施例提供的一种计算设备的结构示意图;
图3为本申请实施例提供的一种处理器的结构示意图;
图4为本申请实施例提供的一种矩阵计算方法的流程示意图;
图5为本申请实施例提供的一种拆解待计算矩阵的示意图;
图6为本申请实施例提供的一种矩阵计算单元的结构示意图;
图7为本申请实施例提供的另一种矩阵计算方法的流程示意图;
图8为本申请实施例提供的一种矩阵拆解单元的结构示意图;
图9为本申请实施例提供的一种矩阵计算装置的结构示意图。
具体实施方式
首先,在介绍本实施例之前,对本实施例所涉及的浮点数的类型进行解释说明。
浮点数(float point,FP)主要用于表示小数,通常由三部分组成,即符号(sign)位、指数(exponent)位和尾数(mantisa)位,该指数位也可以称为阶码,下文中均称其为阶码。其中,符号位可以为1比特(bit),阶码和尾数位可以为多个比特(bits)。浮点数通常可以包括三种格式(format),即半精度浮点数、单精度浮点数和双精度浮点数,具体如下所述。
半精度浮点数(half-precision floating-point):是计算机使用的一种二进制的数据类型,在计算机存储器中占用16bits(即占用2个字节),也可以简称为FP16。半精度浮点数可表示的数值的绝对值范围大约为[6.10×10-5,6.55×104]。
单精度浮点数(single-precision floating-point):是计算机使用的一种二进制数据类型,在计算机存储器中占用32bits(即4个字节),也可以简称为FP32。单精度浮点数可表示的数值的绝对值范围大约为[1.18×10-38,3.40×1038]。
双精度浮点数(double precision floating point):是计算机使用的一种二进制的数据类型,在计算机存储器中占用64bits(即占用8个字节),也可以简称为FP64。双精度浮点数可以表示十进制的15位或16位有效数字,可表示的数值的绝对值范围大约为[2.23×10-308,1.80×10308]。
下面的表1分别示出了上述三种浮点数的一种存储格式。其中,在FP16占用的16bits中,符号位占用1bit、阶码占用5bits、尾数位占用10bits;在FP32占用的32bits中,符号位占用1bit、阶码占用8bits、尾数位占用23bits;在FP64占用的64bits中,符号位占用1bit、阶码占用11bits、尾数位占用52bits。
表1
符号位 | 指数位(阶码) | 尾数位 | |
FP16 | 1bit | 5bits | 10bits |
FP32 | 1bit | 8bits | 23bits |
FP64 | 1bit | 11bits | 52bits |
进一步的,在实际应用中,为了表示更高精度的浮点数,还可以进一步扩展浮点数的格式以及占用更多比特位的存储格式等,比如占用128bits的浮点数(可以简称为FP128),本申请实施例中对此不作具体限制。
浮点数矩阵可以是指以浮点数作为元素的矩阵,比如,m行n列的浮点数矩阵包括m×n个元素,这m×n个元素可以为浮点数。与浮点数类似,浮点数矩阵也可以包括不同浮点数格式的矩阵,比如,包括FP16格式的浮点数的矩阵、包括FP32格式的浮点数的矩阵、以及包括FP64格式的浮点数的矩阵等。
图2为本实施例提供的一种计算设备的结构示意图,该计算设备可以是终端、网络设备或者服务器等具有计算能力的设备。参见图2,该计算设备可以包括存储器201、处理器202、通信接口203和总线204,存储器201、处理器202以及通信接口203通过总线204相互连接。
其中,存储器201可用于存储数据、软件程序以及模块,主要包括存储程序区和存储数据区,存储程序区可存储操作系统、至少一个功能所需的软件应用和中间层软件等,存储数据区可存储该设备的使用时所创建的数据等。比如,该操作系统可以包括Linux操作系统、Unix操作系统或者Window操作系统等;该至少一个功能所需的软件应用可以包括人工智能(artificial intelligence)相关的应用、高性能计算(high performancecomputing,HPC)相关的应用、深度学习(deep learning)相关的应用或者科学计算相关的应用等;该中间层软件可以包括线性代数库函数等。在一种可能的示例性中,存储器201包括但不限于静态随机存储器(static RAM,SRAM)、动态随机存储器(dynamic RAM,DRAM)、同步动态随机存储器(synchronous DRAM,SDRAM)或者高速随机存取存储器等。进一步的,存储器201还可以包括其他非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
另外,处理器202用于对该计算设备的操作进行控制管理,比如通过运行或执行存储在存储器201内的软件程序和/或模块,以及调用存储在存储器201内的数据,执行该计算设备的各种功能和处理数据。在一种可能的示例性中,处理器202包括但不限于中央处理单元(central processing unit,CPU)、网络处理单元(network processing unit,NPU)、图形处理器(graphics processing unit,GPU)、应用专用集成电路(application specificintegrated circuit,ASIC),现场可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、逻辑电路或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器202也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等。
通信接口203用于实现该计算设备与外部设备进行通信。其中,通信接口203可以包括输入接口和输出接口。该输入接口可用于获取下文方法实施例中的浮点数矩阵,比如,第一矩阵和第二矩阵。在一些可行的实施例中,该输入接口可以只有一个输入接口,也可以有多个输入接口。该输出接口可用于输出下文方法实施例中的矩阵运算结果。在一些可行的实施例中,该矩阵运算结果可以由处理器直接输出,也可以先被存储于存储器中,然后经存储器输出。在另一些可行的实施例中,可以只有一个输出接口,也可以有多个输出接口。
总线204可以是外设部件互连标准(Peripheral Component InterconnectExpress,PCIe)总线,或者扩展工业标准结构(extended industry standardarchitecture,EISA)总线等。总线204可以分为地址总线、数据总线、控制总线等。为便于表示,图2中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
在本实施例中,处理器202可以包括矩阵计算单元,该矩阵计算单元可用于支持该处理器执行下述方法实施例中的一个或者多个步骤,该矩阵计算单元可以是ASIC、FPGA或者逻辑电路等,当然该矩阵计算单元也可以通过软件实现,本申请实施例对此不作具体限制。
进一步的,该处理器202还可以包括CPU、GPU或NPU等其他处理单元中的一个或者多个。如图3所示,以该处理器202包括CPU 1和矩阵计算单元2为例,矩阵计算单元2可以与CPU 1集成在一起(比如,矩阵计算单元2集成在CPU 1所在的SoC的内部),也可以与CPU 1并列单独设置(比如,矩阵计算单元2以PCIe卡的形式设置),具体如图3中的(a)和图3中的(b)所示。进一步的,该CPU 1中还可以包括控制器(controller)11、一个或者多个算术逻辑单元(arithmetic logic unit,ALU)12、缓存器(cache)13和内存管理单元(memorymanagement unit,MMU)14等。图3中以存储器201为动态随机存储器DRAM为例进行说明。
图4为本实施例提供的一种矩阵计算方法的流程示意图,该方法可由本文所提供的计算设备中的矩阵计算单元来执行,该方法可以包括以下几个步骤:
S301:获取计算指令,该计算指令包括待计算矩阵和矩阵计算类型。
其中,该矩阵计算单元可以是基于低精度的浮点数设计的矩阵计算单元,比如,该矩阵计算单元可以是基于FP16设计的矩阵计算单元。可选的,本申请实施例也可以对该矩阵计算单元中包括的加法器的位宽进行扩展,以用于实现高精度的浮点数的加法,比如,将加法器扩展为下文中图6所示的高精度加法器。这里的低精度和高精度是相对而言的,比如,该低精度为FP16,则大于FP16的FP32、FP64等精度可以认为是高精度。
另外,该待计算矩阵可以包括一个或者多个矩阵,这一个或者多个矩阵中浮点数的精度可以表示为第一精度。第一精度可以大于FP16,比如,第一精度可以为FP32、FP64或者FP128等。该矩阵计算类型可以包括矩阵的乘法、矩阵的加法、以及矩阵的乘加等,该矩阵的乘加是矩阵的加法和乘法的混合计算。示例性的,以矩阵A和矩阵B为例,矩阵的乘法可以表示为A×B,矩阵的加法可以表示为A+B;以矩阵A、矩阵B和矩阵C为例,矩阵的乘加可以表示为A×B+C。这里的矩阵A、矩阵B和矩阵C可以为不同的矩阵,也可以为相同的矩阵,本申请实施例对此不作具体限制。
具体的,当该计算设备的处理器包括CPU和矩阵计算单元时,基于处理器的上层软件(比如,AI应用、HPC应用和科学计算应用等)可以通过统一封装的线性代数函数库向CPU发送用于矩阵计算请求,该请求中可以携带待计算矩阵和矩阵计算类型;当CPU接收到该请求时,CPU可以调度该矩阵计算单元来执行矩阵计算任务。在一种可能的实现方式中,若该矩阵计算单元集成在该CPU中,该CPU可以将矩阵计算请求中的待计算矩阵和矩阵计算类型存储在寄存器中,从而当该矩阵计算单元在执行矩阵计算任务时,可以从寄存器中获取该计算指令,以获取待计算矩阵和矩阵计算类型。在另一种可能的实现方式中,若该矩阵计算单元与CPU并列且单独集成时,该CPU可以将矩阵计算请求中的待计算矩阵和矩阵计算类型存储在内存中,从而当该矩阵计算单元在执行矩阵计算任务时,可以从内存中获取该计算指令,以获取待计算矩阵和矩阵计算类型。
S302:拆解该待计算矩阵得到多个拆解后的矩阵,该拆解后的矩阵中浮点数的精度低于该待计算矩阵中浮点数的精度。
其中,该拆解后的矩阵中浮点数的精度可以表示为第二精度,该待计算矩阵中浮点数的精度表示为第一精度,第二精度低于第一精度,也可以替换为第一精度高于第二精度。比如,第一精度为FP32、FP64或者FP128等,第二精度为FP16。
另外,拆解该待计算矩阵得到多个拆解后的矩阵可以包括:按照预设规则拆解该待计算矩阵得到多个拆解后的矩阵,该预设规则用于将该待计算矩阵中第一精度的浮点数拆解为第二精度的浮点数,第二精度低于第一精度,该预设规则可以事先进行设置。或者,拆解该待计算矩阵得到多个拆解后的矩阵可以包括:将包括第一精度的浮点数的该待计算矩阵拆解为多个包括第二精度的浮点数的矩阵和多个指数矩阵,该指数矩阵可以是指以指数作为元素的矩阵。
具体的,该待计算矩阵可以包括一个或者多个矩阵,这一个或者多个矩阵中的每个矩阵均包括第一精度的浮点数,每个矩阵可以按照以下方式中的一种方式来拆解,以得到对应的多个拆解后的矩阵,拆解后的矩阵可以包括第二精度的浮点数。
第一种方式,该待计算矩阵包括第一矩阵,将第一矩阵拆解为多个拆解后的矩阵的过程可以为:将第一矩阵按列拆解为多个列矩阵,每个列矩阵中浮点数的精度为第一精度;将这多个列矩阵中每个列矩阵拆解为一个第一子矩阵、以及与该第一子矩阵对应的一个第一指数矩阵,该第一子矩阵中浮点数的精度为第二精度,从而这多个列矩阵拆解后对应得到多个第一子矩阵和多个第一指数矩阵。
示例性的,第一矩阵为M行K列的矩阵,具体可以将第一矩阵拆解为K个列矩阵,每个列矩阵中包括M个第一精度的浮点数;将这K个列矩阵中的每个列矩阵拆解为一个包括M行W列的第二精度的浮点数的第一子矩阵、以及一个M行N列的第一指数矩阵,该第一子矩阵与该第一指数矩阵对应。
第二种方式,该待计算矩阵可以包括第二矩阵,将第二矩阵拆解为多个拆解后的矩阵的过程可以为:将第二矩阵按行拆解为多个行矩阵,每个行矩阵中浮点数的精度为第一精度;将这多个行矩阵中每个行矩阵拆解为一个第二子矩阵、以及与该第二子矩阵对应的一个第二指数矩阵,该第二子矩阵中浮点数的精度为第二精度,从而这多个行矩阵拆解后对应得到多个第二子矩阵和多个第二指数矩阵。
示例性的,第二矩阵为K行N列的矩阵,具体可以将第二矩阵拆解为K个行矩阵,每个行矩阵中包括N个第一精度的浮点数;将这K个行矩阵中的每个行矩阵拆解为一个包括W行N列的第二精度的浮点数的第二子矩阵、以及一个M行N列的第二指数矩阵,该第二子矩阵与该第二指数矩阵对应。
在上述两种方式中,M、K、W和N均为正整数,M、K和N的具体数值可以取决于该待计算矩阵的行数或列数,W的具体数值与第一精度和第二精度有关。可选的,W的具体数值可以事先进行设置。比如,当第一精度为FP32、第二精度为FP16时,W可以等于9;当第一精度为FP64、第二精度为FP16时,W可以等于32。
在一种可能的实施例中,当该待计算矩阵包括矩阵A和矩阵B、矩阵计算类型为矩阵的乘法(即A×B)时,可以将矩阵A按照上述第一种方式进行拆解,将矩阵B按照上述第二种方式进行拆解,以得到矩阵A对应的多个第一子矩阵和多个第一指数矩阵,以及矩阵B对应的多个第二子矩阵和多个第二指数矩阵。其中,矩阵A拆解得到的多个第一子矩阵与矩阵B拆解得到的多个第二子矩阵一一对应,多个第一指数矩阵与多个第二指数矩阵也一一对应。可选的,一个列矩阵拆解后得到的第一子矩阵与该列矩阵对应的行矩阵拆解后的得到第二子矩阵对应,同一列矩阵拆解后得到的第一子矩阵和第一指数矩阵对应,同一行矩阵拆解后得到的第二子矩阵和第二指数矩阵对应。
示例性的,如图5所示,假设M行K列的矩阵A与于K行N列的矩阵B相乘。对于M行K列的矩阵A,将矩阵A按列拆解为K个列矩阵,即得到[A11 A21 … AM1]T、[A12 A22 … AM2]T、…、[A1K A2K … AMK]T,[]T表示矩阵的转置;再将每个列矩阵拆解为一个M行W列的第一子矩阵(包括第二精度的浮点数)和一个M行N列的第一指数矩阵(与该第一子矩阵对应)。对于K行N列的矩阵B,将矩阵B按行拆解为N个行矩阵,即得到[B11 B12 … B1N](与[A11 A21 … AM1]T对应)、[B21 B22 … B2N](与[A12 A22 … AM2]对应)、…、[BK1 BK2 … BKN](与[A1K A2K … AMK]T对应);再将每个行矩阵拆解为一个W行N列的第二子矩阵(包括第二精度的浮点数)和一个M行N列的第二指数矩阵(与该第二子矩阵对应)。其中,一个列矩阵拆解后得到的第一子矩阵与该列矩阵对应的行矩阵拆解后的得到第二子矩阵对应,比如,[A11 A21 … AM1]T拆解后得到的第一子矩阵与[B11 B12 … B1N]拆解后得到的第二子矩阵对应。
在另一种可能的实施例中,当该待计算矩阵包括矩阵A和矩阵B、矩阵计算类型为矩阵的加法(即A+B)时,可以看作是A×O+B(也可以是O×A+B),O是一个单位对角矩阵,即将矩阵A和矩阵O做乘法,再将得到的矩阵乘法结果与矩阵B作加法。相应的,该矩阵计算单元可以按照上文中所提供的矩阵的乘法的拆解过程对该矩阵A和该矩阵O进行拆解,以得到该矩阵A对应的多个第一子矩阵和多个第一指数矩阵,该矩阵O对应的多个第二子矩阵和多个第二指数矩阵。可选的,该矩阵计算单元在获取到矩阵A和矩阵B时,也可以对矩阵A和矩阵B进行透传,比如,将矩阵A和矩阵B透传至该矩阵计算单元中的加法器中(比如,将矩阵A和矩阵B直接透传至下文中图6所示的高精度加法器中),然后直接做矩阵A与矩阵B的加法,得到最终的矩阵运算结果。
在又一种可能的实施例中,当该待计算矩阵包括矩阵A、矩阵B和矩阵C、矩阵计算类型为矩阵的乘加(即A×B+C)时,则可以先按照上文中所提供的矩阵的乘法的拆解方式拆解矩阵A和矩阵B,不对矩阵C作拆解。之后,在计算得到A×B的矩阵乘法结果时,将该矩阵乘法结果和矩阵C直接做加法,即可得到A×B+C的矩阵乘加结果。
S303:按照该矩阵计算类型执行该多个拆解后的矩阵的计算处理。
由于该矩阵计算类型包括矩阵的乘法、矩阵的加法、以及矩阵的乘加,当该矩阵计算类型不同时,对应的执行该多个拆解后的矩阵的计算处理也会略有所不同,下面分别对不同矩阵计算类型对应的计算处理进行说明。
第一种、该矩阵计算类型为矩阵的乘法。
具体的,该待计算矩阵可以包括第一矩阵和第二矩阵,第一矩阵对应的拆解后的矩阵包括多个第一子矩阵和多个第一指数矩阵,第二矩阵对应的拆解后的矩阵包括多个第二子矩阵和多个第二指数矩阵,多个第一子矩阵、多个第一指数矩阵、多个第二子矩阵与多个第二指数矩阵之间存在对应关系,则按照该矩阵计算类型执行多个拆解后的矩阵的计算处理的过程可以包括:按照多个第一子矩阵与多个第二子矩阵之间的对应关系,确定每个第一子矩阵与对应的第二子矩阵的第一运算结果,以得到多个第一运算结果;按照多个第一指数矩阵与多个第二指数矩阵之间的对应关系,确定每个第一指数矩阵与对应的第二指数矩阵的第二运算结果,以得到多个第二运算结果;根据多个第一子矩阵与多个第一指数矩阵之间的对应关系,以及多个第一运算结果和多个第二运算结果,确定第一矩阵与第二矩阵的矩阵运算结果。可选的,确定第一矩阵与第二矩阵的矩阵运算结果可以为:根据多个第一运算结果中的每个第一运算结果与该第一运算结果对应的第二运算结果确定第三运算结果,以得到多个第三运算结果,其中,一个第一子矩阵的第一运算结果与该第一子矩阵对应的第一指数矩阵的第二运算结果对应;根据该多个第三运算结果,确定第一矩阵与第二矩阵的矩阵运算结果,比如,将该多个第三运算结果的累加和,确定为第一矩阵与第二矩阵的矩阵运算结果。
在一种可能的实施例中,确定一个第一子矩阵与对应的第二子矩阵的第一运算结果的具体过程可以为:将第一子矩阵与对应的第二子矩阵的乘积确定为第一运算结果。示例性的,假设一个第一子矩阵为矩阵a’,与矩阵a’对应的第二子矩阵为矩阵b’,则矩阵a’与矩阵b’的第一运算结果可以是矩阵a’与矩阵b’的乘积,即按照矩阵乘法运算规则,使用矩阵a’中的行元素分别与矩阵b’中对应列的列元素做乘积,得到第一运算结果中每行每列的元素,这里的第一运算结果可以为包括第二精度的浮点数的矩阵。
在一种可能的实施例中,确定一个第一指数矩阵与对应的第二指数矩阵的第二运算结果的具体过程可以为:根据第一指数矩阵和对应的第二指数矩阵中处于相同位置的两个指数元素确定第二运算结果中处于相同位置的元素,这里的第二运算结果可以为指数矩阵。比如,根据第一指数矩阵中处于第1行第1列的元素和第二指数矩阵中处于第1行第1列的元素,确定第二运算结果中第1行第1列的元素。
可选的,一个第一指数矩阵与对应的第二指数矩阵中处于相同位置的两个浮点数为X和Y,对应的第二运算结果中处于相同位置的浮点数Z满足如下公式(I)。
Z=2^(expX+expY-Q*2) (I)
式中,exp表示指数函数,Q与第一矩阵和第二矩阵包括的浮点数的精度(即第一精度)有关,比如,Q可以为2P-1-1,P具体可以为第一精度中指数位的位宽。可选的,当第一精度为FP32、第二精度为FP16时,P等于8,从而Q可以等于127,即公式(I)变为公式(II);当第一精度为FP48、第二精度为FP16时,P等于11,从而Q可以等于1023,即公式(I)变为公式(III)。
Z=2^(expX+expY-127*2) (II)
Z=2^(expX+expY-1023*2) (III)
在一种可能的实施例中,根据多个第一运算结果中的每个第一运算结果与该第一运算结果对应的第二运算结果,确定第三运算结果的具体过程可以为:将第一运算结果和对应的第二运算结果中处于相同位置的元素的乘积确定为第三运算结果中处于相同位置的元素,这里的第三运算结果可以为包括第一精度的浮点数的矩阵。比如,将第一运算结果中处于第1行第1列的元素和对应的第二运算结果中处于第1行第1列的元素的乘积,确定第二运算结果中第1行第1列的元素。
第二种、该矩阵计算类型为矩阵的加法。
当该待计算矩阵包括矩阵A和矩阵B,矩阵A和矩阵B的加法(即A+B)可以看作是A×O+B,并在上述S302中对矩阵A和矩阵O进行拆解后,可以按照上述第一种所提供的计算处理过程对矩阵A和矩阵O拆解后的矩阵进行处理,以得到A×O的矩阵乘法结果,再将该矩阵乘法结果与矩阵B作加法,即得到最终的矩阵运算结果。
第三种、该矩阵计算类型为矩阵的乘加。
当该待计算矩阵包括矩阵A、矩阵B和矩阵C,矩阵计算类型为矩阵的乘加(即A×B+C),并在上述S302中对矩阵A和矩阵B进行拆解后,可以按照上述第一种所提供的计算处理过程对矩阵A和矩阵B拆解后的矩阵进行处理,以得到A×B的矩阵乘法结果,再将该矩阵乘法结果与矩阵C作加法,即得到最终的矩阵运算结果。
进一步的,在S302之前,该方法还可以包括:S302a。
S302a:确定该待计算矩阵中浮点数的精度大于预设精度。
其中,预设精度可以是该矩阵计算单元无需进行矩阵拆解即可用于实现矩阵计算时的精度,该预设精度可以事先进行设置。比如,该矩阵计算单元是基于FP16设计的矩阵计算单元,则该预设精度可以被设置为FP16。
具体的,当该矩阵拆解单元获取到该待计算矩阵时,可以判断该待计算矩阵包括的浮点数的精度是否大于预设精度;若判断结果为是,则确定该待计算矩阵中浮点数的精度大于预设精度,从而在执行矩阵计算时,该矩阵计算单元可以按照上述S302-S303所描述的方式进行矩阵拆解和计算处理,以得到最终的矩阵运算结果;若判断结果为否,则确定该待计算矩阵中浮点数的精度小于或等于预设精度,从而在执行矩阵计算时,该矩阵计算单元可以无需进行矩阵拆解,而是直接进行计算处理,以得到最终的矩阵运算结果。
为便于理解,下面以该待计算矩阵包括第一矩阵和第二矩阵、该矩阵计算类型为矩阵的乘法和第二精度为FP16为例,对本本申请所提供的技术方案进行举例说明。图6为一种基于FP16的矩阵计算单元的结构框图,该矩阵计算单元包括:缓存器401、缓存器402、矩阵拆解单元403、指数乘法器404、FP16计算单元405、高精度加法器406和缓存器407。可选的,缓存器401、缓存器402和缓存器407可以是同一内存中不同的存储空间,也可以是各自作为一个寄存器的形式而存在。
基于上述图6所示的矩阵计算单元,本申请所提供的方法具体可以包括如图7所示的步骤S01至S08。
S01.诸如AI应用和HPC应用等上层软件产生矩阵计算请求,并将该矩阵计算请求发送给CPU,该请求中可以携带第一矩阵、第二矩阵和矩阵计算类型。
S02.当CPU接收到该请求时,CPU可以向矩阵计算单元下发矩阵计算任务,即调度该矩阵计算单元来执行矩阵计算任务,第一矩阵、第二矩阵和矩阵计算类型可以通过计算指令的形式存储在CPU内部的存储空间中。
S03.矩阵计算单元获取第一矩阵、第二矩阵和矩阵计算类型,判断第一矩阵和第二矩阵是否为FP16矩阵,即判断第一矩阵和第二矩阵包括的浮点数的精度是否大于FP16;若否则执行S04;若是则执行S06并按照现有技术的矩阵计算方法执行。其中,缓存器401可用于缓存第一矩阵,缓存器402可用于缓存第二矩阵。
S04.拆解第一矩阵和第二矩阵,即按照上文S302中所描述的第一种方式拆解第一矩阵以得到多个第一子矩阵和多个第一指数矩阵,按照第二种方式拆解第二矩阵以得到多个第二子矩阵和多个第二指数矩阵。其中,矩阵拆解单元403可用于执行拆解第一矩阵和第二矩阵的步骤。进一步的,如图8所示,矩阵拆解单元403可以包括矩阵重排子单元4031、拆解器4032、FP16矩阵聚合子单元4033和指数矩阵聚合子单元4034;其中,矩阵重排子单元4031可用于将第一矩阵按列拆解为多个列矩阵,以及将第二矩阵按行拆解为多个行矩阵;拆解器4032用于将每个列矩阵和每个行矩阵拆解为一个FP16矩阵和一个指数矩阵,具有为拆解多个列矩阵中每个列矩阵包括的第二精度的浮点数以得到多个第一子矩阵和多个第一指数矩阵,以及拆解多个行矩阵中每个行矩阵包括的第二精度的浮点数以得到多个第二子矩阵和多个第二指数矩阵;FP16矩阵聚合子单元4033用于存储多个第一子矩阵和多个第二子矩阵;指数矩阵聚合子单元4034用于存储多个第一指数矩阵和多个第二指数矩阵。
S05.执行指数矩阵的计算,即执行多个第一指数矩阵与多个第二指数矩阵的计算,以得到多个第二运算结果。其中,指数乘法器404可用于执行指数矩阵的计算。
S06.执行FP16矩阵计算,即执行多个第一子矩阵与多个第二子矩阵的计算,以得到多个第一运算结果,以及执行多个第一运算结果与多个第二运算结果的计算,以得到多个第三运算结果。其中,FP16计算单元405可用于执行FP 16的矩阵计算。
S07.执行高精度的矩阵加法,即计算多个第三运算结果的累加和,以得到最终矩阵计算结果。S08.输出最终矩阵计算结果。其中,高精度加法器406可用于执行高精度的矩阵加法,并输出最终矩阵计算结果的步骤。在实际应用中,也可以通过FP16的加法器执行S07中的矩阵加法,本申请实施例对此不作具体限制。
在本申请实施例中,该矩阵计算单元在获取到待计算矩阵和矩阵计算类型时,如果该待计算矩阵包括的浮点数的精度为大于FP16的高精度,则可以将该待计算矩阵拆解为多个包括低精度的浮点数的矩阵,比如拆解为多个包括FP16的浮点数的矩阵,按照矩阵计算类型执行这多个包括FP16的浮点数的矩阵的计算处理,即得到该待计算矩阵对应的矩阵运算结果,从而可以基于低精度的矩阵计算单元实现高精度矩阵的计算,提高了矩阵计算单元的适用性,同时在矩阵计算过程中,AI应用和HPC应用等上层软件应用不感知矩阵计算的具体过程,从而可以极大地降低软件适配的成本。
上述主要从计算设备的角度对本实施例提供的浮点数运算方法进行了介绍。可以理解的是,该计算设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的网元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对矩阵计算装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,图9示出了上述实施例中所涉及的矩阵计算装置的一种可能的结构示意图。其中,该装置可以为PCIe卡、SoC、处理器,以及包括上述硬件的服务器等;或者,该装置可以如软件形式实现,并被存储在存储介质中。
参见图9,该装置包括:获取单元501、拆解单元502和计算单元503。其中,获取单元501用于支持该装置执行方法实施例中的S301;拆解单元502用于支持该装置执行方法实施例中的S302a和S302;计算单元503用于支持该装置执行方法实施例中的S303。在一种可能的实施例中,拆解单元502还可以用于支持该装置执行方法实施例中的S03和S04:计算单元503还可以用于支持该装置执行方法实施例中的S05至S08。
上面从模块化功能实体的角度对本申请实施例中的一种矩阵计算装置进行描述,下面从硬件处理的角度对本申请实施例中的一种矩阵计算装置进行描述。
在本申请的一种实施例中,提供一种矩阵计算电路,该矩阵计算电路可用于执行上述方法实施例中的S301-S303中的一个或者多个步骤,或者S03至S08中的一个或者多个步骤。在实际应用中,该矩阵计算电路可以是ASIC、FPGA或者逻辑电路等。
在本申请的另一种实施例中,还提供一种矩阵计算系统或者芯片,该系统或者芯片的结构可以如图3所示,该装置包括:处理器(以中央处理器为例)1和矩阵计算单元1。其中,处理器1用于向矩阵计算单元1发送计算指令,矩阵计算单元2用于执行上述方法实施例中的S301-S303中的一个或者多个步骤,或者S03至S08中的一个或者多个步骤。
在本申请的又一种实施例中,提供一种矩阵计算设备,该设备的结构可以如图2所示,该设备具体可以为PCIe卡、SoC、处理器,以及包括上述硬件的服务器等。参见图2,该装置包括:存储器201、处理器202、通信接口203和总线204。其中,通信接口203可以包括输入接口和输出接口。
其中,处理器202可以被配置为执行上述方法实施例中的S301-S303中的一个或者多个步骤,或者S01至S08中的一个或者多个步骤。在一些可行的实施例中,处理器202可以包括矩阵计算单元,该矩阵计算单元可用于支持该处理器执行上述方法实施例中的一个或者多个步骤。在实际应用中,该矩阵计算单元可以是ASIC、FPGA或者逻辑电路等,当然该矩阵计算单元也可以通过软件实现,本申请实施例对此不作具体限制。
需要说的是,本申请实施例提供的上述矩阵计算电路、矩阵计算系统和矩阵计算设备等的各组成部分分别用于实现相对应的前述方法实施例的各步骤的功能,由于在前述的方法实施例中,已经对各步骤进行了详细说明,在此不再赘述。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,SSD)。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (22)
1.一种矩阵计算的方法,其特征在于,所述方法由矩阵计算单元执行,所述矩阵计算单元包括缓存器、矩阵拆解单元、第二精度计算单元、指数乘法器和加法器,所述方法包括:
所述缓存器获取计算指令,所述计算指令包括待计算矩阵和矩阵计算类型;
所述矩阵拆解单元拆解所述待计算矩阵得到多个拆解后的矩阵,所述拆解后的矩阵中浮点数的精度低于所述待计算矩阵中浮点数的精度;
所述第二精度计算单元、所述指数乘法器和所述加法器按照所述矩阵计算类型执行所述多个拆解后的矩阵的计算处理;
其中,所述矩阵拆解单元拆解所述待计算矩阵得到多个拆解后的矩阵,包括:将包括第一精度的浮点数的所述待计算矩阵拆解为多个包括第二精度的浮点数的矩阵和多个指数矩阵,所述第二精度低于所述第一精度。
2.根据权利要求1所述的方法,其特征在于,所述将包括第一精度的浮点数的所述待计算矩阵拆解为多个包括第二精度的浮点数的矩阵和多个指数矩阵,包括:
将包括第一精度的浮点数的所述待计算矩阵按列拆解为多个列矩阵;
将所述多个列矩阵中的每个列矩阵拆解为一个包括第二精度的浮点数的第一子矩阵和一个第一指数矩阵,以得到多个第一子矩阵和多个第一指数矩阵,同一列矩阵拆解得到的第一子矩阵和第一指数矩阵对应。
3.根据权利要求1所述的方法,其特征在于,所述将包括第一精度的浮点数的所述待计算矩阵拆解为多个包括第二精度的浮点数的矩阵和多个指数矩阵,包括:
将包括第一精度的浮点数的所述待计算矩阵按行拆分为多个行矩阵;
将所述多个行矩阵中的每个行矩阵拆解为一个包括第二精度的浮点数的第二子矩阵和一个第二指数矩阵,以得到多个第二子矩阵和多个第二指数矩阵,同一行矩阵拆解得到的包括第二子矩阵和第二指数矩阵对应。
4.根据权利要求1所述的方法,其特征在于,所述待计算矩阵包括第一矩阵和第二矩阵,所述第一矩阵对应的拆解后的矩阵包括多个第一子矩阵和多个第一指数矩阵,所述第二矩阵对应的拆解后的矩阵包括多个第二子矩阵和多个第二指数矩阵,所述多个第一子矩阵、所述多个第一指数矩阵、所述多个第二子矩阵与所述多个第二指数矩阵之间存在对应关系;当所述矩阵计算类型为矩阵的乘法时,所述第二精度计算单元、所述指数乘法器和所述加法器按照所述矩阵计算类型执行所述多个拆解后的矩阵的计算处理,包括:
所述第二精度计算单元按照所述多个第一子矩阵与所述多个第二子矩阵之间的对应关系,确定每个第一子矩阵与对应的第二子矩阵的第一运算结果,以得到多个第一运算结果;
所述指数乘法器按照所述多个第一指数矩阵与所述多个第二指数矩阵之间的对应关系,确定每个第一指数矩阵与对应的第二指数矩阵的第二运算结果,以得到多个第二运算结果;
所述加法器根据所述多个第一子矩阵与所述多个第一指数矩阵之间的对应关系,以及所述多个第一运算结果和所述多个第二运算结果,确定所述第一矩阵与所述第二矩阵的矩阵运算结果。
5.根据权利要求4所述的方法,其特征在于,所述根据所述多个第一子矩阵与所述多个第一指数矩阵之间的对应关系,以及所述多个第一运算结果和所述多个第二运算结果,确定所述第一矩阵与所述第二矩阵的矩阵运算结果,包括:
根据所述多个第一运算结果中的每个第一运算结果与所述第一运算结果对应的第二运算结果确定第三运算结果,以得到多个第三运算结果,其中,一个第一子矩阵的第一运算结果与所述第一子矩阵对应的第一指数矩阵的第二运算结果对应;
根据所述多个第三运算结果,确定所述第一矩阵与所述第二矩阵的矩阵运算结果。
6.根据权利要求4或5所述的方法,其特征在于,一个第一指数矩阵与对应的第二指数矩阵中处于相同位置的两个浮点数为X和Y,对应的第二运算结果中处于相同位置的浮点数Z满足如下公式:
Z=2^(expX+expY-Q*2);
其中,Q与所述第一矩阵和所述第二矩阵中包括的浮点数的精度有关,exp表示指数函数。
7.根据权利要求1所述的方法,其特征在于,所述矩阵计算单元集成在通用处理器中,所述缓存器获取计算指令包括:从寄存器中获取计算指令;或者,
所述矩阵计算单元集成在通用处理器外,所述缓存器获取计算指令包括:从内存中获取计算指令。
8.根据权利要求1所述的方法,其特征在于,所述待计算矩阵中浮点数的精度为FP32或者FP64,所述拆解后的矩阵中浮点数的精度为FP16。
9.根据权利要求1所述的方法,其特征在于,在所述拆解所述待计算矩阵得到多个拆解后的矩阵之前,所述方法还包括:
所述矩阵拆解单元确定所述待计算矩阵中浮点数的精度大于预设精度。
10.一种矩阵计算的装置,其特征在于,所述装置包括缓存器、矩阵拆解单元、第二精度计算单元、指数乘法器和加法器:
所述缓存器,用于获取计算指令,所述计算指令包括待计算矩阵和矩阵计算类型;
所述矩阵拆解单元,用于拆解所述待计算矩阵得到多个拆解后的矩阵,所述拆解后的矩阵中浮点数的精度低于所述待计算矩阵中浮点数的精度;
所述第二精度计算单元、所述指数乘法器和所述加法器,用于按照所述矩阵计算类型执行所述多个拆解后的矩阵的计算处理;
其中,所述矩阵拆解单元还用于:将包括第一精度的浮点数的所述待计算矩阵拆解为多个包括第二精度的浮点数的矩阵和多个指数矩阵,所述第二精度低于所述第一精度。
11.根据权利要求10所述的装置,其特征在于,所述矩阵拆解单元还用于:
将包括第一精度的浮点数的所述待计算矩阵按列拆解为多个列矩阵;
将所述多个列矩阵中的每个列矩阵拆解为一个包括第二精度的浮点数的第一子矩阵和一个第一指数矩阵,以得到多个第一子矩阵和多个第一指数矩阵,同一列矩阵拆解得到的第一子矩阵和第一指数矩阵对应。
12.根据权利要求10所述的装置,其特征在于,所述矩阵拆解单元还用于:
将包括第一精度的浮点数的所述待计算矩阵按行拆分为多个行矩阵;
将所述多个行矩阵中的每个行矩阵拆解为一个包括第二精度的浮点数的第二子矩阵和一个第二指数矩阵,以得到多个第二子矩阵和多个第二指数矩阵,同一行矩阵拆解得到的包括第二子矩阵和第二指数矩阵对应。
13.根据权利要求10所述的装置,其特征在于,所述待计算矩阵包括第一矩阵和第二矩阵,所述第一矩阵对应的拆解后的矩阵包括多个第一子矩阵和多个第一指数矩阵,所述第二矩阵对应的拆解后的矩阵包括多个第二子矩阵和多个第二指数矩阵,所述多个第一子矩阵、所述多个第一指数矩阵、所述多个第二子矩阵与所述多个第二指数矩阵之间存在对应关系;当所述矩阵计算类型为矩阵的乘法时:
所述第二精度计算单元,还用于按照所述多个第一子矩阵与所述多个第二子矩阵之间的对应关系,确定每个第一子矩阵与对应的第二子矩阵的第一运算结果,以得到多个第一运算结果;
所述指数乘法器,还用于按照所述多个第一指数矩阵与所述多个第二指数矩阵之间的对应关系,确定每个第一指数矩阵与对应的第二指数矩阵的第二运算结果,以得到多个第二运算结果;
所述加法器,还用于根据所述多个第一子矩阵与所述多个第一指数矩阵之间的对应关系,以及所述多个第一运算结果和所述多个第二运算结果,确定所述第一矩阵与所述第二矩阵的矩阵运算结果。
14.根据权利要求13所述的装置,其特征在于,所述加法器还用于:
根据所述多个第一运算结果中的每个第一运算结果与所述第一运算结果对应的第二运算结果确定第三运算结果,以得到多个第三运算结果,其中,一个第一子矩阵的第一运算结果与所述第一子矩阵对应的第一指数矩阵的第二运算结果对应;
根据所述多个第三运算结果,确定所述第一矩阵与所述第二矩阵的矩阵运算结果。
15.根据权利要求13或14所述的装置,其特征在于,一个第一指数矩阵与对应的第二指数矩阵中处于相同位置的两个浮点数为X和Y,对应的第二运算结果中处于相同位置的浮点数Z满足如下公式:
Z=2^(expX+expY-Q*2);
其中,Q与所述第一矩阵和所述第二矩阵中包括的浮点数的精度有关,exp表示指数函数。
16.根据权利要求10所述的装置,其特征在于,矩阵计算单元集成在通用处理器中,所述缓存器还用于:从寄存器中获取计算指令;或者,
所述矩阵计算单元集成在通用处理器外,所述缓存器还用于:从内存中获取计算指令。
17.根据权利要求10所述的装置,其特征在于,所述待计算矩阵中浮点数的精度为FP32或者FP64,所述拆解后的矩阵中浮点数的精度为FP16。
18.根据权利要求10所述的装置,其特征在于,所述矩阵拆解单元还用于:
确定所述待计算矩阵中浮点数的精度大于预设精度。
19.一种矩阵计算电路,其特征在于,所述矩阵计算电路用于执行如权利要求1-9任一项所述的矩阵计算的方法。
20.一种矩阵计算系统,其特征在于,所述系统包括处理器和矩阵计算单元,所述处理器用于向所述矩阵计算单元发送计算指令,所述矩阵计算单元用于执行如权利要求1-9任一项所述的矩阵计算的方法。
21.一种芯片,其特征在于,所述芯片包括处理器,所述处理器中集成有矩阵计算单元,所述矩阵计算单元用于执行如权利要求1-9任一项所述的矩阵计算的方法。
22.一种矩阵计算的设备,其特征在于,所述设备包括如权利要求20所述的矩阵计算系统、或者如权利要求21所述的芯片。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010966997.1A CN114186186B (zh) | 2020-09-15 | 2020-09-15 | 矩阵计算方法及相关设备 |
EP21868255.7A EP4206956A4 (en) | 2020-09-15 | 2021-07-17 | MATRIX CALCULATION METHOD AND ASSOCIATED APPARATUS |
PCT/CN2021/106961 WO2022057426A1 (zh) | 2020-09-15 | 2021-07-17 | 矩阵计算方法及相关设备 |
US18/183,394 US20230237122A1 (en) | 2020-09-15 | 2023-03-14 | Matrix computing method and related device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010966997.1A CN114186186B (zh) | 2020-09-15 | 2020-09-15 | 矩阵计算方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114186186A CN114186186A (zh) | 2022-03-15 |
CN114186186B true CN114186186B (zh) | 2023-08-04 |
Family
ID=80601207
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010966997.1A Active CN114186186B (zh) | 2020-09-15 | 2020-09-15 | 矩阵计算方法及相关设备 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20230237122A1 (zh) |
EP (1) | EP4206956A4 (zh) |
CN (1) | CN114186186B (zh) |
WO (1) | WO2022057426A1 (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104076324A (zh) * | 2014-07-09 | 2014-10-01 | 桂林电子科技大学 | 一种未知信源数高精度波达方向估计方法 |
CN105224284A (zh) * | 2015-09-29 | 2016-01-06 | 北京奇艺世纪科技有限公司 | 一种浮点数处理方法及装置 |
CN105224283A (zh) * | 2015-09-29 | 2016-01-06 | 北京奇艺世纪科技有限公司 | 一种浮点数处理方法及装置 |
JP2016042359A (ja) * | 2014-08-18 | 2016-03-31 | 株式会社デンソーアイティーラボラトリ | 認識装置、実数行列分解方法、認識方法 |
CN109145255A (zh) * | 2018-06-11 | 2019-01-04 | 山东省计算中心(国家超级计算济南中心) | 一种稀疏矩阵lu分解行更新的异构并行计算方法 |
CN110415157A (zh) * | 2018-04-26 | 2019-11-05 | 华为技术有限公司 | 一种矩阵乘法的计算方法及装置 |
CN110955404A (zh) * | 2018-09-27 | 2020-04-03 | 英特尔公司 | 用于使用操作的混合精度分解的较高精度计算的计算机处理器 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107526709A (zh) * | 2016-06-15 | 2017-12-29 | 辉达公司 | 使用低精度格式的张量处理 |
CN107045494A (zh) * | 2017-05-08 | 2017-08-15 | 科大讯飞股份有限公司 | 提高浮点矩阵运算效率的方法及系统 |
US10167800B1 (en) * | 2017-08-18 | 2019-01-01 | Microsoft Technology Licensing, Llc | Hardware node having a matrix vector unit with block-floating point processing |
US11169776B2 (en) * | 2019-06-28 | 2021-11-09 | Intel Corporation | Decomposed floating point multiplication |
CN110989970B (zh) * | 2019-11-27 | 2023-04-11 | 广州海格通信集团股份有限公司 | 一种双精度浮点矩阵运算处理器及方法 |
-
2020
- 2020-09-15 CN CN202010966997.1A patent/CN114186186B/zh active Active
-
2021
- 2021-07-17 WO PCT/CN2021/106961 patent/WO2022057426A1/zh unknown
- 2021-07-17 EP EP21868255.7A patent/EP4206956A4/en active Pending
-
2023
- 2023-03-14 US US18/183,394 patent/US20230237122A1/en active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104076324A (zh) * | 2014-07-09 | 2014-10-01 | 桂林电子科技大学 | 一种未知信源数高精度波达方向估计方法 |
JP2016042359A (ja) * | 2014-08-18 | 2016-03-31 | 株式会社デンソーアイティーラボラトリ | 認識装置、実数行列分解方法、認識方法 |
CN105224284A (zh) * | 2015-09-29 | 2016-01-06 | 北京奇艺世纪科技有限公司 | 一种浮点数处理方法及装置 |
CN105224283A (zh) * | 2015-09-29 | 2016-01-06 | 北京奇艺世纪科技有限公司 | 一种浮点数处理方法及装置 |
CN110415157A (zh) * | 2018-04-26 | 2019-11-05 | 华为技术有限公司 | 一种矩阵乘法的计算方法及装置 |
CN109145255A (zh) * | 2018-06-11 | 2019-01-04 | 山东省计算中心(国家超级计算济南中心) | 一种稀疏矩阵lu分解行更新的异构并行计算方法 |
CN110955404A (zh) * | 2018-09-27 | 2020-04-03 | 英特尔公司 | 用于使用操作的混合精度分解的较高精度计算的计算机处理器 |
Non-Patent Citations (1)
Title |
---|
周爱军主编.《基于Proteus仿真的51单片机应用》.北京:北京理工大学出版社,2018,第49-51页. * |
Also Published As
Publication number | Publication date |
---|---|
EP4206956A1 (en) | 2023-07-05 |
EP4206956A4 (en) | 2024-02-28 |
CN114186186A (zh) | 2022-03-15 |
US20230237122A1 (en) | 2023-07-27 |
WO2022057426A1 (zh) | 2022-03-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115934030B (zh) | 算数逻辑单元、浮点数乘法计算的方法及设备 | |
KR102581403B1 (ko) | 공유 하드웨어 로직 유닛 및 그것의 다이 면적을 줄이는 방법 | |
CN110109646B (zh) | 数据处理方法、装置和乘加器及存储介质 | |
CN113965205A (zh) | 位串压缩 | |
WO2021136259A1 (zh) | 浮点数乘法计算的方法、装置和算术逻辑单元 | |
JP4477959B2 (ja) | ブロードキャスト型並列処理のための演算処理装置 | |
CN112446007A (zh) | 一种矩阵运算方法、运算装置以及处理器 | |
CN114186186B (zh) | 矩阵计算方法及相关设备 | |
CN113805974A (zh) | 基于应用程序的数据类型选择 | |
US20230342419A1 (en) | Matrix calculation apparatus, method, system, circuit, and device, and chip | |
US20240037179A1 (en) | Data processing method and apparatus | |
US10824434B1 (en) | Dynamically structured single instruction, multiple data (SIMD) instructions | |
US8924447B2 (en) | Double precision approximation of a single precision operation | |
CN110199255B (zh) | 组合若干执行单元以计算单一宽标量结果 | |
Anane et al. | Hardware implementation of variable precision multiplication on FPGA | |
WO2023019972A1 (zh) | 一种计算装置、方法、系统、电路、芯片及设备 | |
CN117785113B (zh) | 计算装置及方法、电子设备和存储介质 | |
US20220407682A1 (en) | Secure computation apparatus, secure computation method, and program | |
CN113924622B (zh) | 存储器阵列外围中的位串累加 | |
WO2021149105A1 (ja) | 秘密計算装置、秘密計算方法、およびプログラム | |
CN115469829A (zh) | 运算装置和基于运算电路的指数运算方法 | |
CN113805841A (zh) | 多个寄存器中的位串累加 | |
CN113641602A (zh) | 用于posit运算的加速电路系统 | |
CN113495716A (zh) | 假定张量处理 | |
CN114144793A (zh) | 数据传输方法、装置、电子设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |