HeadlinesBriefing HeadlinesBriefing 12 languages

I Reran My Python 3.14 JIT Benchmarks on Python 3.15

Towards Data Science ·

🇬🇧 English

The author reran three Python benchmarks from an earlier test on both Python 3.14 and Python 3.15, with the JIT compiler enabled and disabled in each version. In the earlier round, the 3.14 JIT sped up a Mandelbrot calculation by about 25% and Levenshtein distance calculations by 27%, while a Dijkstra graph search saw no improvement.

Python 3.15 has substantially rebuilt the JIT. The 3.14 version predicted likely code paths, while 3.15 uses a new tracing front end that records the path the program actually takes. The optimiser also gains basic register allocation, more constant propagation, and fewer reference-count operations. Code generation for x86-64 and AArch64 has improved, and the generated machine code uses less memory.

Testing all four configurations (3.14 and 3.15, each with the JIT on and off) separates the effect of interpreter changes in 3.15 from the effect of its JIT. This matters because a direct 3.14-versus-3.15 comparison could be misleading. The 3.15 interpreter also includes changes outside the JIT, including a change to the interpreter used by official 64-bit Windows builds.

The Python release team reports a 7% to 8% geometric-mean improvement over the standard interpreter on its x86-64 Linux benchmark suite, and 11% to 12% on AArch64 macOS. LLVM 21 is needed only at build time, so users of official binaries do not need to install it.

The author's rerun shows the stronger JIT helps the same three workloads more, but it still does not help every program, particularly code that spends its time allocating objects and calling operations implemented elsewhere.

View original article →


🇸🇦 العربية

JIT في Python 3.15 مقابل 3.14: إعادة تشغيل اختبارات الأداء

أعاد الكاتب تشغيل ثلاثة اختبارات أداء بلغة Python من اختبار سابق على Python 3.14 وPython 3.15، مع تفعيل مترجم JIT وتعطيله في كل إصدار. في الجولة السابقة، سرّع مترجم JIT في الإصدار 3.14 حساب مجموعة ماندلبروت بنحو 25%، وحسابات مسافة ليفنشتاين بنسبة 27%، بينما لم تشهد خوارزمية البحث في الرسوم البيانية لدايكسترا أي تحسن.

أعيد بناء مترجم JIT في Python 3.15 بشكل واسع. كان الإصدار 3.14 يتوقع مسارات الشيفرة المحتملة، أما 3.15 فيستخدم واجهة تتبع جديدة تسجل المسار الذي يسلكه البرنامج فعلياً. كما يضيف المحسّن تخصيص السجلات الأساسي، ومزيداً من انتشار الثوابت، وعمليات أقل لعدّ المراجع. وقد تحسّن توليد الشيفرة لمعماريتي x86-64 وAArch64، وتستهلك شيفرة الآلة الناتجة ذاكرة أقل.

يفصل اختبار التهيئات الأربع (3.14 و3.15، مع تفعيل المترجم وتعطيله في كل منهما) بين أثر تغييرات المفسّر في 3.15 وأثر مترجم JIT فيه. وهذا مهم لأن المقارنة المباشرة بين 3.14 و3.15 قد تكون مضللة. كما يتضمن مفسّر 3.15 تغييرات خارج JIT، منها تغيير في المفسّر المستخدم في إصدارات Windows الرسمية 64-bit.

أفاد فريق إصدارات Python بتحسن في المتوسط الهندسي بنسبة 7% إلى 8% مقارنة بالمفسّر القياسي في مجموعة اختبارات Linux على x86-64، وبنسبة 11% إلى 12% على macOS من نوع AArch64. يُحتاج إلى LLVM 21 وقت البناء فقط، لذا لا يحتاج مستخدمو الملفات الثنائية الرسمية إلى تثبيته.

