稀疏矩阵的存储方法、向量计算方法、存储介质技术

技术编号:35644915 阅读:60 留言:0更新日期:2022-11-19 16:37
本发明专利技术公开了一种稀疏矩阵的存储方法、向量计算方法、存储介质。其中稀疏矩阵的存储方法,包括:步骤1,获取待存储矩阵的基本信息;步骤2,将待存储矩阵通过当前的分块进行划分,计算对应的存储效率;步骤3,增大分块的尺寸,将待存储矩阵通过当前的分块进行分割,计算对应的存储效率;步骤4,比较当前的存储效率与上一次的存储效率,若存储效率有提升,则返回步骤3;若存储效率不变或下降时,将当前的分块对应的上一次的分块的尺寸作为最佳尺寸,继续下一步骤;步骤5,将待存储矩阵通过最佳尺寸的分块进行划分,为每一个对应的矩阵区域选择其对应的最佳的存储格式进行存储。本发明专利技术使得所有不同分布的稀疏矩阵均可以得到稳定的压缩性能。同分布的稀疏矩阵均可以得到稳定的压缩性能。同分布的稀疏矩阵均可以得到稳定的压缩性能。

【技术实现步骤摘要】
稀疏矩阵的存储方法、向量计算方法、存储介质


[0001]本专利技术涉及向量计算的
,尤其涉及一种稀疏矩阵的存储方法。

技术介绍

