CN113111303A - 矩阵乘法运算方法、装置、介质和计算设备 - Google Patents
矩阵乘法运算方法、装置、介质和计算设备 Download PDFInfo
- Publication number
- CN113111303A CN113111303A CN202110343010.5A CN202110343010A CN113111303A CN 113111303 A CN113111303 A CN 113111303A CN 202110343010 A CN202110343010 A CN 202110343010A CN 113111303 A CN113111303 A CN 113111303A
- Authority
- CN
- China
- Prior art keywords
- matrix
- flat
- multiplied
- elements
- ratio
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
本发明的实施方式提供了一种矩阵乘法运算方法。该方法应用于端侧人工智能设备,并且包括:获取待相乘的M×K矩阵和K×N矩阵;根据M×K矩阵和K×N矩阵的矩阵信息,确定M×K矩阵和K×N矩阵是否为扁平矩阵;当M×K矩阵和K×N矩阵中的一个矩阵为扁平矩阵时,获取扁平矩阵的元素参与矩阵乘法运算,并且根据M×K矩阵和K×N矩阵中的另一个矩阵的存储方式来直接读取另一个矩阵的元素参与矩阵乘法运算。在参与乘法运算的两个矩阵中存在一个扁平矩阵的情况下,通过对两个矩阵中的非扁平矩阵的元素直接读取,使得处理器在进行乘法运算时效率提高。此外,本发明的实施方式还提供了一种矩阵乘法运算装置、介质和计算设备。
Description
技术领域
本发明的实施方式涉及计算机技术领域,更具体地,本发明的实施方式涉及一种矩阵乘法运算方法、装置、介质和计算设备。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述可包括可以探究的概念,但不一定是之前已经想到或者已经探究的概念。因此,除非在此指出,否则在本部分中描述的内容对于本申请的说明书和权利要求书而言不是现有技术,并且并不因为包括在本部分中就承认是现有技术。
随着人工智能的发展,端侧人工智能由于对用户隐私保护更好,不依赖网络连接,方便个性化定制等特点,是未来人工智能发展的主要趋势。在端侧人工智能的底层运算中,矩阵乘法的占比最高。提高矩阵乘法运算效率,对于端侧人工智能的落地具有重要意义。
对于矩阵乘法运算,每个矩阵的元素在运算前采用行主序或列主序的存储方式存放于存储器中。无论是行主序还是列主序,在不按照存储顺序读取元素时都会出现跳跃访问,这种跳跃的情况会大大降低处理器访问存储器的效率。为了防止跳跃访问,通常在计算前或计算过程中对参与乘法运算的两个矩阵进行重新排序。
然而,对于端侧人工智能常见的扁平矩阵乘法,这种对参与乘法运算的两个矩阵重新排序的开销超过收益,导致乘法运算效率非常低。
发明内容
为此,非常需要一种改进的矩阵乘法运算方法,以对参与乘法运算的两个矩阵选择性地重新排序,从而提高乘法运算效率。
在本上下文中,本发明的实施方式期望提供一种矩阵乘法运算方法、装置、介质和计算设备。
在本发明实施方式的第一方面中,提供了一种矩阵乘法运算方法。该方法应用于端侧人工智能设备,并且包括:获取待相乘的M×K矩阵和K×N矩阵,其中M、K和N为正整数;根据所述M×K矩阵和所述K×N矩阵的矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵;当所述M×K矩阵和所述K×N矩阵中的一个矩阵为扁平矩阵时,获取所述扁平矩阵的元素参与所述矩阵乘法运算,并且根据所述M×K矩阵和所述K×N矩阵中的另一个矩阵的存储方式来直接读取所述另一个矩阵的元素参与所述矩阵乘法运算。
在本发明的一个实施例中,所述根据矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵包括:根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵。
在本发明的一实施例中,所述根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵包括:当M与K的比值小于或等于第一预设阈值时,所述M×K矩阵为扁平矩阵;当N与K的比值小于或等于第一预设阈值时,所述K×N矩阵为扁平矩阵。
在本发明的一个实施例中,所述根据矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵包括:根据所述M×K矩阵和所述K×N矩阵的存储方式、根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵。
在本发明的一个实施例中,所述根据所述M×K矩阵和所述K×N矩阵的存储方式、根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵包括:当所述M×K矩阵的存储方式是列主序时,并且当N与K的比值小于或等于第一预设阈值时,所述K×N矩阵为扁平矩阵;当所述M×K矩阵的存储方式是行主序时,并且当N与K的比值小于或等于第二预设阈值时,所述K×N矩阵为扁平矩阵;当所述K×N矩阵的存储方式是行主序时,并且当M与K的比值小于或等于第一预设阈值时,所述M×K矩阵为扁平矩阵;当所述K×N矩阵的存储方式是列主序时,并且当M与K的比值小于或等于第二预设阈值时,所述M×K矩阵为扁平矩阵。
在本发明的一个实施例中,所述第一预设阈值小于所述第二预设阈值。
在本发明的一实施例中,所述获取所述扁平矩阵的元素参与所述矩阵乘法运算包括:当所述扁平矩阵的元素存储方式与在矩阵乘法运算时的元素使用顺序一致时,直接读取所述扁平矩阵中的元素参与所述矩阵乘法运算。
在本发明的一实施例中,所述获取所述扁平矩阵的元素参与所述矩阵乘法运算包括:当所述扁平矩阵的元素存储方式与在矩阵乘法运算时的元素使用顺序不一致时,按照如下方式获取所述扁平矩阵的元素:读取所述扁平矩阵中的参与所述矩阵乘法运算的元素;将读取的元素按照所述矩阵乘法运算时的元素使用顺序重新排列并存储在预设存储空间中;在进行所述矩阵乘法运算时,按照重新排列的存储顺序从所述预设存储空间中读取所述扁平矩阵的元素。
在本发明的一实施例中,所述矩阵乘法运算包括第一乘法运算模式和第二乘法运算模式,所述第一乘法运算模式包括:当所述K×N矩阵为扁平矩阵并且所述M×K矩阵的存储方式是行主序时,将所述M×K矩阵的每一行中的元素与所述K×N矩阵的所有列中的相应元素进行点积,当所述M×K矩阵为扁平矩阵并且所述K×N矩阵的存储方式是列主序时,将所述K×N矩阵的每一列中的元素与所述M×K矩阵的所有行中的相应元素进行点积,并且将所述M×K矩阵的第m行的元素与所述K×N的第n列对应元素点积之和存入所述M×K矩阵和所述K×N矩阵相乘获得的M×N矩阵的第m行第n列中,其中,1≤m≤M,1≤n≤N。所述第二乘法运算模式包括:当所述K×N矩阵为扁平矩阵并且所述M×K矩阵的存储方式是列主序时或者当所述M×K矩阵为扁平矩阵并且所述K×N矩阵的存储方式是行主序时,将所述K×N矩阵的第i行中的每个元素与所述M×K矩阵的第i列中的每个元素相乘,获得一个M×N中间矩阵,并且通过将所有M×N中间矩阵累加而获得对应于所述M×K矩阵与所述K×N矩阵乘积的M×N矩阵,其中,i=1,2,…,K。
在本发明的一实施例中,当根据所述另一个矩阵的存储方式来直接读取所述另一个矩阵的元素参与所述矩阵乘法运算时,通过数据预取方式来直接读取所述另一个矩阵的多行元素或多列元素。
在本发明实施方式的第二方面中,提供了一种矩阵乘法运算装置。该装置包括:获取模块,其配置用于获取待相乘的M×K矩阵和K×N矩阵,其中M、K和N为正整数;判断模块,其配置用于根据所述M×K矩阵和所述K×N矩阵的矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵;运算模块,其配置用于当所述M×K矩阵和所述K×N矩阵中的一个矩阵为扁平矩阵时,获取所述扁平矩阵的元素参与所述矩阵乘法运算,并且根据所述M×K矩阵和所述K×N矩阵中的另一个矩阵的存储方式来直接读取所述另一个矩阵的元素参与所述矩阵乘法运算。
在本发明的一实施例中,所述判断模块还配置用于采取如下方式根据矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵:根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵。
在本发明的一实施例中,所述判断模块还配置用于采取如下方式根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵:当M与K的比值小于或等于第一预设阈值时,所述M×K矩阵为扁平矩阵;当N与K的比值小于或等于第一预设阈值时,所述K×N矩阵为扁平矩阵。
在本发明的一实施例中,所述判断模块还配置用于采取如下方式根据矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵:根据所述M×K矩阵和所述K×N矩阵的存储方式、根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵。
在本发明的一实施例中,所述判断模块还配置用于采取如下方式根据所述M×K矩阵和所述K×N矩阵的存储方式、根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵:
在本发明的一实施例中,当所述M×K矩阵的存储方式是列主序时,并且当N与K的比值小于或等于第一预设阈值时,所述K×N矩阵为扁平矩阵;当所述M×K矩阵的存储方式是行主序时,并且当N与K的比值小于或等于第二预设阈值时,所述K×N矩阵为扁平矩阵;当所述K×N矩阵的存储方式是行主序时,并且当M与K的比值小于或等于第一预设阈值时,所述M×K矩阵为扁平矩阵;当所述K×N矩阵的存储方式是列主序时,并且当M与K的比值小于或等于第二预设阈值时,所述M×K矩阵为扁平矩阵。
在本发明的一实施例中,所述第一预设阈值小于所述第二预设阈值。
在本发明的一实施例中,所述运算模块还配置用于采取如下方式获取所述扁平矩阵的元素参与所述矩阵乘法运算:当所述扁平矩阵的元素存储方式与在矩阵乘法运算时的元素使用顺序一致时,直接读取所述扁平矩阵中的元素参与所述矩阵乘法运算。
在本发明的一实施例中,所述运算模块还配置用于采取如下方式获取所述扁平矩阵的元素参与所述矩阵乘法运算:当所述扁平矩阵的元素存储方式与在矩阵乘法运算时的元素使用顺序不一致时,按照如下方式获取所述扁平矩阵的元素:读取所述扁平矩阵中的参与所述矩阵乘法运算的元素;将读取的元素按照所述矩阵乘法运算时的元素使用顺序重新排列并存储在预设存储空间中;在进行所述矩阵乘法运算时,按照重新排列的存储顺序从所述预设存储空间中读取所述扁平矩阵的元素。
在本发明的一实施例中,所述矩阵乘法运算包括第一乘法运算模式和第二乘法运算模式,所述运算模块还配置用于执行所述第一乘法运算模式和所述第二乘法运算模式,所述第一乘法运算模式包括:当所述K×N矩阵为扁平矩阵并且所述M×K矩阵的存储方式是行主序时,将所述M×K矩阵的每一行中的元素与所述K×N矩阵的所有列中的相应元素进行点积,当所述M×K矩阵为扁平矩阵并且所述K×N矩阵的存储方式是列主序时,将所述K×N矩阵的每一列中的元素与所述M×K矩阵的所有行中的相应元素进行点积,并且将所述M×K矩阵的第m行的元素与所述K×N的第n列对应元素点积之和存入所述M×K矩阵和所述K×N矩阵相乘获得的M×N矩阵的第m行第n列中,其中,1≤m≤M,1≤n≤N。所述第二乘法运算模式包括:当所述K×N矩阵为扁平矩阵并且所述M×K矩阵的存储方式是列主序时或者当所述M×K矩阵为扁平矩阵并且所述K×N矩阵的存储方式是行主序时,将所述K×N矩阵的第i行中的每个元素与所述M×K矩阵的第i列中的每个元素相乘,获得一个M×N中间矩阵,并且通过将所有M×N中间矩阵累加而获得对应于所述M×K矩阵与所述K×N矩阵乘积的M×N矩阵,其中,i=1,2,…,K。
在本发明的一实施例中,所述运算模块还配置用于:当根据所述另一个矩阵的存储方式来直接读取所述另一个矩阵的元素参与所述矩阵乘法运算时,通过数据预取方式来直接读取所述另一个矩阵的多行元素或多列元素。
在本发明实施方式的第三方面中,提供了一种计算机可读存储介质。所述计算机可读存储介质存储有可执行指令,所述可执行指令被执行时,实现如上所述的方法。
在本发明实施方式的第四方面中,提供了一种计算设备。所述计算设备包括存储器和处理器,所述存储器中存储有可执行指令,所述处理器执行所述可执行指令时,实现如上所述的方法。
根据本发明实施方式的矩阵乘法运算方法、装置、介质和计算设备,可以在参与乘法运算的两个矩阵中存在一个扁平矩阵的情况下,对两个矩阵中的非扁平矩阵的元素直接读取,而无需对非扁平矩阵进行重新排序,由于非扁平矩阵相对于扁平矩阵规模较大,因此这种对非扁平矩阵的直接读取提高了矩阵乘法运算的效率。
附图说明
通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:
图1示意性地示出了根据本发明实施方式的矩阵乘法运算方法的流程图;
图2示意性地示出了根据本发明实施方式的矩阵乘法运算装置的框图;
图3示意性地示出了适于实现本发明实施方式的示例性计算系统1000的框图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
根据本发明的实施方式,提出了一种矩阵乘法运算方法、装置、介质和计算设备。
在本文中,需要理解的是,所涉及的术语包括:“扁平矩阵”。将行数和列数之间相差悬殊的矩阵称之为扁平矩阵。更具体地,当行数与列数相差悬殊且行数小于列数时,可以将这种矩阵称之为纵向扁平矩阵;当当行数与列数相差悬殊且列数小于行数时,可以将这种矩阵称之为横向扁平矩阵。此外,关于对“相差悬殊”的理解,为了更准确地限定扁平矩阵,本公开的实施方式对扁平矩阵的判断具有明确的标准,这将在下文中进行描述。
此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
发明概述
本发明人发现,在端侧人工智能常见的矩阵乘法运算中,当参与运算的两个矩阵中存在扁平矩阵时,现有的对两个矩阵都进行重新排序的优化方法不再高效。本发明的实施方式可以在参与乘法运算的两个矩阵中存在一个扁平矩阵时,对相对于扁平矩阵规模较大的非扁平矩阵不再进行元素重新排序,而是直接按照其元素在存储器中的存放次序直接读取元素,因此提高了乘法运算的效率。
在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。
应用场景总览
下面将描述根据本发明实施方式的矩阵乘法运算方法、装置、介质和计算设备的应用场景。
本公开的应用场景主要涉及端侧人工智能设备,例如智能手机、便携式娱乐设备等。具体地,本公开可以应用到全连接层和卷积层等常见神经网络结构的基础运算中。例如,本公开可以应用到端侧人工智能设备的处理器中,从而提高处理器上的矩阵乘法运算效率。较为具体地,本公开的应用场景可以是终端侧设备的语音识别、文字识别或机器翻译的推理过程等。
需要说明的是,以上仅为可以应用本发明实施方式的应用场景的示例,以帮助本领域技术人员理解本发明的技术内容,并不意味着本发明实施方式不可以用于其他设备、系统、环境或场景。
示例性方法
下面参考图1来描述根据本发明示例性实施方式的矩阵乘法运算方法。
参照图1,图1示意性地示出了根据本发明实施方式的矩阵乘法运算方法的流程图。该方法应用于端侧人工智能设备。如图1中所示,该方法可以包括以下步骤S101-S103。步骤S101:获取待相乘的M×K矩阵和K×N矩阵,其中M、K和N为正整数。步骤S102:根据所述M×K矩阵和所述K×N矩阵的矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵。步骤S103:当所述M×K矩阵和所述K×N矩阵中的一个矩阵为扁平矩阵时,获取所述扁平矩阵的元素参与所述矩阵乘法运算,并且根据所述M×K矩阵和所述K×N矩阵中的另一个矩阵的存储方式来直接读取所述另一个矩阵的元素参与所述矩阵乘法运算。
在步骤S101中:获取待相乘的M×K矩阵和K×N矩阵,其中M、K和N为正整数。
根据本公开的实施例,在进行矩阵乘法运算时,应首先获取参与乘法运算的两个矩阵。两个矩阵可以分别是M×K(M行K列)矩阵A和K×N(K行N列)矩阵B,其中M、K和N为正整数。例如,在端侧AI翻译场景中,M×K矩阵A可以是神经网络模型中的全连接层的输入矩阵(7x2560),K×N矩阵B可以是神经网络模型中的全连接层的权重矩阵(2560x384)。
在步骤S102中:根据所述M×K矩阵和所述K×N矩阵的矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵。
根据本公开的实施例,矩阵的矩阵信息包括矩阵的行数、列数以及存储方式等。其中,矩阵的存储方式包括行主序的存储方式和列主序的存储方式。因此,可以根据这些矩阵信息来确定矩阵是否为扁平矩阵。
在一个实施例中,所述根据矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵可以包括:根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵。
根据该实施例,可以利用上述矩阵A的行数与列数的比值确定矩阵A是否为扁平矩阵,并且利用上述矩阵B的列数与行数的比值来确定矩阵B是否为扁平矩阵。
具体地,所述根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵可以包括:当M与K的比值小于或等于第一预设阈值时,所述M×K矩阵为扁平矩阵;当N与K的比值小于或等于第一预设阈值时,所述K×N矩阵为扁平矩阵。
根据该实施例,为了更准确地限定本公开实施方式的扁平矩阵,可以预先设定一个阈值,针对上述矩阵A和矩阵B是否为扁平矩阵的判断都可以使用该预设阈值。该预设阈值例如可以是1/25。针对该实施例,仅判断矩阵A是否为纵向扁平矩阵以及矩阵B是否为横向扁平矩阵的情况。
此外,还可以设定另外的预设阈值,利用该另外的预设阈值,来判断矩阵A和矩阵B是否为扁平矩阵,即当M与K的比值大于该另外的预设阈值时,所述M×K矩阵为扁平矩阵;当N与K的比值大于该另外的预设阈值时,所述K×N矩阵为扁平矩阵。在这种情况下,仅判断矩阵A是否为横向扁平矩阵以及矩阵B是否为纵向扁平矩阵。当然,还可以同时设定上述的第一预设阈值和另外的预设阈值,并且判断矩阵A和矩阵B分别属于横向扁平矩阵或纵向扁平矩阵。
在另一个实施例中,所述根据矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵可以包括:根据所述M×K矩阵和所述K×N矩阵的存储方式、根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵。
根据该实施例,加入了新的判断条件,即矩阵的存储方式,因此可以通过将上述矩阵A的行数与列数的比值以及上述矩阵B的列数与行数的比值与矩阵A和矩阵B的存储方式相结合,来确定矩阵A和矩阵B是否为扁平矩阵。
具体地,所述根据所述M×K矩阵和所述K×N矩阵的存储方式、根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵可以包括:当所述M×K矩阵的存储方式是列主序时,并且当N与K的比值小于或等于第一预设阈值时,所述K×N矩阵为扁平矩阵;当所述M×K矩阵的存储方式是行主序时,并且当N与K的比值小于或等于第二预设阈值时,所述K×N矩阵为扁平矩阵;当所述K×N矩阵的存储方式是行主序时,并且当M与K的比值小于或等于所述第一预设阈值时,所述M×K矩阵为扁平矩阵;当所述K×N矩阵的存储方式是列主序时,并且当M与K的比值小于或等于所述第二预设阈值时,所述M×K矩阵为扁平矩阵。
根据该实施例,可以利用上述矩阵A的行数与列数的比值以及上述矩阵B的存储方式来确定矩阵A是否为扁平矩阵,并且利用上述矩阵B的列数与行数的比值以及上述矩阵A的存储方式来确定矩阵B是否为扁平矩阵。并且为了更加准确地限定本公开实施方式的扁平矩阵,可以预先设定两个阈值,针对上述矩阵A和矩阵B是否为扁平矩阵的判断都可以使用这两个预设阈值。其中,第一预设阈值例如可以是1/25,第二预设阈值可以是3/20。由此可知,所述第一预设阈值可以小于所述第二预设阈值。并且,对于同一矩阵,在该矩阵的存储方式不同的情况下,采用的预设阈值不同。针对该实施例,仅判断矩阵A是否为纵向扁平矩阵以及矩阵B是否为横向扁平矩阵的情况。
此外,还可以设定另外两个预设阈值,利用该另外两个预设阈值,来仅判断矩阵A是否为横向扁平矩阵以及矩阵B是否为纵向扁平矩阵。当然,还可以同时设定上述的第一、第二预设阈值和另外两个预设阈值,并且判断矩阵A和矩阵B是否分别属于横向扁平矩阵或纵向扁平矩阵。
在步骤S103中:当所述M×K矩阵和所述K×N矩阵中的一个矩阵为扁平矩阵时,获取所述扁平矩阵的元素参与所述矩阵乘法运算,并且根据所述M×K矩阵和所述K×N矩阵中的另一个矩阵的存储方式来直接读取所述另一个矩阵的元素参与所述矩阵乘法运算。
根据本公开的实施例,通过对上述矩阵A和矩阵B的判断,仅在这两个矩阵中的一个矩阵为扁平矩阵时,根据两个矩阵中的非扁平矩阵的元素的存储方式对非扁平矩阵的元素进行直接读取。因此,在参与乘法运算的两个矩阵中存在一个扁平矩阵的情况下,由于针对两个矩阵中的相对于扁平矩阵规模较大的非扁平矩阵的元素的读取是按照元素的存储方式(存储顺序)进行的,因此无需对非扁平矩阵进行重新排序,从而提高了矩阵乘法运算的效率。
由于非扁平矩阵按照存储方式直接读取,扁平矩阵则根据其存储方式和矩阵乘法运算时的使用顺序来直接或间接读取。下面将通过两个实施例来具体描述。
在第一个实施例中,所述获取所述扁平矩阵的元素参与所述矩阵乘法运算可以包括:当所述扁平矩阵的元素存储方式与在矩阵乘法运算时的元素使用顺序一致时,直接读取所述扁平矩阵中的元素参与所述矩阵乘法运算。
根据该实施例,当根据非扁平矩阵的元素存储顺序对非扁平矩阵的元素进行直接读取来参与乘法运算时,可以确定扁平矩阵的元素的使用顺序,如果扁平矩阵的元素存储顺序与元素使用顺序一致,则直接读取所述扁平矩阵中的元素参与所述矩阵乘法运算。
在第二个实施例中,所述获取所述扁平矩阵的元素参与所述矩阵乘法运算可以包括:当所述扁平矩阵的元素存储方式与在矩阵乘法运算时的元素使用顺序不一致时,按照如下方式获取所述扁平矩阵的元素:读取所述扁平矩阵中的参与所述矩阵乘法运算的元素;将读取的元素按照所述矩阵乘法运算时的元素使用顺序重新排列并存储在预设存储空间中;在进行所述矩阵乘法运算时,按照重新排列的存储顺序从所述预设存储空间中读取所述扁平矩阵的元素。
根据该实施例,同样地,当根据非扁平矩阵的元素存储顺序对非扁平矩阵的元素进行直接读取来参与乘法运算时,可以确定扁平矩阵的元素的使用顺序,如果扁平矩阵的元素存储顺序与元素使用顺序不一致,则需要将所述扁平矩阵中的元素按照使用顺序重新排序。在一个应用中,在矩阵乘法运算过程中,对于第一次使用的扁平矩阵的元素,可以将其读取出来,同时按照该使用顺序将元素重新排序后作为一维数组存入开辟的存储空间中。在随后的重复使用中,可以直接读取该一维数据的数据。在这种情况下,提高了扁平矩阵的读取效率,从而进一步提高了有扁平矩阵参与的矩阵乘法运算的运算效率。
以上对扁平矩阵中的元素的获取仅是示例性的,当然还可以采取其他方式。例如,在矩阵乘法运算过程中,无论扁平矩阵的存储方式(存储顺序)如何,都根据预先设定的矩阵乘法运算的元素使用顺序在内存中直接读取扁平矩阵的元素。尽管在扁平矩阵的元素存储顺序与元素使用顺序不一致时,这种读取方式会导致跳跃读取的情况,但由于扁平矩阵规模较小,因此对整体效率影响不大。
下面将具体描述两个矩阵的乘法运算。应当理解,M×K(M行K列)矩阵与K×N(K行N列)矩阵相乘得到M×N矩阵。
根据本公开的实施例,针对两个矩阵中的一个矩阵是扁平矩阵,并且根据非扁平矩阵的存储方式,可以采用两种对应的乘法运算模式来进行矩阵乘法运算,具体地,所述矩阵乘法运算可以包括第一乘法运算模式和第二乘法运算模式。
所述第一乘法运算模式包括:当所述K×N矩阵为扁平矩阵并且所述M×K矩阵的存储方式是行主序时,将所述M×K矩阵的每一行中的元素与所述K×N矩阵的所有列中的相应元素进行点积,当所述M×K矩阵为扁平矩阵并且所述K×N矩阵的存储方式是列主序时,将所述K×N矩阵的每一列中的元素与所述M×K矩阵的所有行中的相应元素进行点积。并且将所述M×K矩阵的第m行的元素与所述K×N的第n列对应元素点积之和存入所述M×K矩阵和所述K×N矩阵相乘获得的M×N矩阵的第m行第n列中,其中,1≤m≤M,1≤n≤N。
在该实施例中,可以每读取非扁平矩阵的一行(非扁平矩阵在乘号左侧时)或一列(非扁平矩阵在乘号右侧时),即与扁平矩阵的所有列(扁平矩阵在乘号右侧时)或所有行(扁平矩阵在乘号左侧时)做点积运算,点积结果存入目标矩阵的对应行或列。如此,在整个乘法运算中,每次读取较大规模的非扁平矩阵的一行或一列,并且每次对较小规模的扁平矩阵全部读取,从而减少了处理器的带宽要求。此外,对于非扁平矩阵的元素,每个元素只读取一次,每读一个元素就完成所有与之相关的运算。如此,避免了对较大规模的非扁平矩阵中的元素的反复读取,从而进一步提高了运算效率。
针对该第一种乘法运算模式,当所述K×N矩阵为扁平矩阵并且所述M×K矩阵的存储方式是行主序时,直接读取M×K矩阵的每一行元素,并且根据上述获取扁平矩阵元素的方法来直接或间接地获取K×N矩阵的每一列元素。并且当所述M×K矩阵为扁平矩阵并且所述K×N矩阵的存储方式是列主序时,直接读取K×N矩阵的每一列元素,并且根据上述获取扁平矩阵元素的方法来直接或间接地获取M×K矩阵的每一行元素。
所述第二乘法运算模式包括:当所述K×N矩阵为扁平矩阵并且所述M×K矩阵的存储方式是列主序时或者当所述M×K矩阵为扁平矩阵并且所述K×N矩阵的存储方式是行主序时,将所述K×N矩阵的第i行中的每个元素与所述M×K矩阵的第i列中的每个元素相乘,获得一个M×N中间矩阵,并且通过将所有M×N中间矩阵累加而获得对应于所述M×K矩阵与所述K×N矩阵乘积的M×N矩阵,其中,i=1,2,…,K。
在该实施例中,第i个中间矩阵的第m行第n列元素对应于M×K矩阵的第m行第i列与K×N矩阵的第i行第n列的元素的乘积。具体地,将所述K×N矩阵的每一行中的每个元素与所述M×K矩阵的对应列中的每个元素相乘,获得一个相应的M×N中间矩阵,每进行一次这种相乘,就将获得的中间矩阵与上一次获得的中间矩阵进行累加,直到两个矩阵中的元素(行或列)全部参与乘法运算,此时所累加的中间矩阵之和,即为两个矩阵的相乘的最终结果。
针对该第二种乘法运算模式,当所述K×N矩阵为扁平矩阵并且所述M×K矩阵的存储方式是列主序时,直接读取M×K矩阵的每一列元素,并且根据上述获取扁平矩阵元素的方法来直接或间接地获取K×N矩阵的每一行元素。并且当所述M×K矩阵为扁平矩阵并且所述K×N矩阵的存储方式是行主序时,直接读取K×N矩阵的每一行元素,并且根据上述获取扁平矩阵元素的方法来直接或间接地获取M×K矩阵的每一列元素。
进一步地,当根据所述另一个矩阵的存储方式来直接读取所述另一个矩阵的元素参与所述矩阵乘法运算时,通过数据预取方式来直接读取所述另一个矩阵的多行元素或多列元素。
为了提高运算效率,充分利用处理器的运算能力,可以每次对矩阵读取多行或多列元素来进行乘法运算。然而,为了避免在读取多行或多列元素时发生读取延迟,可以通过现有的数据预取方式对参与乘法运算的元素进行预取。如此,可在充分利用处理器的运算能力的前提下,提高运算效率。
示例性装置
在介绍了本发明示例性实施方式的方法之后,接下来,参考图2对本发明示例性实施方式的矩阵乘法运算装置进行描述。
图2示意性地示出了根据本发明实施方式的矩阵乘法运算装置100的框图。如图2中所示,该装置100包括获取模块101、判断模块102和运算模块103。该获取模块101可以配置用于获取待相乘的M×K矩阵和K×N矩阵,其中M、K和N为正整数。该判断模块102配置用可以于根据所述M×K矩阵和所述K×N矩阵的矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵。该运算模块103可以配置用于当所述M×K矩阵和所述K×N矩阵中的一个矩阵为扁平矩阵时,获取所述扁平矩阵的元素参与所述矩阵乘法运算,并且根据所述M×K矩阵和所述K×N矩阵中的另一个矩阵的存储方式来直接读取所述另一个矩阵的元素参与所述矩阵乘法运算。
在本发明的一个实施例中,所述判断模块102还配置用于采取如下方式根据矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵:根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵。
在本发明的另一个实施例中,所述判断模块102还配置用于采取如下方式根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵:当M与K的比值小于或等于第一预设阈值时,所述M×K矩阵为扁平矩阵;当N与K的比值小于或等于第一预设阈值时,所述K×N矩阵为扁平矩阵。
在本发明的又一个实施例中,所述判断模块102还配置用于采取如下方式根据矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵:根据所述M×K矩阵和所述K×N矩阵的存储方式、根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵。
在本发明的又一个实施例中,所述判断模块102还配置用于采取如下方式根据所述M×K矩阵和所述K×N矩阵的存储方式、根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵:当所述M×K矩阵的存储方式是列主序时,并且当N与K的比值小于或等于第一预设阈值时,所述K×N矩阵为扁平矩阵;当所述M×K矩阵的存储方式是行主序时,并且当N与K的比值小于或等于第二预设阈值时,所述K×N矩阵为扁平矩阵;当所述K×N矩阵的存储方式是行主序时,并且当M与K的比值小于或等于第一预设阈值时,所述M×K矩阵为扁平矩阵;当所述K×N矩阵的存储方式是列主序时,并且当M与K的比值小于或等于第二预设阈值时,所述M×K矩阵为扁平矩阵。
在本发明的又一个实施例中,所述第一预设阈值小于所述第二预设阈值。
在本发明的又一个实施例中,所述运算模块103还配置用于采取如下方式获取所述扁平矩阵的元素参与所述矩阵乘法运算:当所述扁平矩阵的元素存储方式与在矩阵乘法运算时的元素使用顺序一致时,直接读取所述扁平矩阵中的元素参与所述矩阵乘法运算。
在本发明的又一个实施例中,所述运算模块103还配置用于采取如下方式获取所述扁平矩阵的元素参与所述矩阵乘法运算:当所述扁平矩阵的元素存储方式与在矩阵乘法运算时的元素使用顺序不一致时,按照如下方式获取所述扁平矩阵的元素:读取所述扁平矩阵中的参与所述矩阵乘法运算的元素;将读取的元素按照所述矩阵乘法运算时的元素使用顺序重新排列并存储在预设存储空间中;在进行所述矩阵乘法运算时,按照重新排列的存储顺序从所述预设存储空间中读取所述扁平矩阵的元素。
在本发明的又一个实施例中,所述矩阵乘法运算包括第一乘法运算模式和第二乘法运算模式,所述运算模块还配置用于执行所述第一乘法运算模式和所述第二乘法运算模式。所述第一乘法运算模式包括:当所述K×N矩阵为扁平矩阵并且所述M×K矩阵的存储方式是行主序时,将所述M×K矩阵的每一行中的元素与所述K×N矩阵的所有列中的相应元素进行点积,当所述M×K矩阵为扁平矩阵并且所述K×N矩阵的存储方式是列主序时,将所述K×N矩阵的每一列中的元素与所述M×K矩阵的所有行中的相应元素进行点积。并且将所述M×K矩阵的第m行的元素与所述K×N的第n列对应元素点积之和存入所述M×K矩阵和所述K×N矩阵相乘获得的M×N矩阵的第m行第n列中,其中,1≤m≤M,1≤n≤N。所述第二乘法运算模式包括:当所述K×N矩阵为扁平矩阵并且所述M×K矩阵的存储方式是列主序时或者当所述M×K矩阵为扁平矩阵并且所述K×N矩阵的存储方式是行主序时,将所述K×N矩阵的第i行中的每个元素与所述M×K矩阵的第i列中的每个元素相乘,获得一个M×N中间矩阵,并且通过将所有M×N中间矩阵累加而获得对应于所述M×K矩阵与所述K×N矩阵乘积的M×N矩阵,其中,i=1,2,…,K。
在本发明的又一个实施例中,所述运算模块103还配置用于:当根据所述另一个矩阵的存储方式来直接读取所述另一个矩阵的元素参与所述矩阵乘法运算时,通过数据预取方式来直接读取所述另一个矩阵的多行元素或多列元素。
本发明实施方式的装置在上文中已经结合方法进行了详细的描述和解释,这里将不再赘述。
示例性计算系统
在介绍了本发明示例性实施方式的方法和装置之后,接下来,参考图3对本发明示例性实施方式的计算系统进行描述。
在本发明实施方式的一个方面中,提供了一种计算设备,其包括存储器和处理器。该存储器中存储有可执行指令,该处理器执行该可执行指令时,实现如上所述的方法。
图3示意性地示出了适于实现本发明实施方式的示例性计算系统1000的框图。如图3所示,计算系统1000可以包括根据本发明实施例的设备1100(上述计算设备,由虚线框示出)以及其外围设备,其中设备1100执行矩阵乘法运算等操作,以实现前述结合图1所述的本发明实施方式的方法。
如图3中所示,设备1100可以包括中央处理单元(CPU)1001,其可以是通用CPU、专用CPU或者其他信息处理以及程序运行的执行单元。进一步,设备1100还可以包括随机存取存储器(RAM)1002和只读存储器(ROM)1003,其中RAM 1002可以配置用于存储各类数据,ROM1003可以配置成存储对于设备1100中各功能模块的初始化、基本输入/输出的驱动程序及引导操作系统所需的数据等。
进一步,设备1100还可以包括其他的硬件或组件,例如示出的硬盘控制器1005、键盘控制器1006、串行接口控制器1007、并行接口控制器1008、显示控制器1009等。可以理解的是,尽管在设备1100中示出了多种硬件或组件,但这里仅仅是示例性的而非限制性的,本领域技术人员可以根据实际需要增加或移除相应的硬件。
本发明实施方式的设备1100的上述CPU 1001、存取存储器1002、只读存储器1003、硬盘控制器1005、键盘控制器1006、串行接口控制器1007、并行接口控制器1008和显示控制器1009可以通过总线系统1004相互连接。在一个实施例中,通过该总线系统1004可以与外围设备实现数据交互。在另一个实施例中,通过该总线系统1004,CPU 1001可以控制设备1100中的其他硬件组件及其外围设备。
设备1100的外围设备可以包括例如图示中的硬盘1010、键盘1011、串行外部设备1012、并行外部设备1013和显示器1014。硬盘1010可以与硬盘控制器1005耦合,键盘1011可以与键盘控制器1006耦合,串行外部设备1012可以与串行接口控制器1007耦合,并行外部设备1013可以与并行接口控制器1008耦合,以及显示器1014可以与显示控制器1009耦合。应当理解,图3所述的结构框图仅仅是为了示例的目的,而不是对本发明范围的限制。在某些情况下,可以根据具体情况增加或减少某些设备。
本领域技术技术人员知道,本发明的实施方式可以实现为一种系统、方法或计算机程序产品。因此,本发明实施方式可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”等。此外,在一些实施例中,本发明实施方式还可以实现为在一个或多个计算机可读存储介质中的计算机程序产品的形式,该计算机可读介质中可以存储有可执行指令(或程序代码),所述可执行指令被执行时,实现上述方法。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是,但不限于,电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举示例)例如可以包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。可以以一种或多种程序设计语言或其组合来编写用于执行本发明实施方式操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络(包括局域网(LAN)或广域网(WAN))连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
应当理解,前文中的流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置的产品。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
应当注意,尽管在上文详细描述中提及了设备的若干模块或装置,但是这种划分仅仅并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多装置的特征和功能可以在一个装置中具体化。反之,上文描述的一个装置的特征和功能可以进一步划分为由多个装置来具体化。
此外,尽管在附图中以特定顺序描述了本发明实施方式的方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
申请文件中提及的动词“包括”、“包含”及其词形变化的使用不排除除了申请文件中记载的那些元素或步骤之外的元素或步骤的存在。元素前的冠词“一”或“一个”不排除多个这种元素的存在。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。所附权利要求的范围符合最宽泛的解释,从而包含所有这样的修改及等同结构和功能。
Claims (22)
1.一种矩阵乘法运算方法,其中,所述方法应用于端侧人工智能设备,并且包括:
获取待相乘的M×K矩阵和K×N矩阵,其中M、K和N为正整数;
根据所述M×K矩阵和所述K×N矩阵的矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵;
当所述M×K矩阵和所述K×N矩阵中的一个矩阵为扁平矩阵时,获取所述扁平矩阵的元素参与所述矩阵乘法运算,并且根据所述M×K矩阵和所述K×N矩阵中的另一个矩阵的存储方式来直接读取所述另一个矩阵的元素参与所述矩阵乘法运算。
2.根据权利要求1所述的方法,其中,所述根据矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵包括:
根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵。
3.根据权利要求2所述的方法,其中,所述根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵包括:
当M与K的比值小于或等于第一预设阈值时,所述M×K矩阵为扁平矩阵;
当N与K的比值小于或等于所述第一预设阈值时,所述K×N矩阵为扁平矩阵。
4.根据权利要求1所述的方法,其中,所述根据矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵包括:
根据所述M×K矩阵和所述K×N矩阵的存储方式、根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵。
5.根据权利要求4所述的方法,其中,所述根据所述M×K矩阵和所述K×N矩阵的存储方式、根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵包括:
当所述M×K矩阵的存储方式是列主序时,并且当N与K的比值小于或等于第一预设阈值时,所述K×N矩阵为扁平矩阵;
当所述M×K矩阵的存储方式是行主序时,并且当N与K的比值小于或等于第二预设阈值时,所述K×N矩阵为扁平矩阵;
当所述K×N矩阵的存储方式是行主序时,并且当M与K的比值小于或等于所述第一预设阈值时,所述M×K矩阵为扁平矩阵;
当所述K×N矩阵的存储方式是列主序时,并且当M与K的比值小于或等于所述第二预设阈值时,所述M×K矩阵为扁平矩阵。
6.根据权利要求5所述的方法,其中,所述第一预设阈值小于所述第二预设阈值。
7.根据权利要求1所述的方法,其中,所述获取所述扁平矩阵的元素参与所述矩阵乘法运算包括:
当所述扁平矩阵的元素存储方式与在矩阵乘法运算时的元素使用顺序一致时,直接读取所述扁平矩阵中的元素参与所述矩阵乘法运算。
8.根据权利要求1所述的方法,其中,所述获取所述扁平矩阵的元素参与所述矩阵乘法运算包括:
当所述扁平矩阵的元素存储方式与在矩阵乘法运算时的元素使用顺序不一致时,按照如下方式获取所述扁平矩阵的元素:
读取所述扁平矩阵中的参与所述矩阵乘法运算的元素;
将读取的元素按照所述矩阵乘法运算时的元素使用顺序重新排列并存储在预设存储空间中;
在进行所述矩阵乘法运算时,按照重新排列的存储顺序从所述预设存储空间中读取所述扁平矩阵的元素。
9.根据权利要求1至8中任一项所述的方法,其中,
所述矩阵乘法运算包括第一乘法运算模式和第二乘法运算模式,
所述第一乘法运算模式包括:
当所述K×N矩阵为扁平矩阵并且所述M×K矩阵的存储方式是行主序时,将所述M×K矩阵的每一行中的元素与所述K×N矩阵的所有列中的相应元素进行点积,当所述M×K矩阵为扁平矩阵并且所述K×N矩阵的存储方式是列主序时,将所述K×N矩阵的每一列中的元素与所述M×K矩阵的所有行中的相应元素进行点积,
并且将所述M×K矩阵的第m行的元素与所述K×N的第n列对应元素点积之和存入所述M×K矩阵和所述K×N矩阵相乘获得的M×N矩阵的第m行第n列中,其中,1≤m≤M,1≤n≤N;
所述第二乘法运算模式包括:
当所述K×N矩阵为扁平矩阵并且所述M×K矩阵的存储方式是列主序时或者当所述M×K矩阵为扁平矩阵并且所述K×N矩阵的存储方式是行主序时,将所述K×N矩阵的第i行中的每个元素与所述M×K矩阵的第i列中的每个元素相乘,获得一个M×N中间矩阵,并且通过将所有M×N中间矩阵累加而获得对应于所述M×K矩阵与所述K×N矩阵乘积的M×N矩阵,其中,i=1,2,…,K。
10.根据权利要求1所述的方法,其中,当根据所述另一个矩阵的存储方式来直接读取所述另一个矩阵的元素参与所述矩阵乘法运算时,通过数据预取方式来直接读取所述另一个矩阵的多行元素或多列元素。
11.一种矩阵乘法运算装置,其中,所述装置包括:
获取模块,其配置用于获取待相乘的M×K矩阵和K×N矩阵,其中M、K和N为正整数;
判断模块,其配置用于根据所述M×K矩阵和所述K×N矩阵的矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵;
运算模块,其配置用于当所述M×K矩阵和所述K×N矩阵中的一个矩阵为扁平矩阵时,获取所述扁平矩阵的元素参与所述矩阵乘法运算,并且根据所述M×K矩阵和所述K×N矩阵中的另一个矩阵的存储方式来直接读取所述另一个矩阵的元素参与所述矩阵乘法运算。
12.根据权利要求11所述的装置,其中,所述判断模块还配置用于采取如下方式根据矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵:
根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵。
13.根据权利要求12所述的装置,其中,所述判断模块还配置用于采取如下方式根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵:
当M与K的比值小于或等于第一预设阈值时,所述M×K矩阵为扁平矩阵;
当N与K的比值小于或等于所述第一预设阈值时,所述K×N矩阵为扁平矩阵。
14.根据权利要求11所述的装置,其中,所述判断模块还配置用于采取如下方式根据矩阵信息,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵:
根据所述M×K矩阵和所述K×N矩阵的存储方式、根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵。
15.根据权利要求14所述的装置,其中,所述判断模块还配置用于采取如下方式根据所述M×K矩阵和所述K×N矩阵的存储方式、根据M与K的比值以及N与K的比值,确定所述M×K矩阵和所述K×N矩阵是否为扁平矩阵:
当所述M×K矩阵的存储方式是列主序时,并且当N与K的比值小于或等于第一预设阈值时,所述K×N矩阵为扁平矩阵;
当所述M×K矩阵的存储方式是行主序时,并且当N与K的比值小于或等于第二预设阈值时,所述K×N矩阵为扁平矩阵;
当所述K×N矩阵的存储方式是行主序时,并且当M与K的比值小于或等于所述第一预设阈值时,所述M×K矩阵为扁平矩阵;
当所述K×N矩阵的存储方式是列主序时,并且当M与K的比值小于或等于所述第二预设阈值时,所述M×K矩阵为扁平矩阵。
16.根据权利要求15所述的装置,其中,所述第一预设阈值小于所述第二预设阈值。
17.根据权利要求11所述的装置,其中,所述运算模块还配置用于采取如下方式获取所述扁平矩阵的元素参与所述矩阵乘法运算:
当所述扁平矩阵的元素存储方式与在矩阵乘法运算时的元素使用顺序一致时,直接读取所述扁平矩阵中的元素参与所述矩阵乘法运算。
18.根据权利要求11所述的装置,其中,所述运算模块还配置用于采取如下方式获取所述扁平矩阵的元素参与所述矩阵乘法运算:
当所述扁平矩阵的元素存储方式与在矩阵乘法运算时的元素使用顺序不一致时,按照如下方式获取所述扁平矩阵的元素:
读取所述扁平矩阵中的参与所述矩阵乘法运算的元素;
将读取的元素按照所述矩阵乘法运算时的元素使用顺序重新排列并存储在预设存储空间中;
在进行所述矩阵乘法运算时,按照重新排列的存储顺序从所述预设存储空间中读取所述扁平矩阵的元素。
19.根据权利要求11至18中任一项所述的装置,其中,所述矩阵乘法运算包括第一乘法运算模式和第二乘法运算模式,所述运算模块还配置用于执行所述第一乘法运算模式和所述第二乘法运算模式,
所述第一乘法运算模式包括:
当所述K×N矩阵为扁平矩阵并且所述M×K矩阵的存储方式是行主序时,将所述M×K矩阵的每一行中的元素与所述K×N矩阵的所有列中的相应元素进行点积,当所述M×K矩阵为扁平矩阵并且所述K×N矩阵的存储方式是列主序时,将所述K×N矩阵的每一列中的元素与所述M×K矩阵的所有行中的相应元素进行点积,
并且将所述M×K矩阵的第m行的元素与所述K×N的第n列对应元素点积之和存入所述M×K矩阵和所述K×N矩阵相乘获得的M×N矩阵的第m行第n列中,其中,1≤m≤M,1≤n≤N,
所述第二乘法运算模式包括:
当所述K×N矩阵为扁平矩阵并且所述M×K矩阵的存储方式是列主序时或者当所述M×K矩阵为扁平矩阵并且所述K×N矩阵的存储方式是行主序时,将所述K×N矩阵的第i行中的每个元素与所述M×K矩阵的第i列中的每个元素相乘,获得一个M×N中间矩阵,并且通过将所有M×N中间矩阵累加而获得对应于所述M×K矩阵与所述K×N矩阵乘积的M×N矩阵,其中,i=1,2,…,K。
20.根据权利要求11所述的装置,其中,所述运算模块还配置用于:
当根据所述另一个矩阵的存储方式来直接读取所述另一个矩阵的元素参与所述矩阵乘法运算时,通过数据预取方式来直接读取所述另一个矩阵的多行元素或多列元素。
21.一种计算机可读存储介质,其中,所述计算机可读存储介质存储有可执行指令,所述可执行指令被执行时,实现如权利要求1-10中任一项所述的方法。
22.一种计算设备,其中,所述计算设备包括存储器和处理器,所述存储器中存储有可执行指令,所述处理器执行所述可执行指令时,实现如权利要求1-10中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110343010.5A CN113111303B (zh) | 2021-03-30 | 2021-03-30 | 数据读取方法、装置、介质和计算设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110343010.5A CN113111303B (zh) | 2021-03-30 | 2021-03-30 | 数据读取方法、装置、介质和计算设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113111303A true CN113111303A (zh) | 2021-07-13 |
CN113111303B CN113111303B (zh) | 2022-04-05 |
Family
ID=76712832
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110343010.5A Active CN113111303B (zh) | 2021-03-30 | 2021-03-30 | 数据读取方法、装置、介质和计算设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113111303B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101162907A (zh) * | 2006-10-10 | 2008-04-16 | 华为技术有限公司 | 一种构造低密度奇偶校验码校验矩阵的方法及装置 |
CN102999476A (zh) * | 2011-09-09 | 2013-03-27 | 中国航天科工集团第三研究院第八三五七研究所 | 一种二维矩阵匹配方法及电路 |
CN106712818A (zh) * | 2017-01-22 | 2017-05-24 | 北京邮电大学 | 一种预编码矩阵获取方法及装置 |
CN108734788A (zh) * | 2018-05-17 | 2018-11-02 | 成都明镜视觉科技有限公司 | 一种3d对象在虚拟场景中的节点化组织方法 |
CN112069460A (zh) * | 2020-09-18 | 2020-12-11 | Oppo广东移动通信有限公司 | 数据处理方法、装置以及电子设备 |
CN112507284A (zh) * | 2020-12-18 | 2021-03-16 | 清华大学 | 稀疏矩阵乘法在可重构处理器阵列上的实现方法及装置 |
-
2021
- 2021-03-30 CN CN202110343010.5A patent/CN113111303B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101162907A (zh) * | 2006-10-10 | 2008-04-16 | 华为技术有限公司 | 一种构造低密度奇偶校验码校验矩阵的方法及装置 |
CN102999476A (zh) * | 2011-09-09 | 2013-03-27 | 中国航天科工集团第三研究院第八三五七研究所 | 一种二维矩阵匹配方法及电路 |
CN106712818A (zh) * | 2017-01-22 | 2017-05-24 | 北京邮电大学 | 一种预编码矩阵获取方法及装置 |
CN108734788A (zh) * | 2018-05-17 | 2018-11-02 | 成都明镜视觉科技有限公司 | 一种3d对象在虚拟场景中的节点化组织方法 |
CN112069460A (zh) * | 2020-09-18 | 2020-12-11 | Oppo广东移动通信有限公司 | 数据处理方法、装置以及电子设备 |
CN112507284A (zh) * | 2020-12-18 | 2021-03-16 | 清华大学 | 稀疏矩阵乘法在可重构处理器阵列上的实现方法及装置 |
Non-Patent Citations (1)
Title |
---|
原慧琳: "基于设计结构矩阵(DSM)的业务流程建模与重构的方法研究", 《中国博士学位论文全文数据库 基础科学辑》 * |
Also Published As
Publication number | Publication date |
---|---|
CN113111303B (zh) | 2022-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11574031B2 (en) | Method and electronic device for convolution calculation in neural network | |
CN107844828B (zh) | 神经网络中的卷积计算方法和电子设备 | |
Dong et al. | LU factorization of small matrices: Accelerating batched DGETRF on the GPU | |
US20220253672A1 (en) | Sparse attention neural networks | |
US11803360B2 (en) | Compilation method, apparatus, computing device and medium | |
CN110909527B (zh) | 文本处理模型的运行方法、装置、电子设备、及存储介质 | |
US9836434B2 (en) | Runtime of CUBLAS matrix multiplication on GPU | |
US20230196113A1 (en) | Neural network training under memory restraint | |
KR20210014561A (ko) | 다수 컨벌루션 윈도우 중의 이미지 데이터를 추출하는 방법, 장치, 기기 및 컴퓨터 판독 가능한 저장매체 | |
CN110737402B (zh) | 管理存储系统的方法、设备和计算机存储介质 | |
EP3846036B1 (en) | Matrix storage method, matrix access method, apparatus and electronic device | |
CN111813721B (zh) | 神经网络数据处理方法、装置、设备及存储介质 | |
US11468295B2 (en) | Generating output examples using bit blocks | |
CN113111303B (zh) | 数据读取方法、装置、介质和计算设备 | |
US9372636B1 (en) | Tiered-storage design | |
US20230169144A1 (en) | Operation method, processor, and related product | |
CN110766133B (zh) | 嵌入式设备中的数据处理方法、装置、设备和存储介质 | |
CN115081607A (zh) | 基于嵌入算子的反向计算方法、装置、设备以及存储介质 | |
CN112667241B (zh) | 机器学习指令的转换方法及装置、板卡、主板、电子设备 | |
US10922498B2 (en) | Method for simultaneously translating language of smart in-vehicle system and related products | |
CN113888390A (zh) | 特征图处理方法、装置、电子设备和计算机可读介质 | |
CN111194451B (zh) | 门控激活单元运算的并行执行 | |
CN110347506B (zh) | 基于lstm的数据处理方法、装置、存储介质与电子设备 | |
US10762035B1 (en) | Matrix tiling to accelerate computing in redundant matrices | |
CN117407643B (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 |