Использование библиотеки Eigen C++ с Intel MKL

Я пытался использовать Intel MKL от Eigen(3). Я написал базовую программу умножения матриц, которая приведена ниже.


#include <iostream>
#define EIGEN_USE_MKL_ALL
#include "../Eigen/src/Core/util/MKL_support.h"
#include "Dense"
#include "EigenTools.h"
 #include <sys/time.h>

int main()
{
    int rows= 10000, cols =100;
    Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic> M(rows, cols);
    Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic> N(cols, rows);
    M.setRandom();
    N.setRandom();
    struct timeval tv_start;    
    struct timezone tz;
    gettimeofday(&tv_start, &tz);   
    Eigen::MatrixXf P = M*N;
    struct timeval tv_end;  
    gettimeofday(&tv_end, &tz); 
    float elapsedTime = (tv_end.tv_sec-tv_start.tv_sec)*1000000+tv_end.tv_usec-tv_start.tv_usec;
    elapsedTime /= 1000000;
    std::cout<<"rows, cols:"<<M.rows()<<","<<M.cols()<<std::endl;
    std::cout<<"elpsed Time in sec is :"<<elapsedTime<<"\n";

    return 0;
}

Я использовал "g++ EigenTest_IntelMKL.cpp -I../Eigen -DMKL_ILP64 -m64 -I /opt/intel/mkl/include" и получил следующую ошибку компиляции:

В файле, включенном из EigenTest_IntelMKL.cpp:3:0: ../Eigen/src/Core/util/MKL_support.h:64:9: ошибка: «комплекс» в пространстве имен «std» не называет тип typedef std:: комплекс dcomplex; ^ ../Eigen/src/Core/util/MKL_support.h:65:9: ошибка: «complex» в пространстве имен «std» не называет тип typedef std::complex scomplex;



person Sooraj    schedule 05.12.2013    source источник


Ответы (1)


Я не пытался загрузить библиотеку, но ошибка довольно проста:

Заголовочный файл, который вы включаете: ../Eigen/src/Core/util/MKL_support.h определяет typedef для std::complex<double> с именем dcomplex. однако на данный момент никто не включил <complex>, поэтому компилятор не работает.

1) Почему вы включаете такой внутренний файл в свой код? Во всех библиотеках файлы, которые вы должны включать, находятся в каталоге «include». Файлы в каталогах 'src' являются внутренними и не должны использоваться.

Вероятно, вам следует включить <Eigen/Core> & <Eigen/Dense>

Взгляните на этот краткий справочник: здесь файлы заголовков, которые вы должны включить.

Если вы еще этого не сделали, воспользуйтесь этим руководством, чтобы получить помощь по использованию Intel MKL. здесь. У вас есть правильное определение (EIGEN_USE_MKL_ALL) и, надеюсь, правильные библиотеки, связанные для вашей платформы.

person odedsh    schedule 05.12.2013