[0002]集成稀疏矩阵压缩存储在图运算、社交网络分析、电路仿真、结构力学、流体力学等众多领域都有广泛应用。对于这些应用中出现的大型稀疏矩阵,为了压缩存储的需求,通常不对稀疏矩阵中的零元素进行存储,只记录每一个非零元素的行列坐标和元素值信息。
[0003]现有技术中对稀疏矩阵的存储格式有:十字链表法、三元组法、行压缩法、数组存储法。
[0004]十字链表法存储稀疏矩阵,矩阵中的单个元素的行列坐标值和数值以及两个指针分别指向同一行下一个元素的指针地址信息,同一列下一个元素地址信息。这种方法记录了全部的坐标信息和额外的两个指针,指针开销较大。
[0005]三元组法使用三个数组按顺序存储矩阵中的元素,三个数组分别存储行坐标、列坐标、元素值。对比十字链表法减少了指针的开销。如图4所示,待存储矩阵的第一行和第二行存在非零元素,则row数组存储行坐标1、2,待存储矩阵的第一列和第二列存在非零元素,则col存储列坐标1、2。元素值为1、3,则value存储1、3。
[0006]现在工业上常用的CSR格式也由三个数组记录全部信息,存储的信息分别如下:
[0007]Val[nonzero]:记录每个非零元素的值,数组长度为非零元素的数目。
[0008]Colindex[nonzero]:记录每个非零元素所在的列,数组长度为非零元素的数目。
[0009]Ptr[m+1]:记录每行的第一个非零元在数组val[nonzero]colindex[nonzero]中的索引,其中ptr[m]=nz,数组的长度为矩阵的行阶数+1。
[0010]如图5所示,Val[nonzero](即图5中的value)记录的是非零元素的值,分别为1、2、3、4、5、6、7。Colindex[nonzero](即图5中的colindex记录非零元素所在列,分别为0、1、2、3、1、2、3。Ptr[m+1](即图5中的ptr)记录每行的第一个非零元素在数组中的索引,分别为0、4、7、7、7,其含义是第一行有(4

0)个元素(即4个元素),分别是colindex[0]~colindex[3].第二行有(7

4)个元素(即3个元素),分别是colindex[4]~colindex[6].第三行有(7

7)个元素(即0个元素)。第四行同第三行,也是0个元素。其中,m是矩阵的行阶数,数组的长度为矩阵的行阶数+。nz是非零元素数量的意思。图中的黑色长方形直观地表达了压缩的效果。
[0011]行压缩法能够将在同一行的元素的行坐标压缩为一个数值,因此对比三元组法能够节省内存空间,经过测试,行压缩格式对于不同矩阵的压缩效果非常稳定。
[0012]实际生产环境而言,有一部分稀疏矩阵常常会以对角线为主的方式分布,因此对角线格式也是一种常用的压缩存储方法,使用两个数组存储矩阵中的元素。
[0013]Offsets[]:记录含有非零元素的对角线对于主对角线的偏移。
[0014]Data[]:按offsets中的排序依次将对应对角线中的元素全部存入元素数组中。
[0015]在矩阵的非零元素主要在对角线上分布时,对角线格式可以节省大量坐标信息,
但不足之处在于会存储多余的零元素,因此对角线格式的压缩效率并不稳定,对于矩阵元素不主要分布在对角线上的情况,对角线格式的内存占用迅速增长。
[0016]现有技术中有专利和论文研究使用一个与矩阵阶数相同的位图矩阵标识矩阵中非零元素的数量,对于有非零元素的位置则在位图对应位置改变比特值为1,这种方法有效压缩了坐标信息,但在矩阵元素极度稀疏的情况下,位图矩阵将会存储大量多余位置信息,压缩效率并不稳定。
[0017]综合来看,对于稀疏矩阵的压缩存储需要做到以下几点:1、对于任何分布情况的稀疏矩阵都应当有稳定的压缩效率。2、对于任何稀疏程度的稀疏矩阵都应当有稳定的压缩效率。3、尽可能地为坐标信息分配更少的内存,以获得更好的压缩效率。
[0018]因此,如何提供一种新的稀疏矩阵的存储方法是业界亟待解决的技术问题。

技术实现思路

[0019]为了解决现有技术中任意一种存储方法对于任何分布情况的稀疏矩阵来说无法得到稳定的压缩效率的问题,本专利技术提出了稀疏矩阵的存储方法、向量计算方法、存储介质。
[0020]本专利技术提出的稀疏矩阵的存储方法,包括:
[0021]步骤1,获取待存储矩阵的基本信息,并初始化分块的尺寸;
[0022]步骤2,将待存储矩阵通过当前的分块进行划分,计算当前的分块对应的存储效率;
[0023]步骤3,增大分块的尺寸,将待存储矩阵通过当前的分块进行分割,计算当前的分块对应的存储效率;
[0024]步骤4,比较当前的分块对应的存储效率与上一次的分块对应的存储效率,若存储效率有提升,则返回步骤3;若存储效率不变或下降时,将当前的分块对应的上一次的分块的尺寸作为最佳尺寸,继续下一步骤;
[0025]步骤5,将待存储矩阵通过最佳尺寸的分块进行划分,为每一个分块对应的矩阵区域选择其对应的最佳的存储格式进行存储。
[0026]进一步,所述待存储矩阵的基本信息包括行阶数、列阶数。
[0027]进一步,若待存储矩阵的行阶数或列阶数不能被最大尺寸的分块的行数或列数整除时,在步骤1中对所述待存储矩阵进行扩展,使得所述待存储矩阵的行阶数能够被最大尺寸的分块的行数整除,所述待存储矩阵的列阶数能够被最大尺寸的分块的列数整除,所述待存储矩阵扩展的行或列对应的元素为0。
[0028]进一步,所述步骤2中计算当前的分块对应的存储效率采用公式EFF=a*(m/stepy)*(n/stepx)

c*avg(node_num/(stepx*stepy))计算,所述EFF为当前的分块对应的存储效率,a为区分每个分块性质的数据量大小,m为待存储矩阵的行阶数,n为待存储矩阵的列阶数,stepx为当前的分块的行数,stepy为当前的分块的列数,c为经验系数,avg为用于返回其抽样选择的部分输入参数的平均值的函数,node_num为抽样选择的任意一个分块的元素数量。
[0029]进一步,所述分块内的元素数量通过以下步骤得到:
[0030]在得到最佳尺寸的分块后,初始化一个二维数组,所述二维数组的行数为待存储
矩阵的行阶数除以最佳尺寸的分块的行数,所述二维数组的列数为待存储矩阵的列阶数除以最佳尺寸的分块的列数;
[0031]遍历待存储矩阵中的非零元素,为各分块内的元素数量进行计数,并存储到所述二维数组的对应位置。
[0032]进一步,为每一个分块对应的矩阵区域选择其对应的最佳的存储格式进行存储具体包括如下步骤:
[0033]创建二维索引结构index[m1/ste本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种稀疏矩阵的存储方法,其特征在于,包括:步骤1,获取待存储矩阵的基本信息,并初始化分块的尺寸;步骤2,将待存储矩阵通过当前的分块进行划分,计算当前的分块对应的存储效率;步骤3,增大分块的尺寸,将待存储矩阵通过当前的分块进行分割,计算当前的分块对应的存储效率;步骤4,比较当前的分块对应的存储效率与上一次的分块对应的存储效率,若存储效率有提升,则返回步骤3;若存储效率不变或下降时,将当前的分块对应的上一次的分块的尺寸作为最佳尺寸,继续下一步骤;步骤5,将待存储矩阵通过最佳尺寸的分块进行划分,为每一个分块对应的矩阵区域选择其对应的最佳的存储格式进行存储。2.如权利要求1所述的稀疏矩阵的存储方法,其特征在于,所述待存储矩阵的基本信息包括行阶数、列阶数。3.如权利要求2所述的稀疏矩阵的存储方法,其特征在于,若待存储矩阵的行阶数或列阶数不能被最大尺寸的分块的行数或列数整除时,在步骤1中对所述待存储矩阵进行扩展,使得所述待存储矩阵的行阶数能够被最大尺寸的分块的行数整除,所述待存储矩阵的列阶数能够被最大尺寸的分块的列数整除,所述待存储矩阵扩展的行或列对应的元素为0。4.如权利要求1所述的稀疏矩阵的存储方法,其特征在于,所述步骤2中计算当前的分块对应的存储效率采用公式EFF=a*(m/stepy)*(n/stepx)

c*avg(node_num/(stepx*stepy))计算,所述EFF为当前的分块对应的存储效率,a为区分每个分块性质的数据量大小,m为待存储矩阵的行阶数,n为待存储矩阵的列阶数,stepx为当前的分块的行数,stepy为当前的分块的列数,c为经验系数,avg为用于返回其抽样选择的部分输入参数的平均值的函数,node_num为抽样选择的任意一个分块的元素数量。5.如权利要求4所述的稀疏矩阵的存储方法,其特征在于,所述分块内的元素数量通过以下步骤得到:在得到最佳尺寸的分块后,初始化一个二维数组,所述二维数组的行数为待存储矩阵的行阶数除以最佳尺寸的分块的行数,所述二维数组的列数为待存储矩阵的列阶数除以最佳尺寸的分块的列数;遍历待存储矩阵中的非...

【专利技术属性】
技术研发人员:陈杰冯文龙陈巨光白耿黄国勇戴勇
申请(专利权)人:深圳国微福芯技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1