LLVM: ThinLTO verkürzt große C++-Builds mit paralleler Optimierung

Das LLVM-Projekt hat am 21. Juni 2016 den aktuellen Stand von ThinLTO vorgestellt. Die Link-Time-Optimierung soll die Laufzeitvorteile von klassischem LTO mit Buildzeiten verbinden, die näher an einem normalen Build liegen. Für große C++-Projekte ist das besonders bei häufigen inkrementellen Builds und in verteilten Build-Umgebungen interessant.

LLVM beschreibt ThinLTO im Projektblog als Ansatz, bei dem nicht mehr ein einziges großes Modul vollständig analysiert werden muss. Stattdessen erzeugt der Compiler kompakte Zusammenfassungen der Module. Der Linker nutzt diese Informationen für globale Analysen und verteilt die eigentliche Optimierung anschließend auf mehrere Backends.

Drei Phasen für die Optimierung

Der Ablauf besteht aus Compile, Thin Link und ThinLTO Backend. Während des Kompilierens entstehen LLVM-Bitcode und Modulzusammenfassungen. Der Thin Link führt die globale Analyse zusammen. In den parallelen Backends werden danach nur die jeweils benötigten Funktionen importiert und optimiert. Dadurch sinkt der Speicherbedarf pro Prozess, während wichtige Inlining-Entscheidungen weiterhin über Modulgrenzen hinweg möglich bleiben.

Als zentrale Nutzung nennt LLVM die Option -flto=thin für Clang. Unterstützt wurden zum damaligen Stand das Gold-Plugin und Apples ld64 ab Xcode 8. Die Integration in lld war in Arbeit. Für verteilte Builds kann die Indexerstellung von der anschließenden Optimierung getrennt werden, damit einzelne Backend-Prozesse auf mehrere Rechner verteilt laufen.

Cache für inkrementelle Builds

Bei einer Änderung muss ThinLTO den schnellen Thin-Link-Schritt erneut ausführen. Ein Backend wird nur dann neu gestartet, wenn sich das zugehörige Bitcode-Modul, seine Importe oder die globale Analyse verändert haben. Für Builds auf einem einzelnen Rechner kann ein Cache die bereits optimierten Module anhand dieser Informationen wiederverwenden. Genau solche Eigenschaften sind für große Spieleprojekte, Middleware und andere C++-Codebasen relevant, in denen viele Entwickler regelmäßig neue Builds anstoßen.

LLVM kündigte ThinLTO für Clang 3.9 als direkt nutzbare Option an. Die Messungen des Projekts zeigten bei mehreren Benchmarks eine vergleichbare Optimierungswirkung zu Full LTO, während die Buildzeit näher an einem Build ohne LTO blieb. Die damaligen Ergebnisse beziehen sich auf die frühe Implementierung und sind nicht automatisch auf heutige Compiler-Versionen übertragbar. Die technische Grundlage von LLVM und Clang war bereits zuvor Gegenstand einer Meldung zu Windows- und C++-Builds.

Weitere News

Weitere News

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein