Я пытался использовать 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: ошибка: «complex» в пространстве имен «std» не называет тип
typedef std :: complex dcomplex;
^
../Eigen/src/Core/util/MKL_support.h:65:9: ошибка: «complex» в пространстве имен «std» не называет тип
typedef std :: complex scomplex;
Я не пытался загрузить библиотеку, но ошибка довольно проста:
Заголовочный файл, который вы включаете: ../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) и, надеюсь, правильные библиотеки, связанные для вашей платформы.
Других решений пока нет …