0

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


4

1 回答 1

2

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

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

1)你为什么在你的代码中包含这样一个内部文件?在所有库中,您应该包含的文件都在“include”目录中。'src' 目录中的文件是内部文件,不应使用。

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

看看这个快速参考:这里 是你应该包括的头文件。

如果您还没有,您应该使用本指南来获取有关使用英特尔 MKL 的帮助。在这里。您有正确的定义 (EIGEN_USE_MKL_ALL),并希望为您的平台链接正确的库。

于 2013-12-05T19:20:36.513 回答