Red Hat razvija MIR JIT kompajler

U Red Hatu razvoj u toku novi lagani JIT kompajler ME, koji osigurava izvršavanje koda koji je prethodno konvertovan u srednju reprezentaciju MIR (Medium Internal Representation, ne treba se brkati sa drugom posrednom reprezentacijom ME (srednji nivo IR), koji se koristi u Rust kompajleru). Projekat ima za cilj da obezbedi okvir za implementaciju brzih i kompaktnih prevodilaca i JIT-a. Kod projekta je napisan u C i distribuira pod MIT licencom.

U trenutnoj fazi razvoja pripremljeni su prevodioci za srednje predstavljanje MIR-a C jezik i bitcode LLVM (Bitcode), ali se u budućnosti planira implementacija mogućnosti generiranja MIR-a za WebAssembly, Java bytecode, CIL (Zajednički srednji jezik), Rust i C++. Projekat razvija jedan od programera JIT motora MJIT, koristi se u Rubyju. Prije svega, planirana je implementacija JIT-a zasnovanog na MIR-u CRuby и MRuby. U budućnosti je također moguće portirati GCC za korištenje MIR-a.

Red Hat razvija MIR JIT kompajler

Srednji MIR kod se može predstaviti u binarnom i tekstualnom (čitljivom) obliku. Ovaj kod se može izvršiti u interpretatoru i na osnovu njega se može generisati mašinski kod (x86_64, u ARM64, PPC64 i MIPS64 planovima). Također je moguće izvršiti obrnutu konverziju - iz MIR u CIL, Java bytecode, WebAssembly i C kod.

Među karakteristikama MIR-a ističu se strogo kucanje, podrška za module i funkcije, pružanje seta instrukcija za konverziju tipa, poređenje, aritmetičke i logičke operacije, grananje itd. Moduli, koji uključuju skup funkcija konvertovanih u MIR format, mogu se učitavati u obliku biblioteka, a mogu i eksterni C kod.

Red Hat razvija MIR JIT kompajlerRed Hat razvija MIR JIT kompajler

Ključna prednost izvršavanja međukoda u JIT-u umjesto kompajliranja u izvorne izvršne datoteke je mogućnost generiranja kompaktnih datoteka koje se mogu izvršiti bez ponovne izgradnje na različitim hardverskim arhitekturama (x86, ARM, PPC, MIPS). Za nepodržane arhitekture, dostupan je način interpretacije, koji je u slučaju MIR-a 6-10 puta sporiji od JIT-a.

Nedostaci postojećih JIT kompajlera
GCC i LLVM se nazivaju pretjerano napuhanost, mala brzina kompilacije i poteškoće u implementaciji kombinovanih optimizacija za različite programske jezike. MIR programeri su pokušali riješiti ove probleme
problemi i postavljeni ciljevi:

  • Kompilacija u MIR bi trebala biti najmanje 100 puta brža nego u GCC;
  • JIT za izvršenje MIR-a mora biti veoma kompaktan i uključivati ​​približno 15 hiljada linija koda;
  • Izvršavanje MIR-a pomoću JIT-a ne bi trebalo da bude više od 30% sporije od performansi izvršne datoteke kompajlirane iz istog C koda u GCC-u (sa "-O2" optimizacijama);
  • Faze inicijalizacije prije početka stvarnog izvršenja trebale bi trajati 100 puta manje vremena;
  • MIR reprezentacija za JIT mora biti 100 puta manja od izvršne kompajlirane u GCC-u.

U svom trenutnom obliku, implementacija MIR-a je na mnogo načina ispred prvobitno postavljenih ciljeva: testovi su pokazali da su performanse kompilacije u MIR-u 2 puta brže od “GCC-O178”, performanse izvršenja zaostaju za 6% za izvornim kodom, veličina koda je 144 puta manji, MIR implementacija JIT je 16 hiljada linija koda.

Red Hat razvija MIR JIT kompajler

izvor: opennet.ru

Dodajte komentar