【问题标题】:Eigen ConjugateGradient solver not running multithreadedEigen ConjugateGradient 求解器未运行多线程
【发布时间】:2016-07-13 11:34:35
【问题描述】:

我有一个大小为 (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 毫秒)。 我正在使用本征版本 3.2.8。

多线程性能不佳有什么原因吗?我实际上在我的系统监视器中看不到多线程效果。有没有其他方法可以加速这个过程?

编辑: 对 Eigen::nbThreads() 的调用会响应 12 个线程。

【问题讨论】:

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


    【解决方案1】:

    3.2.8版本的文档

    目前,可以使用多线程的算法有:通用矩阵-矩阵乘积、PartialPivLU

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


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

    【讨论】:

    • 哦,我想我是因为这个而感到困惑:eigen.tuxfamily.org/dox-devel/TopicMultiThreading.html
    • 哪个是最新版本?
    • 你的文档比较新,但是需要用到dev分支
    • 我使用的是最新版本(稳定版),但如果我能找到下载位置,我不介意尝试开发版。
    • eigen首页,3.2.8版本下载链接下方
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多