Condividi tramite


funzione MPI_Scatterv

Dispersione dei dati da un membro in tutti i membri di un gruppo. La funzione MPI_Scatterv esegue l'inverso dell'operazione eseguita dalla funzione MPI_Gatherv .

Sintassi

int MPIAPI MPI_Scatterv(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts,
  _In_  int          *displs,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        MPI_Datatype recvtype,
        int          root,
        MPI_Comm     comm
);

Parametri

  • sendbuf [in]
    Puntatore a un buffer che contiene i dati da inviare dal processo radice.

    Il parametro sendbuf viene ignorato per tutti i processi non radice.

    Se il parametro comm fa riferimento a un intracommunicator, è possibile specificare un'opzione sul posto specificando MPI_IN_PLACE nel processo radice. I parametri recvcount e recvtype vengono ignorati. Il vettore a dispersione è ancora considerato contenere n segmenti, dove n è la dimensione del gruppo; il segmento che corrisponde al processo radice non viene spostato.

  • sendcounts [in]
    Numero di elementi da inviare a ogni processo. Se sendcount[i] è zero, la parte dei dati del messaggio per tale processo è vuota.

    Il parametro sendcount viene ignorato per tutti i processi non radice.

  • displs [in]
    Posizioni dei dati da inviare a ogni processo di comunicatore. Ogni posizione della matrice è relativa all'elemento corrispondente della matrice sendbuf .

    Nelle matrici di parametri sendbuf, sendcounts e displs , l'elemento ndi ogni matrice fa riferimento ai dati da inviare al processo ndi comunicatore.

    Questo parametro è significativo solo nel processo radice.

  • sendtype
    Tipo di dati MPI di ogni elemento nel buffer.

    Il parametro sendcount viene ignorato per tutti i processi non radice.

  • recvbuf [out]
    Puntatore a un buffer contenente i dati ricevuti in 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 degli elementi nel buffer di ricezione.

  • radice
    Classificazione nel processo di invio all'interno del comunicatore specificato.

  • 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_SCATTERV(SENDBUF, SENDCOUNT, DISPLS, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, DISPLS(*), RECVCOUNT(*), RECVTYPE, ROOT, COMM, IERROR

Commenti

La funzione MPI_Scatterv estende la funzionalità della funzione MPI_Scatter consentendo un numero variabile di dati, come specificato nella matrice sendcounts , da inviare a ogni processo.

La specifica dei conteggi, dei tipi e degli spostamenti non deve causare alcuna posizione nella radice da leggere più volte.

Tutti i parametri della funzione sono significativi nel processo radice, solo i parametri recvbuf, recvcount, recvtype, root e comm sono significativi negli altri processi. I parametri radice e comm devono essere identici in tutti i processi.

La firma del tipo come specificato dai parametri sendcount e sendtype per il processo radice deve essere uguale alla firma del tipo come specificato dai parametri recvcount e recvtype per tutti i processi. 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 comm è un intracommunicator, il risultato è come se la radice ha eseguito n operazioni MPI_Send(sendbuf + displs[i]*extent(sendtype), sendcounts[i], sendtype, I, …)di invio e ogni processo ha eseguito una ricezione, MPI_Recv(recvbuf, recvcount, recvtype, i,…).

Se il parametro comm fa riferimento a un intercommunicator, la chiamata comporta tutti i processi nell'intercommunicator, ma con un gruppo, un gruppo A, che definisce il processo radice. Tutti i processi nell'altro gruppo, gruppo B, impostano lo stesso valore nel parametro radice , ovvero il rango del processo radice nel gruppo A. Il processo radice imposta il valore MPI_ROOT nel parametro radice . Tutti gli altri processi nel gruppo A impostano il valore MPI_PROC_NULL nel parametro radice . I dati vengono trasmessi dal processo radice a tutti i processi nel gruppo B. I parametri del buffer dei processi nel gruppo B devono essere coerenti con il parametro buffer del processo radice.

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_Gather

MPI_Gatherv

MPI_Scatter