Programmation parallèle

La programmation parallèle ou parallélisme consiste à mettre en œuvre des architectures permettant de traiter des informations ou algorithmes de manière simultanée ayant pour but de réaliser un grand nombre d’opérations en un temps le plus petit possible.

Pour utiliser le parallélisme, les programmes doivent être réalisés avec cette optique.

La programmation parallèle est très utilisé pour le calcul de la dynamique des fluides, les prédictions météorologiques, la modélisation et simulation de problèmes de dimensions plus grandes, le traitement de l’information et l’exploration de données, le déchiffrement de messages, la recherche de mots de passe, le traitement d’images ou la fabrication d’images de synthèse (ex : lancer de rayon), l’intelligence artificielle et la fabrication automatisée.

Principes

La base de la programmation parallèle consiste en la conception d’un code de calcul capable de résoudre un problème donné en utilisant plusieurs processeurs.

Solutions matérielles

Il existe deux solutions matérielles :

  • Mémoire partagée
    • Processeurs physiquement sur un même serveur
    • Communications internes entre les processeurs
    • Solution logicielle : OpenMP
  • Mémoire distribuée
    • Cluster de calcul
    • Communications réseaux sollicitées
    • Solution logicielle : MPI

Solutions logicielles

Il est possible d’utiliser la parallélisation sans réécrire le code si celui-ci a besoin de librairies de calcul standards. Dans ce cas il suffit de compiler le code en utilisant des versions parallèles de ces librairies (GNU ou Intel MKL) et le code sera parallélisé à l’exécution lors des appels à ces librairies.

Sur un cluster, chaque nœud est un système à mémoire partagé :

  • OpenMP : si les processeurs utilisés sont sur un même nœud
  • MPI : si les processeurs utilisés sont sur plusieurs nœuds

Il est quand même possible d’écrire des codes hybrides qui utilisent MPI entre les nœuds et OpenMP au sein même d’un nœud. La solutions est performante mais qui complexe à mettre en œuvre.

OpenMP

OpenMP est une interface de programmation dédiée à la conception de codes sur systèmes à mémoire partagée

  • Simple car le code généré reste assez proche du code séquentiel
  • Parallélisation OpenMP réalisable depuis un code séquentiel
  • Pour compiler avec le support OpenMP,
    • ajouter l’option –openmp (exemple : ifort –openmp exe.f90 –O exe)
    • nombre de processus défini dans une variable d’environnement externe : OMP_NUM_THREADS

MPI : Message Passing Interface

MPI est une Bibliothèque offrant des routines de communication pour la parallélisation permettant la programmation sur des systèmes à mémoire distribuée (cluster de calcul).

  • Complexe car la parallélisation nécessite souvent de réécrire complètement le code
  • Disponible pour les langages C, C++ et Fortran
  • Les fonctions proposées par MPI permettent de traiter :
    • Les communications entre les processus
    • La définition et le traitement des variables
    • La synchronisation des processus

Les principales implémentations de MPI sont :

Documentation

https://fr.wikipedia.org/wiki/Parall%C3%A9lisme_(informatique)

> Partager <