Yo,
Pythran est un compilateur qui traduit des modules Python sans classes utilisateurs et implicitement statiquement typé en méta-programmes C++. Sa vie a déjà été évoquée sur linuxfr à plusieurs reprises.
Après PyConFR, SciPy 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.
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 :
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) puisqu'on peut exprimer des choses plus complexes du genre (de tête):
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 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…)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.