基于稀疏矩阵乘法的FPGA存储方法、计算方法、模块和FPGA板转让专利

申请号 : CN202010535432.8

文献号 : CN111796796A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄步添张杰陈建海刘振广周伟华

申请人 : 杭州云象网络技术有限公司

摘要 :

本发明公开了一种基于稀疏矩阵乘法的FPGA存储方法,实现方法包括:向量存储改造:将稀疏矩阵向量乘法中的向量按照对应标号和并行度进行取模;矩阵存储改造:对稀疏矩阵向量乘法中的稀疏矩阵的每一行进行新建数组等操作;存储数组元素:将矩阵存储改造步骤中新建的数组元素相同位置的取出来放在一起存储;获得并行计算存储结构:获得一个适合并行计算的存储结构。本发明还实现了一种基于稀疏矩阵乘法的PFGA计算方法,最终计算得到稀疏矩阵向量乘法的结果。本发明还包括用于实现本发明方法的组成模块。基于本发明的方法和模块能够利用FPGA解决稀疏矩阵向量乘法过程中读取不连续向量元素问题。

权利要求 :

1.一种基于稀疏矩阵乘法的FPGA存储方法,其特征在于,具体实现步骤包括:向量存储改造:将稀疏矩阵向量乘法中的向量按照对应标号和并行度进行取模,用于区分存储位置;

矩阵存储改造:对稀疏矩阵向量乘法中的稀疏矩阵的每一行进行操作,所述操作包括新建数组,所述数组数量和并行度数量相同;

存储数组元素:将矩阵存储改造步骤中新建的数组元素相同位置的取出来放在一起存储,获得并行计算存储结构。

2.根据权利要求1所述基于稀疏矩阵乘法的FPGA存储方法,其特征在于,所述矩阵存储改造步骤中,以CSR格式存储的矩阵按照非零元素对应列坐标进行划分,将元素本身和对应列坐标存到所有数组里去,以数组元素最多的数组为基准,将其他数组补零至相同长度。

3.根据权利要求1所述基于稀疏矩阵乘法的FPGA存储方法,其特征在于,所述矩阵存储改造的操作还包括:将一行中的所有非零元素按照列坐标和并行度进行取模运算,将非零元素和这些非零元素对应的列坐标存放到和取模结果相同的数组中去;

完成一行中所有元素的存放后,以元素最多的数组为基准,给其他数组补零元素以及列坐标,列坐标和被补数组的标号相同;

将每个数组第一个元素和对应列坐标取出连续地存放在内存中,再将每个数组第二个元素和对应列坐标取出连续地存放在内存中,依次类推,将数组中所有元素都取出存放在内存中;

矩阵下一行重复上述操作直至最后一行。

4.根据权利要求1所述基于稀疏矩阵乘法的FPGA存储方法,其特征在于,所述存储数组元素,还包括先将所有数组的第一个元素和对应列坐标拿出来放在一起,再将所有数组的第二个元素和对应列坐标拿出来放在一起,以此类推,直到数组中所有元素和其对应的列坐标被取出。

5.根据权利要求1所述基于稀疏矩阵乘法的FPGA存储方法,其特征在于,所述获得并行计算存储结构,向量存放在所有FPGA的bram中,矩阵和所有FPGA的bram对应的列坐标连续地存放在内存中。

6.根据权利要求1所述基于稀疏矩阵乘法的FPGA存储方法,其特征在于,所述获得并行计算存储结构后,进行以并行度数量为基础的稀疏矩阵向量乘法计算。

7.一种基于稀疏矩阵乘法的FPGA计算方法,其特征在于,包括:

基于权利要求1所述并行计算存储结构,开始计算,最终得到所有输出结果,所述最终的所有输出结果为稀疏矩阵向量乘法的结果;开始计算时,每次从内存中取出连续的和并行度数目相同的元素和这些元素对应的列坐标,将列坐标分别传递到所有FPGA的bram中,从每个bram中获取到对应向量元素,将内存中取到的元素按一一对应的顺序和bram中取出的向量元素进行乘法运算,将所有乘法运算累加,直到矩阵的一行全被取出,将累加结果输出并清空开始下一行的计算。

