Red Hat entwickelt MIR JIT-Compiler

Bei Red Hat Entwicklung im Gange neuer leichter JIT-Compiler MIR, die die Ausführung von Code gewährleistet, der zuvor in eine Zwischendarstellung MIR (Medium Internal Representation, nicht zu verwechseln mit einer anderen Zwischendarstellung) konvertiert wurde MIR (Mid-Level-IR), wird im Rust-Compiler verwendet). Ziel des Projekts ist es, einen Rahmen für die Implementierung schneller und kompakter Interpreter und JIT bereitzustellen. Der Projektcode ist in C geschrieben und vertrieben von unter der MIT-Lizenz.

Im aktuellen Entwicklungsstand sind Übersetzer in die Zwischendarstellung von MIR vorbereitet C Sprache und Bitcode LLVM (Bitcode), aber in Zukunft ist geplant, die Möglichkeit zu implementieren, MIR für WebAssembly, Java-Bytecode, zu generieren. CIL (Common Intermediate Language), Rust und C++. Das Projekt wird von einem der JIT-Engine-Entwickler entwickelt MJIT, wird in Ruby verwendet. Zunächst ist die Implementierung von JIT auf Basis von MIR geplant CRuby и MRuby. Zukünftig ist es auch möglich, GCC für die Verwendung von MIR zu portieren.

Red Hat entwickelt MIR JIT-Compiler

Der Zwischen-MIR-Code kann in Binär- und Textform (lesbar) dargestellt werden. Dieser Code kann in einem Interpreter ausgeführt und darauf basierend Maschinencode generiert werden (x86_64, in ARM64-, PPC64- und MIPS64-Plänen). Es ist auch möglich, die umgekehrte Konvertierung durchzuführen – von MIR nach CIL, Java-Bytecode, WebAssembly und C-Code.

Zu den Merkmalen von MIR zählen die strikte Typisierung, die Unterstützung von Modulen und Funktionen, die Bereitstellung einer Reihe von Anweisungen für Typkonvertierung, Vergleich, arithmetische und logische Operationen, Verzweigung usw. Module, die eine Reihe von in das MIR-Format konvertierten Funktionen enthalten, können in Form von Bibliotheken geladen werden und können auch externen C-Code laden.

Red Hat entwickelt MIR JIT-CompilerRed Hat entwickelt MIR JIT-Compiler

Der Hauptvorteil der Ausführung von Zwischencode in JIT statt der Kompilierung in native ausführbare Dateien besteht in der Möglichkeit, kompakte Dateien zu generieren, die ohne Neuaufbau auf verschiedenen Hardwarearchitekturen (x86, ARM, PPC, MIPS) ausgeführt werden können. Für nicht unterstützte Architekturen steht ein Interpretationsmodus zur Verfügung, der im Fall von MIR 6–10 Mal langsamer ist als JIT.

Nachteile vorhandener JIT-Compiler
GCC und LLVM sollen übermäßig aufgebläht sein, eine niedrige Kompilierungsgeschwindigkeit haben und es schwierig ist, kombinierte Optimierungen für verschiedene Programmiersprachen zu implementieren. MIR-Entwickler haben versucht, diese zu lösen
Probleme lösen und Ziele setzen:

  • Die Kompilierung in MIR sollte mindestens 100-mal schneller sein als in GCC.
  • Die JIT für die MIR-Ausführung muss sehr kompakt sein und etwa 15 Codezeilen umfassen;
  • Die Ausführung von MIR mit JIT sollte nicht mehr als 30 % langsamer sein als die Leistung einer ausführbaren Datei, die aus demselben C-Code in GCC kompiliert wurde (mit „-O2“-Optimierungen);
  • Die Initialisierungsphasen vor Beginn der eigentlichen Ausführung sollten 100-mal weniger Zeit in Anspruch nehmen;
  • Die MIR-Darstellung für JIT muss 100-mal kleiner sein als die in GCC kompilierte ausführbare Datei.

In ihrer aktuellen Form ist die MIR-Implementierung den ursprünglich gesetzten Zielen in vielerlei Hinsicht voraus: Tests haben gezeigt, dass die Kompilierungsleistung in MIR 2-mal schneller ist als bei „GCC-O178“, die Ausführungsleistung liegt 6 % hinter dem nativen Code, der Codegröße 144-mal kleiner ist, beträgt die JIT der MIR-Implementierung 16 Codezeilen.

Red Hat entwickelt MIR JIT-Compiler

Source: opennet.ru

Kommentar hinzufügen