Optymalizator kodu obiektowego - Object code optimizer
Optymalizacji kodu wynikowego , czasami znany również jako optymalizator po towarzysza lub do małych fragmentów kodu, wizjer optymalizator bierze wyjście z etapu język kompilowany źródłowy - kod wynikowy lub plik binarny - i stara się zastąpić identyfikowalne fragmenty kodu z kodem zastępczym, który jest bardziej wydajny algorytmicznie (zwykle zwiększona szybkość).
Przykłady
- „ IBM Automatic Binary Optimizer for z/OS” (ABO) został wprowadzony w 2015 r. jako najnowocześniejsza technologia zaprojektowana w celu optymalizacji wydajności aplikacji COBOL na komputerach mainframe IBM Z bez konieczności ponownego kompilowania źródła. Wykorzystuje zaawansowaną technologię optymalizacji dostarczaną w najnowszej wersji Enterprise COBOL. ABO optymalizuje skompilowane pliki binarne bez wpływu na logikę programu. W rezultacie aplikacja działa szybciej, ale zachowanie pozostaje niezmienione, więc wysiłek związany z testowaniem może zostać zmniejszony. Klienci zwykle nie rekompilują 100% swojego kodu podczas uaktualniania do nowego kompilatora lub poziomów sprzętowych IBM Z, więc kod, który nie zostanie ponownie skompilowany, nie będzie mógł korzystać z funkcji nowego sprzętu IBM Z. Teraz dzięki ABO klienci mają jeszcze jedną możliwość zmniejszenia wykorzystania procesora i kosztów operacyjnych swoich krytycznych dla biznesu aplikacji COBOL. Możesz wypróbować ABO dzięki ulepszonej, łatwej w użyciu ABO Trial Cloud Service bez instalowania ABO w swoim systemie.
- Najwcześniejszy „COBOL Optimizer” został opracowany przez Capex Corporation w połowie lat 70. dla COBOL . Ten typ optymalizatora zależał w tym przypadku od znajomości „słabości” standardowego kompilatora IBM COBOL i faktycznie zastępował (lub załatał ) sekcje kodu wynikowego bardziej wydajnym kodem. Kod wymiana może zastąpić liniowej odnośnika tabeli z binarnego wyszukiwania , na przykład, a czasem po prostu zastąpić stosunkowo powolny dyspozycję ze znaną szybciej, którą można było inaczej funkcjonalny odpowiednik w jego kontekście. Ta technika jest obecnie znana jako redukcja wytrzymałości . Na przykład na sprzęcie IBM/360
CLIinstrukcja była, w zależności od konkretnego modelu, od 2 do 5 razy szybsza niżCLCinstrukcja do porównań pojedynczych bajtów.
Zalety
Główną zaletą ponownej optymalizacji istniejących programów było to, że zapas już skompilowanych programów klienta ( kod obiektowy ) mógł zostać poprawiony niemal natychmiast przy minimalnym wysiłku, redukując zasoby procesora przy stałym koszcie (cena oprogramowania własnościowego ). Wadą było to, że na przykład nowe wersje języka COBOL wymagałyby (odpłatnej) obsługi optymalizatora w celu uwzględnienia ewentualnych zmienionych wewnętrznych algorytmów języka COBOL. Jednakże, ponieważ nowe wydania kompilatorów COBOL często zbiegały się z aktualizacjami sprzętu , szybszy sprzęt zazwyczaj z nawiązką rekompensował powrót aplikacji do ich wstępnie zoptymalizowanych wersji (do czasu wydania wspierającego optymalizatora).
Inne optymalizatory
Niektóre optymalizatory plików binarnych stosują kompresję wykonywalną , która zmniejsza rozmiar plików binarnych przy użyciu ogólnych technik kompresji danych , zmniejszając wymagania dotyczące pamięci oraz czas przesyłania i ładowania, ale nie poprawiając wydajności w czasie wykonywania. Faktyczna konsolidacja zduplikowanych modułów bibliotecznych również zmniejszyłaby wymagania dotyczące pamięci.
Niektóre optymalizatory binarne wykorzystują metryki czasu wykonywania ( profilowanie ), aby introspektywnie poprawiać wydajność przy użyciu technik podobnych do kompilatorów JIT .
Ostatnie zmiany
Niedawno opracowane „optymalizatory binarne” dla różnych platform, niektóre twierdzące, że są nowością, ale jednak zasadniczo wykorzystują te same (lub podobne) techniki opisane powyżej, obejmują:
- IBM Automatic Binary Optimizer for z/OS (ABO) (2015)
- IBM Automatic Binary Optimizer for z/OS (ABO)Próbna usługa w chmurze (2020)
- Optymalizator kodu binarnego Sun Studio — który wymaga wcześniejszej fazy profilowania
- Projekt i inżynieria dynamicznego optymalizatora binarnego — od IBM TJ Watson Res. Centrum (luty 2005)
- QuaC: Optymalizacja binarna do szybkiego generowania kodu wykonawczego w C — (która wydaje się zawierać niektóre elementy JIT)
- DynamoRIO
- COBRA: Adaptive Runtime Binary Optimization Framework dla aplikacji wielowątkowych
- Spike Executable Optimizer (jądro Unix)
- Optymalizacja oprogramowania „SOLAR” w czasie łącza i w czasie pracy
- Dynimize: Wirtualizacja wydajności procesora
- BOLT: optymalizator post-link zbudowany na platformie LLVM . Wykorzystując profilowanie oparte na próbkach, BOLT poprawia wydajność rzeczywistych aplikacji, nawet w przypadku wysoce zoptymalizowanych plików binarnych zbudowanych zarówno z optymalizacją ukierunkowaną na sprzężenie zwrotne, jak i optymalizacją czasu łącza . W przypadku kompilatorów GCC i Clang , BOLT przyspiesza ich pliki binarne nawet o 20,4% w stosunku do FDO i LTO oraz do 52,1%, jeśli pliki binarne są zbudowane bez FDO i LTO.