On Tuesday, 16 January 2018 at 00:19:24 UTC, Martin Nowak wrote:
On Sunday, 14 January 2018 at 23:18:42 UTC, Jon Degenhardt
Combined, LTO and PGO resulted in performance improvements
greater than 25% on three of my standard six benchmarks, and
five of the six improved at least 8%.
Yay, I'm usually seeing double digit improvements for PGO
alone, and single digit improvements for LTO. Meaning PGO has
more effect even though LTO seems to be the more hyped one.
Have you bothered benchmarking them separately?
Last spring I made a few quick tests of both separately. That was
just against the app code, without druntime/phobos. Saw some
benefit from LTO, mainly one of the tools, and not much from PGO.
More recently I tried LTO standalone and LTO plus PGO, both
against app code and druntime/phobos, but not PGO standalone. The
LTO benchmarks are here:
https://github.com/eBay/tsv-utils-dlang/blob/master/docs/dlang-meetup-14dec2017.pdf. I've haven't published the LTO + PGO benchmarks.
The takeaway from my tests is that LTO and PGO will benefit
different apps differently, perhaps in ways not easily predicted.
One of my tools benefited primarily from PGO, two primarily from
LTO, and one materially from both. So, it is worth trying both.
For both, the big win was from optimizing across app code and
libs (druntime/phobos in my case). It'd be interesting to see if
other apps see similar behavior, either with phobos/druntime or
other libraries, perhaps libraries from dub dependencies.