一种带状稀疏矩阵的数据存储格式及其乘法加速方法技术

技术编号:35520073 阅读:20 留言:0更新日期:2022-11-09 14:38
本发明专利技术提供了一种带状稀疏矩阵的数据存储格式及其乘法加速方法,属于矩阵数据存储格式以及高性能乘法计算领域,该发明专利技术利用矩阵的稀疏带的特殊结构(即同一稀疏带内所有行的列下标相同),提供了一种带状稀疏矩阵的数据存储格式,避免同一稀疏带内相同列下标的冗余存储,是一种高效的压缩的存储格式;同时,基于该数据储存格式,本发明专利技术提供了一种带状稀疏矩阵的数据存储格式的乘法加速方法,实现其中稠密矩阵的行的复用,减少了全局内存数据传输的消耗,提高了计算效率。提高了计算效率。提高了计算效率。

【技术实现步骤摘要】
一种带状稀疏矩阵的数据存储格式及其乘法加速方法


[0001]本专利技术涉及一种改善带状稀疏矩阵乘法的实现方法,属于矩阵数据存储格式以及高性能乘法计算领域,尤其适用于一种带状稀疏矩阵的数据存储格式及其乘法加速方法。

技术介绍

[0002]稀疏矩阵是指其元素大部分是零的矩阵,而非零元素所占比例非常小,往往小于总数的1%。稀疏矩阵乘法广泛应用在大型科学计算、深度学习、图形分析和经济建模等领域。而深度学习领域的稀疏矩阵乘法问题通常表示为稀疏

密集矩阵乘法(SpMM,sparse

dense matrix multiplication),一般表示为给定大小为m*k的稀疏矩阵A和大小为k*n的稠密矩阵B,求大小为m*n的矩阵C的过程。在深度学习的特定背景下,高效的稀疏性乘法已成为提高训练和推理性能以及在保持准确性的同时减小模型大小的主要方法之一。尤其在图神经网络(GNN)中,输入图的结构表示为邻接矩阵或邻接表,通常具有稀疏性。SpMM作为GNN中的主要操作,即使在GPU等并行硬件上也是一个耗时的步骤,为了在GNN应用程序的训练和推理中实现高性能,加速SpMM算法具有重要意义。
[0003]为了节省存储空间,减少矩阵乘法次数,稀疏矩阵通常采用压缩方法进行存储,即只存储矩阵中的非零元素,通过这种高效的存储方式可以提高矩阵乘法整体性能,最常用的存储格式是CSR方法,参见文献[1]。假设稀疏矩阵A的大小为m*k,含有非零元的个数为nnz。CSR格式按行对非零元进行压缩,需要三个数组来表示矩阵A:
[0004]·
val[nnz]:存储每个非零元的值;
[0005]·
colInd[nnz]:存储每个非零元所在的列下标;
[0006]·
rowPtr[m+1]:存储每行的第1个非零元在val和colInd的起始偏移位置,即位于该行前的非零元的总数,因此最后一个元素表示矩阵非零元的总数nnz。
[0007]基于CSR格式的SpMM实现核心代码如下:
[0008][0009][0010]随着技术的发展,现有基于GPU实现的稀疏矩阵乘法,对于稀疏矩阵存储格式的改
进主要采用分块技术,将数据聚集成稠密块,然后进行计算。目前关于稀疏矩阵存储格式这方面,常见的针对通用处理器的稀疏矩阵分块存储格式是Vuduc 2005年提出的BCSR格式。BCSR格式是对CSR的扩展,其存储方式是将稀疏矩阵作为一个整体按照固定大小的分块来划分整个矩阵,每个分块的大小可定为r*c,则稀疏矩阵按行划分为了的块按照CSR的方式进行存储,整体存储方式与CSR大致相同,其中,表示向上取整。BCSR相对于CSR具有数据连续性的优势,且固定大小的分块使得并行优化效率提升,有利于负载平衡的实现。但BCSR在存储过程中将每个块看作稠密矩阵且按稠密矩阵存储,因此会显式地引入零元素,尤其当非零元在稀疏矩阵中分布较为分散时,带来存储代价和性能损失。并且BCSR在存储非零元子块时存在以下限制:

索引坐标的行列值必须是分块大小的行列大小的倍数,否则需要填充整列或整行的零元;

由于整个矩阵使用单一的分块大小,原始矩阵小的稠密块必须填充更多的零元去维持分隔块的结构。
[0011][1]M.Naumov,L.Chien,P.Vandermersch,and U.Kapasi:Cusparse library.2010.
[0012][2]Huang,G.,et al.,GE

SpMM:General

purpose Sparse Matrix

Matrix Multiplication on GPUs for Graph Neural Networks.2020.
[0013][3]网址:https://docs.nvidia.com/cuda/cusparse

技术实现思路

