Plan de la formation. Calcul parallèle avec MPI. Pourquoi paralléliser? Parallélisation. Présentation, environnement MPI. Communications point à point

Dimension: px
Commencer à balayer dès la page:

Download "Plan de la formation. Calcul parallèle avec MPI. Pourquoi paralléliser? Parallélisation. Présentation, environnement MPI. Communications point à point"

Transcription

1 Plan de la formation Calcul parallèle avec MPI Guy Moebs Parallélisation Présentation, environnement MPI Communications point à point Laboratoire de Mathématiques Jean Leray, CNRS, Université de Nantes, École Centrale de Nantes Mars 2010 Communications collectives Types de données dérivés Communicateurs et topologies Entrées / sorties collectives : MPI I/O Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Parallélisation Présentation, environnement MPI Communications point à point Communications collectives Types de données dérivés Communicateurs et topologies Entrées / sorties collectives : MPI I/O Exemple récapitulatif : équation de la Chaleur 1D Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Exemple récapitulatif : équation de la Chaleur 1D Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Pourquoi paralléliser? La première question à se poser, c est savoir si la parallélisation de l application est nécessaire Ecrire un programme séquentiel est déjà du travail, souvent difficile ; la parallélisation le rendra encore plus dur Il y a eu beaucoup de progrès technologique dans le matériel informatique (processeurs à 3 GHz, bus mémoire,...) mais il ne faut pas compter sur des avancées au même rythme Pourtant il existe toujours des applications scientifiques qui consomment trop de ressources en temps de processeur ou en mémoire Pour celles-ci, la seule solution, pour des raisons techniques ou économiques, reste la parallélisation Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

2 But de la parallélisation Qu est-ce que la parallélisation? Ensemble de techniques logicielles et matérielles permettant l exécution simultanée de séquences d instructions indépendantes, sur des processeurs différents Bénéfice de la parallélisation? But de la parallélisation 1 processeur 4 processeurs Exécution plus rapide du programme (gain en temps de restitution) en distribuant le travail Résolution de problèmes plus gros (plus de ressource matérielle accessible, notamment la mémoire) Temps d'execution Diminution du temps d exécution le but (Faible) augmentation du temps CPU total - effet de bord Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Exemple : différences finies Problème de différences finies 1D On dispose du vecteur X (0) de taille N et on doit calculer X (T ) selon : 0 < i < N 1, 0 t < T : X (t+1) i = X (t) (t) i 1 + 2X i + X (t) i+1 4 N=8 X X X X X X X X gauche X i droite Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Exemple Algorithme parallèle : création de N tâches, une par valeur de X la tâche i dispose de X (0) i et doit calculer X (1) i, X (2) i,..., X (T ) i A chaque étape elle doit disposer de X (t) i 1 et X (t) i+1 en provenance des tâches i 1 et i + 1 (attention à i = 0 et i = N) Travail en 3 étapes pour la tâche i : 1. envoie sa donnée X (t) i à ces voisines, gauche et droite (si elles existent) 2. reçoit X (t) (t) i 1 et X i+1 en provenance des tâches i 1 et i + 1 (attention à i = 0 et i = N) 3. utilise ces données pour calculer X (t+1) i Les N tâches travaillent indépendamment Seule contrainte : synchronisation lors des réceptions pour effectuer l étape 3 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

3 Optimisation de la parallélisation Optimisation de la parallélisation Execution sur 1 processeur Execution sur 1 processeur Execution sur 4 processeurs Communications inter-processeurs Execution sur 4 processeurs Communications inter-processeurs Temps Temps Une parallélisation efficace minimise les communications Temps CPU total = + A additionner au temps CPU total Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Accélération et efficacité Les deux sont une mesure de la qualité de la parallélisation Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Accélération et efficacité Soit T(p) le temps d exécution sur p processeurs Accélération Courbe Efficacité L Accélération A(p) et l Efficacité E(p) sont définies comme étant : A(p) = T(1) / T(p) (p=1, 2, 3,...) E(p) = A(p) / p idéale En pratique Courbe idéale : 100% En pratique Pour une accélération parallèle parfaite on obtient : T(p) = T(1) / p A(p) = T(1) / T(p) = T(1) / ( T(1) / p) = p E(p) = A(p) / p = p / p = 100% Nombre de processeurs Nombre de processeurs Les programmes scalables demeurent efficaces pour un grand nombre de processeurs (scalables = passage à l échelle) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

4 Scalabilité Propriété d une application à être exécutée efficacement sur un très grand nombre de processeurs Raisons possibles d une faible scalabilité : La machine parallèle employée : architecture inadaptée, charge,... Le programme parallélisé : analyser le comportement, améliorer les performances un peu des deux... Loi d Amdahl Plus une règle qu une loi Principe : Loi d Amdahl Prenons un exemple avec une parallélisation de l ordre de 80% du code : T(1) = T(parallele) + T(séquentiel) = Sur p processeurs, on obtient : T(p) = 80 / p + 20 Quel que soit p, T(p) > 20 A(p) = T(1) / T(p) = 100 / ( 80 / p + 20 ) < 5 E(p) = ( A(p) / p ) < ( 5 / p ) p + 0! La partie non parallèle d un programme limite les performances et fixe une borne supérieure à la scalabilité Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Loi d Amdahl 8,0 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Interconnexion Pour un programmeur, un point essentiel réside dans le type de mémoire de l architecture cible : mémoire partagée ou mémoire distribuée 7,0 Acceleration 6,0 5,0 4,0 3,0 2,0 P = 2 P = 4 P = 8 L interconnexion a un grand impact sur : - le choix de l implémentation de la parallélisation - la performance parallèle - la facilité d utilisation 1,0 0,0 20,0 40,0 60,0 80,0 100,0 Pourcentage de code parallelise L application elle-même, va influer sur la relative importance de ces facteurs Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

5 Ordinateur à mémoire distribuée Le système est programmé en utilisant l échange de messages protocole réseau Ordinateur à mémoire partagée Le mouvement des données est transparent pour l utilisateur transfert mémoire envoie les données déplace les données interconnexion reçoit les données déplace les données interconnexion empaquète les données dépaquète les données S.M.P. = Symmetric Multi-Processor (tous les processeurs sont égaux) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Types de parallélisme Parallélisme de tâches Plusieurs traitements Traitements indépendants Echanges de données, directives de contrôle Le parallélisme découle de la réalisation simultanée de différents traitements sur les données Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Modèles de programmation : passage de messages Les communications sont effectuées en envoyant et en recevant explicitement les messages Les synchronisations sont aussi gérées explicitement Parallélisme de données Données régulières et en grand nombre Traitement identique sur chaque donnée Programmation Data-parallèle Le parallélisme découle de l application simultanée du même traitement sur des données différentes Le programmeur est complètement responsable de l implémentation de la parallélisation Cela signifie prendre soin de : - la gestion des processus, - l envoi, la réception des messages, - les synchronisations (e.g. les barrières) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

