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.