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) (www.mpi-forum.org) 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 (www.openmp.org) 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

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 Stephane.Vialle@supelec.fr http://www.metz.supelec.fr/~vialle MPI-1 2ème partie

Plus en détail

Message Passing Interface (MPI)

Message Passing Interface (MPI) Message Passing Interface (MPI) Isabelle Dupays Marie Flé Jérémie Gaidamour Dimitri Lecas MPI Plan I 1 Introduction... 6 1.1 Introduction... 7 1.2 Concepts de l échange de messages...8 1.3 Mémoire distribuée...

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:.@ulg.ac.be 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

Message Passing Interface (MPI-1)

Message Passing Interface (MPI-1) IPGP INSTITUT DE PHYSIQUE DU GLOBE DE PARIS Programmation parallèle : Message Passing Interface (MPI-1) Geneviève Moguilny moguilny@ipgp.jussieu.fr Institut de Physique du Globe de Paris Réunion téléphonique

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 Philippe.Marquet@lifl.fr Laboratoire d informatique fondamentale de Lille Université des sciences

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 : Jalel.Chergui@idris.fr Jean-Michel Dupays Messagerie : dupays@idris.fr PVM Plan 2 1 Introduction................. 5 1.1 Concepts de l échange

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 mathieu@emse.fr 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 mathieu@emse.fr É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

Figure 1. Structure répartie

Figure 1. Structure répartie Chapitre I: Applications Réparties et Middleware 1. Définition d une application répartie Une application répartie est constituée d un ensemble de processus (d objets, d agents, d acteurs) s exécutant

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 baude@unice.fr web du cours : deptinfo.unice.fr/~baude Septembre 2009 Chapitre

Plus en détail

Norme de programmation pour le cours et les travaux pratiques

Norme de programmation pour le cours et les travaux pratiques Université du Québec École de technologie supérieure Service des enseignements généraux www.seg.etsmtl.ca INF130 Ordinateurs et programmation Norme de programmation pour le cours et les travaux pratiques

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 prenom.nom@mi.parisdescartes.fr 2 Programmation Impérative

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

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

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

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

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

Tableaux (introduction) et types de base

Tableaux (introduction) et types de base Tableaux (introduction) et types de base A. Motivation..................................................... 4 B. Les tableaux.................................................... 5 C. Construction des tableaux.......................................

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

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) 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

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

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

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

Instructions assembleur

Instructions assembleur Instructions assembleur 0001011011110110 0001011101101101 10001001 Instruction vue par le programmeur assembleur ou instruction élémentaire cible d'un compilateur Réalise une modification de l'état interne

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

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

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. 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 : arnaud.labourel@lif.univ-mrs.fr 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

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

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 pierre.kestener@cea.fr CEA-Saclay, DSM, France Maison de la Simulation MDLS, September,

Plus en détail

Cours 7 : fonctions recursives, arithmétique binaire, flottants 1

Cours 7 : fonctions recursives, arithmétique binaire, flottants 1 Cours 7 : fonctions recursives, arithmétique binaire, flottants 1 Les types énumérés On peut aussi définir des types qui ont un nombre fini de valeurs (ex: jours de la semaine, couleurs primaires, etc.)

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 Bruno.Baert@ulg.ac.be - F.Ludewig@ulg.ac.be Qu est-ce que la programmation? Programmer Ecrire un

Plus en détail

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 cegielski@u-pec.fr Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université

Plus en détail

À propos des matrices échelonnées

À propos des matrices échelonnées À propos des matrices échelonnées Antoine Ducros appendice au cours de Géométrie affine et euclidienne dispensé à l Université Paris 6 Année universitaire 2011-2012 Introduction Soit k un corps, soit E

Plus en détail

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

Evaluation des performances de programmes parallèles haut niveau à base de squelettes algorithmiques Evaluation des performances de programmes parallèles haut niveau à base de squelettes algorithmiques (bourse EPSRC numéro GR/S21717/01) Enhancing the Perf. Predictability of Grid Appli. with Patterns 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

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

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

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

Gestion de mémoire secondaire F. Boyer, Laboratoire Sardes Fabienne.Boyer@imag.fr

Gestion de mémoire secondaire F. Boyer, Laboratoire Sardes Fabienne.Boyer@imag.fr Gestion de mémoire secondaire F. Boyer, Laboratoire Sardes Fabienne.Boyer@imag.fr 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

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

Présentation CaSciModOT Performances et Architectures

Présentation CaSciModOT Performances et Architectures Présentation CaSciModOT Performances et Architectures Code parallèle : Un peu de théorie Architectures variables : C(n,p)? Quel code? Quelle architecture? Structure d un code : partie parallèle / séquentielle

