我尝试使用Eigen(3)的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;
}

我使用了“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:错误: namespace “std”中的“complex”未命名类型
typedef std::complex dcomplex;
^
../Eigen/src/Core/util/MKL_support.h:65:9:错误: namespace “std”中的“complex”未命名类型
typedef std::complex scomplex;

最佳答案

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

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

1)为什么要在代码中包含这样的内部文件?在所有库中,您应包括的文件位于“include”目录中。 “src”目录中的文件是内部文件,不应使用。

您可能应该包括<Eigen/Core> & <Eigen/Dense>
查看此快速引用:here,其中应包含头文件。

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

关于c++ - 结合使用Eigen C++库和Intel MKL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20408312/

10-11 22:48
查看更多