Dela via


funktionen MPI_Recv

Utför en mottagningsåtgärd och returnerar inte förrän ett matchande meddelande tas emot.

Syntax

int MPIAPI MPI_Recv(
  _In_opt_ void         *buf,
           int          count,
           MPI_Datatype datatype,
           int          source,
           int          tag,
           MPI_Comm     comm,
  _Out_    MPI_Status   *status
);

Parametrar

  • buf [in, optional]
    En pekare till bufferten som innehåller de data som ska skickas.

  • Räkna
    Antalet element i bufferten. Om datadelen i meddelandet är tom anger du parametern count till 0.

  • Datatyp
    Datatypen för elementen i buffertmatrisen.

  • Källkod
    Rangordningen för sändningsprocessen inom den angivna kommunikatören. Ange den MPI_ANY_SOURCE konstanten för att ange att alla källor är godtagbara.

  • Etiketten
    Meddelandetaggen som används för att skilja mellan olika typer av meddelanden. Ange MPI_ANY_TAG konstant för att ange att alla taggar är acceptabla.

  • Comm
    Handtaget till kommunikatören.

  • status [out]
    Vid retur innehåller en pekare till en MPI_Status struktur där information om det mottagna meddelandet lagras.

Returvärde

Returnerar MPI_SUCCESS vid lyckat resultat. Annars är returvärdet en felkod.

I Fortran lagras returvärdet i parametern 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

Kommentarer

Längden på det mottagna meddelandet måste vara mindre än eller lika med längden på mottagningsbufferten. Den här funktionen returnerar ett spillfel om alla inkommande data inte passar in i mottagningsbufferten.

Om det mottagna meddelandet är kortare än bufferten ändras bara den del av bufferten som motsvarar meddelandet. Resten av bufferten ändras inte.

Processer kan skicka meddelanden till sig själva. Det är dock osäkert att göra det med blockeringsåtgärderna för att skicka och ta emot, MPI_Send och MPI_Recv, eftersom dessa blockerande åtgärder för att skicka och ta emot kan orsaka ett dödläge.

Anteckning

Det finns en asymmetri mellan sändnings- och mottagningsåtgärder. En mottagningsåtgärd kan ta emot meddelanden från en godtycklig avsändare, men en sändningsåtgärd måste ange en unik mottagare. Detta implementerar en push-kommunikationsstil, där dataöverföringen utförs av avsändaren, i stället för ett pull-format där dataöverföringen utförs av mottagaren.

 

Krav

Produkt

HPC Pack 2012 MS-MPI Redistributable Package, HPC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package eller HPC Pack 2008 Client Utilities

Huvud

Mpi.h; Mpif.h

Bibliotek

Msmpi.lib

DLL

Msmpi.dll

Se även

MPI punkt-till-punkt-funktioner

MPI_Send

MPI_Irecv

MPI_Datatype

MPI_Comm

MPI_Status