6 Exemple de passage de messages B + C = A Exemple de passage de messages MAITRE création des esclaves ESCLAVE (partage B et C) + = + = pour chaque esclave envoi (B,C) fin boucle réception (B,C) + + Temps = = pour chaque esclave réception (A) fin boucle A = B + C envoi (A) (assemblage A) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Passage de messages Il existe des bibliothèques pour implémenter le passage de messages : Message Passing Interface (MPI) ( Le standard de facto Parallel Virtual Machine (PVM) Etait la librairie la plus utilisée Que peut-on en dire? MPI et PVM sont disponibles gratuitement MPI évolue, PVM est figée Implémentation domaine public Les vendeurs de solutions HPC proposent souvent des versions optimisées De telles versions tirent partie des fonctionnalités des architectures Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Modèles de programmation : mémoire partagée Les communications sont effectuées de manière transparente Certaines synchronisations sont aussi gérées de manière transparente C est un très mauvais synonyme pour parallélisation automatique faite par le compilateur Le but est d utiliser le compilateur pour implémenter le parallélisme décrit à l aide de directives (encore fournies par le programmeur) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

7 Exemple pour mémoire partagée Un exemple trivial : DO I = 1, N A(I) = B(I) + C(I) END DO Le compilateur va effectuer le travail suivant (sur 4 processeurs) : N / 4 N / 4 N / 4 N / 4 B C A + = Processeur 1 Processeur 2 Processeur 3 Processeur 4 Mémoire partagée Ce n est pas non plus un monde parfait... Les compilateurs ont encore besoin de directives pour les aider mais aussi assurer la portabilité OpenMP est un effort pour définir un standard ( En général les compilateurs parallélisent au niveau de la boucle Pour assurer des résultats corrects, une analyse fine des dépendances des données est requise Deux problèmes majeurs pour les compilateurs : - obtenir toujours la bonne valeur - toute l information n est pas connue à la compilation : considérer l hypothèse la plus défavorable Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Passage de messages ou mémoire partagée? Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Modèle de programmation hybride quelques observations... Passage de Messages Mémoire partagée noeud 1 noeud 2 Plus long à implémenter Plus facile à implémenter Performance noeud 1 noeud 2 noeud 3 noeud 4 Plus de détails à prendre en compte Augmente la taille du code Moins de détails à gérer Faible hausse de la taille du code noeud 3 noeud 4 passage de messages passage de messages + mémoire partagée Plus de maintenance Peu de maintenance séquentiel Complexe à déboguer et optimiser Augmente le volume mémoire Plus facile à déboguer et optimiser Usage efficace de la mémoire Modèle de programmation Offre une scalabilité optimale Scalable, mais... Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

8 Modèle de programmation hybride Deux types de parallélisme : - parallélisme à gros grains (passage de messages) - parallélisme à grains fins (mémoire partagée) Parallélisation Présentation, environnement MPI Programmation parallèle à un niveau Programmation parallèle hybride Communications point à point Communications collectives mémoire partagée Types de données dérivés communications Communicateurs et topologies Entrées / sorties collectives : MPI I/O Exemple récapitulatif : équation de la Chaleur 1D Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Passage de messages : qu est-ce que c est? Plusieurs processus exécutent le même programme (mais pas forcément les mêmes parties) ; Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 MPI : qu est-ce que c est? Message Passing Interface : bibliothèque de passage de messages Début des années 1990 : chaque constructeur dispose de sa propre implémentation de l échange de messages Besoin d unifier ces modèles pour parvenir à un ensemble de routines couvrant un large spectre de machines et efficacement implémentable Chaque processus dispose de ses propres données et n a pas d accès direct aux données des autres processus ; Les données du programme sont stockées dans la mémoire du processeur sur lequel s exécute le processus ; Une donnée est échangée entre deux ou plusieurs processus via un appel à des routines particulières et spécialisées Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Brouillon présenté en Novembre 1993 (Supercomputing 93)... Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

9 MPI : qu est-ce que c est? L interface avec ces routines définit un standard pratique, portable, efficace, et flexible : utilisable par des programmes écrits en C et Fortran, gestion efficace : évite les recopies en mémoire et permet le recouvrement communications / calcul, interface supportée par les machines de nombreux constructeurs, interface proche de l existant (PVM,...), sémantique indépendante du langage, interface conçue pour être thread-safe Passage de messages avec MPI Il repose sur l échange de messages entre les processus pour le transfert de données, les synchronisations, les opérations globales La gestion de ces échanges est réalisée par MPI (Message Passing Interface) Cet ensemble repose sur le principe du SPMD (Single Program Multiple Data) Chaque processus dispose de ses propres données, sans accès direct à celles des autres Explicite, cette technique est entièrement à la charge du développeur Ces échanges qui impliquent deux ou plusieurs processus se font dans un communicateur Chaque processus est identifié par son rang, au sein du groupe Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Passage de messages avec MPI On classe les routines de la bibliothèque en plusieurs catégories, décrites par la suite ; celles qui traitent de 1. l environnement MPI ; 2. des communications point à point ; 3. des communications collectives ; 4. des types de données dérivés ; 5. des communicateurs ; 6. des entrées / sorties. Voyons cela en détails... Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Environnement MPI Initialisation en début de programme (MPI INIT) INTEGER :: ierr = 0 CALL MPI INIT (ierr) MPI crée alors un communicateur qui regroupe tous les processus actifs et va gérer leurs échanges de données. Le communicateur par défaut s appelle MPI COMM WORLD Finalisation en fin de programmme (MPI FINALIZE) INTEGER :: ierr = 0 CALL MPI FINALIZE (ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

10 Environnement MPI Le nombre de processus gérés par un communicateur est connu avec la routine MPI COMM SIZE : INTEGER :: ierr = 0 INTEGER :: nbprocs CALL MPI COMM SIZE (MPI COMM WORLD, nbprocs, ierr) Chaque processus est identifié par son rang, un entier entre 0 et la valeur retournée par MPI COMM SIZE -1, fourni par la routine MPI COMM RANK : INTEGER :: ierr = 0 INTEGER :: monrang CALL MPI COMM RANK (MPI COMM WORLD, monrang, ierr) les routines suivantes sont ainsi présentes dans tous les programmes MPI : - MPI INIT ; - MPI FINALIZE ; - MPI COMM SIZE ; - MPI COMM RANK Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Environnement MPI : TP 1 PROGRAM hello USE mpi IMPLICIT NONE INTEGER :: nbprocs, monrang, ierr = 0 CALL MPI INIT (ierr) CALL MPI COMM SIZE (MPI COMM WORLD, nbprocs, ierr) CALL MPI COMM RANK (MPI COMM WORLD, monrang, ierr) Fichiers d en-tête Un fichier d entête est toujours nécessaire (mpif.h, mpi.h) La norme MPI 2 crée des interfaces pour le Fortran 95, le C/C++. En Fortran, on dispose dorénavant d un module qui encapsule : - la déclaration des constantes, - la définition des sous-programmes MPI. Ce module s utilise de manière analogue à tout module, avec l instruction USE : USE mpi Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Environnement MPI : TP 1 Compilation : (plate-forme dépendant!) ifort -O3 tp1.f90 -o tp1.out -lmpi Exécution : mpirun -np 3./tp1.out Bonjour, je suis le processus de rang 2 parmi 3 processus. Bonjour, je suis le processus de rang 0 parmi 3 processus. Bonjour, je suis le processus de rang 1 parmi 3 processus. WRITE (6,*) Bonjour, je suis le processus de rang, & monrang, parmi, nbprocs, processus. CALL MPI FINALIZE (ierr) END PROGRAM hello Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

11 Communications Pour réaliser des opérations impliquant des données d autres processus, il est nécessaire d échanger ces informations aux travers de messages Ces messages se font sous la forme de communications impliquant au moins deux processus On peut faire une analogie avec le courrier électronique Parallélisation Présentation, environnement MPI Communications point à point Communications collectives 0 Types de données dérivés Expediteur 5 4 Communicateurs et topologies Collecte 1 Donnee 3 Entrées / sorties collectives : MPI I/O 2 Destinataire Exemple récapitulatif : équation de la Chaleur 1D Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communications point à point La communication point à point est une communication entre deux processus : expéditeur et destinataire Elle comprend deux opérations élémentaires : l envoi et la réception Différents ingrédients sont nécessaires pour composer un message - le communicateur - l identifiant du processus expéditeur - l identifiant du processus destinataire - une étiquette (tag) qui permet au programme de distinguer différents messages ils forment l enveloppe du message Les données envoyées sont typées, le message contient aussi : - la donnée à transmettre, - son type, intrinsèque ou dérivé, - sa taille Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communications point à point USE mpi INTEGER :: monrang, ierr = 0 CHARACTER(10) :: message INTEGER, DIMENSION(MPI STATUS SIZE) :: status CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, monrang, ierr) IF (monrang == 0) THEN message = "Salut" CALL MPI SEND (message, len(message), MPI CHARACTER,& 1, 99, MPI COMM WORLD, ierr) ELSE CALL MPI RECV (message, len(message), MPI CHARACTER,& 0, 99, MPI COMM WORLD, status, ierr) WRITE (6, (A) ) message END IF Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

12 Communications point à point Le processus 0 (monrang = 0) envoie un message au processus de rang 1 (monrang = 1) avec l opération d envoi : CALL MPI SEND (buf, count, datatype, dest, tag, & comm, ierr) buf, count et datatype constituent le message L enveloppe spécifie le destinataire et inclut des informations utilisables par le destinataire pour sélectionner un message particulier Ainsi c est l envoi : - d un message identifié par tag, - de longueur count, - de type datatype, - à partir de l adresse buf, - au processus dest, - dans le communicateur comm. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 CALL MPI SEND (buf, count, datatype, dest, tag, comm, ierr) buf IN au choix count IN entier non négatif datatype IN objet MPI dest IN entier tag IN entier comm IN objet MPI ierr OUT entier CALL MPI RECV (buf, count, datatype, src, tag, comm, status, ierr) buf OUT au choix count IN entier non négatif datatype IN objet MPI src IN entier tag IN entier comm IN objet MPI status OUT tableau d entiers ierr OUT entier Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communications point à point Le processus 1 (monrang = 1) réceptionne un message avec l opération MPI RECV : CALL MPI RECV (buf, count, datatype, src, tag, comm, status, ierr) Les trois premiers arguments décrivent le buffer de réception Les trois suivants permettent de choisir le message voulu Le dernier (hors code d erreur) contient des informations sur le message juste reçu Important : l étiquette doit être la même pour les deux processus Ainsi c est la réception : - d un message identifié par tag, - de longueur count, - de type datatype, - à partir de l adresse buf, - en provenance du processus src, - dans le communicateur comm Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communications point à point : TP 2 Taper le programme précédent Le compiler L exécuter sur 2 processus L exécuter sur 4 processus Remarques / Conclusions? Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

13 Communications point à point : premier bilan MPI SEND (buf,count,datatype,dest,tag,comm,ierr) INTEGER, DIMENSION(MPI STATUS SIZE) :: status MPI RECV (buf, count, datatype, src, tag, comm, status, ierr) Envoi et réception d une donnée vers un destinataire avec attente de la fin de la communication avant de continuer l exécution Un message peut être reçu si on a la correspondance sur l enveloppe (source, tag, comm) Sécurité : on a la donnée envoyée ou reçue (resp.) avant de la modifier / l employer (resp.) Inconvénient : attente de la fin de l opération, voire de l opération elle-même pour continuer les calculs Autres possibilités... à suivre Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Principaux types de données intrinsèques : C Les types des données sont transmis à MPI au travers de constantes Type de données MPI Type de données C MPI CHAR signed char MPI SHORT signed short int MPI INT signed int MPI LONG signed long int MPI UNSIGNED CHAR unsigned char MPI UNSIGNED SHORT unsigned short int MPI UNSIGNED unsigned int MPI UNSIGNED LONG unsigned long int MPI FLOAT float MPI DOUBLE double MPI LONG DOUBLE long double Principaux types de données intrinsèques : Fortran Les types des données sont transmis à MPI au travers de constantes Type de données MPI Type de données Fortran MPI INTEGER INTEGER MPI REAL REAL MPI DOUBLE PRECISION DOUBLE PRECISION MPI COMPLEX COMPLEX MPI LOGICAL LOGICAL MPI CHARACTER CHARACTER(1) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communications point à point : autres possibilités On peut recevoir un message de n importe quelle source : MPI ANY SOURCE On ne connait pas forcément à la compilation le processus qui va envoyer le message On peut recevoir un message muni de n importe quelle étiquette : MPI ANY TAG On ne connait pas forcément à la compilation l ordre d arrivée des messages L argument status des réceptions contient la bonne étiquette et le rang de l expéditeur Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

14 Communications point à point : autres possibilités On peut envoyer un message à un processus n existant pas : MPI PROC NULL Cela permet d éviter des tests fastidieux (conditions aux limites,...) On peut envoyer des messages dont le contenu n est pas une donnée de type intrinsèque, on utilise les types dérivés (voir plus loin) On peut effectuer un envoi et une réception en une seule communication : MPI SENDRECV On peut échanger des données en une seule communication : MPI SENDRECV REPLACE Communications point à point : échanges L échange combine l envoi d un message vers un processus et la réception d un autre message d un autre processus Ces deux processus peuvent être les mêmes Les buffers et les types peuvent être différents MPI SENDRECV ( & sendbuf, sendcount, sendtype, dest, sendtag, & recvbuf, recvcount, recvtype, src, recvtag, & comm, status, ierr) Fonction très utile pour des opérations dans une chaîne de processus Attention à l usage : envoi et réception bloquants Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communications point à point : échanges Remplacement des contenus des buffers entre deux processus : MPI SENDRECV REPLACE ( & buf, count, datatype, dest, & sendtag, src, recvtag, & comm, status, ierr) Le même buffer est employé pour l envoi et la réception L implémentation gère le stockage intermédiaire additionnel Attention à l usage : envoi et réception bloquants Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communications point à point : TP 3 USE mpi INTEGER, DIMENSION(MPI STATUS SIZE) :: status INTEGER, PARAMETER :: tag = 100 INTEGER :: ierr = 0 INTEGER :: u, v, monrang, nbprocs, suiv, prec CALL MPI INIT (ierr) CALL MPI COMM SIZE (MPI COMM WORLD, nbprocs, ierr) CALL MPI COMM RANK (MPI COMM WORLD, monrang, ierr) suiv = mod (monrang+1, nbprocs) prec = mod (nbprocs+monrang-1,nbprocs) v = 0 u = monrang CALL MPI SENDRECV (u, 1, MPI INTEGER, suiv, tag, & v, 1, MPI INTEGER, prec, tag, & MPI COMM WORLD, status, ierr) write (6,*) processus, monrang, u =, u, v =, v CALL MPI FINALIZE (ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

15 Communications point à point : TP 3 Taper le programme précédent Communications point à point Toutes les communications se font simultanément Le compiler L exécuter sur 2 processus L exécuter sur 4 processus Remarques / Conclusions? Attention : tous les processus commencent par envoyer, aucun n est en réception! Risque de blocage (deadlock) selon l implémentation sous-jacente de MPI SEND! Selon les cas, on peut être amené à privilégier les routines MPI SEND et MPI RECV TP 4 : écrire un programme analogue au précédent à l aide des deux routines MPI SEND et MPI RECV sans risque de deadlock Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Optimisation des communications point à point Important d optimiser les communications : gain en perf. Minimiser le temps passé à faire autre chose que des calculs (i.e. l overhead) Différentes possibilités : - recouvrir les communications par des calculs - éviter la recopie du message dans une zone mémoire temporaire - minimiser les surcoûts dûs aux appels répétés aux routines de communications Différents types de communication : - communications standards - communications synchrones - communications bufférisées - communications persistantes. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communications standards CALL MPI SEND (buf, count, datatype, dest, tag, & comm, ierr) CALL MPI RECV (buf, count, datatype, src, tag, & comm, status, ierr) Communication telle que la réception n a lieu que si le message envoyé est arrivé (communication bloquante) Ceci est assuré (pour l expéditeur) soit : - par bufférisation : recopie du message dans un buffer ; - par synchronisation : avant de continuer le calcul après un envoi, on attend que la réception correspondante soit initialisée C est le cas des routines MPI SEND et MPI RECV Le MPI SEND devient bloquant lorsque le message est trop gros pour le buffériser. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

16 Communications synchrones Communication synchrone : avant de continuer le calcul après un envoi, on attend que la réception correspondante soit initialisée ; il n y a pas de bufférisation CALL MPI SSEND (buf, count, datatype, dest, tag,& comm, ierr) La complétion ne peut se faire que si la réception a été postée (i.e. prête) La complétion d un MPI SSEND indique donc que : - la donnée envoyée est à nouveau disponible (i.e. modifiable), - la réception a commencé Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communications persistantes Dans le cas de boucles contenant des communications avec la même liste d arguments : répétition des communications Lier cette liste d arguments à une opération de communication une seule fois Utiliser et ré-utiliser cette opération pour initier et effectuer les communications Permet de réduire la latence (temps pris pour initialiser une communication) ; cela dépend de l implémentation et de l interconnexion sous-jacente Communications bufférisées Le message est recopié dans un buffer avant d être envoyé Cette opération peut être commencée (et terminée) sans que la réception correspondante ne soit prête CALL MPI BSEND (buf, count, datatype, dest, tag,& comm, ierr) Les allocations des buffers mémoire MPI sont gérées avec MPI BUFFER ATTACH (buffer, size, ierr) MPI BUFFER DETACH (buffer, size, ierr) Le buffer est alloué dans la mémoire locale du processus expéditeur Le buffer est uniquement utilisable pour les messages bufférisés Un seul buffer alloué à la fois par processus Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communications persistantes Une routine pour initier l envoi : CALL MPI SEND INIT (buf, count, datatype, dest, & tag, comm, request, ierr) Une routine pour initier la réception : CALL MPI RECV INIT (buf, count, datatype, src, & tag, comm, request, ierr) L argument request identifie la communication INTEGER :: request Une routine pour effectuer l opération (dans la boucle) : CALL MPI START (request, ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

17 Communications asynchrones Le programme continue avant l initialisation de la réception correspondante Cela permet de calculer pendant le transfert CALL MPI ISEND (buf, count, datatype, dest, tag,& comm, request, ierr) CALL MPI IRECV (buf, count, datatype, src, tag,& comm, request, ierr) L argument request permet d identifier les opérations de communications impliquées et de les faire correspondre Communications asynchrones Les commandes associées pour tester : CALL MPI WAIT (request, status, ierr) Attendre jusqu à la terminaison d une requête CALL MPI TEST (request, flag, status, ierr) Vérifier si une requête est terminée (flag =.TRUE.) CALL MPI PROBE (source, tag, status, comm, ierr) Contrôler avant réception si une requête est arrivée Version non bloquante : MPI IPROBE Il existe des variantes des communications précédentes en mode asynchrone Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Bilan des routines disponibles Communications usuelles Envois MPI SEND bloquant standard MPI ISEND non bloquant standard MPI SSEND bloquant synchrone MPI ISSEND non bloquant synchrone MPI BSEND bloquant bufférisé MPI IBSEND non bloquant bufférisé Réceptions MPI RECV bloquante standard MPI IRECV non bloquante standard Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Bilan des routines disponibles Communications persistantes Envois MPI SEND INIT bloquant standard MPI SSEND INIT bloquant non bufférisé MPI BSEND INIT bloquant bufférisé Réception MPI RECV INIT bloquante standard Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

18 Communications point à point : TP 5 USE mpi INTEGER :: nprocs, rang, ierr = 0 INTEGER, DIMENSION(MPI STATUS SIZE) :: status INTEGER, PARAMETER :: na = 513, nb = 513 INTEGER, PARAMETER :: m = 2049, tag = 100 REAL*8, DIMENSION(na,na) :: a REAL*8, DIMENSION(nb,nb) :: b, d REAL*8, DIMENSION(na) :: pivota REAL*8, DIMENSION(nb) :: pivotb REAL*8, DIMENSION(m,m) :: c CALL MPI INIT (ierr) CALL MPI COMM SIZE (MPI COMM WORLD, nprocs, ierr) CALL MPI COMM RANK (MPI COMM WORLD, rang, ierr) CALL random number (a) CALL random number (b) CALL random number (c) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communications point à point : TP 5 ELSE IF (rang == 1) THEN! je calcule CALL DGETRF (na, na, a, na, pivota, ierr)! je recois le gros message CALL MPI RECV (c(1,1), m*m, MPI DOUBLE PRECISION,& 0, tag, MPI COMM WORLD, status, ierr)! ce calcul est independant du message CALL DGETRF (nb, nb, b, nb, pivotb, ierr) Communications point à point : TP 5 IF (rang == 0) THEN! j envoie un gros message CALL MPI SEND (c(1,1), m*m, MPI DOUBLE PRECISION,& 1, tag, MPI COMM WORLD, ierr)! je calcule la factorisation LU avec lapack CALL DGETRF (na, na, a, na, pivota, ierr)! ce calcul modifie le contenu du tableau c c(1:nb,1:nb) = matmul (a(1:nb,1:nb), b) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communications point à point : TP 5 Compiler le programme standard ifort -xs -O3 tp5.f90 -Vaxlib -lmpi -lmkl intel lp64 -lmkl sequential -lmkl core -o tp5.out L exécuter sur 2 processus Mettre des communications synchrones L exécuter sur 2 processus Mettre des communications asynchrones L exécuter sur 2 processus Remarques / Conclusions?! ce calcul depend du message precedent a(:,:) = transpose ( c(1:na,1:na) ) + a(:,:) END IF CALL MPI FINALIZE (ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

19 Quelques règles simples... selon les situations Initier les réceptions avant les envois En cas d échange, mettre les appels à MPI IRECV avant les MPI SEND Eviter l usage de bufffers temporaires Utiliser les routines synchrones MPI SSEND Recouvrir les communications par des calculs Utiliser des communications non bloquantes MPI ISEND et MPI IRECV Minimiser les surcoûts liés à des appels répétés avec les mêmes arguments Utiliser des communications persistantes N.B. : les performances des différents types de communication point à point sont dépendantes des implémentations MPI. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communications collectives La communication collective est une communication qui implique un ensemble de processus, tous ceux du communicateur fourni en argument C est un argument essentiel En une seule opération, on effectue une série de communications point à point L ensemble des processus effectuent le même appel avec des arguments correspondants Parallélisation Présentation, environnement MPI Communications point à point Communications collectives Types de données dérivés Communicateurs et topologies Entrées / sorties collectives : MPI I/O Exemple récapitulatif : équation de la Chaleur 1D Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communications collectives La sémantique et la syntaxe des opérations collectives sont analogues à celles des communications point à point Il n y a pas d étiquette dans les appels à ces routines Certaines routines ont un processus qui est seul expéditeur ou seul destinataire : il s appelle le processus root Certains arguments n ont alors de sens que pour le processus root Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

20 Communications collectives Il existe différents types de communication collective : Opérations de diffusion / collecte de données Diffusion globale de données : MPI BCAST Distribution sélective de données : MPI SCATTER Collecte de données réparties : MPI GATHER Collecte, par tous les processus, de données réparties : MPI ALLGATHER Communications collectives Opérations préalables sur des données réparties Opération de réduction : MPI REDUCE Opération de réduction avec diffusion globale du résultat : MPI ALLREDUCE Barrières de synchronisation globale CALL MPI BARRIER (comm, ierr) Chaque processus appelant est bloqué jusqu à ce que tous les processus du communicateur font l appel Distribution sélective, par tous les processus, de données réparties : MPI ALLTOALL Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Diffusion globale de données CALL MPI BCAST(buf,count,datatype,root,comm,ierr) Le processus root envoie un message : à tous les processus du communicateur comm, de longueur count, de type datatype, à partir de l adresse buf P0 P0 A Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Diffusion globale de données PROGRAM bcast USE mpi IMPLICIT NONE INTEGER :: ierr = 0 INTEGER :: u, monrang, nbprocs CALL MPI INIT (ierr) CALL MPI COMM SIZE (MPI COMM WORLD, nbprocs, ierr) CALL MPI COMM RANK (MPI COMM WORLD, monrang, ierr) P1 P2 A MPI_BCAST P1 P2 A A IF (monrang == 0) READ (5,*) u CALL MPI BCAST(u, 1, MPI INTEGER, 0, MPI COMM WORLD,& ierr) P3 P3 A Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 write (6,*) processus, monrang, u =, u call MPI FINALIZE (ierr) END PROGRAM bcast Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

21 Diffusion globale de données L appel à la routine MPI BCAST permet d éviter : IF (monrang == 0) THEN DO i = 0, nbprocs - 1 CALL MPI SEND (u, 1, MPI INTEGER, i, tag, & MPI COMM WORLD, ierr) END DO END IF CALL MPI RECV (u, 1, MPI INTEGER, 0, tag, & MPI COMM WORLD, status, ierr) Exécution : echo 10 mpirun -np 3./bcast.out processus 0 u = 10 processus 2 u = 10 processus 1 u = 10 Distribution sélective de données CALL MPI SCATTER(sendbuf, sendcount, sendtype, & recvbuf, recvcount, recvtype, & root, comm, ierr) Le processus root envoie un message étant : de longueur sendcount, de type sendtype, à partir de l adresse sendbuf, à chacun des processus du communicateur comm Chaque processus du communicateur comm (root inclus) indique recevoir un message : de longueur recvcount, de type recvtype, à partir de l adresse recvbuf Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Distribution sélective de données L action de la routine MPI SCATTER peut être vue comme La donnée initiale est partagée en n morceaux contigus de taille identique : le ième morceau est envoyé au ième processus Les arguments relatifs à la donnée envoyée n ont de sens que pour le processus root P0 P0 A0 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Distribution sélective de données La routine MPI SCATTER peut être vue comme (i) le processus root effectue n envois : CALL MPI SEND(sendbuf+i.sendcount.extent(sendtype),& sendcount, sendtype, i,...) (ii) et chaque processus (root inclus) du communicateur exécute la réception suivante : CALL MPI RECV (recvbuf, recvcount, recvtype, & root,...) P1 P2 A0 A1 A2 A3 MPI_SCATTER P1 P2 A1 A2 extent(sendtype) = MPI TYPE EXTENT(sendtype) : le nombre d octets en mémoire P3 P3 A3 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

22 Distribution sélective de données USE mpi INTEGER, PARAMETER :: nb valeurs = 128 INTEGER :: i, monrang, nbprocs, lbloc, ierr = 0 REAL(4),ALLOCATABLE,DIMENSION(:) :: valeurs,donnees CALL MPI INIT (ierr) CALL MPI COMM SIZE (MPI COMM WORLD, nbprocs, ierr) CALL MPI COMM RANK (MPI COMM WORLD, monrang, ierr) lbloc = nb valeurs / nbprocs ALLOCATE (donnees(lbloc), STAT=ierr ) IF (monrang == 3) THEN ALLOCATE (valeurs(nb valeurs), STAT=ierr ) valeurs(:) = (/( REAL(i,4),i=1,nb valeurs)/) END IF Distribution sélective de données CALL MPI SCATTER (valeurs, lbloc, MPI REAL, & donnees, lbloc, MPI REAL, 3, & MPI COMM WORLD, ierr) WRITE (6,*) processus, monrang, a recu, & donnees(1), a, donnees(lbloc), & du processus 3 CALL MPI FINALIZE (ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Distribution sélective de données ifort -O3 scatter.f90 -o scatter.out -lmpi Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Distribution sélective de données L affichage ne se fait pas forcément dans l ordre des rangs mpirun -np 4./scatter.out processus 3 a recu a du processus 3 processus 1 a recu a du processus 3 processus 2 a recu a du processus 3 processus 0 a recu a du processus 3 Attention : Toutes les valeurs ne sont pas distribuées si le nombre de destinataires n est pas un diviseur du nombre de données à envoyer : il faut gérer l éventuel reliquat On peut être amené à gérer des paquets de taille variable mpirun -np 5./scatter.out processus 1 a recu a du processus 3 processus 2 a recu a du processus 3 processus 3 a recu a du processus 3 processus 4 a recu a du processus 3 processus 0 a recu a du processus 3 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

23 Distribution sélective de données La routine MPI SCATTERV étend les possibilités aux distributions non uniformes. CALL MPI SCATTERV ( & sendbuf, sendcounts, displs, sendtype,& recvbuf, recvcount, recvtype, & root, comm, ierr) L argument sendcounts est un tableau d entiers avec le nombre d éléments par destinataire L argument displs est un tableau d entiers qui contient le décalage à partir du début du buffer pour chaque paquet (à fournir en entrée) Distribution sélective de données Ainsi l action de la routine MPI SCATTERV peut être vue comme (i) le processus root effectue n envois : CALL MPI SEND(sendbuf+displs[i].extent(sendtype),& sendcounts[i], sendtype, i,...) (ii) et chaque processus (root inclus) du communicateur exécute la réception suivante : CALL MPI RECV (recvbuf, recvcount, recvtype, & root,...) extent(sendtype) = MPI TYPE EXTENT(sendtype) : le nombre d octets en mémoire Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Collecte de données réparties Chaque processus envoie son buffer au processus root : opération inverse de MPI SCATTER CALL MPI GATHER (sendbuf, sendcount, sendtype, & recvbuf, recvcount, recvtype, & root, comm, ierr) Chaque processus (root inclus) du communicateur comm indique envoyer un message : au processus root, de longueur sendcount, de type sendtype, à partir de l adresse sendbuf Le processus root reçoit ces messages et les concatène dans l ordre des rangs, chacun étant : de longueur recvcount, de type recvtype, à partir de l adresse recvbuf Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Collecte de données réparties L action de la routine MPI GATHER peut être vue comme Chaque processus envoie un ensemble de données, de nature compatible Le processus root effectue n réceptions : Le morceau du ième processus va en ième position N.B. : les arguments relatifs à la donnée reçue n ont de sens que pour le processus root P0 P1 P2 P3 A0 A1 A2 A3 MPI_GATHER Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 P0 P1 P2 P3 A0 A1 A2 A3

24 Collecte de données réparties La routine MPI GATHER peut être vue comme (i) chaque processus (root inclus) du communicateur effectue l envoi : CALL MPI SEND (sendbuf, sendcount, sendtype, & root,...) (ii) et le processus root effectue n réceptions : CALL MPI RECV(recvbuf+i.recvcount.extent(recvtype),& recvcount, recvtype, i,...) extent(recvtype) = MPI TYPE EXTENT(recvtype) : le nombre d octets en mémoire Collecte de données réparties USE mpi INTEGER, PARAMETER :: nb valeurs = 128 INTEGER :: i, monrang, nbprocs, lbloc, ierr = 0 INTEGER, ALLOCATABLE,DIMENSION(:) :: valeurs, donnees CALL MPI INIT (ierr) CALL MPI COMM SIZE (MPI COMM WORLD, nbprocs, ierr) CALL MPI COMM RANK (MPI COMM WORLD, monrang, ierr) lbloc = nb valeurs / nbprocs ALLOCATE (valeurs(lbloc), STAT=ierr ) valeurs(:) = (/(1000+i+lbloc*monrang,i=1,lbloc)/) write (6,*) processus, monrang, possede, & valeurs(1), a, valeurs(lbloc) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Collecte de données réparties IF (monrang == 2) & ALLOCATE (donnees(nb valeurs), STAT=ierr) CALL MPI GATHER (valeurs, lbloc, MPI INTEGER, & donnees, lbloc, MPI INTEGER, 2, & MPI COMM WORLD, ierr) IF (monrang == 2) & WRITE (6,*) processus 2 a recu, donnees(1), &..., donnees(lbloc+1),..., & donnees(nb valeurs) CALL MPI FINALIZE (ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Collecte de données réparties ifort -O3 gather.f90 -o gather.out -lmpi mpirun -np 4./gather.out processus 2 possede 1065 a 1096 processus 1 possede 1033 a 1064 processus 3 possede 1097 a 1128 processus 0 possede 1001 a 1032 processus 2 a recu mpirun -np 3./gather.out processus 0 possede 1001 a 1042 processus 1 possede 1043 a 1084 processus 2 possede 1085 a 1126 processus 2 a recu Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

25 Collecte de données réparties L affichage ne se fait pas forcément dans l ordre des rangs Attention : Toutes les valeurs ne sont pas initialisées et transmises correctement si le nombre d expéditeurs n est pas un diviseur du nombre de données à envoyer On peut être amené à gérer des paquets de taille variable Collecte de données réparties La routine MPI GATHERV étend les possibilités aux collectes non uniformes. CALL MPI GATHERV ( & sendbuf, sendcount, sendtype, & recvbuf, recvcounts, displs, recvtype, & root, comm, ierr) L argument recvcounts est un tableau d entiers avec le nombre d éléments par expéditeur L argument displs est un tableau d entiers qui contient le décalage à partir du début du buffer pour placer chaque paquet dans le buffer de root (à fournir en entrée) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Collecte de données réparties Ainsi l action de la routine MPI GATHERV peut être vue comme (i) chaque processus (root inclus) du communicateur effectue l envoi : CALL MPI SEND (sendbuf, sendcount, sendtype,& root,...) (ii) et le processus root exécute n réceptions : CALL MPI RECV(recvbuf+displs[i].extent(recvtype),& recvcounts[i], recvtype, i,...) extent(recvtype) = MPI TYPE EXTENT(recvtype) : le nombre d octets en mémoire Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Collecte, par tous les processus, de données réparties La routine MPI ALLGATHER peut être vue comme MPI GATHER où tous les processus sont destinataires du résultat et non pas uniquement le processus root CALL MPI ALLGATHER(sendbuf, sendcount, sendtype,& recvbuf, recvcount, recvtype,& comm, ierr) Chaque processus du communicateur comm indique envoyer un message : de longueur sendcount, de type sendtype, à partir de l adresse sendbuf Chaque processus reçoit ces messages et les concatène dans l ordre des rangs, chacun étant : de longueur recvcount, de type recvtype, à partir de l adresse recvbuf Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

26 Collecte, par tous les processus, de données réparties Collecte, par tous les processus, de données réparties Un appel à la routine MPI ALLGATHER peut être vu comme : Tous les processus effectuent un appel à MPI GATHER CALL MPI GATHER (sendbuf, sendcount, sendtype, & recvbuf, recvcount, recvtype, & root, comm, ierr), P0 P1 A0 A1 P0 P1 MPI_ALLGATHER A0 A0 A1 A1 A2 A2 A3 A3 P2 A2 P2 A0 A1 A2 A3 Tous les processus effectuent un appel à MPI BCAST Même processus root! CALL MPI BCAST (recvbuf, recvcount, recvtype, & root, comm, ierr) P3 A3 P3 A0 A1 A2 A3 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Collecte, par tous les processus, de données réparties USE mpi INTEGER, PARAMETER :: nb valeurs = 128 INTEGER :: i, monrang, nbprocs, lbloc, ierr = 0 INTEGER,ALLOCATABLE,DIMENSION(:) :: valeurs, donnees CALL MPI INIT (ierr) CALL MPI COMM SIZE (MPI COMM WORLD, nbprocs, ierr) CALL MPI COMM RANK (MPI COMM WORLD, monrang, ierr) lbloc = nb valeurs / nbprocs ALLOCATE (valeurs(lbloc), donnees(nb valeurs) ) valeurs(:) = (/(1000+i+lbloc*monrang,i=1,lbloc)/) write (6,*) processus, monrang, possede, & valeurs(1), a, valeurs(lbloc) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Collecte, par tous les processus, de données réparties CALL MPI ALLGATHER (valeurs, lbloc, MPI INTEGER, & donnees, lbloc, MPI INTEGER, & MPI COMM WORLD, ierr) WRITE (6,*) processus, monrang, a recu, & donnees(1),..., donnees(lbloc+1), &..., donnees(nb valeurs) CALL MPI FINALIZE (ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

27 Collecte, par tous les processus, de données réparties ifort -O3 allgather.f90 -o allgather.out -lmpi mpirun -np 2./allgather.out processus 0 possede 1001 a 1064 processus 0 a recu processus 1 possede 1065 a 1128 processus 1 a recu mpirun -np 3./allgather.out processus 0 possede 1001 a 1042 processus 2 possede 1085 a 1126 processus 1 possede 1043 a 1084 processus 0 a recu processus 1 a recu processus 2 a recu Collecte, par tous les processus, de données réparties L affichage ne se fait pas forcément dans l ordre des rangs Attention : Toutes les valeurs ne sont pas initialisées et transmises correctement si le nombre d expéditeurs n est pas un diviseur du nombre de données à envoyer : il faut gérer l éventuel reliquat On peut être amené à gérer des paquets de taille variable Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Collecte, par tous les processus, de données réparties La routine MPI ALLGATHERV peut être vue comme MPI GATHERV où tous les processus sont destinataires du résultat et non pas que le processus root CALL MPI ALLGATHERV (& sendbuf, sendcount, sendtype, & recvbuf, recvcounts, displs, recvtype,& comm, ierr) L argument recvcounts est un tableau d entiers avec le nombre d éléments par destinataire L argument displs est un tableau d entiers qui contient le décalage à partir du début du buffer pour placer chaque paquet dans le buffer de root Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Collecte, par tous les processus, de données réparties Un appel à la routine MPI ALLGATHERV peut être vu comme si : Tous les processus effectuent un appel à MPI GATHERV CALL MPI GATHERV (& sendbuf, sendcount, sendtype, & recvbuf, recvcounts, displs, recvtype,& root, comm, ierr) Tous les processus effectuent un appel à MPI BCAST Même processus root! CALL MPI BCAST (recvbuf, recvcount, datatype, & root, comm, ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

28 Distribution sélective, par tous les processus, de données réparties La routine MPI ALLTOALL est une extension de MPI ALLGATHER dans le cas où chaque processus envoie des données distinctes à chacun des destinataires CALL MPI ALLTOALL (sendbuf, sendcount, sendtype,& recvbuf, recvcount, recvtype,& comm, ierr) Chaque processus envoie un message étant : de longueur sendcount, de type sendtype, à partir de l adresse sendbuf, à chacun des processus du communicateur comm Chaque processus du communicateur comm indique recevoir un message : de longueur recvcount, de type recvtype, à partir de l adresse recvbuf, de chacun des processus du communicateur comm Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Distribution sélective, par tous les processus, de données réparties Distribution sélective, par tous les processus, de données réparties Tous les arguments sont significatifs pour tous les processus Un appel à la routine MPI ALLTOALL peut être vu comme si tous les processus effectuent n envois et n réceptions distincts CALL MPI SEND(sendbuf+i.sendcount.extent(sendtype), sendcount, sendtype, i,...) CALL MPI RECV(recvbuf+j.recvcount.extent(recvtype), recvcount, recvtype, j,...) Le jème bloc du ième processus est envoyé au jème processus et placé dans son ième bloc Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Distribution sélective, par tous les processus, de données réparties USE mpi P0 P1 A0 A1 A2 A3 B0 B1 B2 B3 MPI_ALLTOALL P0 P1 A0 A1 B0 B1 C0 C1 D0 D1 INTEGER, PARAMETER :: nb valeurs = 4 INTEGER :: i, monrang, nbprocs, lbloc, ierr = 0 INTEGER, DIMENSION(nb valeurs) :: valeurs, donnees P2 P3 C0 D0 C1 D1 C2 D2 C3 D3 P2 P3 A2 A3 B2 B3 C2 C3 D2 D3 CALL MPI INIT (ierr) CALL MPI COMM SIZE (MPI COMM WORLD, nbprocs, ierr) CALL MPI COMM RANK (MPI COMM WORLD, monrang, ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

29 Distribution sélective, par tous les processus, de données réparties lbloc = nb valeurs / nbprocs valeurs(1:nb valeurs) = & (/(1000+i+lbloc*monrang*100, i=1,nb valeurs)/) write (6,*) processus, monrang, avant, & valeurs(1:nb valeurs) CALL MPI ALLTOALL (valeurs, lbloc, MPI INTEGER, & donnees, lbloc, MPI INTEGER, & MPI COMM WORLD, ierr) write (6,*) processus, monrang, apres, & donnees(1:nb valeurs) CALL MPI FINALIZE (ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Distribution sélective, par tous les processus, de données réparties La routine MPI ALLTOALLV ajoute de la flexibilité à MPI ALLTOALL dans les tailles et adresses de localisation dans les buffers d envoi et de réception CALL MPI ALLTOALLV (& sendbuf, sendcounts, sdispls, sendtype, & recvbuf, recvcounts, rdispls, recvtype, & comm, ierr) Les arguments sendcounts et recvcounts sont des tableaux d entiers contenant les nombres d éléments par expéditeur et destinataire Diffusion sélective, par tous les processus, de données réparties ifort -O3 alltoall.f90 -o alltoall.out -lmpi mpirun -np 4./alltoall.out processus 0 avant 1001, 1002, 1003, 1004 processus 1 avant 1101, 1102, 1103, 1104 processus 2 avant 1201, 1202, 1203, 1204 processus 3 avant 1301, 1302, 1303, 1304 processus 0 apres 1001, 1101, 1201, 1301 processus 1 apres 1002, 1102, 1202, 1302 processus 2 apres 1003, 1103, 1203, 1303 processus 3 apres 1004, 1104, 1204, 1304 L affichage ne se fait pas forcément dans l ordre des rangs Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Distribution sélective, par tous les processus, de données réparties Un appel à la routine MPI ALLTOALLV peut être vu comme si tous les processus effectuent n envois et n réceptions distincts avec des blocs de taille différente : CALL MPI SEND(sendbuf+i.sdispls[i].extent(sendtype),& sendcounts[i], sendtype, i,...) CALL MPI RECV(recvbuf+j.rdispls[j].extent(recvtype),& recvcounts[j], recvtype, j,...) Les arguments sdispls et rdispls sont des tableaux d entiers qui contiennent les décalages à partir du début du buffer pour placer chaque paquet dans les buffers de chaque processus Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

30 Opérations préalables sur des données réparties Ces fonctions réalisent une opération globale de réduction, i.e. l obtention d un résultat à partir de données réparties CALL MPI REDUCE (sendbuf, recvbuf, count, & datatype, op, root, comm, ierr) Depuis tous les processus du communicateur comm, on envoie un message : de longueur count, de type datatype, à partir de l adresse sendbuf, pour faire l opération op sur ces valeurs. Réception du résultat à partir de l adresse recvbuf du processus root Si le nombre de données envoyées est supérieur à un, l opération op est appliquée sur chacune des données l opération op est supposée associative Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Opérations préalables sur des données réparties USE mpi INTEGER, PARAMETER :: nb = 5 INTEGER :: i, monrang, nbprocs, lbloc, ierr = 0 REAL(8), DIMENSION(nb) :: ain, aout... IF (monrang == 0) THEN ain(1:nb) = (/ ( REAL(i,8), i=1,nb) /) ELSE ain(1:nb) = (/ (monrang * , i=1,nb) /) END IF CALL MPI REDUCE(ain, aout, nb, MPI DOUBLE PRECISION,& MPI SUM, 0, MPI COMM WORLD, ierr) IF (monrang == 0) & write (6, (A,I2,A,20E11.4) ) Rang, monrang, & somme =, aout(1 :nb) CALL MPI FINALIZE (ierr) Opérations préalables sur des données réparties Opérations prédéfinies : MPI MAX : maximum MPI MIN : minimum MPI SUM : somme MPI PROD : produit MPI LAND : ET logique MPI LOR : OU logique MPI LXOR : OU exclusif logique MPI MAXLOC : maximum et position MPI MINLOC : minimum et position Les opérations MPI MAXLOC et MPI MINLOC nécessitent un type de données valeur, indice pour être utilisées Les types proposés par MPI : MPI INTEGER, MPI REAL, MPI DOUBLE PRECISION Opérations de réductions personnelles : les opérateurs MPI OP CREATE et MPI OP FREE permettent de créer et détruire des opérations personnalisées Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Opérations préalables sur des données réparties Compilation : ifort -O3 reduce.f90 -o reduce.out -lmpi Exécution : mpirun -np 4./reduce.out Rang 0 somme = E E E E E+04 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

31 Opérations préalables sur des données réparties CALL MPI ALLREDUCE (sendbuf, recvbuf, count, & datatype, op, comm, ierr) Depuis tous les processus du communicateur comm, on envoie un message : de longueur count, de type datatype, à partir de l adresse sendbuf, pour faire l opération op sur ces valeurs. Réception du résultat à partir de l adresse recvbuf pour tous les processus Si le nombre de données envoyées est supérieur à un, l opération op est appliquée sur chacune des données L opération op est supposée associative Opérations préalables sur des données réparties USE mpi INTEGER, PARAMETER :: nb valeurs = 4 INTEGER :: i, monrang, nbprocs, ierr = 0 INTEGER, DIMENSION(nb valeurs) :: valeurs, donnees... valeurs(1:nb valeurs) = (/(1000+i+lbloc*monrang*100,& i=1,nb valeurs)/) write (6,*) processus, monrang, avant, & valeurs(1:nb valeurs) CALL MPI ALLREDUCE (valeurs, donnees, nb valeurs, & MPI INTEGER, MPI SUM, MPI COMM WORLD, ierr) write (6,*) processus, monrang, apres, & donnees(1:nb valeurs)... Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communications collectives : TP 6 Paralléliser le code séquentiel prod seq.f90 de telle sorte que : - la matrice soit partagée entre tous les processus par groupes de lignes contigües - le vecteur second membre soit initialisé par tous les processus - le vecteur résultat soit distribué entre tous les processus - son calcul soit distribué - chaque processus reçoit les morceaux des autres processus pour obtenir le vecteur résultat complet. L exécuter sur différents nombres de processus Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Parallélisation Présentation, environnement MPI Communications point à point Communications collectives Types de données dérivés Communicateurs et topologies Entrées / sorties collectives : MPI I/O Exemple récapitulatif : équation de la Chaleur 1D Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

32 Types de données dérivés On peut envoyer autre chose que des buffers contigus de données de même type! Types simples : entiers, réels,... MPI INTEGER MPI REAL MPI DOUBLE PRECISION MPI COMPLEX MPI LOGICAL MPI CHARACTER Types complexes : - homogène : toutes les données sont de même type (sections de tableau), - hétérogène : les structures en C, les types dérivés en Fortran Il faut gérer ces types, au sens MPI : création : MPI TYPE xxx, validation : MPI TYPE COMMIT, destruction : MPI TYPE FREE Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Validation - destruction des types crées A la fin de l exécution, tout type crée par l utilisateur doit être détruit CALL MPI TYPE FREE (typename, ierr) Cela libère les ressources mémoire occupées par ce type crée Validation - destruction des types crées Tout type crée par l utilisateur doit être validé par un appel à MPI TYPE COMMIT CALL MPI TYPE COMMIT (typename, ierr) INTEGER :: typename Cette validation ne concerne que le squelette de la structure, pas l usage qui en est fait Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Types homogènes : valeurs contigües CALL MPI TYPE CONTIGUOUS (count, oldtype, & newtype, ierr) Construction du type newtype, avec count éléments du type oldtype Cette libération n a aucun effet sur d autres types crées à partir de celui qui est ainsi détruit : Un type A crée pour fabriquer un type B peut être détruit à l issue de la création du type B Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

33 Types homogènes : valeurs contigües Types homogènes : valeurs distantes d un pas constant CALL MPI TYPE VECTOR(count, blocklength, stride,& oldtype, newtype, ierr) Construction du type newtype, avec count blocs, formés chacun de blocklength éléments du type oldtype et espacés d un pas stride (exprimé en nombre d éléments) CALL MPI TYPE CONTIGUOUS (5, MPI INTEGER, & colonne, ierr) CALL MPI TYPE COMMIT (colonne, ierr) INTEGER :: colonne Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Types homogènes : valeurs distantes d un pas constant Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Types homogènes : valeurs distantes d un pas constant CALL MPI TYPE VECTOR (3, 2, 5, MPI INTEGER, & type bloc, ierr) CALL MPI TYPE COMMIT (type bloc, ierr) INTEGER :: type bloc CALL MPI SEND (a(3,2), 1, type bloc, 1, MPI COMM WORLD, ierr) CALL MPI TYPE VECTOR (4, 1, 5, MPI INTEGER, & ligne, ierr) CALL MPI TYPE COMMIT (ligne, ierr) INTEGER :: ligne CALL MPI SEND (a(3:4,2:4), 6, MPI INTEGER, 1, MPI COMM WORLD, ierr) Ici c est analogue mais faire attention aux communications asynchrones Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

34 Types homogènes : valeurs distantes d un pas variable CALL MPI TYPE INDEXED (count, blocklengths, & displs, oldtype, newtype, ierr) Construction du type newtype, avec count blocs, formés de blocklengths[i] éléments du type oldtype et décalés chacun d un pas displs[i] L argument blocklengths contient les longueurs des blocs exprimées en nombre d éléments de l ancien type oldtype L argument displs contient les distances à l origine pour chaque bloc, exprimées en nombre d éléments de l ancien type oldtype Types homogènes : valeurs distantes d un pas variable Ancien type : paire Nouveau type : sparse longueur = (2, 1, 3) pas = (0, 3, 7) CALL MPI TYPE INDEXED (3, longueur, pas, paire, & sparse, ierr) CALL MPI TYPE COMMIT (sparse, ierr) INTEGER :: sparse Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Types homogènes : sections de tableau Extraire une portion de tableau pour l envoyer est utile notamment en décomposition de domaine. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Types homogènes : sections de tableau, rappels Fortran90 Un tableau est un ensemble d éléments du même type : real(rp), DIMENSION(-1:3,2,0:5) :: tab La norme MPI2.0 fournit une nouvelle fonction qui s inspire du Fortran 90. Le sous-programme MPI TYPE CREATE SUBARRAY permet de créer un sous-tableau à partir d un tableau. CALL MPI TYPE CREATE SUBARRAY & (rank, shape tab, shape subtab, & coord debut, ordre, oldtype, newtype, ierr) Construction du type newtype, de rang rank, de profil shape subtab, extrait à partir de l élément en coord debut selon le rangement mémoire ordre. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Le rang (rank) d un tableau est son nombre de dimensions L étendue (extent) est le nombre d éléments dans une dimension d un tableau Le profil (shape) d un tableau est un vecteur dont chaque élément est l étendue de la dimension correspondante La taille (size) d un tableau est le produit des éléments du vecteur correspondant à son profil Deux tableaux sont dits conformants s ils ont même profil Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

35 Types homogènes : sections de tableau On crée le type bloc : rank = 2 shape tab = (/ nb lignes, nb colonnes /) shape subtab = (/ 2, 3 /) coord debut = (/ 2, 1 /) CALL MPI TYPE CREATE SUBARRAY (rank, shape tab, shape subtab,& coord debut, mpi order fortran, mpi integer, block, ierr) CALL MPI TYPE COMMIT (block, ierr) Le processus 0 envoie les données au 1 : CALL MPI SEND (a, 1, block, 1, 99, MPI COMM WORLD, ierr) CALL MPI RECV (b, 1, block, 0, 99, MPI COMM WORLD, status, ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Types hétérogènes C est le constructeur de type le plus général Il étend MPI TYPE INDEXED aux cas où chaque bloc de données, est de type quelconque Compte tenu de l hétérogénéité des données des blocs, les décalages se calculent en prenant les différences des adresses mémoires des éléments avec MPI ADDRESS : - on stocke les adresses mémoire des champs du type, - on calcule les décalages entre chaque adresse et l adresse du premier champ CALL MPI ADDRESS (location, adresse, ierr) Le calcul des adresses mémoire dépend de l implémentation! Types hétérogènes CALL MPI TYPE STRUCT (count, blocklengths, & displs, oldtype, newtype, ierr) Construction du type newtype, avec count blocs, formés chacun de blocklengths[i] éléments de type oldtype[i] et décalés chacun d un pas displs[i] L argument blocklengths contient les longueurs des blocs exprimées en nombre d éléments L argument displs contient les distances à l origine pour chaque bloc exprimées en nombre d octets L argument oldtypes contient les différents types de données, un pour chaque bloc Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Types hétérogènes Construction d un type particule avec les coordonnées, la masse et l espèce chimique... TYPE particule REAL :: masse INTEGER :: espece REAL, DIMENSION(3) :: coords END TYPE particule INTEGER, DIMENSION(3) :: oldtypes, blocklengths INTEGER, DIMENSION(3) :: displs, adrs INTEGER :: type p TYPE (particule) :: p Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

36 Types hétérogènes oldtypes = (/ MPI REAL, MPI INTEGER, MPI REAL /) blocklengths = (/ 1, 1, 3 /) CALL MPI ADDRESS (p%masse, adrs(1), ierr) CALL MPI ADDRESS (p%espece, adrs(2), ierr) CALL MPI ADDRESS (p%coords, adrs(3), ierr) DO i = 1, 3 displs(i) = adrs(i) - adrs(1) END DO Types dérivés : TP 7 Ecrire un programme MPI travaillant sur deux processus qui : vérifie le nombre de processus lit un entier par un processus et le diffuse construit une matrice carrée (pas trop grande!) crée un type bloc triangulaire inférieur (diagonale incluse) effectue l échange des parties triangulaires inférieures et les affiche dans l ordre des rangs CALL MPI TYPE STRUCT (3, blocklengths, displs, & oldtypes, type p, ierr) CALL MPI TYPE COMMIT (type p, ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communicateurs Parallélisation Présentation, environnement MPI Communications point à point Communications collectives Types de données dérivés Communicateurs et topologies Entrées / sorties collectives : MPI I/O Exemple récapitulatif : équation de la Chaleur 1D Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Le communicateur contient tout ce qui est nécessaire pour fournir le cadre adapté aux opérations de communication dans MPI MPI fournit un communicateur par défaut, MPI COMM WORLD, qui contient tous les processus de l application On peut créer des communicateurs de deux manières : - directement à partir d un autre communicateur ; - à partir des groupes (au sens MPI) (non considéré ici) ; Il y a deux sortes de communicateurs : - les intra-communicateurs : pour les opérations sur un groupe de processus au sein d un communicateur ; - les inter-communicateurs : pour les communications entre deux groupes de processus Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

37 Communicateurs issus d un autre communicateur Cette technique permet de : partitionner en une seule fois un communicateur ; donner le même nom à tous les communicateurs crées ; ne pas manipuler des groupes. Il n y a pas de recouvrement possible En un appel, chaque processus n appartient qu à un seul communicateur Les fonctions de gestion des communicateurs sont : MPI COMM SIZE : le nombre de processus du communicateur MPI COMM RANK : le rang au sein du communicateur MPI COMM SPLIT : le partitionnement d un communicateur MPI COMM FREE : la destruction du communicateur... Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Création d un communicateur à partir d un autre communicateur L argument key permet d ordonner (définir le rang) des processus au sein de leur nouveau communicateur Mettre key à zéro comme valeur pour le processus qui sera celui de futur rang 0 (dans le nouveau communicateur) et des valeurs strictement positives pour les autres Un processus qui ne fera partie d aucun des nouveaux communicateurs affecte la valeur MPI UNDEFINED à l argument color La valeur en sortie de new comm sera alors MPI COMM NULL Création d un communicateur à partir d un autre communicateur La routine MPI COMM SPLIT permet de partitionner un communicateur : CALL MPI COMM SPLIT (comm, color, key, new comm,& ierr) INTEGER :: color, key, new comm Tous les processus du communicateur doivent l exécuter L argument color (non négatif) permet de distinguer les différents communicateurs crées : Tous les processus avec la même valeur appartiendront au même nouveau communicateur Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Communicateur pair / communicateur impair INTEGER :: monrang, ierr = 0 INTEGER :: color, key CALL MPI COMM RANK (MPI COMM WORLD, monrang, ierr) IF ( MOD(monrang,2) == 0 ) THEN color = 0 IF (monrang == 4) THEN key = 0 ELSE key = monrang + 10 END IF Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

38 Communicateur pair / communicateur impair ELSE color = 1 IF (monrang == 1) THEN key = 0 ELSE key = monrang + 10 END IF END IF CALL MPI COMM SPLIT(comm, color, key, new comm, ierr) Topologies Topologie = attribut supplémentaire d un communicateur pour mieux coller à la réalité Numéroter les processus de 0 à (n-1) n est pas toujours la meilleure logique de communication pour l application parallèle Grilles 2D, 3D de processus souvent mieux adaptées Possibilités de graphe de processus si la topologie est plus complexe Cela a aussi une action sur la distribution des processus MPI sur les processeurs sous-jacents grâce à une renumérotation possible des processus... et donc aussi des conséquences sur les performances On ne considère ici que les topologies cartésiennes Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Répartition des processus par dimension Nombre de processus par dimension : MPI DIMS CREATE CALL MPI DIMS CREATE (nbproc, nbdims, dims, ierr) L argument nbdims : le nombre de dimensions de la grille INTEGER :: nbdims L argument dims : en sortie, le nombre de processus par dimension INTEGER, DIMENSION(1:nbdims) :: dims L argument dims peut être pré-rempli pour imposer le nombre de processus dans une ou plusieurs dimensions : Attention, dans ce cas il faut que dims(i) nbproc i,dims(i) 0 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Répartition des processus par dimension Exemples : dims avant l appel Appel à la fonction dims en sortie (0,0) MPI DIMS CREATE (6, 2, dims, ierr) (3,2) (0,0) MPI DIMS CREATE (7, 2, dims, ierr) (7,1) (0,3,0) MPI DIMS CREATE (6, 3, dims, ierr) (2,3,1) (0,3,0) MPI DIMS CREATE (7, 3, dims, ierr) erreur! 3 n est pas un diviseur de 7... Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

39 Topologie cartésienne Création de la grille cartésienne des processus : MPI CART CREATE création d un nouveau communicateur CALL MPI CART CREATE (MPI COMM WORLD, nbdims, & dims, period, reorg, newcomm, ierr) L argument nbdims : le nombre de dimensions de la grille INTEGER :: nbdims L argument dims : le nombre de processus par dimension INTEGER, DIMENSION(1:nbdims) :: dims L argument period : la périodicité dans chaque dimension LOGICAL, DIMENSION(1:nbdims) :: period L argument reorg : réordonner les processus? LOGICAL :: reorg L argument newcomm : en sortie, le nouveau communicateur attaché à la topologie INTEGER :: newcomm Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Recherche des coordonnées Recherche des coordonnées, connaissant le rang dans le communicateur de la grille : CALL MPI CART COORDS(comm,rank,nbdims,coords,ierr) L argument coords est un tableau d étendue le nombre de dimensions de la grille (nbdims) INTEGER, DIMENSION(1:nbdims) :: coords Recherche du rang connaissant les coordonnées dans le communicateur de la grille : CALL MPI CART RANK (comm, coords, rank, ierr) INTEGER :: rank y MPI_CART_RANK 0 4 (0,1) (1,1) (2,1) 3 7 (3,1) (0,0) (1,0) (2,0) (3,0) x Topologie cartésienne : exemple Topologie cartésienne 2D avec 8 processus, périodicité en y CALL MPI CART CREATE (MPI COMM WORLD, nbdim, & dims, period, reorg, comm2d, ierr) nbdims = 2 dims = (/4, 2/) period = (/.FALSE.,.TRUE./) reorg =.TRUE. y Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Recherche des voisins Recherche des voisins dans chaque dimension : CALL MPI CART SHIFT (comm, direction, disp, & rank left, rank right, ierr) L argument direction est la dimension concernée, i.e. la coordonnée modifiée par le disp INTEGER :: direction L argument disp indique le déplacement INTEGER :: disp Les arguments rank left et rank right sont les rangs des voisins INTEGER :: rank left, rank right En cas de sortie de la dimension, la valeur retournée est MPI PROC NULL x Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

40 Recherche des voisins Recherche des voisins direct Gauche / Droite (ou Ouest / Est) par le processus 5 CALL MPI CART SHIFT (comm2d, direction, disp, & rank left, rank right, ierr) Parallélisation Présentation, environnement MPI Communications point à point direction = 0 disp = 1 rank left = 4 rank right = 6 y x Communications collectives Types de données dérivés Communicateurs et topologies Entrées / sorties collectives : MPI I/O Exemple récapitulatif : équation de la Chaleur 1D Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Entrées / sorties collectives : MPI I/O (cours IDRIS) Un des gros apports de MPI 2 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Un peu de vocabulaire fichier (file) : un ensemble ordonné de données typées. Interface de haut niveau Opérations collectives pour les opérations courantes Nombreuses fonctionnalités On se limite aux principales... déplacement initial (displacement) : une adresse absolue, en octets, par rapport au début d un fichier et à partir de laquelle une vue (view) commence. type élémentaire (etype) : unité de donnée utilisée pour calculer les positionnements et pour accéder aux données ; cela peut être n importe quel type de données, MPI ou dérivé. motif (filetype) : un masque qui constitue la base du partitionnement du fichier entre les processus. vue (view) : une vue définit l ensemble des données visibles d un fichier. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

41 Un peu de vocabulaire (suite) position (offset) : la position dans le fichier, exprimée en nombre de type élémentaire, relativement à la vue courante. descripteur (file handle) : le descripteur est un objet caché crée à l ouverture et détruit à la fermeture du fichier. Toutes les opérations se font en spécifiant comme référence son descripteur (ce n est pas une unité logique Fortran). pointeur (file pointer) : ils sont mis à jour automatiquement par MPI et déterminent des positions à l intérieur du fichier. taille du fichier (file size) : la taille d un fichier MPI mesurée en nombre d octets. Gestion des fichiers On donne les principaux sous-programmes (ouverture, fermeture, caractéristiques) mais d autres sont disponibles (suppression, préallocation). Les attributs sont précisés par des opérations avec des constantes entières prédéfinies. Tous les processus d un communicateur au sein duquel un fichier est ouvert participeront aux opérations collectives ultérieures d accès aux données. L ouverture du fichier renvoie un descripteur. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Attributs des fichiers Attribut Signification MPI MODE RDONLY seulement en lecture MPI MODE RDWR en lecture et en écriture MPI MODE WRONLY seulement en écriture MPI MODE CREATE création du fichier s il n existe pas MPI MODE EXCL erreur si le fichier existe MPI MODE UNIQUE OPEN erreur si le fichier est déjà ouvert par une autre application MPI MODE SEQUENTIAL accès séquentiel (interdit les accès aléatoires) MPI MODE APPEND pointeurs en fin de fichier (ajout) MPI MODE DELETE ON CLOSE destruction après la fermeture Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Création d un fichier PROGRAM open01 USE mpi IMPLICIT NONE INTEGER :: descripteur, ierr CALL MPI INIT (ierr) CALL MPI FILE OPEN (MPI COMM WORLD, "fichier.txt", & MPI MODE RDWR + MPI MODE CREATE, & MPI INFO NULL, descripteur, ierr) CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) END PROGRAM open01 les attributs s additionnent en Fortran ou se combinent ( & ) en C/C++ On peut fournir d autres informations (selon implémentation!) sinon, une valeur nulle, MPI INFO NULL Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

42 Généralités Les transferts de données entre fichiers et zones mémoire des processus se font via des appels explicites à des sous-programmes MPI de lecture et d écriture. On distingue 3 propriétés des accès aux fichiers : le positionnement, qui peut être explicite ou implicite (via des pointeurs, individuels ou partagés par tous les processus) ; la synchronisation, les accès pouvant être bloquants ou non ; Types d accès possibles (1/3) Position- Synchro- Regroupement nement nisation individuel collectif blo- mpi file read at mpi file read at all adresses quantes mpi file write at mpi file write at all expli- non mpi file iread at mpi file read at all begin cites blo- mpi file read at all end quantes mpi file iwrite at mpi file write at all begin mpi file write at all end le regroupement, les accès pouvant être collectifs (tous les processus ayant ouvert le fichier) ou propres à un ou plusieurs processus. Il y a de nombreuses variantes possibles... Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Types d accès possibles (2/3) Position- Synchro- Regroupement nement nisation individuel collectif pointeurs blo- mpi file read mpi file read all quantes mpi file write mpi file write all implicites non mpi file iread mpi file read all begin blo- mpi file read all end individuels quantes mpi file iwrite mpi file write all begin mpi file write all end Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Types d accès possibles (3/3) Position- Synchro- Regroupement nement nisation individuel collectif pointeurs blo- mpi file read shared mpi file read ordered quantes mpi file write shared mpi file write ordered implicites non mpi file iread shared mpi file read ordered begin blo- mpi file read ordered end partagés quantes mpi file iwrite shared mpi file write ordered begi mpi file write ordered end ORDERED signifie SHARED et ALL Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

43 Compléments accès Il est possible de mélanger les types d accès effectués à un même fichier au sein d une application. Les zones mémoire accédées sont décrites par trois quantités : l adresse initiale de la zone concernée ; le nombre d éléments pris en compte ; le type de données, qui doit correspondre à une suite de copies contiguë du type élémentaire de donnée (etype) de la vue courante. Un déplacement ne peut avoir une valeur négative. Pour mettre un pointeur implicite à une valeur inférieure à sa valeur courante, il faut employer les sous-programmes MPI FILE SEEK ou MPI FILE SEEK SHARED, suivant qu il s agit d un pointeur individuel ou partagé. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Positionnement explicite des pointeurs dans les fichiers INTEGER, PARAMETER :: nb valeurs=10 INTEGER :: myrank, descripteur, nb octets entier, ierr INTEGER(KIND=MPI OFFSET KIND) :: position fichier INTEGER, DIMENSION(nb valeurs) :: valeurs INTEGER, DIMENSION(MPI STATUS SIZE) :: status Positionnement explicite des pointeurs dans les fichiers Les sous-programmes MPI FILE GET POSITION et MPI FILE GET POSITION SHARED permettent de connaître respectivement la valeur courante des pointeurs individuels et celle du pointeur partagé. Il est possible de positionner explicitement les pointeurs individuels à l aide du sous-programme MPI FILE SEEK, et de même le pointeur partagé avec le sous-programme MPI FILE SEEK SHARED. Il y a trois modes possibles pour fixer la valeur d un pointeur : MPI SEEK SET fixe une valeur absolue ; MPI SEEK CUR fixe une valeur relative ; MPI SEEK END positionne le pointeur à la fin du fichier, à laquelle un déplacement éventuel est ajouté. Avec MPI SEEK CUR, on peut spécifier une valeur négative, ce qui permet de revenir en arrière dans le fichier. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Utilisation de MPI FILE SEEK Processeur CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, myrank, ierr) CALL MPI FILE OPEN (MPI COMM WORLD, "donnees.dat", MPI MODE RDONLY,& MPI INFO NULL, descripteur, ierr) CALL MPI FILE READ (descripteur, valeurs, 3, MPI INTEGER, status, ierr) CALL MPI TYPE SIZE (MPI INTEGER, nb octets entier, ierr) position fichier = 8*nb octets entier CALL MPI FILE SEEK (descripteur, position fichier, MPI SEEK CUR, ierr) CALL MPI FILE READ (descripteur,valeurs(4), 3, MPI INTEGER, status,ierr) position fichier = 4*nb octets entier CALL MPI FILE SEEK (descripteur, position fichier, MPI SEEK SET, ierr) CALL MPI FILE READ (descripteur, valeurs(7), 4, MPI INTEGER,status,ierr) CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) Fichier Processeur Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

44 Lectures/écritures individuelles : déplacements explicites La position est exprimée en nombre d occurrences d un type de données, lequel doit être un multiple du type élémentaire de donnée de la vue courante. Le fichier ne doit pas avoir été ouvert avec l attribut MPI MODE SEQUENTIAL. Écriture individuelle avec déplacement explicite INTEGER, PARAMETER :: nb valeurs=10 INTEGER :: descripteur, ierr, i, myrank, nb octets entier INTEGER(KIND=MPI OFFSET KIND) :: position fichier INTEGER, DIMENSION(nb valeurs) :: valeurs INTEGER, DIMENSION(MPI STATUS SIZE) :: status CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, myrank, ierr) valeurs (:) = (/(i+myrank*100,i=1,nb valeurs) /) CALL MPI FILE OPEN (MPI COMM WORLD, "donnees.dat", & MPI MODE WRONLY + MPI MODE CREATE, MPI INFO NULL,& descripteur, ierr) CALL MPI TYPE SIZE (MPI INTEGER, nb octets entier, ierr) position fichier = myrank * nb valeurs * nb octets entier CALL MPI FILE WRITE AT (descripteur, position fichier, valeurs, & nb valeurs, MPI INTEGER, status, ierr) CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Utilisation de MPI FILE WRITE AT Processeur Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Lecture individuelle avec déplacement explicite INTEGER, PARAMETER :: nb valeurs=10 INTEGER :: descripteur, ierr, myrank, nb octets entier INTEGER(KIND=MPI OFFSET KIND) :: position fichier INTEGER, DIMENSION(nb valeurs) :: valeurs INTEGER, DIMENSION(MPI STATUS SIZE) :: status Fichier Processeur CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, myrank, ierr) CALL MPI FILE OPEN (MPI COMM WORLD, "donnees.dat", & MPI MODE RDONLY, MPI INFO NULL,& descripteur, ierr) CALL MPI TYPE SIZE (MPI INTEGER, nb octets entier, ierr) position fichier = myrank * nb valeurs * nb octets entier CALL MPI FILE READ AT (descripteur, position fichier, valeurs, & nb valeurs, MPI INTEGER, status, ierr) CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

45 Utilisation de MPI FILE READ AT Processeur Lectures/écritures individuelles : déplacements implicites individuels Un pointeur individuel est géré par le système, par fichier et par processus. Fichier Pour un processus donné, deux accès consécutifs au même fichier permettent donc d accéder automatiquement aux éléments consécutifs de celui-ci. Processeur Les pointeurs partagés (ci-après) ne sont jamais accédés ou modifiés. Après chaque accès, le pointeur est positionné sur le type élémentaire de donnée suivant. Le fichier ne doit pas avoir été ouvert avec l attribut MPI MODE SEQUENTIAL. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Lecture individuelle avec déplacement implicite INTEGER, PARAMETER :: nb valeurs=10 INTEGER :: descripteur, ierr, myrank, nb octets entier INTEGER, DIMENSION(nb valeurs) :: valeurs INTEGER, DIMENSION(MPI STATUS SIZE) :: status Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Utilisation de MPI FILE READ Processeur CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, myrank, ierr) CALL MPI FILE OPEN (MPI COMM WORLD, "donnees.dat", & MPI MODE RDONLY, MPI INFO NULL,& descripteur, ierr) CALL MPI FILE READ (descripteur, valeurs, 6, MPI INTEGER, status, ierr) Fichier CALL MPI FILE READ (descripteur, valeurs(7), 4, MPI INTEGER, status, ierr) Processeur CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

46 Lecture individuelle avec déplacement implicite INTEGER, PARAMETER :: nb valeurs=10 INTEGER :: descripteur, ierr, myrank, nb octets entier INTEGER, DIMENSION(nb valeurs) :: valeurs INTEGER, DIMENSION(MPI STATUS SIZE) :: status Utilisation de MPI FILE READ Processeur CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, myrank, ierr) Fichier CALL MPI FILE OPEN (MPI COMM WORLD, "donnees.dat", & MPI MODE RDONLY, MPI INFO NULL,& descripteur, ierr) IF (myrank == 0) THEN CALL MPI FILE READ (descripteur, valeurs, 5, MPI INTEGER, status,ierr) ELSE CALL MPI FILE READ (descripteur, valeurs, 8, MPI INTEGER, status,ierr) CALL MPI FILE READ (descripteur, valeurs, 5, MPI INTEGER, status,ierr) END IF CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) Processeur On stocke les valeurs à partir du même emplacement : écrasement Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Lectures/écritures individuelles : déplacements implicites partagés Il existe un et un seul pointeur partagé par fichier, commun à tous les processus du communicateur dans lequel le fichier a été ouvert. Tous les processus qui font une opération d entrée-sortie utilisant le pointeur partagé doivent employer la même vue du fichier. L usage des variantes non collectives des sous-programmes entraîne un ordre de lecture non déterministe. Après chaque accès, le pointeur est positionné sur le type élémentaire de donnée suivant. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Lecture individuelle, déplacement implicite partagé INTEGER, PARAMETER :: nb valeurs=10 INTEGER :: descripteur, ierr, myrank INTEGER, DIMENSION(nb valeurs) :: valeurs INTEGER, DIMENSION(MPI STATUS SIZE) :: status CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, myrank, ierr) CALL MPI FILE OPEN (MPI COMM WORLD, "donnees.dat", & MPI MODE RDONLY, MPI INFO NULL,& descripteur, ierr) CALL MPI FILE READ SHARED (descripteur, valeurs, nb valeurs, & MPI INTEGER, status, ierr) CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) Les pointeurs individuels ne sont jamais accédés ou modifiés par ces sous-programmes. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

47 Utilisation de MPI FILE READ SHARED Processeur Lecture individuelle, déplacement implicite partagé INTEGER, PARAMETER :: nb valeurs=10 INTEGER :: descripteur, ierr, myrank INTEGER, DIMENSION(nb valeurs) :: valeurs INTEGER, DIMENSION(MPI STATUS SIZE) :: status Fichier CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, myrank, ierr) Processeur CALL MPI FILE OPEN (MPI COMM WORLD, "donnees.dat", & MPI MODE RDONLY, MPI INFO NULL,& descripteur, ierr) CALL MPI FILE READ SHARED (descripteur, valeurs, 4, MPI INTEGER, & status, ierr) Comportement non déterministe : 2 possibilités!! CALL MPI FILE READ SHARED (descripteur, valeurs(5), 6, MPI INTEGER, & status, ierr) CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Utilisation de MPI FILE READ SHARED Processeur Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Lectures/écritures collectives Tous les processus du communicateur au sein duquel un fichier est ouvert participent aux opérations collectives d accès aux données. Fichier Processeur Les opérations collectives sont généralement plus performantes que les opérations individuelles car elles autorisent davantage de techniques d optimisation mises en œuvre automatiquement. Comportement non déterministe : 4 possibilités!! Les accès sont effectués dans l ordre des rangs des processus ; le traitement est donc déterministe. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

48 Lectures/écritures collectives : déplacements explicites INTEGER, PARAMETER :: nb valeurs=10 INTEGER :: descripteur, ierr, myrank, nb octets entier INTEGER(KIND=MPI OFFSET KIND) :: position fichier INTEGER, DIMENSION(nb valeurs) :: valeurs INTEGER, DIMENSION(MPI STATUS SIZE) :: status CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, myrank, ierr) Utilisation de MPI FILE READ AT ALL Processeur 0 Fichier CALL MPI FILE OPEN (MPI COMM WORLD, "donnees.dat", & MPI MODE RDONLY, MPI INFO NULL,& descripteur, ierr) Processeur CALL MPI TYPE SIZE (MPI INTEGER, nb octets entier, ierr) position fichier = myrank * nb valeurs * nb octets entier CALL MPI FILE READ AT ALL (descripteur, position fichier, valeurs, & nb valeurs, MPI INTEGER, status, ierr) CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) Pas de différence entre MPI FILE READ AT ALL et MPI FILE READ AT... mis à part l efficacité du collectif. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Lectures/écritures collectives : déplacements implicites individuels INTEGER, PARAMETER :: nb valeurs=10 INTEGER :: descripteur, ierr, myrank, nb octets entier INTEGER, DIMENSION(nb valeurs) :: valeurs INTEGER, DIMENSION(MPI STATUS SIZE) :: status Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Utilisation de MPI FILE READ ALL Processeur 0 Fichier CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, myrank, ierr) CALL MPI FILE OPEN (MPI COMM WORLD, "donnees.dat", & MPI MODE RDONLY, MPI INFO NULL,& descripteur, ierr) Processeur CALL MPI FILE READ ALL (descripteur, valeurs, 4, MPI INTEGER, & status, ierr) CALL MPI FILE READ ALL (descripteur, valeurs(5), 6, MPI INTEGER, & status, ierr) NB : chaque processus a son propre pointeur individuel, mais l action est faite simultanément CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

