2013-12-05 1 views
0

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


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

Я использовал "г ++ EigenTest_IntelMKL.cpp -I ../ Эйген -DMKL_ILP64 -m64 -I/Opt/Intel/мкл/включить", и я получил следующее сообщение об ошибке компиляции:

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


ответ

2

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

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

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

Вы должны, вероятно, в том числе <Eigen/Core> & <Eigen/Dense>

Посмотрите на этой быстрой справки: here для заголовочных файлов вы должны быть в том числе.

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