Les Messages MPI. Les Types de base MPI - C

Documents pareils
Introduction à la Programmation Parallèle: MPI

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

Systèmes parallèles et distribués

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

Introduction to Parallel Programming with MPI

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

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 au langage C

Programmation parallèle et distribuée

Bases de programmation. Cours 5. Structurer les données

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Cours de Systèmes d Exploitation

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

OS Réseaux et Programmation Système - C5

Problèmes liés à la concurrence

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

Plan du cours. Historique du langage Nouveautés de Java 7

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

Rappels d architecture

Rappels Entrées -Sorties

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)

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

Chap III : Les tableaux

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

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Algorithmique et Programmation, IMA

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

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Java Licence Professionnelle CISII,

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

Mise en œuvre des serveurs d application

Le langage C. Séance n 4

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

Plan du cours Cours théoriques. 29 septembre 2014

Structurer ses données : les tableaux. Introduction à la programmation

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

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

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

Manuel de l utilisateur. GLN Database

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Programmation impérative

Projet Active Object

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Réseau longue distance et application distribuée dans les grilles de calcul : étude et propositions pour une interaction efficace

Les structures. Chapitre 3

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

CONFIGURATION FIREWALL

Exécutif temps réel Pierre-Yves Duval (cppm)

Conception des systèmes répartis

TP1 : Initiation à Java et Eclipse

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

Cours 1: Java et les objets

2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES. 2.2 Architecture fonctionnelle d un système communicant.

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

ACTIVITÉ DE PROGRAMMATION

Travaux Pratiques Introduction aux réseaux IP

Programmation système de commandes en C

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Initiation. àl algorithmique et à la programmation. en C

ALGORITHMIQUE ET PROGRAMMATION En C

Skype (v2.5) Protocol Data Structures (French) Author : Ouanilo MEDEGAN

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Couche application. La couche application est la plus élevée du modèle de référence.

Network musical jammin

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

I. Introduction aux fonctions : les fonctions standards

Voix sur IP Étude d approfondissement Réseaux

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

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

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

as Architecture des Systèmes d Information

1 Description générale de VISFIELD

PROJET 1 : BASE DE DONNÉES REPARTIES

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

DNS Server RPC Interface buffer overflow. Céline COLLUMEAU Nicolas BODIN

Programmation Orientée Objet Java

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Architecture des ordinateurs

Algorithmique et programmation : les bases (VBA) Corrigé

Introduction à l algorithmique et à la programmation M1102 CM n 3

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

1. Base de données SQLite

Algorithmique I. Algorithmique I p.1/??

Utilisation d objets : String et ArrayList

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

Messagerie asynchrone et Services Web

DHCP et NAT. Cyril Rabat Master 2 ASR - Info Architecture des réseaux d entreprise

Structure d un programme

Programmation en Java IUT GEII (MC-II1) 1

Programmer en JAVA. par Tama

OCL - Object Constraint Language

Le langage C. Introduction, guide de reference

Transcription:

Les Messages MPI Un message MPI contient un certain nombre de données typées : d un type de base (entiers, réels simple ou double précision,...) ou d un type construit. Les types contruits le sont à partir de types de base (cf 3.6) Les types de données MPI pour le langage C sont différents de ceux existants pour Fortran. Les types MPI permettent d être indépendant des diverses représentations machine hétérogènéité possible pour les applications Pourquoi utiliser dans les messages des types MPI au lieu des types reconnus par le langage? Hé bien à cause du support de l hétérogénéité : un type entier n est pas forcément implémenté suivant le même format machine dans 2 architectures différentes. Sur les architecture Intel, rappelez-vous que les digits poids forts et poids faibles ne sont pas dans le même sens que sur une machine Sun par ex. (big endian, little endian,...) Donc si je met un int dans le message et que j envoie ce message, il a de fortes chances de ne pas donner la même valeur à l autre bout... d où la nécessité d utiliser un format de représentation indépendant des formats machine. En programmation réseau on peut utiliser des fonctions comme htonl(), ntohl() ou ntohs() voire même utiliser le codage XDR. Ici on utilisera les types de données MPI. htons(), Hugues Leroy Cours de DEA CH 3.3 / 1 Hugues Leroy Cours de DEA CH 3.3 / 2 Les Types de base MPI - C Type MPI MPI_CHAR MPI_SHORT MPI_INT MPI_LONG MPI_UNSIGNED_CHAR MPI_UNSIGNED_SHORT MPI_UNSIGNED MPI_UNSIGNED_LONG MPI_FLOAT MPI_DOUBLE MPI_LONG_DOUBLE MPI_BYTE MPI_PACKED C signed char signed short int signed int signed long int unsigned char unsigned short int unsigned int unsigned long int float double long double unsigned char spécial Attention : l appellation type est incorrecte, c est un abus de langage pour éviter de dire à chaque fois type de donnée. Ce n est pas un type au sens des langages et on ne pourra -par exemple- pas déclarer un objet de type MPI_INT. En fait ce sont des constantes prédéfinies, mais on a l habitude de dire type... On ne les utilise que dans les primitives de communication. Hugues Leroy Cours de DEA CH 3.3 / 3 Hugues Leroy Cours de DEA CH 3.3 / 4

