GCC-s töötava paralelleerimise toe lisamise projekt

Uuringuprojekti raames Paralleelne GCC on alustatud GCC võimekuse lisamisega, mis võimaldab jagada kompileerimisprotsessi mitmeks paralleelselt töötavaks lõimikuks. Praegu kasutatakse ehituskiiruse tõstmiseks mitme tuumaga süsteemides eraldiseisvate kompilaatori protsesside käivitamist make utiliidi tasandil, kus iga protsess kompileerib eraldi koodifaili. Uus projekt katsetab kompilaatori tasemel paralleelset töötlemist, mis võib potentsiaalselt suurendada efektiivsust mitme tuumaga süsteemides.

Testimiseks valmistatud eraldatav paralleelne GCC haru, mille jaoks on ette nähtud uus parameeter «—param=num-threads=N», et määrata harude arvu. Esialgses etapis on ellu viidud vaheprotseduuride optimeerimiste edasiviimine eraldi täitmisprotsessidesse, mis kutsutakse iga funktsiooni jaoks tsükliliselt nii, et need sobivad hästi paralelleerimiseks. Eraldi protsessidesse on viidud GIMPLE operatsioonid, mis vastutavad riistvarast sõltumatute optimeerimiste eest, hindades funktsioonide omavahelist interaktsiooni.

Järgmises etapis kavatsetakse eraldi protsessidesse viia ka vaheprotseduuride RTL-optimeerimised, mis arvestavad riistvaraplatvormi eripärasid. Pärast seda plaanitakse ellu viia ka sisepõhiste optimeerimiste (IPA) paralelleerimine, mis rakendatakse koodi sees, sõltumatult kutse eripäradest. Praegune kitsaskohaks on prügikoguja, millele on lisatud globaalne lukustus, mis keelab prügikogumise toimingud mitme lõime režiimis töötamise ajal (tulevikus kohandatakse prügikoguja mitu lõime GCC jaoks).

Jõudluse muutuse hindamiseks on koostatud testikomplekt, mis kogub gimple-match.c faili, mis sisaldab üle 100 000 koodi rea ja 1700 funktsiooni. Testid süsteemis, millel on CPU Intel Core i5-8250U koos 4 füüsilise ja 8 virtuaalse (Hyperthreading) tuumaga, näitasid, et Intra Procedural GIMPLE optimeerimiste täitmise aeg vähenes 7 sekundilt 4 sekundile kahe voolu käitamisel ja 3 sekundile nelja voolu käitamisel, mis tähendab, et arvestatava kogumise etapi kiirus tõusis vastavalt 1,72 ja 2,52 korda. Testid näitasid ka, et virtuaalsete tuumade kasutamine Hyperthreading'i puhul ei suurenda jõudlust.

GCC-s töötava paralelleerimise toe lisamise projekt

Koguaeg, mis kulus kogumisele, lühenes umbes 10%, kuid prognooside kohaselt võimaldab RTL-optimeerimiste paralleelimine saavutada märkimisväärsemaid tulemusi, kuna see etapp võtab kompileerimisel oluliselt rohkem aega. Eeldatavalt lüheneb koguaeg pärast RTL-i paralleelimist 1,61 korda. Selle järel saab veel 5-10% võrra vähendada kogumisaega IPA optimeerimiste paralleelimise arvelt.

GCC-s töötava paralelleerimise toe lisamise projekt

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster