使用Eigen C ++库和英特尔MKL

时间:2013-12-05 18:57:50

标签: c++ compiler-errors eigen eigen3

我尝试使用Eigen的英特尔MKL(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'中的'complex'没有命名类型  typedef std :: complex dcomplex;          ^ ../Eigen/src/Core/util/MKL_support.h:65:9:错误:名称空间'std'中的'complex'没有命名类型  typedef std :: complex scomplex;


1 个答案:

答案 0 :(得分:2)

我没有尝试下载该库,但错误非常简单:

您要包含的标头文件:../Eigen/src/Core/util/MKL_support.hstd::complex<double>定义了一个名为dcomplex的typedef。但是在这一点上没有人包含<complex>,这就是编译器失败的原因。

1)为什么要在代码中包含这样的内部文件?在所有图书馆中,您应该包含的文件都包含在&#39; include&#39;目录。在&#39; src&#39;目录是内部的,不应该使用。

你应该包括<Eigen/Core> & <Eigen/Dense>

请查看此快速参考:here,了解您应该包含的头文件。

如果您尚未使用,则应使用本指南获取有关使用英特尔MKL的帮助。 here。您有正确的定义(EIGEN_USE_MKL_ALL),并希望为您的平台链接正确的库。