Prosjekt for å legge til støtte for parallellisering av kompileringsprosessen til GCC

Som en del av et forskningsprosjekt Parallell GCC Arbeidet har begynt med å legge til en funksjon i GCC som gjør at kompileringsprosessen kan deles inn i flere parallelle tråder. For øyeblikket, for å forbedre byggehastigheten på flerkjernesystemer, bruker make-verktøyet lanseringen av separate kompilatorprosesser, som hver bygger en egen kodefil. Det nye prosjektet eksperimenterer med å tilby parallellisering på kompilatornivå, noe som potensielt vil forbedre ytelsen på flerkjernesystemer.

For testing forberedt en separat parallelliseringsgren av GCC, som tilbyr en ny parameter "—param=num-threads=N" for å angi antall tråder. I den innledende fasen implementerte vi overføringen av interprosedyreoptimaliseringer i separate tråder, som kalles syklisk for hver funksjon og lett kan parallelliseres. GIMPLE-operasjoner som er ansvarlige for maskinvareuavhengige optimaliseringer som evaluerer interaksjonen av funksjoner med hverandre, er plassert i separate tråder.

På neste trinn planlegges det også å flytte interprosessuelle RTL-optimaliseringer inn i separate tråder, under hensyntagen til egenskapene til maskinvareplattformen. Etter det planlegger vi å implementere parallellisering av intraprosessuelle optimaliseringer (IPA) brukt på koden inne i funksjonen, uavhengig av spesifikasjonene til samtalen. Den begrensende lenken foreløpig er søppeloppsamleren, som har lagt til en global lås som deaktiverer søppeloppsamlingsoperasjoner mens den kjører i flertrådsmodus (i fremtiden vil søppeloppsamleren være tilpasset for flertrådsutførelse av GCC).

For å evaluere endringer i ytelse er det utarbeidet en testpakke som setter sammen gimple-match.c-filen, som inkluderer mer enn 100 tusen linjer med kode og 1700 funksjoner. Tester på et system med en Intel Core i5-8250U CPU med 4 fysiske kjerner og 8 virtuelle (Hyperthreading) viste en reduksjon i utførelsestiden for Intra Procedural GIMPLE-optimaliseringer fra 7 til 4 sekunder ved kjøring av 2 tråder og til 3 sekunder ved kjøring av 4 tråder, dvs. En økning i hastigheten på monteringstrinnet under vurdering ble oppnådd med henholdsvis 1.72 og 2.52 ganger. Tester viste også at bruk av virtuelle kjerner med Hyperthreading ikke fører til økt ytelse.

Prosjekt for å legge til støtte for parallellisering av kompileringsprosessen til GCC

Den totale byggetiden ble redusert med omtrent 10 %, men ifølge prognoser vil parallellisering av RTL-optimaliseringer gjøre det mulig å oppnå mer håndgripelige resultater, siden dette stadiet tar betydelig mer tid under kompileringen. Omtrent etter RTL-parallellisering vil den totale monteringstiden reduseres med 1.61 ganger. Etter dette vil det være mulig å redusere byggetiden med ytterligere 5-10 % ved å parallellisere IPA-optimaliseringer.

Prosjekt for å legge til støtte for parallellisering av kompileringsprosessen til GCC

Kilde: opennet.ru

Legg til en kommentar