Tagged pointer experiment: need help to optimize
Hi, I need to help to attempt to optimize my experimental CPython fork which uses tagged pointers. When I proposed my PEP 620 "Hide implementation details from the C API", I was asked about a proof that the PEP unlocks real optimization possibilities. So I wrote an implementation of tagged pointers: https://github.com/vstinner/cpython/pull/6 The main benefit is the memory usage. For example, list(range(200)) uses 1656 bytes instead of 7262 (4x less memory). Sadly, my current simple implementation is 1.1x slower than the reference. I suspect that adding a condition to Py_INCREF() and Py_DECREF() explains a large part of this overhead. My implementation uses tagged pointers for: * integers in the range: [-5; 256] * None, True and False singletons It would be nice to use tagged pointers for a wide range of integer numbers, but I wrote a simple implementation: _Py_TAGPTR_UNBOX() has to return a borrowed reference. This function should return a strong reference to support a larger range. More information in the document: https://github.com/vstinner/cpython/blob/tagged_ptr/TAGGED_POINTERS.rst Victor -- Night gathers, and now my watch begins. It shall not end until my death.
participants (6)
-
Antoine Pitrou -
Greg Ewing -
Guido van Rossum -
Ivan Levkivskyi -
Mark Shannon -
Victor Stinner