Skip to content

Commit

Permalink
gh-128563: Document the tail-calling interpreter (GH-129728)
Browse files Browse the repository at this point in the history
Co-authored-by: Hugo van Kemenade <[email protected]>
  • Loading branch information
Fidget-Spinner and hugovk authored Feb 7, 2025
1 parent a3d5aab commit 3d3a4be
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
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

0 comments on commit 3d3a4be

Please sign in to comment.