Red Hat desenvolve compilador MIR JIT

Na Red Hat desenvolvimento em andamento novo compilador JIT leve MIR, que garante a execução do código que foi previamente convertido para uma representação intermediária MIR (Medium Internal Representation, não confundir com outra representação intermediária MIR (IR de nível médio), usado no compilador Rust). O projeto visa fornecer uma estrutura para implementação de intérpretes e JIT rápidos e compactos. O código do projeto é escrito em C e distribuído por sob a licença do MIT.

No atual estágio de desenvolvimento, os tradutores para a representação intermediária do MIR estão preparados para Linguagem C e código de bits LLVM (Bitcode), mas no futuro está prevista a implementação da capacidade de gerar MIR para WebAssembly, bytecode Java, CIL (Linguagem Intermediária Comum), Rust e C++. O projeto está sendo desenvolvido por um dos desenvolvedores do mecanismo JIT MJIT, usado em Ruby. Em primeiro lugar, está prevista a implementação do JIT baseado no MIR para CRuby и MRuby. No futuro, também será possível portar o GCC para usar o MIR.

Red Hat desenvolve compilador MIR JIT

O código MIR intermediário pode ser apresentado em formato binário e de texto (legível). Este código pode ser executado em um interpretador e código de máquina pode ser gerado a partir dele (x86_64, nos planos ARM64, PPC64 e MIPS64). Também é possível realizar a conversão reversa - de MIR para CIL, bytecode Java, WebAssembly e código C.

Dentre as funcionalidades do MIR destacam-se digitação rigorosa, suporte a módulos e funções, disponibilização de conjunto de instruções para conversão de tipos, comparação, operações aritméticas e lógicas, ramificação, etc. Os módulos, que incluem um conjunto de funções convertidas para o formato MIR, podem ser carregados na forma de bibliotecas e também podem carregar código C externo.

Red Hat desenvolve compilador MIR JITRed Hat desenvolve compilador MIR JIT

A principal vantagem de executar código intermediário em JIT em vez de compilar em arquivos executáveis ​​nativos é a capacidade de gerar arquivos compactos que podem ser executados sem reconstrução em diferentes arquiteturas de hardware (x86, ARM, PPC, MIPS). Para arquiteturas não suportadas, está disponível um modo de interpretação, que no caso do MIR é 6 a 10 vezes mais lento que o JIT.

Desvantagens dos compiladores JIT existentes
Diz-se que GCC e LLVM são excessivamente inchados, têm baixa velocidade de compilação e são difíceis de implementar otimizações combinadas para diferentes linguagens de programação. Os desenvolvedores do MIR tentaram resolver estes
problemas e definir metas:

  • A compilação no MIR deve ser pelo menos 100 vezes mais rápida que no GCC;
  • O JIT para execução do MIR deve ser bem compacto e incluir aproximadamente 15 mil linhas de código;
  • A execução do MIR usando JIT não deve ser mais que 30% mais lenta que o desempenho de um executável compilado a partir do mesmo código C no GCC (com otimizações "-O2");
  • Os estágios de inicialização antes do início da execução real devem levar 100 vezes menos tempo;
  • A representação MIR para JIT deve ser 100 vezes menor que o executável compilado no GCC.

Em sua forma atual, a implementação do MIR está em muitos aspectos à frente dos objetivos inicialmente definidos: testes mostraram que o desempenho de compilação no MIR é 2 vezes mais rápido que o “GCC -O178”, o desempenho de execução está 6% atrás do código nativo, o tamanho do código é 144 vezes menor, o JIT de implementação do MIR é de 16 mil linhas de código.

Red Hat desenvolve compilador MIR JIT

Fonte: opennet.ru

Adicionar um comentário