MPI_Recv, fonction
Effectue une opération de réception et ne retourne pas tant qu’un message correspondant n’est pas reçu.
Syntaxe
int MPIAPI MPI_Recv(
_In_opt_ void *buf,
int count,
MPI_Datatype datatype,
int source,
int tag,
MPI_Comm comm,
_Out_ MPI_Status *status
);
Paramètres
buf [in, facultatif]
Pointeur vers la mémoire tampon qui contient les données à envoyer.count
Nombre d'éléments contenus dans la mémoire tampon. Si la partie données du message est vide, définissez le paramètre count sur 0.datatype
Type de données des éléments dans le tableau de mémoires tampons.source
Classement du processus d’envoi dans le communicateur spécifié. Spécifiez la constante MPI_ANY_SOURCE pour spécifier qu’une source est acceptable.tag
Balise de message utilisée pour distinguer différents types de messages. Spécifiez la constante MPI_ANY_TAG pour indiquer qu’une balise est acceptable.comm
Handle du communicateur.status [out]
Au retour, contient un pointeur vers une structure MPI_Status où sont stockées les informations sur le message reçu.
Valeur retournée
Retourne MPI_SUCCESS en cas de réussite. Sinon, la valeur de retour est un code d’erreur.
Dans Fortran, la valeur de retour est stockée dans le paramètre IERROR .
Fortran
MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, IERROR)
<type> BUF(*)
INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR
Remarques
La longueur du message reçu doit être inférieure ou égale à la longueur de la mémoire tampon de réception. Cette fonction retourne une erreur de dépassement de capacité si toutes les données entrantes ne tiennent pas dans la mémoire tampon de réception.
Si le message reçu est plus court que la mémoire tampon, seule la partie de la mémoire tampon qui correspond au message est modifiée. Le reste de la mémoire tampon n’est pas modifié.
Les processus peuvent s’envoyer des messages. Toutefois, il n’est pas possible de le faire avec les opérations d’envoi et de réception bloquantes, MPI_Send et MPI_Recv, car ces opérations d’envoi et de réception bloquantes peuvent entraîner un blocage.
Notes
Il existe une asymétrie entre les opérations d’envoi et de réception. Une opération de réception peut accepter des messages provenant d’un expéditeur arbitraire, mais une opération d’envoi doit spécifier un récepteur unique. Cela implémente un style push de communication, où le transfert de données est effectué par l’expéditeur, plutôt qu’un style d’extraction où le transfert de données est effectué par le récepteur.
Configuration requise
Produit |
Package redistribuable MS-MPI HPC Pack 2012, package redistribuable HPC Pack 2008 R2 MS-MPI, package redistribuable MS-MPI HPC Pack 2008 ou utilitaires clients HPC Pack 2008 |
En-tête |
Mpi.h ; Mpif.h |
Bibliothèque |
Msmpi.lib |
DLL |
Msmpi.dll |