يُظهر إعادة التشغيل أن مترجم JIT الأقوى يفيد أحمال العمل الثلاثة نفسها بشكل أكبر، لكنه لا يفيد كل البرامج، خاصة الشيفرة التي تقضي معظم وقتها في تخصيص الكائنات واستدعاء عمليات مُنفذة في مكان آخر.

هل يسرّع JIT في Python 3.15 جميع البرامج؟

لا. يحسّن مترجم JIT الأقوى في 3.15 كثيراً من أحمال العمل المكتوبة بـ Python الخالص، لكن البرامج التي تقضي معظم وقتها في تخصيص الكائنات أو استدعاء عمليات مُنفذة خارج شيفرة Python لا تستفيد إلا قليلاً.

العربية version →


🇧🇩 বাংলা

Python 3.15 JIT বনাম 3.14: বেঞ্চমার্ক পুনরায় চালানো

লেখক একটি আগের পরীক্ষার তিনটি Python বেঞ্চমার্ক Python 3.14 এবং Python 3.15 উভয়তেই আবার চালিয়েছেন, এবং প্রতিটি সংস্করণে JIT কম্পাইলার চালু ও বন্ধ রেখে। আগের দফায় 3.14-এর JIT Mandelbrot গণনাকে প্রায় 25% এবং Levenshtein দূরত্ব গণনাকে 27% দ্রুত করেছিল, কিন্তু Dijkstra গ্রাফ অনুসন্ধানে কোনো উন্নতি হয়নি।

Python 3.15-এ JIT ব্যাপকভাবে পুনর্নির্মিত হয়েছে। 3.14 সংস্করণ সম্ভাব্য কোড পথ অনুমান করত, আর 3.15 একটি নতুন ট্রেসিং ফ্রন্ট এন্ড ব্যবহার করে, যা প্রোগ্রামটি আসলে যে পথে চলে তা রেকর্ড করে। অপটিমাইজারে এখন মৌলিক রেজিস্টার বরাদ্দ, আরও কনস্ট্যান্ট প্রোপাগেশন এবং কম রেফারেন্স-কাউন্ট অপারেশন যুক্ত হয়েছে। x86-64 ও AArch64-এর জন্য কোড জেনারেশনও উন্নত হয়েছে, এবং উৎপাদিত মেশিন কোড কম মেমরি ব্যবহার করে।

চারটি কনফিগারেশন (3.14 ও 3.15, প্রতিটিতে JIT চালু ও বন্ধ) পরীক্ষা করলে বোঝা যায় 3.15-এর ইন্টারপ্রেটারের পরিবর্তনের প্রভাব এবং এর JIT-এর প্রভাব আলাদাভাবে কতটুকু। এটি গুরুত্বপূর্ণ, কারণ 3.14 ও 3.15-এর সরাসরি তুলনা বিভ্রান্তিকর হতে পারে। 3.15 ইন্টারপ্রেটারে JIT-এর বাইরের পরিবর্তনও আছে, যার মধ্যে অফিসিয়াল 64-বিট Windows বিল্ডে ব্যবহৃত ইন্টারপ্রেটারের একটি পরিবর্তনও রয়েছে।

Python রিলিজ টিম তাদের x86-64 Linux বেঞ্চমার্ক স্যুইটে স্ট্যান্ডার্ড ইন্টারপ্রেটারের তুলনায় জ্যামিতিক গড়ে 7% থেকে 8% উন্নতির কথা জানিয়েছে, এবং AArch64 macOS-এ 11% থেকে 12%। LLVM 21 শুধু বিল্ড সময়ে দরকার, তাই অফিসিয়াল বাইনারি ব্যবহারকারীদের এটি আলাদাভাবে ইনস্টল করতে হয় না।

লেখকের পুনরায় চালানো দেখাচ্ছে, শক্তিশালী JIT একই তিনটি ওয়ার্কলোডে বেশি সুবিধা দেয়, তবু এটি সব প্রোগ্রামের সহায়ক নয়, বিশেষ করে সেই কোডের জন্য নয় যা বেশিরভাগ সময় অবজেক্ট বরাদ্দ এবং অন্য কোথাও প্রয়োগ করা অপারেশন কল করতে ব্যয় করে।