Plus en détail

Les chaînes de caractères

Les chaînes de caractères Les chaînes de caractères Comme déjà précisé dans les premiers chapitres de ce cours, il n existe pas de type chaîne de caractères prédéfinit en C. Il existe deux façons pour déclarer une chaîne de caractères

Plus en détail

Algorithmique & Programmation (INF431) Contrôle classant CC2. 25 juin 2014

Algorithmique & Programmation (INF431) Contrôle classant CC2. 25 juin 2014 Algorithmique & Programmation (INF431) Contrôle classant CC2 25 juin 2014 Les parties I, II et III sont indépendantes les unes des autres. Elles peuvent être traitées dans l ordre de votre choix. Elles

Plus en détail

Systèmes Informatiques TD 3: langage C opérations élémentaires

Systèmes Informatiques TD 3: langage C opérations élémentaires Systèmes Informatiques TD 3: langage C opérations élémentaires P. Bakowski bako@ieee.org Opérateurs logiques/arithmétiques Le langage C offre une liste importante d opérateurs logiques et arithmétiques.

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

CORBA haute performance

CORBA haute performance CORBA haute performance «CORBA à 730Mb/s!» Alexandre DENIS PARIS/IRISA, Rennes Alexandre.Denis@irisa.fr Plan Motivations : concept de grille de calcul CORBA : concepts fondamentaux Vers un ORB haute performance

Plus en détail

Systèmes répartis : les Remote Procedure Calls p.1/25

Systèmes répartis : les Remote Procedure Calls p.1/25 Systèmes répartis : les Remote Procedure Calls Fabrice Rossi http://apiacoa.org/contact.html. Université Paris-IX Dauphine Systèmes répartis : les Remote Procedure Calls p.1/25 Les Remote Procedure Calls

Plus en détail

WP2T23 «APPLICATION de de REFERENCE» Prototypage rapide d une application de traitement d images avec SynDEx EADS

WP2T23 «APPLICATION de de REFERENCE» Prototypage rapide d une application de traitement d images avec SynDEx EADS WP2T23 «APPLICATION de de REFERENCE» Prototypage rapide d une application de traitement d images avec SynDEx EADS Avec l appui de l INRIA www-rocq.inria.fr/syndex 1 PLAN I. Présentation du sujet II. Présentation

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

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

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

Cours 1 : La compilation

Cours 1 : La compilation /38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà

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

JACE : un environnement d exécution distribué pour le calcul itératif asynchrone

JACE : un environnement d exécution distribué pour le calcul itératif asynchrone N d ordre 1121 Année 2005 THÈSE Présentée à Université de Franche-Comté UFR Sciences et Techniques Laboratoire d Informatique de l université Franche-Comté Pour obtenir le GRADE DE DOCTEUR DE L UNIVERSITÉ

Plus en détail

BD parallèles et réparties

BD parallèles et réparties LOG660 - Bases de données de haute performance BD parallèles et réparties Département de génie logiciel et des TI BD parallèles vs réparties BD réparties Les données se trouvent sur plusieurs sites (noeuds)

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

CORBA avec OpenORB. Samir Torki et Patrice Torguet

CORBA avec OpenORB. Samir Torki et Patrice Torguet CORBA avec OpenORB Samir Torki et Patrice Torguet 1 Présentation de CORBA CORBA (Common Object Request Broker Architecture) est un standard décrivant une architecture pour la mise en place d objets distribués.

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

Cours Visual Basic URCA

Cours Visual Basic URCA Cours Visual Basic URCA Sommaire Introduction à la programmation VBA et VB Syntaxe de base, variables Opérateurs de base, boucles Introduction à la programmation Qu est-ce que la programmation? Séquences

Plus en détail

RPC Remote Procedure Call. Benmoussa Yahia Université M hamed Bougara de Boumerdès yahia.benm@gmail.com

RPC Remote Procedure Call. Benmoussa Yahia Université M hamed Bougara de Boumerdès yahia.benm@gmail.com RPC Remote Procedure Call Benmoussa Yahia Université M hamed Bougara de Boumerdès yahia.benm@gmail.com Objectifs Le rôle de RPC comme middleware Positionner RPC dans le modèle OSI Développement d application

Plus en détail

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, Fabienne.Boyer@imag.fr 6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr Interface d un SGF Implémentation d un SGF Gestion de la correspondance entre la structure logique et la structure

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

Cours de compilation

Cours de compilation Cours de compilation 1 Introduction Un compilateur est un logiciel de traduction d un langage source vers un langage cible. D ordinaire le langage source est un langage de programmation évolué, comme C++

Plus en détail

Communication par bus SPI avec les capteurs de pression digitaux de la série HCE de Sensortechnics

