Benchmarki porównawcze:
en.lewoniewski.info/2024/python-3-12-vs-python-3-13-performance-testing/
Benchmarki porównawcze:
en.lewoniewski.info/2024/python-3-12-vs-python-3-13-performance-testing/
Fajne ale brakuje info czy 3.13 używało JIT'a czy nie 🤔
Raczej bez JIT. W innym artykule piszą, że asyncio zyskało 20%, a reszta to marginalne zmiany. Chociaż nie wiem czy +5% czy czasami więcej to tak mało, z wersji na wersję.
Tu jeszcze jeden art: codspeed.io/blog/state-of-python-3-13-performance-free-threading
Python Pi (3.14) wnosi kolejny speed-up:
[ Python 3.14 Lands A New Interpreter With 3~30% Faster Python Code - Phoronix ]
-> www.phoronix.com/news/Python-3.14-New-Interpreter
[ Python 3.14 Performance: The Truth Behind the 30% Speed Boost Claim | Framework Training ]
-> www.frameworktraining.co.uk/news-insights/truth-behind-30-percent-performance-gains-python-3-14/
Jest ponoć szybszy nawet od JIT interpretera!
[ Performance improvements in 3.14 and maybe 3.15 ]
-> ep2025.europython.eu/session/performance-improvements-in-3-14-and-maybe-3-15
Przy JIT zostało im dużo pracy, bo wiele kodu nie się jeszcze JITować. Natomiast kiedy JIT trafia na taki kod, to przekazuje wykonywania z powrotem do interpretera, i to przekazanie też jest powolne. Tutaj task który to śledzi: JIT nie obsługuje większości uopów
Natomiast te 30% przy tail-callach pochodzi z zepsutego benczmarku. Faktyczny zysk jest mniejszy. Ten przyrost spowodowany był bugiem w kompilatorze który nie występuje jak wymusi się tailcalle.
Dodam że przed Py3.14 funkcjonował podział na 3 poziomy optymalizacji w CPythonie:
dodaj_a_do_b
na szybszy opkod dodaj_int_a_do_int_b
.sprawdz_czy_zmienna_to_int
z funkcji bo identyczny check był już na jej początku).Problem w tym że duża część kodu nie jest obsługiwana przez T2, a z tego co jest, większości nie da się JIT'ować. T1 z resztą też nie obsługuje 100% kodu.
Tutaj jest issue do śledzenia postępów na Tier 2: Increase fraction of code executed by tier 2.
Tutaj do JIT: Better uop coverage in the JIT optimizer
Od 3.14 Tier 2 uznaje się za część JIT. Pisze o tym Mark w planie prac grupy faster-cpython dla 3.14. Dawny T2 nie wykonuje już kodu sam tylko optymalizuje kod dla JITa.
Staram się być w miarę na bieżąco z tym co się tam dzieje i wygląda na to że optymalizacje dzieją się głównie na tych polach: