Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Собирает данные от всех участников группы к одному участнику.
Синтаксис
int MPIAPI MPI_Gather(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_opt_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
int root,
MPI_Comm comm
);
Параметры
sendbuf [in]
Указатель на буфер, содержащий данные для отправки в корневой процесс.Если параметр comm ссылается на внутриобщий коммуникатор, можно указать параметр на месте, указав MPI_IN_PLACE во всех процессах. Параметры sendcount и sendtype игнорируются. Каждый процесс вводит данные в соответствующий элемент буфера приема. N-йпроцесс отправляет данные n-муэлементу буфера приема. Предполагается, что данные, отправляемые корневым процессом, должны находиться в правильном месте в буфере приема.
sendcount
Количество элементов в буфере отправки. Если значение sendcount равно нулю, часть данных сообщения пуста.sendtype
Тип данных каждого элемента в буфере.recvbuf [out, optional]
Указатель на буфер корневого процесса, который содержит данные, полученные от каждого процесса. Он включает данные, отправляемые корневым процессом. Этот параметр имеет значение только в корневом процессе. Параметр recvbuf игнорируется для всех некорневых процессов.recvcount
Количество элементов, полученных от каждого процесса. Это число не является общим числом элементов в буфере. Если число равно нулю, часть данных сообщения пуста. Этот параметр имеет значение только в корневом процессе.recvtype
Тип данных MPI каждого элемента в буфере. Этот параметр имеет значение только в корневом процессе.root
Ранг принимающего процесса в указанном коммуникаторе.Comm
Дескриптор MPI_Comm .
Возвращаемое значение
Возвращает MPI_SUCCESS об успешном выполнении. В противном случае возвращаемое значение является кодом ошибки.
В Fortran возвращаемое значение хранится в параметре IERROR .
Fortran
MPI_GATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR
Комментарии
Все параметры функции важны для корневого процесса, только sendbuf, sendcount, sendtype, root и comm имеют важное значение в других процессах. Параметры root и comm должны быть одинаковыми во всех процессах.
Как правило, производные типы данных разрешены для параметров sendtype и recvtype . Подпись типа, заданная параметрами sendtype и recvtype для каждого процесса, должна быть равна сигнатуре типа параметров recvcount и sendcount в корневом процессе. Объем отправляемых данных должен быть равен объему данных, получаемых между корневым процессом и каждым отдельным процессом. Отдельные сопоставления типов между отправителем и получателем по-прежнему разрешены.
Спецификация счетчиков и типов не должна приводить к тому, что любое расположение в корневом каталоге будет записано несколько раз. Такой вызов является ошибочным.
Если параметр comm ссылается на внутриобщие данные, все процессы отправляют содержимое буфера отправки корневому процессу. Корневой процесс получает сообщения и сохраняет их в порядке ранжирования. Результат будет таким, как если бы каждый из процессов n в группе выполнял вызов MPI_Send(sendbuf, sendcount, sendtype, root, …); а корневой элемент выполнил n вызовов .MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …) Значение extent(recvtype) получается с помощью функции MPI_Type_get_extent . Альтернативное описание функции заключается в том, что n сообщений, отправляемых процессами в группе, объединяются в порядке ранжирования, а полученное сообщение получается корнем, как при вызове MPI_RECV(recvbuf, recvcountn, recvtype, ...). Буфер получения игнорируется для всех некорневых процессов.
Если параметр comm ссылается на интеркоммуникатор, то вызов включает все процессы в интеркоммуникаторе, но с одной группой, группой A, которая определяет корневой процесс. Все процессы в другой группе, группе B, задают одно и то же значение в корневом параметре, то есть ранг корневого процесса в группе A. Корневой процесс задает значение MPI_ROOT в параметре root . Все остальные процессы в группе A задают значение MPI_PROC_NULL в параметре root . Данные передаются из корневого процесса всем процессам в группе B. Параметры буфера процессов в группе B должны соответствовать параметру buffer корневого процесса.
Требования
Продукт |
Распространяемый пакет HPC 2012 MS-MPI, пакет HPC 2008 R2 распространяемый пакет MS-MPI, пакет HPC 2008 MS-MPI распространяемый пакет или служебные программы клиента ПАКЕТА HPC 2008 |
Заголовок |
Mpi.h; Mpif.h |
Библиотека |
Msmpi.lib |
DLL |
Msmpi.dll |