[pypy-dev] Contributing Polyhedral Optimisations in PyPy

Armin Rigo armin.rigo at gmail.com
Fri Dec 18 17:17:23 EST 2020


Hi,

On Fri, 18 Dec 2020 at 19:15, muke101 <muke101 at protonmail.com> wrote:
> Thanks both of you for getting back to me, these definitely seem like problems worth thinking about first. Looking into it, there has actually been some research already on implementing Polyhedral optimisations in a JIT optimiser, specifically in JavaScript. It's paper (http://impact.gforge.inria.fr/impact2018/papers/polyhedral-javascript.pdf) seems to point out the same problems you both bring up, like SCoP detection and aliasing, and how it worked around them.
>
> For now then I'll try and consider how ambitious replicating these solutions would be and if they would map into PyPy from JS cleanly - please let me know if any other hurdles come to mind in the meantime though.

I assume that by "JavaScript" you mean JavaScript with a method-based
JIT compiler.  At this level, that's the main difference with PyPy,
which contains RPython's tracing JIT compiler instead.  The fact that
they are about the JavaScript or Python language is not that
important.

Here's another idea about how to do more advanced optimizations in a
tracing JIT a la PyPy.  The idea would be to keep enough metadata for
the various pieces of machine code that the current backend produces,
and add logic to detect when this machine code runs for long enough.
At that point, we would involve a (completely new) second level
backend, which would consolidate the pieces into a better-optimized
whole.  This is an idea that exists in method JITs but that should
also work in tracing JITs: the second level backend can see all the
common paths at once, instead of one after the other.  The second
level can be slower (within reason), and it can even know how common
each path is, which might give it an edge over ahead-of-time
compilers.


A bientôt,

Armin.


More information about the pypy-dev mailing list