需要帮助解决稀疏Ax = b

时间:2016-04-20 19:13:54

标签: c++ multithreading performance linear-algebra

我知道这个主题有很多信息,但我很难为我的具体问题找到最佳解决方案。

对于我的问题,A非常大(~145k X 145k)并且非常稀疏(每行最多9个非零值)。它不是正定的,也不是对称的,而且是复数值(单精度)。稀疏图案可以通过想象一个三对角矩阵,然后在其上方和下方添加两个“三角形”来显示,N远离主三角形。这在每行中给出3组3个非零,其中3组由N分开(对于给定的矩阵A,N是恒定的),并且以主对角线为中心。由于边界条件,约5%的行不会填满所有9个非零位置,因此这些行将具有主非零模式的子集。

我需要解决多个右侧(~1024)。我还需要在A中使用不同的数值来解析相同的系统,但是相同的稀疏模式。目前,我正在使用SuperLU(单线程)将A因子分解为LU,然后使用cusparse(特别是cusparseCcsrsm_solve)进行求解。

使用LU分解的稀疏直接求解器是我问题的最佳方法吗?哪个库是LU分解最快的?使用反向替换解决哪个问题最快?

1 个答案:

答案 0 :(得分:1)

就直接解算器中最快的而言,我更倾向于MUMPS。 作为主要参与者并且积极开发的图书馆(至少是我知道和使用过的图书馆)是MUMPSSuperLUUMFPACKSuiteSparse,{{1 }和Trilinos

如果我这样做,我会使用一个强大的迭代求解器,并使用不完整的LU分解进行预处理。

迭代求解器的用户之间有一个众所周知的经验法则,如果你的系统大于4x4,那么你需要使用迭代求解器。

如果您想使用迭代求解器,我建议您使用PETScTrilinos。主要区别在于前者是面向对象而后者不是。它们之间没有太大的性能差异。

对于GPU编程,我没有足够的经验。我曾经使用过一个名为PARALUTION的库,这是一个很好的库。它为您隐藏了GPU实现。

相关问题