eigen3:编译时间长,调试速度慢

问题描述

我正在使用 eigen 进行一些矩阵运算,但是使用 eigen 编译 src 文件的时间非常慢,慢的意思是当文件只有 300 行时需要大约 40 秒。我只使用小于 Matrix4f 的 Matrix,甚至不使用动态大小矩阵,仅用于一些矩阵乘法和矩阵分解(SVD 和 FullPivLU)。

在我的另一个项目中,一个cpp文件1000行,编译需要几分钟,输出.so文件真的很大,100M左右。我必须打开 -bigobj 选项。

这在调试(我将优化设置为 -O0)和发布(-O3)模式下都会发生。我试过在标题添加 #define NDEBUG 和 EIGEN_NO_DEBUG,没有帮助。

我在下面写了一段非常小的代码 test.cpp:

#include </home/user/mywork/software/eigen-3.3.9/Eigen/Dense>
#include "iostream"
using namespace std;
using namespace Eigen;

void test() 
{
    Matrix3f A;
    A << 1,2,3,4,8,5,9;
    BDCSVD<Matrix3f> svd(A,ComputeFullU | ComputeFullV);
    Matrix3f U = svd.matrixU();
    Matrix3f V = svd.matrixV();
    cout << "------Eigen------" << endl;
    cout << "A" << A << endl;
    cout << "U" << U << endl;
    cout << "V" << V << endl;
}

int main()
{
    test();
    return 0;
}

编译命令

g++ test.cpp -o test_eigen

编译耗时20s,输出'test_eigen'为5.6M!!!

我的操作系统是 ubuntu 16.04,我使用 cmake,在 CMakelist 中,唯一与 eigen 相关的是包含它的目录。本征版本为3.3.9。

有人知道吗?非常感谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)