对于大规模稀疏矩阵,由于采用Krylov系列的迭代法(CG,Bicgstab及Gmres等)整个求解过程基本上只涉及矩阵与向量乘法,向量点积等运算,因此采用CSC,CSR等稀疏矩阵的存储格式十分方便,在存储后基本上只需要对CSR定义矩阵和向量的乘法运算及向量的点积,就可以很方便地完成整个计算过程。
以CSR存储格式为例,矩阵向量乘法算法如下:
而CG迭代法的具体算法如下:
由于A中的非0元素通常远超向量r的元素,因此实际上整个过程大量运算集中在Apj这一步。如果能够将这一步的计算效率提高,通常整个算法求解速度也会有较大提高。实际上,MKL的Blas库提供了CSR稀疏矩阵与向量的高效并行乘法运算,因此在实际进行Krylov迭代方法的编程时,这一步可通过调用Blas库完成:
mkl_cspblas_dcsrgemv(&transa, &m, Ax, ia, ja, x, y);
经过上述处理,5w未知数的求解时间从原来的66s减少为36s。
【完】