1 Punkte von GN⁺ 2025-12-03 | 1 Kommentare | Auf WhatsApp teilen
  • Ein 25-tägiges Advent-Calendar-Projekt zum Thema C/C++-Compiler-Optimierungen
  • Vom 1. bis 25. Dezember wird täglich ein Blogbeitrag und ein Video mit einem Optimierungsbeispiel veröffentlicht
  • Jeder Beitrag behandelt konkret den Zeitpunkt der Anwendung, die Assemblerauswertung und nicht angewandte Fälle
  • Hauptsächlich x86-64, aber mit einigen Inhalten zu 64-Bit- und 32-Bit-ARM-Architekturen
  • Eine sehr lehrreiche Serie für Entwickler, die die Funktionsweise von Compilern verstehen wollen

Advent of Compiler Optimisations 2025 Projektübersicht

  • Ein rund ein Jahr vorbereitetes Projekt, das im Dezember 25 Tage lang täglich neue Compiler-Optimierungsfälle veröffentlicht
    • Vom 1. bis 25. Dezember wird täglich ein Blogbeitrag und ein Video veröffentlicht
    • Jeder Inhalt behandelt eine interessante Optimierung, die ein Compiler auf Basis von C- oder C++-Code durchführt
  • Jede Optimierung wird ausführlich erklärt, inklusive Anwendungsbedingungen, Assemblercode-Interpretation und nicht angewandter Fälle
    • Nicht nur als simpler Codevergleich, sondern als Analyse der tatsächlichen Arbeitsweise des Compilers

Abgedeckte technische Themen

  • Die Reihe deckt ein breites Spektrum ab, von architekturbezogenen Low-Level-Tricks bis zu High-Level-Optimierungstechniken
    • Der Fokus liegt vor allem auf x86-64, aber es werden auch einige Inhalte zu 64-Bit- und 32-Bit-ARM enthalten
  • Es ist als praktisches Material konzipiert, mit dem man die interne Arbeitsweise von Compilern und den Code-Generierungsprozess lernen kann

Mitmachen und Ansehen

Bedeutung des Projekts

  • Ein umfangreiches persönliches Projekt nach rund einem Jahr Vorbereitung mit dem Ziel, die Komplexität und Effizienz von Compilern zu erforschen
  • Ein pädagogischer Versuch, Entwicklern zu helfen, das echte Funktionsprinzip der Compiler-Optimierung zu verstehen und es bei der Code-Erstellung einzusetzen
  • Der Autor möchte die Freude daran teilen, zu lernen, wie erstaunlich Compiler sein können

Vorstellung von Matt Godbolt

  • Ein in Chicago lebender C++-Entwickler, der bei Hudson River Trading arbeitet
  • Co-Moderator des Podcasts Two's Complement
  • Aktiv auf Mastodon und Bluesky
  • Die Blog-Inhalte werden unter der Lizenz Creative Commons BY-NC 3.0 Unported verbreitet

1 Kommentare

 
GN⁺ 2025-12-03
Hacker-News-Kommentare
  • Nachdem ihr euch Matts Compiler-Optimierungen angesehen habt, solltet ihr euch auch das Interview anschauen, das ich mit ihm geführt habe
    Was ich dabei gelernt habe: Arbeite auf dem Abstraktionsniveau, auf dem du dich wohlfühlst, aber verstehe auch die darunterliegende Schicht
    Wenn du zum Beispiel C programmierst, solltest du wissen, wie die C-Laufzeitumgebung mit dem Betriebssystem interagiert. Du musst nicht jedes Detail kennen, aber genug, um im Problemfall zu wissen, wo du ansetzen musst
    Auch Matts ACM-Queue-Artikel ist trotz seines Alters ein hervorragender Einstieg, um solche Optimierungskonzepte zu verstehen

    • Mein Professor sagte im Studium immer: „Verstehe die Schicht direkt unter der, auf der du arbeitest.“ Das hat meiner Karriere sehr geholfen
      Als ich zum Beispiel mit Java gearbeitet habe, konnte ich durch mein Verständnis der JVM die Performance von medizinischer Software deutlich besser optimieren. Und es macht auch einfach Spaß, die darunterliegende Schicht zu verstehen
    • Danke, Adam 😊
  • Obwohl er eindeutig ein Domänenexperte ist, fand ich beeindruckend, dass er nicht sofort mit dem komplexen x86-Befehlssatz einsteigt, sondern die Grundlagen Schritt für Schritt erklärt

  • Matt Godbolt ist ein echtes Juwel der C- und C++-Community
    Ich denke, Compiler Explorer und seine Beiträge haben die Welt für viele Entwickler besser gemacht

    • Was?! Godbolt ist eine echte Person?!
  • Ich schaue gerade Advent of Computer Science Advent Calendars, Tag 2

    • Ich glaube, ich bin jetzt an diesem Punkt angekommen
  • Mich interessiert sehr die von SQLite verwendete Technik der Code-Amalgamation
    Laut dem SQLite-Team bringt allein dieser Ansatz 5–10 % Performancegewinn. Ich würde mir wünschen, dass Matt das im Laufe der Session behandelt

    • Das ist ein ziemlich allgemeines Thema und streng genommen eher eine Build-Methode namens „unity build“ als eine Compiler-Optimierung
      Siehe auch: Unity-build-Wiki
    • Heute wird häufiger LTO (Link Time Optimization) statt Unity Build verwendet
      Allerdings kann LTO bei nicht inkrementellen Builds langsam sein, daher ist Unity Build für einmalige Builds weiterhin nützlich
  • Ich entwickle seit 25 Jahren Software und frage mich immer noch, ob ich wirklich die optimalen Compiler-Flags verwende

    • Meiner Erfahrung nach gilt: Weniger Flags sind besser
      In den meisten Fällen reicht -O2 aus. Mit jeder Compiler-Aktualisierung werden die internen Optimierungen besser, daher müssen Entwickler nur selten selbst feinjustieren
      Außerdem ist es riskant, Flags auf Basis fehlerhafter Benchmarks hinzuzufügen. Je nach Systemzustand sind 1–2 % Performanceunterschied ganz normal
      Wenn sich die Code-Struktur ändert, kann sich auch die Cache-Lokalität ändern und damit die Performance. Mit anderen Worten: Vielleicht liegt es nicht an den Flags, sondern an der Anordnung des Codes
  • Ich freue mich auf die restlichen Beiträge. Heute Morgen habe ich SBCL beigebracht, Muster wie (+ base (* index scale)) und (+ base (ash index n)) zu einer einzelnen LEA-Anweisung zu optimieren. Ich habe das Gelernte aus Tag 2 also direkt angewendet

  • Von Godbolt-Inhalten kann es gar nicht genug geben

  • Ich hoffe, es wird auch Division durch ganzzahlige Konstanten behandelt. Das entsprechende Kapitel in Hacker’s Delight ist großartig, aber für allgemeine Leser etwas schwer zugänglich

  • Das ist wie Advent of Code für Compiler-Nerds
    Ich mag dieses Format mit täglich kleinen Lektionen zu Optimierungen, durch die man Intuition aufbaut
    Wenn man versteht, was der Compiler tut und warum, wird man in jeder Sprache zu einem besseren Programmierer