DeepMind S6 de código abierto, una biblioteca con implementación de compilador JIT para CPython

DeepMind, conocida por sus avances en el campo de la inteligencia artificial, ha abierto el código fuente del proyecto S6, que desarrolló un compilador JIT para el lenguaje Python. El proyecto es interesante porque está diseñado como una biblioteca de extensión que se integra con CPython estándar, lo que garantiza una compatibilidad total con CPython y no requiere modificación del código del intérprete. El proyecto se viene desarrollando desde 2019, pero lamentablemente fue discontinuado y ya no se desarrolla. Dado que los desarrollos creados pueden ser útiles para mejorar Python, se decidió abrir el código. El código del compilador JIT está escrito en C++ y se basa en CPython 3.7. y es de código abierto bajo la licencia Apache 2.0.

En términos de las tareas que puede resolver, S6 para Python se compara con el motor V8 para JavaScript. La biblioteca reemplaza el controlador de intérprete de código de bytes existente ceval.c con su propia implementación que utiliza la compilación JIT para acelerar la ejecución. S6 verifica si la función actual ya está compilada y, de ser así, ejecuta el código compilado y, de lo contrario, ejecuta la función en modo de interpretación de código de bytes, similar al intérprete CPython. Durante la interpretación, se cuenta el número de instrucciones ejecutadas y llamadas asociadas con la función que se está procesando. Después de alcanzar un determinado hito, se inicia un proceso de compilación para acelerar el código que se ejecuta con frecuencia. La compilación se lleva a cabo en una representación intermedia de strongjit que, después de la optimización, se convierte en instrucciones de máquina del sistema de destino utilizando la biblioteca asmjit.

Dependiendo de la naturaleza de la carga de trabajo, S6 en condiciones óptimas demuestra un aumento en la velocidad de ejecución de pruebas de hasta 9.5 veces en comparación con CPython normal. Cuando se ejecutan 100 iteraciones del conjunto de pruebas de Richards, se observa una aceleración de 7x, y cuando se ejecuta la prueba Raytrace, que implica una gran cantidad de cálculos matemáticos, se observa una aceleración de 3-4.5x.

Entre las tareas difíciles de optimizar con S6 se encuentran los proyectos que utilizan la API de C, como NumPy, así como las operaciones relacionadas con la necesidad de verificar los tipos de una gran cantidad de valores. También se observa un bajo rendimiento para llamadas únicas de funciones que consumen muchos recursos debido al uso de la implementación no optimizada del intérprete Python propio de S6 (el desarrollo no ha llegado a la etapa de optimización del modo de interpretación). Por ejemplo, en la prueba Unpack Sequence, que descomprime grandes conjuntos de matrices/tuplas, con una sola llamada hay una desaceleración de hasta 5 veces, y con una llamada cíclica el rendimiento es 0.97 respecto a CPython.

Fuente: opennet.ru

Añadir un comentario