c++ - 为什么 Eigen 的 Cholesky 分解在 Linux 上比在 Windows 上快得多?

标签 c++ linux performance eigen

我注意到使用 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/

相关文章:

c++ - 关于 C++ 的简单工作的问题?

c++ - 带模板的类声明

java - 如何在 Ubuntu 的 .sh 文件中定位 java 类?

java - 从 Java 中的 BufferedReader 对象中提取全部内容的最佳方法是什么?

python - 性能从 if : pass statements 开始

c++ - 有什么理由不让成员函数成为虚拟的吗?

C++ 标准默认命名空间

linux - 如何让 Git 在 Linux 上将 CRLF 文件转换为 LF?

linux - 在 Ubuntu 12.04 中使用 USB 转串口 -/dev/ttyUSB0 丢失

sql - Postgres 通过 ODBC 查询慢了一个数量级?