如何解决使用 RowMajor 稀疏矩阵并行 BiCGSTAB 仍然按顺序运行
我正在使用 BiCGSTAB 来求解稀疏方程组。我已将 MPFR 用于多精度和以下代码,但代码是按顺序运行的。 我跟着Make Eigen run in parallel。
using MatrixXmp = Eigen::Matrix<mpfr::mpreal,Eigen::Dynamic,Eigen::Dynamic>;
using VectorXmp = Eigen::Matrix<mpfr::mpreal,1>;
...
omp_set_num_threads(num_threads);
Eigen::setNbThreads(num_threads);
mpfr::mpreal::set_default_prec(128);
Eigen::BiCGSTAB<Eigen::SparseMatrix<mpfr::mpreal,Eigen::RowMajor>> solver;
solver.setTolerance(tol);
solver.setMaxIterations(maxiter);
solver.compute(A);
xx = solver.solve(b);
编译:
g++ -o solver main.cpp -lmpfr -lgmp -fopenmp
我检查了 top
的 cpu 使用情况。我的操作系统是 Ubuntu 20.04。
我见过几乎相同的 this post,但我仍然有顺序运行问题。
编辑:我像这样填充矩阵 A
:
Eigen::SparseMatrix<mpfr::mpreal,Eigen::RowMajor> A(num_rows,num_rows);
A.reserve(Eigen::RowVectorXi::Constant(num_elements,3));
for (int i = 0; i < num_elements; i++)
{
A.insert(rows[i],cols[i]) = data[i];
}
A.makeCompressed();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。