一种实现矩阵乘法运算的方法、装置及设备与流程

文档序号:17643215发布日期:2019-05-11 00:48阅读:278来源:国知局
一种实现矩阵乘法运算的方法、装置及设备与流程

本发明涉及计算机领域,特别涉及一种实现矩阵乘法运算的方法、装置及设备。



背景技术:

矩阵乘法是一种基本的数学运算,在实际工程中存在大量应用,如处理器设计、图像处理、导航系统、自动驾驶、ai计算等领域应用广泛。随着大数据时代的到来,应用场景中的矩阵规模越来越大,处理器完成矩阵乘法的运算量、资源需求、运算时间等指标将成指数级增长。

一般情况下,在处理器对两个矩阵(为方便描述,以下称为第一矩阵和第二矩阵)进行矩阵乘法运算时(我们将运算得到的矩阵称为目标矩阵),每计算目标矩阵中的一个元素,需要从存储设备中分别读取第一矩阵的一行元素以及第二矩阵的一列元素,可见,在计算过程中,处理器需要频繁从存储设备读取矩阵元素,导致计算效率较低。



技术实现要素:

本发明的目的是提供一种实现矩阵乘法运算的方法、装置及设备,用以解决传统的进行矩阵乘法运算的过程中,处理器需要频繁从存储设备读取矩阵元素,导致计算效率较低的问题。

为解决上述技术问题,本发明提供了一种实现矩阵乘法运算的方法,应用于处理器,所述方法包括:

接收对第一矩阵和第二矩阵进行矩阵乘法运算的计算任务;

将所述计算任务分解为多个子任务,其中,所述多个子任务与所述第一矩阵或所述第二矩阵的元素一一对应;

当所述多个子任务与所述第一矩阵中的元素一一对应时,从存储设备中的第一矩阵读取与所述子任务对应的目标元素,并从存储设备中的第二矩阵读取与所述目标元素对应的多个关联元素,其中,所述多个关联元素为所述第二矩阵中目标行的元素,所述目标行的行号为所述目标元素的列号;

当所述多个子任务与所述第二矩阵中的元素一一对应时,从存储设备中的第二矩阵读取与所述子任务对应的目标元素,并从存储设备中的第一矩阵读取与所述目标元素对应的多个关联元素,其中,所述多个关联元素为所述第一矩阵中目标列的元素,所述目标列的列号为所述目标元素的行号;

根据读取到的元素,计算得到所述子任务的执行结果;

根据各个所述子任务的执行结果,计算得到所述计算任务的执行结果。

可选的,所述根据读取到的元素,计算得到所述子任务的执行结果,包括:

将所述目标元素分别与所述多个关联元素中的各个关联元素进行相乘运算,得到多个相乘运算结果。

可选的,所述根据各个所述子任务的执行结果,计算得到所述计算任务的执行结果,具体包括:

当所述多个子任务与所述第一矩阵中的元素一一对应时,遍历所述第一矩阵的各个行,选取与当前遍历到的行中的元素对应的子任务;

根据选取到的子任务的执行结果,得到由多个相乘运算结果组成的矩阵,其中,各个所述相乘运算结果的行号列号等于与所述相乘运算结果相对应的关联元素的行号列号;

对所述矩阵中各个列的元素进行相加运算,得到当前遍历到的行所对应的计算结果;

根据所述第一矩阵的各个行所对应的计算结果,确定所述计算任务的执行结果。

相应的,本发明还提供了一种实现矩阵乘法运算的装置,应用于处理器,所述装置包括:

接收模块:用于接收对第一矩阵和第二矩阵进行矩阵乘法运算的计算任务;

分解模块:用于将所述计算任务分解为多个子任务,其中,所述多个子任务与所述第一矩阵或所述第二矩阵的元素一一对应;

第一读取模块:用于当所述多个子任务与所述第一矩阵中的元素一一对应时,从存储设备中的第一矩阵读取与所述子任务对应的目标元素,并从存储设备中的第二矩阵读取与所述目标元素对应的多个关联元素,其中,所述多个关联元素为所述第二矩阵中目标行的元素,所述目标行的行号为所述目标元素的列号;

第二读取模块:用于当所述多个子任务与所述第二矩阵中的元素一一对应时,从存储设备中的第二矩阵读取与所述子任务对应的目标元素,并从存储设备中的第一矩阵读取与所述目标元素对应的多个关联元素,其中,所述多个关联元素为所述第一矩阵中目标列的元素,所述目标列的列号为所述目标元素的行号;

子任务计算模块:用于根据读取到的元素,计算得到所述子任务的执行结果;

计算任务计算模块:用于根据各个所述子任务的执行结果,计算得到所述计算任务的执行结果。

可选的,所述子任务计算模块具体用于:

将所述目标元素分别与所述多个关联元素中的各个关联元素进行相乘运算,得到多个相乘运算结果。

可选的,所述计算任务计算模块具体包括:

选取单元:用于当所述多个子任务与所述第一矩阵中的元素一一对应时,遍历所述第一矩阵的各个行,选取与当前遍历到的行中的元素对应的子任务;

矩阵组成单元:用于根据选取到的子任务的执行结果,得到由多个相乘运算结果组成的矩阵,其中,各个所述相乘运算结果的行号列号等于与所述相乘运算结果相对应的关联元素的行号列号;

相加运算单元:用于对所述矩阵中各个列的元素进行相加运算,得到当前遍历到的行所对应的计算结果;

计算任务确定单元:用于根据所述第一矩阵的各个行所对应的计算结果,确定所述计算任务的执行结果。

最后,本发明还提供了一种实现矩阵乘法运算的设备,包括:

存储设备:用于存储第一矩阵和第二矩阵;

处理器:用于在接收到对所述第一矩阵和所述第二矩阵进行矩阵乘法运算的计算任务时,执行如上所述的一种实现矩阵乘法的方法的步骤。

本发明所提供的一种实现矩阵乘法运算的方法,应用于处理器,该方法能够在接收到对第一矩阵和第二矩阵进行矩阵乘法运算的计算任务后,将计算任务分解为多个子任务,在执行子任务时,读取在一个矩阵中与子任务对应的目标元素以及在另一个矩阵中与该目标元素对应的多个关联元素,进而对读取到的元素进行计算,得到子任务的计算结果,最后根据各个子任务的计算结果得到该计算任务的最终结果。可见,该方法在实现矩阵乘法运算的过程中,在不改变对一个矩阵中元素的读取次数的前提下,减少了对另一个矩阵中元素的读取次数,且该读取次数仅仅为一,因此显著减少了处理器与存储设备的交互次数,降低了计算过程中处理器与存储设备之间的交互过程带来的延迟影响,有效提高了计算效率。

此外,本发明还提供了一种实现矩阵乘法运算的装置及设备,其作用与上述方法的作用相对应,这里不再赘述。

附图说明

为了更清楚的说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为一种矩阵乘法运算的应用场景示意图;

图2-1、图2-2、图2-3、图2-4为现有技术方案中进行矩阵乘法运算的过程示意图;

图3为本发明所提供的一种实现矩阵乘法运算的方法实施例一的实现流程图;

图4为本发明所提供的一种实现矩阵乘法运算的方法实施例一种子任务与元素的对应关系示意图;

图5-1、图5-2为本发明所提供的一种实现矩阵乘法运算的方法实施例一的运算过程示意图;

图6-1、图6-2、图6-3、图6-4为本发明所提供的一种实现矩阵乘法运算的方法实施例二的运算过程示意图;

图7为本发明所提供的一种实现矩阵乘法运算的装置实施例的功能框图;

图8为本发明所提供的一种实现矩阵乘法运算的设备实施例的结构框图。

具体实施方式

本发明的核心是提供一种实现矩阵乘法运算的方法、装置及设备,减少了在矩阵乘法运算过程中处理器与存储设备之间的交互次数,提高了计算效率。

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在介绍本发明实施例之前,首先对矩阵乘法运算的概念、以及现有技术实现方案进行详细介绍:

矩阵乘法运算是一种基本的数学运算,其数学定义为:设a为m×p的矩阵,b为p×n的矩阵,那么称m×n的矩阵c为矩阵a与矩阵b的乘积,记作c=ab,其中矩阵c中的第i行第j列元素可以表示为:

在图1所示矩阵乘法运算系统中,待运算的矩阵a和矩阵b存储在存储单元中,处理单元读取存储单元中的矩阵元素完成乘法、加法等运算,最终输出运算结果矩阵c到存储单元中。其中,

现有技术方案的处理流程为:

步骤s01:读取矩阵a的第一行第一列元素a11。

步骤s02:读取矩阵b的第一行第一列元素b11。

步骤s03:完成a11与b11的乘法运算,得到临时结果c11。

