TP1 :
INTRODUCTION A MPI EN
UNTILISANT OPENMPI
Réalisé par :
Assarikhi Ouiam
Touzani Imane
Manal Douazi
Beradda Hjar
Encadré par :
Pr. Mohammed Talibi alaoui
Introduction sur le parallélisme :
Le parallélisme consiste à mettre en œuvre des architectures d’électronique
numérique permettant de traiter des informations de manière simultanée, ainsi que les
algorithmes spécialisés pour celles-ci. Ces techniques ont pour but de réaliser le plus grand
nombre d'opérations en un temps le plus petit possible.
Les architectures parallèles sont devenues le paradigme dominant pour tous
les ordinateurs depuis les années 2000. En effet, la vitesse de traitement qui est liée à
l'augmentation de la fréquence des processeurs connait des limites. La création de processeurs
multi-cœur, traitant plusieurs instructions en même temps au sein du même composant, résout ce
dilemme pour les machines de bureau depuis le milieu des années 2000.
La programmation impérative est un paradigme de programmation qui décrit les opérations en
séquences d'instructions exécutées par l'ordinateur pour modifier l'état du programme. Ce type de
programmation est le plus répandu parmi l'ensemble des langages de programmations existants, et
se différencie de la programmation déclarative (dont la programmation logique ou encore la
programmation fonctionnelle sont des sous-ensembles). Afin de nous rendre compte de la
programmation des machines parallèles nous allons programmer en langage C l’API : MPI
(Massage Passing Interface).
I. Généralités sur l’Open MPI :
Open MPI est un projet de bibliothèque MPI (Massage Passing Interface) combinant
les technologies et les ressources de plusieurs autres projets (FT-MPI, LA-MPI,
LAM/MPI et PACX-MPI). Il est utilisé par de nombreux supercalculateurs TO500 y
compris Roadrunner, qui a été le supercalculateur le plus rapide au monde de juin 2008 à
novembre 2009.
Le code Open MPI comprend 3 modules de code principaux :
OMPI - Code MPI
ORTE - l'environnement d'exécution ouvert
OPAL - la couche d'accès portable ouverte
1. Objectif de TP
Nous allons aborder la programmation d’applications reparties avec la librairie de
communication par messages MPI. Une application repartie est composée d’un
ensemble de processus communiquant soit au moyen d’une mémoire partagée, soit
par échange de messages. C’est à ce deuxième type d’applications que nous nous
intéresserons dans le cadre de ce module.
2. Cahier de charges
On désire réaliser communications entre processus, communications point à point et
manipuler les fonctions Send et Recv.
3. Travail pratique :
a. Exercice 1 : Communications entre processus
On va écrire un programme qui envoie "HelloMpi from processus i". Voilà le code :
Exécution :
b. Exercice 2 : Communication point à point
On va écrire un programme où le processus de rang 1 envoie un entier au
processus de rang 0, que cette dernière affiche. Voilà le code :
Exécution :
c. Exercice 3 :
Nous allons manipuler les fonctions Send et Recv. La première étape consiste
à faire marcher le programme suivant sur le support de notre choix. Voilà le
code :
Exécution :
Exercice 4 :
correction du code :
1
.
On fait tourner l’application plusieurs fois on modifiant le nombre de
processus :
2. on met des printf partout dans le programme :
Execution avec 4 processus :
• M
ê
m
e
si les processus envoient leurs messages dans n'importe quel ordre, P0
les reçoit toujours dans l'ordre croissant des rangs, car il récupère
d'abord P1, puis P2, puis P3, etc.
3. on remplace la variable source dans le MPI_Recvpar l’identification
MPI_ANY_SOURCE :
Execution avec 4 processus :
Avec la modification MPI_ANY_SOURCE, on observe que :
• L'ordre des envois est toujours aléatoire :
• Chaque processus (P1, P2, P3) envoie son message à P0 sans
coordination stricte.
• L’ordre dans lequel ils envoient dépend du planificateur du
système d'exploitation et d'autres facteurs
• L’ordre de réception change à chaque exécution
• P0 reçoit les messages dans l'ordre d'arrivée réel et non selon
les rangs des processus.
CONCLUSION :
Pour conclure, nous avons étudié tous les bases et les concepts de la
programmation parallèle, ainsi que le standard Message Passing
Interface (MPI), et à travers ce TP on a eu l'opportunité d'appliquer les
connaissances acquises dans le cours et de les mettre en pratique et à
l'issue de ce TP on a appris à paralléliser pour réduire le temps de
calcul ou effectuer de plus gros calculs en utilisant avec la librairie MPI
et OpenMPI.