векторное добавление и точка в собственном не ускоряются mkl

Вот код, который я использую:

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

person DunkOnly    schedule 18.10.2018    source источник


Ответы (1)


На собственной странице при включении mkl:

EIGEN_USE_BLAS Разрешает использование внешних подпрограмм BLAS уровня 2 и 3.

Eigen не будет использовать здесь внешние подпрограммы, поскольку сложение векторов и скалярное произведение являются подпрограммами blas уровня 1.

person roro    schedule 18.10.2018
comment
EIGEN_USE_MKL_ALL определяет EIGEN_USE_BLAS, EIGEN_USE_LAPACKE и EIGEN_USE_MKL_VML. - person DunkOnly; 19.10.2018