This seems fun. I should have some time for a few weeks after the 20th (Uni vacation) if no one else takes it up by then. — Rohit
On 8 Dec 2021, at 15:55, Sebastian Berg wrote: > Hi all, > > is anyone interested in digging into speeding up __array_function__? I > distracted myself briefly looking into moving (more) of it to C and got > up with this: > > https://github.com/numpy/numpy/compare/main...seberg:faster-array-function > > The effect seems to be an up to 40% speed improvement for very > lightweight functions. (There may be more room for improvement but I > am not sure how much and it should not be as easy.) > > > I had never really tried this before, because on older Python versions > it was just slower/harder to jump between C and Python. That was due > to the lack of "vectorcall", now it is all there, although for PyPy it > might still need fixups. > > The main point is moving the object that we replace our functions with > (the entry point) to C [1]. This works, but it was a one-evening quick > try, so it needs a lot of polishing: > > * Fixing `like=` for Python defined functions: They are broken, I have > one possible approach, but it is just an "idea stage". > (should not be hard, but needs a some thought) > * Make sure the C entry-point looks and feel right, such as printing > (I am not sure what is left to do here, maybe we can find prior art?) > * Enable pickling (should be very easy) > * Ensure PyPy compatibility if necessary > * Change all warning `stacklevel=` to one lower (in wrapped functions). > (simple, but a lot of churn) > * General code cleanup > > Thought I would put it out there. It might be a cool and worthwhile > project for someone interested in decreasing overheads and familiar > with the Python C-API. > > Cheers, > > Sebastian > > > [1] This also avoids the need for packing `args` and `kwargs` into a > tuple/dict, which is faster, even if we have to pack it again for > `__array_function__` (we can avoid it for the NumPy version though). > I had wondered if we could evolve `__array_function__` to accept > `*args, **kwargs`. I expect this is only useful if > `__array_function__` was defined in C though. > _______________________________________________ > NumPy-Discussion mailing list -- numpy-discussion@python.org > To unsubscribe send an email to numpy-discussion-le...@python.org > https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ > Member address: rgosw...@quansight.com
signature.asc
Description: OpenPGP digital signature
_______________________________________________ NumPy-Discussion mailing list -- numpy-discussion@python.org To unsubscribe send an email to numpy-discussion-le...@python.org https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ Member address: arch...@mail-archive.com