Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Coleta dados de e dispersão de dados para todos os membros de um grupo. A função MPI_Alltoallw é a forma mais geral de troca de dados completa nesta API. MPI_Alltoallw habilita a especificação separada da contagem, deslocamento e tipo de dados.
Sintaxe
int MPIAPI MPI_Alltoallw(
_In_ void *sendbuf,
_In_ int *sendcounts[],
_In_ int *sdispls[],
_In_ MPI_Datatype sendtypes[],
_Out_ void *recvbuf,
_In_ int *recvcounts[],
_In_ int *rdispls[],
_In_ MPI_Datatype recvtypes[],
MPI_Comm comm
);
Parâmetros
sendbuf [in]
O ponteiro para os dados a serem enviados para todos os processos no grupo. O número e o tipo de dados dos elementos no buffer são especificados nos parâmetros sendcount e sendtype . Cada elemento no buffer corresponde a um processo no grupo.Se o parâmetro comm fizer referência a um intracomunicador, você poderá especificar uma opção in-loco especificando MPI_IN_PLACE em todos os processos. Os parâmetros sendcount, sdispls e sendtype são ignorados. Cada processo insere dados no elemento de buffer de recebimento correspondente.
Os dados enviados e recebidos devem ter o mesmo mapa de tipos, conforme especificado pela matriz recvcounts e pelo parâmetro recvtype , e são lidos dos locais do buffer de recebimento, conforme especificado pelo parâmetro rdispls .
sendcounts [in]
O número de elementos de dados que esse processo envia no buffer conforme especificado no parâmetro sendbuf . Se um elemento em sendcount for zero, a parte de dados da mensagem desse processo estará vazia.sdispls [in]
O local, em bytes, em relação ao parâmetro sendbuf , dos dados para cada processo do comunicador.Entry j especifica o deslocamento em relação ao parâmetro sendbuf do qual usar os dados de saída destinados ao processo j.
sendtypes [in]
O tipo de dados para cada um dos elementos no buffer de envio. Entry j especifica o tipo de dados que é enviado para processar j no grupo.recvbuf [out]
O ponteiro para um buffer que contém os dados recebidos de cada processo. O número e o tipo de dados dos elementos no buffer são especificados nos parâmetros recvcount e recvtype .recvcounts [in]
O número de elementos de dados de cada processo de comunicador no buffer de recebimento.rdispls [in]
O local, em bytes, em relação ao parâmetro recvbuf , dos dados de cada processo do comunicador. A entrada i especifica o deslocamento em relação ao parâmetro recvbuf no qual colocar os dados de entrada do processo i.Nas matrizes de parâmetro recvbuf, recvcounts e rdispls , o nºelemento de cada matriz refere-se aos dados recebidos do nºprocesso do comunicador.
recvtypes [in]
O tipo de dados de cada elemento no buffer. A entrada i especifica o tipo de dados recebidos do processo i.comm
O MPI_Comm identificador do 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_ALLTOALLW(SENDBUF, SENDCOUNT, SDISPLS, SENDTYPE, RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPE,COMM, IERROR)
<type> SENDBUF(*), R.ECVBUF(*)
INTEGER SENDCOUNT, SENDTYPES(*), SDISPLS(*), RECVCOUNTS(*), RDISPLS(*), RECVTYPE, COMM, IERROR
Comentários
Importante
Para permitir a máxima flexibilidade, o deslocamento de blocos dentro dos buffers de envio e recebimento é especificado em bytes.
Todos os parâmetros são significativos em todos os processos. O parâmetro comm deve ser idêntico em todos os processos.
Se o parâmetro comm fizer referência a um intracommunicator, o bloco jth enviado do processo i será recebido pelo processo j e será colocado no i th bloco do buffer de recebimento. Esses blocos não precisam ter o mesmo tamanho.
A assinatura de tipo especificada pelos parâmetros sendcounts[j] e sendtypes[j] para o processo i deve ser igual à assinatura de tipo associada às recvcounts[i] e recvtypes[i] no processo j. Portanto, a quantidade de dados enviados deve ser igual à quantidade de dados recebidos entre qualquer par de processos. Mapas de tipo distintos entre remetente e receptor ainda são permitidos.
O resultado de uma chamada para a função MPI_Alltoallw é como se cada processo enviasse uma mensagem para todos os outros processos com MPI_Send(sendbuf+sdispls[i],sendcounts[i],sendtypes[i] ,i,...)e recebesse uma mensagem de todos os outros processos com uma chamada para MPI_Recv(recvbuf+rdispls[i],recvcounts[i],recvtypes[i] ,i,...).
Especificar a opção in-loco indica que a mesma quantidade e tipo de dados são enviados e recebidos entre os dois processos no grupo do comunicador. Diferentes pares de processos podem trocar diferentes quantidades de dados. Os usuários devem garantir que recvcounts[j] e recvtype no processo correspondamrecvcounts[i] e recvtype no processo j.
Se o parâmetro comm fizer referência a um intercomunicador, o resultado será como se cada processo no grupo A enviasse uma mensagem para cada processo no grupo B e vice-versa. O jth send buffer do processo i no grupo A deve ser consistente com o ith receive buffer do processo j no grupo B e vice-versa.
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 |