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秒)的性能提升:
提前谢谢 简而言之,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倍。