Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Собирает данные из и распределяет данные по всем членам группы. Функция MPI_Alltoallv обеспечивает гибкость функции MPI_Alltoall , позволяя получать разное количество данных из каждого процесса.
Синтаксис
int MPIAPI MPI_Alltoallv(
_In_ void *sendbuf,
_In_ int *sendcounts,
_In_ int *sdispls,
MPI_Datatype sendtype,
_Out_ void *recvbuf,
_In_ int *recvcounts,
_In_ int *rdispls,
MPI_Datatype recvtype,
MPI_Comm comm
);
Параметры
sendbuf [in]
Указатель на данные, отправляемые всем процессам в группе. Число и тип данных элементов в буфере указываются в параметрах sendcount и sendtype . Каждый элемент в буфере соответствует процессу в группе.Если параметр comm ссылается на внутриобщий коммуникатор, можно указать параметр на месте, указав MPI_IN_PLACE во всех процессах. Параметры sendcount, sdispls и sendtype игнорируются. Каждый процесс вводит данные в соответствующий элемент буфера приема.
Отправляемые и получаемые данные должны иметь ту же карту типов, что и массив recvcounts и параметр recvtype . Данные считываются из расположений буфера приема, заданного параметром rdispls .
sendcounts [in]
Количество элементов данных, отправляемых этим процессом в буфер, указанный в параметре sendbuf . Если элемент вsendcount равен нулю, часть данных сообщения из этого процесса пуста.sdispls [in]
Расположение данных для каждого процесса коммуникатора относительно параметра sendbuf .Запись j указывает смещение относительно параметра sendbuf , из которого будут приниматься исходящие данные, предназначенные для процесса j.
sendtype
Тип данных MPI элементов в буфере отправки.recvbuf [out]
Указатель на буфер, содержащий данные, полученные от каждого процесса. Число и тип данных элементов в буфере указываются в параметрах recvcount и recvtype .recvcounts [in]
Количество элементов данных из каждого процесса коммуникатора в буфере получения.rdispls [in]
Расположение данных из каждого процесса коммуникатора относительно параметра recvbuf .В массивах параметров recvbuf, recvcounts и rdisplsn-йэлемент каждого массива ссылается на данные, полученные из процесса n-гокоммуникатора.
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
Комментарии
Сигнатура типа, указанная в параметре sendcount, и sendtype для процесса должны быть равны сигнатуре типа, заданной в recvcount, и параметрам recvtype принимающего процесса. Таким образом, объем отправляемых данных должен быть равен объему данных, получаемых между любой парой процессов. Отдельные сопоставления типов между отправителем и получателем по-прежнему разрешены.
Все параметры важны для всех процессов. Параметр comm должен быть одинаковым во всех процессах.
Если параметр comm ссылается на внутриобщий коммуникатор, то блок j, отправляемый из процесса i , получается процессом j и помещается в i-йблок буфера приема. Эти блоки не должны иметь одинаковый размер.
Результат вызова функции MPI_Alltoallv таков, как если бы каждый процесс отправлял сообщение каждому другому процессу с , MPI_Send(sendbuf + sdispls[i]*extent(sendtype), sendcounts[i], sendtype, I, …)
и получал сообщение от каждого другого процесса с вызовом MPI_Recv(recvbuf + rdispls[i]*extent(recvtype), recvcounts[i], recvtype, I, …)
.
Указание параметра на месте указывает, что один и тот же объем и тип данных отправляются и получаются между любыми двумя процессами в группе коммуникатора. Различные пары процессов могут обмениваться разными объемами данных. Пользователи должны убедиться, что recvcounts[j] и recvtype в процессе i соответствуют recvcounts[i] и recvtype в процессе j. Этот симметричный обмен может быть полезен в приложениях, в которых отправляемые данные не используются процессом отправки после вызова функции MPI_Alltoallv .
Если параметр comm ссылается на интеркоммуникатора, результат будет таким, как если бы каждый процесс в группе A посылает сообщение каждому процессу в группе 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 |