Advent of Compiler Optimisations 2025
(xania.org)- 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
- Alle Beiträge sind über das AoCO2025-Tag im Blog nachverfolgbar
- Videos sind über den YouTube-Kanal oder eine eigene Playlist verfügbar
- YouTube-Link:
https://www.youtube.com/mattgodbolt - Playlist-Link:
https://youtube.com/playlist?list=PL2HVqYf7If8cY4wLk7JUQ2f0JXY_xMQm2
- YouTube-Link:
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
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
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
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
Ich schaue gerade Advent of Computer Science Advent Calendars, Tag 2
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
Siehe auch: Unity-build-Wiki
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
In den meisten Fällen reicht
-O2aus. Mit jeder Compiler-Aktualisierung werden die internen Optimierungen besser, daher müssen Entwickler nur selten selbst feinjustierenAuß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 angewendetVon 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