49 Lectures/écritures collectives : déplacements implicites individuels Utilisation de MPI FILE READ ALL INTEGER, PARAMETER :: nb valeurs=10 INTEGER :: descripteur, ierr, myrank, nb octets entier INTEGER, DIMENSION(nb valeurs) :: valeurs INTEGER, DIMENSION(MPI STATUS SIZE) :: status CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, myrank, ierr) CALL MPI FILE OPEN (MPI COMM WORLD, "donnees.dat", & MPI MODE RDONLY, MPI INFO NULL, & descripteur, ierr) IF (myrank == 0) THEN CALL MPI FILE READ ALL (descripteur, valeurs(3), 4, MPI INTEGER, & status, ierr) ELSE CALL MPI FILE READ ALL (descripteur, valeurs(5), 5, MPI INTEGER, & status, ierr) END IF CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) Processeur 0 Fichier Processeur Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Lectures/écritures collectives : déplacements implicites partagés Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Utilisation de MPI FILE READ ORDERED Processeur INTEGER, PARAMETER :: nb valeurs=10 INTEGER :: descripteur, ierr, myrank, nb octets entier INTEGER, DIMENSION(nb valeurs) :: valeurs INTEGER, DIMENSION(MPI STATUS SIZE) :: status CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, myrank, ierr) Fichier CALL MPI FILE OPEN (MPI COMM WORLD, "donnees.dat", & MPI MODE RDONLY, MPI INFO NULL, & descripteur, ierr) Processeur CALL MPI FILE READ ORDERED (descripteur, valeurs, 4, MPI INTEGER, & status, ierr) CALL MPI FILE READ ORDERED (descripteur, valeurs(5), 6, MPI INTEGER, & status, ierr) NB : comportement déterministe ALL + SHARED = ORDERED CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

