URL: https://linuxfr.org/users/aboulle/journaux/python-haute-performance-et-cristallographie Title: Python haute performance et cristallographie Authors: aboulle Date: 2019年09月02日T14:54:19+02:00 License: CC By-SA Tags: pythran, python, calcul_parallèle, cristallographie, numba, cython et calcul_scientifique Score: 46 Cher journal, À l'instar de l'ami [omc](https://linuxfr.org/users/omc) qui te partageait ses polycops de cours sur "Python for science", je vais moi aussi te parler de Python à travers le prisme de la [cristallographie](https://fr.wikipedia.org/wiki/Cristallographie). Mais qu'est ce donc que la cristallographie vas-tu me demander. Historiquement il s'agit d'une discipline qui vise à déterminer la structure atomique (nature et ordonnancement des atomes) de la matière. Cette discipline est en fait à l'intersection d'un très grand nombre de domaines (physique, chimie, biologie,...) comme en témoigne, par exemple, [la variété des prix Nobels décernés](https://www.iucr.org/people/nobel-prize) en lien avec cette discipline (découverte du graphène, de la structure de l'ADN, de la diffusion des neutrons, etc. etc.). Sans être un expert, on peut aisément voir arriver la complexité calculatoire : nous avons affaire à des atomes et leur distribution dans l'espace, ce qui, même pour des objets tout petits (par exemple quelque micromètres cubes) en représente un nombre colossal. À titre d'exemple, un processeur Intel Xeon contient 10 000 milliards de milliards d'atomes de silicium. Évidemment, au cours de l'histoire plusieurs approximations ont permis de modéliser la matière sans avoir à explicitement prendre en compte autant d'atomes simultanément. Néanmoins, la tendance ces dernières années est de s'affranchir progressivement de ces approximations, tendance rendue possible par la démocratisation de processeurs et co-processeurs de plus en plus performants. J'en viens maintenant à Python. Ce langage, associé aux bibliothèques [NumPy](https://numpy.org/) et [SciPy](https://scipy.org/) (ainsi que les innombrables [scikits](https://www.scipy.org/scikits.html) spécialisés), est devenu le standard de fait pour le calcul scientifique dans un très grand nombre de domaines. Pour ce qui concerne le calcul scientifique, le principal inconvénient de Python *vanilla* est le coté typage dynamique/interprété qui annihile complètement les performances. NumPy permet d'en atténuer les conséquences en introduisant le calcul vectoriel et ainsi s'affranchir de l'écriture de boucles. Cependant, pour de très grands vecteurs, ou tout simplement pour des cas où le code ne peut être vectorisé, NumPy n'est pas d'une grande aide. C'est là où interviennent des compilateurs dont l'objectif est de transformer le code python en "code natif" typé statiquement. Dans l'article que j'ai le plaisir de partager ici ( https://hal.archives-ouvertes.fr/hal-02194025v2 ) nous abordons 4 de ces compilateurs: - [NumExpr](https://github.com/pydata/numexpr) - [Numba](https://numba.pydata.org/) - [Pythran](https://github.com/serge-sans-paille/pythran) - [Cython](https://cython.org/) Je suis d'autant plus flatté de parler de ce sujet ici car, du fait de sa syntaxe simple et ses excellentes performances, Pythran est de loin mon favori, et je sais que son créateur traîne ses guêtres par ici. L'article fait une comparaison systématique de ces compilateurs pour 4 exemples qui parleront aux cristallographes, mais pas seulement : évaluation de séries de Fourier, de distances euclidiennes, etc. L'article est accompagné de notebooks Jupyter qui permettront aux lecteurs intéressés de reproduire les calculs. L'idée est de fournir une base de démarrage pour les nouveaux venus à la programmation Python et au calcul haute performance au sein de notre laboratoire (étudiants ou doctorants principalement). Mais cela peut peut-être être utile à un public plus varié, d'où ce journal. Pour résumer les conclusions de l'article : - NumExpr: syntaxe très simple (proche de Numpy), performances moyennes (meilleures que Numpy mais moins bonnes que les autres) - Numba & Pythran: syntaxe simple, excellentes performances. Bonus pour pour Pythran qui présente des performances plus stables et plus reproductibles. - Cython : excellentes performances et probablement le plus versatile, mais syntaxe lourde (pour un simple scientifique)

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