3 Punkte von GN⁺ 2025-12-26 | Noch keine Kommentare. | Auf WhatsApp teilen
  • 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
    • In einer Visual-Studio-2026-Umgebung erfolgt der Build mit folgendem Befehl
      $env:PlatformToolset = "v145"
      ./PCbuild/build.bat --tail-call-interp -c Release -p x64 --pgo
      
  • Sobald sich die Entwicklung von Python 3.15 stabilisiert, ist eine offizielle Binärverteilung vorgesehen

Noch keine Kommentare.

Noch keine Kommentare.