Accélération de codes scientifiques en Python avec Pythran

12:00
Monday
12
May
2014
Organized by: 

Arnaud Legrand

Speaker: 

Serge Guelton

Keywords: 

F107

Le calcul scientifique en Python prend de plus en plus d’importance, grâce à des modules de calculs scientifiques efficaces - numpy et scipy, une bibliothèque de visualisation riche - Matplotlib, et un langage de haut niveau avec un écosystème riche et plusieurs implémentations libres.

Le langage Python ne brille pas par ses performances. Numpy propose une solution efficace à ce problème sous la forme d’un module natif proposant des fonctions écrites en C/Fortran et travaillant sur des données natives, sans encapsulation. Cependant, la frontière entre code interprété et code natif empêche de bénéficier de l’ensemble des capacités de la machine hôte.

Le compilateur Pythran propose de déplacer cette frontière afin de déporter l’ensemble des noyaux de calcul vers un module natif où les opérations Numpy sont fusionnées, parallélisées et vectorisées. Pour atteindre ce résultat, Pythran convertit un sous-ensemble implicitement statiquement typé de Python en un méta-programme C++11, qui est ensuite utilisé, combiné avec quelques annotations de type - typiquement une par fonction exportée - pour générer un module natif parallèle.

Pythran combine des techniques de compilation classiques appliquées au langage Python avec un runtime proposant une API semblable à celle de Numpy utilisant les expressions templates pour fusionner certaines opérations, OpenMP pour les paralléliser et Boost.SIMD pour les vectoriser.

Pythran propose également un ensemble d’analyses et d’optimisations pour construire un compilateur dédié, ou expérimenter de nouvelles optimisations sans avoir à réimplémenter toutes les dépendances.