Projekt zum Hinzufügen von Unterstützung für die Parallelisierung des Kompilierungsprozesses zu GCC

Im Rahmen eines Forschungsprojekts Paralleles GCC Es wurde mit der Arbeit begonnen, GCC eine Funktion hinzuzufügen, mit der Sie den Kompilierungsprozess in mehrere parallele Threads aufteilen können. Um die Build-Geschwindigkeit auf Multi-Core-Systemen zu verbessern, verwendet das Make-Dienstprogramm derzeit separate Compiler-Prozesse, von denen jeder eine separate Codedatei erstellt. Das neue Projekt experimentiert mit der Bereitstellung von Parallelisierung auf Compiler-Ebene, was möglicherweise die Leistung auf Multi-Core-Systemen verbessern wird.

Zum Prüfen vorbereitet von ein separater Parallelisierungszweig von GCC zum Festlegen der Anzahl der Threads, in dem ein neuer Parameter „-param=num-threads=N“ vorgeschlagen wird. In der Anfangsphase werden interprozedurale Optimierungen in separate Ausführungsthreads verschoben, die zyklisch für jede Funktion aufgerufen werden und sich gut für die Parallelisierung eignen. GIMPLE-Operationen werden in separaten Threads platziert, die für hardwareunabhängige Optimierungen verantwortlich sind, die das Zusammenspiel von Funktionen untereinander bewerten.

Im nächsten Schritt ist außerdem geplant, interprozedurale RTL-Optimierungen unter Berücksichtigung der Besonderheiten der Hardwareplattform in separate Threads zu verlagern. Danach ist geplant, die Parallelisierung intraprozeduraler Optimierungen (IPA) zu implementieren, die unabhängig von den Funktionen des Aufrufs auf den Code innerhalb der Funktion angewendet werden. Der limitierende Link ist bisher der Garbage Collector, der über eine globale Sperre verfügt, die Garbage Collection-Vorgänge deaktiviert, während er im Multithread-Modus ausgeführt wird (in Zukunft wird der Garbage Collector für GCC-Multithreading angepasst).

Um die Leistungsänderung zu bewerten, wurde eine Testsuite vorbereitet, die die Datei gimple-match.c erstellt, die mehr als 100 Codezeilen und 1700 Funktionen enthält. Tests auf einem System mit einer Intel Core i5-8250U-CPU mit 4 physischen Kernen und 8 virtuellen Kernen (Hyperthreading) zeigten eine Verkürzung der Ausführungszeit von Intra-prozeduralen GIMPLE-Optimierungen von 7 auf 4 Sekunden beim Starten von 2 Threads und bis zu 3 Sekunden beim Starten von 4 Threads 1.72 Threads starten, d.h. Es wurde eine Steigerung der Geschwindigkeit der betrachteten Montagestufe um das 2.52- bzw. XNUMX-fache erreicht. Tests haben außerdem gezeigt, dass der Einsatz virtueller Kerne mit Hyperthreading nicht zu Leistungssteigerungen führt.

Projekt zum Hinzufügen von Unterstützung für die Parallelisierung des Kompilierungsprozesses zu GCC

Die gesamte Build-Zeit wurde um etwa 10 % verkürzt, aber die Parallelisierung von RTL-Optimierungen wird voraussichtlich zu greifbareren Ergebnissen führen, da die Kompilierung in dieser Phase deutlich länger dauert. Ungefähr nach der RTL-Parallelisierung wird die Gesamtmontagezeit um das 1.61-fache reduziert. Danach wird es durch die Parallelisierung der IPA-Optimierungen möglich sein, die Erstellungszeit um weitere 5–10 % zu reduzieren.

Projekt zum Hinzufügen von Unterstützung für die Parallelisierung des Kompilierungsprozesses zu GCC

Source: opennet.ru

Kommentar hinzufügen