8.一种FPGA存储模块,其特征在于,模块组成包括:

向量存储改造模块:将稀疏矩阵向量乘法中的向量按照对应标号和并行度进行取模,用于区分存储位置;

矩阵存储改造模块:用于对稀疏矩阵向量乘法中的稀疏矩阵的每一行进行操作,新建数组,所述数组数量和并行度数量相同,所述并行度数量是任意的;

数组元素存储模块:用于将矩阵存储改造模块新建的数组元素相同位置的取出来放在一起存储;

上述三大模块构成用于并行计算的并行计算存储结构。

9.一种FPGA计算模块,其特征在于,模块组成包括:

并行计算存储模块:基于并行计算存储结构,用于向量存储改造,矩阵存储改造,数组元素存储;

计算模块,用于计算得到所有输出结果,所述最终的所有输出结果为稀疏矩阵向量乘法的结果。

10.一种FPGA板,其特征在于,包括FPGA板本体,还包括如权利要求8所述的FPGA存储模块或如权利要求9所述的一种FPGA计算模块。

说明书 :

基于稀疏矩阵乘法的FPGA存储方法、计算方法、模块和FPGA板

技术领域

[0001] 本发明属于稀疏矩阵乘法的FPGA加速技术领域,具体涉及基于稀疏矩阵乘法的FPGA并行计算存储方法、计算方法、模块和FPGA板。

背景技术

[0002] FPGA(Field Programmable Gate Array)是专用集成电路里面一种半定制化的电路,既有比通用计算快的特点,又比专用芯片(ASIC)更加灵活,在科学工程领域尤其是定制计算领域被广泛使用,使用FPGA进行专业加速目前在商业上已经有了很广泛的市场,如今算法迭代迅速,使用FPGA进行定制化计算来加速传统CPU计算成了非常普遍的场景。FPGA有着大量的BlockRAM(bram)资源,每一个bram都可以当作一个独立的小容量的内存来使用。
[0003] 矩阵向量乘法指一个M×N的矩阵与N×1大小的向量的乘法运算。假设并行度为4,一般来说每次取出矩阵中一行连续的4个元素和向量权重中连续的4个元素分别进行乘法操作,再累加乘法结果。在实际工程应用或科学计算中,利用CPU的一些并行指令如sse、avx等或者利用FPGA并行度往往能达到16甚至32,这样比使用传统CPU进行一一乘法要快得多,加速比甚至能达到接近并行度的数量的水准。
[0004] 稀疏矩阵向量乘法是一种采取压缩矩阵的方式来储存稀疏矩阵以减少储存空间消耗,采取压缩格式来存储和计算这些稀疏矩阵,可以节省大量零元素的乘法,然而在计算过程中存在以下问题:
[0005] CSR(Compressed sparse row)在并行操作时可以通过一次访问从内存拿到众多的矩阵非零元素,这本身不存在瓶颈,但发现这些众多的矩阵非零元在原始矩阵中的列坐标并不是连续的,在做矩阵向量乘法时,还需要使用这些非零元素所对应的向量元素,这时,便出现了需要读取众多不连续的元素的情况,影响FPGA访问存储性能。

发明内容

