Подтвердить что ты не робот

Что делает --enable-optimizations делать при компиляции python?

Я пытаюсь скомпилировать Python 3.6 на компьютере под управлением Linux, ./configure выводит это:

Если вы хотите, чтобы сборка релизов с активными всеми оптимизациями (LTO, PGO и т.д.), запустите ./configure --enable-optimizations.

что делает --enable-optimizations?

4b9b3361

Ответ 1

Этот флаг позволяет оптимизировать профилирование (PGO) и оптимизацию времени связи (LTO).

Оба являются дорогостоящими оптимизациями, которые замедляют процесс сборки, но дают значительное повышение скорости (примерно на 10-20% от того, что я помню).

Обсуждение того, что именно они делают, выходит за рамки моих знаний и, вероятно, слишком велико для одного вопроса. В любом случае, вы можете немного прочитать о LTO из документов в GCC, для которых есть реализация для него, и начать с PGO, читая его страница wiki.

Также см. соответствующие проблемы, открытые в Python Bug Tracker, которые добавили их:

  • Проблема 24915: Улучшена оптимизация профиля (лучшая подготовка, поддержка llvm и т.д.) (добавлен PGO.)
  • Проблема 25702: поддержка оптимизации времени связи для GCC и CLANG (добавлено LTO.)
  • Проблема 26359: параметры сборки CPython для производительности вне коробки (добавляет флаг --enable-optimizations в конфигурацию script который позволяет вышеупомянутые оптимизации.)

Как указано @Shuo в комментарии и указано в Issue 28032, LTO не всегда включается с помощью флага --enable-optimizations, Некоторые платформы (в зависимости от поддерживаемой версии gcc) отключат его в конфигурации script.

Будущие версии этого флага, вероятно, всегда будут включены, хотя и довольно безопасно говорить о них обоих здесь.