DeepMind S6 de código aberto, uma biblioteca com implementação de compilador JIT para CPython

A DeepMind, conhecida por seus desenvolvimentos na área de inteligência artificial, abriu o código-fonte do projeto S6, que desenvolveu um compilador JIT para a linguagem Python. O projeto é interessante porque foi desenhado como uma biblioteca de extensão que se integra ao CPython padrão, garantindo total compatibilidade com o CPython e não exigindo modificação do código do interpretador. O projeto está em desenvolvimento desde 2019, mas infelizmente foi descontinuado e não está mais em desenvolvimento. Como os desenvolvimentos criados podem ser úteis para melhorar o Python, decidiu-se abrir o código-fonte do código. O código do compilador JIT é escrito em C++ e é baseado no CPython 3.7. e é de código aberto sob a licença Apache 2.0.

Em termos de tarefas que pode resolver, o S6 para Python se compara ao mecanismo V8 para JavaScript. A biblioteca substitui o manipulador de interpretador de bytecode ceval.c existente por sua própria implementação que usa compilação JIT para acelerar a execução. S6 verifica se a função atual já está compilada e, em caso afirmativo, executa o código compilado e, caso contrário, executa a função em modo de interpretação de bytecode, semelhante ao interpretador CPython. Durante a interpretação, é contado o número de instruções executadas e chamadas associadas à função que está sendo processada. Após atingir um determinado marco, um processo de compilação é iniciado para acelerar o código executado com frequência. A compilação é realizada em uma representação intermediária de Strongjit, que, após otimização, é convertida em instruções de máquina do sistema alvo usando a biblioteca asmjit.

Dependendo da natureza da carga de trabalho, o S6, em condições ideais, demonstra um aumento na velocidade de execução de testes de até 9.5 vezes em comparação com o CPython normal. Ao executar 100 iterações do conjunto de testes Richards, observa-se uma aceleração de 7x, e ao executar o teste Raytrace, que envolve uma grande quantidade de cálculos matemáticos, observa-se uma aceleração de 3-4.5x.

Entre as tarefas de difícil otimização com S6 estão projetos que utilizam API C, como NumPy, bem como operações associadas à necessidade de verificação dos tipos de um grande número de valores. O baixo desempenho também é observado para chamadas únicas de funções que consomem muitos recursos devido ao uso da própria implementação não otimizada do interpretador Python do S6 (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, com uma única chamada há uma desaceleração de até 5 vezes, e com uma chamada cíclica o desempenho é de 0.97 do CPython.

Fonte: opennet.ru

Adicionar um comentário