Le compilateur basé sur Python atteint des accélérations d’ordre de grandeur

Le compilateur basé sur Python atteint des accélérations d'ordre de grandeur

Codon est un compilateur basé sur Python qui vise à démocratiser le calcul haute performance. Crédit : Alex Shipps/MIT CSAIL via Midjourney

En 2018, The Economist a publié un article approfondi sur le langage de programmation Python. “Au cours des 12 derniers mois”, indique l’article, “les utilisateurs de Google en Amérique ont recherché Python plus souvent que Kim Kardashian.” Stars de télé-réalité, méfiez-vous.

Le langage de haut niveau a également gagné sa popularité, avec des légions d’utilisateurs affluant quotidiennement vers le langage pour sa facilité d’utilisation, en partie grâce à sa syntaxe simple et facile à apprendre. Cela a conduit des chercheurs du Laboratoire d’informatique et d’intelligence artificielle du MIT (CSAIL) et d’ailleurs à créer un outil pour aider à exécuter le code Python plus efficacement tout en permettant la personnalisation et l’adaptation à différents besoins et contextes. Le compilateur, qui est un outil logiciel qui traduit le code source en code machine pouvant être exécuté par le processeur d’un ordinateur, permet aux développeurs de créer de nouveaux langages spécifiques à un domaine (DSL) dans Python, qui est généralement plus lent que des langages comme C ou C++, tout en bénéficiant des performances de ces autres langages.

Les DSL sont des langages spécialisés adaptés à des tâches spécifiques qui peuvent être beaucoup plus faciles à utiliser que les langages de programmation à usage général. Cependant, créer un nouveau DSL à partir de zéro peut être un peu un casse-tête.

“Nous avons réalisé que les gens ne veulent pas nécessairement apprendre un nouveau langage ou un nouvel outil, en particulier ceux qui ne sont pas techniques. Nous avons donc pensé, prenons la syntaxe, la sémantique et les bibliothèques Python et incorporons-les dans un nouveau système construit à partir du à la base », déclare Ariya Shajii, Ph.D. , auteur principal d’un nouvel article sur le nouveau système de l’équipe, Codon. “L’utilisateur écrit simplement Python comme il en a l’habitude, sans avoir à se soucier des types de données ou des performances, que nous gérons automatiquement – et le résultat est que leur code s’exécute 10 à 100 fois plus vite que Python normal. Codon est déjà utilisé commercialement dans des domaines comme la finance quantitative, la bioinformatique et l’apprentissage en profondeur.”

L’équipe a soumis Codon à des tests rigoureux, et il a dépassé son poids. Plus précisément, ils ont pris environ 10 applications génomiques couramment utilisées écrites en Python et les ont compilées à l’aide de Codon, et ont obtenu des accélérations cinq à dix fois supérieures aux implémentations originales optimisées à la main. Outre la génomique, ils ont exploré des applications en finance quantitative, qui gère également de grands ensembles de données et utilise fortement Python. La plate-forme Codon dispose également d’un backend parallèle qui permet aux utilisateurs d’écrire du code Python qui peut être explicitement compilé pour les GPU ou plusieurs cœurs, des tâches qui nécessitaient traditionnellement une expertise en programmation de bas niveau.

Pythons dans un avion

Contrairement aux langages comme C et C++, qui sont tous deux livrés avec un compilateur qui optimise le code généré pour améliorer ses performances, Python est un langage interprété. Beaucoup d’efforts ont été déployés pour essayer de rendre Python plus rapide, ce qui, selon l’équipe, se présente généralement sous la forme d’une “approche descendante”, ce qui signifie prendre l’implémentation Python vanille et incorporer diverses optimisations ou “juste à temps”. ” techniques de compilation – une méthode par laquelle les éléments de code critiques pour les performances sont compilés pendant l’exécution. Ces approches excellent dans la préservation de la rétrocompatibilité, mais limitent considérablement les types d’accélérations que vous pouvez atteindre.

“Nous avons adopté une approche plus ascendante, où nous avons tout mis en œuvre à partir de zéro, ce qui comportait des limites, mais beaucoup plus de flexibilité”, explique Shajii. “Ainsi, par exemple, nous ne pouvons pas prendre en charge certaines fonctionnalités dynamiques, mais nous pouvons jouer avec des optimisations et d’autres techniques de compilation statique que vous ne pouviez pas faire à partir de l’implémentation Python standard. C’était la principale différence – peu d’efforts avaient été mis dans une approche ascendante, où de grandes parties de l’infrastructure Python sont construites à partir de zéro.”

