Red Hat vyvíja kompilátor MIR JIT

V Red Hat vývoj prebieha nový ľahký JIT kompilátor MIR, ktorý zabezpečuje spustenie kódu, ktorý bol predtým konvertovaný na prostrednú reprezentáciu MIR (Medium Internal Representation, nezamieňať s inou prostrednou reprezentáciou MIR (IR strednej úrovne), používané v kompilátore Rust). Cieľom projektu je poskytnúť rámec na implementáciu rýchlych a kompaktných tlmočníkov a JIT. Kód projektu je napísaný v jazyku C a distribuovaný pod licenciou MIT.

V súčasnom štádiu vývoja sú prekladatelia do strednej reprezentácie MIR pripravení jazyk C a bitový kód Llvm (Bitcode), ale v budúcnosti sa plánuje implementácia schopnosti generovať MIR pre WebAssembly, Java bytecode, CIL (Common Intermediate Language), Rust a C++. Projekt vyvíja jeden z vývojárov JIT engine MJIT, používaný v Ruby. V prvom rade sa plánuje implementácia JIT na základe MIR CRuby и MRuby. V budúcnosti je tiež možné preniesť GCC na používanie MIR.

Red Hat vyvíja kompilátor MIR JIT

Medziľahlý MIR kód môže byť prezentovaný v binárnej a textovej (čitateľnej) forme. Tento kód môže byť spustený v tlmočníkovi a na jeho základe môže byť generovaný strojový kód (x86_64, v plánoch ARM64, PPC64 a MIPS64). Je tiež možné vykonať spätnú konverziu - z MIR na CIL, Java bytecode, WebAssembly a C kód.

Medzi vlastnosťami MIR vyniká striktné písanie, podpora modulov a funkcií, poskytovanie súboru inštrukcií na konverziu typov, porovnávanie, aritmetické a logické operácie, vetvenie atď. Moduly, ktoré obsahujú sadu funkcií konvertovaných do formátu MIR, je možné načítať vo forme knižníc a môžu tiež načítať externý C kód.

Red Hat vyvíja kompilátor MIR JITRed Hat vyvíja kompilátor MIR JIT

Kľúčovou výhodou vykonávania prechodného kódu v JIT namiesto kompilácie do natívnych spustiteľných súborov je schopnosť generovať kompaktné súbory, ktoré možno spustiť bez prestavby na rôznych hardvérových architektúrach (x86, ARM, PPC, MIPS). Pre nepodporované architektúry je dostupný interpretačný režim, ktorý je v prípade MIR 6-10 krát pomalší ako JIT.

Nevýhody existujúcich JIT kompilátorov
Hovorí sa, že GCC a LLVM sú príliš nafúknuté, majú nízku rýchlosť kompilácie a je ťažké implementovať kombinované optimalizácie pre rôzne programovacie jazyky. Vývojári MIR sa ich pokúsili vyriešiť
problémy a stanovené ciele:

  • Kompilácia v MIR by mala byť aspoň 100-krát rýchlejšia ako v GCC;
  • JIT na vykonávanie MIR musí byť veľmi kompaktný a obsahovať približne 15 tisíc riadkov kódu;
  • Spustenie MIR pomocou JIT by nemalo byť o viac ako 30 % pomalšie ako výkon spustiteľného súboru skompilovaného z rovnakého kódu C v GCC (s optimalizáciami "-O2");
  • Fázy inicializácie pred začatím skutočného vykonávania by mali trvať 100-krát kratšie;
  • Reprezentácia MIR pre JIT musí byť 100-krát menšia ako spustiteľný súbor skompilovaný v GCC.

Vo svojej súčasnej podobe je implementácia MIR v mnohých smeroch pred pôvodne stanovenými cieľmi: testy ukázali, že výkon kompilácie v MIR je 2-krát rýchlejší ako „GCC -O178“, výkon vykonávania je o 6 % nižší ako natívny kód, veľkosť kódu je 144-krát menšia, implementácia MIR JIT má 16 tisíc riadkov kódu.

Red Hat vyvíja kompilátor MIR JIT

Zdroj: opennet.ru

Pridať komentár