W czwartek, po wprowadzeniu procesorów AMD EPYC Genoa czwartej generacji, AMD opublikowało również AOCC 4.0 jako najnowszą wersję kompilatora AMD Optimizing C/C++. Sprawdzałem to przez ostatni dzień i nadal pokazuję pozytywny wpływ odpowiedniego dostrojenia kompilatora na wydajność.
Najważniejsza jest wersja AMD Optimizing C/C++ Compiler 4.0. początkowe wsparcie i optymalizacje Zen 4″znver4″. Publiczny dziennik zmian nazywa to po prostu „obsługą i optymalizacją procesorów AMD z rodziny 19h (architektura rdzenia AMD „Zen4”)”. Nie jest jasne z tego zakresu optymalizacji Zen 4 na tym etapie, szczególnie gdy AOCC jest zamkniętym kodem źródłowym LLVM/Clang.
Oprócz AOCC 4.0 posiadanie Wsparcie i optymalizacje Zen 4, są ulepszenia obsługi OpenMP 4.5 dla Fortran, ulepszenia debugowania/diagnostyki, dostrajanie dla AMD Math Library 4.0, obsługa wektorów i szybszych wariantów lib z AMD Math Library oraz ulepszone warianty różnych skalarnych/wektorowych/przekształcenia pętli. Więcej informacji o AOCC 4.0 na developer.amd.com.
Brak oczekującego Zen 4 (znver4) łatki dla upstream LLVM.
AOCC 4.0 pochodzi ze źródeł upstream LLVM/Clang 14.0.6. LLVM 15 został wydany na początku września, podczas gdy AOCC nie został jeszcze ponownie oparty na tym ostatnim półrocznym wydaniu funkcji. W celu przeprowadzenia wstępnego testu porównawczego przeprowadziłem kilka testów porównawczych na Zen 4 między AOCC 4.0 i LLVM Clang 14.0 w pakiecie z Ubuntu Linux.
Ponieważ serwer Titanite jest moim jedynym EPYC 9004 na razie platforma do testowania serii, a będąc zajęty wykonywaniem innych testów, aby wypróbować AOCC 4.0, przeprowadzałem testy na AMD Ryzen 9 7950X. AOCC 4.0 obsługuje wszystkie produkty Ryzen/Threadripper/EPYC i nadal zachowuje wsparcie dla wcześniejszych generacji procesorów Zen.
Podczas testów wszystkie CFLAGS/CXXFLAGS były utrzymywane na tym samym poziomie, ale tylko odbudowywane całe testowane oprogramowanie z AMD AOCC 4.0 lub LLVM Clang 14.0 upstream.
Ponieważ upstream LLVM/Clang Git i GCC Git pobierają więcej optymalizacji dla Zen 4, będę oczywiście uruchamiał znacznie większy i szersze porównanie kompilatorów na Zen 4-plus działanie na bardziej odpowiednich procesorach z serii EPYC 9004.
Podobnie jak w poprzednich wydaniach AOCC dla Zen 1/2/3, AOCC 4.0 z Zen 4 pomaga wycisnąć dodatkowe wydajność wykraczająca poza to, co można obecnie znaleźć w kompilatorach open-source:
LLVM Clang 14 kompilował oprogramowanie z włączonym AVX-512 i innymi nowymi rozszerzeniami, więc w tym teście porównawczym AOCC vs. wpływ tuningu/optymalizacji AMD, a nie żadne różnice ISA.
AOCC 4.0 wygląda na niezłą rt za pomoc w maksymalizacji wydajności procesora Zen 4 po stronie kompilatora.
AOCC 4.0 pokazywał kilka fajnych ulepszeń oprócz i tak już świetnej wydajności AMD Ryzen 9 7950X Linux:
Korzystanie z AOCC 4.0 w porównaniu z wcześniejszym kompilatorem LLVM Clang 14, na którym jest on oparty, umożliwia uzyskanie niewielkich lub znacznych wzrostów wydajności. Miejmy nadzieję, że GCC wkrótce zobaczy dostrojoną tabelę kosztów dla Zen 4 dla jego początkowego włączenia Znver4, a następnie nadal czeka na włączenie LLVM/Clang znver4 i ewentualne dostrojenie.
Długa historia Krótko mówiąc, AOCC 4.0 wygląda świetnie, przynajmniej na moich wstępnych testach przeprowadzonych na AMD Ryzen 9 7950X. Oprócz ścieżki AOCC jako zoptymalizowanego kompilatora skoncentrowanego na AMD, nadal mam nadzieję – i naciskam – aby AMD zapewniło kompilatorom open-source GCC i LLVM/Clang terminowe i honorowe wsparcie. AMD absolutnie zaznacza wszystkie właściwe pola w zakresie wykonywania sprzętu w tej chwili, podczas gdy po stronie oprogramowania Linux/open-source nadal wykazują pole do poprawy, zwłaszcza jeśli chcą dopasować się do tradycji i poziomu wsparcia, z którego od dawna korzystają klienci Intel Linux dla jakość wsparcia open-source przy uruchomieniu. AMD ze swojej strony poprawia się po stronie oprogramowania, a ich ciągłe zatrudnianie (po początkowej fali sukcesów EPYC w centrum danych, co pozwala na zwiększenie inwestycji) z pewnością pracuje nad skierowaniem statku w tym kierunku.
Co więcej, osobiście nadal jestem nieco zakłopotany, dlaczego AMD czeka do późniejszej premiery EPYC, zanim opublikuje AOCC 4.0, zamiast uderzać początkowo, gdy seria Ryzen 7000 po raz pierwszy zadebiutowała. Wcześniejsze wykonanie mogło zapewnić lepsze wrażenia dla dowolnych komputerów stacjonarnych/stacji roboczych programistów i tych, którzy mogą używać serii Ryzen 7000 jako oceny/odskoczni do rozpoczęcia przygotowywania własnych baz kodu oprogramowania dla Zen 4 z ewentualnymi serwerami EPYC. Tak samo było w przypadku Zen 3, który czekał na Milan przed opublikowaniem AOCC 3.0 z kilkumiesięczną przerwą, że desktopy deweloperów Ryzen, ci, którzy korzystają z dystrybucji Linuksa opartych na źródłach, deweloperzy kompilatorów open-source mają więcej czasu na profilowanie różnic w generowanym kodzie, a inni mogli pomóc „kopnąć opony” w nowym AOCC przed dostępnością EPYC. Heck, dlaczego nie wysłać go wcześniej jako AOCC „beta” do testów Ryzen? Wyobrażam sobie, że to również sprowadza się do zasobów inżynieryjnych i potrzebują całego czasu, który mogą uzyskać, aby opracować optymalizacje kompilatora.
Bądź na bieżąco, aby uzyskać więcej testów porównawczych AOCC 4.0 z EPYC Genoa i większe porównanie kompilatorów, w tym Clang-15/GCC-13/etc na Zen 4 jako wsparcie dla wszystkich tych kompilatorów widać ulepszenia. Biorąc pod uwagę wczorajsze testy AMD EPYC 9654 i 9554 Genoa, całkiem fajnie będzie zobaczyć, o ile ogólnie szybszy jest ten duży zestaw testów, gdy wykorzystuje się AOCC 4.0 w porównaniu z GCC 12 używanym w kompilatorze systemowym na wszystkich testowanych procesorach.