步骤s04:读取矩阵a的第一行第二列元素a12。

步骤s05:读取矩阵b的第二行第一列元素b21。

步骤s06:完成a12与b21的乘法运算,得到结果与c11相加,得到更新后的c11。

依次类推,如图2-1所示,完成a11×b11、a12×b21、……、a1p×bp1的乘法运算,并对乘法运算的结果进行累加,得到c11,至此完成了矩阵c的第一行第一列元素c11的计算。

矩阵c的第一行其他各列元素计算过程与上述第一行第一列元素的计算过程类似,参见图2-2、图2-3、图2-4,分别为第一行中第二类元素、第三列元素、以及第p列元素的计算过程,至此完成了矩阵c的第一行中所有元素即c11、c12、c13…c1n的计算。

矩阵c其他行的计算过程与上述第一行的元素的计算过程类似,在此不再展开介绍。

综上所述,在现有技术方案的实现过程中,处理单元每完成一个c矩阵元素的计算需要读取a矩阵p个元素和b矩阵p个元素,因此,完成整个c矩阵的运算总共需要读取的次数(每从存储单元读取一个元素称为一次)为:

l=(p+p)×m×n=2pmn(4)

下面对本发明提供的一种实现矩阵乘法运算的方法实施例一进行介绍,实施例一基于处理器实现,进行矩阵乘法运算的矩阵为第一矩阵和第二矩阵,这两个矩阵预先存储在存储设备中。参见图3,实施例一包括以下步骤:

步骤s101:接收对第一矩阵和第二矩阵进行矩阵乘法运算的计算任务。

步骤s102:将所述计算任务分解为多个子任务。

具体的,至少存在两种分解方式:

第一种方式为,按照第一矩阵中各个元素对上述计算任务进行分解,得到目标数量的子任务,这里的目标数量为第一矩阵中元素的总数量,分解得到的各个子任务与第一矩阵中的元素一一对应,如图4所示,每个子任务描述了需要从第一矩阵读取哪个元素(为方便描述,下面将这个元素称为目标元素),还描述了需要从第二矩阵读取哪些元素,需要说明的是,从第二矩阵中读取的这些元素即为第二矩阵中所有需要与目标元素进行相乘运算的元素。当然,子任务不仅描述需要读取哪些元素,还描述了需要对这些元素进行怎样的运算,具体的运算在下文进行描述,这里不再展开介绍。

第二种方式为,按照第二矩阵中各个元素对上述计算任务进行分解,得到目标数量的子任务,这里的目标数量为第二矩阵中元素的总数量,分解得到的各个子任务与第二矩阵中的元素一一对应,每个子任务描述了需要从第二矩阵读取哪个元素(为方便描述,下面将这个元素称为目标元素),还描述了需要从第一矩阵读取哪些元素,需要说明的是,从第一矩阵中读取的这些元素即为第一矩阵中所有需要与目标元素进行相乘运算的元素。子任务描述的运算过程,也请参照下文。

步骤s103:读取一个或多个未执行的子任务。

步骤s104:从存储设备中读取与该子任务对应的目标元素,并读取与该目标元素对应的多个关联元素。

根据前述两种任务分解的方式,此处读取的方式也可以分为两种:

当分解得到的子任务与第一矩阵中的元素一一对应时,从存储设备中的第一矩阵读取与该子任务对应的目标元素,并从存储设备中的第二矩阵读取与该目标元素对应的多个关联元素,其中,所述多个关联元素为所述第二矩阵中目标行的全部元素,所述目标行的行号为所述目标元素的列号。举例来说,如图5-1所示,假设第一矩阵为a矩阵,第二矩阵为b矩阵,当前读取到的子任务对应的目标元素为a13,那么,由于目标元素的列号为3,则目标元素对应的多个关联元素为第二矩阵中行号为3的行中的全部元素。

相应的,当分解得到的多个子任务与第二矩阵中的元素一一对应时,从存储设备中的第二矩阵读取与该子任务对应的目标元素,并从存储设备中的第一矩阵读取与目标元素对应的多个关联元素,其中,所述多个关联元素为所述第一矩阵中目标列的全部元素,所述目标列的列号为所述目标元素的行号。举例来说,如图5-2所示,假设第一矩阵为a矩阵,第二矩阵为b矩阵,当前读取到的子任务对应的目标元素为b21,那么,由于目标元素的行号为2,则目标元素对应的多个关联元素为第一矩阵中列号为2的列中的全部元素。

