共轭梯度法(CG)是用来解稀疏线性系统的常用迭代方法,CG的理论知识可以参考An Introduction to the Conjugate Gradient Method Without the Agonizing PainMarch 1994
通过CUDA编程实现CG,以实现GPU并行,从而可以加快求解速度。该过程主要是调用CUDA中CUBLAS库和CUSPARSE库,比如稀疏矩阵和向量乘积的函数cusparseDcsrmv、向量点乘cublasDdot...。写完代码后没有测试过规模较大的对称正定阵(spd, symmetric positive define),所以代码中可能会有BUG没被发现。
(这一段写的较乱,可以跳过。直接看后面代码,代码写了注释)另外,我还有个疑问,留坑待填:我实现的代码中,迭代中的中间标量alpha,beta,tmp,rho,rhop都是定义在host上的,而文档中提到cublas_v2的优点时,提到了:
即函数的标量参数
,
可以通过device上变量的引用来传递,而不必须通过