带Eigen_的Eigen_MKL_ALL 我用EngIsUnEngBLAS选项编译了我的C++项目(使用EGEN 3.2.8),链接到MKL BLAS,每件事情都很好,这确实加速了我的程序(可能是由于很多复值矩阵向量乘法)< /P>

带Eigen_的Eigen_MKL_ALL 我用EngIsUnEngBLAS选项编译了我的C++项目(使用EGEN 3.2.8),链接到MKL BLAS,每件事情都很好,这确实加速了我的程序(可能是由于很多复值矩阵向量乘法)< /P>,c++,eigen,eigen3,C++,Eigen,Eigen3,然后,我还尝试了EIGEN_USE_MKL_ALL,但是出现了一些类似的错误: /eigen3/Eigen/src/QR/ColPivHouseholderQR_MKL.h:94:1 error: Cannot convert "Eigen::PlainObjectBase<Eigen::matrix<int,-1,1>>::Scalar* {aka int*}" to "long long int*" in initialization EIGEN_MKL_OR_COL

然后,我还尝试了EIGEN_USE_MKL_ALL,但是出现了一些类似的错误:

/eigen3/Eigen/src/QR/ColPivHouseholderQR_MKL.h:94:1 error:
Cannot convert "Eigen::PlainObjectBase<Eigen::matrix<int,-1,1>>::Scalar*
{aka int*}" to "long long int*" in initialization
EIGEN_MKL_OR_COLPIV(...) 
/eigen3/Eigen/src/QR/ColPivHouseholderQR_MKL.h:94:1错误:
无法转换“Eigen::PlainObjectBase::Scalar”*
初始化中的{aka int*}到“long long int*”
本征值(…)
这里有两个问题:

  • EIGEN_USE_BLAS实现了4倍的加速,尽管我没想到会有这么多可能的原因

  • EIGEN_USE_MKL_似乎都与LAPACK的东西有一些类型冲突,如何修复编译错误

  • MKL使用了新的指令集(每个时钟8个32位
    float
    操作,带有FMA和3个操作数指令),而Eigen 3.2.8仅支持最多4个32位
    float
    操作(每个时钟)。正如ggael所指出的,您可以更新到3.3beta1以获得更好的性能

  • 你可以试试Eigen 3.3-beta1。目前我无法重现你的问题。您可能希望提供代码示例和编译选项。但根据您的错误消息,我猜您使用的是ILP64接口,即。您可以改用LP64

  • MKL使用了新的指令集(每个时钟8个32位
    float
    操作,带有FMA和3个操作数指令),而Eigen 3.2.8仅支持最多4个32位
    float
    操作(每个时钟)。正如ggael所指出的,您可以更新到3.3beta1以获得更好的性能

  • 你可以试试Eigen 3.3-beta1。目前我无法重现你的问题。您可能希望提供代码示例和编译选项。但根据您的错误消息,我猜您使用的是ILP64接口,即。您可以改用LP64


  • 为了完成康诗音的回答,Egen 3.3支持AVX/FMA,因此可以实现类似的性能。您需要在启用AVX和FMA指令的情况下编译。例如,对于GCC、clang或ICC:
    -mavx-mfma

    要完成抗世音回答,Egen 3.3支持AVX/FMA,因此可以实现类似的性能。您需要在启用AVX和FMA指令的情况下编译。例如,对于GCC、clang或ICC:
    -mavx-mfma

    谢谢您的确认,问题2呢?我认为kangshiyin关于LP64接口是正确的。谢谢您的确认,问题2呢?我认为kangshiyin关于LP64接口是正确的。您是否将MKL与ILP64接口一起使用?您是否将MKL与ILP64接口一起使用?