步骤s105:根据读取到的元素,计算得到所述子任务的执行结果。

步骤s106:判断是否还存在未执行的子任务,若存在,进入步骤s103,否则进入步骤s107。

步骤s107:根据各个所述子任务的执行结果,计算得到所述计算任务的执行结果。

本实施例所提供一种实现矩阵乘法运算的方法,应用于处理器,该方法能够在接收到对第一矩阵和第二矩阵进行矩阵乘法运算的计算任务后,将计算任务分解为多个子任务,在执行子任务时,读取在一个矩阵中与子任务对应的目标元素以及在另一个矩阵中与该目标元素对应的多个关联元素,进而对读取到的元素进行计算,得到子任务的计算结果,最后根据各个子任务的计算结果得到该计算任务的最终结果。可见,该方法在实现矩阵乘法运算的过程中,在不改变对一个矩阵中元素的读取次数的前提下,减少了对另一个矩阵中元素的读取次数,且该读取次数仅仅为一,因此显著减少了处理器与存储设备的交互次数,降低了计算过程中处理器与存储设备之间的交互过程带来的延迟影响,有效提高了计算效率。

下面开始详细介绍本发明提供的一种实现矩阵乘法运算的方法实施例二,实施例二基于上述实施例一实现,并对计算过程进行了详尽的描述。

具体的,在本实施例中,参与矩阵乘法运算的第一矩阵为矩阵a,如上述公式(2)所示,参与矩阵乘法运算的第二矩阵为矩阵b,如上述公式(3)所示,将矩阵a与矩阵b的乘积记为矩阵c。此外,本实施例按照在实施例一中所述的第一种任务分解方式对整个矩阵乘法运算任务进行分解,矩阵a包括m×p个元素,因此本实施例将整个运算任务分解为m×p个子任务。

作为一种可选的实施方式,本实施例将上述m×p个子任务按照其对应的元素的行号从小到大、且列号从小到大的顺序分别进行处理,下面按照这种顺序介绍各个子任务的执行过程:

第一,与矩阵a中第一行第一列的元素相对应的子任务的计算过程包括:

步骤s201:读取矩阵a的第一行第一列元素a11。

步骤s202:读取矩阵b的第一行第一列元素b11。

步骤s203:完成a11与b11的乘法运算,得到临时结果c11。

步骤s204:读取矩阵b的第一行第二列元素b12。

步骤s205:完成a11与b12的乘法运算,得到临时结果c12。

依次类推,完成a11×b11、a11×b12、……、a11×b1n的乘法运算,得到临时结果c11、c12、……、c1n,以上运算过程如图6-1所示。

第二,与矩阵a中第一行第二列的元素相对应的子任务的计算过程包括:

步骤s301:读取矩阵a的第一行第二列元素a12。

步骤s302:读取矩阵b的第二行第一列元素b21。

步骤s303:完成a12与b21的乘法运算,将得到的结果与上述临时结果c11相加,得到更新后的c11。

步骤s304:读取矩阵b的第二行第二列元素b22。

步骤s305:完成a12与b22的乘法运算,将得到的结果与上述临时结果c12相加,得到更新后的c12。

依次类推,完成a12×b21、a12×b22、……、a12×b2n的乘法运算,得到更新后的临时结果c11、c12、……、c1n,以上运算过程如图6-2所示。

类似于上述两个过程,读取a矩阵第一行第三列的元素a13,并读取b矩阵中第三行的元素分别进行相乘,并更新各个临时结果,如图6-3所示。

依次类推,直到如图6-4所示,读取a矩阵第一行第p列的元素a1p,并读取b矩阵中第p行的元素分别进行相乘,并更新各个临时结果,最终得到的各个临时结果c11、c12、……、c1n即为矩阵c的第一行元素。

矩阵c的其他行元素的计算与上述第一行元素的计算过程类似,不再赘述。

综上所述,按照本实施例提供的一种实现矩阵乘法运算的方法,每完成一行c矩阵元素的计算需要读取a矩阵p个元素、b矩阵n×p个元素,因此,完成整个c矩阵的运算总共需要读取的次数(每从存储单元读取一个元素称为一次)为:

l=(p+n×p)×m=mnp+mp(5)

显然,相比现有技术方案减少了2mnp-(mnp+mp)=mp(n-1)次数据读取,大大减少了在进行矩阵乘法运算过程中,处理器与存储设备之间的交互次数,显著提升了运算效率。

