Issue 17781: optimize compilation options (original) (raw)

process

Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: alecsandru.patrascu, barry, christian.heimes, doko, pitrou, r.david.murray, rhettinger, scoder, terry.reedy, vstinner, zach.ware
Priority: low Keywords: patch

Created on 2013-04-17 18:40 by pitrou, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
perflog.txt pitrou,2013-04-17 18:40
lto_flag.patch christian.heimes,2013-04-18 13:05 review
Messages (17)
msg187192 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2013-04-17 18:40
Ubuntu's system Python 3.3 shows consistently better performance than a vanilla Python 3.3: around 10-15% faster in general (see attached benchmark numbers). If this can be attributed to different compilation options, it would be nice to backport those options to our standard build config.
msg187193 - (view) Author: Matthias Klose (doko) * (Python committer) Date: 2013-04-17 18:45
most of that can be attributed to the pgo build, which is upstream for a long time. the second thing to do is to build with lto, and see what speedups you get in addition. and it certainly helps to build the interpreter statically (without --enable-shared). but thanks to confirming my own experience ;)
msg187245 - (view) Author: Christian Heimes (christian.heimes) * (Python committer) Date: 2013-04-18 13:05
Here is a patch for -flto. You need to run autoconf to re-generate configure, too.
msg187246 - (view) Author: Matthias Klose (doko) * (Python committer) Date: 2013-04-18 13:24
the proposed patch is wrong. when linking with -flto, you should pass all the relevant CFLAGS to the linker as well. Also pass -fuse-linker-plugin. and this should be an opt-in, not the default. Depending on the architecture and the compiler version, -flto is not as stable as you want it to be. and last, this ends up as the default for building third party extensions too, which again, I think should be an opt-in.
msg248993 - (view) Author: Stefan Behnel (scoder) * (Python committer) Date: 2015-08-22 19:27
Issue 24915 suggests PGO and comes with an actual patch. I suggest rejecting this ticket as too broad.
msg248994 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2015-08-22 19:29
LTO (Link-Time Optimization) is not the same as PGO, though I guess it can take advantage of PGO for its heuristics.
msg249103 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2015-08-25 03:00
I would like the see LTO enabled. The intermodule calls to code in abstract.c would become less expensive.
msg249253 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2015-08-27 19:08
Note this patch is likely wrong, as it doesn't add the optimization options to the linker invocation. According to the gcc does, """To use the link-time optimizer, -flto and optimization options should be specified at compile time and during the final link""". So probably OPTshouldbeaddedtoOPT should be added to OPTshouldbeaddedtoPY_LDFLAGS.
msg249260 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2015-08-27 21:09
For the record, the gain for LTO+PGO (with "-flto -O3") over PGO alone seems to be between 0% and 10% for most benchmarks.
msg249261 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2015-08-27 21:10
You can test for yourself by passing `CFLAGS="-flto -O3" LDFLAGS="-flto -O3"` to ./configure (using gcc).
msg251304 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2015-09-22 10:28
> For the record, the gain for LTO+PGO (with "-flto -O3") over PGO alone seems to be between 0% and 10% for most benchmarks. Hum, does it make sense to enable LTO without PGO?
msg251305 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2015-09-22 10:31
> Hum, does it make sense to enable LTO without PGO? Probably not. By the way, I now have a small ARM system to play with, and there the gain of LTO+PGO over PGO alone is around 10%. Also note LTO can make compilation times much longer (it's the linking step actually, which can take minutes).
msg251335 - (view) Author: Matthias Klose (doko) * (Python committer) Date: 2015-09-22 17:44
On 22.09.2015 12:31, Antoine Pitrou wrote: > Also note LTO can make compilation times much longer (it's the linking step actually, which can take minutes). use -flto=jobserver
msg251608 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2015-09-25 20:26
#24915 is about adding pgo and has a slew of patches.
msg256281 - (view) Author: Alecsandru Patrascu (alecsandru.patrascu) * Date: 2015-12-12 12:05
Hi, I added a dedicated issue just for LTO only when using GCC and CLANG (http://bugs.python.org/issue25702), that works well with PGO also.
msg258629 - (view) Author: Zachary Ware (zach.ware) * (Python committer) Date: 2016-01-19 22:37
PGO is available as `make profile-opt`, LTO has a patch in . Are there any other interesting options worth investigating?
msg324898 - (view) Author: Zachary Ware (zach.ware) * (Python committer) Date: 2018-09-09 19:05
After 2.5 years without response, I think the answer is probably "no" :)
History
Date User Action Args
2022-04-11 14:57:44 admin set github: 61981
2018-09-09 19:05:34 zach.ware set status: pending -> closedresolution: fixedmessages: + stage: resolved
2016-01-19 23:00:27 r.david.murray set status: open -> pending
2016-01-19 22:52:56 r.david.murray set status: pending -> opennosy: + r.david.murray
2016-01-19 22:37:50 zach.ware set status: open -> pendingnosy: + zach.waremessages: +
2015-12-12 12:05:05 alecsandru.patrascu set nosy: + alecsandru.patrascumessages: +
2015-09-25 20:26:52 terry.reedy set nosy: + terry.reedymessages: +
2015-09-22 17:44:41 doko set messages: +
2015-09-22 10:31:19 pitrou set messages: +
2015-09-22 10:28:13 vstinner set nosy: + vstinnermessages: +
2015-08-27 21:10:10 pitrou set messages: +
2015-08-27 21:09:16 pitrou set messages: +
2015-08-27 19:08:50 pitrou set messages: +
2015-08-25 03:00:19 rhettinger set nosy: + rhettingermessages: +
2015-08-22 19:29:52 pitrou set messages: +
2015-08-22 19:27:53 scoder set nosy: + scodermessages: +
2014-05-13 22:19:17 skrah set nosy: - skrah
2013-12-17 18:24:34 skrah set nosy: + skrah
2013-04-18 13:24:13 doko set messages: +
2013-04-18 13:05:43 christian.heimes set files: + lto_flag.patchnosy: + christian.heimesmessages: + keywords: + patch
2013-04-17 18:45:41 doko set messages: +
2013-04-17 18:40:08 pitrou create