MPI : Un outil pour le multi-coeur?



Documents pareils
Introduction à la Programmation Parallèle: MPI

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

Introduction to Parallel Programming with MPI

Télécom Nancy Année

Programmation parallèle et distribuée

Rapport 2014 et demande pour Portage de Méso-NH sur Machines Massivement Parallèles du GENCI Projet 2015 : GENCI GEN1605 & CALMIP-P0121

Systèmes parallèles et distribués

PVM 1 PVM. Parallel Virtual Machine

Rapport d activité. Mathieu Souchaud Juin 2007

Segmentation d'images à l'aide d'agents sociaux : applications GPU

Informatique industrielle A Systèmes temps-réel J.F.Peyre. Partie I : Introduction

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

Les clusters Linux. 4 août 2004 Benoît des Ligneris, Ph. D. benoit.des.ligneris@revolutionlinux.com. white-paper-cluster_fr.sxw, Version 74 Page 1

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

Programmation parallèle pour le calcul scientifique

Initiation au HPC - Généralités

Réalisation d'un seeder BitTorrent en CPC Stage de TRE sous la direction de J. Chroboczek et G. Kerneis

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Communications performantes par passage de message entre machines virtuelles co-hébergées

ParallelKnoppix. Majid Hameed. Copyright 2005 Majid Hameed. Copyright 2005 Gauthier Savart. Copyright 2005 Joëlle Cornavin

1. Structure d'un programme FORTRAN 95

Cours de Génie Logiciel

MOTEUR DE WORKFLOW Mise en oeuvre d'openwfe Version septembre 2006

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

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

IRL : Simulation distribuée pour les systèmes embarqués

Annexe : La Programmation Informatique

Cours Informatique Master STEP

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

Éléments d'architecture des ordinateurs

Rapport de stage de 2ème année. Filière Télécommunication

Recherche dans un tableau

Cours Langage C/C++ Programmation modulaire

Introduction au calcul parallèle avec OpenCL

Infrastructures Parallèles de Calcul

INFO-F-404 : Techniques avancées de systèmes d exploitation

Windows Server Chapitre 1: Découvrir Windows Server 2008

Performances de la programmation multi-thread

Cloud Computing : Utiliser Stratos comme PaaS privé sur un cloud Eucalyptus

Grid Computing. Mihaela JUGANARU-MATHIEU École Nationale Supérieure des Mines de St Etienne

Les environnements de calcul distribué

CH.3 SYSTÈMES D'EXPLOITATION

DÉVELOPPEMENT INFONUAGIQUE - meilleures pratiques

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

<Insert Picture Here> Solaris pour la base de donnés Oracle

CAHIER DES CHARGES D IMPLANTATION

L informatique en BCPST

Stages ISOFT : UNE SOCIETE INNOVANTE. Contact : Mme Lapedra, stage@isoft.fr

Génération de code binaire pour application multimedia : une approche au vol

Quantification d incertitude et Tendances en HPC

G. Méthodes de déploiement alternatives

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

Application 1- VBA : Test de comportements d'investissements

Groupe calcul parallèle

Conception de circuits numériques et architecture des ordinateurs

CAHIER DE S CHARGE S Remote Workload Manager

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

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

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

Projet de Veille Technologique

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

TP2 - Conguration réseau et commandes utiles. 1 Généralités. 2 Conguration de la machine. 2.1 Commande hostname

Une bibliothèque de templates pour CUDA

Gestion de clusters de calcul avec Rocks

DA MOTA Anthony - Comparaison de technologies : PhoneGap VS Cordova

INF6500 : Structures des ordinateurs. Sylvain Martel - INF6500 1

PFE Télécommunications. Pré-rapport à l'issue des 6 premières semaines de stage. Page 1 sur 5 1 %

Systèmes répartis. Fabrice Rossi Université Paris-IX Dauphine. Systèmes répartis p.1/49

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Migration dynamique d applications réparties virtualisées dans les fédérations d infrastructures distribuées

1 JBoss Entreprise Middleware

I. Introduction aux fonctions : les fonctions standards