Python 3.15 JIT কি সব প্রোগ্রাম দ্রুত করে?

না। শক্তিশালী 3.15 JIT অনেক শুদ্ধ-Python ওয়ার্কলোড উন্নত করে, কিন্তু যেসব প্রোগ্রাম বেশিরভাগ সময় অবজেক্ট বরাদ্দ বা Python কোডের বাইরে প্রয়োগ করা অপারেশন কল করতে ব্যয় করে, তারা এখনও সামান্যই উপকৃত হয়।

বাংলা version →


🇩🇪 Deutsch

Python 3.15 JIT vs. 3.14: Benchmarks im Vergleich

Der Autor hat drei Python-Benchmarks aus einem früheren Test sowohl auf Python 3.14 als auch auf Python 3.15 erneut ausgeführt, jeweils mit aktiviertem und deaktiviertem JIT-Compiler. In der früheren Runde beschleunigte der JIT von 3.14 eine Mandelbrot-Berechnung um etwa 25% und Levenshtein-Distanzberechnungen um 27%, während eine Dijkstra-Graphsuche keine Verbesserung zeigte.

Python 3.15 hat den JIT grundlegend überarbeitet. Die Version 3.14 sagte wahrscheinliche Codepfade voraus, während 3.15 ein neues Tracing-Frontend verwendet, das den tatsächlich durchlaufenen Pfad des Programms aufzeichnet. Der Optimierer erhält zudem eine grundlegende Registerallokation, mehr Konstantenpropagierung und weniger Referenzzählungsoperationen. Die Codegenerierung für x86-64 und AArch64 wurde verbessert, und der erzeugte Maschinencode benötigt weniger Speicher.

Der Test aller vier Konfigurationen (3.14 und 3.15, jeweils mit eingeschaltetem und ausgeschaltetem JIT) trennt die Wirkung der Interpreter-Änderungen in 3.15 von der des JIT. Das ist wichtig, weil ein direkter Vergleich von 3.14 und 3.15 irreführend sein könnte. Der Interpreter von 3.15 enthält auch Änderungen außerhalb des JIT, darunter eine Änderung am Interpreter, der in den offiziellen 64-Bit-Windows-Builds verwendet wird.

Das Python-Release-Team berichtet von einer Verbesserung des geometrischen Mittels um 7% bis 8% gegenüber dem Standardinterpreter in seiner x86-64-Linux-Benchmark-Suite und um 11% bis 12% unter AArch64 macOS. LLVM 21 wird nur zur Build-Zeit benötigt, sodass Nutzer offizieller Binärdateien es nicht selbst installieren müssen.

Die erneute Ausführung des Autors zeigt, dass der stärkere JIT dieselben drei Workloads stärker beschleunigt, aber immer noch nicht jedes Programm. Das gilt besonders für Code, der den größten Teil seiner Zeit mit der Allokation von Objekten und dem Aufruf anderswo implementierter Operationen verbringt.

Beschleunigt der JIT von Python 3.15 alle Programme?

Nein. Der stärkere JIT von 3.15 verbessert viele reine Python-Workloads, doch Programme, die den größten Teil ihrer Zeit mit der Allokation von Objekten oder dem Aufruf von Operationen außerhalb des Python-Codes verbringen, profitieren weiterhin kaum.

Deutsch version →


🇪🇸 Español

JIT de Python 3.15 frente a 3.14: nueva ejecución de los benchmarks

El autor repitió tres benchmarks de Python de una prueba anterior en Python 3.14 y Python 3.15, con el compilador JIT activado y desactivado en cada versión. En la ronda anterior, el JIT de 3.14 aceleró un cálculo de Mandelbrot en alrededor de un 25% y los cálculos de distancia de Levenshtein en un 27%, mientras que una búsqueda en grafos de Dijkstra no mostró ninguna mejora.

