一种GPU加速的批处理同构稀疏矩阵乘满向量的处理方法与流程

文档序号:11133888阅读:来源:国知局

技术特征:

1.一种GPU加速的批处理同构稀疏矩阵乘满向量的处理方法,大量同构稀疏矩阵A1~Abs的乘满向量操作:A1x1=b1,…,Absxbs=bbs,其中x1~xbs为被乘的满向量,b1~bbs为结果满向量,bs为批处理的矩阵数量,其特征在于:所述方法包括如下步骤:

(1)在CPU中将所有矩阵A1~Abs存储为行压缩存储格式,矩阵A1~Abs共享相同的行偏移数组CSR_Row和列号数组CSR_Col,行偏移数组元素CSR_Row[k]中存储的是矩阵第k行之前的非零元总数,k取值范围从1到n+1;每个矩阵具体的数值存储于各自的数值数组CSR_Val1~CSR_Valbs中,被乘满向量存储于数组x1~xbs中,结果满向量存储于数组b1~bbs中,数组CSR_Val1~CSR_Valbs、数组x1~xbs和数组b1~bbs都按照矩阵编号递增顺序连续存储;

(2)CPU将GPU内核函数所需数据传输给GPU;

(3)将矩阵A1~Abs的乘满向量任务分配给GPU线程,一个线程块负责矩阵A1~Abs中特定一行的乘满向量计算,并优化内存访问模式;

(4)GPU中执行批处理同构稀疏矩阵乘满向量内核函数spmv_batch,批处理同构稀疏矩阵乘满向量内核函数定义为spmv_batch<Nblocks,Nthreads>,其线程块大小Nthread为bs,线程块数量Nblocks=n,总线程数量为:Nblocks×Nthreads;调用内核函数spmv_batch<Nblocks,Nthreads>来批处理并行计算同构稀疏矩阵乘满向量。

2.根据权利要求1所述的GPU加速的批处理同构稀疏矩阵乘满向量的处理方法,其特征在于:所述步骤(2)中,其所需数据包括:稀疏矩阵的维数n,批处理的矩阵数量bs,稀疏结构数组CSR_Row和CSR_Col,稀疏矩阵数值数组CSR_Val1~CSR_Valbs,被乘满向量x1~xbs,结果满向量b1~bbs

3.根据权利要求1所述的GPU加速的批处理同构稀疏矩阵乘满向量的处理方法,其特征在于:所述步骤(3)中,所述数值数组CSR_Val1~CSR_Valbs、被乘满向量x1~xbs、结果满向量b1~bbs的存储区域均为bs行的矩阵,并对三个矩阵进行转置操作,以实现合并访问。

4.根据权利要求1所述的GPU加速的批处理同构稀疏矩阵乘满向量的处理方法,其特征在于:所述步骤(4)中,所述内核函数spmv_batch<Nblocks,Nthreads>的计算流程为:

(4.1)CUDA自动为每个线程分配线程块索引blockID和线程块中的线程索引threadID;

(4.2)将blockID和threadID赋值给变量bid和t,之后通过bid和t来索引bid号线程块中的t号线程;

(4.3)第bid号线程块负责所有矩阵第bid行的乘满向量操作;

(4.4)第bid号线程块中,每个线程负责一个矩阵的第bid行乘满向量,具体步骤如下:

1)读取当前行以及下一行的第一个非零元的索引CSR_Row[bid]和CSR_Row[bid+1],定义变量j=CSR_Row[bid];

2)判断j是否小于CSR_Row[bid+1],否则线程结束执行;

3)读取当前列CSR_Col[j],并把它赋值给变量cur_col;

4)更新结果满向量bt的bid号元素值bt[bid]+=CSR_Valt[j]×xt[cur_col];

5)j=j+1,返回2)。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1