- Der Tail-Calling-Interpreter von CPython zeigt unter Windows x86-64 etwa 15 % bessere Leistung als die bisherige Methode
- Auch unter macOS AArch64 (XCode Clang) wurde ein Leistungsplus von etwa 5 % bestätigt; unter Windows kommt eine experimentelle Funktion von MSVC 2026 zum Einsatz
- Im pyperformance-Benchmark zeigten die meisten Tests Geschwindigkeitsgewinne, einige verbesserten sich um bis zu 78 %
- Als Hauptursachen für den Performance-Gewinn gelten zurückgesetzte Compiler-Optimierungsheuristiken und verbessertes Inlining
- Mit der offiziellen Veröffentlichung von Python 3.15 soll dies standardmäßig in Builds auf Basis von Visual Studio 2026 aktiviert werden
Performance-Verbesserung des Tail-Calling-Interpreters
- Der Tail-Calling-Interpreter von CPython wurde unter Windows x86-64 als etwa 15 % schneller als der bisherige Switch-Case-Interpreter gemessen
- Laut pyperformance liegt das geometrische Mittel bei einer Verbesserung von 15–16 %
- Einige Benchmarks zeigten bis zu 78 % mehr Geschwindigkeit, in wenigen Fällen war die Ausführung 60 % langsamer
- Unter macOS AArch64 (XCode Clang) wurde ebenfalls ein Leistungsplus von rund 5 % festgestellt
- Diese Ergebnisse gelten unter der Annahme, dass sich im Entwicklungszyklus von Python 3.15 daran nichts mehr ändert
Vergleich der Interpreter-Architekturen
- C-basierte Implementierungen von Interpretern lassen sich in drei Varianten einteilen: switch-case, computed goto und tail-call threaded
- switch-case: Verzweigungsbehandlung pro Instruktion
- computed goto: GCC-/Clang-Erweiterung mit direktem Sprung zur Verzweigungsadresse
- tail-call threaded: Jeder Bytecode-Handler wird in eine eigene Funktion aufgeteilt und per Tail Call an die nächste Funktion übergeben
- Früher garantierten C-Compiler keine Tail-Call-Optimierung, wodurch ein Risiko für Stack Overflow bestand
- Mit den Attributen
__attribute__((musttail)) von Clang und [[msvc::musttail]] von MSVC sind erzwungene Tail Calls möglich geworden
Build-Ergebnisse mit MSVC 2026 für Windows
- In einem CPython-Build mit experimentellen MSVC-Funktionen zeigten die meisten Benchmarks höhere Geschwindigkeit
- Beispielergebnisse:
spectralnorm: 1,48-fach
nbody: 1,35-fach
bm_django_template: 1,18-fach
xdsl: 1,14-fach
- Dies wurde offiziell in das Dokument „What’s New“ für Python 3.15 aufgenommen
- In Builds mit Visual Studio 2026 (MSVC 18) ist der Tail-Calling-Interpreter verfügbar
- Reine Python-Bibliotheken werden um etwa 15 % beschleunigt, kleine Skripte um bis zu 40 %
Ursachen des Performance-Gewinns
- Tail Calling setzt die Optimierungsheuristiken des Compilers zurück und fördert dadurch effizientere Code-Erzeugung
- Die bisherige CPython-Interpreter-Schleife bestand aus einer einzigen Funktion mit rund 12.000 Zeilen, wodurch Inlining-Optimierungen häufig scheiterten
- In vielen Fällen verweigerte der Compiler Inlining, um eine Vergrößerung des Codes zu vermeiden
- Beim Tail-Calling-Ansatz werden Funktionen aufgeteilt, sodass einfache Funktionen inline verarbeitet werden können
- Als Beispiel wird eine einfache Funktion wie
PyStackRef_CLOSE_SPECIALIZED inline eingebettet
- Dasselbe Phänomen wurde auch bei Builds mit PGO (profilgesteuerter Optimierung) beobachtet
Build- und Nutzungsmethode
- Derzeit ist nur ein Build aus dem Quellcode möglich
- Sobald sich die Entwicklung von Python 3.15 stabilisiert, ist eine offizielle Binärverteilung vorgesehen
Noch keine Kommentare.