Chapitre 2 : Abstraction et Virtualisation

Contrôle Non Destructif : Implantation d'algorithmes sur GPU et multi-coeurs. Gilles Rougeron CEA/LIST Département Imagerie Simulation et Contrôle

Portage du modèle climatique de surface continentale de l'ipsl. sur une grappe de serveurs XD1

Initiation à la programmation en Python

Fiche de l'awt Intégration des applications

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Compte-rendu de projet de Système de gestion de base de données

Raja Bases de données distribuées A Lire - Tutoriel

la virtualisation pour quoi faire?

Windows 8 Installation et configuration

Cours Programmation Système

L'évolution de VISUAL MESSAGE CENTER Architecture et intégration

SYSTÈME DE GESTION DE FICHIERS

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Parallélisme et Répartition

La continuité de service

FinImportExport Documentation Utilisateur Gestion d'environnement dans Fininfo Market

DIRAC : cadre et composants pour créer des systèmes de calcul distribués

Introduction à CUDA.

Eléments d architecture des machines parallèles et distribuées

Systèmes distribués et virtualisation de ressources

Le système GNU/Linux IUP NTIC /11/05

Le Framework.Net. Introduction. Pourquoi.Net?

Ricco Rakotomalala R.R. Université Lyon 2

Armelin ASIMANE. Services RDS. de Windows Server 2012 R2. Remote Desktop Services : Installation et administration

Propagation sur réseau statique et dynamique

Transcription:

MPI : Un outil pour le multi-coeur? Romaric David / Loïc Gouarin Université de Strasbourg / Laboratoire de mathématiques d'orsay 16 décembre 2010

Plan 1 Introduction 2 Principe de MPI 3 Les bases de MPI 4 Les moins-bases de MPI 5 Et le multi-coeur? 6 Conclusion

Introduction Plan 1 Introduction 2 Principe de MPI 3 Les bases de MPI 4 Les moins-bases de MPI 5 Et le multi-coeur? 6 Conclusion

Introduction Comment paralléliser son code? GPU1 GPU2 GPU1 GPU2 Mémoire core1 core2 core3 core4 Mémoire core1 core2 core3 core4 réseau

Introduction Quels sont les outils pour paralléliser son code? 1 Processus / Posix Threads 2 Standard OpenMP 3 Libdispatch 4 GPU CUDA OpenCL HmPP 5 Standard MPI MPI-1 MPI-2 MPI-3 (dans un futur proche)

Principe de MPI Plan 1 Introduction 2 Principe de MPI 3 Les bases de MPI 4 Les moins-bases de MPI 5 Et le multi-coeur? 6 Conclusion

Principe de MPI MPI : Message Passing Interface conçue en 1993 (MPI-1), 1995 (MPI-2), en cours (MPI-3) norme dénissant une bibliothèque de fonctions, utilisable avec les langages C et Fortran permet d'exploiter des ordinateurs multiprocesseurs et des réseaux d'ordinateurs pour exécuter des applications parallèles communiquant explicitement par passage de messages.

Principe de MPI MPI : Message Passing Interface Fonctionnalités de MPI-1 MPI-1 est conçue comme un ensemble de fonctions de nom standardisé permettant de travailler sur des processus lancés en parallèle. nombre de processus, numéro du processus : de 0 à...... ; communications point à point (1 source, 1 destinataire) communications collectives (au moins 1 source, au moins 1 destinataire) communicateurs (des groupes de processus), types dérivés (à construire par le programmeur), topologies (pour mieux repérer les processus).

Principe de MPI MPI : Message Passing Interface Fonctionnalités de MPI-2 gestion dynamique des processus : création, destruction I/O parallèles interfaçage avec Fortran95 et C++ communications de mémoire à mémoire (remote-dma)...

Principe de MPI MPI : Message Passing Interface Fonctionnalités de MPI-3 Source : cours MPI de l'idris, version 2.28, Octobre 2010 prise en compte des architectures multi-coeurs communications collectives non bloquantes révision des copies de mémoire à mémoire tolérance aux pannes bindings Fortran 2003 et 2008