Types de base MPI - Fortran MPI Fortran MPI_INTEGER INTEGER MPI_REAL REAL MPI_DOUBLE_PRECISION DOUBLE PRECISION MPI_COMPLEX COMPLEX MPI_LOGICAL LOGICAL MPI_CHARACTER CHARACTER(1) MPI_BYTE MPI_PACKED On a moins de choix qu en C. Hugues Leroy Cours de DEA CH 3.3 / 5 Hugues Leroy Cours de DEA CH 3.3 / 6 Communications point à point 1 3 source communicator 0 5 4 2 dest une communication point à point a lieu entre deux processus, un émetteur et un destinataire ( dans le même communicateur ). Le destinataire est identifié par son rang dans le communicateur. il existe plusieurs modes de transfert, chacun faisant appel à un protocole différent QUOI!? on ne dit pas seulement <<le message X va de A vers B>>?? OUI car MPI offre un plus grand contrôle sur la transmission. Hugues Leroy Cours de DEA CH 3.3 / 7 Hugues Leroy Cours de DEA CH 3.3 / 8

Les modes de communication Mode Notes Fonction MPI Envoi synchrone retourne lorsqu une demande de réception est faite MPI_Ssend Envoi tamponné retourne (sauf en cas d erreurs) même si le récepteur n a pas encore reçu le message MPI_Bsend soit synchrone, soit tamponné. Ne faire aucune Envoi standard supposition sur l implémentation effective. MPI_Send Ready send retourne (sauf en cas d erreurs) même si le récepteur n a pas encore reçu le message MPI_Rsend Réception MPI_Recv retourne lorsque le message demandé est arrivé L envoi standard peut être (ou non) implémenté avec tamponnage. Si c est le cas l envoi se termine avant qu une réception soit faite, sinon on bloque jusqu à ce qu une demande de réception pour ce message soit faite. Si le système de communication (l implémentation de la bibliothèque MPI) assure du tamponnage, alors MPI_Send rend la main dès qu on a recopié dans un tampon du système le message à transmettre. Sinon, s il n a pas de tamponnage, alors on restera bloqué jusqu à ce que le destinataire fasse le MPI_Recv correspondant. Donc quand il n y a pas de tamponnage, MPI_Send est équivalent à MPI_Ssend. MPI_Rsend suppose que le destinataire a déjà fait un Recv(). On aura une erreur (du genre MPI_Abort exécuté par le runtime MPI) si ce n est pas le cas... Hugues Leroy Cours de DEA CH 3.3 / 9 Hugues Leroy Cours de DEA CH 3.3 / 10 Envoi (bloquant) d un message /* DEUXIEME POSSIBILITE ( version plus élégante ), le 1ère version ne traitant pas de façon équitable tous les producteurs car il y a une séquentialisation dans le traitement */ i=0; C: while (1) { for int (flag=0; MPI_Send! flag; i=(i+1)%(size-1) (void *buf, int ) MPI_Test(&(buffer[i].req), count, MPI_Datatype &flag, datatype, &status); MPI_Get_count ( &status, MPI_CHAR, &(buffer[i].datasize)); int dest, int tag, MPI_Comm comm) consommer ( buffer[i].data, buffer[i]->datasize); ou MPI_Ssend, MPI_Irecv MPI_Bsend, (buffer[i].data, MAXSIZE, MPI_Rsend MPI_CHAR, i, tag, comm, &(buffer[i].req)); } } Fortran: remarquez MPI_SEND comment la (BUF, boucle COUNT, sur MPI_Test DATATYPE, permet DEST, de sélectionner TAG, une requête! (on sort lorsque flag vaut vrai) COMM, IERROR) <type> BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG INTEGER COMM, IERROR ou MPI_SSEND, BSEND, RSEND On envoie count données de type datatype contenues dans la variable buf au processus dest dans le communicateur comm. On colle l étiquette tag sur le message (voir plus loin pour les tags) Suivant qu il y a ou non tamponnage par l implémentation MPI, l appellation bloquant pour MPI_Send est trompeuse... On peut juste dire : bloquant jusqu à ce qu on puisse réutiliser la variable (le 1er paramètre buf) pour autre chose. Cette réutilisation pouvant se faire dès que ce tampon aura été recopié dans un autre tampon de la bibliothèque (cas du tamponnage), ou jusqu à ce que le processus destinataire ait reçu le message... ex: envoi de la valeur de l entier n au processus 10 : int n; #define TAG_INIT 222 MPI_Send(&n, 1, MPI_INT, 10, TAG_INIT, MPI_COMM_WORLD); Hugues Leroy Cours de DEA CH 3.3 / 11 Hugues Leroy Cours de DEA CH 3.3 / 12

