Comment les CPU modernes prédisent efficacement les boucles des interpréteurs de bytecode

2025-07-05

Lors de l'investigation des performances d'un nouvel interpréteur Python, l'auteur a découvert que les CPU modernes peuvent prédire efficacement les sauts indirects dans les boucles des interpréteurs de bytecode. Ceci est réalisé grâce à des prédicteurs de branchement avancés tels que TAGE et ITTAGE. Ces prédicteurs mappent le compteur de programme (PC) et son historique au comportement d'exécution passé, utilisant plusieurs tables avec des longueurs d'historique croissant géométriquement pour choisir dynamiquement la meilleure prédiction. L'auteur explore l'application des principes d'ITTAGE au fuzzing guidé par la couverture et à l'exploration de l'état du programme, suggérant que cela pourrait mener à une meilleure compréhension et exploration des interpréteurs et des programmes similaires.

Lire plus

Amélioration des performances de CPython : une histoire de rebondissements inattendus et de régressions LLVM

2025-03-10

Une fusion récente de CPython a introduit une nouvelle implémentation de l’interpréteur de bytecode, montrant initialement des gains de performance impressionnants de 10 à 15 % sur divers benchmarks. Cependant, cette amélioration provenait du contournement involontaire d’une régression de LLVM 19. Comparé à une meilleure ligne de base (comme GCC ou LLVM 19 optimisé), l’augmentation réelle des performances se réduit à seulement 1 à 5 %. Des semaines de compilation, de benchmarking et de désassemblage ont révélé que les limitations de LLVM 19 sur la duplication des appels de queue étaient à l’origine de la régression. Bien que l’interpréteur d’appels de queue soit une amélioration précieuse, cet incident met en évidence les défis du benchmarking, de l’ingénierie des performances et de l’ingénierie logicielle, tels que la difficulté de choisir des lignes de base et de comprendre la complexité des optimisations du compilateur.

Lire plus
Développement