A Red Hat fejleszti a MIR JIT fordítót

A Red Hatnél fejlesztés folyik új könnyű JIT fordító MIR, amely biztosítja a korábban köztes reprezentációvá konvertált kód végrehajtását MIR (Medium Internal Representation, nem tévesztendő össze egy másik köztes reprezentációval) MIR (középszintű IR), a Rust fordítóban használatos). A projekt célja, hogy keretet biztosítson a gyors és kompakt tolmácsok és a JIT megvalósításához. A projekt kódja C és betűkkel van írva forgalmazza az MIT engedélye alapján.

A fejlesztés jelenlegi szakaszában a fordítók a MIR köztes reprezentációjához készülnek C nyelv és bitkód LLVM (Bitkód), de a jövőben tervezik a MIR generálásának lehetőségét a WebAssembly-hez, Java bájtkódhoz, CIL (Common Intermediate Language), Rust és C++. A projektet a JIT motorok egyik fejlesztője fejleszti MJIT, használt Ruby. Mindenekelőtt a MIR alapú JIT bevezetését tervezik CRuby и MRuby. A jövőben lehetőség nyílik a GCC portolására is a MIR használatára.

A Red Hat fejleszti a MIR JIT fordítót

A közbenső MIR kód bináris és szöveges (olvasható) formában is bemutatható. Ez a kód értelmezőben végrehajtható és ez alapján gépi kód generálható (x86_64, ARM64, PPC64 és MIPS64 tervekben). Lehetőség van a fordított konverzió végrehajtására is - MIR-ről CIL-re, Java bájtkódra, WebAssembly-re és C kódra.

A MIR szolgáltatásai közül kiemelkedik a szigorú gépelés, a modulok és funkciók támogatása, a típusátalakító utasításkészlet biztosítása, az összehasonlítás, az aritmetikai és logikai műveletek, elágazások stb. A MIR formátumba konvertált függvénykészletet tartalmazó modulok könyvtárak formájában tölthetők be, és külső C kód is betölthető.

A Red Hat fejleszti a MIR JIT fordítótA Red Hat fejleszti a MIR JIT fordítót

A köztes kód JIT-ben történő végrehajtásának fő előnye a natív végrehajtható fájlokba való fordítás helyett az a képesség, hogy kompakt fájlok generálhatók, amelyek különböző hardverarchitektúrákon (x86, ARM, PPC, MIPS) történő újraépítés nélkül is végrehajthatók. A nem támogatott architektúrákhoz értelmezési mód áll rendelkezésre, amely MIR esetén 6-10-szer lassabb, mint a JIT.

A meglévő JIT fordítók hátrányai
A GCC és az LLVM állítólag túlságosan felfuvalkodott, alacsony a fordítási sebességük, és nehéz megvalósítani a kombinált optimalizálást a különböző programozási nyelvekhez. A MIR fejlesztői megpróbálták ezeket megoldani
problémák és kitűzött célok:

  • A MIR-ben történő fordításnak legalább 100-szor gyorsabbnak kell lennie, mint a GCC-ben;
  • A MIR végrehajtásához szükséges JIT-nek nagyon kompaktnak kell lennie, és körülbelül 15 ezer sornyi kódot kell tartalmaznia;
  • A MIR végrehajtása JIT használatával legfeljebb 30%-kal lehet lassabb, mint a GCC-ben azonos C-kódból fordított végrehajtható állomány teljesítménye ("-O2" optimalizálással);
  • Az inicializálási szakaszok a tényleges végrehajtás megkezdése előtt 100-szor kevesebb időt vesznek igénybe;
  • A JIT MIR reprezentációjának 100-szor kisebbnek kell lennie, mint a GCC-ben lefordított végrehajtható fájl.

Jelenlegi formájában a MIR megvalósítás sok tekintetben megelőzi az eredetileg kitűzött célokat: a tesztek kimutatták, hogy a fordítási teljesítmény a MIR-ben 2-szor gyorsabb, mint a „GCC -O178”, a végrehajtási teljesítmény 6%-kal elmarad a natív kódtól, a kód mérete 144-szer kisebb, a MIR implementáció JIT 16 ezer sornyi kód.

A Red Hat fejleszti a MIR JIT fordítót

Forrás: opennet.ru

Hozzászólás