URL: https://linuxfr.org/users/serge_ss_paille/journaux/pythran-part-a-supercomputing Title: Pythran part à SuperComputing Authors: serge_sans_paille Date: 2013年11月15日T10:22:42+01:00 License: CC By-SA Tags: pythran, python, openmp et fortran Score: 33 Yo, [Pythran](http://pythonhosted.org/pythran/) est un compilateur qui traduit des modules Python sans classes utilisateurs et implicitement statiquement typé en [méta-programmes](http://en.wikipedia.org/wiki/Template_metaprogramming) C++. Sa vie a déjà été évoquée [sur linuxfr](https://linuxfr.org/tags/pythran/public) à plusieurs reprises. Après [PyConFR](http://www.pycon.fr/2012/schedule/presentation/22/), [SciPy](http://www.youtube.com/watch?v=KT5-uGEpnGw) Pythran continue sa montée en puissance et va se frotter aux grands lors d'un _workshop_ à Super Computing, la grand messe du calcul haute performance: [PyHPC](http://www.andreas-schreiber.net/2013/11/pyhpc-2013-accepted-papers). On y parlera des directives [[OpenMP]] et de leur intégration dans Python. Quelques progrès en la matière, puisqu'avant, toutes les variables locales étaient déclarées au niveau de la fonction (comme en FORTRAN 77 !), ce qui était bien lourdingue pour les annotations OpenMP : il fallait tout lister dans des clauses ``private`` et c'était un poil pénible. Exemple : ```python def foo(l, f): out = [0] * len(l) "omp parallel private(i, p, li, lj)" for i, li in enumerate(l): for lj in l: p = li * lj # moche mais c'est pour l'exemple out[i] += p ``` Pythran calcule maintenant le bloc minimal nécessaire pour contenir la définition de chaque variable locale, et éventuellement attache cette déclaration à une affectation si c'est possible. On s'en sort donc avec un ``"omp parallel"`` tout simple et plus concis. L'ancienne formulation reste valable, l'utilisation d'une variable dans une directive étant pris en compte dans le calcul du bloc minimal. Ça va plus loin que le ``prange`` de cython [(cf. la doc)](http://docs.cython.org/src/userguide/parallelism.html) puisqu'on peut exprimer des choses plus complexes du genre (de tête): ```python def bar(l): gmini, gmaxi = l[0], l[0] "omp parallel" if 1: mini, maxi = gmini, gmaxi "omp for" for e in l[1:]: mini, maxi = min(mini, e), max(maxi, e) "omp critical" gmini, gmaxi = min(mini, gmini), max(maxi, gmaxi) ``` et le tout directement en Python. Petit appel à contribution d'ici lundi : si certains d'entre vous peuvent tester / secouer la branche [scope](https://github.com/serge-sans-paille/pythran/tree/scope) de Pythran, elle devrait servir de base pour la release-de-juste-avant-la-conf'. Merci & à bientôt pour de nouvelles aventures (aurais-je un jour le courage de faire une annonce à PyConUS...)

AltStyle によって変換されたページ (->オリジナル) /