Principe de MPI MPI : Message Passing Interface Programme séquentiel monprogramme.c Mémoire core exécution int main (int argc, char **argv) { a = malloc(a_lot*sizeof(double)); }

Principe de MPI SPMD : Single Program Multiple Data Mémoire core int main (int argc, char **argv) { a = malloc(a_lot*sizeof(double)); } monprogramme.c réseau Mémoire core

Principe de MPI Implémentations de MPI MPI ne dénit que le nom des fonctions, en aucun cas l'implémentation. Pour cette raison, il existe un grand nombre d'implémentations, qui ne sont compatibles entre elles qu'au niveau source. MPICH2 : http ://www-unix.mcs.anl.gov/mpi/mpich2/, l'implémentation portée par le labo d'un des principaux acteurs de la norme, William Gropp Open MPI : http ://www.open-mpi.org/, un MPI modulaire quant aux réseaux de communication utilisés Intel MPI, HP MPI, Bull MPI, IBM MPI MPJ Express, pour Java Diérents bindings python dont mpi4py

Les bases de MPI Communication point à point Plan 1 Introduction 2 Principe de MPI 3 Les bases de MPI 4 Les moins-bases de MPI 5 Et le multi-coeur? 6 Conclusion

Les bases de MPI Communication point à point Communication point à point bloquante I Une communication point à point met en jeu 2 processus, repérés par leur numéro. Elle est la résultante de 2 actions : Déroulement d'une communication Un processus fait appel à MPI_Send, indique type et taille des données, ainsi que le numéro (rang) du processus destinataire Le processus dont le rang est indiqué par le processus émetteur fait appel à MPI_Recv, avec type et taille des données identiques. Ce processus indique le rang du processeur émetteur La mise en correspondance de ces deux opérations permet au message d'être livré à son destinataire. Par défaut, les

Les bases de MPI Communication point à point Communication point à point bloquante II communucations sont bloquantes : le programme ne peut sortir de l'appel à MPI_Send / MPI_Recv qu'après complétion de l'opération. Si l'on se trompe, cela peut facilement faire bloquer un programme.

Les bases de MPI Communication point à point Communication point à point bloquante Exemple 0 7 1 valeur = 1000 6 2 5 4 3

Les bases de MPI Communication point à point Code Fortran correspondant program point_a_point implicit none include 'mpif.h' integer, dimension(mpi_status_size) :: statut integer, parameter :: etiquette=100 integer :: rang,valeur,code call MPI_INIT(code) call MPI_COMM_RANK(MPI_COMM_WORLD,rang,code) if (rang == 1) then valeur=1000 call MPI_SEND(valeur,1,MPI_INTEGER,5,etiquette,MPI_COMM_WORLD,code) elseif (rang == 5) then call MPI_RECV(valeur,1,MPI_INTEGER,1,etiquette,MPI_COMM_WORLD, statut,code) print *,'Moi, processus 5, j''ai reçu ',valeur,' du processus 1.' end if call MPI_FINALIZE(code)

Les bases de MPI Communication point à point Envoi d'un tableau program table_point_a_point... real *8, dimensions=(100,200) :: demoarray call MPI_INIT(code) call MPI_COMM_RANK(MPI_COMM_WORLD,rang,code) if (rang == 1) then! Read demo array from file call MPI_SEND (demoarray,20000,mpi_double,5,...) elseif (rang == 5) then call MPI_RECV(demoarray,20000,MPI_DOUBLE,1,etiquette, MPI_COMM_WORLD,statut,code) print *,'Moi, processus 5, j''ai reçu un tableau du processus 1.' end if call MPI_FINALIZE(code) end program table_point_a_point

Attention : il est évident que l'avancement de la communication en arrière-plan consommera des RD/LG ressources. MPI : Un Sous outil pour OpenMPI, le multi-coeur il? existe Les bases de MPI Communication point à point Communication point à point non bloquante Une communcation non bloquante permet au programme de continuer son exécution pendant que le transfert des données se réalise en arrière-plan. Étapes d'une communication non-bloquante Initiation de la communication. En retour, on obtient une référence à cette communication Exécution de routines de calcul a Plus tard, attente sur la référence à la communication pour pouvoir relacher la référence à la communication a. Attention, ces routines doivent pas modier les données potentiellement en cours d'envoi

