问题描述
我正在使用 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 (将#修改为@)