Compartilhar via


função MPI_Comm_create

Extrai um subconjunto de um grupo de processos para fins de computação MIMD (Vários Dados múltiplos de instrução) separados em um comunicador separado.

Sintaxe

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

Parâmetros

  • comm
    O comunicador de origem.

  • grupo
    O grupo que define o subconjunto solicitado dos processos no comunicador de origem.

  • newcomm [out]
    No retorno, contém um identificador para um novo comunicador.

Retornar valor

Retorna MPI_SUCCESS em caso de êxito. Caso contrário, o valor retornado será um código de erro.

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

Fortran

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

Comentários

O comunicador que essa função cria pode ser subdividido em subcomputações paralelas usando a função MPI_Comm_create ou outros construtores de comunicador. A função MPI_Comm_split é uma função mais geral para criar objetos MPI_Comm .

Se o parâmetro comm referenciar um intracomunicador, essa função retornará um novo comunicador com um grupo de comunicação, conforme definido pelo parâmetro group . Nenhuma informação armazenada em cache se propaga do comunicador de origem para o novo comunicador. Cada processo deve chamar com um parâmetro de grupo que seja um subgrupo do grupo associado ao comunicador de origem. Um valor possível é MPI_GROUP_EMPTY. Os processos podem especificar valores diferentes para o parâmetro group . Se um processo chamar com um grupo não vazio, todos os processos nesse grupo deverão chamar a função com os mesmos valores para o parâmetro group , ou seja, os mesmos membros na mesma ordem. Caso contrário, a função retornará um erro. Esse resultado implica que o conjunto de grupos especificado nos processos deve ser desarticulado. Se o processo de chamada for um membro do grupo especificado no parâmetro group , o parâmetro newcomm representará um comunicador com o grupo especificado como seu grupo associado. Se um processo especificar um grupo ao qual ele não pertence, por exemplo, MPI_GROUP_EMPTY, o parâmetro newcomm retornará MPI_COMM_NULL.

A interface dá suporte ao mecanismo original do MPI-1.1, que exigia o mesmo grupo em todos os processos de comm. Ele foi estendido no MPI-2.2 para permitir o uso de subgrupos não contíguos para permitir que implementações eliminem a comunicação desnecessária que a função MPI_Comm_split incorreria quando o usuário já conhece a associação dos subgrupos não contíguos.

A função MPI_Comm_create é coletiva e deve ser chamada por todos os processos no grupo do comunicador de origem. O requisito de que todo o grupo participe da chamada vem dos seguintes problemas:

  • Ele permite que a implementação coloque a função MPI_Comm_create em camadas sobre as comunicações coletivas regulares.
  • Ele fornece segurança adicional, especialmente no caso em que grupos parcialmente sobrepostos são usados para criar novos comunicadores.
  • Ele permite que implementações evitem parte da comunicação relacionada à criação de contexto.

Se o parâmetro comm fizer referência a um intercomunicador, o comunicador criado também será um intercomunicador em que o grupo local consiste apenas nos processos especificados no parâmetro group . Especifique apenas os processos no grupo local do intercomunicador de entrada que devem fazer parte do novo comunicador no parâmetro group . Todos os processos no mesmo grupo local do comunicador devem especificar o mesmo valor para o parâmetro group , ou seja, os mesmos membros na mesma ordem. Se qualquer um dos grupos não especificar pelo menos um processo no grupo local do intercomunicador ou se o processo de chamada não estiver incluído no grupo, um erro será retornado.

Requisitos

Produto

Pacote Redistribuível do HPC Pack 2012 MS-MPI, Pacote Redistribuível HPC Pack 2008 R2 MS-MPI, Pacote Redistribuível do HPC Pack 2008 MS-MPI ou Utilitários de Cliente HPC Pack 2008

parâmetro

Mpi.h; Mpif.h

Biblioteca

Msmpi.lib

DLL

Msmpi.dll

Confira também

Funções do Communicator do MPI

MPI_Comm_split