2

A がスパース行列 (1,964,568 x 1,964,568 nnz=75256446) であり、b もスパース (1,964,568 x 1,964,568 nnz= 25354926) である Ax=b 方程式を C++ の Eigen ライブラリを使用して解きたいと思います。

最初は、Eigen Sparse LU を使用して問題を解決しようとしていましたが、数時間後にメモリが不足しました (128GB の RAM があります)。この後、Pardiso ソルバーに INTEL MKL ライブラリを含めました。これでも問題を解決できません。多分誰かが私の問題を解決するためのヒントを持っていますか?

#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);


}

コードをコンパイルして実行できます。より良いパフォーマンスとより少ないメモリが必要です。

4

1 に答える 1