[m-users.] Link-time optimization
Massimo Dentico
m.dentico at virgilio.it
Sat Jun 13 20:56:14 AEST 2020
On 13/06/2020 04:09, M McDonough wrote:
> It's not just enough to put the LTO flags in the CFLAGS, since the
> standard library (which accounts for much of the executable size in my
> experience).
>
> There is an LTO option during configuration, although I only seriously
> tested it for MSVC since that's my main target on Windows and shared
> libraries aren't possible with Mercury in that configuration. That
> will reduce the resulting exe file by quite a lot.
Thanks a lot, I completely missed it the last time I looked at the
output of "./configure --help" (maybe it wasn't there before version 20?)
Ok, I'll try restarting from scratch and passing "--enable-lto" to
"./configure".
> The LTO flags are implemented for gcc and clang as well as MSVC, but I
> am unsure if it's done in an optimal way (a large part of why it's
> marked as experimental I believe).
>
> Using LTO will also cause the linking steps to be quite long, since
> it's basically compiling the entire Mercury runtime and standard
> library at that point.
Yes, my experience with compiling other software with LTO is that
compilation is a bit faster and linking is slower. I would like to try
to pass "-fno-fat-lto-objects" to GCC:
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhole-program
Note that when -fno-fat-lto-objects is enabled the compile stage is
faster but you cannot perform a regular, non-LTO link on them.
But if passing "-flto" in CFLAGS is not effective, I think that passing
"-fno-fat-lto-object" will also not be effective. But I can be wrong:
my experience with Autotools is limited, I have always used them as a
black-box.
> ...................... But the file size is quite a bit smaller. The
> actual performance change is pretty minor from my experience over just
> intermodule optimization, since intermodule-optimization tends to be
> very effective before the actual grade's compiler even gets the code.
Well, I was attracted to Mercury for the performance of the executables
produced by its compiler compared to Prolog interpreters/compilers, so
at the moment I'm more interested in producing executables of reasonable
size.
Next I'll investigate how much the tools based on Datalog variants (e.g.
Soufflé) are apt to the task of high-level intermediate target for
specifications-as-programs (business rules, ontologies and so on) and
what are their performances.
It's unfortunate that Mercury is missing in this comparison of
declarative systems:
* Benchmarks of Deductive Database Systems, Relational Databases,
and Graph Databases – Introduction to rbench
http://dbs.informatik.uni-halle.de/rbench/
--
Massimo A. Dentico
More information about the users
mailing list