50 Types dérivés : TP 8 Ecrire un programme MPI qui : lit un entier N (dimension) par un processus et le diffuse construit un vecteur d entiers, distribué, de dimension totale N le plus homogène possible lit le fichier vecteur.dat (fourni), rempli d entiers avec les trois routines : MPI FILE READ AT, MPI FILE READ AT ALL et MPI FILE READ ORDERED. chaque processus affiche les bornes et le contenu de sa portion de vecteur Définition des vues Les vues sont un mécanisme souple et puissant pour décrire les zones accédées dans les fichiers. Les vues sont construites à l aide de types dérivés MPI. Chaque processus a sa propre vue (ou ses propres vues) d un fichier, définie par trois variables : - un déplacement initial, - un type élémentaire de données, - un motif. Une vue est définie comme la répétition du motif, une fois le déplacement initial effectué. Des processus différents peuvent avoir des vues différentes d un même fichier, de façon à accéder à des parties différentes. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Définition de vues Si le fichier est ouvert en écriture, les zones décrites par les types élémentaires et les motifs ne peuvent pas se recouvrir, même partiellement. La vue par défaut consiste en une simple suite d octets (déplacement initial nul, etype et motifs égaux à MPI BYTE) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Définition de motifs différents selon les processus etype motif proc 0 motif proc 1 motif proc 2 etype motif trous fichier déplacement initial... fichier... déplacement initial données accessibles Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

