parallel programming in c with mpi and openmp
DESCRIPTION
Parallel Programming in C with MPI and OpenMP. Michael J. Quinn. Chapitre 9. Classement de documents. Objectifs. Complète l ’ introduction aux fonction MPI Implémentation d ’ un programme de type: manager-worker Utilisation de communications non bloquantes. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/1.jpg)
Parallel Programmingin C with MPI and OpenMP
Michael J. Quinn
![Page 2: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/2.jpg)
Chapitre 9Classement de documents
![Page 3: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/3.jpg)
ObjectifsComplète l’introduction aux fonction MPI
Implémentation d’un programme de type: manager-worker
Utilisation de communications non bloquantes.
![Page 4: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/4.jpg)
Problème de classement de documentsOn recherche dans des répertoires et sous-répertoires des
documents (ex: .html, .txt, .tex, etc.)
On utilise un dictionnaire de mots clef afin de créer un vecteur “profil” pour chaque document.
On mémorise les vecteurs profils
![Page 5: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/5.jpg)
Problème de classement de documents
![Page 6: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/6.jpg)
Dépendence des tâches(1)Lire le
dictionnaireIdentifier lesdocuments
Lire les documents
Générer lesvecteursprofils
Afficher les vecteurs
![Page 7: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/7.jpg)
Partition et CommunicationLa plus grande part du temps est passé à lire les document et
générer les vecteurs profils
Cela implique deux tâches primitives pour chaque document
![Page 8: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/8.jpg)
Dépendance des tâches(2)Lire le
dictionnaireIdentifier lesdocuments
Lire le Document 1
Lire le Document n-1
Lire le Document 0
Générer levecteurProfil 0
Générer levecteurProfil 1
Générer levecteur
Profil n-1
Afficher les vecteurs
![Page 9: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/9.jpg)
Nombre restreint de processusNombre de tâches inconnu avant l’exécution
Les tâches ne nécessitent pas de communiquer entre elles
Le temps de traitement des documents peut varier considérablement
Stratégie: On distribue les tâches aux processus en cours d’exécution.
![Page 10: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/10.jpg)
Gestionnaire-Travailleurs
![Page 11: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/11.jpg)
Gestionnaire/travailleurs vs. SPMD
SPMD (single program multiple data)Chaque processus exécute la même fonctionForme particulière de MIMD
Gestionnaire/travailleursLe processus gestionnaire a des responsabilité
différentes des processus travailleursDans un programme MPI de type
gestionnaire/travailleurs, le flot de controle se sépare rapidement entre le gestionnaire et les travailleurs.
![Page 12: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/12.jpg)
Rôle du gestionnaire et des travailleurs
Lire le dictionnaire
Identifier lesdocuments
Lire les Documents
Générer lesvecteursprofils
Afficher les vecteurs
Travailleurs Gestionnaires
![Page 13: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/13.jpg)
Pseudocode du gestionnaireIdentifier les documentsRecevoir du travailleur 0 la taille du dictionnaireCréer une matrice pour mémoriser les vecteurs profilsrépéter
Recevoir un message d’un travailleurSi le message contient un vecteur profil
Mémoriser le vecteurS’il reste un document alors
envoyer le nom du fichier au travailleur Sinon
envoyer un message de terminaisonJusqu’à ce que tous les travailleurs aient terminé Sauver la matrice de vecteur dans un fichier.
![Page 14: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/14.jpg)
Pseudocode des travailleurs
Envoyer un premier message au gestionnaireSi id==0 alors
Lire le dictionnaire d’un fichierDiffuser le dictionnaire aux autres travailleursConstruire une table de hachage à partir du dictionnaireSi id==0 alors
Envoyer la taille du dictionnaire au gestionnaireRépéter
Recevoir un nom de fichier du gestionnaireSi le nom est nul alors terminerLire le document et générer le vecteur profilEnvoyer le vecteur au gestionnaire
indéfiniment
![Page 15: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/15.jpg)
Task/Channel Graph
![Page 16: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/16.jpg)
MPI_AbortPermet de terminer tous les processus d’un communicator
donnée
Example d’utilisation: Lorsque le gestionnaire ne peut pas allouer l’espace nécessaire pour mémoriser les vecteurs profils.
![Page 17: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/17.jpg)
Prototype de MPI_Abort
int MPI_Abort (
MPI_Comm comm, /* Communicator */
int error_code) /* Code d’erreur*/
![Page 18: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/18.jpg)
Créer un communicator pour les travailleurs
Le dictionnaire est diffusé aux travailleurs
On ceut créer un communicator qui ne comprend que les travailleurs
Fonction MPI_Comm_split: Crée des nouveaux communicators à partir de couleurs et de clefs.
![Page 19: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/19.jpg)
MPI_Comm_splitint MPI_Comm_split(
MPI_Comm comm, /* Communicator à diviser */
int color, /* Indique le sous-groupe */
int key, /* Rang dans le sous-groupe */
MPI_Comm *newcomm /* handle vers le sous-groupe */
)
Note: Lorsque color vaut MPI_UNDEFINED alors la valeur retournée dans newcomm vaut MPI_COMM_NULL
![Page 20: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/20.jpg)
Création d’un communicator pour les travailleurs
int id;MPI_Comm worker_comm;
...
if (!id) /* Manager */ MPI_Comm_split (MPI_COMM_WORLD, MPI_UNDEFINED, id, &worker_comm);
else /* Worker */ MPI_Comm_split (MPI_COMM_WORLD, 0, id, &worker_comm);
![Page 21: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/21.jpg)
Send / Receive non bloquantMPI_Isend, MPI_Irecv: initie les opérations
MPI_Wait: Bloque jusqu’à la complétion
On peut faire un appel non bloquant tôtMPI_Isend: Aussitôt que le message est prêtMPI_Irecv: Aussitôt que le tampon est disponible
Permet le chevauchement de la communication et du calcul.
![Page 22: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/22.jpg)
Function MPI_Isend
int MPI_Isend ( void *buffer, int cnt, MPI_Datatype dtype, int dest, int tag, MPI_Comm comm, MPI_Request *handle)
Pointeur vers un objet qui identifie l’opération
![Page 23: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/23.jpg)
Function MPI_Irecv
int MPI_Irecv ( void *buffer, int cnt, MPI_Datatype dtype, int src, int tag, MPI_Comm comm, MPI_Request *handle)
Pointeur vers un objet qui identifie l’opération
![Page 24: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/24.jpg)
Function MPI_Wait
int MPI_Wait (
MPI_Request *handle,
MPI_Status *status
)
![Page 25: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/25.jpg)
MPI_Status
typedef struct _status MPI_Status;
struct _status { int MPI_SOURCE;int MPI_TAG;int MPI_ERROR;int st_length; /* message length */
};
![Page 26: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/26.jpg)
Recevoir le nom des fichiersLes travailleurs ne connaissent pas à l’avance la longueur des
noms qu’ils vont recevoir
AlternativesAllocation statique: Prévoir un grand tableauAllocation dynamique: recevoir la longueur des noms en cours
d’exécution
On choisira la seconde alternative
![Page 27: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/27.jpg)
Function MPI_Probeint MPI_Probe (
int src,
int tag,
MPI_Comm comm,
MPI_Status *status)
Bloque jusqu’à ce qu’un message soit prêt à recevoirPermet de voir le statut avant de recevoir le message
![Page 28: Parallel Programming in C with MPI and OpenMP](https://reader035.vdocuments.fr/reader035/viewer/2022062806/56814f55550346895dbcfe34/html5/thumbnails/28.jpg)
Function MPI_Get_count
int MPI_Get_count ( MPI_Status *status,
MPI_Datatype dtype,
int *cnt)
Permet de connaître la taille du message