W ramach projektu badawczego
Dla testów
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.
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.
Źródło: opennet.ru