Python 3.15 ha reconstruido el JIT de forma sustancial. La versión 3.14 predecía las rutas de código probables, mientras que 3.15 usa un nuevo front end de trazado que registra la ruta que realmente sigue el programa. El optimizador también incorpora asignación básica de registros, más propagación de constantes y menos operaciones de conteo de referencias. La generación de código para x86-64 y AArch64 ha mejorado, y el código máquina generado usa menos memoria.

Probar las cuatro configuraciones (3.14 y 3.15, cada una con el JIT activado y desactivado) separa el efecto de los cambios del intérprete en 3.15 del efecto de su JIT. Esto importa porque una comparación directa entre 3.14 y 3.15 podría inducir a error. El intérprete de 3.15 también incluye cambios fuera del JIT, como una modificación en el intérprete usado por las compilaciones oficiales de Windows de 64 bits.

El equipo de publicación de Python informa de una mejora de la media geométrica del 7% al 8% frente al intérprete estándar en su conjunto de benchmarks de Linux x86-64, y del 11% al 12% en macOS AArch64. LLVM 21 solo es necesario en el momento de la compilación, por lo que los usuarios de binarios oficiales no necesitan instalarlo.

La nueva ejecución del autor muestra que el JIT más potente ayuda más a esas mismas tres cargas de trabajo, pero aún no ayuda a todos los programas, sobre todo al código que dedica su tiempo a asignar objetos y a llamar a operaciones implementadas en otro lugar.

¿El JIT de Python 3.15 acelera todos los programas?

No. El JIT más potente de 3.15 mejora muchas cargas de trabajo de Python puro, pero los programas que pasan la mayor parte del tiempo asignando objetos o llamando a operaciones implementadas fuera del código Python siguen beneficiándose poco.

Español version →


🇫🇷 Français

JIT de Python 3.15 contre 3.14 : nouveaux tests de performance

L'auteur a relancé trois benchmarks Python d'un test précédent sous Python 3.14 et Python 3.15, avec le compilateur JIT activé et désactivé dans chaque version. Lors du précédent essai, le JIT de 3.14 avait accéléré un calcul de Mandelbrot d'environ 25 % et les calculs de distance de Levenshtein de 27 %, tandis qu'une recherche de graphe de Dijkstra n'avait connu aucune amélioration.

Python 3.15 a considérablement reconstruit le JIT. La version 3.14 prédisait les chemins de code probables, alors que la 3.15 utilise un nouveau front end de traçage qui enregistre le chemin réellement emprunté par le programme. L'optimiseur gagne également une allocation de registres de base, davantage de propagation de constantes et moins d'opérations sur les compteurs de références. La génération de code pour x86-64 et AArch64 a été améliorée, et le code machine produit consomme moins de mémoire.

Tester les quatre configurations (3.14 et 3.15, chacune avec le JIT activé et désactivé) permet de séparer l'effet des changements de l'interpréteur dans la 3.15 de celui de son JIT. Ce point est important, car une comparaison directe entre 3.14 et 3.15 pourrait être trompeuse. L'interpréteur de 3.15 comprend aussi des modifications hors JIT, notamment un changement de l'interpréteur utilisé par les versions officielles 64 bits pour Windows.

L'équipe de publication de Python annonce une amélioration de la moyenne géométrique de 7 % à 8 % par rapport à l'interpréteur standard sur sa suite de benchmarks Linux x86-64, et de 11 % à 12 % sur macOS AArch64. LLVM 21 n'est nécessaire qu'à la compilation, si bien que les utilisateurs des binaires officiels n'ont pas besoin de l'installer.

