Red Hat desenvolupa el compilador MIR JIT

A Red Hat desenvolupament en curs nou compilador JIT lleuger ME, que garanteix l'execució del codi que prèviament s'ha convertit en una representació intermèdia MIR (Representació interna mitjana, que no s'ha de confondre amb una altra representació intermèdia). ME (IR de nivell mitjà), utilitzat al compilador Rust). El projecte pretén proporcionar un marc per implementar intèrprets ràpids i compactes i JIT. El codi del projecte està escrit en C i Distribuït per sota la llicència MIT.

En l'etapa actual de desenvolupament, els traductors a la representació intermèdia de MIR estan preparats llenguatge C i codi de bits LLVM (Bitcode), però en el futur està previst implementar la capacitat de generar MIR per a WebAssembly, Java bytecode, CIL (Llenguatge intermedi comú), Rust i C++. El projecte està sent desenvolupat per un dels desenvolupadors del motor JIT MJIT, utilitzat en Ruby. En primer lloc, s'ha previst la implementació de JIT basat en MIR CRuby и MRuby. En el futur, també és possible portar GCC per utilitzar MIR.

Red Hat desenvolupa el compilador MIR JIT

El codi MIR intermedi es pot presentar en forma binària i de text (llegible). Aquest codi es pot executar en un intèrpret i es pot generar codi màquina a partir d'ell (x86_64, en plans ARM64, PPC64 i MIPS64). També és possible realitzar la conversió inversa: de MIR a CIL, codi de bytes Java, WebAssembly i codi C.

Entre les característiques de MIR, destaquen la mecanografia rigorosa, el suport de mòduls i funcions, la prestació d'un conjunt d'instruccions per a la conversió de tipus, comparació, operacions aritmètiques i lògiques, ramificació, etc. Els mòduls, que inclouen un conjunt de funcions convertides al format MIR, es poden carregar en forma de biblioteques i també poden carregar codi C extern.

Red Hat desenvolupa el compilador MIR JITRed Hat desenvolupa el compilador MIR JIT

L'avantatge clau d'executar codi intermedi en JIT en comptes de compilar en fitxers executables nadius és la capacitat de generar fitxers compactes que es poden executar sense reconstruir en diferents arquitectures de maquinari (x86, ARM, PPC, MIPS). Per a arquitectures no compatibles, hi ha disponible un mode d'interpretació, que en el cas de MIR és 6-10 vegades més lent que JIT.

Desavantatges dels compiladors JIT existents
Es diu que GCC i LLVM estan excessivament inflats, tenen una velocitat de compilació baixa i són difícils d'implementar optimitzacions combinades per a diferents llenguatges de programació. Els desenvolupadors de MIR van intentar resoldre'ls
problemes i establir objectius:

  • La compilació en MIR hauria de ser almenys 100 vegades més ràpida que en GCC;
  • El JIT per a l'execució MIR ha de ser molt compacte i incloure aproximadament 15 mil línies de codi;
  • L'execució de MIR mitjançant JIT no hauria de ser més d'un 30% més lent que el rendiment d'un executable compilat a partir del mateix codi C a GCC (amb optimitzacions "-O2");
  • Les etapes d'inicialització abans de començar l'execució real haurien de trigar 100 vegades menys;
  • La representació MIR per a JIT ha de ser 100 vegades més petita que l'executable compilat a GCC.

En la seva forma actual, la implementació de MIR està en molts aspectes per davant dels objectius establerts inicialment: les proves han demostrat que el rendiment de la compilació en MIR és 2 vegades més ràpid que "GCC -O178", el rendiment d'execució està un 6% per darrere del codi natiu, la mida del codi. és 144 vegades més petit, la implementació MIR JIT és de 16 mil línies de codi.

Red Hat desenvolupa el compilador MIR JIT

Font: opennet.ru

Afegeix comentari