51 Utilisation d une vue : exemple 1 PROGRAM read view01 USE mpi IMPLICIT NONE déplacement initial : 2 entiers etype motif MPI_INTEGER INTEGER, PARAMETER :: nb valeurs = 10 INTEGER(KIND=MPI OFFSET KIND) :: borne inf zero = 0 INTEGER :: myrank, descripteur, motif temp, motif, ierr INTEGER(KIND=MPI OFFSET KIND) :: deplacement initial INTEGER(KIND=MPI ADDRESS KIND) :: borne inf, taille INTEGER, DIMENSION(2) :: longueurs, deplacements INTEGER, DIMENSION(nb valeurs) :: valeurs INTEGER, DIMENSION(MPI STATUS SIZE) :: status CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, myrank, ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Utilisation d une vue : exemple 1 (fin) Utilisation d une vue : exemple 1 (suite) CALL MPI FILE OPEN (MPI COMM WORLD, "donnees.dat", MPI MODE RDONLY, & MPI INFO NULL, descripteur, ierr) deplacements(1) = 1 deplacements(2) = 4 longueurs(1) = 2 longueurs(2) = 1 CALL MPI TYPE INDEXED (2, longueurs, deplacements, MPI INTEGER, & motif temp, ierr) CALL MPI TYPE GET EXTENT (motif temp, borne inf, taille, ierr) CALL MPI TYPE CREATE RESIZED (motif temp, borne inf zero, & borne inf+taille, motif, ierr) CALL MPI TYPE COMMIT (motif, ierr) deplacement initial = 0 CALL MPI FILE SET VIEW (descripteur, deplacement initial, MPI INTEGER, & motif, "native", MPI INFO NULL, ierr) CALL MPI FILE READ (descripteur, valeurs, 7, MPI INTEGER, status, ierr) CALL MPI FILE READ (descripteur, valeurs(8), 3, MPI INTEGER,status,ierr) CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) END PROGRAM read view01 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Utilisation d une vue : exemple 2 déplacement initial : 0 Processeur etype MPI_INTEGER motif proc 0 motif proc 1 Fichier PROGRAM read view02 USE mpi IMPLICIT NONE Processeur INTEGER, PARAMETER :: nb valeurs = 10 INTEGER :: myrank, descripteur, coord, motif, ierr INTEGER(KIND=MPI OFFSET KIND) :: deplacement initial INTEGER, DIMENSION(nb valeurs) :: valeurs INTEGER, DIMENSION(MPI STATUS SIZE) :: status CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, myrank, ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

