gpt4 book ai didi

c++ - 使用 eigen/Intel MKL 求解稀疏线性系统

转载 作者:行者123 更新时间:2023-11-30 04:44:34 45 4
gpt4 key购买 nike

我想通过使用 C++ 中的 Eigen 库求解 Ax=b 方程,其中 A 是稀疏矩阵 (1,964,568 x 1,964,568 nnz=75256446),b 也是稀疏矩阵 (1,964,568 x 1,964,568 nnz= 25354926)。

起初我试图使用 Eigen Sparse LU 来解决我的问题,几个小时后我的内存用完了(我有 128GB RAM)。在此之后,我将 INTEL MKL 库包含在 Pardiso 求解器中。即使这样我也无法解决我的问题。也许有人有一些提示来解决我的问题?

#define EIGEN_USE_MKL_ALL

#include <Eigen/Sparse>
#include <unsupported/Eigen/SparseExtra>
#include <iostream>
#include <Eigen/OrderingMethods>
#include <Eigen/PardisoSupport>


typedef Eigen::SparseMatrix<double>SpMat;
typedef Eigen::COLAMDOrdering<int>Order;

int main()
{

SpMat A;
SpMat B;
SpMat X;

Eigen::loadMarket(A, "MatK.mtx");
Eigen::loadMarket(B, "MatM.txt");

A.makeCompressed();
B.makeCompressed();

Eigen::PardisoLU<SpMat>solver;

solver.analyzePattern(A);

solver.factorize(A);

X = solver.solve(B);


}

我可以编译我的代码并运行它。我只需要更好的性能和更少的内存。

最佳答案

因为我还没有找到解决这个问题的方法。我试图改变我的 RHS 矩阵,因为大量的列是个大问题。我在我的算法中看到我的 RHS 乘以另一个矩阵,这将列减少到 10。这样就可以使用英特尔 Pardiso LDLT 求解器而不是 LU 来求解。迭代求解器需要太多迭代才能收敛。

关于c++ - 使用 eigen/Intel MKL 求解稀疏线性系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57705452/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com