向量加法和本征点不通过mkl加速

时间:2018-10-18 08:13:18

标签: c++ eigen eigen3 intel-mkl eigenvector

这是我使用的代码:

#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;

1 个答案:

答案 0 :(得分:2)

eigen page开始启用mkl:

  

EIGEN_USE_BLAS启用外部BLAS 2级和3级例程的使用

由于向量加法和点积是1级blas例程,因此,Eigen在这里将不使用外部例程。