[0006] 本发明基于上述背景和现有技术所存在的问题,拟设计一种基于稀疏矩阵乘法的FPGA存储方法,其是一种并行计算存储方法,包括实现此方法依赖的模块,并基于此方法和模块进一步实现一种计算方法及此计算方法对应的模块,其能够利用FPGA解决稀疏矩阵向量乘法过程中读取不连续向量元素问题。本发明提供了一种利用FPGA解决稀疏矩阵向量乘法过程中读取不连续向量元素的方案。
[0007] 本发明基于稀疏矩阵乘法的FPGA存储方法,具体实现步骤包括:
[0008] 向量存储改造:将稀疏矩阵向量乘法中的向量按照对应标号和并行度进行取模,用于区分存储位置;
[0009] 矩阵存储改造:对稀疏矩阵向量乘法中的稀疏矩阵的每一行进行操作,所述操作包括新建数组,所述数组数量和并行度数量相同;
[0010] 存储数组元素:将矩阵存储改造步骤中新建的数组元素相同位置的取出来放在一起存储,获得并行计算存储结构。
[0011] 进一步地,所述矩阵存储改造步骤中,以CSR格式存储的矩阵按照非零元素对应列坐标进行划分,将元素本身和对应列坐标存到所有数组里去,以数组元素最多的数组为基准,将其他数组补零至相同长度。
[0012] 进一步地,所述矩阵存储改造的操作还包括:
[0013] 将一行中的所有非零元素按照列坐标和并行度进行取模运算,将非零元素和其对应的列坐标存放到和取模结果相同的数组中去;
[0014] 完成一行中所有元素的存放后,以元素最多的数组为基准,给其他数组补零元素以及列坐标,列坐标和被补数组的标号相同;
[0015] 将每个数组第一个元素和对应列坐标取出连续地存放在内存中,再将每个数组第二个元素和对应列坐标取出连续地存放在内存中,依次类推,将数组中所有元素都取出存放在内存中;
[0016] 矩阵下一行重复上述操作直至最后一行。
[0017] 进一步地,所述存储数组元素,还包括先将所有数组的第一个元素和对应列坐标拿出来放在一起,再将所有数组的第二个元素和对应列坐标拿出来放在一起,以此类推,直到数组中所有元素和其对应的列坐标被取出。
[0018] 进一步地,所述获得并行计算存储结构,向量存放在所有FPGA的bram中,矩阵和所有FPGA的bram对应的列坐标连续地存放在内存中。
[0019] 进一步地,所述获得并行计算存储结构后,进行以并行度数量为基础的稀疏矩阵向量乘法计算,通过此种方法扩展,可以进行并行度更高的稀疏矩阵向量乘法计算。
[0020] 本发明还提供一种基于所述FPGA存储方法的计算方法,基于所述并行计算存储结构,开始计算,最终得到所有输出结果,所述最终的所有输出结果为稀疏矩阵向量乘法的结果。开始计算时,每次从内存中取出连续的和并行度数目相同的元素和这些元素对应的列坐标,将列坐标分别传递到所有FPGA的bram中,从每个bram中获取到对应向量元素,将内存中取到的元素按一一对应的顺序和bram中取出的向量元素进行乘法运算,将所有乘法运算累加,直到矩阵的一行全被取出,将累加结果输出并清空开始下一行的计算。
[0021] 本发明还提供一种FPGA存储模块,即实现稀疏矩阵乘法的FPGA存储的稀疏矩阵乘法的FPGA并行计算存储模块,模块组成包括:
[0022] 向量存储改造模块:将稀疏矩阵向量乘法中的向量按照对应标号和并行度进行取模,用于区分存储位置;
[0023] 矩阵存储改造模块:用于对稀疏矩阵向量乘法中的稀疏矩阵的每一行进行操作,新建数组,所述数组数量和并行度数量相同;
[0024] 数组元素存储模块:用于将矩阵存储改造模块新建的数组元素相同位置的取出来放在一起存储;
[0025] 上述三大模块构成用于并行计算的并行计算存储结构。
[0026] 本发明还提供一种FPGA计算模块,即实现稀疏矩阵乘法的FPGA计算方法的稀疏矩阵乘法的FPGA并行计算模块,模块组成包括:
[0027] 并行计算存储模块:基于并行计算存储结构,用于向量存储改造,矩阵存储改造,数组元素存储;
[0028] 计算模块,用于计算得到所有输出结果,所述最终的所有输出结果为稀疏矩阵向量乘法的结果。
[0029] 此外,本发明还提供了一种FPGA板,包括FPGA板本体,还包括如上所述的FPGA存储模块和一种FPGA计算模块。
[0030] 本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。本发明的有益效果包括:通过本发明的基于稀疏矩阵乘法的FPGA存储方法可以得到一个适合并行计算的存储结构,并基于FPGA实现本发明所述矩阵存储改造操作,解决稀疏矩阵向量乘法过程中读取不连续向量元素的问题,并通过本发明的计算方法基于此存储结构进行计算,就能每次从内存中取出连续的和并行度数目相同的数据和它们对应的列坐标,能提高进行基于并行度的稀疏矩阵乘法计算的访问存储性能。并通过此种方法扩展,可以进行并行度更高的稀疏矩阵乘法计算,解决了稀疏矩阵向量乘法过程中读取不连续向量元素的问题。

