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 |