Accueil > Recherche > Stages/emplois > Compilation et logiciel libre : Compiler efficacement du Python (...)

Compilation et logiciel libre : Compiler efficacement du Python (pythran)

jeudi 26 novembre 2020

Ce stage est co-encadré par Serge Guelton, développeur principal de l’outil pythran, et également développeur et packager de l’infrastructure de compilation LLVM.

Python est un langage typé dynamiquement. Le typage dynamique permet une certaine flexibilité et une syntaxe très légère, qui rendent Python très populaire. Python est en particulièrement très utilisé pour faire du calcul numérique (calcul matriciel, ...). Malheureusement le typage dynamique est aussi un gros handicap en terme de performances. Il y a plusieurs manières classiques de contourner ce problème :

- Prototyper en Python, et ré-écrire la version finale dans un autre langage. Mais la ré-écriture prend du temps, et maintenir deux versions du même algorithme est très pénible.

- Coder en Python, mais utiliser des bibliothèques existantes écrites dans d’autres langages pour les opérations de base, par exemple utiliser la bibliothèque numpy pour les opérations matricielles. Cette approche est très efficace quand les parties intensives en calculs sont contenues dans les bibliothèques. Mais quand on a besoin d’un algorithme non-disponible dans la bibliothèque et qu’on doit écrire du code intensif en calcul en Python, on perd les bénéfices.

- Coder en Python, et ré-écrire seulement les parties intensives en calcul dans un autre langage (comme C), puis interfacer les deux (Python et C). Mais l’interfaçage entre langages est lourd à gérer pour le programmeur.

Une alternative est d’utiliser un compilateur de Python vers un langage typé statiquement et efficace, comme C ou C++. C’est ce que fait l’outil pythran. Mais pour être efficace, un tel traducteur doit typer statiquement le code Python, ce qui nécessite d’une part de restreindre le langage (on ne peut pas compiler tous les programmes Python, seulement un sous-ensemble du Python), et d’autre part des analyses statiques assez poussées pour retrouver les informations de typages.

L’objectif du projet est de contribuer à l’un ou à l’autre de ces deux outils. On pourra par exemple :

- supporter de nouvelles fonctions, par exemple dans numpy.linalg.* dans pythran (demande un bon niveau en C++, plus orienté intégration de bibliothèques que compilation à proprement parler, et peut donner lieu à des analyses de performances pour évaluer la qualité du résultat)

Valid XHTML 1.0 Transitional
SPIP | | Plan du site | Suivre la vie du site RSS 2.0
Habillage visuel © styleshout sous Licence Creative Commons Attribution 2.5 License