La nouvelle série de tests de l'auteur montre que le JIT plus puissant aide davantage ces trois charges de travail, mais qu'il ne profite toujours pas à tous les programmes, en particulier à ceux qui passent leur temps à allouer des objets et à appeler des opérations implémentées ailleurs.

Le JIT de Python 3.15 accélère-t-il tous les programmes ?

Non. Le JIT plus puissant de la 3.15 améliore de nombreuses charges de travail en Python pur, mais les programmes qui passent l'essentiel de leur temps à allouer des objets ou à appeler des opérations implémentées hors du code Python en tirent encore peu de bénéfice.

Français version →


🇮🇳 हिन्दी

Python 3.15 JIT बनाम 3.14: बेंचमार्क का दोबारा परीक्षण

लेखक ने एक पिछले परीक्षण के तीन Python बेंचमार्क को Python 3.14 और Python 3.15 दोनों पर दोबारा चलाया, और हर संस्करण में JIT कंपाइलर को चालू और बंद करके देखा। पिछले दौर में, 3.14 के JIT ने Mandelbrot गणना को लगभग 25% और Levenshtein दूरी गणनाओं को 27% तेज़ किया, जबकि Dijkstra ग्राफ़ खोज में कोई सुधार नहीं हुआ।

Python 3.15 ने JIT को काफ़ी हद तक नए सिरे से बनाया है। 3.14 संस्करण संभावित कोड पथों का अनुमान लगाता था, जबकि 3.15 एक नए ट्रेसिंग फ़्रंट एंड का उपयोग करता है जो रिकॉर्ड करता है कि प्रोग्राम वास्तव में किस पथ पर चलता है। ऑप्टिमाइज़र में बुनियादी रजिस्टर आवंटन, अधिक कॉन्स्टेंट प्रोपेगेशन और कम रेफ़रेंस-काउंट संचालन भी जुड़े हैं। x86-64 और AArch64 के लिए कोड जनरेशन बेहतर हुआ है, और उत्पन्न मशीन कोड कम मेमोरी लेता है।

सभी चार कॉन्फ़िगरेशन (3.14 और 3.15, हर एक में JIT चालू और बंद) का परीक्षण यह अलग करता है कि 3.15 के इंटरप्रेटर में बदलावों का प्रभाव कितना है और उसके JIT का कितना। यह मायने रखता है, क्योंकि 3.14 और 3.15 की सीधी तुलना भ्रामक हो सकती है। 3.15 के इंटरप्रेटर में JIT से बाहर के बदलाव भी शामिल हैं, जिनमें आधिकारिक 64-बिट Windows बिल्ड में उपयोग होने वाले इंटरप्रेटर का एक बदलाव भी है।

Python रिलीज़ टीम के अनुसार, उसके x86-64 Linux बेंचमार्क सूट पर मानक इंटरप्रेटर की तुलना में ज्यामितीय माध्य में 7% से 8% सुधार है, और AArch64 macOS पर 11% से 12%। LLVM 21 केवल बिल्ड के समय आवश्यक है, इसलिए आधिकारिक बाइनरी का उपयोग करने वालों को इसे अलग से इंस्टॉल करने की ज़रूरत नहीं है।

लेखक के दोबारा परीक्षण से पता चलता है कि अधिक शक्तिशाली JIT उन्हीं तीन कार्यभारों को अधिक लाभ देता है, फिर भी यह हर प्रोग्राम की मदद नहीं करता, खासकर ऐसे कोड की जो अपना अधिकांश समय ऑब्जेक्ट आवंटन और कहीं और लागू संचालनों को कॉल करने में बिताता है।

क्या Python 3.15 JIT सभी प्रोग्रामों को तेज़ करता है?

नहीं। अधिक शक्तिशाली 3.15 JIT कई शुद्ध-Python कार्यभारों को बेहतर बनाता है, लेकिन जो प्रोग्राम अपना अधिकांश समय ऑब्जेक्ट आवंटन या Python कोड के बाहर लागू संचालनों को कॉल करने में बिताते हैं, उन्हें अब भी बहुत कम लाभ मिलता है।

