Red Hat ontwikkelt MIR JIT-compiler

Bij Rode Hoed ontwikkeling is gaande nieuwe lichtgewicht JIT-compiler MIR, dat zorgt voor de uitvoering van code die eerder is omgezet naar een tussenrepresentatie MIR (Medium Internal Representation, niet te verwarren met een andere tussenrepresentatie MIR (middenniveau IR), gebruikt in de Rust-compiler). Het project heeft tot doel een raamwerk te bieden voor de implementatie van snelle en compacte tolken en JIT. De projectcode is geschreven in C en gedistribueerd door onder de MIT-licentie.

In de huidige ontwikkelingsfase zijn vertalers naar de tussenweergave van MIR voorbereid C-taal en bitcode LLVM (Bitcode), maar in de toekomst is het de bedoeling om de mogelijkheid te implementeren om MIR te genereren voor WebAssembly, Java bytecode, CIL (Gemeenschappelijke tussenliggende taal), Rust en C++. Het project wordt ontwikkeld door een van de JIT-engineontwikkelaars MJIT, gebruikt in Ruby. In de eerste plaats is het de bedoeling dat JIT op basis van MIR wordt geïmplementeerd Crubij и MRuby. In de toekomst is het ook mogelijk om GCC over te zetten naar MIR.

Red Hat ontwikkelt MIR JIT-compiler

De tussenliggende MIR-code kan in binaire vorm en in tekstvorm (leesbaar) worden weergegeven. Deze code kan worden uitgevoerd in een tolk en op basis daarvan kan machinecode worden gegenereerd (x86_64, in ARM64-, PPC64- en MIPS64-plannen). Het is ook mogelijk om de omgekeerde conversie uit te voeren - van MIR naar CIL, Java bytecode, WebAssembly en C-code.

Onder de kenmerken van MIR vallen strikt typen, ondersteuning voor modules en functies, het verstrekken van een reeks instructies voor typeconversie, vergelijking, rekenkundige en logische bewerkingen, vertakkingen, enz. op. Modules, die een reeks functies bevatten die zijn geconverteerd naar het MIR-formaat, kunnen worden geladen in de vorm van bibliotheken en kunnen ook externe C-code laden.

Red Hat ontwikkelt MIR JIT-compilerRed Hat ontwikkelt MIR JIT-compiler

Het belangrijkste voordeel van het uitvoeren van tussenliggende code in JIT in plaats van het compileren in native uitvoerbare bestanden is de mogelijkheid om compacte bestanden te genereren die kunnen worden uitgevoerd zonder opnieuw op te bouwen op verschillende hardware-architecturen (x86, ARM, PPC, MIPS). Voor niet-ondersteunde architecturen is een interpretatiemodus beschikbaar, die in het geval van MIR 6-10 keer langzamer is dan JIT.

Nadelen van bestaande JIT-compilers
Er wordt gezegd dat GCC en LLVM overdreven opgeblazen zijn, een lage compilatiesnelheid hebben en dat het moeilijk is om gecombineerde optimalisaties voor verschillende programmeertalen te implementeren. MIR-ontwikkelaars probeerden deze op te lossen
problemen en doelen stellen:

  • Compilatie in MIR moet minstens 100 keer sneller zijn dan in GCC;
  • De JIT voor MIR-uitvoering moet zeer compact zijn en ongeveer 15 regels code bevatten;
  • Het uitvoeren van MIR met behulp van JIT mag niet meer dan 30% langzamer zijn dan de prestaties van een uitvoerbaar bestand dat is samengesteld uit dezelfde C-code in GCC (met "-O2"-optimalisaties);
  • De initialisatiefasen voordat de daadwerkelijke uitvoering begint, zouden 100 keer minder tijd moeten vergen;
  • De MIR-representatie voor JIT moet 100 keer kleiner zijn dan het uitvoerbare bestand dat in GCC is gecompileerd.

In zijn huidige vorm loopt de MIR-implementatie in veel opzichten voor op de aanvankelijk gestelde doelen: tests hebben aangetoond dat de compilatieprestaties in MIR 2 keer sneller zijn dan “GCC -O178”, de uitvoeringsprestaties liggen 6% achter op de native code, de codegrootte is 144 keer kleiner, de MIR-implementatie JIT is 16 regels code.

Red Hat ontwikkelt MIR JIT-compiler

Bron: opennet.ru

Voeg een reactie