为什么 Eigen's Cholesky 分解在我的 Ubuntu 上很慢
Why is Eigen's Cholesky decomposition very slow on my Ubuntu
我在核心i5机器上使用Ubuntu 14.04。以下代码在不同的计算机上进行了测试,运行时间非常快(3258 毫秒(,但在我的系统上需要 112921 毫秒。我使用 g++ 作为编译器。
#include <iostream>
#include <chrono>
#include <Eigen/Core>
#include <Eigen/Cholesky>
using namespace std;
using namespace std::chrono;
using namespace Eigen;
int main()
{
const MatrixXd::Index size = 4200;
MatrixXd m = MatrixXd::Random(size, size);
m = (m + m.transpose()) / 2.0 + 10000 * MatrixXd::Identity(size, size);
LLT<MatrixXd> llt;
auto start = high_resolution_clock::now();
llt.compute(m);
if (llt.info() != Success)
cout << "Cholesky decomposition failed!" << endl;
auto stop = high_resolution_clock::now();
cout << "Cholesky decomposition in "
<< duration_cast<milliseconds>(stop - start).count()
<< " ms." << endl;
return 0;
}
当您在调试模式下编译程序(例如g++ -std=c++11
(时,很多事情都会在后台发生。回想一下发生崩溃时可以看到的信息。所有这些信息和家政服务都需要时间。
因此,当您的程序经过测试并且运行良好时,您不再需要内务管理,您希望性能发挥作用。
使用优化标志,如 O1、O2 或 O3(还有更多(。使用哪一个?很大程度上取决于您的应用程序,因此请至少尝试这三个选项。
注意:请确保使用大写的 Omikron,否则(如果您键入小写的 omikron 或零(,您会认为您在启用优化的情况下编译了代码,但它仍然会在调试模式下编译。
采购 GCC 教程:
生成 gdb 的符号信息和许多警告消息。
g++ -g -Wall myprog.C -o myprog
在带有警告的 Solaris 机器上生成优化的代码。-O 是大写的 o,而不是数字 0!
g++ -Wall -O1 -mv8 myprog.C -o myprog
我假设您是在调试模式下编译而没有优化的。
如果您使用的是 CMake,请使用 cmake -DCMAKE_BUILD_TYPE=Release
或 cmake -DCMAKE_BUILD_TYPE=ReleaseWithDebugInfo
进行构建。否则,请尝试将优化标志-O3
添加到 g++ 编译器。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 如何解决我在 Ubuntu 19.04 下使用 GLFW 时遇到的这个编译问题?
- 无法在我的ubuntu中正确安装MySQL连接器/c++
- ALSA 的snd_pcm_get_chmap总是在 Ubuntu 18.04 上在我的默认设备(脉冲)上返回 NULL。
- 在Ubuntu 14.04启动我的应用程序时,非法说明(核心转储)错误,如何查看转储
- 如何在 Ubuntu 上提高我的程序磁盘读取速度
- 我正在尝试运行CUDA示例,但是我在Ubuntu 16.04 Lts上的OpenGL(libglew.a)有问题
- 我需要Ubuntu中C++的安装路径
- 如何在Linux(Ubuntu)上将SDL静态链接到我的a.out
- 当我尝试在 Ubuntu bash 中运行我的程序时,出现此错误:" /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21
- 为什么 Eigen's Cholesky 分解在我的 Ubuntu 上很慢
- C++为什么我的代码在Ubuntu上给出了想要的结果,但在Windows7上却有未定义的行为
- 无法访问我的网络摄像头opencv ubuntu
- 如何在linux(Ubuntu 14.04)中找到我的OpenGL版本