Eigen ConjugateGradient求解器未运行mutithreaded

时间:2016-07-13 11:34:36

标签: multithreading linear-algebra sparse-matrix eigen eigen3

我有一个大小为(91716x91716)的稀疏矩阵A,其中包含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个线程。

1 个答案:

答案 0 :(得分:2)

版本3.2.8的文件

  

目前,以下算法可以使用多线程:一般矩阵 - 矩阵产品,PartialPivLU

http://eigen.tuxfamily.org/dox/TopicMultiThreading.html

由于开发文档提到更多算法使用多线程,您需要更改为Eigen3.3-beta1或开发分支以使用ConjugateGradient的并行版本。