Função MPI_Scatterv
Dispersa dados de um membro em todos os membros de um grupo. A função MPI_Scatterv executa o inverso da operação executada pela função MPI_Gatherv .
Sintaxe
int MPIAPI MPI_Scatterv(
_In_ void *sendbuf,
_In_ int *sendcounts,
_In_ int *displs,
MPI_Datatype sendtype,
_Out_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
int root,
MPI_Comm comm
);
Parâmetros
sendbuf [in]
O ponteiro para um buffer que contém os dados a serem enviados pelo processo raiz.O parâmetro sendbuf é ignorado para todos os processos não raiz.
Se o parâmetro comm fizer referência a um intracomunhador, você poderá especificar uma opção in-loco especificando MPI_IN_PLACE no processo raiz. Os parâmetros recvcount e recvtype são ignorados. O vetor disperso ainda é considerado para conter n segmentos, em que n é o tamanho do grupo; o segmento que corresponde ao processo raiz não é movido.
sendcounts [in]
O número de elementos a serem enviados para cada processo. Se sendcount[i] for zero, a parte de dados da mensagem desse processo estará vazia.O parâmetro sendcount é ignorado para todos os processos não raiz.
displs [in]
Os locais dos dados a serem enviados para cada processo de comunicador. Cada local na matriz é relativo ao elemento correspondente da matriz sendbuf .Nas matrizes de parâmetro sendbuf, sendcounts e displs , o nth elemento de cada matriz refere-se aos dados a serem enviados para o nth processo do comunicador.
Esse parâmetro é significativo apenas no processo raiz.
sendtype
O tipo de dados MPI de cada elemento no buffer.O parâmetro sendcount é ignorado para todos os processos não raiz.
recvbuf [out]
O ponteiro para um buffer que contém os dados recebidos em cada processo. O número e o tipo de dados dos elementos no buffer são especificados nos parâmetros recvcount e recvtype .recvcount
O número de elementos no buffer de recebimento. Se a contagem for zero, a parte de dados da mensagem estará vazia.recvtype
O tipo de dados dos elementos no buffer de recebimento.root
A classificação no processo de envio dentro do comunicador especificado.comm
O identificador MPI_Comm comunicador.
Retornar valor
Retorna MPI_SUCCESS com êxito. Caso contrário, o valor retornado será um código de erro.
No Fortran, o valor retornado é armazenado no parâmetro IERROR .
Fortran
MPI_SCATTERV(SENDBUF, SENDCOUNT, DISPLS, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, DISPLS(*), RECVCOUNT(*), RECVTYPE, ROOT, COMM, IERROR
Comentários
A função MPI_Scatterv estende a funcionalidade da função MPI_Scatter permitindo que uma contagem variável de dados, conforme especificado na matriz sendcounts , seja enviada para cada processo.
A especificação de contagens, tipos e deslocamentos não deve fazer com que qualquer local na raiz seja lido mais de uma vez.
Todos os parâmetros de função são significativos no processo raiz, somente os parâmetros recvbuf, recvcount, recvtype, root e comm são significativos nos outros processos. Os parâmetros raiz e comm devem ser idênticos em todos os processos.
A assinatura de tipo conforme especificado pela conta de envio e os parâmetros sendtype para o processo raiz devem ser iguais à assinatura de tipo, conforme especificado pela contagem recvcount e parâmetros revtype para todos os processos. 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.
Se comm for um intracommunicator, o resultado será como se a raiz executada n enviasse operações MPI_Send(sendbuf + displs[i]*extent(sendtype), sendcounts[i], sendtype, I, …)
; e cada processo executasse um recebimento, MPI_Recv(recvbuf, recvcount, recvtype, i,…)
.
Se o parâmetro comm fizer referência a um intercomunhador, a chamada envolverá todos os processos no intercomuniciador, mas com um grupo, o grupo A, que define o processo raiz. Todos os processos no outro grupo, grupo B, definem o mesmo valor no parâmetro raiz , ou seja, a classificação do processo raiz no grupo A. O processo raiz define o valor MPI_ROOT no parâmetro raiz . Todos os outros processos no grupo A definem o valor MPI_PROC_NULL no parâmetro raiz . Os dados são transmitidos do processo raiz para todos os processos no grupo B. Os parâmetros de buffer dos processos no grupo B devem ser consistentes com o parâmetro buffer do processo raiz.
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 |