52 Utilisation d une vue : exemple 2 (suite) CALL MPI FILE OPEN (MPI COMM WORLD, "donnees.dat", MPI MODE RDONLY, & MPI INFO NULL, descripteur, ierr) IF (myrank == 0) THEN coord = 1 ELSE coord = 3 END IF CALL MPI TYPE CREATE SUBARRAY (1, (/4/), (/2/), (/coord-1/), & MPI ORDER FORTRAN, MPI INTEGER, & motif, ierr) Utilisation d une vue : exemple 2 (fin) Processeur 0 Fichier CALL MPI TYPE COMMIT (motif, ierr) deplacement initial = 0 CALL MPI FILE SET VIEW (descripteur, deplacement initial, MPI INTEGER, & motif, "native", MPI INFO NULL, ierr) CALL MPI FILE READ (descripteur, valeurs, nb valeurs, MPI INTEGER, status, ierr) CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) END PROGRAM read view02 Processeur Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Utilisation d une vue : exemple 3 etype motif_1 motif_2 motif_3 PROGRAM read view03 USE mpi IMPLICIT NONE MPI_INTEGER déplacement initial : 0 déplacement initial : 0 déplacement initial : 2 entiers INTEGER, PARAMETER :: nb valeurs = 10 INTEGER :: myrank, descripteur, motif 1, motif 2, motif 3 INTEGER :: ierr, nb octets entier INTEGER(KIND=MPI OFFSET KIND) :: deplacement initial INTEGER, DIMENSION(nb valeurs) :: valeurs INTEGER, DIMENSION(MPI STATUS SIZE) :: status Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Utilisation d une vue : exemple 3 CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, myrank, ierr) CALL MPI FILE OPEN (MPI COMM WORLD, "donnees.dat", MPI MODE RDONLY, & MPI INFO NULL, descripteur, ierr) CALL MPI TYPE CREATE SUBARRAY (1, (/4/), (/2/), (/0/), & MPI ORDER FORTRAN, MPI INTEGER, & motif 1, ierr) CALL MPI TYPE COMMIT (motif 1, ierr) CALL MPI TYPE CREATE SUBARRAY (1, (/4/), (/2/), (/2/), & MPI ORDER FORTRAN, MPI INTEGER, & motif 2, ierr) CALL MPI TYPE COMMIT (motif 2, ierr) CALL MPI TYPE CREATE SUBARRAY (1, (/4/), (/1/), (/3/), & MPI ORDER FORTRAN, MPI INTEGER, & motif 3, ierr) CALL MPI TYPE COMMIT (motif 3, ierr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

53 Utilisation d une vue : exemple 3 (suite) deplacement initial = 0 CALL MPI FILE SET VIEW (descripteur, deplacement initial, MPI INTEGER, & motif 1, "native", MPI INFO NULL, ierr) CALL MPI FILE READ (descripteur, valeurs, 4, MPI INTEGER, status, ierr) Utilisation d une vue : exemple 3 (fin) Processeur CALL MPI FILE SET VIEW (descripteur, deplacement initial, MPI INTEGER, & motif 2, "native", MPI INFO NULL, ierr) CALL MPI FILE READ (descripteur, valeurs(5), 3, MPI INTEGER,status,ierr) CALL MPI TYPE SIZE (MPI INTEGER, nb octets entier, ierr) deplacement initial = 2*nb octets entier CALL MPI FILE SET VIEW (descripteur, deplacement initial, MPI INTEGER, & motif 3, "native", MPI INFO NULL, ierr) CALL MPI FILE READ (descripteur, valeurs(8), 3, MPI INTEGER,status,ierr) CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) END PROGRAM read view03 Fichier Processeur Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Types dérivés : TP 9 Ecrire un programme MPI qui : lit deux entiers nx et ny par un processus et les diffuse construit une topologie 2D, grille cartésienne distribue la matrice de dimensions globales nx x ny sur la grille de processus, le plus homogène possible initialise le bloc matriciel de chaque processus avec des entiers croissants construit une vue pour générer un fichier contenant la matrice remplit le fichier Dupliquer le programme mais en lecture Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Lectures / écritures non bloquantes Les entrées / sorties non bloquantes sont implémentées selon le modèle utilisé pour les communications non bloquantes. Un accès asynchrone doit donner lieu ultérieurement à un test explicite de complétude ou à une mise en attente (via MPI TEST, MPI WAIT,...) de façon similaire à la gestion des messages non bloquants. Il est possible d effectuer des opérations qui soient à la fois collectives et non bloquantes. Celles-ci nécessite un appel à deux sous-programmes distincts, l un pour déclencher l opération, l autre pour la terminer. On ne peut modifier la zone mémoire concernée durant l opération et il ne peut y avoir qu une seule telle opération en cours à la fois par processus. Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