下面对本发明实施例提供的一种实现矩阵乘法运算的装置实施例进行介绍,下文描述的一种实现矩阵乘法运算的装置与上文描述的一种实现矩阵乘法运算的方法可相互对应参照。

如图7所示,该装置实施例包括:

接收模块701:用于接收对第一矩阵和第二矩阵进行矩阵乘法运算的计算任务。

分解模块702:用于将所述计算任务分解为多个子任务,其中,所述多个子任务与所述第一矩阵或所述第二矩阵的元素一一对应。

第一读取模块703:用于当所述多个子任务与所述第一矩阵中的元素一一对应时,从存储设备中的第一矩阵读取与所述子任务对应的目标元素,并从存储设备中的第二矩阵读取与所述目标元素对应的多个关联元素,其中,所述多个关联元素为所述第二矩阵中目标行的元素,所述目标行的行号为所述目标元素的列号。

第二读取模块704:用于当所述多个子任务与所述第二矩阵中的元素一一对应时,从存储设备中的第二矩阵读取与所述子任务对应的目标元素,并从存储设备中的第一矩阵读取与所述目标元素对应的多个关联元素,其中,所述多个关联元素为所述第一矩阵中目标列的元素,所述目标列的列号为所述目标元素的行号。

子任务计算模块705:用于根据读取到的元素,计算得到所述子任务的执行结果。

计算任务计算模块706:用于根据各个所述子任务的执行结果,计算得到所述计算任务的执行结果。

作为一种可选的实施方式,所述子任务计算模块705具体用于:

将所述目标元素分别与所述多个关联元素中的各个关联元素进行相乘运算,得到多个相乘运算结果。

作为一种可选的实施方式,所述计算任务计算模块706具体包括:

选取单元7061:用于当所述多个子任务与所述第一矩阵中的元素一一对应时,遍历所述第一矩阵的各个行,选取与当前遍历到的行中的元素对应的子任务;

矩阵组成单元7062:用于根据选取到的子任务的执行结果,得到由多个相乘运算结果组成的矩阵,其中,各个所述相乘运算结果的行号列号等于与所述相乘运算结果相对应的关联元素的行号列号;

相加运算单元7063:用于对所述矩阵中各个列的元素进行相加运算,得到当前遍历到的行所对应的计算结果;

计算任务确定单元7064:用于根据所述第一矩阵的各个行所对应的计算结果,确定所述计算任务的执行结果。

本实施例的一种实现矩阵乘法运算的装置用于实现前述的一种实现矩阵乘法运算的方法,因此该装置中的具体实施方式可见前文中的一种实现矩阵乘法运算的方法的实施例部分,例如,接收模块701、分解模块702、第一读取模块703、第二读取模块704、子任务计算模块705、计算任务计算模块706,分别用于实现上述一种实现矩阵乘法运算的方法中步骤s101,s102,s103,s104,s105,s106。所以,其具体实施方式可以参照相应的各个部分实施例的描述,在此不再展开介绍。

另外,由于本实施例的一种实现矩阵乘法运算的装置用于实现前述的一种实现矩阵乘法运算的方法,因此其作用与上述方法的作用相对应,这里不再赘述。

此外,本发明还提供了一种实现矩阵乘法运算的设备实施例,下文描述的一种实现矩阵乘法运算的设备与上文描述的一种实现矩阵乘法运算的方法可相互对应参照。

如图8所示,该设备包括:

存储设备801:用于存储第一矩阵和第二矩阵;

处理器802:用于在接收到对所述第一矩阵和所述第二矩阵进行矩阵乘法运算的计算任务时,执行如上所述的一种实现矩阵乘法的方法的步骤。

具体的,上述存储设备801可以是随机存储设备(ram)、内存、只读存储设备(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom等用于存储计算机程序的存储介质,而上述处理器802是具备运算能力和控制能力的逻辑器件,具体为包括运算逻辑部件、寄存器部件和控制部件的硬件设备,例如cpu。

本实施例的一种实现矩阵乘法运算的设备用于实现前述的一种实现矩阵乘法运算的方法,因此该设备的具体实施方式可见前文中的一种实现矩阵乘法运算的方法的实施例部分,且其作用与上述方法实施例相对应,这里不再赘述。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本发明所提供的一种实现矩阵乘法运算的方法、装置及设备进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1