Inom ramen för forskningsprojektet har arbetet pÄbörjats för att lÀgga till i GCC en funktion som möjliggör att dela upp kompilationsprocessen i flera parallellt körande trÄdar. För nÀrvarande anvÀnds för att öka bygghastigheten pÄ flerkÀrniga system en metod dÀr separata kompilatorprocesser startas via make, dÀr varje process bygger en separat kodfil. Det nya projektet experimenterar med att möjliggöra parallellisering pÄ kompilatornivÄ, vilket potentiellt kan öka effektiviteten pÄ flerkÀrniga system.
För testning en separat parallelliseringsgren av GCC förberetts, dĂ€r ett nytt parameter "âparam=num-threads=N" föreslĂ„s för att ange antalet trĂ„dar. I det initiala skedet har vi implementerat att flytta mellanprocedurala optimeringar till separata körtrĂ„dar, som cykliskt anropas för varje funktion och som lĂ€mpar sig vĂ€l för parallellisering. Separata trĂ„dar har tilldelats GIMPLE-operationer som ansvarar för plattformsoberoende optimeringar och utvĂ€rderar samverkan mellan funktioner.
I nÀsta steg planeras Àven att flytta mellanprocedurala RTL-optimeringar till separata trÄdar, som tar hÀnsyn till hÄrdvaruplattformens egenskaper. Efter detta planeras implementering av parallellisering av intra-procedurala optimeringar (IPA), som tillÀmpas pÄ koden inom en funktion, oberoende av anropsspecifika egenskaper. Den begrÀnsande faktorn Àr för nÀrvarande skrÀpsamlaren, dÀr en global lÄs har lagts till som inaktiverar skrÀpsamlingsÄtgÀrder under körning i flertrÄdigt lÀge (i framtiden kommer skrÀpsamlaren att anpassas för flertrÄdigt genomförande av GCC).
För att bedöma prestandaförÀndringar har ett testpaket tagits fram som bygger en fil gimple-match.c, som innehÄller mer Àn 100 000 kodrader och 1 700 funktioner. Tester pÄ ett system med CPU Intel Core i5-8250U med 4 fysiska kÀrnor och 8 virtuella (Hyperthreading) visade en minskning av körtiden för Intra Procedural GIMPLE-optimeringar frÄn 7 till 4 sekunder vid körning av 2 trÄdar och ner till 3 sekunder vid körning av 4 trÄdar, vilket innebÀr en hastighetsökning av det aktuella byggsteget med 1,72 och 2,52 gÄnger, respektive. Tester visade ocksÄ att anvÀndningen av virtuella kÀrnor vid Hyperthreading inte leder till en ökning av prestandan.

Den totala byggtiden har minskats med cirka 10%, men enligt prognoser kommer parallellisering av RTL-optimeringar att ge mer mÀrkbara resultat, eftersom detta steg tar avsevÀrt mer tid vid kompilering. Efter parallellisering av RTL förvÀntas den totala byggtiden minska med 1,61 gÄnger. Efter det kan byggtiden minskas ytterligare med 5-10% genom att parallellisera IPA-optimeringar.

KĂ€lla: opennet.ru
