Projekt na přidání podpory pro paralelizaci procesu kompilace do GCC

V rámci výzkumného projektu Parallel GCC začala práce na přidání možnosti do GCC, která umožňuje rozdělit proces kompilace na několik paralelně prováděných vláken. V současnosti se pro zvýšení rychlosti sestavení na vícejádrových systémech na úrovni nástroje make používá spuštění jednotlivých procesů kompilátoru, z nichž každý provádí sestavení jednotlivého souboru s kódem. Nový projekt experimentuje s zajištěním paralelizace na úrovni kompilátoru, což potenciálně umožní zvýšit efektivitu práce na vícejádrových systémech.

Pro testování byla připravena samostatná paralelizující větev GCC, pro nastavení počtu vláken, která byla navržena nový parametr „—param=num-threads=N“. V počáteční fázi byla implementována extrakce mezi procedurálních optimalizací do samostatných vykonávacích vláken, které se cyklicky vyvolávají pro každou funkci a dobře podléhají paralelizaci. Do samostatných vláken byly také extrahovány operace GIMPLE, odpovědné za optimalizace nezávislé na hardwaru, hodnotící interakci funkcí mezi sebou.

V dalším kroku se plánuje extrakce mezi procedurálních RTL-optimalizací do samostatných vláken, které zohledňují vlastnosti hardwarové platformy. Po tomto se plánuje implementace paralelizace innterprocedurálních optimalizací (IPA), aplikovaných na kód uvnitř funkce, nezávisle na volacích charakteristikách. Omezujícím článkem je zatím garbage collector, do kterého byla přidána globální zámka, která vypíná operace garbage collectoru během práce v multithreadovém režimu (v budoucnu bude garbage collector adaptován pro multithreadové provádění GCC).

Pro hodnocení změny výkonu byl připraven testovací soubor, který provádí sestavení souboru gimple-match.c, zahrnujícího více než 100 tisíc řádků kódu a 1700 funkcí. Testy na systému s CPU Intel Core i5-8250U se 4 fyzickými jádry a 8 virtuálními (Hyperthreading) ukázaly snížení doby provádění optimalizací Intra Procedural GIMPLE z 7 na 4 sekundy při spuštění 2 vláken a na 3 sekundy při spuštění 4 vláken, tj. došlo k zvýšení rychlosti zvažované fáze sestavení 1.72 a 2.52krát, resp. Testy také ukázaly, že použití virtuálních jader při Hyperthreading nevede k nárůstu výkonu.

Projekt na přidání podpory pro paralelizaci procesu kompilace do GCC

Celkový čas kompilace se snížil přibližně o 10 %, avšak předpokládá se, že paralelizace optimalizací RTL přinese ještě výraznější výsledky, protože tato fáze zabírá během kompilace podstatně více času. Orientačně po paralelizaci RTL se celkový čas kompilace sníží na 1,61 krát. Poté bude možné ještě o 5-10 % zkrátit čas kompilace díky paralelizaci optimalizací IPA.

Projekt na přidání podpory pro paralelizaci procesu kompilace do GCC

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster