Eigen ConjugateGradient 求解器不是 运行 多线程
Eigen ConjugateGradient solver not running multithreaded
我有一个稀疏矩阵 A,大小为 (91716x91716),有 3096684 个非零元素,还有一个稠密向量 rhs。我正在用这种方式用 ConjugateGradient 求解系统:
initParallel();
ConjugateGradient<SparseMatrix<double>, Lower|Upper> solver;
solver.compute(A);
const VectorXd response = solver.solve(rhs);
我正在编译:
g++ -O3 -I./eigen -fopenmp -msse2 -DEIGEN_TEST_SSE=ON -o example example.cpp
使用多线程和不使用多线程的执行时间大致相同(大约 1500 毫秒)。
我正在使用 Eigen 版本 3.2.8。
多线程性能不佳有什么原因吗?我实际上没有在我的系统监视器中看到多线程效果。有没有其他方法可以加速这个过程?
编辑:
对 Eigen::nbThreads() 的调用响应 12 个线程。
3.2.8版本的文档
Currently, the following algorithms can make use of multi-threading: general matrix - matrix products, PartialPivLU
http://eigen.tuxfamily.org/dox/TopicMultiThreading.html
由于开发文档提到更多算法正在使用多线程,您需要更改为 Eigen3.3-beta1 或开发分支以使用 ConjugateGradient 的并行版本。
我有一个稀疏矩阵 A,大小为 (91716x91716),有 3096684 个非零元素,还有一个稠密向量 rhs。我正在用这种方式用 ConjugateGradient 求解系统:
initParallel();
ConjugateGradient<SparseMatrix<double>, Lower|Upper> solver;
solver.compute(A);
const VectorXd response = solver.solve(rhs);
我正在编译:
g++ -O3 -I./eigen -fopenmp -msse2 -DEIGEN_TEST_SSE=ON -o example example.cpp
使用多线程和不使用多线程的执行时间大致相同(大约 1500 毫秒)。 我正在使用 Eigen 版本 3.2.8。
多线程性能不佳有什么原因吗?我实际上没有在我的系统监视器中看到多线程效果。有没有其他方法可以加速这个过程?
编辑: 对 Eigen::nbThreads() 的调用响应 12 个线程。
3.2.8版本的文档
Currently, the following algorithms can make use of multi-threading: general matrix - matrix products, PartialPivLU
http://eigen.tuxfamily.org/dox/TopicMultiThreading.html
由于开发文档提到更多算法正在使用多线程,您需要更改为 Eigen3.3-beta1 或开发分支以使用 ConjugateGradient 的并行版本。