Przedstawiono backend TPDE-LLVM, który działa od 10 do 20 razy szybciej niż LLVM w trybie bez optymalizacji.

Badacze z Technicznego Uniwersytetu Monachium opublikowali narzędzie TPDE oraz oparty na nim backend kompilatora dla LLVM — TPDE-LLVM, który zapewnia generowanie kodu maszynowego dla architektur x86-64 i AArch64 na podstawie pośredniej reprezentacji kodu LLVM-IR. W testach TPDE-LLVM okazał się 10-20 razy szybszy niż backend LLVM -O0 (generator kodu bez optymalizacji) przy tym samym poziomie wydajności wynikowego kodu maszynowego, przy zwiększeniu rozmiaru o 10-30%. Osiągnięcia projektu zostały opublikowane na licencji Apache 2.0.

TPDE-LLVM początkowo ma na celu zapewnienie kompilacji z minimalnymi opóźnieniami oraz jakością odpowiadającą trybowi kompilacji bez optymalizacji („-O0”). Projekt oferuje narzędzie do samodzielnego uruchamiania tpde-llc, bibliotekę do integracji z aplikacjami (na przykład, do realizacji funkcjonalności JIT-kompilatora) oraz łatki do integracji z Clang i Flang.

Przedstawiono backend TPDE-LLVM, który działa od 10 do 20 razy szybciej niż LLVM w trybie bez optymalizacji.

Projekt może być używany jako podstawowy komponent kompilujący dla JIT lub do tworzenia nieoptymalizowanych kompilacji. TPDE-LLVM koncentruje się tylko na szybkości kompilacji i nie próbuje konkurować z optymalizującymi backendami LLVM, które w porównaniu do TPDE-LLVM działają znacznie wolniej, ale pozwalają generować szybszy i bardziej kompaktowy kod maszynowy (około 2 razy szybszy i 2 razy mniejszy pod względem rozmiaru).

TPDE-LLVM wykorzystuje do generacji kodu trzy etapy:

  • Czyszczenie i przygotowanie pośredniej reprezentacji LLVM;
  • Analiza informacji o pętlach i użyciu zmiennych;
  • Generowanie kodu maszynowego.

Przedstawiono backend TPDE-LLVM, który działa od 10 do 20 razy szybciej niż LLVM w trybie bez optymalizacji.

Zauważono, że w ramach uczestnictwa autorów TPDE w gałęziach LLVM 19 i 20 już dodano optymalizacje, które umożliwiły przyspieszenie działania standardowego backendu LLVM o 18% na platformie x86-64 oraz o 13% na platformie ARM64. Zdaniem autorów TPDE w przyszłości można będzie nieznaczną zmianą przyspieszyć backend LLVM o dodatkowe 10-20%, jednak dalsze zwiększenie wydajności będzie wymagało znaczących zmian. Nawet przy znaczącej przebudowie mało prawdopodobne jest, że obecny backend LLVM uda się przyspieszyć dziesięciokrotnie.

Na obecnym etapie rozwoju projekt TPDE zadeklarował jako cel zapewnienie obsługi pośredniej reprezentacji kodu LLVM, uzyskanej przez frontend Clang w trybach optymalizacji „-O0” i „-O1”. Przetwarzanie pośredniej reprezentacji utworzonej w trybie „-O2” nie jest jeszcze gwarantowane z powodu braku wsparcia w TPDE dla operacji wektorowych. Częściowo wspierany jest kod pośredni z Flang i kompilatora Rust.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster