Projekt dodający obsługę zrównoleglenia procesu kompilacji do GCC

W ramach projektu badawczego Równoległe GCC Rozpoczęto prace nad dodaniem do GCC funkcji umożliwiającej podzielenie procesu kompilacji na kilka równoległych wątków. Obecnie, aby zwiększyć szybkość kompilacji w systemach wielordzeniowych, narzędzie make wykorzystuje uruchomienie oddzielnych procesów kompilatora, z których każdy tworzy oddzielny plik kodu. Nowy projekt eksperymentuje z zapewnieniem równoległości na poziomie kompilatora, co potencjalnie poprawi wydajność w systemach wielordzeniowych.

Dla testów przygotowany oddzielna równoległa gałąź GCC, która oferuje nowy parametr „—param=num-threads=N” do ustawiania liczby wątków. W początkowej fazie zaimplementowaliśmy przeniesienie optymalizacji międzyproceduralnych na osobne wątki, które wywoływane są cyklicznie dla każdej funkcji i dają się łatwo zrównoleglać. Operacje GIMPLE odpowiedzialne za niezależne od sprzętu optymalizacje oceniające interakcję funkcji ze sobą umieszczono w osobnych wątkach.

W kolejnym etapie planowane jest także przeniesienie międzyproceduralnych optymalizacji RTL do odrębnych wątków, z uwzględnieniem charakterystyki platformy sprzętowej. Następnie planujemy wdrożyć równoległość optymalizacji wewnątrzproceduralnych (IPA) zastosowanych do kodu wewnątrz funkcji, niezależnie od specyfiki wywołania. Ogniwem ograniczającym na chwilę obecną jest moduł zbierający elementy bezużyteczne, do którego dodano globalną blokadę wyłączającą operacje zbierania elementów bezużytecznych podczas działania w trybie wielowątkowym (w przyszłości moduł zbierający elementy bezużyteczne będzie przystosowany do wielowątkowego wykonywania GCC).

Aby ocenić zmiany wydajności, przygotowano zestaw testów składający się z pliku gimple-match.c, który zawiera ponad 100 tysięcy linii kodu i 1700 funkcji. Testy na systemie z procesorem Intel Core i5-8250U z 4 rdzeniami fizycznymi i 8 wirtualnymi (Hyperthreading) wykazały skrócenie czasu wykonywania optymalizacji wewnątrzprocesowych GIMPLE z 7 do 4 sekund przy uruchomieniu 2 wątków i do 3 sekund przy uruchomieniu 4 wątki, tj. Wzrost szybkości rozpatrywanego etapu montażu uzyskano odpowiednio 1.72 i 2.52 razy. Testy wykazały również, że wykorzystanie rdzeni wirtualnych z funkcją Hyperthreading nie prowadzi do zwiększenia wydajności.

Projekt dodający obsługę zrównoleglenia procesu kompilacji do GCC

Całkowity czas kompilacji skrócił się o około 10%, ale według prognoz równoległe optymalizacje RTL pozwolą na osiągnięcie bardziej wymiernych wyników, ponieważ ten etap podczas kompilacji zajmuje znacznie więcej czasu. W przybliżeniu po równoległości RTL całkowity czas montażu zostanie skrócony o 1.61 razy. Następnie możliwe będzie skrócenie czasu kompilacji o kolejne 5-10% poprzez równoległe optymalizacje IPA.

Projekt dodający obsługę zrównoleglenia procesu kompilacji do GCC

Źródło: opennet.ru

Dodaj komentarz