LPython booste la compilation pour les conceptions embarquées
Un groupe de développeurs a mis au point un compilateur pour le langage Python qui permet de compiler le code annoté par type en code machine optimisé.
LPython supporte plusieurs backends pour LLVM, C, C++, WASM, Julia et x86 avec une compilation rapide et des performances d’exécution. Il offre également une compilation Just-In-Time (JIT) et une interopérabilité transparente avec CPython.
Basées sur la nouvelle représentation sémantique abstraite (ASR) partagée avec LFortran, les optimisations intermédiaires de LPython sont indépendantes des backends et des frontends. Les deux compilateurs, LPython et LFortran, bénéficient d’améliorations au niveau de l’ASR pour produire un compilateur qui fonctionne et génère un code rapide.
- Le SDK simplifie le développement de l’intelligence artificielle
- Langage de conception de puces à source ouverte
Tout d’abord, le code d’entrée est transformé en un arbre syntaxique abstrait (AST) à l’aide d’analyseurs syntaxiques. L’AST est ensuite transformé en une représentation sémantique abstraite (ASR), qui préserve toutes les informations sémantiques présentes dans le code d’entrée. L’ASR contient toutes les informations requises par tous les backends sous une forme qui n’est pas spécifique à un backend particulier.
Optimisations du code indépendantes de la machine
LPython met en œuvre plusieurs optimisations indépendantes de la machine par le biais de passes ASR-to-ASR. Il s’agit notamment du déroulement des boucles, de la vectorisation des boucles, de la suppression des codes morts et de l’intégration des appels de fonction, ainsi que de la transformation de la division en opération de multiplication et de la fusion de la multiplication et de l’addition. Toutes les optimisations sont appliquées via une commande -argument de ligne -fast.
LPython agit naturellement comme un compilateur Python. Par défaut, si aucun backend n’est fourni, il compile le code d’entrée de l’utilisateur annoté par type en LLVM, qui génère une sortie finale binaire. Prenons le petit exemple suivant :
Interopérabilité avec CPython
LPython peut appeler des fonctions dans les bibliothèques CPython, ce qui permet de passer à TensorFlow, PyTorch et même à matplotlib. Les décompositions s’exécutent à la vitesse normale (lente) de Python, mais le compilateur accélère les parties mathématiques à une vitesse proche de la vitesse maximale.
« La principale conclusion est que LPython/LFortran génèrent du code rapide par défaut. Nos benchmarks montrent qu’il est facile d’écrire du code LPython à grande vitesse », explique l’équipe. « Nous espérons susciter l’espoir que le code LPython sera en général au moins aussi rapide que le code C++ équivalent. Les utilisateurs aiment Python en raison de ses nombreux avantages en termes de productivité : des outils performants, une syntaxe simple et des structures de données riches telles que les listes, les dicts, les ensembles et les tableaux. Parce que tout programme LPython est également un programme Python ordinaire, tous les outils existants- débogueurs et profileurs, par exemple – peuvent être utilisés. De plus, LPython offre des vitesses d’exécution, même avec des structures de données riches, au moins aussi rapides que les alternatives dans la plupart des cas ».
- L’API pour les systèmes sur modules simplifie l’IA/ML de pointe
- Interview – Python est-il la solution aux problèmes de vérification ?
Les fonctionnalités en cours de développement comprennent un support Jupyter interactif où LPython peut être utilisé comme un noyau Jupyter, permettant un prototypage rapide de type Python/Julia et un flux de travail exploratoire. Il peut également être utilisé à partir de la ligne de commande avec une invite interactive (REPL).
Le support de divers matériels LLVM permet d’exécuter LPython sur des processeurs de toutes les architectures, y compris x86, ARM et POWER, des GPU de Nvidia, AMD et Intel et des processeurs tensoriels TPU de Google.
Des exemples de code et des références sont disponibles sur le site lpython.org. Le code alpha est disponible sur GitHub à l’adresse suivante : github.com/lcompilers/lpython.