Przyspiesz optymalizację programu podczas łączenia

  1. Streszczenie
  2. Słowa kluczowe

K.Yu. Dolgorukova (ISP RAS, Moskwa, Rosja)
C.V. Arishin (ISP RAS, Moskwa, Rosja)

Streszczenie

W tym artykule omówiono dwie metody przyspieszenia procesu montażu programu: równoległa optymalizacja międzyprocesowa i lekka metoda optymalizacji. Przyspieszenie w pierwszym przypadku uzyskuje się dzięki poziomemu skalowaniu systemu optymalizacji czasu wiązania. W drugim przypadku metoda polega na pracy wyłącznie na adnotacjach, co pozwala pracować z minimalnymi niezbędnymi informacjami zamiast kodu całego programu. Problem skalowalności poziomej systemu jest zawsze związany z koniecznością podzielenia dużego zadania na kilka podzadań, które mogą być wykonywane niezależnie i równolegle. Skalowanie optymalizacji czasu łączenia nie jest łatwym zadaniem, ponieważ optymalizacja konwersji działa konsekwentnie na całej pośredniej reprezentacji programu, a wynik ich pracy zależy od poprzednich konwersji. Aby zoptymalizować na etapie łączenia, konieczne jest podzielenie pośredniej prezentacji skompilowanego programu na sekcje, minimalizując zależności między nimi, i zoptymalizować te sekcje oddzielnie. Do analizy programu za pomocą wykresu połączeń. Zatem zadaniem jest podzielenie wykresu wywołania na kilka słabo ze sobą powiązanych komponentów. To zadanie dotyczy jednego ze złożonych problemów kombinatorycznych, a znalezienie optymalnego rozwiązania jest problemem NP-zupełnym. Jednak jakość algorytmu zależy od właściwości wykresu, dlatego zaleca się zbadanie właściwości wykresu wywołania w kontekście optymalizacji czasu wiązania i wybranie dla niego akceptowalnego algorytmu, sprawdzając pracę na rzeczywistych programach. Głównym celem tego badania jest znalezienie lekkiej i wydajnej metody dzielenia struktury programu w taki sposób, aby zmniejszyć wydajność zebranych programów w jak najmniejszym stopniu dzięki niezależnej optymalizacji sekcji kodu. Artykuł przedstawia nową metodę partycjonowania wykresu wywołania programu i porównuje go z innymi istniejącymi metodami dla wykresów wywołania programu testowego. Opisano również implementację proponowanej metody w systemie LLVM, a wyniki porównania wydajności programów skompilowanych w jeden strumień w kilka strumieni są prezentowane. Praca na 4 wątkach wykazała przyspieszenie procesu kompilacji średnio o 31%, podczas gdy wydajność spadła średnio o 3% w porównaniu z programami wbudowanymi w jeden strumień. W przypadku lekkiej metody optymalizacji opisano implementację konwersji usuwania martwego kodu. Pokazano również wyniki testu w połączeniu z leniwym ładowaniem kodu.

Słowa kluczowe

Edycja

Materiały Instytutu Programowania Systemowego Rosyjskiej Akademii Nauk, tom 28, nr. 5, 2016, s. 175-198.

ISSN 2220-6426 (Online), ISSN 2079-8156 (Drukuj).

DOI: 10.15514 / ISPRAS-2016-28 (5) -11

Pełny artykuł w formacie pdf K Powrót do zawartości woluminu