DeepMind open source S6, une bibliothèque avec une implémentation de compilateur JIT pour CPython

DeepMind, connu pour ses développements dans le domaine de l'intelligence artificielle, a ouvert le code source du projet S6, qui développait un compilateur JIT pour le langage Python. Le projet est intéressant car il est conçu comme une bibliothèque d'extension qui s'intègre au standard CPython, assurant une compatibilité totale avec CPython et ne nécessitant pas de modification du code de l'interpréteur. Le projet se développe depuis 2019, mais malheureusement il a été interrompu et ne se développe plus. Étant donné que les développements créés peuvent être utiles pour améliorer Python, il a été décidé d'ouvrir le code en source libre. Le code du compilateur JIT est écrit en C++ et est basé sur CPython 3.7. et est open source sous la licence Apache 2.0.

En termes de tâches qu'il peut résoudre, S6 pour Python se compare au moteur V8 pour JavaScript. La bibliothèque remplace le gestionnaire d'interpréteur de bytecode existant ceval.c par sa propre implémentation qui utilise la compilation JIT pour accélérer l'exécution. S6 vérifie si la fonction actuelle est déjà compilée et, si c'est le cas, exécute le code compilé, et sinon, exécute la fonction en mode d'interprétation du bytecode, similaire à l'interpréteur CPython. Lors de l'interprétation, le nombre d'instructions exécutées et d'appels associés à la fonction en cours de traitement est compté. Après avoir atteint un certain jalon, un processus de compilation est lancé pour accélérer le code fréquemment exécuté. La compilation est effectuée dans une représentation strongjit intermédiaire qui, après optimisation, est convertie en instructions machine du système cible à l'aide de la bibliothèque asmjit.

Selon la nature de la charge de travail, S6, dans des conditions optimales, démontre une augmentation de la vitesse d'exécution des tests jusqu'à 9.5 fois par rapport au CPython classique. Lors de l'exécution de 100 itérations de la suite de tests Richards, une accélération de 7x est observée, et lors de l'exécution du test Raytrace, qui implique une grande quantité de calculs mathématiques, une accélération de 3 à 4.5x est observée.

Parmi les tâches difficiles à optimiser avec S6 figurent les projets utilisant l'API C, comme NumPy, ainsi que les opérations associées à la nécessité de vérifier les types d'un grand nombre de valeurs. De faibles performances sont également observées pour les appels uniques de fonctions gourmandes en ressources en raison de l'utilisation de la propre implémentation non optimisée de l'interpréteur Python par S6 (le développement n'a pas atteint le stade de l'optimisation du mode d'interprétation). Par exemple, dans le test Unpack Sequence, qui décompresse de grands ensembles de tableaux/tuples, avec un seul appel, il y a un ralentissement jusqu'à 5 fois, et avec un appel cyclique, les performances sont de 0.97 par rapport à CPython.

Source: opennet.ru

Ajouter un commentaire