Introduction à la Programmation Parallèle: MPI
|
|
|
- Emmanuelle Richard
- il y a 10 ans
- Total affichages :
Transcription
1 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
2 Plan 1 Modèle de programmation 2 3 4
3 Plan 1 Modèle de programmation 2 3 4
4 Plan 1 Modèle de programmation 2 3 4
5 Plan 1 Modèle de programmation 2 3 4
6 Avant Solution 1 Modèle de programmation Avant Solution Introduction à la Programmation Parallèle: MPI 3 / 38
7 Mémoire répartie Modèle de programmation Avant Solution Peu de systèmes informatiques offrent une véritable mémoire partagée. Même si c est le cas (par ex. SGI Origin 2000 ou les Core Duo etc.) plusieurs facteurs technologiques et physiques font qu un système multi-processeur a un temps d accès à la mémoire qui est variable (Non-uniform memory access ou NUMA). Il vaut alors mieux construire, modéliser ou programmer le système comme un ensemble de blocs controle-processeur-mémoire, ce qui revient à répartir la mémoire sur un réseau d ordinateurs séquentiels. Introduction à la Programmation Parallèle: MPI 4 / 38
8 Mémoire répartie Modèle de programmation Avant Solution Peu de systèmes informatiques offrent une véritable mémoire partagée. Même si c est le cas (par ex. SGI Origin 2000 ou les Core Duo etc.) plusieurs facteurs technologiques et physiques font qu un système multi-processeur a un temps d accès à la mémoire qui est variable (Non-uniform memory access ou NUMA). Il vaut alors mieux construire, modéliser ou programmer le système comme un ensemble de blocs controle-processeur-mémoire, ce qui revient à répartir la mémoire sur un réseau d ordinateurs séquentiels. Introduction à la Programmation Parallèle: MPI 4 / 38
9 Envoi de messages Modèle de programmation Avant Solution Une méthode Le modèle de programmation est alors appelé envoi de messages (message passing en anglais). Il consiste à faire exécuter à chaque processeur (c est-à-dire chaque bloc controle-processeur-mémoire) un programme séquentiel faisant appel à des opérations d envoi et de réception de messages. On suppose (pour simplifier) un unique processus par processeur et on utilise donc les termes processeur ou processus sans distinction a L exécution des processus ne se synchronise qu à travers les opérations d envoi et réception de messages. Les données sont partagées via des messages qui les transmettent. a En réalité, on peut faire exécuter plus d un processus par processeur physique; ce qui ne change pas la sémantique des programmes mais leur performance. Introduction à la Programmation Parallèle: MPI 5 / 38
10 Envoi de messages Modèle de programmation Avant Solution Avantage Portabilité et extensibilité: programmes valables sur 1, 2 ou des milliers de processeurs. Inconvénient Le programmeur doit raisonner en fonction d une mémoire à deux niveaux: global vs local. Si par exemple on programme un algorithme qui agit sur une matrice de grande taille, il faudra la découper en P blocs et coordonner l effet global des opérations sur la matrice. Introduction à la Programmation Parallèle: MPI 6 / 38
11 Envoi de messages Modèle de programmation Avant Solution Avantage Portabilité et extensibilité: programmes valables sur 1, 2 ou des milliers de processeurs. Inconvénient Le programmeur doit raisonner en fonction d une mémoire à deux niveaux: global vs local. Si par exemple on programme un algorithme qui agit sur une matrice de grande taille, il faudra la découper en P blocs et coordonner l effet global des opérations sur la matrice. Introduction à la Programmation Parallèle: MPI 6 / 38
12 Plus précisement Premier pas 1 Modèle de programmation 2 Plus précisement Premier pas 3 4 Introduction à la Programmation Parallèle: MPI 7 / 38
13 MPI : Message Passing Interface Plus précisement Premier pas Kesako? Un standard de bibliothèque d envoi de messages. Défini par un forum de chercheurs et d industriels du calcul haute performance. Plusieurs implantations gratuites, toutes portables. Plus d info sur : http: //en.wikipedia.org/wiki/message Passing Interface Deux implantations courament utilisées : Introduction à la Programmation Parallèle: MPI 8 / 38
14 MPI : Message Passing Interface Plus précisement Premier pas Kesako? Un standard de bibliothèque d envoi de messages. Défini par un forum de chercheurs et d industriels du calcul haute performance. Plusieurs implantations gratuites, toutes portables. Plus d info sur : http: //en.wikipedia.org/wiki/message Passing Interface Deux implantations courament utilisées : Introduction à la Programmation Parallèle: MPI 8 / 38
15 MPI : Message Passing Interface Plus précisement Premier pas Kesako? Un standard de bibliothèque d envoi de messages. Défini par un forum de chercheurs et d industriels du calcul haute performance. Plusieurs implantations gratuites, toutes portables. Plus d info sur : http: //en.wikipedia.org/wiki/message Passing Interface Deux implantations courament utilisées : Introduction à la Programmation Parallèle: MPI 8 / 38
16 MPI : Message Passing Interface Plus précisement Premier pas Pourquoi MPI? Faciliter la programmation par envoi de message Portabilité des programmes parallèles Utilisable avec une architecture hétérogène Cible stable pour des outils/langages de plus haut niveau Que contient MPI? Constantes, types et fonctions pour C et F77 Opérations de communications point-à-point Opérations de communications collectives Groupes de processus Interface de suivi des performances Fonctions d E/S parallèles (version 2) Introduction à la Programmation Parallèle: MPI 9 / 38
17 MPI : Message Passing Interface Plus précisement Premier pas Pourquoi MPI? Faciliter la programmation par envoi de message Portabilité des programmes parallèles Utilisable avec une architecture hétérogène Cible stable pour des outils/langages de plus haut niveau Que contient MPI? Constantes, types et fonctions pour C et F77 Opérations de communications point-à-point Opérations de communications collectives Groupes de processus Interface de suivi des performances Fonctions d E/S parallèles (version 2) Introduction à la Programmation Parallèle: MPI 9 / 38
18 MPI : Message Passing Interface Plus précisement Premier pas Pourquoi MPI? Faciliter la programmation par envoi de message Portabilité des programmes parallèles Utilisable avec une architecture hétérogène Cible stable pour des outils/langages de plus haut niveau Que contient MPI? Constantes, types et fonctions pour C et F77 Opérations de communications point-à-point Opérations de communications collectives Groupes de processus Interface de suivi des performances Fonctions d E/S parallèles (version 2) Introduction à la Programmation Parallèle: MPI 9 / 38
19 MPI : Message Passing Interface Plus précisement Premier pas Pourquoi MPI? Faciliter la programmation par envoi de message Portabilité des programmes parallèles Utilisable avec une architecture hétérogène Cible stable pour des outils/langages de plus haut niveau Que contient MPI? Constantes, types et fonctions pour C et F77 Opérations de communications point-à-point Opérations de communications collectives Groupes de processus Interface de suivi des performances Fonctions d E/S parallèles (version 2) Introduction à la Programmation Parallèle: MPI 9 / 38
20 MPI : Message Passing Interface Plus précisement Premier pas Pourquoi MPI? Faciliter la programmation par envoi de message Portabilité des programmes parallèles Utilisable avec une architecture hétérogène Cible stable pour des outils/langages de plus haut niveau Que contient MPI? Constantes, types et fonctions pour C et F77 Opérations de communications point-à-point Opérations de communications collectives Groupes de processus Interface de suivi des performances Fonctions d E/S parallèles (version 2) Introduction à la Programmation Parallèle: MPI 9 / 38
21 MPI : Message Passing Interface Plus précisement Premier pas Pourquoi MPI? Faciliter la programmation par envoi de message Portabilité des programmes parallèles Utilisable avec une architecture hétérogène Cible stable pour des outils/langages de plus haut niveau Que contient MPI? Constantes, types et fonctions pour C et F77 Opérations de communications point-à-point Opérations de communications collectives Groupes de processus Interface de suivi des performances Fonctions d E/S parallèles (version 2) Introduction à la Programmation Parallèle: MPI 9 / 38
22 MPI : Message Passing Interface Plus précisement Premier pas Pourquoi MPI? Faciliter la programmation par envoi de message Portabilité des programmes parallèles Utilisable avec une architecture hétérogène Cible stable pour des outils/langages de plus haut niveau Que contient MPI? Constantes, types et fonctions pour C et F77 Opérations de communications point-à-point Opérations de communications collectives Groupes de processus Interface de suivi des performances Fonctions d E/S parallèles (version 2) Introduction à la Programmation Parallèle: MPI 9 / 38
23 MPI : Message Passing Interface Plus précisement Premier pas Pourquoi MPI? Faciliter la programmation par envoi de message Portabilité des programmes parallèles Utilisable avec une architecture hétérogène Cible stable pour des outils/langages de plus haut niveau Que contient MPI? Constantes, types et fonctions pour C et F77 Opérations de communications point-à-point Opérations de communications collectives Groupes de processus Interface de suivi des performances Fonctions d E/S parallèles (version 2) Introduction à la Programmation Parallèle: MPI 9 / 38
24 MPI : Message Passing Interface Plus précisement Premier pas Pourquoi MPI? Faciliter la programmation par envoi de message Portabilité des programmes parallèles Utilisable avec une architecture hétérogène Cible stable pour des outils/langages de plus haut niveau Que contient MPI? Constantes, types et fonctions pour C et F77 Opérations de communications point-à-point Opérations de communications collectives Groupes de processus Interface de suivi des performances Fonctions d E/S parallèles (version 2) Introduction à la Programmation Parallèle: MPI 9 / 38
25 MPI : Message Passing Interface Plus précisement Premier pas Pourquoi MPI? Faciliter la programmation par envoi de message Portabilité des programmes parallèles Utilisable avec une architecture hétérogène Cible stable pour des outils/langages de plus haut niveau Que contient MPI? Constantes, types et fonctions pour C et F77 Opérations de communications point-à-point Opérations de communications collectives Groupes de processus Interface de suivi des performances Fonctions d E/S parallèles (version 2) Introduction à la Programmation Parallèle: MPI 9 / 38
26 MPI : Message Passing Interface Plus précisement Premier pas Pourquoi MPI? Faciliter la programmation par envoi de message Portabilité des programmes parallèles Utilisable avec une architecture hétérogène Cible stable pour des outils/langages de plus haut niveau Que contient MPI? Constantes, types et fonctions pour C et F77 Opérations de communications point-à-point Opérations de communications collectives Groupes de processus Interface de suivi des performances Fonctions d E/S parallèles (version 2) Introduction à la Programmation Parallèle: MPI 9 / 38
27 MPI : Message Passing Interface Plus précisement Premier pas Pourquoi MPI? Faciliter la programmation par envoi de message Portabilité des programmes parallèles Utilisable avec une architecture hétérogène Cible stable pour des outils/langages de plus haut niveau Que contient MPI? Constantes, types et fonctions pour C et F77 Opérations de communications point-à-point Opérations de communications collectives Groupes de processus Interface de suivi des performances Fonctions d E/S parallèles (version 2) Introduction à la Programmation Parallèle: MPI 9 / 38
28 MPI : Message Passing Interface Plus précisement Premier pas Ce que ne contient pas MPI Opérations de mémoire partagée (donc chaque processus a son propre espace d adressage) Outils de programmation, débogueur Gestion des processus RPC ou Remote procedure call Processus légers (en fait, certaines implantations de MPI ne sont pas thread safe ) Introduction à la Programmation Parallèle: MPI 10 / 38
29 MPI : Message Passing Interface Plus précisement Premier pas Ce que ne contient pas MPI Opérations de mémoire partagée (donc chaque processus a son propre espace d adressage) Outils de programmation, débogueur Gestion des processus RPC ou Remote procedure call Processus légers (en fait, certaines implantations de MPI ne sont pas thread safe ) Introduction à la Programmation Parallèle: MPI 10 / 38
30 MPI : Message Passing Interface Plus précisement Premier pas Ce que ne contient pas MPI Opérations de mémoire partagée (donc chaque processus a son propre espace d adressage) Outils de programmation, débogueur Gestion des processus RPC ou Remote procedure call Processus légers (en fait, certaines implantations de MPI ne sont pas thread safe ) Introduction à la Programmation Parallèle: MPI 10 / 38
31 MPI : Message Passing Interface Plus précisement Premier pas Ce que ne contient pas MPI Opérations de mémoire partagée (donc chaque processus a son propre espace d adressage) Outils de programmation, débogueur Gestion des processus RPC ou Remote procedure call Processus légers (en fait, certaines implantations de MPI ne sont pas thread safe ) Introduction à la Programmation Parallèle: MPI 10 / 38
32 MPI : Message Passing Interface Plus précisement Premier pas Ce que ne contient pas MPI Opérations de mémoire partagée (donc chaque processus a son propre espace d adressage) Outils de programmation, débogueur Gestion des processus RPC ou Remote procedure call Processus légers (en fait, certaines implantations de MPI ne sont pas thread safe ) Introduction à la Programmation Parallèle: MPI 10 / 38
33 MPI : Message Passing Interface Plus précisement Premier pas Ce que ne contient pas MPI Opérations de mémoire partagée (donc chaque processus a son propre espace d adressage) Outils de programmation, débogueur Gestion des processus RPC ou Remote procedure call Processus légers (en fait, certaines implantations de MPI ne sont pas thread safe ) Introduction à la Programmation Parallèle: MPI 10 / 38
34 Programmation en mode SPMD Plus précisement Premier pas SPMD? SPMD = Single Program Multiple Data. Fonctionnement? 1 On écrit un programme C avec des opérations MPI pour les communications 2 On le compile et le lance avec mpirun -np n où n est le nombre de processus voulu. 3 n copies de l exécutable sont créées avec pour numéros de processus 0, 1,..., n 1. 4 Les processus s exécutent en mode asynchrone et se synchronisent lors d échanges de messages. 5 Les processus se terminent tous (s il n y a pas eu blocage). Introduction à la Programmation Parallèle: MPI 11 / 38
35 Programmation en mode SPMD Plus précisement Premier pas SPMD? SPMD = Single Program Multiple Data. Fonctionnement? 1 On écrit un programme C avec des opérations MPI pour les communications 2 On le compile et le lance avec mpirun -np n où n est le nombre de processus voulu. 3 n copies de l exécutable sont créées avec pour numéros de processus 0, 1,..., n 1. 4 Les processus s exécutent en mode asynchrone et se synchronisent lors d échanges de messages. 5 Les processus se terminent tous (s il n y a pas eu blocage). Introduction à la Programmation Parallèle: MPI 11 / 38
36 Programmation en mode SPMD Plus précisement Premier pas SPMD? SPMD = Single Program Multiple Data. Fonctionnement? 1 On écrit un programme C avec des opérations MPI pour les communications 2 On le compile et le lance avec mpirun -np n où n est le nombre de processus voulu. 3 n copies de l exécutable sont créées avec pour numéros de processus 0, 1,..., n 1. 4 Les processus s exécutent en mode asynchrone et se synchronisent lors d échanges de messages. 5 Les processus se terminent tous (s il n y a pas eu blocage). Introduction à la Programmation Parallèle: MPI 11 / 38
37 Programmation en mode SPMD Plus précisement Premier pas SPMD? SPMD = Single Program Multiple Data. Fonctionnement? 1 On écrit un programme C avec des opérations MPI pour les communications 2 On le compile et le lance avec mpirun -np n où n est le nombre de processus voulu. 3 n copies de l exécutable sont créées avec pour numéros de processus 0, 1,..., n 1. 4 Les processus s exécutent en mode asynchrone et se synchronisent lors d échanges de messages. 5 Les processus se terminent tous (s il n y a pas eu blocage). Introduction à la Programmation Parallèle: MPI 11 / 38
38 Programmation en mode SPMD Plus précisement Premier pas SPMD? SPMD = Single Program Multiple Data. Fonctionnement? 1 On écrit un programme C avec des opérations MPI pour les communications 2 On le compile et le lance avec mpirun -np n où n est le nombre de processus voulu. 3 n copies de l exécutable sont créées avec pour numéros de processus 0, 1,..., n 1. 4 Les processus s exécutent en mode asynchrone et se synchronisent lors d échanges de messages. 5 Les processus se terminent tous (s il n y a pas eu blocage). Introduction à la Programmation Parallèle: MPI 11 / 38
39 Programmation en mode SPMD Plus précisement Premier pas SPMD? SPMD = Single Program Multiple Data. Fonctionnement? 1 On écrit un programme C avec des opérations MPI pour les communications 2 On le compile et le lance avec mpirun -np n où n est le nombre de processus voulu. 3 n copies de l exécutable sont créées avec pour numéros de processus 0, 1,..., n 1. 4 Les processus s exécutent en mode asynchrone et se synchronisent lors d échanges de messages. 5 Les processus se terminent tous (s il n y a pas eu blocage). Introduction à la Programmation Parallèle: MPI 11 / 38
40 Programmation en mode SPMD Plus précisement Premier pas SPMD? SPMD = Single Program Multiple Data. Fonctionnement? 1 On écrit un programme C avec des opérations MPI pour les communications 2 On le compile et le lance avec mpirun -np n où n est le nombre de processus voulu. 3 n copies de l exécutable sont créées avec pour numéros de processus 0, 1,..., n 1. 4 Les processus s exécutent en mode asynchrone et se synchronisent lors d échanges de messages. 5 Les processus se terminent tous (s il n y a pas eu blocage). Introduction à la Programmation Parallèle: MPI 11 / 38
41 Types d appels de fonctions MPI Plus précisement Premier pas Local, bloquant ou non 1 Local : ne nécessite aucune communication. Par ex. pour générer un objet MPI local. 2 Non-local : nécessite l exécution d une procédure MPI sur un autre processus. Par ex. un envoi de message (nécessite réception). 3 Bloquant : à la fin d un tel appel, le programme appelant peut réutiliser les ressources utilisées dans l appel: par ex. un buffer. 4 Non-bloquant : à la fin d un tel appel, le programme doit attendre que l opération se termine avant de réutiliser les ressources utilisées. Par ex: un envoi de message non-bloquant peut libérer le processus émetteur avant que le message ne soit envoyé. Introduction à la Programmation Parallèle: MPI 12 / 38
42 Types d appels de fonctions MPI Plus précisement Premier pas Local, bloquant ou non 1 Local : ne nécessite aucune communication. Par ex. pour générer un objet MPI local. 2 Non-local : nécessite l exécution d une procédure MPI sur un autre processus. Par ex. un envoi de message (nécessite réception). 3 Bloquant : à la fin d un tel appel, le programme appelant peut réutiliser les ressources utilisées dans l appel: par ex. un buffer. 4 Non-bloquant : à la fin d un tel appel, le programme doit attendre que l opération se termine avant de réutiliser les ressources utilisées. Par ex: un envoi de message non-bloquant peut libérer le processus émetteur avant que le message ne soit envoyé. Introduction à la Programmation Parallèle: MPI 12 / 38
43 Types d appels de fonctions MPI Plus précisement Premier pas Local, bloquant ou non 1 Local : ne nécessite aucune communication. Par ex. pour générer un objet MPI local. 2 Non-local : nécessite l exécution d une procédure MPI sur un autre processus. Par ex. un envoi de message (nécessite réception). 3 Bloquant : à la fin d un tel appel, le programme appelant peut réutiliser les ressources utilisées dans l appel: par ex. un buffer. 4 Non-bloquant : à la fin d un tel appel, le programme doit attendre que l opération se termine avant de réutiliser les ressources utilisées. Par ex: un envoi de message non-bloquant peut libérer le processus émetteur avant que le message ne soit envoyé. Introduction à la Programmation Parallèle: MPI 12 / 38
44 Types d appels de fonctions MPI Plus précisement Premier pas Local, bloquant ou non 1 Local : ne nécessite aucune communication. Par ex. pour générer un objet MPI local. 2 Non-local : nécessite l exécution d une procédure MPI sur un autre processus. Par ex. un envoi de message (nécessite réception). 3 Bloquant : à la fin d un tel appel, le programme appelant peut réutiliser les ressources utilisées dans l appel: par ex. un buffer. 4 Non-bloquant : à la fin d un tel appel, le programme doit attendre que l opération se termine avant de réutiliser les ressources utilisées. Par ex: un envoi de message non-bloquant peut libérer le processus émetteur avant que le message ne soit envoyé. Introduction à la Programmation Parallèle: MPI 12 / 38
45 Types d appels de fonctions MPI Plus précisement Premier pas Local, bloquant ou non 1 Local : ne nécessite aucune communication. Par ex. pour générer un objet MPI local. 2 Non-local : nécessite l exécution d une procédure MPI sur un autre processus. Par ex. un envoi de message (nécessite réception). 3 Bloquant : à la fin d un tel appel, le programme appelant peut réutiliser les ressources utilisées dans l appel: par ex. un buffer. 4 Non-bloquant : à la fin d un tel appel, le programme doit attendre que l opération se termine avant de réutiliser les ressources utilisées. Par ex: un envoi de message non-bloquant peut libérer le processus émetteur avant que le message ne soit envoyé. Introduction à la Programmation Parallèle: MPI 12 / 38
46 Types d appels de fonctions MPI Plus précisement Premier pas Collectif et groupes 1 Collectif Nécessite l appel de la même fonction par tous les processus (d un même groupe de processus). Par ex: broadcast, diffusion d une valeur d un processus à tous les autres. 2 Pour simplifier, dans ce qui suit il n y a qu un seul groupe de processus communicants: situation par défaut Introduction à la Programmation Parallèle: MPI 13 / 38
47 Types d appels de fonctions MPI Plus précisement Premier pas Collectif et groupes 1 Collectif Nécessite l appel de la même fonction par tous les processus (d un même groupe de processus). Par ex: broadcast, diffusion d une valeur d un processus à tous les autres. 2 Pour simplifier, dans ce qui suit il n y a qu un seul groupe de processus communicants: situation par défaut Introduction à la Programmation Parallèle: MPI 13 / 38
48 Types d appels de fonctions MPI Plus précisement Premier pas Collectif et groupes 1 Collectif Nécessite l appel de la même fonction par tous les processus (d un même groupe de processus). Par ex: broadcast, diffusion d une valeur d un processus à tous les autres. 2 Pour simplifier, dans ce qui suit il n y a qu un seul groupe de processus communicants: situation par défaut Introduction à la Programmation Parallèle: MPI 13 / 38
49 C et MPI Modèle de programmation Plus précisement Premier pas Les noms MPI ont pour préfixe MPI : à éviter pour le reste du programme. Les fonctions rendent un code d erreur. En cas de succès: MPI SUCCESS Arguments tableaux indexés à partir de 0. Arguments Flags : entiers encodant un booléen. 0=faux, non-zéro=vrai. Arguments de types union: pointeurs de type void*. Arguments-adresses: type défini MPI comme MPI Aint. C est un entier de taille suffisante pour une adresse de l architecture cible. Les constantes MPI peuvent être affectées à des variables C. Introduction à la Programmation Parallèle: MPI 14 / 38
50 Programmer en C+MPI Plus précisement Premier pas Inialisation Pour utiliser MPI, un programme doit inclure le header de MPI #include "mpi.h" On compile avec mpicc On initialise avec MPI Init(argc,argv) 2 constantes très utiles Avoir la taille du groupe int MPI Comm size(mpi Comm, int *size) et donc pour l ensemble des processeurs MPI Comm size(mpi COMM WORLD,&nprocs) idem pour le pid du processeur dans un groupe int MPI Comm rank(mpi Comm, int *rank) Introduction à la Programmation Parallèle: MPI 15 / 38
51 Programmer en C+MPI Plus précisement Premier pas Inialisation Pour utiliser MPI, un programme doit inclure le header de MPI #include "mpi.h" On compile avec mpicc On initialise avec MPI Init(argc,argv) 2 constantes très utiles Avoir la taille du groupe int MPI Comm size(mpi Comm, int *size) et donc pour l ensemble des processeurs MPI Comm size(mpi COMM WORLD,&nprocs) idem pour le pid du processeur dans un groupe int MPI Comm rank(mpi Comm, int *rank) Introduction à la Programmation Parallèle: MPI 15 / 38
52 Programmer en C+MPI Plus précisement Premier pas Terminaison et exécution On termine avec MPI Finalize(void) On lance avec mpirun option "prog" "arguments du programme" et : 1 -np 6 pour avoir 6 processus 2 -nolocal pour n avoir des processus que sur les noeuds 3 -machinefile "machine" un fichier contenant le nom des noeuds 4 -arch LINUX pour préciser le type d architecture (ici LINUX) 5 etc. (faire man mpirun pour plus d options) En général, plus de détails sur doc.html (programmes en Fortran mais aisés à traduire en C) mpi mtp pdf Introduction à la Programmation Parallèle: MPI 16 / 38
53 Programmer en C+MPI Plus précisement Premier pas Terminaison et exécution On termine avec MPI Finalize(void) On lance avec mpirun option "prog" "arguments du programme" et : 1 -np 6 pour avoir 6 processus 2 -nolocal pour n avoir des processus que sur les noeuds 3 -machinefile "machine" un fichier contenant le nom des noeuds 4 -arch LINUX pour préciser le type d architecture (ici LINUX) 5 etc. (faire man mpirun pour plus d options) En général, plus de détails sur doc.html (programmes en Fortran mais aisés à traduire en C) mpi mtp pdf Introduction à la Programmation Parallèle: MPI 16 / 38
54 Primitives bloquantes La combinaison 1 Modèle de programmation 2 3 Primitives bloquantes La combinaison 4 Introduction à la Programmation Parallèle: MPI 17 / 38
55 Envoi bloquant Modèle de programmation Primitives bloquantes La combinaison Type int MPI Send(void* buf, int count, MPI Datatype datatype, int dest, int tag, MPI Comm comm) Arguments Les arguments sont tous des paramètres d entrée à la fonction : buf adresse du début du buffer count nombre de valeurs à envoyer datatype type de chaque valeur dest rang du processus de destination tag étiquette pour identifier le message comm communicator: groupe de processus Introduction à la Programmation Parallèle: MPI 18 / 38
56 Envoi bloquant Modèle de programmation Primitives bloquantes La combinaison Type int MPI Send(void* buf, int count, MPI Datatype datatype, int dest, int tag, MPI Comm comm) Arguments Les arguments sont tous des paramètres d entrée à la fonction : buf adresse du début du buffer count nombre de valeurs à envoyer datatype type de chaque valeur dest rang du processus de destination tag étiquette pour identifier le message comm communicator: groupe de processus Introduction à la Programmation Parallèle: MPI 18 / 38
57 Envoi bloquant Modèle de programmation Primitives bloquantes La combinaison Remarques 1 Dans le cas le plus simple, on fixe comm à MPI COMM WORLD 2 Comme un processus peut recevoir plusieurs messages (et éventuellement plusieurs d un même émetteur), tag peut servir à les identifier. Si leur identité est connue (par le contexte du programme), on peut fixer tag à n importe quelle valeur lors de l émission et à MPI ANY TAG lors de la réception. 3 L émetteur place les valeurs à émettre dans des lieux successifs de la mémoire locale avant d appeler MPI Send 4 Si on fixe count=0, le message ne contiendra que ses informations de controle source, destination, tag et communicateur et pourra servir à une synchronisation ou à signifier un événement. Introduction à la Programmation Parallèle: MPI 19 / 38
58 Envoi bloquant Modèle de programmation Primitives bloquantes La combinaison Remarques 1 Dans le cas le plus simple, on fixe comm à MPI COMM WORLD 2 Comme un processus peut recevoir plusieurs messages (et éventuellement plusieurs d un même émetteur), tag peut servir à les identifier. Si leur identité est connue (par le contexte du programme), on peut fixer tag à n importe quelle valeur lors de l émission et à MPI ANY TAG lors de la réception. 3 L émetteur place les valeurs à émettre dans des lieux successifs de la mémoire locale avant d appeler MPI Send 4 Si on fixe count=0, le message ne contiendra que ses informations de controle source, destination, tag et communicateur et pourra servir à une synchronisation ou à signifier un événement. Introduction à la Programmation Parallèle: MPI 19 / 38
59 Envoi bloquant Modèle de programmation Primitives bloquantes La combinaison Remarques 1 Dans le cas le plus simple, on fixe comm à MPI COMM WORLD 2 Comme un processus peut recevoir plusieurs messages (et éventuellement plusieurs d un même émetteur), tag peut servir à les identifier. Si leur identité est connue (par le contexte du programme), on peut fixer tag à n importe quelle valeur lors de l émission et à MPI ANY TAG lors de la réception. 3 L émetteur place les valeurs à émettre dans des lieux successifs de la mémoire locale avant d appeler MPI Send 4 Si on fixe count=0, le message ne contiendra que ses informations de controle source, destination, tag et communicateur et pourra servir à une synchronisation ou à signifier un événement. Introduction à la Programmation Parallèle: MPI 19 / 38
60 Envoi bloquant Modèle de programmation Primitives bloquantes La combinaison Remarques 1 Dans le cas le plus simple, on fixe comm à MPI COMM WORLD 2 Comme un processus peut recevoir plusieurs messages (et éventuellement plusieurs d un même émetteur), tag peut servir à les identifier. Si leur identité est connue (par le contexte du programme), on peut fixer tag à n importe quelle valeur lors de l émission et à MPI ANY TAG lors de la réception. 3 L émetteur place les valeurs à émettre dans des lieux successifs de la mémoire locale avant d appeler MPI Send 4 Si on fixe count=0, le message ne contiendra que ses informations de controle source, destination, tag et communicateur et pourra servir à une synchronisation ou à signifier un événement. Introduction à la Programmation Parallèle: MPI 19 / 38
61 Envoi bloquant Modèle de programmation Primitives bloquantes La combinaison Remarques 1 Dans le cas le plus simple, on fixe comm à MPI COMM WORLD 2 Comme un processus peut recevoir plusieurs messages (et éventuellement plusieurs d un même émetteur), tag peut servir à les identifier. Si leur identité est connue (par le contexte du programme), on peut fixer tag à n importe quelle valeur lors de l émission et à MPI ANY TAG lors de la réception. 3 L émetteur place les valeurs à émettre dans des lieux successifs de la mémoire locale avant d appeler MPI Send 4 Si on fixe count=0, le message ne contiendra que ses informations de controle source, destination, tag et communicateur et pourra servir à une synchronisation ou à signifier un événement. Introduction à la Programmation Parallèle: MPI 19 / 38
62 Envoi bloquant Modèle de programmation Primitives bloquantes La combinaison Suite des arguments 1 Le buffer est constitué de count valeurs successives en mémoire, à partir de l adresse buf. Il s agit bien de valeurs et pas d octets, ce qui rend l opération plus portable. Il faut spécifier le type des valeurs, mais pas leur taille. C est ce que font les valeurs MPI de l argument datatype. 2 Voici les principaux et leurs équivalents C : MPI Datatype MPI CHAR MPI SHORT MPI INT MPI LONG MPI FLOAT MPI DOUBLE type C signed char signed short int signed int signed long int float double Introduction à la Programmation Parallèle: MPI 20 / 38
63 Envoi bloquant Modèle de programmation Primitives bloquantes La combinaison Suite des arguments 1 Le buffer est constitué de count valeurs successives en mémoire, à partir de l adresse buf. Il s agit bien de valeurs et pas d octets, ce qui rend l opération plus portable. Il faut spécifier le type des valeurs, mais pas leur taille. C est ce que font les valeurs MPI de l argument datatype. 2 Voici les principaux et leurs équivalents C : MPI Datatype MPI CHAR MPI SHORT MPI INT MPI LONG MPI FLOAT MPI DOUBLE type C signed char signed short int signed int signed long int float double Introduction à la Programmation Parallèle: MPI 20 / 38
64 Envoi bloquant Modèle de programmation Primitives bloquantes La combinaison Suite des arguments 1 Le buffer est constitué de count valeurs successives en mémoire, à partir de l adresse buf. Il s agit bien de valeurs et pas d octets, ce qui rend l opération plus portable. Il faut spécifier le type des valeurs, mais pas leur taille. C est ce que font les valeurs MPI de l argument datatype. 2 Voici les principaux et leurs équivalents C : MPI Datatype MPI CHAR MPI SHORT MPI INT MPI LONG MPI FLOAT MPI DOUBLE type C signed char signed short int signed int signed long int float double Introduction à la Programmation Parallèle: MPI 20 / 38
65 Réception bloquante Primitives bloquantes La combinaison Type int MPI Recv(void* buf, int count, MPI Datatype datatype, int source, int tag, MPI Comm comm, MPI Status *status) Arguments Les arguments buf et status sont des paramètres de sortie, les autres sont des paramètres d entrée : le buffer de réception est constitué de count valeurs successives de type datatype situées à partir de l adresse buf. Si moins de valeurs sont reçues, elles sont placées au début. S il y en a trop, une erreur de débordement est déclenchée. Introduction à la Programmation Parallèle: MPI 21 / 38
66 Réception bloquante Primitives bloquantes La combinaison Type int MPI Recv(void* buf, int count, MPI Datatype datatype, int source, int tag, MPI Comm comm, MPI Status *status) Arguments Les arguments buf et status sont des paramètres de sortie, les autres sont des paramètres d entrée : le buffer de réception est constitué de count valeurs successives de type datatype situées à partir de l adresse buf. Si moins de valeurs sont reçues, elles sont placées au début. S il y en a trop, une erreur de débordement est déclenchée. Introduction à la Programmation Parallèle: MPI 21 / 38
67 Réception bloquante Primitives bloquantes La combinaison Type int MPI Recv(void* buf, int count, MPI Datatype datatype, int source, int tag, MPI Comm comm, MPI Status *status) Arguments Les arguments buf et status sont des paramètres de sortie, les autres sont des paramètres d entrée : le buffer de réception est constitué de count valeurs successives de type datatype situées à partir de l adresse buf. Si moins de valeurs sont reçues, elles sont placées au début. S il y en a trop, une erreur de débordement est déclenchée. Introduction à la Programmation Parallèle: MPI 21 / 38
68 Réception bloquante Primitives bloquantes La combinaison Suite arguments le message sélectionné est le premier dans la file de réception dont l étiquette et le rang d émetteur sont tag et source; on peut fixer tag à MPI ANY TAG et/ou source à MPI ANY SOURCE pour ne pas tenir compte d une ou l autre de ces valeurs. status est une structure de type MPI Status contenant trois champs status.mpi SOURCE, status.mpi TAG et status.mpi ERROR contenant l émetteur effectif, l étiquette et le code d erreur. Introduction à la Programmation Parallèle: MPI 22 / 38
69 Réception bloquante Primitives bloquantes La combinaison Suite arguments le message sélectionné est le premier dans la file de réception dont l étiquette et le rang d émetteur sont tag et source; on peut fixer tag à MPI ANY TAG et/ou source à MPI ANY SOURCE pour ne pas tenir compte d une ou l autre de ces valeurs. status est une structure de type MPI Status contenant trois champs status.mpi SOURCE, status.mpi TAG et status.mpi ERROR contenant l émetteur effectif, l étiquette et le code d erreur. Introduction à la Programmation Parallèle: MPI 22 / 38
70 Réception bloquante Primitives bloquantes La combinaison Suite arguments le message sélectionné est le premier dans la file de réception dont l étiquette et le rang d émetteur sont tag et source; on peut fixer tag à MPI ANY TAG et/ou source à MPI ANY SOURCE pour ne pas tenir compte d une ou l autre de ces valeurs. status est une structure de type MPI Status contenant trois champs status.mpi SOURCE, status.mpi TAG et status.mpi ERROR contenant l émetteur effectif, l étiquette et le code d erreur. Introduction à la Programmation Parallèle: MPI 22 / 38
71 Réception bloquante Primitives bloquantes La combinaison Suite arguments le message sélectionné est le premier dans la file de réception dont l étiquette et le rang d émetteur sont tag et source; on peut fixer tag à MPI ANY TAG et/ou source à MPI ANY SOURCE pour ne pas tenir compte d une ou l autre de ces valeurs. status est une structure de type MPI Status contenant trois champs status.mpi SOURCE, status.mpi TAG et status.mpi ERROR contenant l émetteur effectif, l étiquette et le code d erreur. Introduction à la Programmation Parallèle: MPI 22 / 38
72 Réception bloquante Primitives bloquantes La combinaison Pour connaître le nombre exact de valeurs reçues, il faut extraire cette information de status en lui appliquant la fonction suivante : int MPI Get count(mpi Status *status, MPI Datatype datatype, int *count) dont les arguments *status et datatype sont en entrée et *count en sortie. Il faut que datatype soit le type des valeurs spécifié dans l appel à MPI Recv et que *status soit la valeur obtenue. Introduction à la Programmation Parallèle: MPI 23 / 38
73 Primitives bloquantes La combinaison Exemple Envoie/reception bloquante Exemple Proc. 0 envoie un message à Proc. 1 char msg[20]; int myrank, tag = 99; MPI Status status; /* trouver son rang */ MPI Comm rank(mpi COMM WORLD, &myrank); /* envoyer ou recevoir le message */ if (myrank == 0) { strcpy( msg, "Hello there"); MPI Send(msg, strlen(msg)+1, MPI CHAR, 1, tag, MPI COMM WORLD); } else if (myrank == 1) { MPI Recv(msg, 20, MPI CHAR, 0, tag, MPI COMM WORLD, &status); } Introduction à la Programmation Parallèle: MPI 24 / 38
74 Primitives bloquantes La combinaison Exemple Envoie/reception bloquante On suppose qu il y a deux processus. Ils sont donc numérotés 0 et 1. L appel à MPI Comm rank rend le rang du processus parmi les deux. On différencie alors l action. Il est aussi possible d écrire un programme indépendant du nombre de processus. Il faut alors demander à MPI le nombre de processus et effectuer une conditionnelle qui compare le rang local à ce nombre. Introduction à la Programmation Parallèle: MPI 25 / 38
75 Primitives bloquantes La combinaison Sémantique des opérations bloquantes L envoi dit bloquant ne bloque pas (nécessairement) l émetteur jusqu à la réception du message. Ce terme spécifie le protocole local d interaction avec MPI et son buffer. Le transport du message est asynchrone, comme pour du courrier électronique. L envoi peut se terminer avant même que la réception débute. MPI Recv peut être lancé avant le lancement du MPI Send correspondant. Son appel se termine quand le buffer de réception contient les nouvelles valeurs. MPI Send peut être lancé avant ou après l appel du MPI Recv correspondant. Son appel se termine quand le message a été copié vers le réseau et quand le programme C peut réutiliser le buffer d envoi. Introduction à la Programmation Parallèle: MPI 26 / 38
76 Primitives bloquantes La combinaison Sémantique des opérations bloquantes L envoi dit bloquant ne bloque pas (nécessairement) l émetteur jusqu à la réception du message. Ce terme spécifie le protocole local d interaction avec MPI et son buffer. Le transport du message est asynchrone, comme pour du courrier électronique. L envoi peut se terminer avant même que la réception débute. MPI Recv peut être lancé avant le lancement du MPI Send correspondant. Son appel se termine quand le buffer de réception contient les nouvelles valeurs. MPI Send peut être lancé avant ou après l appel du MPI Recv correspondant. Son appel se termine quand le message a été copié vers le réseau et quand le programme C peut réutiliser le buffer d envoi. Introduction à la Programmation Parallèle: MPI 26 / 38
77 Primitives bloquantes La combinaison Sémantique des opérations bloquantes L envoi dit bloquant ne bloque pas (nécessairement) l émetteur jusqu à la réception du message. Ce terme spécifie le protocole local d interaction avec MPI et son buffer. Le transport du message est asynchrone, comme pour du courrier électronique. L envoi peut se terminer avant même que la réception débute. MPI Recv peut être lancé avant le lancement du MPI Send correspondant. Son appel se termine quand le buffer de réception contient les nouvelles valeurs. MPI Send peut être lancé avant ou après l appel du MPI Recv correspondant. Son appel se termine quand le message a été copié vers le réseau et quand le programme C peut réutiliser le buffer d envoi. Introduction à la Programmation Parallèle: MPI 26 / 38
78 Ordre d acheminement Primitives bloquantes La combinaison MPI garantit qu entre un même émetteur et une même destination, les messages sont transmis dans l ordre (logiquement comme un canal FIFO). Les opérations de réception pour un même émetteur sont traitées dans l ordre. Cependant 1. le réseau peut mélanger des messages de source/destination différentes et 2. un récepteur peut mélanger les sources desquelles il reçoit. Introduction à la Programmation Parallèle: MPI 27 / 38
79 Envoi et réception combinés Primitives bloquantes La combinaison On a souvent besoin de permuter les valeurs disponibles sur les processeurs. Chaque processeur doit alors envoyer et recevoir. Il existe un opération MPI SENDRECV qui combine les deux et dont l effet est équivalent à créer deux processus légers par processus: un pour l émission, l autre pour la réception. Cela simplifie la programmation et évite certaines conditions de blocage (possible par manque d espace dans les buffers). MPI SENDRECV exécute une envoi bloquant et une réception bloquante. Les deux doivent utiliser le même groupe de processus, mais doivent avoir des tag différents. Le buffer d envoi et le buffer de réception doivent être disjoints et peuvent avoir des longueurs et types différents (pourquoi?). Introduction à la Programmation Parallèle: MPI 28 / 38
80 Envoi et réception combinés Primitives bloquantes La combinaison La fonction int MPI Sendrecv( void *sendbuf, int sendcount, MPI Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI Datatype recvtype, int source, int recvtag, MPI Comm comm, MPI Status *status) Arguments Les arguments sont tous des paramètres d entrée sauf recvbuf et status : sendbuf adresse de début du buffer d envoi sendcount nombre de valeurs à envoyer sendtype type des valeurs d envoi dest processus de destination pour l envoi sendtag étiquette du message d envoi recvbuf adresse de début du buffer de réception recvcount nombre max. de valeurs à recevoir recvtype type des valeurs à recevoir source processus émetteur de la réception recvtag étiquette du message à recevoir comm groupe de processus status structure status comme pour MPI Recv Introduction à la Programmation Parallèle: MPI 29 / 38
81 Envoi et réception combinés Primitives bloquantes La combinaison La fonction int MPI Sendrecv( void *sendbuf, int sendcount, MPI Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI Datatype recvtype, int source, int recvtag, MPI Comm comm, MPI Status *status) Arguments Les arguments sont tous des paramètres d entrée sauf recvbuf et status : sendbuf adresse de début du buffer d envoi sendcount nombre de valeurs à envoyer sendtype type des valeurs d envoi dest processus de destination pour l envoi sendtag étiquette du message d envoi recvbuf adresse de début du buffer de réception recvcount nombre max. de valeurs à recevoir recvtype type des valeurs à recevoir source processus émetteur de la réception recvtag étiquette du message à recevoir comm groupe de processus status structure status comme pour MPI Recv Introduction à la Programmation Parallèle: MPI 29 / 38
82 Envoi et réception combinés Primitives bloquantes La combinaison Optimisation Certaines architectures permettent de poursuivre les calculs entre le lancement d une opération de communication et sa terminaison. MPI offre une version non-bloquante des opérations d envoi et réception des messages qui permet cela en vue d améliorer les performances (recouvrement calcul- communication). Fonctionnement 1 l émetteur place les données dans le buffer d envoi et déclenche la communication. Cet appel est non-bloquant et le processus est alors libre de travailler à autre chose. 2 plus tard l émetteur demande à MPI si le buffer a été vidé et ne reprend la main que lorsque c est la cas: appel de type bloquant. 3 pendant ce temps le récepteur lance la copie des données dans le buffer de réception et, plus tard, obtient un signal de fin de réception en ayant profité du temps intermédiaire. Introduction à la Programmation Parallèle: MPI 30 / 38
83 Envoi et réception combinés Primitives bloquantes La combinaison Optimisation Certaines architectures permettent de poursuivre les calculs entre le lancement d une opération de communication et sa terminaison. MPI offre une version non-bloquante des opérations d envoi et réception des messages qui permet cela en vue d améliorer les performances (recouvrement calcul- communication). Fonctionnement 1 l émetteur place les données dans le buffer d envoi et déclenche la communication. Cet appel est non-bloquant et le processus est alors libre de travailler à autre chose. 2 plus tard l émetteur demande à MPI si le buffer a été vidé et ne reprend la main que lorsque c est la cas: appel de type bloquant. 3 pendant ce temps le récepteur lance la copie des données dans le buffer de réception et, plus tard, obtient un signal de fin de réception en ayant profité du temps intermédiaire. Introduction à la Programmation Parallèle: MPI 30 / 38
84 Envoi et réception combinés Primitives bloquantes La combinaison Optimisation Certaines architectures permettent de poursuivre les calculs entre le lancement d une opération de communication et sa terminaison. MPI offre une version non-bloquante des opérations d envoi et réception des messages qui permet cela en vue d améliorer les performances (recouvrement calcul- communication). Fonctionnement 1 l émetteur place les données dans le buffer d envoi et déclenche la communication. Cet appel est non-bloquant et le processus est alors libre de travailler à autre chose. 2 plus tard l émetteur demande à MPI si le buffer a été vidé et ne reprend la main que lorsque c est la cas: appel de type bloquant. 3 pendant ce temps le récepteur lance la copie des données dans le buffer de réception et, plus tard, obtient un signal de fin de réception en ayant profité du temps intermédiaire. Introduction à la Programmation Parallèle: MPI 30 / 38
85 Envoi et réception combinés Primitives bloquantes La combinaison Optimisation Certaines architectures permettent de poursuivre les calculs entre le lancement d une opération de communication et sa terminaison. MPI offre une version non-bloquante des opérations d envoi et réception des messages qui permet cela en vue d améliorer les performances (recouvrement calcul- communication). Fonctionnement 1 l émetteur place les données dans le buffer d envoi et déclenche la communication. Cet appel est non-bloquant et le processus est alors libre de travailler à autre chose. 2 plus tard l émetteur demande à MPI si le buffer a été vidé et ne reprend la main que lorsque c est la cas: appel de type bloquant. 3 pendant ce temps le récepteur lance la copie des données dans le buffer de réception et, plus tard, obtient un signal de fin de réception en ayant profité du temps intermédiaire. Introduction à la Programmation Parallèle: MPI 30 / 38
86 Envoi et réception combinés Primitives bloquantes La combinaison Optimisation Certaines architectures permettent de poursuivre les calculs entre le lancement d une opération de communication et sa terminaison. MPI offre une version non-bloquante des opérations d envoi et réception des messages qui permet cela en vue d améliorer les performances (recouvrement calcul- communication). Fonctionnement 1 l émetteur place les données dans le buffer d envoi et déclenche la communication. Cet appel est non-bloquant et le processus est alors libre de travailler à autre chose. 2 plus tard l émetteur demande à MPI si le buffer a été vidé et ne reprend la main que lorsque c est la cas: appel de type bloquant. 3 pendant ce temps le récepteur lance la copie des données dans le buffer de réception et, plus tard, obtient un signal de fin de réception en ayant profité du temps intermédiaire. Introduction à la Programmation Parallèle: MPI 30 / 38
87 Quelques primitives 1 Modèle de programmation Quelques primitives Introduction à la Programmation Parallèle: MPI 31 / 38
88 Introduction Modèle de programmation Quelques primitives Qu est-ce? Une communication collective est un schéma de communication (un squelette) nécessitant TOUT les processeurs. Certains algorithmes de base comme la diffusion et la réduction de valeurs sont pré-définis par des fonctions MPI. C est-à-dire? Ces opérations ont des définitions cohérentes avec celles de l envoi/réception de messages avec les différences : 1 La taille du message doit correspondre exactement à la taille du buffer de réception; 2 Toutes ces opérations sont bloquantes. 3 Il n y a pas d argument tag. Introduction à la Programmation Parallèle: MPI 32 / 38
89 Introduction Modèle de programmation Quelques primitives Qu est-ce? Une communication collective est un schéma de communication (un squelette) nécessitant TOUT les processeurs. Certains algorithmes de base comme la diffusion et la réduction de valeurs sont pré-définis par des fonctions MPI. C est-à-dire? Ces opérations ont des définitions cohérentes avec celles de l envoi/réception de messages avec les différences : 1 La taille du message doit correspondre exactement à la taille du buffer de réception; 2 Toutes ces opérations sont bloquantes. 3 Il n y a pas d argument tag. Introduction à la Programmation Parallèle: MPI 32 / 38
90 Introduction Modèle de programmation Quelques primitives Qu est-ce? Une communication collective est un schéma de communication (un squelette) nécessitant TOUT les processeurs. Certains algorithmes de base comme la diffusion et la réduction de valeurs sont pré-définis par des fonctions MPI. C est-à-dire? Ces opérations ont des définitions cohérentes avec celles de l envoi/réception de messages avec les différences : 1 La taille du message doit correspondre exactement à la taille du buffer de réception; 2 Toutes ces opérations sont bloquantes. 3 Il n y a pas d argument tag. Introduction à la Programmation Parallèle: MPI 32 / 38
91 Introduction Modèle de programmation Quelques primitives Qu est-ce? Une communication collective est un schéma de communication (un squelette) nécessitant TOUT les processeurs. Certains algorithmes de base comme la diffusion et la réduction de valeurs sont pré-définis par des fonctions MPI. C est-à-dire? Ces opérations ont des définitions cohérentes avec celles de l envoi/réception de messages avec les différences : 1 La taille du message doit correspondre exactement à la taille du buffer de réception; 2 Toutes ces opérations sont bloquantes. 3 Il n y a pas d argument tag. Introduction à la Programmation Parallèle: MPI 32 / 38
92 Introduction Modèle de programmation Quelques primitives Qu est-ce? Une communication collective est un schéma de communication (un squelette) nécessitant TOUT les processeurs. Certains algorithmes de base comme la diffusion et la réduction de valeurs sont pré-définis par des fonctions MPI. C est-à-dire? Ces opérations ont des définitions cohérentes avec celles de l envoi/réception de messages avec les différences : 1 La taille du message doit correspondre exactement à la taille du buffer de réception; 2 Toutes ces opérations sont bloquantes. 3 Il n y a pas d argument tag. Introduction à la Programmation Parallèle: MPI 32 / 38
93 Barrière de synchronisation Quelques primitives Le problème Habituellement, le retour d une fonction d envoi bloquante ne signifie pas que le correspondant a terminé (mais simplement que le buffer d envoi est libéré). On ne peut donc pas garantir la progression globale des processus entre les phases successives de l algorithme. La solution Une manière de le faire est de les synchroniser tous par une barrière de synchronisation: un appel collectif dont aucun processus ne repart avant que tous aient appelé la même fonction (modèle BSP) : int MPI Barrier(MPI Comm comm) Introduction à la Programmation Parallèle: MPI 33 / 38
94 Barrière de synchronisation Quelques primitives Le problème Habituellement, le retour d une fonction d envoi bloquante ne signifie pas que le correspondant a terminé (mais simplement que le buffer d envoi est libéré). On ne peut donc pas garantir la progression globale des processus entre les phases successives de l algorithme. La solution Une manière de le faire est de les synchroniser tous par une barrière de synchronisation: un appel collectif dont aucun processus ne repart avant que tous aient appelé la même fonction (modèle BSP) : int MPI Barrier(MPI Comm comm) Introduction à la Programmation Parallèle: MPI 33 / 38
95 Diffusion Modèle de programmation Quelques primitives Type et arguments int MPI Bcast( void* buffer, int count, MPI Datatype datatype, int root, MPI Comm comm ) Cette fonction émet un message du processu de rang root vers tous les autres du groupe comm. La valeur de root doit être la même partout. Le contenu du buffer d envoi du processus émetteur est copié sur les autres processus. Les arguments sont tous d entrée sauf buffer qui est IN-OUT. Example Diffuser un tableau array de 100 entiers à partir du processus 0. MPI Comm comm; int array[100]; int root=0;... MPI Bcast(array, 100, MPI INT, root, comm) Introduction à la Programmation Parallèle: MPI 34 / 38
96 Diffusion Modèle de programmation Quelques primitives Type et arguments int MPI Bcast( void* buffer, int count, MPI Datatype datatype, int root, MPI Comm comm ) Cette fonction émet un message du processu de rang root vers tous les autres du groupe comm. La valeur de root doit être la même partout. Le contenu du buffer d envoi du processus émetteur est copié sur les autres processus. Les arguments sont tous d entrée sauf buffer qui est IN-OUT. Example Diffuser un tableau array de 100 entiers à partir du processus 0. MPI Comm comm; int array[100]; int root=0;... MPI Bcast(array, 100, MPI INT, root, comm) Introduction à la Programmation Parallèle: MPI 34 / 38
97 Collecte Modèle de programmation Quelques primitives Type et arguments En sens inverse, on peut demander à chaque processus d envoyer une valeur vers une même cible : int MPI Gather(void* sendbuf, int sendcount, MPI Datatype sendtype, void* recvbuf, int recvcount, MPI Datatype recvtype, int root, MPI Comm comm) Seul recvbuf est un argument de sortie. Chaque processus (dont root lui-même) envoie le contenu de son buffer d envoi vers le processus root qui les trie en ordre du rang de l émetteur. Le buffer de réception n est pas utilisé par la fonction sur les processus autres que root et recvcount est le nombre de valeurs à recevoir de chaque correspondant. Example Chaque processus envoie 100 entiers au processus 0. MPI Comm comm; int gsize, sendarray[100]; int *rbuf;... MPI Comm Size( comm, &gsize); rbuf = (int *)malloc(gsize*100*sizeof(int)); MPI Gather(sendarray,100,MPI INT,rbuf,100,MPI INT,0,comm); Introduction à la Programmation Parallèle: MPI 35 / 38
98 Collecte Modèle de programmation Quelques primitives Type et arguments En sens inverse, on peut demander à chaque processus d envoyer une valeur vers une même cible : int MPI Gather(void* sendbuf, int sendcount, MPI Datatype sendtype, void* recvbuf, int recvcount, MPI Datatype recvtype, int root, MPI Comm comm) Seul recvbuf est un argument de sortie. Chaque processus (dont root lui-même) envoie le contenu de son buffer d envoi vers le processus root qui les trie en ordre du rang de l émetteur. Le buffer de réception n est pas utilisé par la fonction sur les processus autres que root et recvcount est le nombre de valeurs à recevoir de chaque correspondant. Example Chaque processus envoie 100 entiers au processus 0. MPI Comm comm; int gsize, sendarray[100]; int *rbuf;... MPI Comm Size( comm, &gsize); rbuf = (int *)malloc(gsize*100*sizeof(int)); MPI Gather(sendarray,100,MPI INT,rbuf,100,MPI INT,0,comm); Introduction à la Programmation Parallèle: MPI 35 / 38
99 Calcul parallèle des préfixes Quelques primitives Qu est-ce? L algorithme de calcul des préfixes est pré-programmé sous forme d une opération collective MPI. Chaque processus possède initialement une valeur, le tout constitue un tableau réparti. Le résultat est le tableau des sommes partielles réparti dans le même ordre que l entrée. Types et arguments? int MPI Scan(void* sendbuf, void* recvbuf, int count, MPI datatype datatype, MPI Op op, MPI Comm comm) Chaque processus émet et reçoit, il y a donc deux buffers. Le buffer de réception du processus i contiendra la réduction des valeurs placeées dans sendbuf par les processus 0, 1,..., i. Introduction à la Programmation Parallèle: MPI 36 / 38
100 Calcul parallèle des préfixes Quelques primitives Qu est-ce? L algorithme de calcul des préfixes est pré-programmé sous forme d une opération collective MPI. Chaque processus possède initialement une valeur, le tout constitue un tableau réparti. Le résultat est le tableau des sommes partielles réparti dans le même ordre que l entrée. Types et arguments? int MPI Scan(void* sendbuf, void* recvbuf, int count, MPI datatype datatype, MPI Op op, MPI Comm comm) Chaque processus émet et reçoit, il y a donc deux buffers. Le buffer de réception du processus i contiendra la réduction des valeurs placeées dans sendbuf par les processus 0, 1,..., i. Introduction à la Programmation Parallèle: MPI 36 / 38
101 Calcul parallèle des préfixes Quelques primitives Opérateurs prédéfinies MPI MAX maximum MPI MIN minimum MPI SUM somme MPI PROD produit MPI LAND et-logique MPI LOR ou-logique MPI BAND et bit-à-bit MPI BOR ou bit-à-bit MPI LXOR ou exclusif logique MPI BXOR ou exclusif bit-à-bit MPI MAXLOC valeur maximale et son lieu MPI MINLOC valeur minimale et son lieu Introduction à la Programmation Parallèle: MPI 37 / 38
102 A la semaine prochaine
Plan de la formation. Calcul parallèle avec MPI. Pourquoi paralléliser? Parallélisation. Présentation, environnement MPI. Communications point à point
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,
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
Grid Computing. Mihaela JUGANARU-MATHIEU [email protected] 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
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
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,
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
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
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
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
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
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
Cours Programmation Système
Cours Programmation Système Filière SMI Semestre S6 El Mostafa DAOUDI Département de Mathématiques et d Informatique, Faculté des Sciences Université Mohammed Premier Oujda [email protected] Février
IRL : Simulation distribuée pour les systèmes embarqués
IRL : Simulation distribuée pour les systèmes embarqués Yassine El Khadiri, 2 ème année Ensimag, Grenoble INP Matthieu Moy, Verimag Denis Becker, Verimag 19 mai 2015 1 Table des matières 1 MPI et la sérialisation
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
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
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
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
Logiciel Libre Cours 3 Fondements: Génie Logiciel
Logiciel Libre Cours 3 Fondements: Génie Logiciel Stefano Zacchiroli [email protected] Laboratoire PPS, Université Paris Diderot 2013 2014 URL http://upsilon.cc/zack/teaching/1314/freesoftware/
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
M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013
Rendu Temps Réel - OpenGL 4 et compute shaders December 18, 2013 résumé des épisodes précédents... création des objets opengl, organisation des données, configuration du pipeline, draw,... opengl 4.3 :
4. Outils pour la synchronisation F. Boyer, Laboratoire Lig [email protected]
4. Outils pour la synchronisation F. Boyer, Laboratoire Lig [email protected] Le problème Insuffisance des solutions de base (verrous) Les solutions de plus haut niveau Les Sémaphores Les Moniteurs
1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)
1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d
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
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
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
Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java
Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique
INFO-F-404 : Techniques avancées de systèmes d exploitation
Nikita Veshchikov e-mail : [email protected] téléphone : 02/650.58.56 bureau : 2N8.213 URL : http://student.ulb.ac.be/~nveshchi/ INFO-F-404 : Techniques avancées de systèmes d exploitation Table
É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
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 Septembre 2009 Enrica DUCHI LIAFA, Paris 7 [email protected] LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le
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
Chapitre 4 : Exclusion mutuelle
Chapitre 4 : Exclusion mutuelle Pierre Gançarski Juillet 2004 Ce support de cours comporte un certain nombre d erreurs : je décline toute responsabilité quant à leurs conséquences sur le déroulement des
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
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
Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7
Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin
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
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
Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)
Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée) Propriétés Description Intitulé long Formation concernée Matière Présentation Développement d un logiciel de messagerie
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
Programmation système de commandes en C
Programmation système de commandes en C Cours de Programmation système Tuyêt Trâm DANG NGOC Université de Cergy-Pontoise 2012 2013 Tuyêt Trâm DANG NGOC Programmation système de commandes
É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
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
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/
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
Une bibliothèque de templates pour CUDA
Une bibliothèque de templates pour CUDA Sylvain Collange, Marc Daumas et David Defour Montpellier, 16 octobre 2008 Types de parallèlisme de données Données indépendantes n threads pour n jeux de données
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
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
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
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
Cours d Algorithmique et de Langage C 2005 - v 3.0
Cours d Algorithmique et de Langage C 2005 - v 3.0 Bob CORDEAU [email protected] Mesures Physiques IUT d Orsay 15 mai 2006 Avant-propos Avant-propos Ce cours en libre accès repose sur trois partis pris
Remote Method Invocation Les classes implémentant Serializable
Parallélisme Architecture Eric Goubault Commissariat à l Energie Atomique Saclay Classe qui implémente la méthode distante (serveur): - dont les méthodes renvoient un objet serializable - ou plus généralement
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
Introduction à la programmation concurrente
Introduction à la programmation concurrente Moniteurs Yann Thoma Reconfigurable and Embedded Digital Systems Institute Haute Ecole d Ingénierie et de Gestion du Canton de Vaud This work is licensed under
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
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.............................
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
GESTION DES FICHIERS C/UNIX
Licence IG Page 1 sur 6 GESTION DES FICHIERS C/UNIX Introduction Deux modes d appel - Par la bibliothèque standard C (appel de haut niveau) - Par appels système (bas niveau) Nécessite les includes suivant
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
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
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
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
Structurer ses données : les tableaux. Introduction à la programmation
Structurer ses données : les tableaux Introduction à la programmation Plan du document Introduction Introduire la notion de type Types primitifs Types composés Tableaux de type primitif Page 2 Notion de
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
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
Les chaînes de caractères
Les chaînes de caractères Dans un programme informatique, les chaînes de caractères servent à stocker les informations non numériques comme par exemple une liste de nom de personne ou des adresses. Il
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
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
Algorithmique des Systèmes Répartis Protocoles de Communications
Algorithmique des Systèmes Répartis Protocoles de Communications Master Informatique Dominique Méry Université de Lorraine 1 er avril 2014 1 / 70 Plan Communications entre processus Observation et modélisation
Initiation. àl algorithmique et à la programmation. en C
Initiation àl algorithmique et à la programmation en C Initiation àl algorithmique et à la programmation en C Cours avec 129 exercices corrigés Illustration de couverture : alwyncooper - istock.com Dunod,
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
OS Réseaux et Programmation Système - C5
OS Réseaux et Programmation Système - C5 Rabie Ben Atitallah [email protected] RPC - XDR Rappel RPC: Remote Procedure Call Besoin d un environnement de haut niveau pour le développement
Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation
Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des
Chapitre I Notions de base et outils de travail
Chapitre I Notions de base et outils de travail Objectifs Connaître les principes fondateurs et l historique du langage Java S informer des principales caractéristiques du langage Java Connaître l environnement
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
NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007
NFP 121 Java et les Threads Présentation : Thierry Escalarasse Mai 2007 Plan du cour Présentation de la notion de Threads La classe Thread L interface Runnable Les états d un thread La Synchronisation
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
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
Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie
Chapitre I : Les bases du C++ Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie du logiciel, et ce depuis
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
Network musical jammin
Network musical jammin Projet PC2R - 2015 Pour ce projet, nous allons réaliser une application permettant d effectuer des jams sessions en temps-réel entre des musiciens répartis à travers le monde. Le
Introduction aux Systèmes et aux Réseaux
Introduction aux Systèmes et aux Réseaux Cours 5 Processus D après un cours de Julien Forget (univ Lille1) Laure Gonnord http://laure.gonnord.org/pro/teaching/ [email protected] Master CCI -
STAGE IREM 0- Premiers pas en Python
Université de Bordeaux 16-18 Février 2014/2015 STAGE IREM 0- Premiers pas en Python IREM de Bordeaux Affectation et expressions Le langage python permet tout d abord de faire des calculs. On peut évaluer
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
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
Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs
Utilisation des classes de PourCGI par Michel Michaud, version 2002-11-23 Les fichiers PourCGI.h et PourCGI.cpp rendent disponibles deux classes et une fonction libre qui permettent de faire facilement
Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test
Grandes lignes Analyseur Statique de logiciels Temps RÉel Embarqués École Polytechnique École Normale Supérieure Mercredi 18 juillet 2005 1 Présentation d 2 Cadre théorique de l interprétation abstraite
Bases de programmation. Cours 5. Structurer les données
Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et
Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles [email protected]
Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles [email protected] Table des matières 1 Les bases 3 2 Variables et constantes 5 3 Quelques fonctions indispensables
Conventions d écriture et outils de mise au point
Logiciel de base Première année par alternance Responsable : Christophe Rippert [email protected] Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette
Langage C. Patrick Corde. [email protected]. 22 juin 2015. Patrick Corde ( [email protected] ) Langage C 22 juin 2015 1 / 289
Langage C Patrick Corde [email protected] 22 juin 2015 Patrick Corde ( [email protected] ) Langage C 22 juin 2015 1 / 289 Table des matières I 1 Présentation du langage C Historique Intérêts
École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.
École Polytechnique de Montréal Département de Génie Informatique et Génie Logiciel Cours INF2610 Contrôle périodique Automne 2013 Date : 11 octobre 2013 de 18h à 20h Professeur : Boucheneb Hanifa Documentation
La couche réseau Le protocole X.25
La couche réseau Le protocole X.25 Michel Gardie GET/INT/LOR/RIP 20 décembre 2004 Réseau / X.25 Informations La version de ce document à la date d impression et de révision est temporaire. Quelkes feautes
Problèmes liés à la concurrence
ENS Cachan Problématique Difficile de gérer la concurrence : Pas toujours facile d avoir des fonctions réentrantes. Risque de race condition : ex : x :=x+1 x :=x+1 On voudrait des blocs d instructions
Analyse de sécurité de logiciels système par typage statique
Contexte Modélisation Expérimentation Conclusion Analyse de sécurité de logiciels système par typage statique Application au noyau Linux Étienne Millon UPMC/LIP6 Airbus Group Innovations Sous la direction
Quelques éléments de compilation en C et makefiles
Quelques éléments de compilation en C et makefiles Guillaume Feuillade 1 Compiler un programme C Le principe de la compilation consiste à passer d un ensemble de fichiers de code à un programme exécutable
Plan. École Supérieure d Économie Électronique. Plan. Chap 9: Composants et systèmes de sécurité. Rhouma Rhouma. 21 Juillet 2014
École Supérieure d Économie Électronique Chap 9: Composants et systèmes de sécurité 1 Rhouma Rhouma 21 Juillet 2014 2 tagging et port trunk Création des via les commandes sur switch cisco 1 / 48 2 / 48
Messagerie asynchrone et Services Web
Article Messagerie asynchrone et Services Web 1 / 10 Messagerie asynchrone et Services Web SOAP, WSDL SONT DES STANDARDS EMERGEANT DES SERVICES WEB, LES IMPLEMENTATIONS DE CEUX-CI SONT ENCORE EN COURS
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
Architecture des ordinateurs
Architecture des ordinateurs Cours 4 5 novembre 2012 Archi 1/22 Micro-architecture Archi 2/22 Intro Comment assembler les différents circuits vus dans les cours précédents pour fabriquer un processeur?