54 Utilisation de MPI FILE READ ORDERED BEGIN PROGRAM READ ORDERED BEGIN END USE mpi IMPLICIT NONE INTEGER :: descripteur, ierr, myrank INTEGER, DIMENSION(nb valeurs) :: valeurs INTEGER, DIMENSION(MPI STATUS SIZE) :: status Utilisation de MPI FILE READ ORDERED BEGIN Processeur CALL MPI INIT (ierr) CALL MPI COMM RANK (MPI COMM WORLD, myrank, ierr) CALL MPI FILE OPEN (MPI COMM WORLD, "donnees.dat", & MPI MODE RDONLY, MPI INFO NULL,& descripteur, ierr) CALL MPI FILE READ ORDERED BEGIN (descripteur, valeurs, 4, & MPI INTEGER, ierr) CALL MPI FILE READ ORDERED END (descripteur, valeurs, status, ierr) CALL MPI FILE CLOSE (descripteur, ierr) CALL MPI FINALIZE (ierr) END PROGRAM READ ORDERED BEGIN END Fichier Processeur Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Parallélisation Présentation, environnement MPI Communications point à point Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Exemple récapitulatif : équation de la Chaleur 1D Les { équations... u t λ 2 u x 2 = f dans Ω, avec Ω = [0, 1] u = 0 sur Γ = Ω La parallélisation est faite par décomposition de domaine Communications collectives Types de données dérivés Communicateurs et topologies Entrées / sorties collectives : MPI I/O Exemple récapitulatif : équation de la Chaleur 1D Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 La discrétisation spatiale est faite par un schéma aux différences finies d ordre deux à trois points maillage uniforme indicé i pas de discrétisation spatiale hx. La discrétisation temporelle est faite par le schéma de Crank-Nicholson, ordre 2 semi-implicite et inconditionnellement stable dans notre cas, avec dt le pas de la discrétisation. {I 0.5λdt } u n+1 = {I + 0.5λdt } u n + 0.5dt { f n+1 + f n} Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

55 Discrétisation Le laplacien est ainsi discrétisé : h u(i) = u i 1 2.u i + u i+1 h x 2 + termes d erreurs en h x 2 Le système global s écrit alors sous la forme : u i n+1 0.5λdt u i 1 n+1 2u i n+1 + u i+1 n+1 h x 2 = u i n + 0.5λdt. u i 1 n 2u i n + u i+1 n h x dt { f i n+1 + f i n } Algorithme du gradient conjugué A matrice symétrique et définie positive (Ax x) 0 La solution x de Ax = b minimise la fonctionnelle J(x) = (Ax x) 2(b x) Gradient conjugué = méthode itérative, dite de descente, pour que J(x k+1 ) < J(x k ) Algorithme : { x0 donné p 0 = r 0 = b Ax 0 Pour k = 0, 1,... α k = r k 2 (Ap k, p k ) x k+1 = x k + α k p k r k+1 = r k α k A p k β k = r k+1 2 r k 2 p k+1 = r k+1 + β k+1 p k Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Algorithme séquentiel Initialisations : initialisations des vecteurs (fctfx) calcul des constantes (domaine) Boucle itérative en temps 1. construction du second membre (scdmb) 2. résolution du système linéaire (gradconj) boucle itérative de convergence comprenant : 1 produit matrice-vecteur (pmv) 2 produits scalaires (prodscal) 3 combinaisons linéaires de vecteurs (saxpy) 3. avancement en temps et calcul d erreur (nrmerr) Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Au travail Analyser le code séquentiel (le faire tourner ) 2. Analyser les algorithmes mis en œuvre 3. Effectuer le découpage, construire la topologie (grille de processus, voisins,...) 4. Déterminer les dépendances entre les données 5. Faire le bilan : qui a besoin de quoi, quand et où! 6. Déterminer les structures des données à échanger 7. Construire les types MPI ad hoc 8. Dupliquer et modifier le code séquentiel! 9. En bonus, utiliser MPI-I/O pour gérer les fichiers de reprise Finalisations Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221 Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

56 Conclusions Le passage de messages est une technique de parallélisation portable Elle permet de travailler sur tout type d architecture Elle est orientée parallélisme à gros grains Elle permet les échanges au sein de n importe quel groupe de processus Elle permet les échanges de n importe quel type de données Il est préférable d utiliser les formes collectives des opérations d entrée/sortie Guy Moebs (LMJL) Calcul parallèle avec MPI Mars / 221

Introduction à la Programmation Parallèle: MPI

Introduction à la Programmation Parallèle: MPI Introduction à la Programmation Parallèle: MPI Frédéric Gava et Gaétan Hains L.A.C.L Laboratoire d Algorithmique, Complexité et Logique Cours du M2 SSI option PSSR Plan 1 Modèle de programmation 2 3 4

Plus en détail

MPI-1 2ème partie : Programmation «non bloquante» et communications de groupe

MPI-1 2ème partie : Programmation «non bloquante» et communications de groupe 3A-SI Programmation parallèle MPI-1 2ème partie : Programmation «non bloquante» et communications de groupe Stéphane Vialle [email protected] http://www.metz.supelec.fr/~vialle MPI-1 2ème partie

Plus en détail

Plan du cours 2014-2015. Cours théoriques. 29 septembre 2014

Plan du cours 2014-2015. Cours théoriques. 29 septembre 2014 numériques et Institut d Astrophysique et de Géophysique (Bât. B5c) Bureau 0/13 email:[email protected] Tél.: 04-3669771 29 septembre 2014 Plan du cours 2014-2015 Cours théoriques 16-09-2014 numériques pour

Plus en détail

PVM 1 PVM. Parallel Virtual Machine

PVM 1 PVM. Parallel Virtual Machine PVM 1 PVM Parallel Virtual Machine Jalel Chergui Messagerie : [email protected] Jean-Michel Dupays Messagerie : [email protected] PVM Plan 2 1 Introduction................. 5 1.1 Concepts de l échange

Plus en détail

Programmation parallèle et distribuée

Programmation parallèle et distribuée ppd/mpassing p. 1/43 Programmation parallèle et distribuée Communications par messages Philippe MARQUET [email protected] Laboratoire d informatique fondamentale de Lille Université des sciences

Plus en détail

Initiation au HPC - Généralités

Initiation au HPC - Généralités Initiation au HPC - Généralités Éric Ramat et Julien Dehos Université du Littoral Côte d Opale M2 Informatique 2 septembre 2015 Éric Ramat et Julien Dehos Initiation au HPC - Généralités 1/49 Plan du cours

Plus en détail

Les communications collectives. Caractéristiques. Communications dans un groupe de processus. Dans un communicateur donné.

Les communications collectives. Caractéristiques. Communications dans un groupe de processus. Dans un communicateur donné. Les communications collectives Communications dans un groupe de processus. Dans un communicateur donné. Trois sortes : Synchronisation globale MI_Barrier() Transferts de données : diffusion/collecte globale/sélective

Plus en détail

Grid Computing. Mihaela JUGANARU-MATHIEU [email protected] 2014-2015. École Nationale Supérieure des Mines de St Etienne

Grid Computing. Mihaela JUGANARU-MATHIEU mathieu@emse.fr 2014-2015. École Nationale Supérieure des Mines de St Etienne Mihaela JUGANARU-MATHIEU [email protected] École Nationale Supérieure des Mines de St Etienne 2014-2015 Bibliographie (livres et revues) : Frédéric Magoulès, Jie Pan, Kiat-An, Tan Abhinit Kumar Introduction

Plus en détail

UE Programmation Impérative Licence 2ème Année 2014 2015

UE Programmation Impérative Licence 2ème Année 2014 2015 UE Programmation Impérative Licence 2 ème Année 2014 2015 Informations pratiques Équipe Pédagogique Florence Cloppet Neilze Dorta Nicolas Loménie [email protected] 2 Programmation Impérative

Plus en détail

Parallélisme et Répartition

Parallélisme et Répartition Parallélisme et Répartition Master Info Françoise Baude Université de Nice Sophia-Antipolis UFR Sciences Département Informatique [email protected] web du cours : deptinfo.unice.fr/~baude Septembre 2009 Chapitre

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Cours Informatique Master STEP

Cours Informatique Master STEP Cours Informatique Master STEP Bases de la programmation: Compilateurs/logiciels Algorithmique et structure d'un programme Programmation en langage structuré (Fortran 90) Variables, expressions, instructions

Plus en détail

TP : Gestion d une image au format PGM

TP : Gestion d une image au format PGM TP : Gestion d une image au format PGM Objectif : L objectif du sujet est de créer une classe de manipulation d images au format PGM (Portable GreyMap), et de programmer des opérations relativement simples

Plus en détail

Introduction au langage C

Introduction au langage C Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les

Plus en détail

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en

Plus en détail

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

Introduction à MATLAB R

Introduction à MATLAB R Introduction à MATLAB R Romain Tavenard 10 septembre 2009 MATLAB R est un environnement de calcul numérique propriétaire orienté vers le calcul matriciel. Il se compose d un langage de programmation, d

Plus en détail

TP1 : Initiation à Java et Eclipse

TP1 : Initiation à Java et Eclipse TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les

Plus en détail

Introduction to Parallel Programming with MPI

Introduction to Parallel Programming with MPI Introduction to Parallel Programming with MPI Master Modélisation et Simulation - ENSTA cours A1-2 Pierre Kestener [email protected] CEA-Saclay, DSM, France Maison de la Simulation MDLS, September,

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Runtime. Gestion de la réactivité des communications réseau. François Trahay Runtime, LaBRI sous la direction d'alexandre Denis Université Bordeaux I

Runtime. Gestion de la réactivité des communications réseau. François Trahay Runtime, LaBRI sous la direction d'alexandre Denis Université Bordeaux I Runtime Gestion de la réactivité des communications réseau François Trahay Runtime, LaBRI sous la direction d'alexandre Denis Université Bordeaux I 1 Le calcul hautes performances La tendance actuelle

Plus en détail

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes

Plus en détail

Programmer en JAVA. par Tama ([email protected]( [email protected])

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama ([email protected]( [email protected]) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Exclusion Mutuelle. Arnaud Labourel Courriel : [email protected]. Université de Provence. 9 février 2011

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011 Arnaud Labourel Courriel : [email protected] Université de Provence 9 février 2011 Arnaud Labourel (Université de Provence) Exclusion Mutuelle 9 février 2011 1 / 53 Contexte Epistémologique

Plus en détail

Métriques de performance pour les algorithmes et programmes parallèles

Métriques de performance pour les algorithmes et programmes parallèles Métriques de performance pour les algorithmes et programmes parallèles 11 18 nov. 2002 Cette section est basée tout d abord sur la référence suivante (manuel suggéré mais non obligatoire) : R. Miller and

Plus en détail

Compilation (INF 564)

Compilation (INF 564) Présentation du cours Le processeur MIPS Programmation du MIPS 1 Compilation (INF 564) Introduction & architecture MIPS François Pottier 10 décembre 2014 Présentation du cours Le processeur MIPS Programmation

Plus en détail

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation : Algorithmique et programmation : STRUCTURES DE DONNÉES A. Structure et enregistrement 1) Définition et rôle des structures de données en programmation 1.1) Définition : En informatique, une structure de

Plus en détail

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE QCM Remarque : - A une question correspond au moins 1 réponse juste - Cocher la ou les bonnes réponses Barème : - Une bonne réponse = +1 - Pas de réponse = 0

Plus en détail

Présentation du PL/SQL

Présentation du PL/SQL I Présentation du PL/ Copyright Oracle Corporation, 1998. All rights reserved. Objectifs du Cours A la fin de ce chapitre, vous saurez : Décrire l intéret du PL/ Décrire l utilisation du PL/ pour le développeur

Plus en détail

Projet Active Object

Projet Active Object Projet Active Object TAO Livrable de conception et validation Romain GAIDIER Enseignant : M. Noël PLOUZEAU, ISTIC / IRISA Pierre-François LEFRANC Master 2 Informatique parcours MIAGE Méthodes Informatiques

Plus en détail

Corrigé des TD 1 à 5

Corrigé des TD 1 à 5 Corrigé des TD 1 à 5 1 Premier Contact 1.1 Somme des n premiers entiers 1 (* Somme des n premiers entiers *) 2 program somme_entiers; n, i, somme: integer; 8 (* saisie du nombre n *) write( Saisissez un

Plus en détail

Gestion de mémoire secondaire F. Boyer, Laboratoire Sardes [email protected]

Gestion de mémoire secondaire F. Boyer, Laboratoire Sardes Fabienne.Boyer@imag.fr Gestion de mémoire secondaire F. Boyer, Laboratoire Sardes [email protected] 1- Structure d un disque 2- Ordonnancement des requêtes 3- Gestion du disque - formatage - bloc d amorçage - récupération

Plus en détail

Chap III : Les tableaux

Chap III : Les tableaux Chap III : Les tableaux Dans cette partie, on va étudier quelques structures de données de base tels que : Les tableaux (vecteur et matrice) Les chaînes de caractères LA STRUCTURE DE TABLEAU Introduction

Plus en détail

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, tableaux, opérateurs Entrées sorties de base Structures de

Plus en détail

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski [email protected]

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski [email protected] Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université

Plus en détail

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43 Techniques de stockage Techniques de stockage, P. Rigaux p.1/43 Techniques de stockage Contenu de ce cours : 1. Stockage de données. Supports, fonctionnement d un disque, technologie RAID 2. Organisation

Plus en détail

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1 Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1 B. Baert & F. Ludewig [email protected] - [email protected] Qu est-ce que la programmation? Programmer Ecrire un

Plus en détail

Cours 1 : La compilation

Cours 1 : La compilation /38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas [email protected] PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà

Plus en détail

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Cours d introduction à l informatique Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Qu est-ce qu un Une recette de cuisine algorithme? Protocole expérimental

Plus en détail

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données EARTH et Threaded-C: Éléments clés du manuel de références de Threaded-C Bref historique de EARTH et Threaded-C Ancêtres de l architecture EARTH: Slide 1 Machine à flux de données statique de J.B. Dennis

Plus en détail

Chapitre 5 : Les procédures stockées PL/SQL

Chapitre 5 : Les procédures stockées PL/SQL I. Introduction Une procédure ou une fonction stockée est un bloc PL/SQL nommé pouvant accepter des paramètres et être appelée. Généralement, on utilise une fonction pour calculer une valeur. Les procédures

Plus en détail

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations

Plus en détail

LES TYPES DE DONNÉES DU LANGAGE PASCAL

LES TYPES DE DONNÉES DU LANGAGE PASCAL LES TYPES DE DONNÉES DU LANGAGE PASCAL 75 LES TYPES DE DONNÉES DU LANGAGE PASCAL CHAPITRE 4 OBJECTIFS PRÉSENTER LES NOTIONS D ÉTIQUETTE, DE CONS- TANTE ET DE IABLE DANS LE CONTEXTE DU LAN- GAGE PASCAL.

Plus en détail

Evaluation des performances de programmes parallèles haut niveau à base de squelettes

Evaluation des performances de programmes parallèles haut niveau à base de squelettes Evaluation des performances de programmes parallèles haut niveau à base de squelettes Enhancing the Performance Predictability of Grid Applications with Patterns and Process Algebras A. Benoit, M. Cole,

Plus en détail

CORBA haute performance

CORBA haute performance CORBA haute performance «CORBA à 730Mb/s!» Alexandre DENIS PARIS/IRISA, Rennes [email protected] Plan Motivations : concept de grille de calcul CORBA : concepts fondamentaux Vers un ORB haute performance

Plus en détail

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS Depuis SAS 9.2 TS2M3, SAS propose un nouveau langage de programmation permettant de créer et gérer des tables SAS : le DS2 («Data Step 2»). Ces nouveautés

Plus en détail

Etude d Algorithmes Parallèles de Data Mining

Etude d Algorithmes Parallèles de Data Mining REPUBLIQUE TUNISIENNE MINISTERE DE L ENSEIGNEMENT SUPERIEUR, DE LA TECHNOLOGIE ET DE LA RECHERCHE SCIENTIFIQUE UNIVERSITE DE TUNIS ELMANAR FACULTE DES SCIENCES DE TUNIS DEPARTEMENT DES SCIENCES DE L INFORMATIQUE

Plus en détail

Équilibrage Dynamique de Charge pour des Calculs Parallèles sur Cluster Linux - Une Évaluation de l Environnement AMPI.

Équilibrage Dynamique de Charge pour des Calculs Parallèles sur Cluster Linux - Une Évaluation de l Environnement AMPI. Facultés Universitaires Notre-Dame de la Paix, Namur Institut d Informatique Année académique 2003-2004 Équilibrage Dynamique de Charge pour des Calculs Parallèles sur Cluster Linux - Une Évaluation de

Plus en détail

Cours 1: Java et les objets

Cours 1: Java et les objets Ressources Les interface homme-machine et le langage Java DUT première année Henri Garreta, Faculté des Sciences (Luminy) Cyril Pain-Barre & Sébastien Nedjar, IUT d Aix-Marseille (Aix) Cours 1: infodoc.iut.univ-aix.fr/~ihm/

Plus en détail

1. Structure d'un programme FORTRAN 95

1. Structure d'un programme FORTRAN 95 FORTRAN se caractérise par la nécessité de compiler les scripts, c'est à dire transformer du texte en binaire.(transforme un fichier de texte en.f95 en un executable (non lisible par un éditeur) en.exe.)

Plus en détail

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran)  Processus = suite d'actions = suite d'états obtenus = trace Processus 1) Contexte 2) Modèles de Notion de Points de vue Modèle fourni par le SX Opérations sur les 3) Gestion des Représentation des Opérations 4) Ordonnancement des Niveaux d ordonnancement Ordonnancement

