DeepMind S6 de código aberto, unha biblioteca cunha implementación do compilador JIT para CPython

DeepMind, coñecida polos seus desenvolvementos no campo da intelixencia artificial, abriu o código fonte do proxecto S6, que desenvolveu un compilador JIT para a linguaxe Python. O proxecto é interesante porque está deseñado como unha biblioteca de extensións que se integra co estándar CPython, garantindo a total compatibilidade con CPython e non requirindo modificación do código do intérprete. O proxecto levase desenvolvendo desde 2019, pero lamentablemente foi descontinuado e xa non se está a desenvolver. Dado que os desenvolvementos creados poden ser útiles para mellorar Python, decidiuse abrir o código. O código do compilador JIT está escrito en C++ e está baseado en CPython 3.7. e é de código aberto baixo a licenza Apache 2.0.

En canto ás tarefas que pode resolver, S6 para Python compárase co motor V8 para JavaScript. A biblioteca substitúe o manejador de intérprete de bytecode existente ceval.c pola súa propia implementación que utiliza a compilación JIT para acelerar a execución. S6 comproba se a función actual xa está compilada e, se é así, executa o código compilado e, se non, executa a función en modo de interpretación de bytecode, similar ao intérprete CPython. Durante a interpretación, cóntase o número de instrucións executadas e chamadas asociadas á función que se está a procesar. Despois de alcanzar un determinado fito, iníciase un proceso de compilación para acelerar o código que se executa con frecuencia. A compilación realízase nunha representación strongjit intermedia, que, despois da optimización, convértese en instrucións de máquina do sistema de destino mediante a biblioteca asmjit.

Dependendo da natureza da carga de traballo, S6 en condicións óptimas demostra un aumento da velocidade de execución das probas de ata 9.5 veces en comparación co CPython normal. Cando se executan 100 iteracións da suite de probas de Richards, obsérvase unha aceleración de 7 veces e cando se executa a proba de Raytrace, que implica unha gran cantidade de cálculos matemáticos, obsérvase unha aceleración de 3-4.5 veces.

Entre as tarefas difíciles de optimizar mediante S6 están os proxectos que utilizan a API C, como NumPy, así como as operacións relacionadas coa necesidade de comprobar os tipos dun gran número de valores. Tamén se observa un baixo rendemento para chamadas únicas de funcións intensivas en recursos debido ao uso da propia implementación non optimizada de S6 do intérprete Python (o desenvolvemento non chegou á fase de optimización do modo de interpretación). Por exemplo, na proba Secuencia de desempaquetado, que desempaqueta grandes conxuntos de matrices/tuplas, cunha única chamada hai unha desaceleración de ata 5 veces, e cunha chamada cíclica o rendemento de CPython é de 0.97.

Fonte: opennet.ru

Engadir un comentario