我正在研究CFD项目,我正在使用新的CUDA 5库“cusparse”来解决线性方程组。我测试了示例代码“conjugateGradientPrecond”。结果表明,使用ILU的预处理梯度比没有预处理的共轭梯度花费更多时间来得到最终答案。前一种算法确实需要较少的迭代,但在“cusparseScsrsv_solve”上需要花费很多时间,因此整体时间更长。
这是我的问题,是否有任何其他预处理的共轭梯度可以大大减少迭代,而不包括任何耗时的函数,如“cusparseScsrsv_solve”?
答案 0 :(得分:1)
诸如ILU0 / ILUT,IC0 / ICT之类的预处理技术将需要在CG的每次迭代(预处理矩阵的上下分解)中解析三次系统两次。从本质上讲,求解三角形系统是一个连续问题,但对于稀疏矩阵的情况,可以执行一些分析阶段以找到一定程度的并行化(参考this post)。一般来说,对于稀疏系统,人们不能提供最好的预处理技术,但简单的对角线(也称为Jacobi)预处理,可以忽略不计的开销,并为GPU实现提供高水平的并行化。