Communication par bus SPI avec les capteurs de pression digitaux de la série HCE de Sensortechnics 1 INTRODUCTION 1.1 Capteurs de pression digitaux Les capteurs de pression digitaux utilisent un AIC interne pour la calibration digitale et la compensation en température et fournissent un signal de sortie

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

Ch. 1 : Bases de programmation en Visual Basic

Ch. 1 : Bases de programmation en Visual Basic Ch. 1 : Bases de programmation en Visual Basic 1 1 Variables 1.1 Définition Les variables permettent de stocker en mémoire des données. Elles sont représentées par des lettres ou des groupements de lettres

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

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 antoine.cornuejols@agroparistech.fr Transparents Disponibles

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

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

Premier programme VBA : syntaxe, édition, compilation

Premier programme VBA : syntaxe, édition, compilation 1 Premier programme VBA : syntaxe, édition, compilation Le langage VBA (Visual Basic for Applications) permet de concevoir des programmes selon une syntaxe qui lui est propre, puis d éditer et d exécuter

Plus en détail

Système d exploitation

Système d exploitation Chapitre 2 Système d exploitation 2.1 Définition et rôle Un ordinateur serait bien difficile à utiliser sans interface entre le matériel et l utilisateur. Une machine peut exécuter des programmes, mais

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

Gestion de mémoire secondaire

Gestion de mémoire secondaire Gestion de mémoire secondaire F. Boyer, Laboratoire Lig Fabienne.Boyer@imag.fr 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

É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

Arbres binaires et codage de Huffman

Arbres binaires et codage de Huffman MP Option Informatique Premier TP Caml Jeudi 8 octobre 2009 Arbres baires et codage de Huffman 1 Arbres baires Soit E un ensemble non vide. On défit la notion d arbre baire étiqueté (aux feuilles) par

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

Introduction. Les performances d une machine sont liées au: 1. nombre d instructions. 2. temps de cycle horloge

Introduction. Les performances d une machine sont liées au: 1. nombre d instructions. 2. temps de cycle horloge Introduction Les performances d une machine sont liées au: 1. nombre d instructions 2. temps de cycle horloge 3. nombre de cycle horloge par instructions. C est: le compilateur et l architecture du jeu

Plus en détail

Bases de données réparties

Bases de données réparties Bases de données réparties J. Akoka - I. Wattiau 1 Contexte Technologique : des solutions de communication efficace entre les machines des SGBD assurent la transparence des données réparties standardisation

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

5 Moniteurs. Slide 1. Caractéristique majeure d un programme avec moniteurs = Composé de deux sortes de modules/processus: Slide 2

5 Moniteurs. Slide 1. Caractéristique majeure d un programme avec moniteurs = Composé de deux sortes de modules/processus: Slide 2 5 Moniteurs Motivation = les sémaphores peuvent être utilisés pour résoudre à peu près n importe quel problème d exclusion mutuelle ou synchronisation... mais, les sémaphores possèdent certains désavantages:

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

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. 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 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

Plus en détail

Programmation en VBA

Programmation en VBA Programmation en VBA Présentation de Visual Basic Visual Basic : Basic : dérivé du langage Basic (Biginner s All purpose Symbolic Instruction Code) des années 60 Visual : dessin et aperçu de l interface

Plus en détail

CATALOGUE DE FORMATIONS OPTIMISATION DE PERFORMANCE ET ARCHITECTURES PARALLÈLES

CATALOGUE DE FORMATIONS OPTIMISATION DE PERFORMANCE ET ARCHITECTURES PARALLÈLES CATALOGUE DE FORMATIONS OPTIMISATION DE PERFORMANCE ET ARCHITECTURES PARALLÈLES Trois types de formation LES FORMATEURS Les experts techniques AS+ Groupe EOLEN disposent d une réelle expérience pratique

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

Optimisation de code

Optimisation de code Optimisation de code Brique ASC Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Optimisation de code 1 / 77 But L optimisation cherche à améliorer

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

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

Le langage Java - Syntaxe

Le langage Java - Syntaxe Le langage Java - Syntaxe LES BASES: litéraux, types, expressions, instructions LE LANGAGE JAVA - SYNTAXE LES COMMENTAIRES LES IDENTIFICATEURS LISTES DES MOTS RÉSERVÉS: LES LITÉRAUX BOOLÉENS LA DÉCLARATION

Plus en détail

Notes de cours. Introduction

Notes de cours. Introduction Notes de cours GEI 44 : STRUCTURES DE DONNÉES ET ALGORITHMES Chapitre 5 Application des piles Introduction Piles très utilisées dans les compilateurs Voici deux exemples de composants d un compilateur

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