Réception (bloquante) d un message C: int MPI_Recv (void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) Fortran: MPI_RECV (BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, IERROR) <type> BUF(*) INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR Ici pas d ambigüité : on reste bien bloqué jusqu à ce que buf (1er paramètre de Recv) contienne le message attendu du processus source et avec l étiquette tag exemple de réception correspondant au Send vu avant - en supposant que c était le processus 0 qui avait fait l envoi - int x; MPI_Status st; MPI_Recv( &x, 1, MPI_INT, 0, TAG_INIT, MPI_COMM_WORLD, &st); st contiendra les informations : qui a envoyé le message et quel tag a ce message (dans notre cas 0 et 222 ) MPI_Status est un tableau en Fortran, pour C c est une structure. Remarque : count = sizeof(buf) (nb max d éléments dans le tampon) et non pas le nb d éléments que je veux recevoir Hugues Leroy Cours de DEA CH 3.3 / 13 Hugues Leroy Cours de DEA CH 3.3 / 14 Communications synchrones bloquantes (rendez-vous) l émetteur précise le mode synchrone (Ssend) les deux processus émetteur et récepteur se synchronisent les deux processus attendent la fin de la transaction Hugues Leroy Cours de DEA CH 3.3 / 15 Hugues Leroy Cours de DEA CH 3.3 / 16

Envois Ready bloquants Une demande de réception correspondante doit avoir été postée, sinon comportement indéterminé. Si cette condition est respectée, on peut attendre un gain de performance (évite des tamponnages intermédiaires) temps Processus 0 Processus 1 irecv ( src=0, tag=0 ) ssend ( dest=1, tag=5 ) recv ( src=0, tag=5 ) rsend ( dest=1, tag=0 )... Ici j ai temporellement la certitude (car c est moi qui a programmé cette application...) qu au moment où le processus 0 fait le Rsend, le processus 1 a bien fait une demande de réception car elle a été faite avant la synchronisation Ssend/ Recv. Donc je sais qu après cette synchronisation, il y a un tampon pour recevoir le message à émettre. Hugues Leroy Cours de DEA CH 3.3 / 17 Hugues Leroy Cours de DEA CH 3.3 / 18 Envois tamponnés bloquants On ne doit pas faire d hypothèses sur le nombre de tampons gérés par le système. En attacher un avec la primitive MPI_Buffer_attach (buffer, size) On le détache avec la primitive MPI_Buffer_detach (buffer, size) Cette dernière opération bloque jusqu à ce que tous les messages transmis en utilisant ce tampon soient tous reçus. Mais attention : un seul tampon attaché par processus detach!= free et attach!= malloc Hugues Leroy Cours de DEA CH 3.3 / 19 Hugues Leroy Cours de DEA CH 3.3 / 20

un exemple d utilisation : char * buf; int size; buf=(char *) malloc ( BUFSIZE ); MPI_Buffer_attach ( buf, BUFSIZE ); MPI_Bsend();...;MPI_Bsend();... MPI_Buffer_detach ( &buf, &size );... MPI_Buffer_attach ( buf, size );... MPI_Buffer_detach ( &buf, &size ); free ( buf ); Remarque : MPI_Finalize() fait les Buffer_detach si on en a oublié... la taille totale du tampon doit être celle de tous les Bsend + un overhead (2*MPI_BSEND_OVERHEAD) Hugues Leroy Cours de DEA CH 3.3 / 21 Hugues Leroy Cours de DEA CH 3.3 / 22 Jokers Le récepteur peut demander à recevoir un message émis par n importe quel émetteur, et / ou ayant n importe quelle étiquette (tag). source indifférente : spécifier MPI_ANY_SOURCE tag indifférent : spécifier MPI_ANY_TAG Le paramètre de retour status contiendra les indications sur l émetteur et le tag du message reçu. On peut demander à recevoir un message de n importe qui. On saura qui nous l a envoyé, en explorant dans la structure de type MPI_Status passée au Recv le champ MPI_SOURCE. (voir plus loin) On peut aussi demander à recevoir des messages ayant n importe quelle étiquette. Toutefois, attention aux effets indésirables des Jokers (voir plus loin) Hugues Leroy Cours de DEA CH 3.3 / 23 Hugues Leroy Cours de DEA CH 3.3 / 24

