CN109710213A - 一种稀疏矩阵加速计算方法、装置、设备及其系统 - Google Patents

一种稀疏矩阵加速计算方法、装置、设备及其系统 Download PDF

Info

Publication number
CN109710213A
CN109710213A CN201811593610.1A CN201811593610A CN109710213A CN 109710213 A CN109710213 A CN 109710213A CN 201811593610 A CN201811593610 A CN 201811593610A CN 109710213 A CN109710213 A CN 109710213A
Authority
CN
China
Prior art keywords
matrix
zero
sparse
product
data
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.)
Pending
Application number
CN201811593610.1A
Other languages
English (en)
Inventor
张贞雷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangdong Inspur Smart Computing Technology Co Ltd
Original Assignee
Guangdong Inspur Big Data Research Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Guangdong Inspur Big Data Research Co Ltd filed Critical Guangdong Inspur Big Data Research Co Ltd
Priority to CN201811593610.1A priority Critical patent/CN109710213A/zh
Publication of CN109710213A publication Critical patent/CN109710213A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Complex Calculations (AREA)

Abstract

本发明公开了一种稀疏矩阵加速计算方法,包括:在处理器运算过程中,接收主内存发送的待相乘的两个稀疏矩阵;对每个稀疏矩阵进行非零检测,将每个稀疏矩阵内的非零数据及其所处的行号和列号进行对应保存;控制两个稀疏矩阵内对应行/列号处的非零数据按照矩阵相乘规则进行乘积求和,得到乘积求和结果;将乘积求和结果及其在两个稀疏矩阵的乘积矩阵内所处的行号和列号进行保存,作为两个稀疏矩阵的乘积矩阵数据返回主内存,供处理器依据所述乘积矩阵数据进行运算。本发明在稀疏矩阵相乘时,仅对非零数据进行计算和保存,从而减少对存储空间的占用,并且提高计算速度。本发明还公开了一种基于上述方法的装置、设备及其系统。

Description

