Nano Hash - криптовалюты, майнинг, программирование

Библиотека Eigen: производительность вычисления собственных значений, gcc и Visual Studio 2015

Я пытаюсь повысить производительность вычисления собственного значения и собственного вектора с помощью библиотеки 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 секунда):

  1. Различные наборы инструкций, такие как AVX2
  2. Плавающая точка модели, до Fast
  3. Варианты OpenMP и без OpenMP
  4. Оптимизация, полная оптимизация Бык

Заранее спасибо.


  • В случае, если матрица симметрична, используйте SelfAdjointEigenSolver, это будет намного быстрее. Чтобы соответствовать скорости MatLab, вы можете скомпилировать с поддержкой MKL. 01.06.2017
  • Да, я интегрировал SelfAdjointEigenSolver и время составляет 0,5 секунды, почти в 20 раз быстрее, когда матрица симметрична. 04.06.2017

Ответы:


1

Короткий ответ заключается в том, что cl (компилятор Visual Studio) не так хорош, как gcc, когда речь идет о производительности, особенно когда речь идет о библиотеках шаблонов, таких как Eigen.

При этом попробуйте использовать более старую версию Eigen с Visual Studio. В Eigen были внесены некоторые изменения, которые привели к снижению производительности Visual Studio (например, это< /а>).

01.06.2017
  • Есть ли конкретная версия, на которую вы можете порекомендовать перейти? Причина, по которой мне пришлось обновиться, заключалась в том, что я не мог скомпилировать Eigen с VS2015. Кстати, я не получил снижения производительности с некоторыми другими функциями, такими как определитель, QR. Лу. Значительно пострадали только вычисление собственного значения и вектора. 01.06.2017
  • Попробуйте 3.2.10. Почему вы не можете скомпилировать более старый Eigen с VS2015, какие ошибки вы получаете? 01.06.2017
  • Я пробовал с 3.2.5, значительное улучшение, до 10 секунд. 01.06.2017
  • Пробовали с 3.2.10 и опять 10 сек. Что-нибудь 3.3.x составляет от 18 до 19 секунд. 01.06.2017
  • Ну если сравнивать разложение свд, то результаты в пользу ВС. Но да, в собственном gcc пока работает лучше в моем случае. 01.06.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..