1 points par GN⁺ 2025-12-03 | 1 commentaires | Partager sur WhatsApp
  • 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

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

 
GN⁺ 2025-12-03
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

    • Un professeur me disait à l’université : « Comprends la couche juste en dessous de celle où tu travailles. » Ça m’a énormément aidé dans ma carrière
      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
    • Merci Adam 😊
  • 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

    • Quoi ?! Godbolt est une vraie personne ?!
  • Je regarde Advent of Computer Science Advent Calendars, Day 2

    • On dirait bien qu’on en est arrivés à ce stade
  • 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

    • C’est un sujet assez courant et, en pratique, on parle moins d’optimisation de compilateur que d’une méthode de build appelée « unity build »
      Référence : wiki Unity build
    • De nos jours, on utilise davantage la LTO (Link Time Optimization) que le 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

    • D’après mon expérience, moins il y a de flags, mieux c’est
      Dans la plupart des cas, -O2 suffit. À chaque mise à jour du compilateur, les optimisations internes s’améliorent, donc les développeurs ont rarement besoin de peaufiner tout ça à la main
      Et 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 2

  • On 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é