2016-12-31 3 views
27

Ich versuche, Python 3.6 auf einem Arm-basierte Linux-Maschine, ./configure gibt diese zu kompilieren:Was machen --enable-Optimierungen beim Kompilieren von Python?

Wenn Sie ein Release aufbauen wollen mit allen Optimierungen aktiv (LTO, PGO, usw.), bitte laufen ./configure --enable-optimizations .

was macht --enable-optimizations?

+4

Was ich lese ist, dass es etwas namens 'Profile Guided Optimizations' aktiviert. Diese Art der Optimierung benötigt eine lange Konfigurationszeit, aber der resultierende Python-Binärinterpreter ist 10% schneller beim Ausführen von Python-Code. Überprüfen Sie diese Referenz (eigentlich ein github-Problem) - [Problem # 160] (https://github.com/docker-library/python/issues/160) –

Antwort

26

Dieses Flag aktiviert die profilgeführte Optimierung (PGO) und die Linkzeitoptimierung (LTO).

Beide sind teure Optimierungen, die den Build-Prozess verlangsamen, aber einen signifikanten Geschwindigkeitsschub (etwa 10-20% von dem, was ich mich erinnere) ergeben.

Die Diskussion darüber, was diese genau tun ist nach meinem Wissen und wahrscheinlich zu breit für eine einzige Frage. So oder so, Sie können ein wenig über LTO aus der the docs on GCC which has an implementation for it lesen und einen Start auf PGO durch Lesen its wiki page bekommen.

Auch finden Sie in den relevanten Themen auf dem Bug Tracker Python geöffnet, dass diese hinzugefügt:

  • Issue 24915: Profil Guided Optimization Verbesserungen (bessere Ausbildung, llvm Unterstützung, etc.) (. Added PGO)
  • Issue 25702: Link-Zeit Optimizations Unterstützung für GCC und CLANG
  • Issue 26359 (Added LTO.): CPython Optionen bauen für out-of-the-Box durchführen ance (Fügt die --enable-optimizations Flags auf den Configure-Skript, das die oben genannten Optimierungen ermöglicht.)

Wie @Shuo in einem Kommentar darauf hingewiesen und in Issue 28032 angegeben, LTO ist nicht immer aktiviert mit der --enable-optimizations Flagge . Einige Plattformen (depending on the supported version of gcc) deaktivieren es im Konfigurationsskript.

Zukünftige Versionen dieser Flagge werden es wahrscheinlich immer aktiviert haben, also ist es ziemlich sicher, hier über beide zu sprechen.

+3

Per https://bugs.python.org/issue28032, aktivieren- Optimierungen gelten nur für PGO, nicht für LTO. – Shuo

+0

@Shuo guten Fang, scheint es einige der Buildbots gebrochen. Ich habe die Frage aktualisiert, um dies zu beheben. –