Projekt za dodavanje podrške za paralelizaciju procesa kompilacije u GCC

U sklopu istraživačkog projekta Paralelni GCC Počeo je rad na dodavanju značajke u GCC koja omogućuje da se proces kompilacije podijeli u nekoliko paralelnih niti. Trenutno, za poboljšanje brzine izgradnje na višejezgrenim sustavima, uslužni program make koristi pokretanje zasebnih procesa prevoditelja, od kojih svaki gradi zasebnu kodnu datoteku. Novi projekt eksperimentira s pružanjem paralelizacije na razini prevoditelja, što će potencijalno poboljšati performanse višejezgrenih sustava.

Za ispitivanje pripremljeno zasebna paralelna grana GCC-a, koja nudi novi parametar “—param=num-threads=N” za postavljanje broja niti. U početnoj fazi implementirali smo prijenos međuproceduralnih optimizacija u zasebne dretve, koje se ciklički pozivaju za svaku funkciju i mogu se jednostavno paralelizirati. GIMPLE operacije odgovorne za optimizacije neovisne o hardveru koje procjenjuju međusobnu interakciju funkcija smještene su u zasebne niti.

U sljedećoj fazi također se planira premjestiti interproceduralne RTL optimizacije u zasebne niti, uzimajući u obzir karakteristike hardverske platforme. Nakon toga planiramo implementirati paralelizaciju intraproceduralnih optimizacija (IPA) primijenjenih na kod unutar funkcije, neovisno o specifičnostima poziva. Ograničavajuća veza za sada je skupljač smeća, koji je dodao globalnu bravu koja onemogućuje operacije skupljanja smeća dok se izvode u višenitnom načinu (u budućnosti će skupljač smeća biti prilagođen za višenitno izvršavanje GCC-a).

Za procjenu promjena u performansama pripremljen je testni paket koji sastavlja datoteku gimple-match.c koja uključuje više od 100 tisuća redaka koda i 1700 funkcija. Testovi na sustavu s Intel Core i5-8250U CPU-om s 4 fizičke jezgre i 8 virtualnih (Hyperthreading) pokazali su smanjenje vremena izvršenja Intra Procedural GIMPLE optimizacija sa 7 na 4 sekunde kada se izvode 2 niti i na 3 sekunde kada se izvode 4 niti niti, tj. Povećanje brzine razmatrane faze montaže postignuto je za 1.72 odnosno 2.52 puta. Testovi su također pokazali da korištenje virtualnih jezgri s Hyperthreadingom ne dovodi do povećanja performansi.

Projekt za dodavanje podrške za paralelizaciju procesa kompilacije u GCC

Ukupno vrijeme izgradnje smanjeno je za otprilike 10%, ali prema predviđanjima, paraleliziranje RTL optimizacija omogućit će postizanje opipljivijih rezultata, budući da ova faza traje znatno više vremena tijekom kompilacije. Približno nakon RTL paralelizacije, ukupno vrijeme sklapanja će se smanjiti za 1.61 puta. Nakon toga bit će moguće smanjiti vrijeme izgradnje za još 5-10% paraleliziranjem IPA optimizacija.

Projekt za dodavanje podrške za paralelizaciju procesa kompilacije u GCC

Izvor: opennet.ru

Dodajte komentar