Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-128563: Document the tail-calling interpreter #129728

Merged
merged 11 commits into from
Feb 7, 2025
10 changes: 10 additions & 0 deletions Doc/using/configure.rst
Original file line number Diff line number Diff line change
Expand Up @@ -618,6 +618,16 @@ also be used to improve performance.
Enable computed gotos in evaluation loop (enabled by default on supported
compilers).

.. option:: --with-tail-call-interp

Enable interpreters using tail calls in CPython. If enabled, enabling PGO
(:option:`--enable-optimizations`) is highly recommended. This option specifically
requires a C compiler with proper tail call support, and the
`preserve_none <https://clang.llvm.org/docs/AttributeReference.html#preserve-none>`_
calling convention. For example, Clang 19 and newer supports this feature.

.. versionadded:: next

.. option:: --without-mimalloc

Disable the fast :ref:`mimalloc <mimalloc>` allocator
Expand Down
25 changes: 25 additions & 0 deletions Doc/whatsnew/3.14.rst
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ Summary -- release highlights
* :ref:`PEP 649: deferred evaluation of annotations <whatsnew314-pep649>`
* :ref:`PEP 741: Python Configuration C API <whatsnew314-pep741>`
* :ref:`PEP 761: Discontinuation of PGP signatures <whatsnew314-pep761>`
* :ref:`A new tail-calling interpreter <whatsnew314-tail-call>`


New features
Expand Down Expand Up @@ -208,6 +209,30 @@ configuration mechanisms).
.. seealso::
:pep:`741`.

.. _whatsnew314-tail-call:

A new tail-calling interpreter
------------------------------

A new type of interpreter based on tail calls has been added to CPython.
For certain newer compilers, this interpreter provides
significantly better performance. Preliminary numbers on our machines suggest
anywhere from -3% to 30% faster Python code, and a geometric mean of 9-15%
faster on ``pyperformance`` depending on platform and architecture.

This interpreter currently only works with Clang 19 and newer
on x86-64 and AArch64 architectures. However, we expect
that a future release of GCC will support this as well.

This feature is opt-in for now. We highly recommend enabling profile-guided
optimization with the new interpreter as it is the only configuration we have
tested and can validate its improved performance.
For further information on how to build Python, see
:option:`--with-tail-call-interp`.

(Contributed by Ken Jin in :gh:`128718`, with ideas on how to implement this
in CPython by Mark Shannon, Garret Gu, Haoran Xu, and Josh Haberman.)


Other language changes
======================
Expand Down
Loading