हिन्दी version →


🇮🇩 Bahasa Indonesia

JIT Python 3.15 vs 3.14: Pengujian Ulang Benchmark

Penulis menjalankan ulang tiga benchmark Python dari pengujian sebelumnya pada Python 3.14 dan Python 3.15, dengan kompiler JIT diaktifkan dan dinonaktifkan di setiap versi. Pada putaran sebelumnya, JIT 3.14 mempercepat perhitungan Mandelbrot sekitar 25% dan perhitungan jarak Levenshtein sebesar 27%, sementara pencarian graf Dijkstra tidak mengalami peningkatan sama sekali.

Python 3.15 telah membangun ulang JIT secara substansial. Versi 3.14 memperkirakan jalur kode yang kemungkinan dilalui, sedangkan 3.15 menggunakan front end tracing baru yang mencatat jalur yang benar-benar dilalui program. Optimizer juga mendapatkan alokasi register dasar, propagasi konstanta yang lebih baik, dan lebih sedikit operasi penghitungan referensi. Pembangkitan kode untuk x86-64 dan AArch64 telah ditingkatkan, dan kode mesin yang dihasilkan menggunakan memori lebih sedikit.

Menguji keempat konfigurasi (3.14 dan 3.15, masing-masing dengan JIT aktif dan nonaktif) memisahkan dampak perubahan interpreter di 3.15 dari dampak JIT-nya. Ini penting karena perbandingan langsung antara 3.14 dan 3.15 bisa menyesatkan. Interpreter 3.15 juga mencakup perubahan di luar JIT, termasuk perubahan pada interpreter yang digunakan oleh build Windows 64-bit resmi.

Tim rilis Python melaporkan peningkatan rata-rata geometris sebesar 7% hingga 8% dibanding interpreter standar pada rangkaian benchmark Linux x86-64-nya, dan 11% hingga 12% pada macOS AArch64. LLVM 21 hanya dibutuhkan saat proses build, sehingga pengguna binary resmi tidak perlu menginstalnya.

Pengujian ulang penulis menunjukkan bahwa JIT yang lebih kuat membantu ketiga beban kerja yang sama lebih banyak, namun tetap belum membantu setiap program, terutama kode yang menghabiskan waktunya untuk mengalokasikan objek dan memanggil operasi yang diimplementasikan di tempat lain.

Apakah JIT Python 3.15 mempercepat semua program?

Tidak. JIT 3.15 yang lebih kuat meningkatkan banyak beban kerja Python murni, tetapi program yang sebagian besar waktunya dihabiskan untuk mengalokasikan objek atau memanggil operasi yang diimplementasikan di luar kode Python tetap hanya mendapat sedikit manfaat.

Bahasa Indonesia version →


🇯🇵 日本語

Python 3.15 JIT と 3.14 の比較:ベンチマークの再実行

著者は、以前のテストで使った3つの Python ベンチマークを、Python 3.14 と Python 3.15 の両方で再実行しました。各バージョンで JIT コンパイラを有効にした場合と無効にした場合の両方を測定しています。前回のテストでは、3.14 の JIT によりマンデルブロ集合の計算が約 25%、レーベンシュタイン距離の計算が 27% 高速化されましたが、ダイクストラ法によるグラフ探索には改善が見られませんでした。

Python 3.15 では JIT が大幅に再構築されています。3.14 の JIT は起こりやすいコードの経路を予測していましたが、3.15 では新しいトレーシングのフロントエンドを使い、プログラムが実際にたどった経路を記録します。オプティマイザにも基本的なレジスタ割り当て、より多くの定数伝播、参照カウント操作の削減が加わりました。x86-64 と AArch64 向けのコード生成も改善され、生成される機械語が使用するメモリは少なくなっています。

