Partilhar via


função MPI_Comm_split

Particiona o grupo que está associado ao comunicador especificado num número especificado de subgrupos desarticulados.

Sintaxe

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

Parâmetros

  • vírgula
    O comunicador a dividir.

  • cor
    O novo comunicador ao qual o processo de chamada deve ser atribuído. O valor da cor tem de ser não negativo.

    Se um processo especificar o valor de corMPI_UNDEFINED, a função devolve MPI_COMM_NULL no novo parâmetrocomm ao processo de chamada.

  • chave
    A classificação relativa do processo de chamada no grupo do novo comunicador. Para obter detalhes sobre como utilizar os parâmetros de chave e cor , veja Observações.

  • newcomm [out]
    Na devolução, contém uma alça para um novo comunicador.

Valor devolvido

Devolve MPI_SUCCESS com êxito. Caso contrário, o valor devolvido é um código de erro.

Em Fortran, o valor devolvido é armazenado no parâmetro IERROR .

Fortran

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

Observações

Trata-se de uma função coletiva, mas cada processo pode especificar valores diferentes para os parâmetros de cor e chave .

Este é um mecanismo extremamente poderoso para dividir um único grupo de processos de comunicação num número arbitrário de subgrupos. O número de subgrupos é determinado pelo número de cores especificadas em todos os processos. Os comunicadores resultantes não se sobrepõem. Subdividir um comunicador desta forma é útil para definir uma hierarquia de cálculos, como, por exemplo, álgebra multigrid ou linear.

Cada subgrupo contém todos os processos que especificaram o mesmo valor para o parâmetro de cor . Em cada subgrupo, os processos são classificados pela ordem definida pelo valor do parâmetro chave , com os laços quebrados de acordo com a respetiva classificação no grupo antigo.

Com um comunicador intracomunicador, uma chamada para MPI_COMM_CREATE(comm, group, new-comm) é equivalente a uma chamada para MPI_COMM_SPLIT(comm, color, key, newcomm), em que os processos que são membros do grupo especificam o número do grupo, com base numa numeração exclusiva de todos os grupos desarticulados, para o parâmetro de cor e a respetiva classificação no grupo para o parâmetro chave . Todos os processos que não são membros do grupo especificam MPI_UNDEFINED para o parâmetro de cor .

Para qualquer cor, os valores-chave não têm de ser exclusivos. A função MPI_Comm_split ordena os processos por ordem de acordo com o valor do parâmetro chave e ordena os laços pela respetiva classificação relativa no grupo de origem. Se o mesmo valor for especificado para todos os parâmetros de chave , todos os processos numa determinada cor têm a mesma ordem de classificação relativa que tinham no grupo principal.

Para os intracomunários, as funções MPI_Comm_split e MPI_Comm_create fornecem uma capacidade semelhante para dividir um grupo de comunicação em subgrupos desarticulados.

A função MPI_Comm_split é utilizada quando alguns processos não têm informações completas dos outros membros no grupo, mas todos os processos têm a cor do grupo ao qual pertencem. Neste caso, a implementação do MPI detetará os outros membros do grupo através da comunicação.

A função MPI_Comm_create é utilizada quando todos os processos têm informações completas dos membros do grupo. Neste caso, a implementação do MPI pode evitar a comunicação adicional necessária para detetar a associação ao grupo.

Os comunicadores criados por MPI_Comm_split não se podem sobrepor. Pode chamar a função MPI_Comm_split várias vezes para ultrapassar esta limitação. Pode criar várias estruturas de comunicação sobrepostas desta forma. É incentivada a utilização criativa da cor e dos parâmetros-chave nessas operações de divisão.

O resultado da função MPI_Comm_split num intercomunicador é que esses processos à esquerda com a mesma cor que esses processos à direita combinam para criar um novo intercomunicador. O parâmetro chave define a classificação relativa dos processos em cada lado do intercomunicador. Um novo comunicador com um identificador de MPI_COMM_NULL é devolvido aos processos que especificam MPI_UNDEFINED como a respetiva cor ou especifica uma cor que só é especificada num dos lados do intercomunicador.

Requisitos

Produto

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

Cabeçalho

Mpi.h; Mpif.h

Biblioteca

Msmpi.lib

DLL

Msmpi.dll

Ver também

Funções do Comunicador MPI

MPI_Comm_create