Я пытаюсь повысить производительность вычисления собственного значения и собственного вектора с помощью библиотеки Eigen, используя следующий фрагмент кода:
MatrixXd eigMat =m.ToMatrixXd(); //internal conversion to MatrixXd
EigenSolver<MatrixXd> es(eigMat,ShouldComputeEigenVectors);
Первоначально я использовал более старую версию Eigen с tdm-gcc 4.8 и скомпилировал код, используя оптимизацию на уровне O2. Вычисление собственных значений и векторов для матрицы 1000 на 1000 заняло около 5,4 секунды.
Несколько месяцев назад я перешел на Visual Studio Community 2015 и обновил библиотеку Eigen до Eigen 3.3.2. Теперь тот же расчет занимает около 18,7 секунд. Почему у меня хуже производительность по сравнению с gcc 4.8? Могу ли я что-нибудь сделать, чтобы вернуться к 5,4 секунды (излишне говорить, что цель состоит в том, чтобы поймать Matlab, который работает за 0,8 секунды).
Настройки для 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:precise /D "_CRT_SECURE_NO_WARNINGS" /D "WIN32" /D "_UNICODE" /D "__WXMSW__" /D "UNICODE" /D "WXUSINGDLL" /D "NDEBUG" /D «EIGEN_NO_DEBUG» / D «_MBCS» / errorReport: приглашение / WX- / Zc: forScope / arch: SSE2 / Gd / Oy- / Oi / MD / openmp / Fa «Release» / EHsc / nologo / Fo «Release \» /От /Fp"Release\sciencesuit.pch"
Кстати, я попробовал следующее без прироста производительности или с очень небольшим (1 секунда):
- Различные наборы инструкций, такие как AVX2
- Плавающая точка модели, до Fast
- Варианты OpenMP и без OpenMP
- Оптимизация, полная оптимизация Бык
Заранее спасибо.