Projekto por aldoni subtenon por paraleligo de la kompilprocezo al GCC

Kadre de esplorprojekto Paralela GCC Laboro komenciĝis por aldoni funkcion al GCC kiu permesas la kompilprocezon esti dividita en plurajn paralelajn fadenojn. Nuntempe, por pliigi konstrurapidecon sur plurkernaj sistemoj, la make-utilo uzas la lanĉon de apartaj kompililprocezoj, ĉiu el kiuj konstruas apartan koddosieron. La nova projekto eksperimentas kun disponigado de paraleligo ĉe la kompilila nivelo, kiu eble plibonigos rendimenton sur plurkernaj sistemoj.

Por testado preparita aparta paraleliga branĉo de GCC, kiu ofertas novan parametron "—param=num-threads=N" por agordi la nombron da fadenoj. En la komenca etapo, ni efektivigis la translokigon de interproceduraj optimumigoj en apartajn fadenojn, kiuj estas nomitaj cikle por ĉiu funkcio kaj povas esti facile paraleligitaj. GIMPLE-operacioj respondecaj pri aparataro-sendependaj optimumoj kiuj taksas la interagadon de funkcioj inter si estas metitaj en apartajn fadenojn.

En la sekva etapo, ankaŭ estas planite movi interprocedurajn RTL-optimumojn en apartajn fadenojn, konsiderante la karakterizaĵojn de la aparataro-platformo. Post tio, ni planas efektivigi paraleligon de intraproceduraj optimumigoj (IPA) aplikitaj al la kodo ene de la funkcio, sendepende de la specifaĵoj de la alvoko. La limiga ligilo nuntempe estas la rubkolektilo, kiu aldonis tutmondan seruron kiu malŝaltas rubkolektajn operaciojn dum funkciado en plurfadena reĝimo (en la estonteco la rubkolektilo estos adaptita por plurfadena ekzekuto de GCC).

Por taksi ŝanĝojn en la agado, oni preparis testan suiteon, kiu arigas la dosieron gimple-match.c, kiu inkluzivas pli ol 100 mil liniojn de kodo kaj 1700 5 funkciojn. Testoj sur sistemo kun CPU Intel Core i8250-4U kun 8 fizikaj kernoj kaj 7 virtualaj (Hyperthreading) montris malpliiĝon de la ekzekuttempo de Intra Procedural GIMPLE-optimumoj de 4 ĝis 2 sekundoj dum rulado de 3 fadenoj kaj ĝis 4 sekundoj dum funkciado de 1.72. fadenoj, t.e. Pliiĝo de la rapideco de la konsiderata munta stadio estis atingita respektive 2.52 kaj XNUMX fojojn. Testoj ankaŭ montris, ke uzi virtualajn kernojn kun Hyperthreading ne kondukas al pliigita rendimento.

Projekto por aldoni subtenon por paraleligo de la kompilprocezo al GCC

La ĝenerala konstrutempo estis reduktita je proksimume 10%, sed laŭ prognozoj, paraleligi RTL-optimumojn permesos atingi pli palpeblajn rezultojn, ĉar ĉi tiu etapo prenas signife pli da tempo dum kompilo. Proksimume post paraleligo de RTL, la totala asembleotempo reduktiĝos je 1.61 fojojn. Post ĉi tio, eblos redukti la konstruan tempon je alia 5-10% paraleligante IPA-optimumigojn.

Projekto por aldoni subtenon por paraleligo de la kompilprocezo al GCC

fonto: opennet.ru

Aldoni komenton