Projekt na pridanie podpory pre paralelizáciu procesu kompilácie do GCC

V rámci výskumného projektu Paralelný GCC Začalo sa pracovať na pridaní funkcie do GCC, ktorá umožňuje rozdeliť proces kompilácie do niekoľkých paralelných vlákien. V súčasnosti na zlepšenie rýchlosti zostavovania na viacjadrových systémoch nástroj make používa spustenie samostatných procesov kompilátora, z ktorých každý vytvára samostatný súbor kódu. Nový projekt experimentuje s poskytovaním paralelizácie na úrovni kompilátora, čo potenciálne zlepší výkon na viacjadrových systémoch.

Na testovanie pripravený samostatná paralelizujúca vetva GCC, ktorá ponúka nový parameter “—param=num-threads=N” na nastavenie počtu vlákien. V počiatočnej fáze sme implementovali prenos interprocedurálnych optimalizácií do samostatných vlákien, ktoré sa volajú cyklicky pre každú funkciu a dajú sa jednoducho paralelizovať. Operácie GIMPLE zodpovedné za hardvérovo nezávislé optimalizácie, ktoré vyhodnocujú vzájomné pôsobenie funkcií, sú umiestnené v samostatných vláknach.

V ďalšej fáze sa tiež plánuje presunúť interprocedurálne optimalizácie RTL do samostatných vlákien, berúc do úvahy charakteristiky hardvérovej platformy. Potom plánujeme implementovať paralelizáciu intraprocedurálnych optimalizácií (IPA) aplikovaných na kód vnútri funkcie, bez ohľadu na špecifiká volania. Limitujúcim článkom je zatiaľ garbage collector, ktorý pridal globálny zámok, ktorý zakáže operácie garbage collection pri spustení vo viacvláknovom režime (v budúcnosti bude garbage collector prispôsobený na viacvláknové vykonávanie GCC).

Na vyhodnotenie zmien vo výkone bol pripravený testovací balík, ktorý zostavuje súbor gimple-match.c, ktorý obsahuje viac ako 100 tisíc riadkov kódu a 1700 5 funkcií. Testy na systéme s procesorom Intel Core i8250-4U so 8 fyzickými jadrami a 7 virtuálnymi (Hyperthreading) ukázali skrátenie času vykonávania optimalizácií Intra Procedural GIMPLE zo 4 na 2 sekundy pri spustení 3 vlákien a na 4 sekundy pri spustení 1.72 vlákna, t.j. Zvýšenie rýchlosti uvažovanej montážnej fázy sa dosiahlo 2.52-násobne a XNUMX-násobne. Testy tiež ukázali, že používanie virtuálnych jadier s Hyperthreadingom nevedie k zvýšeniu výkonu.

Projekt na pridanie podpory pre paralelizáciu procesu kompilácie do GCC

Celkový čas zostavenia sa skrátil približne o 10 %, ale podľa predpovedí umožní paralelizácia optimalizácie RTL dosiahnuť hmatateľnejšie výsledky, pretože táto fáza trvá počas kompilácie podstatne viac času. Približne po paralelizácii RTL sa celkový čas montáže skráti 1.61-krát. Potom bude možné skrátiť čas zostavenia o ďalších 5-10% paralelizáciou optimalizácií IPA.

Projekt na pridanie podpory pre paralelizáciu procesu kompilácie do GCC

Zdroj: opennet.ru

Pridať komentár