附图说明

[0031] 图1为CSR格式储存的稀疏矩阵示意图;
[0032] 图2为本发明专利提出的用于稀疏矩阵向量乘法储存向量的结构示意图;
[0033] 图3为本发明专利提出的将原始稀疏矩阵按照对应列坐标取模分配到不同数组的示意图;
[0034] 图4为本发明专利提出的用于稀疏矩阵向量乘法储存矩阵的结构示意图;
[0035] 图5为本发明专利提出的用于稀疏矩阵向量乘法的储存结构示意图。

具体实施方式

[0036] 为了清晰地阐述本发明,使本发明实施例的目的、技术方案和优点更加清楚,下面结合了本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,以令本领域技术人员参照说明书文字能够据以实施。下面将附图结合具体实施方式对本发明的技术加以详细说明。
[0037] 稀疏矩阵一般来说指非零元比例即稀疏度小于25%的矩阵。为节省储存空间,稀疏矩阵通常采取压缩方式来存储,即只存储矩阵中的非零元,稀疏矩阵的压缩存储格式主要分为四大类:位映射(bit map)、地址映射(address map)、行列存储(row-column)、链表(linked list)。这些储存格式在不同的数据集和计算任务上表现各有优劣。稀疏矩阵进行的向量乘法在工程领域有着大量的实际应用。
[0038] 稀疏矩阵向量乘法是矩阵向量乘法在稀疏矩阵数据集上的体现,往往需要采取压缩矩阵的方式来储存稀疏矩阵以减少储存空间消耗,并且采取这种方式进行计算可以节省大量零元素的乘法,这些零元的乘法对于最终结果来说是没有意义的,可以省略。往往采取压缩格式来存储和计算这些稀疏矩阵,例如CSR格式(Compressed sparse row)。如图1所示,有色方块代表值为非零的元素,使用CSR格式存储后,可以放弃记录零元素,只记录非零元素和这些非零元素的列坐标,以及原始矩阵在新的向量中每行开始的位置。CSR在做矩阵向量乘法时,还需要拿到这些非零元所对应的向量元素,这时,便出现了需要读取众多不连续的元素的情况。
[0039] 本发明拟设计一种基于稀疏矩阵乘法的FPGA存储方法,其是一种并行计算存储方法,包括实现此方法依赖的模块,并基于此方法和模块进一步实现一种计算方法及此计算方法对应的模块,其能够利用FPGA解决稀疏矩阵向量乘法过程中读取不连续向量元素问题。
[0040] 下面结合附图,对本发明做详细阐述,本实施例的开发平台为Xilinx公司的U280 FPGA板卡。
[0041] 如图2、图3、图4所示,本发明的基于稀疏矩阵乘法的FPGA存储方法,即基于稀疏矩阵乘法的FPGA并行计算存储方法,具体实现步骤包括:
[0042] Step1:向量存储改造:将稀疏矩阵向量乘法中的向量按照对应标号和并行度进行取模,本实施例中并行度为4,按照顺序将向量存到和取模结果标号相同的FPGA的bram中。如图2所示,假设向量有12个元素分别标号为0-11,原本的12个向量元素存在4个block ram中,按照这12个元素标号和并行度为4的取模值来区分到底存在哪一块。
[0043] Step2:矩阵存储改造:对稀疏矩阵向量乘法中的稀疏矩阵的每一行进行操作,如图3所示,图中Array为数组名,mod为取模符号,以CSR格式存储的矩阵按照非零元素对应列坐标进行划分,将元素本身和对应列坐标存到4个数组里去,以数组元素最多的数组为基准,将其他数组补零至相同长度。对稀疏矩阵向量乘法中的稀疏矩阵的每一行进行如下操作:
[0044] S21:新建和并行度数量相同(对应)的数组,所述并行度数量可以是任意的;
[0045] S22:将一行中的所有非零元素按照列坐标和并行度进行取模运算,将非零元素和这些非零元素对应的列坐标存放到和取模结果相同的数组中去;
[0046] S23:完成一行中所有元素的存放后,以元素最多的数组为基准,给其他数组补零元素以及列坐标,列坐标和被补数组的标号相同;
[0047] S24:将每个数组第一个元素和对应列坐标取出连续地存放在内存中,再将每个数组第二个元素和对应列坐标取出连续地存放在内存中,依次类推,将数组中所有元素都取出存放在内存中;
[0048] S25:再对矩阵下一行进行同样的操作。
[0049] Step3:存储数组元素:如图4所示,将矩阵存储改造步骤中新建的数组元素相同位置的取出来放在一起存储,先将4个数组的第一个元素和对应列坐标拿出来放在一起,再将4个元素的第2个元素和对应列坐标拿出来放在一起,以此类推,直到数组中所有元素和这些元素对应的列坐标被取出;
[0050] Step4:至此得到了如图5所示的存储结构,这是一个适合并行计算的存储结构,向量存放在4个FPGA的bram中,矩阵和此矩阵对应的列坐标连续地存放在内存中,每次从样本矩阵中拿出4个元素进行乘法计算,在读取这个4个元素对应列坐标时会发现此4个元素对应的4个向量元素都分布在不同的block ram(bram)中。分别将4个元素对应的列坐标发送到4个bram中,4个bram分别返回一个向量元素,即4个元素所对应的向量元素,这样就能很好地进行并行度为4的稀疏矩阵乘法计算了,通过此种方法扩展,可以进行并行度更高的稀疏矩阵向量乘法计算。
[0051] Step5:开始计算时,每次从内存中取出连续的和并行度数目相同的元素和这些元素对应的列坐标,将列坐标分别传递到所有bram中,从每个bram中获取到对应向量元素,将内存中取到的元素按一一对应的顺序和bram中取出的向量元素进行乘法运算,将所有乘法运算累加,直到矩阵的一行全被取出,将累加结果输出并清空开始下一行的计算。
[0052] Step6:完成上述步骤后,完成计算,最终得到所有输出结果,所述最终的所有输出结果为稀疏矩阵向量乘法的结果。
[0053] 本发明还提供一种FPGA存储模块,即实现稀疏矩阵乘法的FPGA存储方法的稀疏矩阵乘法的FPGA并行计算存储模块,模块组成包括:
[0054] 向量存储改造模块:将稀疏矩阵向量乘法中的向量按照对应标号和并行度进行取模,用于区分存储位置;
[0055] 矩阵存储改造模块:用于对稀疏矩阵向量乘法中的稀疏矩阵的每一行进行操作,新建数组,所述数组数量和并行度数量相同,所述并行度数量是任意的;
[0056] 数组元素存储模块:用于将矩阵存储改造模块新建的数组元素相同位置的取出来放在一起存储;
[0057] 上述三大模块构成用于并行计算的并行计算存储结构。
[0058] 本发明还提供一种FPGA计算模块,即实现稀疏矩阵乘法的FPGA计算方法的稀疏矩阵乘法的FPGA并行计算模块,模块组成包括:
[0059] 并行计算存储模块:基于并行计算存储结构,用于向量存储改造,矩阵存储改造,数组元素存储;
[0060] 计算模块,用于计算得到所有输出结果,所述最终的所有输出结果为稀疏矩阵向量乘法的结果。
[0061] 此外,本发明还提供了一种FPGA板,包括FPGA板本体,还包括如上所述的FPGA存储模块和一种FPGA计算模块。
[0062] 上述对实施例的描述是为便于本技术领域的普通技术人员能理解和应用本发明。熟悉本领域技术的人员显然可以容易地对上述实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,对于本发明做出的改进和修改都应该在本发明的保护范围之内。