Description de l’école

Descriptif de la formation

L’engouement pour le langage Python n’est plus à démontrer et nous pouvons voir dans le monde de l’Enseignement Supérieur et de la Recherche de plus en plus l’utilisation de ce langage pour la réalisation de codes scientifiques.
Si Python est simple d’utilisation, il n’en reste pas moins un langage interprété qui souffre de certaines lenteurs. Or, il est primordial aujourd’hui de développer des applications performantes séquentielles et parallèles pour les architectures machines actuelles. La grande diversité des outils permet néanmoins d’améliorer grandement les performances d’un code de calcul utilisant Python afin d’aboutir à des temps de calcul proche d’un code écrit en langage bas niveau.

Cette formation a pour but d’améliorer et d’enrichir les compétences des personnes utilisant ce langage et ses outils dédiés au Calcul Scientifique.

Le format de cette ANF diffère un peu des précédentes puisque ce sont les participants qui feront une partie du programme en sélectionnant les modules qui les intéressent.
Chaque module sera constitué d’un cours suivi de travaux pratiques.

Descriptif des modules obligatoires

Cython

Cython est un langage hybride entre le Python et le C fait spécifiquement pour le développement de modules d’extension Python. Cython permet d’optimiser du code Python ligne par ligne en remplaçant des variables Python non-typées par des variables C typées. Cython peut également être utilisé pour l’interfaçage avec des routines en C où Fortran. Nous proposons une initiation à son usage dans le cadre de l’optimisation.

Numpy

NumPy propose une implémentation de tableaux multidimensionnels qui permettent d’exprimer un grand nombre d’algorithmes numériques de façon efficaces sans recours à un autre langage que Python. Pour pouvoir exploiter au mieux ce module, il faut adopter une approche de "programmation par tableaux" que nous allons présenter dans ce module

Matplotlib

Lorsque l’on veut faire des représentations graphiques 1D ou 2D en Python, Matplotlib est le module de référence permettant de réaliser des courbes assez rapidement. Nous présenterons donc les briques de bases de Matplotlib permettant de faire des courbes 1D et 2D à partir de tableaux numpy, de mettre des annotations sur ces figures, d’exporter les figures pour les insérer dans des articles, ... Nous parlerons également des limitations de ce module et des alternatives possibles.

Packaging

- Présentation et mise en oeuvre des outils de packaging autour de Python.
- Le cycle de vie d’un module est parcouru, la production/installation (setup), la doc (sphinx), le test (unittest), la gestion de sources (mercurial)
- L’objectif et de montrer que la gestion du packaging est simple et qu’il faut la mettre en place dès le départ du développement.

Performance et profiling

Lors de la phase d’optimisation d’un module, il n’est pas facile de deviner les parties du module les plus gourmandes en temps. Les modules profile et pstats permettent, avec peu d’efforts, de détecter les parties du module prenant le plus de temps. L’utilisation de ces outils se fera sur des exemples plus ou moins basique et il sera présenter en même quelques modules livrés par défaut avec python et quelques astuces afin d’optimiser (ou non !) un code python.

Descriptif des modules à la carte

ActivePapers : la recherche reproductible en Python

La bibliothèque ActivePapers permet de créer des "papiers exécutables" en Python qui contiennent des donnés, du code, et les dépendances entre eux. Avec ActivePapers on peut archiver et publier l’ensemble d’un protocole de calcul.

f2py

f2py permet d’utiliser du code Fortran depuis des programmes Python. Nous montrerons comment f2py génère automatiquement des interfaces et comment il est possible de les modifier si nécessaire. Nous présenterons également les directives que l’on peut ajouter au code Fortran, par exemple pour préciser les arguments d’entrée et de sortie. De nombreux exemples accompagneront la présentation.

Gestion mémoire

La gestion de la mémoire en simulation numérique est une partie critique du code, de part la taille des problèmes que l’on traite actuellement. Ce module parlera de la façon dont la mémoire est gérée en Python en abordant la notion de compteur de référence, de ses avantages et inconvénients avec la gestion du GIL ainsi que la notion de shallow copy (copie vide) et deep copy (copie profonde) et de quand et comment les utiliser.

HDF5

- Présentation rapide de HDF5 et de quelques interfaces Python
- Mise en oeuvre pour l’archivage et accès de gros volumes de données, en séquentiel, en parallèle, avec partage de liens, avec multi-threading

mpi4py

mpi4py est un module Python permettant d’utiliser la librairie MPI (Message Passing Interface) pour faire du parallélisme sur machines distribuées. Développé par Lisandro Dalcin, ce module s’appuie sur cython qui permet de faire l’interfaçage entre la librairie C et Python. Les performances sont toutes aussi bonnes que celles rencontrées lors d’une utilisation de la librairie MPI via un programme C ou Fortran. Les échanges de messages se font au travers de tableaux numpy ou en utilisant pickle. Nous présenterons ici les bases du module en illustrant les communications de bases (point à point, collectives, ...).

Multithread

Ce module propose une initiation à quelques modules et outils qui permettent d’exploiter le parallélisme des machines multiprocesseurs/multicoeurs à mémoire partagée.

Orienté Objets avancé

- Rappels sur les classes en Python
- Encapsulation (properties, introspection, surcharge des opérateurs)
- Dérivation des classes Python

pyCuda/pyOpenCL

pyCuda et pyOpenCL sont, comme leurs noms l’indiquent, deux modules Python permettant de faire du Cuda ou de l’OpenCL. Ils facilitent grandement le développement dans ces langages et permettent donc une bonne initiation à la programmation sur GPU. Nous comparerons les syntaxes pour ces deux modules en nous appuyant sur des exemples simples faisant intervenir des opérations sur des tableux numpy. Nous aborderons également quelques exemples avec pyOpenGL pour la visualisation des données se trouvant sur la carte.

Qt/PySide/PyQt

La librairie Qt permet de faire des interfaces graphiques de qualités et est maintenant très répandue : elle est utilisée pour l’interface de KDE et Koffice, de Mathematica, de VLC media player, ... Elle est également facile d’utilisation notemment en utilisant l’un des 2 modules Python pySide ou PyQt. Nous donnerons sur un exemple simple les principes de développement en Qt pour des applications Python.

swig

swig est un outil qui permet d’accéder à des programmes écrits en C/C++ depuis de multiples langages interprétés : Perl, Python, Ruby,... Seul l’utilisation de swig avec Python sera abordée. A partir d’un fichier d’entête où on lui précise les objets et méthodes C/C++ que l’on souhaite encapsuler, il génère le code d’un module Python. L’efficacité et la qualité du code généré sera étudié via des exemples concrets d’utilisation.

VTK

Nous aborderons la conception d’outils de visualisation sur mesure. Cela a un intérêt lorsque des logiciels tels que ParaView, Visit, Ensight,... ne sont pas envisageables, lorsque l’on veut automatiser la fabrication des images ou lorsque l’on veut faire une visualisation en temps réel.
Nous expliquerons les notions de pipeline de visualisation, de scène, de rendu et d’interaction via plusieurs exemples de scripts Python utilisant le module vtk.


Accueil | Contact | Plan du site | | Statistiques du site | Visiteurs : 2562 / 404478

Suivre la vie du site fr  Suivre la vie du site Présentation du Groupe Calcul  Suivre la vie du site Formations / Ecoles  Suivre la vie du site ANF "Python avancé en calcul scientifique"   ?

Site réalisé avec SPIP 3.0.17 + AHUNTSIC

Creative Commons License