4 つの構成(3.14 と 3.15 のそれぞれで JIT を有効・無効にしたもの)をテストすると、3.15 のインタプリタの変更による効果と、その JIT による効果を切り分けられます。3.14 と 3.15 を直接比較すると誤解を招く可能性があるため、この分離は重要です。3.15 のインタプリタには JIT 以外の変更も含まれており、その中には公式の 64 ビット Windows ビルドで使われるインタプリタの変更も含まれます。

Python リリースチームによると、x86-64 Linux のベンチマークスイートでは標準インタプリタに比べて幾何平均で 7% から 8% の改善、AArch64 macOS では 11% から 12% の改善が報告されています。LLVM 21 が必要になるのはビルド時だけなので、公式バイナリを使うユーザーがそれを別途インストールする必要はありません。

著者の再実行結果からは、強化された JIT が同じ 3 つのワークロードにはより大きな効果をもたらすことがわかります。ただし、すべてのプログラムに効果があるわけではなく、特にオブジェクトの割り当てや他の場所で実装された操作の呼び出しに時間を費やすコードでは効果が限られます。

Python 3.15 の JIT はすべてのプログラムを高速化しますか?

いいえ。強化された 3.15 の JIT は多くの純粋な Python のワークロードを改善しますが、実行時間の大部分をオブジェクトの割り当てや Python コードの外で実装された操作の呼び出しに費やすプログラムでは、依然として効果はわずかです。

日本語 version →


🇧🇷 Português

JIT do Python 3.15 vs 3.14: novo teste de benchmarks

O autor executou novamente três benchmarks de Python de um teste anterior no Python 3.14 e no Python 3.15, com o compilador JIT ativado e desativado em cada versão. Na rodada anterior, o JIT do 3.14 acelerou um cálculo de Mandelbrot em cerca de 25% e os cálculos de distância de Levenshtein em 27%, enquanto uma busca em grafo de Dijkstra não teve nenhuma melhora.

O Python 3.15 reconstruiu o JIT de forma substancial. A versão 3.14 previa os caminhos de código prováveis, enquanto a 3.15 usa um novo front end de rastreamento que registra o caminho que o programa realmente percorre. O otimizador também ganha alocação básica de registradores, mais propagação de constantes e menos operações de contagem de referências. A geração de código para x86-64 e AArch64 melhorou, e o código de máquina gerado usa menos memória.

Testar as quatro configurações (3.14 e 3.15, cada uma com o JIT ligado e desligado) separa o efeito das mudanças no interpretador da 3.15 do efeito de seu JIT. Isso importa porque uma comparação direta entre 3.14 e 3.15 pode ser enganosa. O interpretador da 3.15 também inclui mudanças fora do JIT, incluindo uma alteração no interpretador usado pelas builds oficiais de 64 bits para Windows.

A equipe de lançamento do Python relata uma melhora da média geométrica de 7% a 8% sobre o interpretador padrão em sua suíte de benchmarks Linux x86-64, e de 11% a 12% no macOS AArch64. O LLVM 21 é necessário apenas no momento da build, então quem usa binários oficiais não precisa instalá-lo.

A nova rodada do autor mostra que o JIT mais forte ajuda mais essas mesmas três cargas de trabalho, mas ainda não ajuda todos os programas, especialmente o código que passa a maior parte do tempo alocando objetos e chamando operações implementadas em outro lugar.

O JIT do Python 3.15 acelera todos os programas?

Não. O JIT mais forte da 3.15 melhora muitas cargas de trabalho em Python puro, mas programas que passam a maior parte do tempo alocando objetos ou chamando operações implementadas fora do código Python ainda se beneficiam pouco.

Português version →


🇷🇺 Русский

JIT в Python 3.15 против 3.14: повторный замер производительности

