CN111079082A - 一种提高涉及稀疏矩阵计算速率的方法和系统 - Google Patents
一种提高涉及稀疏矩阵计算速率的方法和系统 Download PDFInfo
- Publication number
- CN111079082A CN111079082A CN201911330882.7A CN201911330882A CN111079082A CN 111079082 A CN111079082 A CN 111079082A CN 201911330882 A CN201911330882 A CN 201911330882A CN 111079082 A CN111079082 A CN 111079082A
- Authority
- CN
- China
- Prior art keywords
- row
- zero value
- zero
- sparse matrix
- array
- 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
本说明书实施例公开了一种提高涉及稀疏矩阵计算速率的方法及系统。所述方法包括:获取稀疏矩阵,所述稀疏矩阵由至少一个非零值和所述至少一个非零值对应的坐标组成,所述坐标表示所述非零值在所述稀疏矩阵中的位置;所述坐标包括行坐标,所述行坐标表示所述非零值在所述稀疏矩阵中的行数;遍历所述稀疏矩阵,基于所述非零值对应的行坐标,生成所述至少一个非零值的至少一个访问索引;其中,所述访问索引表示所述非零值在所述至少一个非零值中被访问的顺序,行坐标相同的所述非零值对应的访问索引相邻;基于所述至少一个访问索引,访问所述至少一个非零值,并基于所述至少一个非零值进行矩阵计算。
Description
技术领域
本说明书涉及数据处理技术领域,特别涉及一种访问稀疏矩阵的方法和系统。
背景技术
稀疏矩阵广泛的应用于各种机器学习模型中,例如:图深度学习的核心步骤-信息聚合,可以表示为一个稀疏矩阵和稠密矩阵的乘法。有些情况下,稀疏矩阵中的非零值没有按行的顺序存储,而为了优化计算过程需要读取稀疏矩阵中整行的非零值。为了可以按行的顺序来访问稀疏矩阵,常规的解决方案需要对稀疏矩阵中的非零值进行排序,对于大规模的稀疏矩阵,因为排序过程中涉及到大量的内存复制,效率较低。
因此,需要提供一种按行访问稀疏矩阵的方法和系统。
发明内容
本说明书实施例之一提供一种提高涉及稀疏矩阵计算速率的方法。所述方法包括:获取稀疏矩阵,所述稀疏矩阵由至少一个非零值和所述至少一个非零值对应的坐标组成,所述坐标表示所述非零值在所述稀疏矩阵中的位置;所述坐标包括行坐标,所述行坐标表示所述非零值在所述稀疏矩阵中的行数;遍历所述稀疏矩阵,基于所述非零值对应的行坐标,生成所述至少一个非零值的至少一个访问索引;其中,所述访问索引表示所述非零值在所述至少一个非零值中被访问的顺序,行坐标相同的所述非零值对应的访问索引相邻;基于所述至少一个访问索引,访问所述至少一个非零值,并基于所述至少一个非零值进行矩阵计算。
本说明书实施例之一提供一种提高涉及稀疏矩阵计算速率的系统,所述系统包括:获取模块,用于获取稀疏矩阵,所述稀疏矩阵由至少一个非零值和所述至少一个非零值对应的坐标组成,所述坐标表示所述非零值在所述稀疏矩阵中的位置;所述坐标包括行坐标,所述行坐标表示所述非零值在所述稀疏矩阵中的行数;生成模块,用于遍历所述稀疏矩阵,基于所述非零值对应的行坐标,生成所述至少一个非零值的至少一个访问索引;其中,所述访问索引表示所述非零值在所述至少一个非零值中被访问的顺序,行坐标相同的所述非零值对应的访问索引相邻;访问模块,用于基于所述至少一个访问索引,访问所述至少一个非零值,并基于所述至少一个非零值进行矩阵计算。
本说明书实施例之一提供一种提高涉及稀疏矩阵计算速率的装置,包括:
所述装置包括至少一个处理器以及至少一个存储器;所述至少一个存储器用于存储计算机指令;所述至少一个处理器用于执行所述计算机指令中的至少部分指令以实现一种提高涉及稀疏矩阵计算速率的方法。
附图说明
本说明书将以示例性实施例的方式进一步说明,这些示例性实施例将通过附图进行详细描述。这些实施例并非限制性的,在这些实施例中,相同的编号表示相同的结构,其中:
图1是根据本说明书一些实施例所示的提高涉及稀疏矩阵计算速率的系统的模块图;
图2是根据本说明书一些实施例所示的提高涉及稀疏矩阵计算速率的方法的示例性流程图;
图3A是根据本说明书一些实施例所示的稀疏矩阵的示例的示意图;
图3B是根据本说明书一些实施例所示的稀疏矩阵中非零值存储方式的示例的示意图;
图3C是根据本说明书一些实施例所示的按照访问索引存储非零值在非零值数组中位置的示例的示意图;
图3D是根据本说明书一些实施例所示的按行的顺序读取出来的非零值的示例的示意图;以及
图4是根据本说明书一些实施例所示的提高涉及稀疏矩阵计算速率的系统的应用场景示意图。
具体实施方式
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本说明书的一些示例或实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本说明书应用于其它类似情景。除非从语言环境中显而易见或另做说明,图中相同标号代表相同结构或操作。
应当理解,本文使用的“系统”、“装置”、“单元”和/或“模组”是用于区分不同级别的不同组件、元件、部件、部分或装配的一种方法。然而,如果其他词语可实现相同的目的,则可通过其他表达来替换所述词语。
如本说明书和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其它的步骤或元素。
本说明书中使用了流程图用来说明根据本说明书的实施例的系统所执行的操作。应当理解的是,前面或后面操作不一定按照顺序来精确地执行。相反,可以按照倒序或同时处理各个步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
图1是根据本说明书一些实施例所示的提高涉及稀疏矩阵计算速率的系统的模块图。
如图1所示,提高涉及稀疏矩阵计算速率的系统可以包括获取模块110、生成模块120以及访问模块130。
获取模块110可以用于获取稀疏矩阵,所述稀疏矩阵由至少一个非零值和所述至少一个非零值对应的坐标组成,所述坐标表示所述非零值在所述稀疏矩阵中的位置;所述坐标包括行坐标,所述行坐标表示所述非零值在所述稀疏矩阵中的行数。关于获取稀疏矩阵的详细描述可以参见图2,在此不再赘述。
生成模块120可以用于遍历所述稀疏矩阵,基于所述非零值对应的行坐标,生成所述至少一个非零值的至少一个访问索引;其中,所述访问索引表示所述非零值在所述至少一个非零值中被访问的顺序,行坐标相同的所述非零值对应的访问索引相邻。关于遍历所述稀疏矩阵,基于所述非零值对应的行坐标,生成所述至少一个非零值的至少一个访问索引的详细描述可以参见图2,在此不再赘述。
访问模块130可以用于基于所述至少一个访问索引,访问所述至少一个非零值,并基于所述至少一个非零值进行矩阵计算。关于基于所述至少一个访问索引,访问所述至少一个非零值,并基于所述至少一个非零值进行矩阵计算的详细描述可以参见图2,在此不再赘述。
应当理解,图1所示的系统及其模块可以利用各种方式来实现。例如,在一些实施例中,系统及其模块可以通过硬件、软件或者软件和硬件的结合来实现。其中,硬件部分可以利用专用逻辑来实现;软件部分则可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件来执行。本领域技术人员可以理解上述的方法和系统可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、CD或DVD-ROM的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本说明书的系统及其模块不仅可以有诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用例如由各种类型的处理器所执行的软件实现,还可以由上述硬件电路和软件的结合(例如,固件)来实现。
需要注意的是,以上对于提高涉及稀疏矩阵计算速率的系统及其模块的描述,仅为描述方便,并不能把本说明书限制在所举实施例范围之内。可以理解,对于本领域的技术人员来说,在了解该系统的原理后,可能在不背离这一原理的情况下,对各个模块进行任意组合,或者构成子系统与其他模块连接。例如,在一些实施例中,图1中披露的获取模块110、生成模块120和访问模块130可以是一个系统中的不同模块,也可以是一个模块实现上述的两个或两个以上模块的功能。例如,获取模块110和生成模块120可以是两个模块,也可以是一个模块同时具有获取和生成功能。诸如此类的变形,均在本说明书的保护范围之内。
图2是根据本说明书一些实施例所示的提高涉及稀疏矩阵计算速率的方法的示例性流程图。
如图2所示,提高涉及稀疏矩阵计算速率的方法可以包括:
步骤210,获取稀疏矩阵。具体的,该步骤可以由获取模块110执行。
在一些实施例中,稀疏矩阵可以指数值为零的元素数目远远多于数值不为零的元素数目,并且非零元素的分布没有规律的矩阵。如图3A所示的稀疏矩阵,其形状为5行*13列,共计65个元素,其中数值为零的元素为52个,数值不为零的元素有13个:a01、a0c、a10、a12、a1b、a24、a28、a33、a35、a37、a3a、a46、a49。
在一些实施例中,获取稀疏矩阵的方式包括但不限于:网络下载、参数机器传输、读取内存和进程调用等。
如果将获取到的稀疏矩阵都存储进入内存中的话,那将会占用相当大的空间,通常可以通过压缩储存的方式来存储稀疏矩阵,即只保存稀疏矩阵中的非零元素及其对应的行列数。稀疏矩阵的常用压缩存储方法包括:三元组表示法、带辅助行向量的二元组表示法以及十字链表表示法等。
在一些实施例中,可以使用三元组表示法存储稀疏矩阵。稀疏矩阵中的每一个非零元素由一个三元组(行坐标i、列坐标j、非零值aij)唯一确定。稀疏矩阵中的非零元素及其对应的行列数存放在由三元组组成的数组中。
在一些实施例中,稀疏矩阵可以由至少一个非零值和所述至少一个非零值对应的坐标组成。非零值可以为稀疏矩阵中数值不为零的元素,非零值对应的坐标表示非零值在稀疏矩阵中的位置,坐标包括行坐标和列坐标,行坐标表示非零值在稀疏矩阵中的行数,列坐标表示非零值在稀疏矩阵中的列数。如图3A所示,矩阵元素a01对应的行坐标为0、列坐标为1,表示a01在稀疏矩阵中的位置为第0行、第1列。
在一些实施例中,至少一个非零值可以存储于非零值数组中;与非零值对应的坐标存储在坐标数组中,坐标数组可以为二维数组。在一些实施例中,可以用NNZ(Number ofNon Zero)来表示稀疏矩阵中非零值的个数,因此非零值数组和坐标数组可以被定义为NNZ个元素的数组,非零值数组和坐标数组的下标范围为0~NNZ-1。例如:如图3A所示的稀疏矩阵,共有13个非零值,因此NNZ等于13,可以存储在图3B所示的13个元素的非零值数组val和13个元素的坐标数组idx中。具体的,非零值数组中下标为0的元素a10对应的坐标(1,0)存储在坐标数组中下标为0的数组元素中,非零值数组中下标为1的元素a01对应的坐标(0,1)存储在坐标数组中下标为1的数组元素中…。
在一些实施例中,数组可以是存储一系列同类型数据元素的一种数据结构。每个数组的元素个数可以是零或正整数,并且在数组创建和初始化后就不能更改了。例如:在C语言中,定义一个一维数组,int a[10],其中,a是数组名,10为数组元素的个数,系统会在内存中分配一块10个int型数据长度的存储空间用来存放该数组。可以通过数组名和一个整型下标访问数组中的每一个元素。例如:a[5],表示数组a中下标为5的数组元素。为了便于描述,本说明书图3B、3C中,将数组元素的值和数组元素的下标分别按行表示。
步骤220,遍历所述稀疏矩阵,基于所述非零值对应的行坐标,生成所述至少一个非零值的至少一个访问索引。具体的,该步骤可以由生成模块120执行。
在一些实施例中,遍历可以指沿着某条搜索路线,依次对稀疏矩阵中每个元素做一次访问。在一些实施例中,可以按照数组元素的下标,从0开始依次访问非零值数组中的元素。例如:按照val[0]、val[1]、…、val[12]的顺序访问图3B所示的非零值数组。
在一些实施例中,虽然初始获取的稀疏矩阵是按行排序的,但是由于某些原因,例如在计算梯度的过程中对稀疏矩阵进行了转置运算,导致非零值数组没有按照稀疏矩阵中行的顺序存储非零值。例如:如图3B所示的非零值数组,a10在稀疏矩阵的第1行,在非零值数组中对应的下标为0,a01在稀疏矩阵的第0行,在非零值数组中对应的下标为1,a0c也在稀疏矩阵的第0行,在非零值数组中对应的下标为12。在一些实施例中,期望可以按稀疏矩阵行的顺序来访问非零值数组。因此,需要基于所述非零值的行坐标,生成所述至少一个非零值的至少一个访问索引,使得行坐标相同的非零值对应的访问索引相邻。访问索引表示非零值在至少一个非零值中被访问的顺序。例如:如图3B所示的非零值数组,期望第一个从数组里读取的是a01,第二个从数组里读取的是a0c,那么a01的访问索引可以为0,a0c的访问索引可以为1,以此类推。
在一些实施例中,将非零值数组中存放非零值的数组元素的下标作为非零值在至少一个非零值中的位置m。例如:如图3B所示,可以将非零值数组中的数组元素a35对应的下标5作为a35在13个非零值中的位置m。
在一些实施例中,根据位置m,从坐标数组中获取非零值的行坐标l;因为行坐标l表示非零值在稀疏矩阵中的行数,因此要小于稀疏矩阵的行数N。例如:如图3B所示,可以将上述示例中a35在13个非零值中的位置5作为坐标数组元素的下标,从坐标数组中获取a35对应的行坐标3。
在一些实施例中,可以基于上述获取的行坐标l和至少一个非零值中已经被遍历的第l行非零值的个数,确定非零值的访问索引。在一些实施例中,需要先确定非零值数组中第l前非零值的总个数,可以包括以下步骤:
(1)遍历稀疏矩阵,统计稀疏矩阵中每行非零值的个数,并存储到N个元素的存储每行非零值个数的数组cpr中;其中,N是稀疏矩阵的行数,因为数组cpr用来存放非零值数组中每行非零值的个数,因此可以定义数组cpr为N个元素的数组。对于每一个非零值,如果对应的行坐标为k,则数组元素cpr[k]加1。遍历结束后,cpr[i]表示稀疏矩阵中第i行非零值个数。例如:如图3B所示的非零值数组,对应行坐标为0的数组元素有:a01和aoc,则cpr[0]==2;对应行坐标为1的数组元素有:a10、a12和a1b,则cpr[1]==3;对应行坐标为2的数组元素有:a24和a28,则cpr[2]==2;对应行坐标为3的数组元素有:a33、a35、a37和a3a,则cpr[3]==4;对应行坐标为4的数组元素有:a46和a49,则cpr[4]==2。
(2)遍历上述被赋值的存储每行非零值个数的数组cpr,从i等于1开始,到i等于N-1结束,计算稀疏矩阵中第i行之前非零值的总个数并存储到N个元素的存储当前行之前非零值总个数的数组cbcr中,数组元素cbcr[0]的值初始赋值为0。计算公式如下:
cbcr[i]=cbcr[i-1]+cpr[i-1] (1)。
下面以图3B所示的非零值数组为例说明,从i等于1开始,到i等于4结束:
cbcr[1]=cbcr[0]+cpr[0]=0+2=2;
cbcr[2]=cbcr[1]+cpr[1]=2+3=5;
cbcr[3]=cbcr[2]+cpr[2]=5+2=7;
cbcr[4]=cbcr[3]+cpr[3]=7+4=11。
(3)在一些实施例中,将上述存储当前行之前非零值总个数的数组cbcr的第l个元素cbcr[l],作为稀疏矩阵中第l行之前非零值的总个数。例如:以图3B所示的非零值数组为例,因为a35对应的行坐标l为3,则第l行前非零值的总个数为:cbcr[3]7。
在一些实施例中,可以将上述步骤获取的稀疏矩阵中第l行之前非零值的总个数与已经被遍历的第l行非零值的个数nnz_l相加,获取非零值的访问索引index;其中,nnz_l的初始值为0,计算公式如下:
index=cbcr[l]+nnz_l (2);
计算完访问索引index之后,因为已经被遍历的第l行非零值的个数增加了1个,所以已经被遍历的第l行非零值的个数nnz_l的值需要增加1,即:
nnz_l=nnz_l+1 (3)。
在一些实施例中,为了不重新申请内存,在步骤(2)后,可以将cpr的数组元素清零,作为nnz_l使用,即:cpr[0作为nnz_0,cpr[1作为nnz_1…。在一些实施例中,步骤(2)后,cpr的数组元素也可以不清零,作为nnz_l使用,这种情况下公式(3)可以为:
nnz_l=nnz_l-1 (3_1)。
然后将非零值在至少一个非零值中的位置m存储到按行顺序存储非零值位置的数组sibr中;其中,所述访问索引index作为存储所述位置m的数组元素的下标。数组sibr为NNZ个元素的数组。计算公式如下:
sibr[index]=m (4)。
下面以图3B所示的非零值数组中的数组元素a46、a49为例说明:
a46对应的行坐标为4,是非零值数组中第1个被遍历的稀疏矩阵中第4行的非零值,因此此时nnz_4等于0,按照公式(2)计算访问索引:index=cbcr[4]+nnz_4=11+0=11,按照公式(3)增加被遍历的第4行的非零值的个数:nnz_4=nnz_4+1=0+1=1。如图3B所示,a46在非零值数组中对应的数组下标为6,因此遍历到a46时位置m为6,按照公式(4)存储位置m:sibr[11]=6。a49是非0值数组中第2个被遍历的稀疏矩阵中第4行的非零值,此时nnz_4的值为1,按照公式(2)计算访问索引:index=cbcr[4]+nnz_4=11+1=12,按照公式(3)增加被遍历的第4行的非零值的个数:nnz_4=nnz_4+1=1+1=2。如图3B所示,a49在非零指数组中对应的数组下标为9,因此遍历到a49时位置m为9,按照公式(4)存储位置m:sibr[12]=9。
按照上述方法对图3B中非零值数组遍历完成之后,sibr==[1,12,0,2,11,4,8,3,5,7,10,6,9]。
步骤230,基于所述至少一个访问索引,访问所述至少一个非零值。具体的,该步骤可以由访问模块130执行。
在一些实施例中,基于至少一个访问索引,访问至少一个非零值包括:
将数组元素sibr[z]的值作为第z个要访问的非零值在非零值数组中的元素的下标n;
根据所述下标n,从非零值数组中访问非零值。
以步骤220赋值的按行顺序存储非零值位置的数组sibr为例说明:
sibr[0]==1,则第0个要访问的非零值在非零值数组中的元素下标为1,从图3B所示的非零值数组中读取val[1],即a01;sibr[1]==12,则第1个要访问的非零值在非零值数组中的元素下标为12,从图3B所示的非零值数组中读取val[12],即a0c;sibr[2]==0,则第2个要访问的非零值在非零值数组中的元素下标为0,从图3B所示的非零值数组中读取val[0],即a10;…;sibr[11]==6,则第11个要访问的非零值在非零值数组中的元素下标为6,从图3B所示的非零值数组中读取val[6],即a46;sibr[12]==9,则第12个要访问的非零值在非零值数组中的元素下标为9,从图3B所示的非零值数组中读取val[9],即a49。最终按照访问索引从非0值数组中读取非零值的顺序如图3D所示。
在一些实施例中,可以根据本步骤描述的方法访问所述至少一个非零值,进行矩阵计算。例如:按行读取没有按照行的顺序存储的大规模稀疏矩阵,使用多个线程并行无锁执行该稀疏矩阵和稠密矩阵的乘法运算。
本说明书实施例可能带来的有益效果包括:按照本说明书所述的方法,不需要对稀疏矩阵中的非零值进行排序,即可简单高效的完成按行读取没有按行存储的稀疏矩阵中非零值的任务。一方面可以提高使用稀疏矩阵进行运算的效率,另一方面可以采用更先进的技术对计算的过程进行优化,从而带来模型训练性能的提升。应当注意的是,上述有关流程200的描述仅仅是为了示例和说明,而不限定本说明书的适用范围。对于本领域技术人员来说,在本说明书的指导下可以对流程200进行各种修正和改变。然而,这些修正和改变仍在本说明书的范围之内。例如,可以将步骤210和步骤220合并为一个步骤,获取稀疏矩阵,遍历所述稀疏矩阵,基于所述非零值对应的行坐标,生成所述至少一个非零值的至少一个访问索引。
图4是根据本说明书一些实施例所示的提高涉及稀疏矩阵计算速率的系统的应用场景图。
如图4所示,在图深度学习的信息聚合步骤中,需要计算稀疏矩阵A和稠密矩阵B的乘法,稀疏矩阵A的大小为1000*500,稠密矩阵B的大小为500*800,大于设定阈值,例如50*50。在运算过程中的一些操作使得稀疏矩阵A没有按行排序,例如,对稀疏矩阵A进行了转置运算。使用本说明书中所述的方法对稀疏矩阵A进行按行读取,使得可以使用优化算法来执行该乘法运算。详细方法请参见图2,在此不再赘述。
本说明书中所述的方法也可以适用于其他应用场景,不受本说明书的表述所限。
上文已对基本概念做了描述,显然,对于本领域技术人员来说,上述详细披露仅仅作为示例,而并不构成对本说明书的限定。虽然此处并没有明确说明,本领域技术人员可能会对本说明书进行各种修改、改进和修正。该类修改、改进和修正在本说明书中被建议,所以该类修改、改进、修正仍属于本说明书示范实施例的精神和范围。
同时,本说明书使用了特定词语来描述本说明书的实施例。如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本说明书至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一个替代性实施例”并不一定是指同一实施例。此外,本说明书的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
此外,本领域技术人员可以理解,本说明书的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本说明书的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。此外,本说明书的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。
计算机存储介质可能包含一个内含有计算机程序编码的传播数据信号,例如在基带上或作为载波的一部分。该传播信号可能有多种表现形式,包括电磁形式、光形式等,或合适的组合形式。计算机存储介质可以是除计算机可读存储介质之外的任何计算机可读介质,该介质可以通过连接至一个指令执行系统、装置或设备以实现通讯、传播或传输供使用的程序。位于计算机存储介质上的程序编码可以通过任何合适的介质进行传播,包括无线电、电缆、光纤电缆、RF、或类似介质,或任何上述介质的组合。
本说明书各部分操作所需的计算机程序编码可以用任意一种或多种程序语言编写,包括面向对象编程语言如Java、Scala、Smalltalk、Eiffel、JADE、Emerald、C++、C#、VB.NET、Python等,常规程序化编程语言如C语言、Visual Basic、Fortran 2003、Perl、COBOL 2002、PHP、ABAP,动态编程语言如Python、Ruby和Groovy,或其他编程语言等。该程序编码可以完全在用户计算机上运行、或作为独立的软件包在用户计算机上运行、或部分在用户计算机上运行部分在远程计算机运行、或完全在远程计算机或服务器上运行。在后种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(LAN)或广域网(WAN),或连接至外部计算机(例如通过因特网),或在云计算环境中,或作为服务使用如软件即服务(SaaS)。
此外,除非权利要求中明确说明,本说明书所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本说明书流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本说明书实施例实质和范围的修正和等价组合。例如,虽然以上所描述的系统组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的服务器或移动设备上安装所描述的系统。
同理,应当注意的是,为了简化本说明书披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本说明书实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。但是,这种披露方法并不意味着本说明书对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。
一些实施例中使用了描述成分、属性数量的数字,应当理解的是,此类用于实施例描述的数字,在一些示例中使用了修饰词“大约”、“近似”或“大体上”来修饰。除非另外说明,“大约”、“近似”或“大体上”表明所述数字允许有±20%的变化。相应地,在一些实施例中,说明书和权利要求中使用的数值参数均为近似值,该近似值根据个别实施例所需特点可以发生改变。在一些实施例中,数值参数应考虑规定的有效数位并采用一般位数保留的方法。尽管本说明书一些实施例中用于确认其范围广度的数值域和参数为近似值,在具体实施例中,此类数值的设定在可行范围内尽可能精确。
针对本说明书引用的每个专利、专利申请、专利申请公开物和其他材料,如文章、书籍、说明书、出版物、文档等,特此将其全部内容并入本说明书作为参考。与本说明书内容不一致或产生冲突的申请历史文件除外,对本说明书权利要求最广范围有限制的文件(当前或之后附加于本说明书中的)也除外。需要说明的是,如果本说明书附属材料中的描述、定义、和/或术语的使用与本说明书所述内容有不一致或冲突的地方,以本说明书的描述、定义和/或术语的使用为准。
最后,应当理解的是,本说明书中所述实施例仅用以说明本说明书实施例的原则。其他的变形也可能属于本说明书的范围。因此,作为示例而非限制,本说明书实施例的替代配置可视为与本说明书的教导一致。相应地,本说明书的实施例不仅限于本说明书明确介绍和描述的实施例。
Claims (12)
1.一种提高涉及稀疏矩阵计算速率的方法,所述方法包括:
获取稀疏矩阵,所述稀疏矩阵由至少一个非零值和所述至少一个非零值对应的坐标组成,所述坐标表示所述非零值在所述稀疏矩阵中的位置;所述坐标包括行坐标,所述行坐标表示所述非零值在所述稀疏矩阵中的行数;
遍历所述稀疏矩阵,基于所述非零值对应的行坐标,生成所述至少一个非零值的至少一个访问索引;其中,所述访问索引表示所述非零值在所述至少一个非零值中被访问的顺序,行坐标相同的所述非零值对应的访问索引相邻;
基于所述至少一个访问索引,访问所述至少一个非零值,并基于所述至少一个非零值进行矩阵计算。
2.根据权利要求1所述的方法,其中,在图深度学习的信息聚合步骤中,需要计算稀疏矩阵和稠密矩阵的乘法,当所述稀疏矩阵的维度大于设定阈值时,使用所述方法按行访问所述稀疏矩阵。
3.根据权利要求1所述的方法,其中,所述基于所述非零值的行坐标,生成所述至少一个非零值的至少一个访问索引包括:
所述至少一个非零值存储在NNZ个元素的非零值数组中,将所述非零值数组中存放所述非零值的数组元素的下标作为所述非零值在所述至少一个非零值中的位置m;其中,NNZ为所述稀疏矩阵中非零值的个数;
所述至少一个非零值对应的坐标存储在NNZ个元素的坐标数组中,根据所述位置m,从所述坐标数组中获取所述非零值的行坐标l;其中,所述行坐标l小于所述稀疏矩阵的行数N;
基于所述行坐标l和所述至少一个非零值中已经被遍历的第l行非零值的个数,确定所述非零值的访问索引。
4.根据权利要求3所述的方法,其中,所述遍历所述稀疏矩阵,基于所述非零值对应的行坐标,生成所述至少一个非零值的至少一个访问索引包括:
遍历所述稀疏矩阵,统计所述稀疏矩阵中每行非零值的个数,并存储到N个元素的存储每行非零值个数的数组中;
遍历所述存储每行非零值个数的数组,从i等于1开始,到i等于N-1结束,计算所述稀疏矩阵中第i行之前非零值的总个数并存储到N个元素的存储当前行之前非零值总个数的数组中。
5.根据权利要求4所述的方法,其中,所述基于所述行坐标l和所述至少一个非零值中已经被遍历的第l行非零值的个数,确定所述非零值的访问索引包括:
将所述存储当前行之前非零值总个数的数组的第l个元素的值,作为所述稀疏矩阵中第l行之前非零值的总个数;
将所述稀疏矩阵中第l行之前非零值的总个数与所述已经被遍历的第l行非零值的个数nnz_l相加,获取所述非零值的访问索引index;其中,nnz_l的初始值为0;
将所述位置m存储到按行顺序存储非零值位置的数组中;其中,所述访问索引index作为存储所述位置m的数组元素的下标;
所述已经被遍历的第l行非零值的个数nnz_l的值增加1。
6.根据权利要求5所述的方法,其中,所述基于所述至少一个访问索引,访问所述至少一个非零值包括:
将按行顺序存储非零值位置的数组中的第z个元素的值作为第z个要访问的所述非零值在所述非零值数组中的元素的下标n;
根据所述下标n,从所述非零值数组中访问所述非零值。
7.一种提高涉及稀疏矩阵计算速率的系统,所述系统包括:
获取模块,用于获取稀疏矩阵,所述稀疏矩阵由至少一个非零值和所述至少一个非零值对应的坐标组成,所述坐标表示所述非零值在所述稀疏矩阵中的位置;所述坐标包括行坐标,所述行坐标表示所述非零值在所述稀疏矩阵中的行数;
生成模块,用于遍历所述稀疏矩阵,基于所述非零值对应的行坐标,生成所述至少一个非零值的至少一个访问索引;其中,所述访问索引表示所述非零值在所述至少一个非零值中被访问的顺序,行坐标相同的所述非零值对应的访问索引相邻;
访问模块,用于基于所述至少一个访问索引,访问所述至少一个非零值,并基于所述至少一个非零值进行矩阵计算。
8.根据权利要求7所述的系统,其中,所述生成模块还包括:
所述至少一个非零值存储在NNZ个元素的非零值数组中,将所述非零值数组中存放所述非零值的数组元素的下标作为所述非零值在所述至少一个非零值中的位置m;其中,NNZ为所述稀疏矩阵中非零值的个数;
所述至少一个非零值对应的坐标存储在NNZ个元素的坐标数组中,根据所述位置m,从所述坐标数组中获取所述非零值的行坐标l;其中,所述行坐标l小于所述稀疏矩阵的行数N;
基于所述行坐标l和所述至少一个非零值中已经被遍历的第l行非零值的个数,确定所述非零值的访问索引。
9.根据权利要求8所述的系统,其中,所述生成模块还包括:
遍历所述稀疏矩阵,统计所述稀疏矩阵中每行非零值的个数,并存储到N个元素的存储每行非零值个数的数组中;
遍历所述存储每行非零值个数的数组,从i等于1开始,到i等于N-1结束,计算所述稀疏矩阵中第i行之前非零值的总个数并存储到N个元素的存储当前行之前非零值总个数的数组中。
10.根据权利要求9所述的系统,其中,所述生成模块还包括:
将所述存储当前行之前非零值总个数的数组的第l个元素的值,作为所述稀疏矩阵中第l行之前非零值的总个数;
将所述稀疏矩阵中第l行之前非零值的总个数与所述已经被遍历的第l行非零值的个数nnz_l相加,获取所述非零值的访问索引index;其中,nnz_l的初始值为0;
将所述位置m存储到按行顺序存储非零值位置的数组中;其中,所述访问索引index作为存储所述位置m的数组元素的下标;
所述已经被遍历的第l行非零值的个数nnz_l的值增加1。
11.根据权利要求10所述的系统,其中,所述访问模块还包括:
将按行顺序存储非零值位置的数组中的第z个元素的值作为第z个要访问的所述非零值在所述非零值数组中的元素的下标n;
根据所述下标n,从所述非零值数组中访问所述非零值。
12.一种提高涉及稀疏矩阵计算速率的装置,其中,所述装置包括至少一个处理器以及至少一个存储器;
所述至少一个存储器用于存储计算机指令;
所述至少一个处理器用于执行所述计算机指令中的至少部分指令以实现如权利要求1~6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911330882.7A CN111079082B (zh) | 2019-12-20 | 2019-12-20 | 一种提高涉及稀疏矩阵计算速率的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911330882.7A CN111079082B (zh) | 2019-12-20 | 2019-12-20 | 一种提高涉及稀疏矩阵计算速率的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111079082A true CN111079082A (zh) | 2020-04-28 |
CN111079082B CN111079082B (zh) | 2023-03-10 |
Family
ID=70316508
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911330882.7A Active CN111079082B (zh) | 2019-12-20 | 2019-12-20 | 一种提高涉及稀疏矩阵计算速率的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111079082B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111291870A (zh) * | 2020-05-09 | 2020-06-16 | 支付宝(杭州)信息技术有限公司 | 一种图深度学习中高维稀疏特征的处理方法和系统 |
CN115578243A (zh) * | 2022-10-09 | 2023-01-06 | 北京睿芯高通量科技有限公司 | 一种面向稀疏矩阵的膨胀处理方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102141976A (zh) * | 2011-01-10 | 2011-08-03 | 中国科学院软件研究所 | 稀疏矩阵的对角线数据存储方法及基于该方法的SpMV实现方法 |
CN105593843A (zh) * | 2013-08-30 | 2016-05-18 | 微软技术许可有限责任公司 | 稀疏矩阵数据结构 |
US9830302B1 (en) * | 2014-04-16 | 2017-11-28 | Knowles Electronics, Llc | Sparse matrix vector multiplication |
US20190012296A1 (en) * | 2017-07-08 | 2019-01-10 | British Cayman Islands Intelligo Technology Inc. | Method for matrix by vector multiplication for use in artificial neural network |
CN109597647A (zh) * | 2018-11-29 | 2019-04-09 | 龙芯中科技术有限公司 | 数据处理方法及设备 |
JP2019109626A (ja) * | 2017-12-15 | 2019-07-04 | 株式会社富士通アドバンストエンジニアリング | 疎行列ベクトル積演算装置及び疎行列ベクトル積演算方法 |
US20190361954A1 (en) * | 2018-05-25 | 2019-11-28 | Myrtle Software Limited | Processing Matrix Vector Multiplication |
-
2019
- 2019-12-20 CN CN201911330882.7A patent/CN111079082B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102141976A (zh) * | 2011-01-10 | 2011-08-03 | 中国科学院软件研究所 | 稀疏矩阵的对角线数据存储方法及基于该方法的SpMV实现方法 |
CN105593843A (zh) * | 2013-08-30 | 2016-05-18 | 微软技术许可有限责任公司 | 稀疏矩阵数据结构 |
US9830302B1 (en) * | 2014-04-16 | 2017-11-28 | Knowles Electronics, Llc | Sparse matrix vector multiplication |
US20190012296A1 (en) * | 2017-07-08 | 2019-01-10 | British Cayman Islands Intelligo Technology Inc. | Method for matrix by vector multiplication for use in artificial neural network |
JP2019109626A (ja) * | 2017-12-15 | 2019-07-04 | 株式会社富士通アドバンストエンジニアリング | 疎行列ベクトル積演算装置及び疎行列ベクトル積演算方法 |
US20190361954A1 (en) * | 2018-05-25 | 2019-11-28 | Myrtle Software Limited | Processing Matrix Vector Multiplication |
CN109597647A (zh) * | 2018-11-29 | 2019-04-09 | 龙芯中科技术有限公司 | 数据处理方法及设备 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111291870A (zh) * | 2020-05-09 | 2020-06-16 | 支付宝(杭州)信息技术有限公司 | 一种图深度学习中高维稀疏特征的处理方法和系统 |
CN115578243A (zh) * | 2022-10-09 | 2023-01-06 | 北京睿芯高通量科技有限公司 | 一种面向稀疏矩阵的膨胀处理方法 |
CN115578243B (zh) * | 2022-10-09 | 2024-01-05 | 北京中科通量科技有限公司 | 一种面向稀疏矩阵的膨胀处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111079082B (zh) | 2023-03-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108229655B (zh) | 卷积神经网络(cnn)处理方法和设备 | |
KR102631381B1 (ko) | 컨볼루션 신경망 처리 방법 및 장치 | |
CN110520834B (zh) | 替选循环限制 | |
CN109919311B (zh) | 生成指令序列的方法、执行神经网络运算的方法和装置 | |
EP3306478A1 (en) | Buffer addressing for a convolutional neural network | |
Daneshmand et al. | Hybrid random/deterministic parallel algorithms for convex and nonconvex big data optimization | |
US20180341479A1 (en) | Accessing data in multi-dimensional tensors using adders | |
CN111240744B (zh) | 一种提高涉及稀疏矩阵并行计算效率的方法和系统 | |
US9946539B1 (en) | Accessing data in multi-dimensional tensors using adders | |
EP3938950B1 (en) | Spatially sparse convolutional neural networks for inking applications | |
CN111079082B (zh) | 一种提高涉及稀疏矩阵计算速率的方法和系统 | |
US11763131B1 (en) | Systems and methods for reducing power consumption of convolution operations for artificial neural networks | |
CN113434702A (zh) | 一种用于图计算的自适应控制方法和系统 | |
CN109726798A (zh) | 一种数据处理方法及装置 | |
CN114444668A (zh) | 网络量化方法及系统及装置及介质及图像处理方法 | |
US8938484B2 (en) | Maintaining dependencies among supernodes during repeated matrix factorizations | |
CN115859016B (zh) | 基于处理器的运算方法、装置、计算机设备及存储介质 | |
CN117473949A (zh) | 表单动态布局方法及系统 | |
CN105740313B (zh) | 设计等值域图 | |
CN113222160A (zh) | 一种量子态的转换方法及装置 | |
CN114707655B (zh) | 一种量子线路转换方法、系统、存储介质和电子设备 | |
EP3258388A1 (en) | Parallelization techniques for variable selection and predictive models generation and its applications | |
CN110032445B (zh) | 大数据聚集计算方法及装置 | |
GB2585810A (en) | Buffer addressing for a convolutional neural network | |
CN116157808B (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 |