DeepMind lançou o código-fonte para S6, um compilador JIT para Python

S6-profunda

S6, é uma biblioteca de compilador JIT independente para CPython

mente profunda, conhecido por seus desenvolvimentos no campo da inteligência artificial, anunciou recentemente que tomou a decisão de liberar o código-fonte do projeto S6, que ele desenvolveu a partir de um compilador JIT para a linguagem Python.

O projeto é interessante porque é projetado como uma biblioteca de extensão que pode ser integrado com CPython padrão, que fornece compatibilidade total com CPython e não requer modificação do código do interpretador. O projeto está em desenvolvimento desde 2019, mas infelizmente foi reduzido e não está mais em desenvolvimento.

O S6 foi um projeto iniciado no DeepMind em 2019 para acelerar o CPython com compilação just-in-time ("JIT"). Essas funções seriam fornecidas como uma biblioteca Python normal e nenhuma alteração no interpretador CPython seria necessária. O S6 pretendia fazer pelo Python o que o V8 fez pelo Javascript (o nome é uma homenagem ao V8). O trabalho foi baseado no CPython versão 3.7. Dependendo da carga de trabalho, vimos acelerações de até 9.5x em benchmarks comuns.

O principal motivo pelo qual foi decidido liberar o código fonte, um deles e como já mencionado foi que o projeto deixou de ter suporte, outro dos principais motivos foi dado que com base nos desenvolvimentos criados, estes ainda podem ser úteis para melhorar o python .

Paramos de trabalhar no S6 internamente. Como tal, este repositório foi arquivado e não estamos aceitando solicitações de pull ou problemas. Abrimos o código e fornecemos uma visão geral do design abaixo para estimular conversas na comunidade Python e inspirar trabalhos futuros para melhorar o Python.

Em relação ao funcionamento do S6, devemos mencionar que S6 para Python se compara ao mecanismo V8 para JavaScript em termos de tarefas que resolve. A biblioteca substitui o driver interpretador de bytecode ceval.c existente por sua própria implementação que usa a compilação JIT para acelerar a execução.

S6 verifica se a função atual já foi compilada e, em caso afirmativo, executa o código compilado e, caso contrário, executa a função em um modo de interpretação de bytecode semelhante ao interpretador CPython. A interpretação conta o número de instruções executadas e chamadas associadas à função que está sendo processada.

Depois de atingir um determinado marco, o processo de compilação é iniciado para acelerar o código que é executado com frequência. A compilação é realizada na representação intermediária do strongjit, que, após a otimização, é convertida em instruções de máquina do sistema de destino usando a biblioteca asmjit.

Dependendo da natureza da carga, em condições ideais, o S6 demonstra um aumento na velocidade de execução do teste de até 9,5 vezes em comparação com o CPython normal.

Quando 100 iterações são executadas do conjunto de testes Richards, há uma aceleração de 7 vezes, e ao executar o teste Raytrace, que contém muita matemática, é 3 a 4,5 vezes mais rápido.

Tarefas difíceis de otimizar com S6 são os projetos que usam a API C, como NumPy, bem como operações relacionadas à necessidade de verificar os tipos de um grande número de valores.

Desempenho ruim também é visto para chamadas de função única que consomem muitos recursos devido ao uso da implementação não otimizada do interpretador S6 Python (o desenvolvimento não atingiu o estágio de otimização do modo de interpretação).

Por exemplo, no teste Unpack Sequence, que descompacta grandes conjuntos de arrays/tuplas, uma única chamada mostra uma desaceleração de até 5 vezes e uma chamada cíclica produz 0,97 do CPython.

Finalmente para aqueles interessados ​​em saber mais sobre isso, você deve saber que o código do compilador JIT é escrito em C++ e atualmente é baseado em CPython 3.7, além do fato de que o código fonte já está aberto sob a licença Apache 2.0 e pode ser consultado no link abaixo.


Seja o primeiro a comentar

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.