Parallel Programming in C with MPI and OpenMP

28
Parallel Programming in C with MPI and OpenMP Michael J. Quinn

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 Presentation

Transcript of Parallel Programming in C with MPI and OpenMP

Page 1: Parallel Programming in C with MPI and  OpenMP

Parallel Programmingin C with MPI and OpenMP

Michael J. Quinn

Page 2: Parallel Programming in C with MPI and  OpenMP

Chapitre 9Classement de documents

Page 3: Parallel Programming in C with MPI and  OpenMP

ObjectifsComplète l’introduction aux fonctions 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

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 clefs 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

Problème de classement de documents

Page 6: Parallel Programming in C with MPI and  OpenMP

Dépendence des tâches(1)

Page 7: Parallel Programming in C with MPI and  OpenMP

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

Dépendance des tâches(2)

Page 9: Parallel Programming in C with MPI and  OpenMP

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

Gestionnaire-Travailleurs

Page 11: Parallel Programming in C with MPI and  OpenMP

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

Rôle du gestionnaire et des travailleurs

Page 13: Parallel Programming in C with MPI and  OpenMP

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

Pseudocode des travailleursEnvoyer 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

Task/Channel Graph

Page 16: Parallel Programming in C with MPI and  OpenMP

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

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

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

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

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

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

Function MPI_Isendint 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

Function MPI_Irecvint 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

Function MPI_Wait

int MPI_Wait (

MPI_Request *handle,

MPI_Status *status

)

Page 25: Parallel Programming in C with MPI and  OpenMP

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

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

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

Function MPI_Get_countint MPI_Get_count ( MPI_Status *status,

MPI_Datatype dtype,

int *cnt)

Permet de connaître la taille du message