Condividi tramite


MPI_Alltoall funzione

Raccoglie i dati da e dispersione dei dati a tutti i membri di un gruppo. Il MPI_Alltoall è un'estensione della funzione MPI_Allgather . Ogni processo invia dati distinti a ognuno dei ricevitori. Il blocco jth inviato dal processo i viene ricevuto dal processo j e viene inserito nel blocco idel buffer di ricezione.

Sintassi

int MPIAPI MPI_Alltoall(
  _In_  void         *sendbuf,
        int          sendcount,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        MPI_Datatype recvtype,
        MPI_Comm     comm
);

Parametri

  • sendbuf [in]
    Puntatore ai dati da inviare a tutti i processi del gruppo. Il numero e il tipo di dati degli elementi nel buffer vengono specificati nei parametri sendcount e sendtype .

    Se il parametro comm fa riferimento a un intracommunicator, è possibile specificare un'opzione sul posto specificando MPI_IN_PLACE in tutti i processi. I parametri sendcount e sendtype vengono ignorati. Ogni processo immette i dati nell'elemento buffer di ricezione corrispondente. Il processo ninvia i dati all'elemento ndel buffer di ricezione.

  • sendcount
    Numero di elementi nel buffer specificato nel parametro sendbuf . Se sendcount è zero, la parte dei dati del messaggio è vuota.

  • sendtype
    Tipo di dati MPI degli elementi nel buffer di invio.

  • recvbuf [out]
    Puntatore a un buffer contenente i dati ricevuti da ogni processo. Il numero e il tipo di dati degli elementi nel buffer vengono specificati nei parametri recvcount e recvtype .

  • recvcount
    Numero di elementi nel buffer di ricezione. Se il conteggio è zero, la parte dei dati del messaggio è vuota.

  • recvtype
    Tipo di dati MPI degli elementi nel buffer di ricezione.

  • Comm
    Handle del comunicatore MPI_Comm.

Valore restituito

Restituisce MPI_SUCCESS sull'esito positivo. In caso contrario, il valore restituito è un codice di errore.

In Fortran il valore restituito viene archiviato nel parametro IERROR .

Fortran

    MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
                COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR

Commenti

Tutti i parametri sono significativi in tutti i processi. Il parametro comm deve essere identico in tutti i processi.

La firma del tipo specificata dai parametri sendcount e sendtype per un processo deve essere uguale alla firma del tipo specificata dai parametri recvcount e recvtype . Pertanto, la quantità di dati inviati deve essere uguale alla quantità di dati ricevuti tra qualsiasi coppia di processi. Le mappe dei tipi distinti tra mittente e ricevitore sono ancora consentite.

Se il parametro comm fa riferimento a un intracommunicator, il risultato di una chiamata a MPI_ALLGATHER(...) è come se ogni processo ha eseguito un invio a ogni processo, incluso se stesso usando e ricevendo da ogni altro processo usando MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …).

Se il parametro comm fa riferimento a un intercommunicator, il risultato è come se ogni processo nel gruppo A invia un messaggio a ogni processo nel gruppo B e viceversa. Il buffer di invio jth del processo i nel gruppo A deve essere coerente con il buffer di ricezione delprocesso j nel gruppo B e viceversa.

Il numero di elementi inviati dai processi nel gruppo A, non deve essere uguale al numero di elementi inviati dai processi nel gruppo B. In particolare, è possibile spostare i dati in una sola direzione specificando sendcount == 0 per la comunicazione nella direzione inversa.

Requisiti

Prodotto

Pacchetto ridistribuibile HPC Pack 2012 MS-MPI Redistributable Package, HPC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package o HPC Pack 2008 Utilità client

Intestazione

Mpi.h; Mpif.h

Libreria

Msmpi.lib

DLL

Msmpi.dll

Vedi anche

Funzioni collettive MPI

MPI_Datatype

MPI_Allgather

MPI_Send

MPI_Recv