Règles à respecter pour qu une communication se termine bien l émetteur doit spécifier une destination valide (un processus de rang existant) le récepteur doit aussi spécifier un processus valide le communicateur doit être le même les étiquettes (tags) de message doivent correspondre (*) et attention aux jokers (wildcard). Voici par exemple un code au comportement indéterminé : il peut y avoir blocage (deadlock) ou pas... (*) en C utilisez les directives #define au lieu de constantes entières, idem pour Fortran si toutefois le compilateur est capable d appeler le préprocesseur cpp (dans ce cas il suffit en général de suffixer le nom de fichier source par.f au lieu de.f). Et utilisez des tags différents dans les diverses parties de vos algorithmes. Si on définit des constantes par #define dans plusieurs modules (fichiers) ne pas oublier de les mettre plutôt dans un fichier qui sera importé par un #include mydefs.h (par ex.) Supposons que 3 processus P0, P1, et P2 s envoient des messages comme c est indiqué dans le transparent suivant Hugues Leroy Cours de DEA CH 3.3 / 25 Hugues Leroy Cours de DEA CH 3.3 / 26 Processus 0 Processus 1 Processus 2 Nous verrons dans la suite comment les contextes de communication (communicateurs) peuvent apporter une solution lorsqu on désire mettre à disposition d autres utilisateurs un solveur parallèle utilisant des routines MPI... recv ( any ) recv ( 1 ) send ( 2 ) recv ( any ) send ( 0 ) recv ( 2 ) send ( 1 ) send ( 0 ) send ( 1 ) recv ( 0 ) temps les types de données envoyées et reçues doivent être spécifiés de la même façon (d où d éventuels problèmes entre modules écrits dans des langages différents) le tampon de réception doit être bien dimensionné (attention aux débordements éventuels) On supposera que les tags de tous les messages sont les mêmes et on notera send(i) pour Send ( au processus Pi) et recv(any) pour Recv( MPI_ANY_SOURCE) S il n y a pas de surprise dans le déroulement temporel tout se passe bien. Si maintenant la machine où est le processus P2 est chargée par d autres utilisateurs, il se peut que le send(0) du processus P1 soit fait temporellement avant le send(0) du procesus P2. (P2 a du mal a obtenir un temps de parole sur la machine chargée) A la lecture des demandes send et recv qui restent on voit bien alors dans ce cas que P0 restera bloqué sur sa demande recv(1) car P1 a déjà vu son Send(0) traité par le recv( any) Et voilà un cas où le comportement du programme parallèle n est pas le même tout le temps... Hugues Leroy Cours de DEA CH 3.3 / 27 Hugues Leroy Cours de DEA CH 3.3 / 28

L enveloppe d un message Adresse de l émetteur Référence: Données Adresse du destinataire Hugues Leroy Cours de DEA CH 3.3 / 29 Hugues Leroy Cours de DEA CH 3.3 / 30 Informations sur l enveloppe Des informations sur l enveloppe sont retournées par la fonction MPI_RECV dans le paramètre status Cette variable (structure C, tableau Fortran) contient les infos suivantes : Émetteur: status.mpi_source ou status(mpi_source) Étiquette du message (Tag): status.mpi_tag ou status(mpi_tag) Pour obtenir le nombre effectif d éléments reçus, on applique la fonction MPI_Get_count ou MPI_GET_COUNT sur le status Hugues Leroy Cours de DEA CH 3.3 / 31 Hugues Leroy Cours de DEA CH 3.3 / 32

