【问题标题】:Using Eigen C++ Library with Intel MKL将 Eigen C++ 库与英特尔 MKL 结合使用
【发布时间】:2013-12-05 18:57:50
【问题描述】:

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


【问题讨论】:

    标签: c++ compiler-errors eigen eigen3


    【解决方案1】:

    我没有尝试下载库,但错误很简单:

    您包含的头文件:../Eigen/src/Core/util/MKL_support.hstd::complex&lt;double&gt; 定义了一个名为dcomplex 的typedef。但是此时没有人包含&lt;complex&gt;,这就是编译器失败的原因。

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

    您可能应该包括&lt;Eigen/Core&gt; &amp; &lt;Eigen/Dense&gt;

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      相关资源
      最近更新 更多