parallel-processing - 使用 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, Eigen::Dynamic, 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。我看过这篇几乎相同的帖子,但我仍然遇到顺序运行问题。
编辑: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();
解决方案
推荐阅读
- git - 无法在 gitlab cicd 中设置子模块
- flutter - 如何指定泛型类型以便我们可以在 Flutter 中对泛型类型进行一些操作?
- javascript - 将JS中的两个数组与第一个数组中索引0处的字符串连接起来
- react-native - SplashScreen.hide() 已弃用,取而代之的是 SplashScreen.hideAsync()
- react-native - 由于先前的图像正在上传到服务器,因此状态不会同时更新
- python - 如何将海洋图保存为 svg 或 png
- javascript - Joi 验证未验证必填字段
- javascript - 请解释此代码如何用于使用 Javascript 的 Matrix Transpose
- vue.js - Datatable onchange中的v-select不能传值
- r - 创建一个矩阵,其奇数行移动 0.5