Dela via


funktionen MPI_Comm_create

Extraherar en delmängd av en grupp processer i syfte att separera MIMD-beräkningen (Multiple Instruction Multiple Data) i en separat kommunikatör.

Syntax

int MPIAPI MPI_Comm_create(
        MPI_Comm  comm,
        MPI_Group group,
  _Out_ MPI_Comm  *newcomm
);

Parametrar

  • Comm
    Källkommunikatören.

  • grupp
    Gruppen som definierar den begärda delmängden av processerna i källkommunikatören.

  • newcomm [out]
    Vid retur innehåller ett handtag till en ny kommunikatör.

Returvärde

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

I Fortran lagras returvärdet i parametern IERROR .

Fortran

    MPI_COMM_CREATE(COMM,GROUP,NEWCOMM,IERROR)
        INTEGER COMM, GROUP, NEWCOMM, IERROR

Kommentarer

Den kommunikatör som den här funktionen skapar kan delas in ytterligare i parallella underberäkningar med hjälp av funktionen MPI_Comm_create eller andra kommunikatörskonstruktorer. Funktionen MPI_Comm_split är en mer allmän funktion för att skapa MPI_Comm objekt.

Om kommaparametern refererar till en intracommunicator returnerar den här funktionen en ny kommunikatör med en kommunikationsgrupp som definieras av gruppparametern. Ingen cachelagrad information sprids från källkommunikatören till den nya kommunikatören. Varje process måste anropa med en gruppparameter som är en undergrupp av gruppen som är associerad med källkommunikatören. Ett möjligt värde är MPI_GROUP_EMPTY. Processerna kan ange olika värden för gruppparametern . Om en process anropar med en icke-tom grupp måste alla processer i gruppen anropa funktionen med samma värden för gruppparametern, det vill sa samma medlemmar i samma ordning. Annars returnerar funktionen ett fel. Det här resultatet innebär att den uppsättning grupper som anges i processerna måste vara åtskilda. Om anropsprocessen är medlem i gruppen som anges i gruppparametern representerar parametern newcomm en kommunikatör med den angivna gruppen som associerad grupp. Om en process anger en grupp som den inte tillhör, till exempel MPI_GROUP_EMPTY, returnerar parametern newcommMPI_COMM_NULL.

Gränssnittet stöder den ursprungliga mekanismen från MPI-1.1, som krävde samma grupp i alla processer med kommatecken. Den utökades i MPI-2.2 för att möjliggöra användning av olika undergrupper för att möjliggöra implementeringar för att eliminera onödig kommunikation som den MPI_Comm_split funktionen skulle medföra när användaren redan känner till medlemskapet i de olika undergrupperna.

Funktionen MPI_Comm_create är kollektiv och måste anropas av alla processer i källkommunikatorns grupp. Kravet på att hela gruppen ska delta i anropet kommer från följande problem:

  • Det gör att implementeringen kan lägga den MPI_Comm_create funktionen ovanpå regelbunden kollektiv kommunikation.
  • Det ger ytterligare säkerhet, särskilt när delvis överlappande grupper används för att skapa nya kommunikatörer.
  • Den tillåter implementeringar för att undvika en del av kommunikationen som är relaterad till att skapa kontext.

Om comm-parametern refererar till en intercommunicator är den skapade kommunikatören också en intercommunicator där den lokala gruppen endast består av de processer som anges i gruppparametern . Ange endast de processer i den lokala gruppen för indataintercommunicator som ska ingå i den nya kommunikatören i gruppparametern . Alla processer i samma lokala grupp i kommunikatören måste ange samma värde för gruppparametern , dvs. samma medlemmar i samma ordning. Om någon av grupperna inte anger minst en process i den lokala gruppen i intercommunicator, eller om anropsprocessen inte ingår i gruppen, returneras ett fel.

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 Communicator Functions

MPI_Comm_split