Nombre d éléments reçus C: int MPI_Get_count (MPI_Status status, MPI_Datatype datatype, int *count) Fortran: MPI_GET_COUNT (STATUS, DATATYPE, COUNT, IERROR) INTEGER STATUS(MPI_STATUS_SIZE), DATATYPE, COUNT, IERROR On se sert de MPI_Get_count dans le cas où on a mis un joker (MPI_ANY_SOURCE et/ou MPI_ANY_TAG) dans les champs correspondants de la demande de réception. Consulter l exemple du producteur/consommateur plus loin dans le cours. Hugues Leroy Cours de DEA CH 3.3 / 33 Hugues Leroy Cours de DEA CH 3.3 / 34 Ordre des messages 1 L ordre est préservé : les messages émis par le même émetteur pour le même destinataire ne se doublent pas, même s ils peuvent emprunter des routes différentes. Pas de garantie sur l ordre si les émetteurs sont différents. Pour les envois asynchrones, cette proposition est aussi valide. 3 communicator 0 5 4 2 Sur le schéma, les messages émis par P0 vers P2 ne se doublent pas. L ordre est garanti : P2 reçoit dans l ordre d émission par P0 Par contre si P5 envoie aussi dans les mêmes périodes des messages vers P0, alors rien ne dit que P2 les recevra avant, après, pendant...qu il reçoit ceux de P0. Illustration simple : lancez plusieurs fois le programme Hello World de l exercice 1 sur le même nombre de processeurs, et observez les sorties. NOTE : Le printf est intercepté par un processus daemon qui les imprimera sur l écran de la machine associée au processus maitre (celle où on a tapé mpirun...). donc ils doivent tous transiter par le réseau avant d arriver sur la bonne machine. Leur ordre d arrivée est donc lié à la charge réseau et à la charge des diverses machines utilisées... Hugues Leroy Cours de DEA CH 3.3 / 35 Hugues Leroy Cours de DEA CH 3.3 / 36

Mesure du temps C: Fortran: double MPI_Wtime(void); DOUBLE PRECISION MPI_WTIME() ATTENTION cette fonction retourne une mesure de temps en secondes (depuis un point arbitraire, par exemple le dernier appel) Pour mesurer le temps passé dans une partie du programme, appeler deux fois cette fonction (une fois au début de la partie surveillée, et une fois à la fin). Faire la différence entre les deux valeurs obtenues. On mesure le temps pour pouvoir avoir une idée des speedup obtenus. Hugues Leroy Cours de DEA CH 3.3 / 37 Hugues Leroy Cours de DEA CH 3.3 / 38 Exercice 2 : le ping pong Écrire un programme où le processus 0 doit envoyer un message (1000 réels) vers le processus 1. Faire une version ping pong où le processus 1 renvoie le message reçu au processus 0. Rajouter les appels aux fonctions de timing pour mesurer le temps pris pour transmettre le message. Pour différentes tailles de messages (0,10,100,1000,10000,100000), répéter les mesures. En déduite la latence ainsi que le débit ( bande passante ). Modifiez votre programme pour qu il imprime le temps total de son exécution. Déterminer la latence et la bande passante pour un réseau de machines est essentiel pour définir la granularité de l application. Plus la latence est élevée, et moins il faudra communiquer et il faudra essayer de grouper les communications pour envoyer de gros messages en une seule fois plutôt que beaucoup de petits messages... Attention aussi à la taille max des tampons TCP. On peut essayer de déterminer cette taille par programme, et aussi la modifier. Ex pour Unix: setsockopt (Port, SOL_SOCKET, SO_SNDBUF, (char *)&ComputedSndSockBufSize, sizeof(computedsndsockbufsize)); SunOS (Solaris) sets the maximum buffer size for both UDP and TCP to 256 Kbytes Hugues Leroy Cours de DEA CH 3.3 / 39 Hugues Leroy Cours de DEA CH 3.3 / 40

Autres communications point à point MPI_Sendrecv ( void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, void *recbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, MPI_Comm comm,mpi_status *status) même tampon utilisé pour l envoi et la réception : Paramètres pour le Send d abord, et ensuite ceux du Recv A titre d exercice modifiez le programme du ping pong pour y mettre des Sendrecv, puis des Sendrecv_replace, pour tester si les latences ou débits sont les mêmes. MPI_Sendrecv_replace ( void *buf, int count, MPI_Datatype datatype, int dest, int sendtag, int source, int recvtag, MPI_Comm comm, MPI_Status *status ) Hugues Leroy Cours de DEA CH 3.3 / 41 Hugues Leroy Cours de DEA CH 3.3 / 42 Tests de l implémentation MPICH écrire un programme qui détermine la taille maximum des buffers fournis pour MPI_Send. C est à dire écrire un programme qui trouve quelle est la longueur maximum d un message envoyé par MPI_Send sans que ce MPI_Send ne se bloque en attente du MPI_Recv() correspondant. Rappelons que MPICH fournit des tampons pour les envois standards, ce qui n est pas le cas de toutes les implémentations de MPI. On utilisera MPI_Wtime(), MPI_Send(), MPI_Recv() et MPI_Allreduce() (à faire après le chapitre 3.5) Hugues Leroy Cours de DEA CH 3.3 / 43 Hugues Leroy Cours de DEA CH 3.3 / 44