Cal*_*ior 5 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;
}
Run Code Online (Sandbox Code Playgroud)
我使用此基准进行编译,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.
Run Code Online (Sandbox Code Playgroud)
但是在Linux上我得到:
Cholesky decomposition in 3258 ms.
Run Code Online (Sandbox Code Playgroud)
这不到Windows所需时间的三分之一。
Eigen在Linux系统上是否有可用的工具来实现这种加速?
如果是这样,我如何在Windows上完成相同的工作?
确保您使用的是64位系统。如果不是这种情况,请不要忘记启用SSE2指令(-msse2),但由于可用的SSE寄存器较少,因此性能仍然不如64位系统。