Project om ondersteuning voor parallellisatie van het compilatieproces toe te voegen aan GCC

Als onderdeel van een onderzoeksproject Parallelle GCC Er is begonnen met het toevoegen van een functie aan GCC waarmee het compilatieproces in verschillende parallelle threads kan worden verdeeld. Om de bouwsnelheid op multi-coresystemen te verhogen, gebruikt het make-hulpprogramma momenteel de lancering van afzonderlijke compilerprocessen, die elk een afzonderlijk codebestand bouwen. Het nieuwe project experimenteert met het bieden van parallellisatie op compilerniveau, wat mogelijk de prestaties op multi-coresystemen zal verbeteren.

Om uit te proberen voorbereid een aparte parallelliserende tak van GCC, die een nieuwe parameter β€œβ€”param=num-threads=N” biedt om het aantal threads in te stellen. In de beginfase hebben we de overdracht van interprocedurele optimalisaties geΓ―mplementeerd in afzonderlijke threads, die voor elke functie cyclisch worden aangeroepen en gemakkelijk kunnen worden geparalleliseerd. GIMPLE-bewerkingen die verantwoordelijk zijn voor hardware-onafhankelijke optimalisaties die de interactie van functies met elkaar evalueren, worden in afzonderlijke threads geplaatst.

In de volgende fase is het ook de bedoeling om interprocedurele RTL-optimalisaties naar afzonderlijke threads te verplaatsen, rekening houdend met de kenmerken van het hardwareplatform. Daarna zijn we van plan om parallellisatie van intraprocedurele optimalisaties (IPA) te implementeren die worden toegepast op de code binnen de functie, ongeacht de specifieke kenmerken van de aanroep. De beperkende link voor nu is de garbage collector, die een globale vergrendeling heeft toegevoegd die garbage collection-bewerkingen uitschakelt terwijl deze in multi-threaded modus draait (in de toekomst zal de garbage collector worden aangepast voor multi-threaded uitvoering van GCC).

Om veranderingen in de prestaties te evalueren, is een testpakket voorbereid dat het bestand gimple-match.c samenstelt, dat meer dan 100 regels code en 1700 functies bevat. Tests op een systeem met een Intel Core i5-8250U CPU met 4 fysieke cores en 8 virtuele (Hyperthreading) lieten een afname zien in de uitvoeringstijd van Intra Procedurele GIMPLE-optimalisaties van 7 naar 4 seconden bij het uitvoeren van 2 threads en naar 3 seconden bij het uitvoeren van 4 threads. draden, d.w.z. Een verhoging van de snelheid van de beschouwde assemblagefase werd respectievelijk 1.72 en 2.52 keer bereikt. Uit tests bleek ook dat het gebruik van virtuele cores met Hyperthreading niet tot betere prestaties leidt.

Project om ondersteuning voor parallellisatie van het compilatieproces toe te voegen aan GCC

De totale bouwtijd is met ongeveer 10% teruggebracht, maar volgens de prognoses zal het parallelliseren van RTL-optimalisaties het mogelijk maken om meer tastbare resultaten te bereiken, aangezien deze fase aanzienlijk meer tijd in beslag neemt tijdens de compilatie. Ongeveer na RTL-parallellisatie wordt de totale montagetijd met 1.61 keer verkort. Hierna is het mogelijk om de bouwtijd met nog eens 5-10% te verkorten door IPA-optimalisaties te parallelliseren.

Project om ondersteuning voor parallellisatie van het compilatieproces toe te voegen aan GCC

Bron: opennet.ru

Voeg een reactie