Projekt za dodajanje podpore za paralelizacijo postopka prevajanja v GCC

V okviru raziskovalnega projekta Vzporedni GCC Začelo se je delo za dodajanje funkcije v GCC, ki omogoča, da se postopek prevajanja razdeli na več vzporednih niti. Trenutno za povečanje hitrosti gradnje v večjedrnih sistemih pripomoček make uporablja zagon ločenih procesov prevajalnika, od katerih vsak zgradi ločeno kodno datoteko. Novi projekt eksperimentira z zagotavljanjem paralelizacije na ravni prevajalnika, kar bo potencialno izboljšalo zmogljivost v večjedrnih sistemih.

Za testiranje pripravljeno ločena vzporedna veja GCC, ki ponuja nov parameter “—param=num-threads=N” za nastavitev števila niti. Na začetni stopnji smo implementirali prenos medproceduralnih optimizacij v ločene niti, ki se kličejo ciklično za vsako funkcijo in jih je mogoče preprosto vzporediti. Operacije GIMPLE, odgovorne za strojno neodvisne optimizacije, ki ocenjujejo medsebojno delovanje funkcij, so postavljene v ločene niti.

Na naslednji stopnji je predvidena tudi selitev medproceduralnih optimizacij RTL v ločene niti, pri čemer se upoštevajo značilnosti strojne platforme. Po tem načrtujemo implementacijo paralelizacije intraproceduralnih optimizacij (IPA), ki se uporabljajo za kodo znotraj funkcije, ne glede na specifiko klica. Omejitveni člen je zaenkrat zbiralnik smeti, ki je dodal globalno ključavnico, ki onemogoča operacije zbiranja smeti, ko tečejo v večnitnem načinu (v prihodnosti bo zbiralnik smeti prilagojen za večnitno izvajanje GCC).

Za ovrednotenje sprememb v zmogljivosti je bil pripravljen testni paket, ki sestavlja datoteko gimple-match.c, ki vključuje več kot 100 tisoč vrstic kode in 1700 funkcij. Preizkusi na sistemu s procesorjem Intel Core i5–8250U s 4 fizičnimi jedri in 8 navideznimi (Hyperthreading) so pokazali zmanjšanje časa izvajanja optimizacij Intra Procedural GIMPLE s 7 na 4 sekunde pri izvajanju 2 niti in na 3 sekunde pri izvajanju 4 niti. niti, tj. Povečanje hitrosti obravnavane faze montaže je bilo doseženo za 1.72 oziroma 2.52-krat. Preizkusi so tudi pokazali, da uporaba virtualnih jeder s Hyperthreadingom ne vodi do povečane zmogljivosti.

Projekt za dodajanje podpore za paralelizacijo postopka prevajanja v GCC

Skupni čas gradnje se je zmanjšal za približno 10 %, vendar bo po napovedih vzporedna optimizacija RTL omogočila doseganje oprijemljivejših rezultatov, saj ta stopnja med kompilacijo vzame bistveno več časa. Približno po paralelizaciji RTL se bo skupni čas sestavljanja zmanjšal za 1.61-krat. Po tem bo možno skrajšati čas gradnje za nadaljnjih 5–10 % z vzporednim izvajanjem optimizacij IPA.

Projekt za dodajanje podpore za paralelizacijo postopka prevajanja v GCC

Vir: opennet.ru

Dodaj komentar