[fpc-devel] The 15k bounty: Optimizing executable speed for Linux x86 / LLVM
Simon Kissel
simon.kissel at nerdherrschaft.com
Sat Oct 20 16:07:20 CEST 2018
Hi,
I assume everybody here still knows who I am, so I'll drop the
introduction part.
In our products, we use FPC for a couple of targets. However, for all
of Linux x86 platforms, we still have to use Kylix (CrossKylix). This
is because for our code, FPC on these platforms compiles code that
is 25% slower than Kylix, and up to 50% when it comes to
multi-threaded stuff.
We know about a couple of bottlenecks (fpc_pushexceptaddr /
RelocateThreadVar etc) which explain FPC's terrible multi-threading
performance, but in general, FPC's code generator really is quite
a mess, which we learned the hard way a couple of years when we
did optimization work on the ARM target.
Due to use having to stick to Kylix, we can not use any of the
recent Object Pascal language features of the last 15 years,
which is frustrating. It also prevents us from fully moving over
to Unicode.
I'd therefore like to put out a 15.000 Euro bounty for whoever
brings FPC at least on par with Kylix when it comes to executable
speed in multi-threaded scenarios, but first would like to discuss
with you guys what route should be taken (the list is not
complete and not mutually exclusive, of course):
- Complete the LLVM branch of FPC. It looks like Jonas has stopped
working on it two years ago, which is a pity.
- Rewrite the code generator, for example in a SSA-IR way
- Make Exception handling, TLS etc use the infrastructure that
libpthread is providing
The requirements for my bounty would be:
- Must bring executable speed for non-Floating point load
on both multihreaded and non-multithreaded workloads to
the Speed of Kylix combined binaries
- Improvements should also help on ARM targets
- An LLVM-based solution must allow inline assembler for
all x86 and ARM
- Must be completed by February 2019
So, any suggestions on how to move forward on this?
Cheers,
Simon
More information about the fpc-devel
mailing list