Projekt for at tilføje støtte til parallelisering af kompileringsprocessen til GCC

Som en del af et forskningsprojekt Parallel GCC Arbejdet er begyndt på at tilføje en funktion til GCC, der gør det muligt at opdele kompileringsprocessen i flere parallelle tråde. I øjeblikket, for at øge byggehastigheden på multi-core-systemer, bruger make-værktøjet lanceringen af ​​separate compilerprocesser, som hver opbygger en separat kodefil. Det nye projekt eksperimenterer med at levere parallelisering på compiler-niveau, hvilket potentielt vil forbedre ydeevnen på multi-core-systemer.

Til test forberedt en separat paralleliseringsgren af ​​GCC, som tilbyder en ny parameter "—param=num-tråde=N" for at indstille antallet af tråde. I den indledende fase implementerede vi overførslen af ​​interprocessuelle optimeringer i separate tråde, som kaldes cyklisk for hver funktion og let kan paralleliseres. GIMPLE-operationer, der er ansvarlige for hardwareuafhængige optimeringer, der evaluerer funktionernes interaktion med hinanden, er placeret i separate tråde.

På næste trin er det også planlagt at flytte interprocedureelle RTL-optimeringer til separate tråde under hensyntagen til hardwareplatformens egenskaber. Derefter planlægger vi at implementere parallelisering af intraprocessuelle optimeringer (IPA) anvendt på koden inde i funktionen, uanset opkaldets detaljer. Det begrænsende link for nu er garbage collector, som har tilføjet en global lås, der deaktiverer affaldsindsamlingsoperationer, mens den kører i multi-threaded mode (i fremtiden vil garbage collector blive tilpasset til multi-threaded udførelse af GCC).

For at evaluere ændringer i ydeevnen er der udarbejdet en testpakke, der samler filen gimple-match.c, som indeholder mere end 100 tusind linjer kode og 1700 funktioner. Tests på et system med en Intel Core i5-8250U CPU med 4 fysiske kerner og 8 virtuelle (Hyperthreading) viste et fald i udførelsestiden for Intra Procedural GIMPLE-optimeringer fra 7 til 4 sekunder ved kørsel af 2 tråde og til 3 sekunder ved kørsel af 4 tråde, dvs. En stigning i hastigheden på det undersøgte monteringstrin blev opnået med henholdsvis 1.72 og 2.52 gange. Tests viste også, at brug af virtuelle kerner med Hyperthreading ikke fører til øget ydeevne.

Projekt for at tilføje støtte til parallelisering af kompileringsprocessen til GCC

Den samlede byggetid blev reduceret med cirka 10 %, men ifølge prognoser vil parallelisering af RTL-optimeringer gøre det muligt at opnå mere håndgribelige resultater, da denne fase tager betydeligt længere tid under kompileringen. Omtrent efter RTL-parallelisering vil den samlede montagetid blive reduceret med 1.61 gange. Herefter vil det være muligt at reducere byggetiden med yderligere 5-10% ved at parallelisere IPA-optimeringer.

Projekt for at tilføje støtte til parallelisering af kompileringsprocessen til GCC

Kilde: opennet.ru

Tilføj en kommentar