Вот код, который я использую:
#define EIGEN_USE_MKL_ALL
#include <iostream>
#include <Eigen/Core>
#include <Eigen/Dense>
#include <time.h>
using namespace std;
using namespace Eigen;
int main(int argc, char *argv[])
{
VectorXf a = VectorXf::Random(100000000);
VectorXf b = VectorXf::Random(100000000);
double start = clock();
VectorXf c = a+b;
float d = a.dot(b);
double endd = clock();
double thisTime = (double)(endd - start) / CLOCKS_PER_SEC;
cout << thisTime << endl;
return 0;
}
Скомпилируйте с помощью MKL:
g++ mkl_test.cpp /home/tong.guo/intel/mkl/lib/intel64/libmkl_rt.so -Ieigen -Wl,--no-as-needed -lpthread -lm -ldl -m64 -I/home/tong.guo/intel/mkl/include
Удалите первую строку кода и скомпилируйте без MKL:
g++ mkl_test.cpp -Ieigen
Время почти одинаковое.
Но вычисление матрицы может быть ускорено.Измените код ниже, я вижу скорость.
MatrixXd a = MatrixXd::Random(1000, 1000);
MatrixXd b = MatrixXd::Random(1000, 1000);
double start = clock();
MatrixXd c = a * b;
double endd = clock();
double thisTime = (double)(endd - start) / CLOCKS_PER_SEC;
cout << thisTime << endl;