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)。