一种稀疏矩阵加速计算方法、装置、设备及其系统
技术领域
本发明涉及稀疏矩阵技术领域,特别是涉及一种稀疏矩阵加速计算方法、装置、设备及其系统。
背景技术
随着摩尔定律几近失效,通用处理器(CPU)的计算性能也逼近极限,但是随着现在云计算,大数据,移动互联网,人工智能,5G的蓬勃兴起,对于处理器的计算要求越来越高,因此这两者存在的矛盾将不可避免。
稀疏矩阵几乎产生于所有的大型科学工程计算领域,包括现在的大数据,图像处理等热门领域,稀疏矩阵是处理器运算过程中经常出现的数据处理对象,通常会需要由处理器对稀疏矩阵进行相乘处理,举例来说,设稀疏矩阵A为m×p的矩阵,稀疏矩阵B为p×n的矩阵,那么称m×n的稀疏矩阵C为稀疏矩阵A与B的乘积,记作C=AB,其中矩阵C中的第i行第j列元素可以表示为:
由于稀疏矩阵中非零元素的个数远远小于矩阵元素的总数,并且非零元素的分布没有规律,目前按照常规的矩阵计算方式对稀疏矩阵进行计算,极大的浪费存储空间,同时也极大降低了计算速度。
因此,如何提供一种计算速度快、存储占用少的稀疏矩阵加速计算方法、装置、设备及其系统是本领域技术人员目前需要解决的问题。
发明内容
本发明的目的是提供一种稀疏矩阵加速计算方法、装置、设备及其系统,在稀疏矩阵相乘时,仅对非零数据进行计算和保存,从而减少对存储空间的占用,并且提高计算速度。
为解决上述技术问题,本发明提供了一种稀疏矩阵加速计算方法,包括:
在处理器运算过程中,接收主内存发送的待相乘的两个稀疏矩阵;
对每个所述稀疏矩阵进行非零检测,将每个所述稀疏矩阵内的非零数据及其所处的行号和列号进行对应保存;
控制两个所述稀疏矩阵内对应行/列号处的非零数据按照矩阵相乘规则进行乘积求和,得到乘积求和结果;
将所述乘积求和结果及其在两个所述稀疏矩阵的乘积矩阵内所处的行号和列号进行保存,作为两个所述稀疏矩阵的乘积矩阵数据返回所述主内存,供所述处理器依据所述乘积矩阵数据进行运算。
优选地,所述接收主内存发送的待相乘的两个稀疏矩阵的过程具体为:
按行接收第一稀疏矩阵A的数据,按列接收第二稀疏矩阵B的数据;其中,乘积矩阵C=AB。
优选地,每接收一列所述第二稀疏矩阵B的数据后,将接收到的这列数据进行转置,得到转置后的一行数据;将该行数据内包含的非零数据及其行号和列号进行对应保存。
优选地,所述控制两个所述稀疏矩阵内对应行/列号处的非零数据按照矩阵相乘规则进行乘积求和,得到乘积求和结果的过程,包括:
步骤s31:按行号从小到大的顺序,从A中读取行号为n的一行非零数据;
步骤s32:按行号从小到大的顺序,从B中读取行号为m的一行非零数据;进入步骤s33;
步骤s33:依次比较A中读取到的非零数据与B中读取到的非零数据的列号是否相等,若相等,将两个非零数据相乘,并将乘积与累积值求和,得到新的累积值;所述累积值的初始值为0;A中读取到的非零数据与B中读取到的非零数据全部比较完毕后,保存最终得到的累积值以及所述最终得到的累积值在所述乘积矩阵内所处的行号n和列号m,并令累积值复位为0;
步骤s34:判断当前B中是否包含未读取的一行非零数据,若存在,则令m=m+1,返回步骤s32;若不存在,进入步骤s35;
步骤s35:判断当前A中是否包含未读取的一行非零数据,若存在,则令n=n+1,返回步骤s31;若不存在,所述乘积矩阵计算完毕。
优选地,所述接收主内存发送的待相乘的两个稀疏矩阵后,还包括:
统计并保存每个所述稀疏矩阵内的数据总数;
依据所述数据总数确定每个非零数据的行号和列号。
优选地,第一稀疏矩阵内的非零数据及其所处的行号和列号保存于32位的第一存储区间内;所述第一存储区间中的高10位地址,用于保存所述第一稀疏矩阵内的非零数据的行号;所述第一存储区间中的中间10位地址,用于保存所述第一稀疏矩阵内的非零数据的列号;所述第一存储区间中的低12位地址,用于保存所述第一稀疏矩阵内的非零数据;
第二稀疏矩阵内的非零数据及其所处的行号和列号保存于32位的第二存储区间内;所述第二存储区间中的高10位地址,用于保存所述第二稀疏矩阵内的非零数据的行号;所述第二存储区间中的中间10位地址,用于保存所述第二稀疏矩阵内的非零数据的列号;所述第二存储区间中的低12位地址,用于保存所述第二稀疏矩阵内的非零数据;
所述乘积矩阵内的乘积求和结果及其所处的行号和列号保存于32位的第三存储区间内;所述第三存储区间中的高10位地址,用于保存所述乘积矩阵内的乘积求和结果的行号;所述第三存储区间中的中间10位地址,用于保存所述乘积矩阵内的乘积求和结果的列号;所述第三存储区间中的低12位地址,用于保存所述乘积矩阵内的乘积求和结果。
为解决上述技术问题,本发明还提供了一种稀疏矩阵加速计算装置,包括:
接收模块,用于在处理器运算过程中,接收主内存发送的待相乘的两个稀疏矩阵;对每个所述稀疏矩阵进行非零检测,将每个所述稀疏矩阵内的非零数据及其所处的行号和列号发送至基础存储模块;
所述基础存储模块,用于存储所述稀疏矩阵内的非零数据及其所处的行号和列号;
逻辑求和模块,用于控制两个所述稀疏矩阵内对应行/列号处的非零数据按照矩阵相乘规则进行乘积求和,得到乘积求和结果;
结果存储模块,用于将所述乘积求和结果及其在两个所述稀疏矩阵的乘积矩阵内所处的行号和列号进行保存,作为两个所述稀疏矩阵的乘积矩阵数据返回所述主内存,供所述处理器依据所述乘积矩阵数据进行运算。
为解决上述技术问题,本发明还提供了一种稀疏矩阵加速计算设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如以上任一项所述的稀疏矩阵加速计算方法的步骤。
为解决上述技术问题,本发明还提供了一种稀疏矩阵加速计算系统,包括:主内存、数据传输组件以及以上所述的稀疏矩阵加速计算设备;
所述主内存,用于发送数据传输配置指令至所述数据传输组件对其进行配置;
所述数据传输组件,用于在配置完毕后,从所述主内存内读取待相乘的两个稀疏矩阵发送至所述稀疏矩阵加速计算设备;接收所述稀疏矩阵加速计算设备计算完毕后的乘积矩阵数据返回所述主内存。
优选地,所述稀疏矩阵加速计算设备为现场可编程门阵列FPGA;所述数据传输组件包括串接的驱动器、以及FPGA内部的外围设备互联总线PCIE和直接内存存取器DMA,所述驱动器与所述主内存端连接。
本发明提供了一种稀疏矩阵加速计算方法,在处理器运算过程中,接收主内存发送的待相乘的两个稀疏矩阵后,对两个稀疏矩阵进行非零检测,仅保存稀疏矩阵内的非零数据及其所处的行号和列号,之后将两个稀疏矩阵内的非零数据按照矩阵相乘规则进行乘积求和,得到两个稀疏矩阵相乘后,乘积矩阵内的非零数据及其所处的行号和列号,作为乘积矩阵的有效数据返回至主内存中,供处理器依据所述乘积矩阵数据进行运算。可见本发明中在对处理器运算过程中,对稀疏矩阵进行相乘计算时,仅需要保存非零数据,而不需要保存零数据相关信息,从而减少了对存储空间的占用,并且也减少了计算量,从而极大地提高了稀疏矩阵相乘时的计算速度。本发明提供了一种基于上述方法的装置、设备及其系统,也具有上述优点,在此不再赘述。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对现有技术和实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的一种稀疏矩阵加速计算方法的过程的流程图;
图2为本发明提供的另一种稀疏矩阵加速计算方法的过程的流程图;
图3为本发明提供的一种稀疏矩阵加速计算装置的结构示意图;
图4为本发明提供的另一种稀疏矩阵加速计算装置的结构示意图;
图5为本发明提供的一种稀疏矩阵加速计算系统的结构示意图。
具体实施方式
本发明的核心是提供一种稀疏矩阵加速计算方法、装置、设备及其系统,在稀疏矩阵相乘时,仅对非零数据进行计算和保存,从而减少对存储空间的占用,并且提高计算速度。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供了一种稀疏矩阵加速计算方法,参见图1所示,图1为本发明提供的一种稀疏矩阵加速计算方法的过程的流程图;该方法包括:
步骤s1:在处理器运算过程中,接收主内存发送的待相乘的两个稀疏矩阵;
本发明应用于处理器在对稀疏矩阵进行乘积计算的应用场景,目的是为了简化加速稀疏矩阵乘积计算的过程。因此,需要接收主内存发送的两个待相乘的稀疏矩阵进行处理。
步骤s2:对每个稀疏矩阵进行非零检测,将每个稀疏矩阵内的非零数据及其所处的行号和列号进行对应保存;
由于稀疏矩阵中存在许多的零数据,这部分数据会占用存储空间、拖累整个计算过程,并且对计算结果没有影响。因此,本发明目的就是为了仅对稀疏矩阵内的非零数据进行处理,从而节省稀疏矩阵数据占用的存储空间,以及稀疏矩阵相乘时的数据计算量,从而提高稀疏矩阵相乘时的计算速度。
步骤s3:控制两个稀疏矩阵内对应行/列号处的非零数据按照矩阵相乘规则进行乘积求和,得到乘积求和结果;
可以理解的是,矩阵相乘的规则为:若矩阵A与矩阵B相乘,则矩阵A的第一行与矩阵B的第一列中的每一位数据对应相乘后,将各项相乘结果累积求和,作为乘积矩阵C=AB的行号为1、列号为1的数据;之后将矩阵A的第一行与矩阵B的第二列中的每一位数据对应相乘后,将各项相乘结果累积求和,作为乘积矩阵C=AB的行号为1、列号为2的数据;重复上述过程,直至全部计算完毕。由此可见,在相乘过程中,若两个相乘的数据有一个为0,则相乘结果必然为零。因此,只有当两个数据均为非零数据时,相乘结果才为非零,也可以理解为数据有效。因此,本发明在进行矩阵相乘时,仅需要按照上述矩阵相乘规则,将之前保存的对应行/列号处的非零数据进行相乘求和,即可得到最终乘积矩阵内的非零数据及其行号和列号。这种方式节省了零数据在相乘过程中的相关计算量,从而提高了稀疏矩阵相乘时的计算速度。其中,上述乘积求和指的是假设两个稀疏矩阵分别为A和B,乘积矩阵为C=AB,则在A中处于同一行的非零数据与B中处于同一列中的非零数据对应相乘后,需要将其乘积结果进行求和,求和结果才能作为乘积矩阵中对应位置处的数据。
步骤s4:将乘积求和结果及其在两个稀疏矩阵的乘积矩阵内所处的行号和列号进行保存,作为两个稀疏矩阵的乘积矩阵数据返回主内存,供所述处理器依据所述乘积矩阵数据进行运算。
本发明提供了一种稀疏矩阵加速计算方法,接收主内存发送的待相乘的两个稀疏矩阵后,对两个稀疏矩阵进行非零检测,仅保存稀疏矩阵内的非零数据及其所处的行号和列号,之后将两个稀疏矩阵内的非零数据按照矩阵相乘规则进行乘积求和,得到两个稀疏矩阵相乘后,乘积矩阵内的非零数据及其所处的行号和列号,作为乘积矩阵的有效数据返回至主内存中。可见本发明中在对稀疏矩阵进行相乘计算时,仅需要保存非零数据,而不需要保存零数据相关信息,从而减少了对存储空间的占用,并且也减少了计算量,从而极大地提高了稀疏矩阵相乘时的计算速度。
作为优选地,步骤s1的过程具体为:
按行接收第一稀疏矩阵A的数据,按列接收第二稀疏矩阵B的数据;其中,乘积矩阵C=AB。
可以理解的是,在A和B进行相乘时,相乘方式是A的一行数据与B的一列数据进行相乘,因此,这种情况下,若B也按行接收(或者说主内存按行下发数据)的话,会使得必须等待B中的全部数据下发完毕后,才能够开始进行相乘计算,稀疏矩阵乘积的计算速度慢。而本实施例中,按行接收A的数据,按列接收B的数据,这样使得每接收一行A中的数据以及一列B中的数据,即可开始进行后续的数据相乘处理,从而加快稀疏矩阵乘积的计算速度。并且,本发明对B矩阵采取按列输入,再依次读取的策略,降低了B中数据保存的存储空间的读/写地址控制逻辑复杂度。
当然,以上仅为优选实施例,也可以按行接收第二稀疏矩阵B的数据。在后续数据乘积计算过程中,也可以等待全部数据均接收完毕后再进行计算。另外,在接收数据的过程中,第一稀疏矩阵A的数据和第二稀疏矩阵B的数据可以采用两个进程并行接收,或者也可以先接收第一稀疏矩阵A的数据,全部接收完毕后,再接收第二稀疏矩阵B的数据;或者还可以先接收第一稀疏矩阵A的一行数据,之后接收第二稀疏矩阵B的一列数据,之后再接收第一稀疏矩阵A的下一行数据,重复该操作。具体如何进行矩阵数据的接收本发明不做具体限定。
在优选实施例中,每接收一列第二稀疏矩阵B的数据后,将接收到的这列数据进行转置,得到转置后的一行数据;将该行数据内包含的非零数据及其行号和列号进行对应保存。
可以理解的是,对于处理器来说,数据读取时通常是按行来读取的,按列读取的过程相比按行来说较为复杂。这是由于处理器的程序特性导致的。因此,为了简化计算过程,将需要按列读取的B中的数据进行转置后存储,转置会将矩阵内数据的行列号进行对换,这样原本一列数据即转换为一行,从而方便后续的读取计算。
在前述实施例的基础上,进一步可知,参见图2所示,图2为本发明提供的另一种稀疏矩阵加速计算方法的过程的流程图;步骤s3的过程,包括:
步骤s31:按行号从小到大的顺序,从A中读取行号为n的一行非零数据;得到A中非零数据的行号A_row_num、列号A_column_num、数值A_data;
由于矩阵相乘时,是将A中的一行数据与B中的一列数据对应相乘,因此,每次需要从A中读取处于同一行的非零数据。由于本实施例是按照行号从小到大的顺序,因此,第一次会读取行号为1的一行非零数据,由于稀疏矩阵内存在有很多的零数据,而本发明仅保存了非零数据,因此,从A中读取的一行非零数据个数通常会少于A的列数。
步骤s32:按行号从小到大的顺序,从B中读取行号为m的一行非零数据;得到B中非零数据的行号B_row_num、列号B_column_num、数值B_data。
进入步骤s33;
由于矩阵相乘时,是将A中的一行数据与B中的一列数据对应相乘,因此,理论上每次需要从B中读取同属一列的非零数据。由于本实施例是在前述实施例的基础上进行的,而前述实施例在对B中的非零数据进行保存时,进行了转置操作,使得B中的非零数据的行列号进行了对换,因此,每次需要从B中读取同属一行的非零数据。由于本实施例是按照行号从小到大的顺序,因此,第一次会读取行号为1的一行非零数据。由于稀疏矩阵内存在有很多的零数据,而本发明仅保存了非零数据。因此,从B中读取的一行非零数据个数通常会少于B的列数(这里的列数是转置后的列数,原本的行数)。
步骤s33:依次比较A中读取到的非零数据与B中读取到的非零数据的列号是否相等,若相等,即A_row_num=B_row_num,则将两个非零数据相乘,并将乘积与累积值求和,得到新的累积值;累积值的初始值为0;A中读取到的非零数据与B中读取到的非零数据全部比较完毕后,保存最终得到的累积值以及最终得到的累积值在乘积矩阵内所处的行号n和列号m,并令累积值复位为0;A_row_num为A中非零数据的行号,B_row_num为B的非零数据在B矩阵的行号;
可以理解的是,依据前述提到的矩阵相乘规则,在两个矩阵相乘时,对于相乘的两个非零数据,A中非零数据的列号需要和B中非零数据的行号相同两者才能相乘。由于B中的非零数据在保存时进行了转置,因此调整为A中非零数据的列号A_column_num需和B中非零数据的列号B_column_num相同两者才能相乘,即A_column_num=B_column_num,将其对应的数值A_data和数值B_data相乘,得到乘积。由于依据矩阵相乘规则,需要将A中的一行数据与B中的一列数据对应相乘后求和,因此在A中这一行非零数据与B中这一行非零数据进行相乘时,需要将乘积进行累积,得到累积值。累积值的初始值为0,每计算得到一个非零数据的乘积后,即将其与之前的累积值进行求和,得到新的累积值Value,即Value=Value+A_data x B_data;重复该操作,直至A中这一行非零数据与B中这一行非零数据全部对应相乘完毕后,得到的最终的累积值即为乘积矩阵中的非零数据,且该数据在乘积矩阵内的行号等于A中这一行数据的行号n,即Value_row_num=A_row_num,Value_row_num为最终的累积值在乘积矩阵中的行号;该数据在乘积矩阵内的列号等于B中这一行数据的行号m,即列号为Value_column_num=B_row_num,Value_column_num为最终的累积值在乘积矩阵中的列号。由于数据累积值表明的是A中一行非零数据与B中一行非零数据的乘积和,因此,当A中读取到的非零数据与B中读取到的非零数据全部比较完毕后,在将最终累积值保存之后,需要令累积值清0,方便下一次计算使用。
步骤s34:判断当前B中是否包含未读取的一行非零数据,若存在,则令m=m+1,返回步骤s32;若不存在,进入步骤s35;
若当前一行非零数据处理完毕后,则需要继续读取B中的下一行非零数据,因此,需要首先判断一下B中是否还包含有下一行非零数据,若包含则继续读取,并重复上述操作,若不包含,则表明对于A中这一行非零数据计算完毕,需要继续读取A中的下一行非零数据。
步骤s35:判断当前A中是否包含未读取的一行非零数据,若存在,则令n=n+1,返回步骤s31;若不存在,乘积矩阵计算完毕。
在读取A中的下一行非零数据之前需要首先判断一下A中是否还包含有。下一行非零数据,若包含则继续读取,并重复上述操作,若不包含,则表明A和B中的非零数据已全部相乘完毕,乘积矩阵内的非零数据也保存完毕,故可将结果返回至主内存中,并继续等待主内存下发新一组的稀疏矩阵A、B进行新一轮的稀疏矩阵乘积计算。
可以理解的是,通过上述计算过方式,能够快速遍历全部非零数据,并完成对应数据的相乘和求和,避免了数据重复遍历的情况,提高了矩阵相乘的效率以及可靠性。其中上述判断A或者B中是否包含未读取的一行非零数据的方式,可以是判断前述读取的一行非零数据的行号是否等于对应稀疏矩阵的总行号,或者也可以判断当前是否存在对应稀疏矩阵中读取的非零数据,具体如何判断本发明不做限定。
另外,在其他实施例中,也可以不判断A或者B中是否包含未读取的一行非零数据,而是在读取A中一行非零数据后,按照行号从小到大的顺序依次遍历B中的全部非零数据,遍历过程中一旦检测到读出的B中的非零数据中行号B_row_num变化(即为新的一行B数据),则将之前的累积值及其对应的行号和列号进行保存,之后令累积值清零,并继续计算;当B中非零数据遍历完毕后,即当前B中不存在未读取的非零数据,或者已读取的B中的非零数据的个数等于B中的非零数据的总个数,则判断A中是否存在未读取的非零数据,若存在,触发读取A中下一行非零数据。当然,这种情况下,在进行乘积计算之前,需要预先累加并保存每个稀疏矩阵内非零数据的总个数(A矩阵所有非零数据的总数A_DATA_NO_0_SUM和B矩阵所有非零数据的总数B_DATA_NO_0_SUM)。以上仅为几种优选的实现方式。具体采用哪种判断方式,本发明不做限定。
另外,当判断已经完成全部非零数据的相乘计算后,可以通过产生中断信号IRQ,来触发将乘积矩阵的数据返回主内存。当然,本发明对此不作限定。
在另一优选实施例中,步骤s1后,还包括:
统计并保存每个稀疏矩阵内的数据总数;依据数据总数确定每个非零数据的行号和列号。
若先接收A的数据再接收B的数据的话则,前m*p个数据为第一稀疏矩阵A中的数据(假设A为m x p的矩阵),同时。其中A_data_num为当前A数据的输入个数,行号A_row_num=(A_data_num/p);列号A_column_num=(A_data_num%p)。后p*n个数据为B矩阵的数据(假设B为p x n的矩阵),同B_data_num为当前B数据的输入个数行号,B_row_num=(B_data_num/p);列号B_column_num=(B_data_num%p。当然,行列号如何确定本发明不做具体限定。
作为优选地,第一稀疏矩阵内的非零数据及其所处的行号和列号保存于32位的第一存储区间内;第一存储区间中的高10位地址,用于保存第一稀疏矩阵内的非零数据的行号;第一存储区间中的中间10位地址,用于保存第一稀疏矩阵内的非零数据的列号;第一存储区间中的低12位地址,用于保存第一稀疏矩阵内的非零数据;
第二稀疏矩阵内的非零数据及其所处的行号和列号保存于32位的第二存储区间内;第二存储区间中的高10位地址,用于保存第二稀疏矩阵内的非零数据的行号;第二存储区间中的中间10位地址,用于保存第二稀疏矩阵内的非零数据的列号;第二存储区间中的低12位地址,用于保存第二稀疏矩阵内的非零数据;
乘积矩阵内的乘积求和结果及其所处的行号和列号保存于32位的第三存储区间内;第三存储区间中的高10位地址,用于保存乘积矩阵内的乘积求和结果的行号;第三存储区间中的中间10位地址,用于保存乘积矩阵内的乘积求和结果的列号;第三存储区间中的低12位地址,用于保存乘积矩阵内的乘积求和结果。
即对于矩阵A的非零数据用宽度为32的Ram_0进行保存,同时保存的是当前非零数据的行号和列号:
Ram_0的高10位地址,ddr[31:22]存储行号A_row_num;
Ram_0的中间10位地址,addr[21:12]存储列号A_column_num;
Ram_0的低12位地址,addr[11:0]存储A的非零数据。
对于矩阵B的非零数据用宽度为32的Ram_1进行保存,同时保存的是当前非零数据的行号和列号:
Ram_1的高10位地址,addr[31:22]存储行号B_row_num
Ram_1的中间10位地址,addr[21:12]存储列号B_column_num
Ram_1的低12位地址,addr[11:0]存储A的非零数据。
将乘积矩阵的非零数据Value的值,包括Value_row_num,Value_column_num,一起写进RESULT_RAM,RESULT_RAM,用于存储计算结果的RAM:
RESULT_RAM的高10位[31:22]保存行号Value_row_num。
RESULT_RAM的中间10位[21:12]保存列号Value_column_num。
RESULT_RAM的低12位[11:0]保存非零数据Value。
这种情况在,在每次从A中读取非零数据时,根据Ram_0的高10bit判断行号,同理在从B中读取非零数据时,根据Ram_1的高10bit判断行号。
当然,在其他实施例中,可以采用其他宽度的存储单元进行存储,本发明对此不做限定。另外,行号、列号和非零数据在存储单元内如何存储,本发明也不做限定,只要将非零数据与其行号和列号对应保存即可。
本发明还提供了一种稀疏矩阵加速计算装置,参见图3所示,图3为本发明提供的一种稀疏矩阵加速计算装置的结构示意图;该装置包括:
接收模块1,用于在处理器运算过程中,接收主内存发送的待相乘的两个稀疏矩阵;对每个稀疏矩阵进行非零检测,将每个稀疏矩阵内的非零数据及其所处的行号和列号发送至基础存储模块2;
基础存储模块2,用于存储稀疏矩阵内的非零数据及其所处的行号和列号;
逻辑求和模块3,用于控制两个稀疏矩阵内对应行/列号处的非零数据按照矩阵相乘规则进行乘积求和,得到乘积求和结果;
结果存储模块4,用于将乘积求和结果及其在两个稀疏矩阵的乘积矩阵内所处的行号和列号进行保存,作为两个稀疏矩阵的乘积矩阵数据返回主内存,供处理器依据乘积矩阵数据进行运算。
作为优选地,逻辑求和模块3包括:
逻辑单元31,用于按行号从小到大的顺序,从A中读取行号为n的一行非零数据;按行号从小到大的顺序,从B中读取行号为m的一行非零数据;依次比较A中读取到的非零数据与B中读取到的非零数据的列号是否相等,若相等,将两个非零数据发送至求和单元32;A中读取到的非零数据与B中读取到的非零数据全部比较完毕后,判断当前B中是否包含未读取的一行非零数据,若B中存在,则令m=m+1,并重复上述操作;若B中不存在,判断当前A中是否包含未读取的一行非零数据,若A中存在,则令n=n+1,并重复上述操作;若A中不存在,乘积矩阵计算完毕;
求和单元32,用于将接收的两个非零数据相乘,并将乘积与累积值求和,得到新的累积值;累积值的初始值为0;A中读取到的非零数据与B中读取到的非零数据全部比较完毕后,将最终得到的累积值以及最终得到的累积值在乘积矩阵内所处的行号n和列号m发送至结果存储模块4,并令累积值复位为0。
另外,在优选实施例中,基础存储模块2可包括第一存储单元21,用于存储第一稀疏矩阵A内的非零数据及其所处的行号和列号;以及第二存储单元22,用于存储第二稀疏矩阵B内的非零数据及其所处的行号和列号。
在优选实施例中,还包括:第一总数求和模块51,用于对第一稀疏矩阵A内的非零数据的总个数进行统计,并发送至逻辑单元31;第二总数求和模块52,用于对第二稀疏矩阵B内的非零数据的总个数进行统计,并发送至逻辑单元31。
在优选实施例中,还包括:中断模块6,用于在依据结果存储模块4、第一总数求和模块51以及第二总数求和模块52中的数据,判断已经完成全部非零数据的相乘计算后,产生中断信号IRQ,来触发结果存储模块4将乘积矩阵的数据返回主内存。
参见图4所示,图4为本发明提供的另一种稀疏矩阵加速计算装置的结构示意图。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本发明还提供了一种稀疏矩阵加速计算设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行计算机程序时实现如以上任一项的稀疏矩阵加速计算方法的步骤。
本发明还提供了一种稀疏矩阵加速计算系统,参见图5所示,图5为本发明提供的一种稀疏矩阵加速计算系统的结构示意图。该系统包括:主内存、数据传输组件以及以上的稀疏矩阵加速计算设备;
主内存11,用于发送数据传输配置指令至数据传输组件对其进行配置;
数据传输组件,用于在配置完毕后,从主内存11内读取待相乘的两个稀疏矩阵发送至稀疏矩阵加速计算设备;接收稀疏矩阵加速计算设备计算完毕后的乘积矩阵数据返回主内存11。
作为优选地,稀疏矩阵加速计算设备为FPGA(Field-Programmable Gate Array,现场可编程门阵列);数据传输组件包括串接的驱动器12、以及FPGA内部的PCIE13(peripheral component interconnect express,外围设备互联总线,为一种高速串行计算机扩展总线标准)和DMA14(直接内存存取器),驱动器12与主内存11端连接;DMA14和FPGA内部的处理器和存储器连接
FPGA是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA不仅有软件的可编程性和灵活性,同时又有ASIC的高吞吐率和低延时的特性,同时又有丰富的I/O接口,因此成为异构加速稀疏矩阵乘积的首选。本发明使用FPGA作为异构协处理器,实现A、B矩阵非零数据的快速乘积及存储,FPGA作为协处理器,加速主处理器的工作效率。
在上述系统中,DMA14需要首先进行配置,之后才能进行工作。驱动通过PCIE13发送配置指令至DMA14进行配置,读配置完成后,发起DMA14读操作,DMA14读操作将要进行稀疏矩阵乘积计算的数据从主内存11中搬移至FPGA内存中;FPGA内的稀疏矩阵乘积计算模块进行计算,当计算完成后,产生中断信号IRQ,并送至DMA14、然后传递给PCIE13,驱动获取中断后,重新配置DMA14,发起DMA14写操作,将完成的乘积矩阵的数据写回至主内存11的指定地址,由上层软件获得由此完成FPGA作为协处理器的稀疏矩阵乘积异构加速,之后主内存11驱动重新配置DMA14,发起DMA14读操作,下发新一组的稀疏矩阵A、B,进行新一轮的稀疏矩阵乘积计算。
具体如图5所示,框图中的通路1:DMA14配置通道,驱动通过此通道配置DMA14,首先配置DMA14读操作所需的寄存器配置,读操作所需的寄存器配置具体包括要进行稀疏矩阵计算的数据在主内存11中的地址、将数据写到FPGA内部的初始地址、数据搬移的bytes数目,然后使DMA14进行读操作;配置DMA14写操作所需的寄存器配置,写操作所需的寄存器配置具体包括数据在FPGA内部的地址、将数据写入主内存11中的出事呢地址、数据搬移的bytes数目等。当然,本发明不限定上述配置信息的具体内容。
框图中的通路2:DMA14读通道,主内存11中的数据经过此通道,被写入FPGA内部;
框图中的通路3:DMA14写通道,FPGA计算完成的结果通过此通道,被写回主内存11中。
本发明采用PCIE+DMA的数据传输架构,极大加快了数据在主内存11和FPGA内存之间的传输。
以上的几种具体实施方式仅是本发明的优选实施方式,以上几种具体实施例可以任意组合,组合后得到的实施例也在本发明的保护范围之内。应当指出,对于本技术领域的普通技术人员来说,相关专业技术人员在不脱离本发明精神和构思前提下推演出的其他改进和变化,均应包含在本发明的保护范围之内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

Claims (10)

1.一种稀疏矩阵加速计算方法,其特征在于,包括:
在处理器运算过程中,接收主内存发送的待相乘的两个稀疏矩阵;
对每个所述稀疏矩阵进行非零检测,将每个所述稀疏矩阵内的非零数据及其所处的行号和列号进行对应保存;
控制两个所述稀疏矩阵内对应行/列号处的非零数据按照矩阵相乘规则进行乘积求和,得到乘积求和结果;
将所述乘积求和结果及其在两个所述稀疏矩阵的乘积矩阵内所处的行号和列号进行保存,作为两个所述稀疏矩阵的乘积矩阵数据返回所述主内存,供所述处理器依据所述乘积矩阵数据进行运算。
2.根据权利要求1所述的方法,其特征在于,所述接收主内存发送的待相乘的两个稀疏矩阵的过程具体为:
按行接收第一稀疏矩阵A的数据,按列接收第二稀疏矩阵B的数据;其中,乘积矩阵C=AB。
3.根据权利要求2所述的方法,其特征在于,每接收一列所述第二稀疏矩阵B的数据后,将接收到的这列数据进行转置,得到转置后的一行数据;将该行数据内包含的非零数据及其行号和列号进行对应保存。
4.根据权利要求3所述的方法,其特征在于,所述控制两个所述稀疏矩阵内对应行/列号处的非零数据按照矩阵相乘规则进行乘积求和,得到乘积求和结果的过程,包括:
步骤s31:按行号从小到大的顺序,从A中读取行号为n的一行非零数据;
步骤s32:按行号从小到大的顺序,从B中读取行号为m的一行非零数据;进入步骤s33;
步骤s33:依次比较A中读取到的非零数据与B中读取到的非零数据的列号是否相等,若相等,将两个非零数据相乘,并将乘积与累积值求和,得到新的累积值;所述累积值的初始值为0;A中读取到的非零数据与B中读取到的非零数据全部比较完毕后,保存最终得到的累积值以及所述最终得到的累积值在所述乘积矩阵内所处的行号n和列号m,并令累积值复位为0;
步骤s34:判断当前B中是否包含未读取的一行非零数据,若存在,则令m=m+1,返回步骤s32;若不存在,进入步骤s35;
步骤s35:判断当前A中是否包含未读取的一行非零数据,若存在,则令n=n+1,返回步骤s31;若不存在,所述乘积矩阵计算完毕。
5.根据权利要求1所述的方法,其特征在于,所述接收主内存发送的待相乘的两个稀疏矩阵后,还包括:
统计并保存每个所述稀疏矩阵内的数据总数;
依据所述数据总数确定每个非零数据的行号和列号。
6.根据权利要求1所述的方法,其特征在于,第一稀疏矩阵内的非零数据及其所处的行号和列号保存于32位的第一存储区间内;所述第一存储区间中的高10位地址,用于保存所述第一稀疏矩阵内的非零数据的行号;所述第一存储区间中的中间10位地址,用于保存所述第一稀疏矩阵内的非零数据的列号;所述第一存储区间中的低12位地址,用于保存所述第一稀疏矩阵内的非零数据;
第二稀疏矩阵内的非零数据及其所处的行号和列号保存于32位的第二存储区间内;所述第二存储区间中的高10位地址,用于保存所述第二稀疏矩阵内的非零数据的行号;所述第二存储区间中的中间10位地址,用于保存所述第二稀疏矩阵内的非零数据的列号;所述第二存储区间中的低12位地址,用于保存所述第二稀疏矩阵内的非零数据;
所述乘积矩阵内的乘积求和结果及其所处的行号和列号保存于32位的第三存储区间内;所述第三存储区间中的高10位地址,用于保存所述乘积矩阵内的乘积求和结果的行号;所述第三存储区间中的中间10位地址,用于保存所述乘积矩阵内的乘积求和结果的列号;所述第三存储区间中的低12位地址,用于保存所述乘积矩阵内的乘积求和结果。
7.一种稀疏矩阵加速计算装置,其特征在于,包括:
接收模块,用于在处理器运算过程中,接收主内存发送的待相乘的两个稀疏矩阵;对每个所述稀疏矩阵进行非零检测,将每个所述稀疏矩阵内的非零数据及其所处的行号和列号发送至基础存储模块;
所述基础存储模块,用于存储所述稀疏矩阵内的非零数据及其所处的行号和列号;
逻辑求和模块,用于控制两个所述稀疏矩阵内对应行/列号处的非零数据按照矩阵相乘规则进行乘积求和,得到乘积求和结果;
结果存储模块,用于将所述乘积求和结果及其在两个所述稀疏矩阵的乘积矩阵内所处的行号和列号进行保存,作为两个所述稀疏矩阵的乘积矩阵数据返回所述主内存,供所述处理器依据所述乘积矩阵数据进行运算。
8.一种稀疏矩阵加速计算设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至6任一项所述的稀疏矩阵加速计算方法的步骤。
9.一种稀疏矩阵加速计算系统,其特征在于,包括:主内存、数据传输组件以及权利要求8所述的稀疏矩阵加速计算设备;
所述主内存,用于发送数据传输配置指令至所述数据传输组件对其进行配置;
所述数据传输组件,用于在配置完毕后,从所述主内存内读取待相乘的两个稀疏矩阵发送至所述稀疏矩阵加速计算设备;接收所述稀疏矩阵加速计算设备计算完毕后的乘积矩阵数据返回所述主内存。
10.根据权利要求9所述的系统,其特征在于,所述稀疏矩阵加速计算设备为现场可编程门阵列FPGA;所述数据传输组件包括串接的驱动器、以及FPGA内部的外围设备互联总线PCIE和直接内存存取器DMA,所述驱动器与所述主内存端连接。
CN201811593610.1A 2018-12-25 2018-12-25 一种稀疏矩阵加速计算方法、装置、设备及其系统 Pending CN109710213A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811593610.1A CN109710213A (zh) 2018-12-25 2018-12-25 一种稀疏矩阵加速计算方法、装置、设备及其系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811593610.1A CN109710213A (zh) 2018-12-25 2018-12-25 一种稀疏矩阵加速计算方法、装置、设备及其系统

Publications (1)

Publication Number Publication Date
CN109710213A true CN109710213A (zh) 2019-05-03

Family

ID=66258069

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811593610.1A Pending CN109710213A (zh) 2018-12-25 2018-12-25 一种稀疏矩阵加速计算方法、装置、设备及其系统

Country Status (1)

Country Link
CN (1) CN109710213A (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110704799A (zh) * 2019-09-06 2020-01-17 苏州浪潮智能科技有限公司 一种数据处理设备及系统
CN111061997A (zh) * 2019-12-19 2020-04-24 中国人民解放军国防科技大学 面向稀疏矩阵向量乘的数据传输方法及dma传输装置
CN111431596A (zh) * 2020-03-24 2020-07-17 中星联华科技(北京)有限公司 一种信号升速方法及电路
CN112306660A (zh) * 2020-11-05 2021-02-02 山东云海国创云计算装备产业创新中心有限公司 一种基于risc-v协处理器的数据处理方法及系统
CN112486872A (zh) * 2020-11-27 2021-03-12 维沃移动通信有限公司 数据处理方法及装置
CN112507284A (zh) * 2020-12-18 2021-03-16 清华大学 稀疏矩阵乘法在可重构处理器阵列上的实现方法及装置
CN112732222A (zh) * 2021-01-08 2021-04-30 苏州浪潮智能科技有限公司 一种稀疏矩阵加速计算方法、装置、设备及介质
WO2022022117A1 (zh) * 2020-07-31 2022-02-03 华为技术有限公司 稀疏矩阵计算方法及加速装置
WO2024012180A1 (zh) * 2022-07-15 2024-01-18 华为技术有限公司 一种矩阵计算方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101086699A (zh) * 2007-07-12 2007-12-12 浙江大学 基于单fpga的矩阵乘法器装置
CN102141976A (zh) * 2011-01-10 2011-08-03 中国科学院软件研究所 稀疏矩阵的对角线数据存储方法及基于该方法的SpMV实现方法
CN103440121A (zh) * 2013-08-20 2013-12-11 中国人民解放军国防科学技术大学 一种面向向量处理器的三角矩阵乘法向量化方法
CN104572011A (zh) * 2014-12-22 2015-04-29 上海交通大学 基于fpga的通用矩阵定点乘法器及其计算方法
CN104636273A (zh) * 2015-02-28 2015-05-20 中国科学技术大学 一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101086699A (zh) * 2007-07-12 2007-12-12 浙江大学 基于单fpga的矩阵乘法器装置
CN102141976A (zh) * 2011-01-10 2011-08-03 中国科学院软件研究所 稀疏矩阵的对角线数据存储方法及基于该方法的SpMV实现方法
CN103440121A (zh) * 2013-08-20 2013-12-11 中国人民解放军国防科学技术大学 一种面向向量处理器的三角矩阵乘法向量化方法
CN104572011A (zh) * 2014-12-22 2015-04-29 上海交通大学 基于fpga的通用矩阵定点乘法器及其计算方法
CN104636273A (zh) * 2015-02-28 2015-05-20 中国科学技术大学 一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
张玉州: ""‘数据结构’课程中稀疏矩阵运算器的实现", 《安庆师范大学学报(自然科学版)》 *
张玉州: ""‘数据结构’课程中稀疏矩阵运算器的实现", 《安庆师范大学学报(自然科学版)》, vol. 23, no. 1, 31 March 2017 (2017-03-31), pages 98 - 101 *

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110704799A (zh) * 2019-09-06 2020-01-17 苏州浪潮智能科技有限公司 一种数据处理设备及系统
CN111061997A (zh) * 2019-12-19 2020-04-24 中国人民解放军国防科技大学 面向稀疏矩阵向量乘的数据传输方法及dma传输装置
CN111431596A (zh) * 2020-03-24 2020-07-17 中星联华科技(北京)有限公司 一种信号升速方法及电路
WO2022022117A1 (zh) * 2020-07-31 2022-02-03 华为技术有限公司 稀疏矩阵计算方法及加速装置
CN112306660A (zh) * 2020-11-05 2021-02-02 山东云海国创云计算装备产业创新中心有限公司 一种基于risc-v协处理器的数据处理方法及系统
CN112486872A (zh) * 2020-11-27 2021-03-12 维沃移动通信有限公司 数据处理方法及装置
CN112507284A (zh) * 2020-12-18 2021-03-16 清华大学 稀疏矩阵乘法在可重构处理器阵列上的实现方法及装置
CN112507284B (zh) * 2020-12-18 2022-08-12 清华大学 稀疏矩阵乘法在可重构处理器阵列上的实现方法及装置
CN112732222A (zh) * 2021-01-08 2021-04-30 苏州浪潮智能科技有限公司 一种稀疏矩阵加速计算方法、装置、设备及介质
WO2022148181A1 (zh) * 2021-01-08 2022-07-14 苏州浪潮智能科技有限公司 一种稀疏矩阵加速计算方法、装置、设备及介质
CN112732222B (zh) * 2021-01-08 2023-01-10 苏州浪潮智能科技有限公司 一种稀疏矩阵加速计算方法、装置、设备及介质
WO2024012180A1 (zh) * 2022-07-15 2024-01-18 华为技术有限公司 一种矩阵计算方法及装置

Similar Documents

Publication Publication Date Title
CN109710213A (zh) 一种稀疏矩阵加速计算方法、装置、设备及其系统
CN104915322B (zh) 一种卷积神经网络硬件加速方法
EP2017743B1 (en) High speed and efficient matrix multiplication hardware module
CN1809810B (zh) 指令控制数据处理设备
US4097920A (en) Hardware control for repeating program loops in electronic computers
CN101763338B (zh) 一种点数可变的混合基fft/ifft实现装置及其方法
CN100465876C (zh) 基于单fpga的矩阵乘法器装置
US20200026746A1 (en) Matrix and Vector Multiplication Operation Method and Apparatus
CN102298570A (zh) 一种点数可变的混合基 fft/ifft实现装置及其方法
CN101089840A (zh) 基于多fpga的矩阵乘法并行计算系统
CN111581595B (zh) 一种矩阵乘法计算方法及计算电路
CN115423084A (zh) 脉动阵列、脉动阵列系统及其运算方法、装置、存储介质
CN212112470U (zh) 一种矩阵乘法计算电路
CN108108189B (zh) 一种计算方法及相关产品
WO2001086426A2 (en) System and method for performing a synchronization operation for multiple devices in a computer system
CN111158757B (zh) 并行存取装置和方法以及芯片
CN102523374B (zh) 一种实时并行的电子稳像系统设计方法
CN112765540A (zh) 数据处理方法、装置及相关产品
CN109343826B (zh) 一种面向深度学习的可重构处理器运算单元
CN111260043A (zh) 数据选择器、数据处理方法、芯片及电子设备
JP3277399B2 (ja) 画像処理用汎用プロセッサ
CN117057403B (zh) 一种运算模块、基于脉冲神经网络的加速器及方法
CN111798363A (zh) 图形处理器
SU1732345A1 (ru) Распределенна система управлени
Melnyk Parallel conflict-free ordered access memory device

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20190503

RJ01 Rejection of invention patent application after publication