Projekt för att lägga till stöd för parallellisering av kompileringsprocessen till GCC

Som en del av ett forskningsprojekt Parallell GCC Arbetet har påbörjats med att lägga till en funktion till GCC som gör att kompileringsprocessen kan delas upp i flera parallella trådar. För närvarande, för att öka bygghastigheten på flerkärniga system, använder make-verktyget lanseringen av separata kompilatorprocesser, som var och en bygger en separat kodfil. Det nya projektet experimenterar med att tillhandahålla parallellisering på kompilatornivå, vilket potentiellt kommer att förbättra prestandan på system med flera kärnor.

För provning beredd en separat parallelliseringsgren av GCC, som erbjuder en ny parameter "—param=num-trådar=N" för att ställa in antalet trådar. I det inledande skedet implementerade vi överföringen av interprocedurella optimeringar till separata trådar, som kallas cykliskt för varje funktion och lätt kan parallelliseras. GIMPLE-operationer som ansvarar för hårdvaruoberoende optimeringar som utvärderar interaktionen av funktioner med varandra placeras i separata trådar.

I nästa steg är det också planerat att flytta interprocedurella RTL-optimeringar till separata trådar, med hänsyn till hårdvaruplattformens egenskaper. Därefter planerar vi att implementera parallellisering av intraproceduroptimeringar (IPA) applicerade på koden inuti funktionen, oavsett specifikationerna för samtalet. Den begränsande länken för nu är sopsamlaren, som har lagt till ett globalt lås som inaktiverar sophämtningsoperationer medan den körs i flertrådsläge (i framtiden kommer sopsamlaren att anpassas för multitrådad exekvering av GCC).

För att utvärdera förändringar i prestanda har en testsvit utarbetats som sammanställer filen gimple-match.c, som innehåller mer än 100 tusen rader kod och 1700 5 funktioner. Tester på ett system med en Intel Core i8250-4U CPU med 8 fysiska kärnor och 7 virtuella (Hyperthreading) visade en minskning av exekveringstiden för Intra Procedural GIMPLE-optimeringar från 4 till 2 sekunder vid körning av 3 trådar och till 4 sekunder vid körning av 1.72 trådar, dvs. En ökning av hastigheten för det aktuella monteringssteget uppnåddes med 2.52 respektive XNUMX gånger. Tester visade också att användning av virtuella kärnor med Hyperthreading inte leder till ökad prestanda.

Projekt för att lägga till stöd för parallellisering av kompileringsprocessen till GCC

Den totala byggtiden minskade med cirka 10 %, men enligt prognoser kommer parallellisering av RTL-optimeringar att göra det möjligt att uppnå mer påtagliga resultat, eftersom detta steg tar betydligt längre tid under kompileringen. Ungefär efter RTL-parallellisering kommer den totala monteringstiden att minska med 1.61 gånger. Efter detta kommer det att vara möjligt att minska byggtiden med ytterligare 5-10 % genom att parallellisera IPA-optimeringar.

Projekt för att lägga till stöd för parallellisering av kompileringsprocessen till GCC

Källa: opennet.ru

Lägg en kommentar