Advent of Compiler Optimisations 2025
(xania.org)- Série de calendrier de l'Avent de 25 jours consacrée à l'optimisation des compilateurs C/C++.
- Du 1er au 25 décembre, une étude de cas d'optimisation est présentée chaque jour via des articles de blog et des vidéos.
- Chaque publication aborde précisément le moment d'application, l'analyse d'assembleur et les situations où l'optimisation ne s'applique pas.
- Bien qu'il soit centré sur x86-64, il inclut aussi une partie liée aux architectures ARM 64 bits et 32 bits.
- Une série à forte valeur pédagogique pour les développeurs qui veulent apprendre le fonctionnement des compilateurs.
Aperçu du projet Advent of Compiler Optimisations 2025
- Projet préparé pendant environ un an, qui publie chaque jour de décembre un nouveau cas d'optimisation de compilateur.
- Du 1er au 25 décembre, un article de blog et une vidéo sont publiés chaque jour.
- Chaque contenu traite d'optimisations intéressantes réalisées par le compilateur à partir de code C ou C++.
- Chaque optimisation est expliquée en détail, des conditions d'application à l'interprétation du code assembleur et aux cas où elle ne s'applique pas.
- Plutôt que de simples comparaisons de code, c'est une analyse du comportement réel du compilateur.
Portée technique
- La série couvre un large éventail, des astuces d'architecture bas niveau aux techniques d'optimisation de haut niveau.
- Elle traite principalement de x86-64, mais inclut également quelques éléments liés à ARM 64 bits et ARM 32 bits.
- Elle constitue une ressource pratique pour apprendre le fonctionnement interne d'un compilateur et le processus de génération de code.
Participation et mode de visionnage
- Tous les articles sont repérables via le tag AoCO2025 du blog.
- Les vidéos peuvent être visionnées via la chaîne YouTube ou la playlist dédiée.
- Lien YouTube :
https://www.youtube.com/mattgodbolt - Lien de la playlist :
https://youtube.com/playlist?list=PL2HVqYf7If8cY4wLk7JUQ2f0JXY_xMQm2
- Lien YouTube :
Importance du projet
- C'est un projet personnel d'envergure, abouti après environ un an de préparation, pour explorer la sophistication et l'efficacité des compilateurs.
- Une initiative pédagogique pour aider les développeurs à comprendre le fonctionnement réel des optimisations de compilateur et à les appliquer lors de l'écriture du code.
- L'auteur souhaite partager le plaisir d'apprendre à quel point les compilateurs sont surprenants.
Présentation de Matt Godbolt
- Développeur C++ basé à Chicago, travaillant chez Hudson River Trading.
- Co-animateur du podcast Two’s Complement.
- Actif sur Mastodon et Bluesky.
- Les contenus du blog sont diffusés sous la licence Creative Commons BY-NC 3.0 Unported
1 commentaires
Avis Hacker News
Après avoir parcouru les optimisations de compilateur de Matt, ça vaut aussi le coup de jeter un œil à l’interview que j’ai faite avec lui
Ce que j’en ai retenu, c’est ceci : il faut travailler au niveau d’abstraction où l’on est à l’aise, tout en comprenant aussi la couche en dessous
Par exemple, si on programme en C, il faut savoir comment le runtime C interagit avec le système d’exploitation. Pas besoin de connaître tous les détails, mais il faut au moins avoir une idée de l’endroit où commencer à chercher quand un problème survient
L’article de Matt dans ACM Queue est ancien lui aussi, mais reste une excellente introduction pour comprendre ce genre de concepts d’optimisation
Par exemple, en comprenant la JVM quand je travaillais avec Java, j’ai pu bien mieux optimiser les performances de logiciels médicaux. Et au-delà de ça, comprendre la couche inférieure est tout simplement amusant
C’est impressionnant de voir que, bien qu’il soit clairement un expert du domaine, il ne se jette pas d’emblée dans le jeu d’instructions x86 complexe et commence plutôt par expliquer pas à pas les bases
Matt Godbolt est un véritable joyau pour les communautés C et C++
J’ai l’impression que Compiler Explorer et ses contributions ont amélioré la vie de beaucoup de développeurs
Je regarde Advent of Computer Science Advent Calendars, Day 2
Je m’intéresse beaucoup à la technique d’amalgamation de code utilisée par SQLite
D’après l’équipe SQLite, cette seule approche apporterait un gain de performances de 5 à 10 %. J’aimerais bien que Matt aborde ce sujet pendant la session
Référence : wiki Unity build
Cela dit, comme la LTO peut être lente sur les builds non incrémentaux, le unity build reste utile pour des builds ponctuels
Ça fait 25 ans que je développe des logiciels, et je me demande toujours si j’utilise les meilleurs flags compilateur
Dans la plupart des cas,
-O2suffit. À chaque mise à jour du compilateur, les optimisations internes s’améliorent, donc les développeurs ont rarement besoin de peaufiner tout ça à la mainEt ajouter des flags sur la base de benchmarks peu fiables est risqué. Des écarts de performance de 1 à 2 % selon l’état du système sont monnaie courante
Si la structure du code change, l’affinité cache peut changer aussi, et les performances avec. Autrement dit, ce n’est peut-être pas le flag, mais simplement l’agencement du code
J’attends la suite des articles avec impatience. Ce matin, j’ai justement appris à SBCL à optimiser les motifs
(+ base (* index scale))et(+ base (ash index n))en une seule instruction LEA. Une application immédiate de ce que j’ai appris au Day 2On n’a jamais assez de contenu Godbolt
J’aimerais qu’il parle de la division par des constantes entières. Le chapitre correspondant dans Hacker’s Delight est excellent, mais il peut sembler un peu difficile pour le lecteur moyen
C’est comme un Advent of Code pour les passionnés de compilateurs
J’adore ce format qui construit l’intuition avec chaque jour une petite leçon d’optimisation facile à digérer
Comprendre ce que fait le compilateur, et pourquoi, permet de devenir un meilleur programmeur, quel que soit le langage utilisé