Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Собирает данные из группы и распределяет их по всем членам группы. MPI_Alltoall является расширением функции MPI_Allgather. Каждый процесс отправляет отдельные данные каждому из получателей. Блок j, отправляемый из процесса i , получается процессом j и помещается в i-йблок буфера получения.
Синтаксис
int MPIAPI MPI_Alltoall(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
MPI_Comm comm
);
Параметры
sendbuf [in]
Указатель на данные, отправляемые всем процессам в группе. Число и тип данных элементов в буфере указываются в параметрах sendcount и sendtype .Если параметр comm ссылается на внутриобщие данные, можно указать параметр на месте, указав MPI_IN_PLACE во всех процессах. Параметры sendcount и sendtype игнорируются. Каждый процесс вводит данные в соответствующий элемент буфера получения. N-йпроцесс отправляет данные в n-йэлемент буфера приема.
sendcount
Количество элементов в буфере, указанное в параметре sendbuf . Если значение sendcount равно нулю, часть данных сообщения пуста.sendtype
Тип данных MPI элементов в буфере отправки.recvbuf [out]
Указатель на буфер, содержащий данные, полученные из каждого процесса. Число и тип данных элементов в буфере указываются в параметрах recvcount и recvtype .recvcount
Количество элементов в буфере приема. Если счетчик равен нулю, часть данных сообщения пуста.recvtype
Тип данных MPI элементов в буфере приема.Comm
Дескриптор коммуникатора MPI_Comm .
Возвращаемое значение
Возвращает MPI_SUCCESS при успешном выполнении. В противном случае возвращаемое значение представляет собой код ошибки.
В Fortran возвращаемое значение хранится в параметре IERROR .
Fortran
MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
COMM, IERROR)
<type> SENDBUF(*), R.ECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
Комментарии
Все параметры важны для всех процессов. Параметр comm должен быть одинаковым во всех процессах.
Сигнатура типа, указанная параметром sendcount, и sendtype для процесса должны быть равны сигнатуре типа, указанной в параметрах recvcount, и recvtype . Таким образом, объем отправленных данных должен быть равен объему данных, получаемых между любой парой процессов. Сопоставление различающихся типов между отправителем и получателем по-прежнему разрешено.
Если параметр comm ссылается на внутриобщий коммуникационатор, результат вызова MPI_ALLGATHER(...) будет таким же, как если бы каждый процесс выполнял отправку в каждый процесс, включая сам с помощью MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …), и получение от каждого другого процесса с помощью MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …).
Если параметр comm ссылается на интеркоммуникатор, результат будет таким, как если бы каждый процесс в группе A отправлял сообщение каждому процессу в группе B, и наоборот. Буфер отправки j-гопроцесса i в группе A должен быть согласован с буфером i-гополучения процесса j в группе B, и наоборот.
Количество элементов, отправляемых процессами в группе A, не должно совпадать с числом элементов, отправляемых процессами в группе B. В частности, можно перемещать данные только в одном направлении, указав sendcount == 0 для обмена данными в обратном направлении.
Требования
Продукт |
Распространяемый пакет HPC 2012 MS-MPI, пакет HPC 2008 R2 распространяемый пакет MS-MPI, пакет HPC 2008 MS-MPI или клиентские служебные программы пакета HPC 2008 |
Заголовок |
Mpi.h; Mpif.h |
Библиотека |
Msmpi.lib |
DLL |
Msmpi.dll |