La première pièce du puzzle est de fournir au compilateur un morceau de code Python. L’une des premières étapes critiques qui est effectuée est appelée “vérification de type”, un processus dans lequel, dans votre programme, vous déterminez les différents types de données de chaque variable ou fonction. Par exemple, certains pourraient être des nombres entiers, d’autres des chaînes de caractères et d’autres des nombres à virgule flottante – c’est quelque chose que Python normal ne fait pas. En Python standard, vous devez gérer toutes ces informations lors de l’exécution du programme, ce qui est l’un des facteurs qui le rendent si lent. Une partie de l’innovation avec Codon est que l’outil effectue ce type de vérification avant d’exécuter le programme. Cela permet au compilateur de convertir le code en code machine natif, ce qui évite toute la surcharge que Python a dans le traitement des types de données au moment de l’exécution.

“Python est le langage de choix pour les experts du domaine qui ne sont pas des experts en programmation. S’ils écrivent un programme qui devient populaire et que de nombreuses personnes commencent à l’utiliser et à exécuter des ensembles de données de plus en plus volumineux, le manque de performances de Python devient un obstacle critique à succès », déclare Saman Amarasinghe, professeur de génie électrique et d’informatique au MIT et chercheur principal au CSAIL. “Au lieu de devoir réécrire le programme à l’aide d’une bibliothèque implémentée en C comme NumPy ou de réécrire totalement dans un langage comme C, Codon peut utiliser la même implémentation Python et donner les mêmes performances que vous obtiendrez en réécrivant en C. Ainsi, je crois Codon est la voie la plus simple pour les applications Python réussies qui ont atteint une limite en raison d’un manque de performances.”

Plus rapide que la vitesse de C

L’autre pièce du puzzle concerne les optimisations du compilateur. Travailler avec le plugin génomique, par exemple, effectuera son propre ensemble d’optimisations spécifiques à ce domaine informatique, ce qui implique de travailler avec des séquences génomiques et d’autres données biologiques, par exemple. Le résultat est un fichier exécutable qui s’exécute à la vitesse de C ou C++, voire plus rapidement une fois les optimisations spécifiques au domaine appliquées.

Bien que Codon couvre actuellement un sous-ensemble important de Python, il doit encore incorporer plusieurs fonctionnalités dynamiques et étendre sa couverture de bibliothèque Python. L’équipe Codon travaille dur pour combler encore plus l’écart avec Python et se réjouit de publier plusieurs nouvelles fonctionnalités au cours des prochains mois. Codon est actuellement accessible au public sur GitHub.

En plus d’Amarasinghe, Shajii a écrit l’article aux côtés de Gabriel Ramirez, un ancien étudiant de CSAIL et actuel ingénieur logiciel Jump Trading ; Jessica Ray, membre du personnel de recherche associé au MIT Lincoln Laboratory; Bonnie Berger, professeure de mathématiques, de génie électrique et d’informatique au MIT et chercheuse principale au CSAIL ; Haris Smajlović, étudiant diplômé à l’Université de Victoria; et Ibrahim Numanagić, professeur adjoint en informatique à l’Université de Victoria et titulaire d’une chaire de recherche du Canada.

La recherche a été présentée à la conférence internationale ACM SIGPLAN 2023 sur la construction de compilateurs et publiée dans le cadre du CC 2023 : Actes de la 32e conférence internationale ACM SIGPLAN sur la construction de compilateurs.

Plus d’information:
Ariya Shajii et al, Codon : un compilateur pour les applications pythoniques hautes performances et les DSL, CC 2023 : Actes de la 32e conférence internationale ACM SIGPLAN sur la construction de compilateurs (2023). DOI : 10.1145/3578360.3580275

Fourni par le Massachusetts Institute of Technology

Cette histoire est republiée avec l’aimable autorisation de MIT News (web.mit.edu/newsoffice/), un site populaire qui couvre l’actualité de la recherche, de l’innovation et de l’enseignement du MIT.

Citation: Le compilateur basé sur Python réalise des accélérations d’ordres de grandeur (14 mars 2023) récupéré le 14 mars 2023 sur https://techxplore.com/news/2023-03-python-based-orders-of-magnitude-speedups.html

Ce document est soumis au droit d’auteur. En dehors de toute utilisation loyale à des fins d’étude ou de recherche privée, aucune partie ne peut être reproduite sans l’autorisation écrite. Le contenu est fourni seulement pour information.

Laisser un commentaire