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: エラー: 'complex' in namespace 'std' does not name a type 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 定義を定義します。std::complex<double>ただし、この時点では誰も含まれていない<complex>ため、コンパイラは失敗します。

1) コードにそのような内部ファイルを含めているのはなぜですか? すべてのライブラリで、含める必要があるファイルは「include」ディレクトリにあります。「src」ディレクトリのファイルは内部用であり、使用しないでください。

おそらく含める必要があります<Eigen/Core> & <Eigen/Dense>

このクイック リファレンスを参照してください 。インクルードするヘッダー ファイルについては、こちらを参照してください。

インテル® MKL の使用に関するヘルプをまだ入手していない場合は、このガイドを使用してください。ここに。正しい定義 (EIGEN_USE_MKL_ALL) があり、うまくいけば、プラットフォームにリンクされた正しいライブラリがあります。

于 2013-12-05T19:20:36.513 に答える