Login
Login-Name Passwort


 
Newsletter
Werbung

Di, 14. April 2015, 13:57

Software::Entwicklung

GCC 5.0 soll verbesserte Optimierung während des Linkens bringen

Die demnächst erscheinende Version 5.0 von GCC wird zahlreiche Verbesserungen bringen. Was den Bereich der Optimierung während des Linkens angeht, hat Jan Hubička jetzt die Neuerungen ausführlich vorgestellt.

gnu.org

Link Time Optimization (LTO) bezeichnet alle Optimierungen, die der Compiler noch vornehmen kann, nachdem die einzelnen Module bereits compiliert sind und zum endgültigen Programm zusammengefügt (gelinkt) werden. GCC beherrscht zunehmend mehr solcher Optimierungen. Sie alle zielen darauf ab, den endgültigen Code kleiner oder schneller zu machen - im Idealfall beides zugleich - und den Speicherbedarf für das Linken selbst zu senken.

Link Time Optimization wurde erst vor fünf Jahren in GCC 4.5 erstmals eingeführt, erste Arbeiten daran reichen jedoch ins Jahr 2005 zurück. Dabei konnte GCC auf Erfahrungen zurückgreifen, die zuvor schon in anderen Compilern gemacht wurden. Bis zur noch aktuellen Version 4.9 vom April 2014 wurde diese Funktionalität stetig erweitert, wie Jan Hubička in seiner Geschichte von LTO in GCC rekapituliert.

LTO wurde mit Hilfe von Firmen wie Google, IBM und Sourceware implementiert. Nach Einschätzung von Hubička ist schon GCC 4.9 bei LTO schneller als der LLVM-basierte Compiler Clang und benötigt weniger Speicher. Unter anderem Google hilft aktuell dabei, LLVM auch in diesem Bereich zu verbessern. Ein großes Programm wie LibreOffice wird mit LTO mit GCC 4.9 etwa 17% kleiner, und sogar 36% kleiner, wenn man Feedback Directed Optimization (FDO) einsetzt. Die Geschwindigkeitsverbesserungen sind wahrscheinlich geringer und schwer zu messen. Für den SPEC-Benchmark führt Hubička Verbesserungen von 3 bis 5 Prozent an, was für diese Software bereits eine bedeutende Verbesserung ist. Der Nachteil von LTO ist, dass es mehr Zeit beim Linken erfordert, im Falle von FDO sogar zwei gesonderte Durchläufe, so dass es während der Entwicklung seltener eingesetzt wird.

In GCC 5.0, dessen erster Veröffentlichungskandidat nun bevorsteht, wird es Auto-FDO geben, was den Aufwand von FDO reduzieren soll, aber auch weniger starke Optimierungen zum Ergebnis hat. Das normale FDO, Verwendung der CPU-Erweiterung MPX, wenn verfügbar, zahlreiche neue Optimierungen, OpenMP-Offloading, »Privatisierung« von nicht extern genutzten Funktionen, Entfernen von Variablen, deren Wert nie gelesen wird, Erkennung von identischen Funktionen und Entfernung der Duplikate, Ersetzung von indirekt aufgerufenen virtuellen Methoden durch direkte Funktionsaufrufe, wo möglich, Propagierung von Konstanten, Umwandlung von Funktionen in Inline-Code und einiges mehr wurden teils erheblich verbessert.

Alles in allem führen diese Verbesserungen dazu, dass beispielsweise beim Linken von Firefox 8% weniger Datenstrukturen eingelesen werden müssen und 8% weniger Speicher benötigt wird. Firefox und die meisten Linux-Kernel-Konfigurationen benötigen jetzt nur noch knapp 4 GB Speicher beim Linken, während es bei Chromium noch Probleme gibt, aufgrund derer an die 10 GB benötigt werden. Erste Tests mit GCC 5.0 könnten sich daher bereits lohnen.

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung