DeepMind, conocida por sus desarrollos en el campo de la inteligencia artificielle, dio a conocer recientemente que ha tomado la decisión de liberar el código fuente del proyecto S6qui est téléchargé d’un compilateur JIT pour le langage Python.
Le projet est intéressant Porque está diseñado como una biblioteca de extensión que se puede integrar con CPython estándar, lo que brinda compatibilité totale avec CPython et aucune modification requise del código del intérprete. El proyecto se ha estado desarrollando desde 2019, pero desafortunadamente se redujo y ya no se está desarrollando.
S6 fue un proyecto que comenzó dentro de DeepMind en 2019 para accelerar CPython con compilación justo a tiempo (« JIT »). Estas funciones se proporcionarían como una biblioteca de Python normal y no sería necesario realizar cambios in el intérprete de CPython. S6 fait semblant de hacer por Python lo que V8 hizo por Javascript (el number es un homenaje a V8). Le trabajo se basó en CPython version 3.7. En fonction de la charge de travail, des accélérations de vitesse de 9,5 x et des points de référence communs.
La razón principal del porqué se decidió liberar el código fuente, una de ellas y como ya se mencionó fue que el proyecto dejo de tener soporte, otra de las razones principales fue dado que con base en los desarrollos creados, estos aún pueden ser útiles para meilleur Python.
Hemos dejado de trabajar en S6 internamente. Como tal, este repository ha sido archivado y no estamos aceptando solicitudes de extracción o problemas. Abrimos el código y proporcionamos una descripción general del diseño a continueación para estimular las conversaciones dentro de la comunidad de Python e inspirar el trabajo futuro para mejorar Python.
En cuanto al funcionamiento de S6, debemos mencionar que S6 pour Python se compare avec le moteur V8 pour JavaScript en términos de tareas que resuelve. La bibliothèque remplace le contrôleur de l’interpréteur de code de bytes ceval.c existant avec sa propre mise en œuvre qui utilise la compilation JIT pour accélérer l’exécution.
S6 verifica si la función real ya se ha compilado y, de ser así, ejecuta el código compilado y, de no ser así, ejecuta la función en un modo de interpretación de bytecode similar al intérprete de CPython. La interpretación cuenta el número de instrucciones ejecutadas y llamadas asociadas con la función que se isá procesando.
Después de alcanzar un determinado hito, se inicia el proceso de compilación para accelerar el código que se ejecuta con frecuencia. La compilation se réalise en la représentation intermédiaire 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, en condiciones óptimas, S6 demuestra un aumento en la velocidad de ejecución de la prueba de hasta 9,5 veces en comparación con el CPython habituel.
Cuando se ejecutan 100 itérations del conjunto de pruebas de Richards, foin une accélération de 7 veces, y cuando se ejecuta la prueba Raytrace, que contiene una gran cantidad de cálculos matemáticos, es de 3 a 4,5 veces más rápida.
Las tareas que son difíciles de optimizar avec S6 son los projectos que usan l’API de Ccomo NumPy, así como las operaciones relacionadas with the necesidad de verificar los tipos de una gran cantidad de valores.
También se observa un rendimiento deficiente para llamadas únicas de funciones que consommé beaucoup de recursos debido al uso de la implementation no optimizada del intérprete de Python de S6 (el desarrollo no ha alcanzado la etapa de optimización del modo de interpretación).
Par exemple, dans le test Unpack Sequence, que desempaqueta grandes conjuntos de arrays/tuplas, con una sola llamada se observa una ralentización de hasta 5 veces, y con una llamada cíclica el rendimiento es de 0,97 desde CPython.
Enfin para quienes estén interesados en poder conocer más al respectodeben saber que el código del compilador JIT est écrit en C++ et est actuellement basé sur CPython 3.7, ademas de qué el código fuente ya está ouvert bajo la licencia Apache 2.0 y se puede consultar desde el suivant enlace.