Автор повторно запустил три бенчмарка Python из предыдущего теста на Python 3.14 и Python 3.15, включая и выключая JIT-компилятор в каждой версии. В прошлом раунде JIT версии 3.14 ускорил вычисление множества Мандельброта примерно на 25% и вычисления расстояния Левенштейна на 27%, тогда как поиск по графу Дейкстры не улучшился вообще.

Python 3.15 существенно переработал JIT. Версия 3.14 предсказывала вероятные пути выполнения кода, а 3.15 использует новый фронтенд трассировки, который фиксирует путь, по которому программа реально идёт. Оптимизатор также получил базовое распределение регистров, более развитое распространение констант и меньше операций со счётчиком ссылок. Генерация кода для x86-64 и AArch64 улучшена, а созданный машинный код занимает меньше памяти.

Тестирование всех четырёх конфигураций (3.14 и 3.15, каждая с включённым и выключенным JIT) позволяет отделить эффект изменений интерпретатора в 3.15 от эффекта его JIT. Это важно, потому что прямое сравнение 3.14 и 3.15 может вводить в заблуждение. Интерпретатор 3.15 включает и изменения вне JIT, в том числе изменение интерпретатора, используемого официальными 64-битными сборками для Windows.

Команда выпуска Python сообщает об улучшении среднего геометрического на 7–8% по сравнению со стандартным интерпретатором на своём наборе тестов для x86-64 Linux и на 11–12% на AArch64 macOS. LLVM 21 нужен только на этапе сборки, поэтому пользователям официальных бинарных файлов устанавливать его не требуется.

Повторный замер автора показывает, что более сильный JIT сильнее помогает тем же трём нагрузкам, но всё ещё не помогает каждой программе, особенно коду, который большую часть времени тратит на выделение объектов и вызовы операций, реализованных в другом месте.

Ускоряет ли JIT в Python 3.15 все программы?

Нет. Более мощный JIT в 3.15 улучшает многие нагрузки на чистом Python, но программы, которые большую часть времени выделяют объекты или вызывают операции, реализованные вне Python-кода, по-прежнему получают небольшую выгоду.

Русский version →


🇨🇳 简体中文

Python 3.15 JIT 与 3.14 对比:基准测试复跑

作者在 Python 3.14 和 3.15 上重新运行了早前测试中的三项 Python 基准,并在每个版本中分别开启和关闭 JIT 编译器。在早前的测试中,3.14 的 JIT 使 Mandelbrot 计算提速约 25%,Levenshtein 距离计算提速 27%,而 Dijkstra 图搜索则没有任何改进。

Python 3.15 对 JIT 进行了大幅重构。3.14 版本会预测可能的代码路径,而 3.15 则采用全新的追踪前端,记录程序实际执行的路径。优化器还新增了基本的寄存器分配、更多的常量传播,并减少了引用计数操作。x86-64 和 AArch64 的代码生成也有改进,生成的机器码占用内存更少。

对全部四种配置(3.14 和 3.15,各自开启和关闭 JIT)进行测试,可以将 3.15 解释器的变化与其 JIT 的影响区分开来。这一点很重要,因为直接比较 3.14 与 3.15 可能会产生误导。3.15 解释器还包括 JIT 之外的改动,例如官方 64 位 Windows 构建所用解释器的一项变更。

Python 发布团队报告称,在其 x86-64 Linux 基准测试套件上,相比标准解释器,几何平均性能提升 7% 至 8%;在 AArch64 macOS 上提升 11% 至 12%。LLVM 21 仅在构建时需要,因此使用官方二进制文件的用户无需自行安装。

作者的复跑结果显示,更强的 JIT 对这三项工作负载的提升更为明显,但它仍无法使所有程序受益,尤其是那些大部分时间用于分配对象以及调用其他地方实现的操作的代码。

Python 3.15 的 JIT 能否加速所有程序?

不能。更强的 3.15 JIT 能改善许多纯 Python 工作负载,但如果程序的大部分时间用于分配对象或调用 Python 代码之外实现的操作,其受益仍然很小。

简体中文 version →