[0014]稀疏矩阵有一种常见的具有局部性特征结构的矩阵:带状稀疏矩阵,即在一个稀疏矩阵中,有若干稀疏带,如图1。有鉴于此,本专利技术针对带状稀疏矩阵的性质,对稀疏矩阵存储格式CSR做了改进,提出了一种带状稀疏矩阵的数据存储格式(band sparse matrix format):BRCV,意在一定程度上减少冗余的存储空间,同时相比较CSR格式而言,实现带状稀疏矩阵SpMM算法在GPU上的高效计算。
[0015]为达到上述目的,本专利技术提供如下技术方案:
[0016]一种带状稀疏矩阵的数据存储格式,其特征在于,由五个数组:b、rc、rv、c、v组成,对于含有p个稀疏带{D1,

,D
p
}的m*k维带状稀疏矩阵A,b为稀疏带的高度累加值,rc为稀疏带首行的非零元数累加值,rv为稀疏带所有非零元总数的累加值,c为每个稀疏带首行非零元的列下标,v为带状稀疏矩阵A中每个非零元的值;所述的稀疏带为矩阵中连续若干行的非零元数量及相对应的列下标都相同的这若干行。
[0017]进一步,通过预先对稀疏矩阵A的稀疏带个数p和维度m进行比较选择存储格式,当p<(2m

1)/4时采用一种带状稀疏矩阵的数据存储格式进行处理,否则采用CSR格式进行处理。
[0018]用于带状稀疏矩阵A的数据存储格式的方法,其特征在于,包含以下步骤:
[0019]S31:遍历带状稀疏矩阵A,依次识别出p个稀疏带{D1,

,D
p
},在D1前插入一个空的稀疏带D0,与其构成数组稀疏带{D0,D1,

,D
p
};
[0020]S32:遍历数组稀疏带,将D0到D
i
的高度进行累加,分别得到b[i]的值;进而获得p+1维的数组b={b[i]|0≤i≤p};
[0021]S33:遍历数组稀疏带,将D0到D
i
的首行的非零元数进行累加,分别得到rc[i]的值;进而获得p+1维的数组rc={rc[i]|0≤i≤p};
[0022]S34:遍历前p个数组稀疏带,将稀疏带D0到D
i
的所有行的非零元总数进行累加,分别得到rv[i]的值,进而获得p维的数组rv={rv[i]|0≤i≤p

1};
[0023]S35:遍历带状稀疏矩阵A的稀疏带{D1,

,D
p
},依次提取每个稀疏带首行中所有非零元的列下标,并按顺序存储到数组c中;
[0024]S36:遍历带状稀疏矩阵A,记录每个非零元的值v[i],从而得到数组v={v[i]|1≤i≤nnz},其中,nnz为带状稀疏矩阵非零元总个数;
[0025]S37:将b、rc、rv、c、v五个数组进行打包,作为带状稀疏矩阵A的数据存储格式。
[0026]针对乘法C=A*B,其中,B为k*n维稠密矩阵,应用本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种带状稀疏矩阵的数据存储格式,其特征在于,由五个数组:b、rc、rv、c、v组成;对于含有p个稀疏带{D1,

,D
p
}的m*k维带状稀疏矩阵A,b为稀疏带的高度累加值,rc为稀疏带首行的非零元数累加值,rv为稀疏带所有非零元总数的累加值,c为每个稀疏带首行非零元的列下标,v为带状稀疏矩阵A中每个非零元的值;所述的稀疏带为矩阵中连续若干行的非零元数量及相对应的列下标都相同的这若干行。2.根据权利要求1所述的一种带状稀疏矩阵的数据存储格式,其特征在于,通过预先对稀疏矩阵A的稀疏带个数p和维度m进行比较选择存储格式,当p<(2m

1)/4时采用一种带状稀疏矩阵的数据存储格式进行处理,否则采用CSR格式进行处理。3.应用于权利要求1所述的一种带状稀疏矩阵的数据存储格式的一种带状稀疏矩阵A的数据存储格式的方法,其特征在于,包括以下步骤:S31:遍历带状稀疏矩阵A,依次识别出p个稀疏带{D1,

,D
p
},在D1前插入一个空的稀疏带D0,与其构成数组稀疏带{D0,D1,

,D
p
};S32:遍历数组稀疏带,将D0到D
i
的高度进行累加,分别得到b[i]的值;进而获得p+1维的数组b={b[i]|0≤i≤p};S33:遍历数组稀疏带,将D0到D
i
的首行的非零元数进行累加,分别得到rc[i]的值;进而获得p+1维的数组rc={rc[i]|0≤i≤p};S34:遍历前p个数组稀疏带,将稀疏带D0到D
i
的所有行的非零元总数进行累加,分别得到rv[i]的值,进而获得p维的数组rv={rv[i]|0≤i≤p

1};S35:遍历带状稀疏矩阵A的稀疏带{D1,

,D
p
},依次提取每个稀疏带首行中所有非零元的列下标,并按顺序存储到数组c中;S36:遍历带状稀疏矩阵A,记录每个非零元的值v[i],从而得到数组v={v[i]|1≤i≤nnz},其中,nnz为带状稀疏矩阵非零元总个数;S37:将b、rc、rv、c、v五个数组进行打包,作为带状稀疏矩阵A的数据存储格式。4.应用于权利要求1所...

【专利技术属性】
技术研发人员:陈长波刘丽杨文强
申请(专利权)人:中国科学院重庆绿色智能技术研究院
类型:发明
国别省市:

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

1