我注意到使用 Eigen 库进行 Cholesky 分解时性能有显着差异。
我正在使用最新版本的 Eigen (3.2.1) 和以下基准代码:
#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 -Wall -O3 -o bench bench.cc
编译这个基准测试,并第一次在 Windows 上运行它(使用 MinGW,[编辑:GCC 4.8 .1]) 和 Linux(编辑:GCC 4.8.1)第二次,但两次都在同一台机器上。
在 Windows 上,它给了我:
Cholesky decomposition in 10114 ms.
但是在 Linux 上我得到:
Cholesky decomposition in 3258 ms.
这还不到 Windows 所需时间的三分之一。
Eigen 在 Linux 系统上是否有可用的东西来实现这种加速?
如果可以,我如何在 Windows 上完成相同的操作?
最佳答案
确保您使用的是 64 位系统。如果不是这种情况,请不要忘记启用 SSE2 指令 (-msse2),但性能仍然不如 64 位系统,因为可用的 SSE 寄存器较少。
关于c++ - 为什么 Eigen 的 Cholesky 分解在 Linux 上比在 Windows 上快得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23523628/