Condividi tramite


funzione MPI_Comm_split

Partiziona il gruppo associato al comunicatore specificato in un numero specificato di sottogruppi disgiunti.

Sintassi

int MPIAPI MPI_Comm_split(
        MPI_Comm comm,
        int      color,
        int      key,
  _Out_ MPI_Comm *newcomm
);

Parametri

  • Comm
    Comunicatore da dividere.

  • color
    Nuovo comunicatore a cui deve essere assegnato il processo chiamante. Il valore di colore deve essere non negativo.

    Se un processo specifica il valore di coloreMPI_UNDEFINED, la funzione restituisce MPI_COMM_NULL nel parametro newcomm al processo chiamante.

  • key
    Classificazione relativa del processo chiamante nel gruppo del nuovo comunicatore. Per informazioni dettagliate sull'uso dei parametri chiave e colore , vedere Osservazioni.

  • newcomm [out]
    Al ritorno, contiene un handle per un nuovo comunicatore.

Valore restituito

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

In Fortran il valore restituito viene archiviato nel parametro IERROR .

Fortran

    MPI_COMM_SPLIT(COMM,COLOR,KEY,NEWCOMM,IERROR)
        INTEGER COMM, COLOR, KEY, NEWCOMM, IERROR

Commenti

Si tratta di una funzione collettiva, ma ogni processo può specificare valori diversi per i parametri di colore e chiave .

Si tratta di un meccanismo estremamente potente per dividere un singolo gruppo di processi di comunicazione in un numero arbitrario di sottogruppi. Il numero di sottogruppi è determinato dal numero di colori specificati in tutti i processi. I comunicatori risultanti non si sovrappongono. La suddivisione di un comunicatore in questo modo è utile per definire una gerarchia di calcoli, ad esempio per l'algebra multigrid o lineare.

Ogni sottogruppo contiene tutti i processi che hanno specificato lo stesso valore per il parametro color . All'interno di ogni sottogruppo, i processi vengono classificati nell'ordine definito dal valore del parametro chiave , con vincoli interrotti in base al relativo rango nel gruppo precedente.

Con un comunicatore intracommunicator, una chiamata a MPI_COMM_CREATE(comm, group, new-comm) equivale a una chiamata a MPI_COMM_SPLIT(comm, color, key, newcomm), dove i processi che sono membri del gruppo specificano il numero del gruppo, in base a una numerazione univoca di tutti i gruppi disgiunti, per il parametro color e la relativa classificazione nel gruppo per il parametro chiave . Tutti i processi che non sono membri del gruppo specificano MPI_UNDEFINED per il parametro color .

Per qualsiasi colore, i valori delle chiavi non devono essere univoci. La funzione MPI_Comm_split ordina i processi in ordine in base al valore del parametro chiave e ordina i legami in base al relativo rango nel gruppo di origine. Se lo stesso valore viene specificato per tutti i parametri chiave , tutti i processi in un determinato colore hanno lo stesso ordine di rango relativo presente nel gruppo padre.

Per gli intracommunicatori, le funzioni MPI_Comm_split e MPI_Comm_create offrono funzionalità simili per suddividere un gruppo di comunicazione in sottogruppi disgiunti.

La funzione MPI_Comm_split viene usata quando alcuni processi non dispongono di informazioni complete degli altri membri del gruppo, ma tutti i processi hanno il colore del gruppo a cui appartengono. In questo caso, l'implementazione MPI individua gli altri membri del gruppo tramite la comunicazione.

La funzione MPI_Comm_create viene usata quando tutti i processi dispongono di informazioni complete dei membri del gruppo. In questo caso, l'implementazione MPI può evitare la comunicazione aggiuntiva necessaria per individuare l'appartenenza al gruppo.

I comunicatori creati da MPI_Comm_split non possono sovrapporsi. È possibile chiamare la funzione MPI_Comm_split più volte per superare questa limitazione. In questo modo è possibile creare più strutture di comunicazione sovrapposte. L'uso creativo dei parametri di colore e chiave in tali operazioni di suddivisione è incoraggiato.

Il risultato della funzione MPI_Comm_split su un intercommunicator è che questi processi a sinistra con lo stesso colore di tali processi a destra combinano per creare un nuovo intercommunicator. Il parametro chiave definisce il rango relativo dei processi su ogni lato dell'intercommunicator. Un nuovo comunicatore con un handle di MPI_COMM_NULL viene restituito a tali processi che specificano MPI_UNDEFINED come colore oppure specificano un colore specificato solo su un lato dell'intercommunicator.

Requisiti

Prodotto

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

Intestazione

Mpi.h; Mpif.h

Libreria

Msmpi.lib

DLL

Msmpi.dll

Vedi anche

Funzioni di Comunicatore MPI

MPI_Comm_create