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

Kao dio istraživačkog projekta Paralelni GCC počeo je rad na dodavanju funkcije u GCC koja vam omogućava da podijelite proces kompilacije u nekoliko paralelnih niti. Trenutno, da bi se poboljšala brzina gradnje na sistemima sa više jezgara, uslužni program make koristi odvojene procese kompajlera, od kojih svaki gradi zasebnu datoteku koda. Novi projekat eksperimentiše sa obezbeđivanjem paralelizacije na nivou kompajlera, što će potencijalno poboljšati performanse na sistemima sa više jezgara.

Za testiranje pripremljeno zasebna grana za paralelizaciju GCC-a, za postavljanje broja niti u kojima se predlaže novi parametar "-param=num-threads=N". U početnoj fazi, međuproceduralne optimizacije se premještaju u odvojene niti izvršavanja, koje se ciklički pozivaju za svaku funkciju i dobro su podložne paralelizaciji. GIMPLE operacije su smeštene u zasebne niti, koje su odgovorne za hardverski nezavisne optimizacije koje procenjuju međusobnu interakciju funkcija.

U sljedećoj fazi planirano je i premještanje interproceduralnih RTL optimizacija u zasebne niti, uzimajući u obzir posebnosti hardverske platforme. Nakon toga se planira implementacija paralelizacije intraproceduralnih optimizacija (IPA) primijenjenih na kod unutar funkcije, bez obzira na karakteristike poziva. Dosadašnja ograničavajuća karika je sakupljač smeća, koji ima globalno zaključavanje koje onemogućuje operacije sakupljanja smeća dok radi u višenitnom modu (u budućnosti će sakupljač smeća biti prilagođen za GCC višenitno).

Da bi se procenila promena performansi, pripremljen je test paket koji gradi datoteku gimple-match.c, koja uključuje više od 100 hiljada linija koda i 1700 funkcija. Testovi na sistemu sa Intel Core i5-8250U CPU-om sa 4 fizička jezgra i 8 virtuelnih jezgara (Hyperthreading) pokazali su smanjenje vremena izvršavanja Intra Procedural GIMPLE optimizacije sa 7 na 4 sekunde pri pokretanju 2 niti i do 3 sekunde kada počevši od 4 niti, tj. postignuto je povećanje brzine razmatrane faze montaže za 1.72 i 2.52 puta. Testovi su takođe pokazali da korišćenje virtuelnih jezgara sa Hyperthreadingom ne dovodi do povećanja performansi.

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

Ukupno vrijeme izgradnje je smanjeno za oko 10%, ali se predviđa da će paralelizacija RTL optimizacija postići opipljivije rezultate, jer je za kompajliranje ove faze potrebno znatno duže. Otprilike nakon RTL paralelizacije, ukupno vrijeme sklapanja će se smanjiti za 1.61 puta. Nakon toga će biti moguće smanjiti vrijeme izgradnje za još 5-10% zbog paralelizacije IPA optimizacija.

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

izvor: opennet.ru

Dodajte komentar