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

14:00
Lundi
12
Mai
2014
Organisé par : 

Arnaud Legrand

Intervenant : 

Serge Guelton

Équipes : 
Mots clés : 
Information détaillée : 

F107

Résumé : 

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.