La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Parallel Programming in C with MPI and OpenMP

Présentations similaires


Présentation au sujet: "Parallel Programming in C with MPI and OpenMP"— Transcription de la présentation:

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

2 Classement de documents
Chapitre 9 Classement de documents

3 Objectifs Complète l’introduction aux fonction MPI
Implémentation d’un programme de type: manager-worker Utilisation de communications non bloquantes.

4 Problème de classement de documents
On 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

5 Problème de classement de documents

6 Dépendence des tâches(1)
Lire le dictionnaire Identifier les documents Lire les documents Générer les vecteurs profils Afficher les vecteurs

7 Partition et Communication
La 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

8 Dépendance des tâches(2)
Lire le dictionnaire Identifier les documents Lire le Document 0 Lire le Document 1 Lire le Document n-1 Générer le vecteur Profil 0 Générer le vecteur Profil 1 Générer le vecteur Profil n-1 Afficher les vecteurs

9 Nombre restreint de processus
Nombre 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.

10 Gestionnaire-Travailleurs

11 Gestionnaire/travailleurs vs. SPMD
SPMD (single program multiple data) Chaque processus exécute la même fonction Forme particulière de MIMD Gestionnaire/travailleurs Le processus gestionnaire a des responsabilité différentes des processus travailleurs Dans un programme MPI de type gestionnaire/travailleurs, le flot de controle se sépare rapidement entre le gestionnaire et les travailleurs.

12 Rôle du gestionnaire et des travailleurs
Lire le dictionnaire Identifier les documents Lire les Documents Générer les vecteurs profils Afficher les vecteurs Travailleurs Gestionnaires

13 Pseudocode du gestionnaire
Identifier les documents Recevoir du travailleur 0 la taille du dictionnaire Créer une matrice pour mémoriser les vecteurs profils répéter Recevoir un message d’un travailleur Si le message contient un vecteur profil Mémoriser le vecteur S’il reste un document alors envoyer le nom du fichier au travailleur Sinon envoyer un message de terminaison Jusqu’à ce que tous les travailleurs aient terminé Sauver la matrice de vecteur dans un fichier.

14 Pseudocode des travailleurs
Envoyer un premier message au gestionnaire Si id==0 alors Lire le dictionnaire d’un fichier Diffuser le dictionnaire aux autres travailleurs Construire une table de hachage à partir du dictionnaire Envoyer la taille du dictionnaire au gestionnaire Répéter Recevoir un nom de fichier du gestionnaire Si le nom est nul alors terminer Lire le document et générer le vecteur profil Envoyer le vecteur au gestionnaire indéfiniment

15 Task/Channel Graph

16 MPI_Abort Permet 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.

17 Prototype de MPI_Abort
int MPI_Abort ( MPI_Comm comm, /* Communicator */ int error_code) /* Code d’erreur*/

18 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.

19 MPI_Comm_split int 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

20 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);

21 Send / Receive non bloquant
MPI_Isend, MPI_Irecv: initie les opérations MPI_Wait: Bloque jusqu’à la complétion On peut faire un appel non bloquant tôt MPI_Isend: Aussitôt que le message est prêt MPI_Irecv: Aussitôt que le tampon est disponible Permet le chevauchement de la communication et du calcul.

22 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

23 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

24 Function MPI_Wait int MPI_Wait ( MPI_Request *handle,
MPI_Status *status )

25 MPI_Status typedef struct _status MPI_Status; struct _status {
int MPI_SOURCE; int MPI_TAG; int MPI_ERROR; int st_length; /* message length */ };

26 Recevoir le nom des fichiers
Les travailleurs ne connaissent pas à l’avance la longueur des noms qu’ils vont recevoir Alternatives Allocation statique: Prévoir un grand tableau Allocation dynamique: recevoir la longueur des noms en cours d’exécution On choisira la seconde alternative

27 Function MPI_Probe int MPI_Probe ( int src, int tag, MPI_Comm comm,
MPI_Status *status ) Bloque jusqu’à ce qu’un message soit prêt à recevoir Permet de voir le statut avant de recevoir le message

28 Function MPI_Get_count
int MPI_Get_count ( MPI_Status *status, MPI_Datatype dtype, int *cnt ) Permet de connaître la taille du message


Télécharger ppt "Parallel Programming in C with MPI and OpenMP"

Présentations similaires


Annonces Google