Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Собирает данные из группы и распределяет их по всем членам группы. Функция MPI_Alltoallw является наиболее общей формой полного обмена данными в этом API. MPI_Alltoallw включает отдельную спецификацию количества, смещения и типа данных.
Синтаксис
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
);
Параметры
sendbuf [in]
Указатель на данные, отправляемые всем процессам в группе. Число и тип данных элементов в буфере указываются в параметрах sendcount и sendtype . Каждый элемент в буфере соответствует процессу в группе.Если параметр comm ссылается на внутриобщие данные, можно указать параметр на месте, указав MPI_IN_PLACE во всех процессах. Параметры sendcount, sdispls и sendtype игнорируются. Каждый процесс вводит данные в соответствующий элемент буфера получения.
Отправляемые и получаемые данные должны иметь тот же тип сопоставления, что и массив recvcounts и параметр recvtype , и считываться из расположений буфера приема, как указано в параметре rdispls .
sendcounts [in]
Количество элементов данных, отправляемых этим процессом в буфер, как указано в параметре sendbuf . Если элемент в sendcount равен нулю, то часть данных сообщения из этого процесса пуста.sdispls [in]
Расположение (в байтах) относительно параметра sendbuf данных для каждого процесса communicator.Запись j указывает смещение относительно параметра sendbuf , из которого будут приниматься исходящие данные, предназначенные для процесса j.
sendtypes [in]
Тип данных для каждого элемента в буфере отправки. Запись j указывает тип данных, отправляемых в процесс j в группе.recvbuf [out]
Указатель на буфер, содержащий данные, полученные из каждого процесса. Число и тип данных элементов в буфере указываются в параметрах recvcount и recvtype .recvcounts [in]
Количество элементов данных из каждого процесса коммуникатора в буфере получения.rdispls [in]
Расположение (в байтах) относительно параметра recvbuf данных из каждого процесса коммуникатора. Запись i указывает смещение относительно параметра recvbuf , в котором размещаются входящие данные из процесса i.В массивах параметров recvbuf, recvcounts и rdisplsn-йэлемент каждого массива ссылается на данные, полученные из процесса n-гокоммуникатора.
recvtypes [in]
Тип данных каждого элемента в буфере. Запись i указывает тип данных, получаемых из процесса i.Comm
Дескриптор коммуникатора MPI_Comm .
Возвращаемое значение
Возвращает MPI_SUCCESS при успешном выполнении. В противном случае возвращаемое значение представляет собой код ошибки.
В Fortran возвращаемое значение хранится в параметре 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
Комментарии
Важно!
Чтобы обеспечить максимальную гибкость, смещение блоков в буферах отправки и получения указывается в байтах.
Все параметры важны для всех процессов. Параметр comm должен быть одинаковым во всех процессах.
Если параметр comm ссылается на внутриобщие данные, то блок j, отправляемый из процесса i , получается процессом j и помещается в i-йблок буфера получения. Эти блоки не должны иметь одинаковый размер.
Сигнатура типа, указанная параметрами sendcounts[j] и sendtypes[j] для процесса i , должна быть равна сигнатуре типа, связанной с recvcounts[i] и recvtypes[i] в процессе j. Таким образом, объем отправленных данных должен быть равен объему данных, получаемых между любой парой процессов. Сопоставление различающихся типов между отправителем и получателем по-прежнему разрешено.
Результат вызова функции MPI_Alltoallw , как если бы каждый процесс отправлял сообщение каждому другому процессу с MPI_Send(sendbuf+sdispls[i],sendcounts[i],sendtypes[i] ,i,...)
помощью и получал сообщение от каждого другого процесса с вызовом MPI_Recv(recvbuf+rdispls[i],recvcounts[i],recvtypes[i] ,i,...)
.
Указание параметра на месте указывает, что один и тот же объем и тип данных отправляются и получаются между любыми двумя процессами в группе коммуникатора. Различные пары процессов могут обмениваться разными объемами данных. Пользователи должны убедиться, что recvcounts[j] и recvtype в процессе i соответствуют recvcounts[i] и recvtype в процессе j.
Если параметр comm ссылается на интеркоммуникатор, результат будет таким же, как если бы каждый процесс в группе А отправлял сообщение каждому процессу в группе B, и наоборот. Буфер отправки j-гопроцесса i в группе A должен быть согласован с буфером i-гополучения процесса j в группе B, и наоборот.
Требования
Продукт |
Распространяемый пакет HPC 2012 MS-MPI, пакет HPC 2008 R2 распространяемый пакет MS-MPI, пакет HPC 2008 MS-MPI или клиентские служебные программы пакета HPC 2008 |
Заголовок |
Mpi.h; Mpif.h |
Библиотека |
Msmpi.lib |
DLL |
Msmpi.dll |