Parallel Programming in C with MPI and OpenMP

Slides:



Advertisements
Présentations similaires
GEF 435 Principes des systèmes d’exploitation
Advertisements

Cours de C – Séance dexercices 19 Octobre Objectif Ecrire un serveur HTTP Sans gérer la partie réseau, on utilisera un utilitaire pour cela Serveur.
Communications point à point Communications collectives Optimisations
Cours de C – Séance dexercices 02 Octobre Protocole: client Protocole : – Requête client : GET /test.html HTTP/1.1\r\n Host: nom_de_l_hote\r\n Parameter:
Synchronisation des processus père - fils
Module Systèmes dexploitation Chapitre 6 Communication Interprocessus Partie III École Normale Supérieure Tétouan Département Informatique
GEF 435 Principes des systèmes d’exploitations
GEF 435 Principes des systèmes dexploitation Communication Interprocessus (CIP) III (Tanenbaum 2.3)
GEF 243B Programmation informatique appliquée
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
(Classes prédéfinies – API Java)
C.
Introduction à MPI 13 – 16 Décembre 2005 Laurence Viry.
Introduction à MPI Types dérivés MPI Décembre 2005
Personal Home Page / Hypertext Processor (PHP)
MPI et programmation par passage de messages
Système d’Exploitation
Programmation de cartes graphiques
Common Gateway Interface
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Olivier DERUELLE Erwan FOUYER Maxime JOUIN Rodolphe LOUE
MPI (Message Passing Interface)
CSI3525: Concepts des Langages de Programmation Notes # 12: Implementation des Sous-Programmes ( Lire Chapitre 9 )
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
Présentation rapide de MPI : Message Passing Interface
Interface CWIPI Thierry Morel Formation OpenPALM avril 2012
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
FICHIERS : Définition : Algorithme général:
Présentation Structures de Données et TDA
Programmation concurrente
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
PROGRAMMATION MULTI-TÂCHES (MULTITHREADING)
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
AJAX.
Parallel Programming in C with MPI and OpenMP
Parallel Programming in C with MPI and OpenMP
Parallel Programming with MPI and OpenMP Michael J. Quinn.
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Synchronisation Classique
Structures de données IFT-10541
Procédures et fonctions
Plan cours La notion de pointeur et d’adresse mémoire.
Animateur : Med HAIJOUBI
Le langage C Structures de données
JavaScript Nécessaire Web.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
JavaScript.
Interactions entre Processus
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Programmation Système et Réseau
ETNA – 1ème année Guillaume Belmas –
CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.
ISBN Chapitre 10 L'implémentation des sous- programmes.
Asynchronous JavaScript And XML AJAX C. Petitpierre
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
 Formulaires HTML : traiter les entrées utilisateur
6ième Classe (Mercredi, 17 novembre) CSI2572
Chapitre VII Techniques plus avancées à travers le concept de classe.
Hiver 2004SEG2501 Chapître 41 Chapître 4 SDL – structure d’un système et son comportement.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
1 PHP 5 Notions fondamentales (niveau 1 cours #3) Formation continue – Cégep de Sainte-Foy François G Couillard.
QCM VBA.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Correction du TD Chapitre 3.
1 UNIX AVANCE Yves PAGNOTTE – Janvier – LES PROCESSUS SOUS UNIX.
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Transcription de la présentation:

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

Classement de documents 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.

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

Problème de classement de documents

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

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

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

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.

Gestionnaire-Travailleurs

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.

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

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.

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

Task/Channel Graph

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.

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

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.

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

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

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.

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

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

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

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

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

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

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