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 Michael J. Quinn.

Présentations similaires


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

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

2 Chapitre 9 Classement de documents

3 Objectifs Complète lintroduction aux fonction MPI Implémentation dun 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 1 Lire le Document n-1 Lire le Document 0 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 lexé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 dexé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 TravailleursGestionnaires

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 dun travailleur Si le message contient un vecteur profil Mémoriser le vecteur Sil 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 dun fichier Diffuser le dictionnaire aux autres travailleurs Construire une table de hachage à partir du dictionnaire Si id==0 alors 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 dun communicator donnée Example dutilisation: Lorsque le gestionnaire ne peut pas allouer lespace nécessaire pour mémoriser les vecteurs profils.

17 Prototype de MPI_Abort int MPI_Abort ( MPI_Comm comm, /* Communicator */ int error_code) /* Code derreur*/

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 dun 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 lopé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 lopération

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

25 MPI_Status typedef struct _statusMPI_Status; struct _status { intMPI_SOURCE; intMPI_TAG; intMPI_ERROR; intst_length;/* message length */ };

26 Recevoir le nom des fichiers Les travailleurs ne connaissent pas à lavance la longueur des noms quils vont recevoir Alternatives Allocation statique: Prévoir un grand tableau Allocation dynamique: recevoir la longueur des noms en cours dexé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 quun 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 Michael J. Quinn."

Présentations similaires


Annonces Google