2016-12-31 702 views
27

我試圖編譯的Python 3.6的基於ARM的Linux機器, ./configure輸出這樣的:--enable-optimizations在編譯python時做了什麼?

如果你想有一個發佈版本與所有活動優化(LTO,PGO等), 請運行./configure --enable-optimizations

--enable-optimizations是做什麼用的?

+4

我讀到的是它開啓了一個叫做'Profile Guided Optimizations'的配置文件。這種優化需要很長時間才能配置,但生成的Python二進制解釋器在執行Python代碼時速度提高了10%。檢查此參考(實際上是github問題) - [問題#160](https://github.com/docker-library/python/issues/160) –

回答

26

此標誌啓用簡檔指導優化(PGO)和鏈接時間優化(LTO)。

兩者都是昂貴的優化,這會減慢構建過程,但會產生顯着的速度提升(從我記憶中的讀數大約爲10-20%)。

關於這些究竟做什麼的討論超出了我的理解,可能對於單個問題來說過於寬泛。無論哪種方式,您都可以從the docs on GCC which has an implementation for it中瞭解一下LTO,並通過閱讀its wiki page開始PGO。

而且,看到開上添加了這些Python的Bug跟蹤的相關問題:

  • Issue 24915檔案導引優化改進(更好的培訓,LLVM支持等)(由PGO)
  • Issue 25702GCC和CLANG鏈接時優化支持
  • Issue 26359(新增LTO):CPython的構建外的箱子進行選擇ANCE(添加--enable-optimizations標誌配置腳本使上述優化。)

正如@Shuo在評論中指出,並在Issue 28032指出,LTO並不總是--enable-optimizations標誌啓用。某些平臺(depending on the supported version of gcc)將在配置腳本中禁用它。

此標誌的未來版本可能會始終啓用它,因此在這裏討論它們是非常安全的。

+3

根據https://bugs.python.org/issue28032,enable-優化只適用於PGO,而不適用於LTO。 – Shuo

+0

@Shuo好抓,似乎打破了一些buildbots。我已經更新了這個問題來解決這個問題。 –