GCC-ri konpilazio-prozesuaren paralelismorako euskarria gehitzeko proiektua

Ikerketa proiektu baten barruan GCC paraleloa GCC-ri konpilazio-prozesua hainbat hari paralelotan banatzea ahalbidetzen duen funtzio bat gehitzen hasi dira lanean. Gaur egun, nukleo anitzeko sistemetan eraikitze-abiadura handitzeko, make utilitateak konpiladore-prozesu bereiziak abiarazten ditu, bakoitzak kode-fitxategi bat eraikitzen du. Proiektu berria konpiladore mailan paralelizazioa eskaintzen esperimentatzen ari da, eta horrek potentzialki nukleo anitzeko sistemetan errendimendua hobetuko du.

Probak egiteko prestatuta GCCren paralelismo-adar bereizi bat, β€œβ€”param=num-threads=N” parametro berri bat eskaintzen duena hari kopurua ezartzeko. Hasierako fasean, prozeduren arteko optimizazioak hari bereizietan transferitzea ezarri genuen, funtzio bakoitzerako ziklikoki deitzen direnak eta erraz paraleliza daitezkeenak. Funtzioen elkarreragina ebaluatzen duten hardwaretik independenteak diren optimizazioez arduratzen diren GIMPLE eragiketak hari bereizietan kokatzen dira.

Hurrengo fasean, RTL prozeduren arteko optimizazioak hari bereizietara eramatea ere aurreikusi da, hardware plataformaren ezaugarriak kontuan hartuta. Horren ondoren, funtzioaren barneko kodeari aplikatutako optimizazio intraprozeduralen (IPA) paralelizazioa ezartzeko asmoa dugu, deiaren zehaztapenak kontuan hartu gabe. Momentuz esteka mugatzailea zabor-biltzailea da, eta hari anitzeko moduan exekutatzen ari den bitartean zabor bilketa eragiketak desgaitzen dituen blokeo globala gehitu du (etorkizunean zabor-biltzailea GCC-ren hari anitzeko exekuziorako egokituko da).

Errendimenduaren aldaketak ebaluatzeko, gimple-match.c fitxategia muntatzen duen proba-multzo bat prestatu da, 100 mila kode-lerro baino gehiago eta 1700 funtzio biltzen dituena. Intel Core i5-8250U CPU batekin 4 nukleo fisikoekin eta 8 birtualekin (Hyperthreading) sistema batean egindako probek, Intra Procedural GIMPLE optimizazioen exekuzio-denbora 7tik 4 segundora murriztu zen 2 hari exekutatzen direnean eta 3 segundora 4 exekutatzen direnean. hariak, alegia. Aztertutako muntaketa fasearen abiadura 1.72 eta 2.52 aldiz handitu da, hurrenez hurren. Probak ere erakutsi zuten Hyperthreading-ekin nukleo birtualak erabiltzeak ez duela errendimendua handitzen.

GCC-ri konpilazio-prozesuaren paralelismorako euskarria gehitzeko proiektua

Eraikuntza-denbora orokorra % 10 murriztu zen gutxi gorabehera, baina aurreikuspenen arabera, RTL optimizazioak paralelizatzeak emaitza ukigarriagoak lortzea ahalbidetuko du, fase honek konpilazioan denbora nabarmen gehiago behar baitu. Gutxi gorabehera, RTL paralelizazioaren ondoren, muntaketa-denbora guztira 1.61 aldiz murriztuko da. Horren ondoren, eraikitze-denbora beste % 5-10 murriztea posible izango da IPA optimizazioak paralelizatuz.

GCC-ri konpilazio-prozesuaren paralelismorako euskarria gehitzeko proiektua

Iturria: opennet.ru

Gehitu iruzkin berria