Projekti për të shtuar mbështetjen për paralelizimin e procesit të përpilimit në GCC

Si pjesë e një projekti kërkimor GCC paralele Ka filluar puna për të shtuar një veçori në GCC që lejon që procesi i përpilimit të ndahet në disa fije paralele. Aktualisht, për të përmirësuar shpejtësinë e ndërtimit në sistemet me shumë bërthama, mjeti make përdor nisjen e proceseve të veçanta të përpiluesit, secila prej të cilave ndërton një skedar kodi të veçantë. Projekti i ri po eksperimenton me ofrimin e paralelizimit në nivelin e përpiluesit, i cili potencialisht do të përmirësojë performancën në sistemet me shumë bërthama.

Për testimin përgatitur një degë e veçantë paralelizuese e GCC, e cila ofron një parametër të ri “—param=num-threads=N” për të vendosur numrin e thread-ve. Në fazën fillestare, ne zbatuam transferimin e optimizimeve ndërprocedurale në fije të veçanta, të cilat thirren në mënyrë ciklike për secilin funksion dhe mund të paralelizohen lehtësisht. Operacionet GIMPLE përgjegjës për optimizimet e pavarura nga hardueri që vlerësojnë ndërveprimin e funksioneve me njëri-tjetrin vendosen në fije të veçanta.

Në fazën tjetër, është planifikuar gjithashtu të zhvendosen optimizimet ndërprocedurale RTL në fije të veçanta, duke marrë parasysh karakteristikat e platformës harduerike. Pas kësaj, ne planifikojmë të zbatojmë paralelizimin e optimizimeve ndërprocedurale (IPA) të aplikuara në kodin brenda funksionit, pavarësisht nga specifikat e thirrjes. Lidhja kufizuese për momentin është mbledhësi i mbeturinave, i cili ka shtuar një bllokues global që çaktivizon operacionet e grumbullimit të mbeturinave gjatë funksionimit në modalitetin me shumë fije (në të ardhmen mbledhësi i mbeturinave do të përshtatet për ekzekutimin me shumë fije të GCC).

Për të vlerësuar ndryshimet në performancë, është përgatitur një grup testimi që mbledh skedarin gimple-match.c, i cili përfshin më shumë se 100 mijë rreshta kodi dhe 1700 funksione. Testet në një sistem me një CPU Intel Core i5-8250U me 4 bërthama fizike dhe 8 virtuale (Hyperthreading) treguan një rënie në kohën e ekzekutimit të optimizimeve Intra Procedural GIMPLE nga 7 në 4 sekonda kur ekzekutoni 2 threads dhe në 3 sekonda kur ekzekutoni 4 fijet, d.m.th. Një rritje në shpejtësinë e fazës së montimit në shqyrtim u arrit përkatësisht me 1.72 dhe 2.52 herë. Testet treguan gjithashtu se përdorimi i bërthamave virtuale me Hyperthreading nuk çon në rritje të performancës.

Projekti për të shtuar mbështetjen për paralelizimin e procesit të përpilimit në GCC

Koha e përgjithshme e ndërtimit u reduktua me afërsisht 10%, por sipas parashikimeve, paralelizimi i optimizimeve RTL do të lejojë arritjen e rezultateve më të prekshme, pasi kjo fazë kërkon shumë më shumë kohë gjatë përpilimit. Përafërsisht pas paralelizimit RTL, koha totale e montimit do të reduktohet me 1.61 herë. Pas kësaj, do të jetë e mundur të zvogëlohet koha e ndërtimit me 5-10% të tjera duke paralelizuar optimizimet IPA.

Projekti për të shtuar mbështetjen për paralelizimin e procesit të përpilimit në GCC

Burimi: opennet.ru

Shto një koment