Les bases de MPI Communication point à point Communication point à point non bloquante Exemple de code program point_a_point_nb... integer real *8, dimensions=(100,200)... :: rang,valeur,code,requete :: demoarray if (rang == 1) then! Read demo array from file call MPI_ISEND (demoarray,20000,...,requete,code)! Compute on everything but demoarray, may take a long time call MPI_WAIT(requete,status,code) elseif (rang == 5) then call MPI_RECV(demoarray,20000,MPI_DOUBLE,1,etiquette,MPI_COMM_WORLD, statut,code) print *,'Moi, processus 5, j''ai reçu un tableau du processus 1.' end if... Un message envoyé en non-bloquant RD/LG peut êtrempi reçu : Un enoutil mode pourbloquant. le multi-coeur?

Les moins-bases de MPI Communication collective Plan 1 Introduction 2 Principe de MPI 3 Les bases de MPI 4 Les moins-bases de MPI 5 Et le multi-coeur? 6 Conclusion

Les moins-bases de MPI Communication collective Synchronisation globale Une communication collective est une communication mettant en jeu tous les processus. MPI_Barrier()

Les moins-bases de MPI Communication collective Diusion générale Le but est de diuser la même information à tous, depuis un processus appelé root. 0 1 2 A 3 0 A 1 A 2 A 3 A

Les moins-bases de MPI Communication collective Communication dispersive Le but est de répartir en une instruction un gros ensemble de données en plusieurs petits ensembles. On l'utilise pour distribuer des morceaux de tableaux. MPI_Scatter(buer_to_send, buer_to_receive, size_of_each_block,type, root) 0 1 0 A 1 1 A 2 2 A 1 A 2 A 3 A 4 3 2 A 3 3 A 4

Les moins-bases de MPI Communication collective Communication dispersive Exemple Fortran program scatter.. integer, parameter:: nb_valeurs=128 integer :: nb_procs,rang,longueur_tranche,i,code real, allocatable, dimension(:) :: valeurs,donnees call MPI_INIT (code)... longueur_tranche=nb_valeurs/nb_procs allocate(donnees(longueur_tranche)) if (rang == 2) then allocate(valeurs(nb_valeurs)) valeurs(:)=(/(1000.+i,i=1,nb_valeurs)/) end if call MPI_SCATTER (valeurs,longueur_tranche,mpi_real, donnees,longueur_tranche, MPI_REAL,2,... ) call MPI_FINALIZE (code)

Les moins-bases de MPI Communication collective Rassembler Le rassemblement est l'opération inverse de la dispersion : Tous les processus impliqués disposent d'un morceau de tableau Un d'entre eux va recoller les morceaux 0 A 1 1 A 2 0 1 2 A 3 3 A 4 2 A 1 A 2 A 3 A 4 3

Les moins-bases de MPI Communication collective Tout rassembler Les besoins courants, comme l'enchaînement d'un rassmblement suivi d'une rediusion à tous (Gather + Bcast) sont fournis par la norme : allgather 0 A 1 0 A 1 A 2 A 3 A 4 1 A 2 1 A 1 A 2 A 3 A 4 2 A 3 2 A 1 A 2 A 3 A 4 3 A 4 3 A 1 A 2 A 3 A 4

Les moins-bases de MPI Communication collective Echanges croisés Lors d'un commérage (alltoall), chaque processus procède à une communication dispersive de ses données. Le volume de communications est en conséquence (en fonction du carré du nombre de processus). 0 A 1 A 2 A 3 A 4 0 A 1 B 1 C 1 D 1 1 B 1 B 2 B 3 B 4 1 A 2 B 2 C 2 D 2 2 C 1 C 2 C 3 C 4 2 A 3 B 3 C 3 D 3 3 D 1 D 2 D 3 D 4 3 A 4 B 4 C 4 D 4

Les moins-bases de MPI Communication collective Réduction La réduction un mode de communication où l'échange des données s'accompagne d'opérations sur celles-ci. Les opérations doivent être commutatives et associatives (traduire eecutées dans un ordre quelconque). Par défaut, les opérations suivantes sont dénies : MPI_SUM : somme des éléments MPI_PROD : produit des éléments MPI_MAX : recherche du maximum MPI_MIN : recherche du minimum MPI_MAXLOC : recherche de l'indice du maximum MPI_MINLOC : recherche de l'indice du minimum...

Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? Plan 1 Introduction 2 Principe de MPI 3 Les bases de MPI 4 Les moins-bases de MPI 5 Et le multi-coeur? 6 Conclusion

Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? Contexte d'utilisation de MPI I Petit rappel... MPI est utilisé pour exécuter un ensemble de processus sur des ordinateurs multiprocesseurs et des réseaux d'ordinateurs pour exécuter des applications parallèles communiquant explicitement par passage de messages.

Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? Contexte d'utilisation de MPI II... grosses conséquences Dans la norme MPI, il n'est rien dit du mode lancement des processus. En particulier, l'aectation des processus aux diérents ordinateurs et aux diérents processeurs est à la charge de l'utilisateur. MPI n'intervient que lorsqu'une fonction préxée par MPI_... est appelée. Entre deux appels à MPI, les processus peuvent faire ce que bon leur semble. Rien n'oblige non plus à démarrer les mêmes processus sur l'ensemble des machines, tant que leurs communications MPI correspondent.

Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? Exécution des processus sur un ensemble de machines I La syntaxe indiquée ici est celle de l'imlémentation Open-Mpi. Lancement des processus, mode basique Par convention, on utilise la commande mpiexec. On lui indique : Le nombre de processus total Une liste de machines à utiliser Exemple : mpiexec -n 19 -machinele hostlist /path/to/binary Dans ce cas, les 19 processus seront répartis en round-robin sur les machines fournies dans hostlist

Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? Exécution des processus sur un ensemble de machines II Pour aller un peu plus loin Des options avancées permettent de préciser : Pour chacune des machines, le nombre de processus à lancer Le nom du programme à lancer sur les machines On écrit alors un apple pour cela. Le chier comprend une suite de lignes de la forme -host hostname -np nb_procs /path/to/binary_for_host Dans ce cas, on choisit le nombre de processus machine par machine

Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? Prise en compte de l'environnement d'exécution par MPI I En environnement cluster Les clusters de calcul sont souvent exploités par des environnements de gestion de les d'attente (gestion de batch) Ces environnements choisissent automatiquement pour l'utilisateur des machines disponibles sur lesquelles s'exécutera l'application MPI La liste des machines n'est pas connue au lancement du job. La couche de lancement MPI pourra la récupérer automatiquement lors du lancement de l'application (on parle d'intégration entre MPI et le gestionnaire de batch)

Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? Prise en compte de l'environnement d'exécution par MPI II Choix du meilleur canal pour les communications En fonction de la répartition en processus par machine, MPI pourra réaliser les optmisations suivantes lors des communications. processus local remote processus self shared memory network(s) Question ouverte : coût d'un échange de données entre processus sur un même machine via MPI ou via des threads?

Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? Exécution sur des machines multi-coeurs I Pour la répartition des processus MPI sur un ensemble de machines multi-coeurs, un grand nombre de possibilités s'orent à nous.

Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? Exécution sur des machines multi-coeurs II Répartition des processus Un processus par coeur Avantage : 1 seul mode de programmation, utilisation de tous les coeurs. Inconvénient : Expressivité. Ecacité en mémoire. Performances dépendent des optimisations de la couche MPI. Question ouverte : placement des processus MPI sur les diérents coeurs? Cf Travaux de l'équipe Runtime du Labri (http ://runtime.bordeaux.inria.fr) Un processus par machine Avantage : 1 seul mode de programmation Inconvénient : Que faire des autres coeurs?

Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? Exécution sur des machines multi-coeurs III La méthode utilisée couramment s'appuie sur la programmtion hybride : MPI (Inter-machines) + Threads/OpenMP + GPU. Ceci assure une mise en correspondance ne du modèle de programmation avec l'architecture. On lancera alors 1 processus MPI par machine.

1. On suppose que le système RD/LG a bien voulu MPI : Un placer outil pour un le thread multi-coeur par? coeur. On Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? Exécution sur des machines multi-coeurs Exemple de répartition idéale avec 1 processeus par machine, 2 Threads OpenMP par processus, 1 GPU par thread 1 Représentation graphique GPU1 (OCL) GPU2 (OCL) GPU1 (OCL) GPU2 (OCL) Mémoire Mémoire c1 (OMP) c2 (OMP) c1 (OMP) c2 (OMP) réseau - (Communications MPI)

Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? Exécution sur des machines multi-coeurs - pseudo-code MPI_Init(&argc, &argv); if (rank ==0) read_file(); /* All MPI processes) */ MPI_Scatter(...); #pragma omp parallel for schedule(static) for (i=0 ; i < BIG_NUMBER ; i++) start_gpu_computation(device=omp_get_thread_num()%2) MPI_Send(some_data,the_other) do_cpu_computation_that_does_not_fits_on_gpu() MPI_Gather(...); MPI_Finalize();

Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? Exécution sur des machines multi-coeurs En pratique Le code précédent suppose que : Durant l'exécution des threads OpenMp, chaque thread se voit aecter un coeur. Assuré par le système, aidé par utilisateur Il y a autant de cartes GPU que de coeurs, ce qui en général n'est pas vrai procéder à un join des threads OpenMP avant d'utiliser les GPU, ou dédier un thread OpenMP au GPU Les appels MPI soient possibles dans les threads (dépend de l'implémentation).

MPI_THREAD_SINGLE : aucune cohabitation possible MPI_THREAD_FUNNELED : plusieurs threads mais seul le maitre appelle MPI MPI_THREAD_SERIALIZED : les appels MPI doivent être sérialisés par les threads MPI_THREAD_MULTIPLE : les appels à MPI peuvent être eectués en même temps par plusieurs threads (cas de OpenMPI) Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? MPI et les threads Niveaux de support Le niveau de cohabitation de MPI et des threads est donné par la fonction MPI_Init_thread(int *argc, char ***argv,int required, int *

Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? Prise en compte du multi-coeurs dans MPI-3 I Une des notions fondamentales de MPI est l'association identitaire entre un processus et un rang, l'espace d'adressage n'étant pas partagé entre les processus : Pour la prise en compte du multi-coeurs, l'idée serait de permettre à plusieurs rangs MPI de partager le même espace d'adressage. On parle alors de MPI_Endpoint. L'intérêt est de simplier l'échange

Et le multi-coeur? Utilisation de MPI en environnement multi-coeurs Que mettre dans un processus MPI? Prise en compte du multi-coeurs dans MPI-3 II de données entre rangs MPI sur une même machine.

Conclusion Plan 1 Introduction 2 Principe de MPI 3 Les bases de MPI 4 Les moins-bases de MPI 5 Et le multi-coeur? 6 Conclusion

Conclusion Conclusion La programmation de grappes de machines multicoeurs exige de mettre en uvre plusieurs modèles de programmation parallèle. L'ajout de MPI comme surcouche de communucation entre machines multicoeurs ajoute des fonctionnalités riches en terme de description d'échange des données, d'e/s parallèles (Hdf5 par exemple). Le prix à payer est une hiérarchisation du code. Néanmoins, on peut imaginer coner une partie du travail de parallélisation du code des processus aux compilateurs.

Conclusion Bibliographie Il existe de nombreux cours MPI en ligne. Ont été utilisés : Le cours sur mpi4py (pour python), écrit par Loïc Gouarin pour l'angd "Python pour le Calcul Scientique" http://calcul.math.cnrs.fr Le cours MPI de l'idris (J. Chergui, I. Dupays, D. Girou, S. Requena, P. Wautelet http://www.idris.fr Le site de OpenMPI http://www.open-mpi.org Site des discussions du forum mpi : https://svn.mpi-forum.org/trace/mpi-forum-web