[Python-Dev] PEP 580 and PEP 590 comparison.
Jeroen Demeyer
J.Demeyer at UGent.be
Mon Apr 15 04:34:53 EDT 2019
On 2019-04-14 13:34, Mark Shannon wrote:
> I'll address capability first.
I don't think that comparing "capability" makes a lot of sense since
neither PEP 580 nor PEP 590 adds any new capabilities to CPython. They
are meant to allow doing things faster, not to allow more things.
And yes, the C call protocol can be implemented on top of the vectorcall
protocol and conversely, but that doesn't mean much.
> Now performance.
>
> Currently the PEP 590 implementation is intentionally minimal. It does
> nothing for performance.
So, we're missing some information here. What kind of performance
improvements are possible with PEP 590 which are not in the reference
implementation?
> The benchmark Jeroen provides is a
> micro-benchmark that calls the same functions repeatedly. This is
> trivial and unrealistic.
Well, it depends what you want to measure... I'm trying to measure
precisely the thing that makes PEP 580 and PEP 590 different from the
status-quo, so in that sense those benchmarks are very relevant.
I think that the following 3 statements are objectively true:
(A) Both PEP 580 and PEP 590 add a new calling convention, which is
equally fast as builtin functions (and hence faster than tp_call).
(B) Both PEP 580 and PEP 590 keep roughly the same performance as the
status-quo for existing function/method calls.
(C) While the performance of PEP 580 and PEP 590 is roughly the same,
PEP 580 is slightly faster (based on the reference implementations
linked from PEP 580 and PEP 590).
Two caveats concerning (C):
- the difference may be too small to matter. Relatively, it's a few
percent of the call time but in absolute numbers, it's less than 10 CPU
clock cycles.
- there might be possible improvements to the reference implementation
of either PEP 580/PEP 590. I don't expect big differences though.
> To repeat an example
> from an earlier email, which may have been overlooked, this code reduces
> the time to create ranges and small lists by about 30%
That's just a special case of the general fact (A) above and using the
new calling convention for "type". It's an argument in favor of both PEP
580 and PEP 590, not for PEP 590 specifically.
Jeroen.
More information about the Python-Dev
mailing list