[Python-Dev] frame evaluation API PEP
dinov at microsoft.com
Mon Jun 20 16:20:22 EDT 2016
> > Dino and I thought of two potential alternatives, neither of which we
> > have taken the time to implement and benchmark. One is to simply have
> > a hash table of memory addresses to JIT data that is kept on the JIT
> > side of things. Obviously it would be nice to avoid the overhead of a
> > hash table lookup on every function call. This also doesn't help
> > minimize memory when the code object gets GC'ed.
> Hash lookups aren't that slow. If you combine it with the custom flags
> suggested by MRAB, then you would only suffer the lookup penalty when
> actually entering the special interpreter.
> You can use a weakref callback to ensure things get GC'd properly.
> Also, if there is a special extra field on code-object, then everyone will want
> to use it. How do you handle clashes?
This is exactly what I've started prototyping and have mostly coded up, I've
just been getting randomized and haven't gotten back to it yet.
It may have some impact in the short-term but my expectation is that as the
JIT gets better that this will become less and less important. Currently we're
just JITing one method at a time and have no inlining support. But once we
can start putting guards in place and inlining across multiple function calls
we will start reducing the transitions from JIT -> Function Call -> JIT and get
rid of those hash table lookups entirely. And if we can't succeed at inlining then
I suspect the JIT won't end up offering the performance we'd hope for.
More information about the Python-Dev