Plus en détail

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, [email protected]

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr 6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, [email protected] Interface d un SGF Implémentation d un SGF Gestion de la correspondance entre la structure logique et la structure

Plus en détail

Systèmes parallèles et distribués

Systèmes parallèles et distribués Systèmes parallèles et distribués Grégory Mounié 2013-12 Grégory Mounié Systèmes parallèles et distribués 2013-12 1 / 58 Outline 1 Introduction 2 Performances 3 Problèmes du calcul parallèle 4 Intergiciels

Plus en détail

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. [email protected]

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr . Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 [email protected] LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

Plus en détail

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing 3/4/27 Programmation Avancée Multimédia Multithreading Benoît Piranda Équipe SISAR Université de Marne La Vallée Besoin Programmes à traitements simultanés Réseau Réseau Afficher une animation en temps

Plus en détail

Génie Logiciel avec Ada. 4 février 2013

Génie Logiciel avec Ada. 4 février 2013 Génie Logiciel 4 février 2013 Plan I. Généralités II. Structures linéaires III. Exceptions IV. Structures arborescentes V. Dictionnaires I. Principes II. Notions propres à la POO I. Principes Chapitre

Plus en détail

PROJET ALGORITHMIQUE ET PROGRAMMATION II

PROJET ALGORITHMIQUE ET PROGRAMMATION II PROJET 1 ALGORITHMIQUE ET PROGRAMMATION II CONTENU DU RAPPORT A RENDRE : o Fiche signalétique du binôme o Listing des différents fichiers sources o CD sources o Il sera tenu compte de la présentation du

Plus en détail

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation

Plus en détail

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE ARDUINO DOSSIER RESSOURCE POUR LA CLASSE Sommaire 1. Présentation 2. Exemple d apprentissage 3. Lexique de termes anglais 4. Reconnaître les composants 5. Rendre Arduino autonome 6. Les signaux d entrée

Plus en détail

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7 Cahier des charges driver WIFI pour chipset Ralink RT2571W sur hardware ARM7 RevA 13/03/2006 Création du document Sylvain Huet RevB 16/03/2006 Fusion des fonctions ARP et IP. SH Modification des milestones

Plus en détail

Limitations of the Playstation 3 for High Performance Cluster Computing

Limitations of the Playstation 3 for High Performance Cluster Computing Introduction Plan Limitations of the Playstation 3 for High Performance Cluster Computing July 2007 Introduction Plan Introduction Intérêts de la PS3 : rapide et puissante bon marché L utiliser pour faire

Plus en détail

Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... Université Paris 7 Programmation Objet Licence Bio Informatique Année 2004-2005 TD n 1 - Correction Premiers pas Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... 1. Enregistrez

Plus en détail

D2.2 Définition des mécanismes minimaux d un runtime tolérant aux pannes dans les infrastructures Petascale

D2.2 Définition des mécanismes minimaux d un runtime tolérant aux pannes dans les infrastructures Petascale D2.2 Définition des mécanismes minimaux d un runtime tolérant aux pannes dans les infrastructures Petascale VERSION 1.0 DATE 2010 EDITORIAL MANAGER Sylvain Peyronnet AUTHORS STAFF Ala Rezmerita, Camille

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Cours Bases de données

Cours Bases de données Informations sur le cours Cours Bases de données 9 (10) séances de 3h Polycopié (Cours + TD/TP) 3 année (MISI) Antoine Cornuéjols www.lri.fr/~antoine [email protected] Transparents Disponibles

Plus en détail

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike

Plus en détail

Utilisation d objets : String et ArrayList

Utilisation d objets : String et ArrayList Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons

Plus en détail

Cours de Systèmes d Exploitation

Cours de Systèmes d Exploitation Licence d informatique Synchronisation et Communication inter-processus Hafid Bourzoufi Université de Valenciennes - ISTV Introduction Les processus concurrents s exécutant dans le système d exploitation

Plus en détail

Définitions. Numéro à préciser. (Durée : )

Définitions. Numéro à préciser. (Durée : ) Numéro à préciser (Durée : ) On étudie dans ce problème l ordre lexicographique pour les mots sur un alphabet fini et plusieurs constructions des cycles de De Bruijn. Les trois parties sont largement indépendantes.

Plus en détail

I. Introduction aux fonctions : les fonctions standards

I. Introduction aux fonctions : les fonctions standards Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons

Plus en détail

1 Mesure de la performance d un système temps réel : la gigue

1 Mesure de la performance d un système temps réel : la gigue TP TR ENSPS et MSTER 1 Travaux Pratiques Systèmes temps réel et embarqués ENSPS ISV et Master TP1 - Ordonnancement et communication inter-processus (IPC) Environnement de travail Un ordinateur dual-core

Plus en détail

REALISATION d'un. ORDONNANCEUR à ECHEANCES

REALISATION d'un. ORDONNANCEUR à ECHEANCES REALISATION d'un ORDONNANCEUR à ECHEANCES I- PRÉSENTATION... 3 II. DESCRIPTION DU NOYAU ORIGINEL... 4 II.1- ARCHITECTURE... 4 II.2 - SERVICES... 4 III. IMPLÉMENTATION DE L'ORDONNANCEUR À ÉCHÉANCES... 6

Plus en détail

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme Rappel Ralf Treinen Université Paris Diderot UFR Informatique Laboratoire Preuves, Programmes et Systèmes [email protected] 6 mai 2015 Jusqu'à maintenant : un petit langage de programmation

Plus en détail

Cours 1 : Qu est-ce que la programmation?

Cours 1 : Qu est-ce que la programmation? 1/65 Introduction à la programmation Cours 1 : Qu est-ce que la programmation? Yann Régis-Gianas [email protected] Université Paris Diderot Paris 7 2/65 1. Sortez un appareil qui peut se rendre

Plus en détail

Présentation du langage et premières fonctions

Présentation du langage et premières fonctions 1 Présentation de l interface logicielle Si les langages de haut niveau sont nombreux, nous allons travaillé cette année avec le langage Python, un langage de programmation très en vue sur internet en

Plus en détail

Examen Médian - 1 heure 30

Examen Médian - 1 heure 30 NF01 - Automne 2014 Examen Médian - 1 heure 30 Polycopié papier autorisé, autres documents interdits Calculatrices, téléphones, traducteurs et ordinateurs interdits! Utilisez trois copies séparées, une

Plus en détail

Julien MATHEVET Alexandre BOISSY GSID 4. Rapport RE09. Load Balancing et migration

Julien MATHEVET Alexandre BOISSY GSID 4. Rapport RE09. Load Balancing et migration Julien MATHEVET Alexandre BOISSY GSID 4 Rapport Load Balancing et migration Printemps 2001 SOMMAIRE INTRODUCTION... 3 SYNTHESE CONCERNANT LE LOAD BALANCING ET LA MIGRATION... 4 POURQUOI FAIRE DU LOAD BALANCING?...

Plus en détail

Info0804. Cours 6. Optimisation combinatoire : Applications et compléments

Info0804. Cours 6. Optimisation combinatoire : Applications et compléments Recherche Opérationnelle Optimisation combinatoire : Applications et compléments Pierre Delisle Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique 17 février 2014 Plan de

Plus en détail

Rappels d architecture

Rappels d architecture Assembleur Rappels d architecture Un ordinateur se compose principalement d un processeur, de mémoire. On y attache ensuite des périphériques, mais ils sont optionnels. données : disque dur, etc entrée

Plus en détail

Mise en œuvre des serveurs d application

Mise en œuvre des serveurs d application Nancy-Université Mise en œuvre des serveurs d application UE 203d Master 1 IST-IE Printemps 2008 Master 1 IST-IE : Mise en œuvre des serveurs d application 1/54 Ces transparents, ainsi que les énoncés

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES. 2.2 Architecture fonctionnelle d un système communicant. http://robert.cireddu.free.

2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES. 2.2 Architecture fonctionnelle d un système communicant. http://robert.cireddu.free. 2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES 2.2 Architecture fonctionnelle d un système communicant Page:1/11 http://robert.cireddu.free.fr/sin LES DÉFENSES Objectifs du COURS : Ce cours traitera essentiellement

Plus en détail

UE C avancé cours 1: introduction et révisions

UE C avancé cours 1: introduction et révisions Introduction Types Structures de contrôle Exemple UE C avancé cours 1: introduction et révisions Jean-Lou Desbarbieux et Stéphane Doncieux UMPC 2004/2005 Introduction Types Structures de contrôle Exemple

Plus en détail

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Compléments de documentation Scilab : affichage de texte et formatage de nombres Université des Sciences et Technologies de Lille U.F.R. de Mathématiques Pures et Appliquées Agrégation externe Année 2002-2003 Compléments de documentation Scilab : affichage de texte et formatage de

Plus en détail

INF6500 : Structures des ordinateurs. Sylvain Martel - INF6500 1

INF6500 : Structures des ordinateurs. Sylvain Martel - INF6500 1 INF6500 : Structures des ordinateurs Sylvain Martel - INF6500 1 Cours 4 : Multiprocesseurs Sylvain Martel - INF6500 2 Multiprocesseurs Type SISD SIMD MIMD Communication Shared memory Message-passing Groupe

Plus en détail

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page

Plus en détail

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

Programmation C. Apprendre à développer des programmes simples dans le langage C

Programmation C. Apprendre à développer des programmes simples dans le langage C Programmation C Apprendre à développer des programmes simples dans le langage C Notes de cours sont disponibles sur http://astro.u-strasbg.fr/scyon/stusm (attention les majuscules sont importantes) Modalités

Plus en détail

TP 1. Prise en main du langage Python

TP 1. Prise en main du langage Python TP. Prise en main du langage Python Cette année nous travaillerons avec le langage Python version 3. ; nous utiliserons l environnement de développement IDLE. Étape 0. Dans votre espace personnel, créer

Plus en détail

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi 802.11 module

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi 802.11 module François SCHNEIDER Lycée Victor-Hugo BESANÇON. STS SE FreeRTOS Programmation réseau WIFI Programmation réseau Socket Tcp FlyPort smart Wi-Fi 802.11 module Prérequis : langage C, connaissance réseau : Ip,

Plus en détail

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation Cycle Ingénierie 2e année SIGL Dernière mise à jour : 19/10/2006 Christophe Porteneuve Threads Principes Cycle de vie Création java.lang.thread

Plus en détail

Gestion de clusters de calcul avec Rocks

Gestion de clusters de calcul avec Rocks Gestion de clusters de calcul avec Laboratoire de Chimie et Physique Quantiques / IRSAMC, Toulouse [email protected] 26 Avril 2012 Gestion de clusters de calcul avec Outline Contexte 1 Contexte

Plus en détail

Fiche technique CPU 315SN/PN (315-4PN33)

Fiche technique CPU 315SN/PN (315-4PN33) Fiche technique CPU 315SN/PN (315-4PN33) Données techniques N de commande 315-4PN33 Information générale Note - Caractéristiques SPEED-Bus - Données techniques de l'alimentation Alimentation (valeur nominale)

Plus en détail

Structure fonctionnelle d un SGBD

Structure fonctionnelle d un SGBD Fichiers et Disques Structure fonctionnelle d un SGBD Requetes Optimiseur de requetes Operateurs relationnels Methodes d acces Gestion de tampon Gestion de disque BD 1 Fichiers et Disques Lecture : Transfert

Plus en détail

SYSTÈME DE GESTION DE FICHIERS

SYSTÈME DE GESTION DE FICHIERS SYSTÈME DE GESTION DE FICHIERS - DISQUE 1 Les couches logiciels réponse requête Requêtes E/S Système E/S Pilote E/S Interruptions utilisateur traitement S.E. commandes S.E. S.E. matériel Contrôleur E/S

Plus en détail

Rapport d activité. Mathieu Souchaud Juin 2007

Rapport d activité. Mathieu Souchaud Juin 2007 Rapport d activité Mathieu Souchaud Juin 2007 Ce document fait la synthèse des réalisations accomplies durant les sept premiers mois de ma mission (de novembre 2006 à juin 2007) au sein de l équipe ScAlApplix

Plus en détail