C++ 特征值库:特征值计算性能,gcc vs visual studio 2015

C++ 特征值库:特征值计算性能,gcc vs visual studio 2015,c++,visual-studio,gcc,eigen,eigen3,C++,Visual Studio,Gcc,Eigen,Eigen3,我试图使用以下代码,使用特征库提高特征值和特征向量计算的性能: MatrixXd eigMat =m.ToMatrixXd(); //internal conversion to MatrixXd EigenSolver<MatrixXd> es(eigMat,ShouldComputeEigenVectors); MatrixXd-eigMat=m.tomatricxxd()//内部转换为MatrixXd 特征解算器es(eigMat,应为计算型变换器); 最初,我使用的是一个

我试图使用以下代码,使用特征库提高特征值和特征向量计算的性能:

MatrixXd eigMat =m.ToMatrixXd(); //internal conversion to MatrixXd
EigenSolver<MatrixXd> es(eigMat,ShouldComputeEigenVectors);
MatrixXd-eigMat=m.tomatricxxd()//内部转换为MatrixXd
特征解算器es(eigMat,应为计算型变换器);
最初,我使用的是一个旧版本的Eigen和tdm gcc 4.8,并使用O2级别的优化来编译代码。计算1000 x 1000矩阵的特征值和向量大约需要5.4秒

几个月前,我切换到Visual Studio Community 2015,并将Eigen库升级到Eigen 3.3.2。现在,同样的计算大约需要18.7秒。为什么我的性能比GCC4.8差?我能做些什么回到5.4秒(不用说目标是用0.8秒的时间捕捉Matlab)

VS 2015的设置:

/GS/Qpar/GL/analyze-/W3/Gy/Zc:wchar_t/I“C:\wxWidgets-3.1.0\lib\vc_dll\mswu”/Zi/Gm-/O2/Ob2/sdl/Fd“Release\vc140.pdb”/Zc:inline/fp:precision/D“\u CRT\u SECURE\u NO\u WARNINGS”/D”WIN32“/D”\u UNICODE“/D”\u wxmswxmsw\uu”/D“/D”UNICODE“/D”UNICODE“/D”UNICODE“/D”UNICODE“/D”UNICODE“/D”UNICODE“/D”wxussingdll“/D”/D”NDEBUG”//errorReport:prompt/WX-/Zc:forScope/arch:SSE2/Gd/Oy-/Oi/MD/openmp/Fa“Release\”/EHsc/nologo/Fo“Release\”/Ot/Fp“Release\sciencesuit.pch”

顺便说一句,我尝试了以下方法,但没有或只有很少(1秒)的性能提升:

  • 不同的指令集,如AVX2
  • 浮点型,要快
  • OpenMP和无OpenMP选项
  • 优化,完全优化

  • 提前谢谢

    简而言之,cl(visualstudio编译器)在性能方面没有gcc做得好,特别是在像Eigen这样的模板库方面


    也就是说,尝试在VisualStudio中使用旧版本的Eigen。Eigen中有一些更改导致Visual Studio性能下降(例如)。

    您是否可以建议降级到某个特定版本?我必须升级的原因是我无法用VS2015编译Egen。顺便说一句,我没有得到一些其他功能的性能降级,如行列式,QR。鲁。只有特征值和向量计算受到很大影响。请尝试3.2.10。为什么你不能用VS2015编译一个旧的Egen,你会得到什么错误?我用3.2.5进行了尝试,显著改进,减少到10秒。用3.2.10再次尝试了10秒。任何3.3.x都大约是18到19秒。如果我们比较svd分解,那么结果有利于VS。但是是的,在本征gcc中,到目前为止在我的例子中表现更好。如果矩阵是对称的,使用
    自伴本征解算器
    ,速度会快得多。为了与MatLab速度相匹配,您可以使用Yes进行编译,我集成了
    自伴特征解算器
    ,时间为0.5秒,当矩阵对称时几乎快20倍。