Projekt přidat podporu pro proces paralelní kompilace do GCC

V rámci výzkumného projektu Paralelní GCC začala práce na přidání funkce do GCC, která vám umožní rozdělit proces kompilace do několika paralelních vláken. V současné době ke zlepšení rychlosti sestavení na vícejádrových systémech nástroj make používá samostatné procesy kompilátoru, z nichž každý vytváří samostatný soubor kódu. Nový projekt experimentuje s poskytováním paralelizace na úrovni kompilátoru, což potenciálně zlepší výkon na vícejádrových systémech.

Pro testování připravený samostatná paralelizační větev GCC pro nastavení počtu vláken, ve kterých je navržen nový parametr "-param=num-threads=N". V počáteční fázi jsou interprocedurální optimalizace přesunuty do samostatných prováděcích vláken, která jsou cyklicky volána pro každou funkci a jsou vhodná pro paralelizaci. Operace GIMPLE jsou umístěny v samostatných vláknech, které jsou zodpovědné za optimalizace nezávislé na hardwaru, které vyhodnocují vzájemnou interakci funkcí.

V další fázi se také plánuje přesunout interprocedurální optimalizace RTL do samostatných vláken s přihlédnutím ke zvláštnostem hardwarové platformy. Poté se plánuje implementace paralelizace intraprocedurálních optimalizací (IPA) aplikovaných na kód uvnitř funkce, bez ohledu na vlastnosti volání. Omezujícím článkem je zatím garbage collector, který má globální zámek, který zakáže operace garbage collection při běhu ve vícevláknovém režimu (v budoucnu bude garbage collector uzpůsoben pro GCC multithreading).

Pro vyhodnocení změny výkonu byla připravena testovací sada, která staví soubor gimple-match.c, který obsahuje 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 jádry (Hyperthreading) ukázaly zkrácení doby provádění optimalizací Intra Procedural GIMPLE ze 7 na 4 sekundy při spuštění 2 vláken a až 3 sekundy při začínající 4 vlákna, tzn. bylo dosaženo zvýšení rychlosti uvažované montážní fáze o 1.72 a 2.52 krát. Testy také ukázaly, že používání virtuálních jader s Hyperthreadingem nevede ke zvýšení výkonu.

Projekt přidat podporu pro proces paralelní kompilace do GCC

Celková doba sestavení byla zkrácena asi o 10 %, ale předpokládá se, že paralelizace optimalizací RTL dosáhne hmatatelnějších výsledků, protože kompilace této fáze trvá podstatně déle. Přibližně po paralelizaci RTL se celková doba montáže zkrátí 1.61krát. Poté bude možné zkrátit dobu sestavení o dalších 5-10% díky paralelizaci optimalizací IPA.

Projekt přidat podporu pro proces paralelní kompilace do GCC

Zdroj: opennet.ru

Přidat komentář