------------------------------------------------------------------
MPI_GATHER(sendbuf, sendcount, sendtype, recvbuf,
recvcount, recvtype, root, comm)
------------------------------------------------------------------
IN | sendbuf | Стартовый адрес буфера передачи (по выбору) | ||||
IN | sendcount | Количество элементов в буфере передачи (целое) | ||||
IN | sendtype | Тип данных элементов буфера передачи (указатель) | ||||
OUT | recvbuf | Адрес буфера приема (по выбору, имеет значение только для корня) | ||||
IN | recvcount | Количество элементов для любого одиночного приема (целое, имеет значение только для корня) | ||||
IN | recvtype | Тип данных элементов буфера приема (указатель, имеет значение только для корня) | ||||
IN | root | Ранг принимающего процесса (целое) | ||||
IN | comm | Коммуникатор (указатель) |
void MPI::Comm::Gather(const void* sendbuf, int sendcount, const
MPI::Datatype& sendtype, void* recvbuf, int recvcount,
const MPI::Datatype& recvtype, int root) const = 0
Опция in-place
для интракоммуникаторов указывается передачей
MPI_IN_PLACE
в качестве значения sendbuf
для корня. В этом
случае sendcount
и sendtype
игнорируются, и предполагается,
что вклад корня в собираемый вектор осуществляется на корректном месте в
буфере приема.
Если comm
- интеркоммуникатор, то вызов затрагивает все процессы в
интеркоммуникаторе, но корневой процесс будет определять одна группа
(группа A
). Всем процессам в другой группе (группе B
) будут
переданы одинаковые значения в аргументе root
, который является
номером корня в группе A
. Корень получит значение MPI_ROOT
в root
. Все другие процессы из группы A
получат значение
MPI_PROC_NULL
в root
. Данные собираются от всех процессов
из группы B
и передаются корню. Аргументы буферов передачи
процессов из группы B
должны быть совместимы с аргументами буфера
приема корня.
------------------------------------------------------------------
MPI_GATHERV(sendbuf, sendcount, sendtype, recvbuf,
recvcounts, displs, recvtype, root, comm)
------------------------------------------------------------------
IN | sendbuf |
Стартовый адрес буфера передачи (по выбору) | ||||
IN | sendcount |
Количество элементов в буфере передачи (целое) | ||||
IN | sendtype |
Тип данных элементов буфера передачи (указатель) | ||||
OUT | recvbuf |
Адрес буфера приема (по выбору, имеет значение только для корня) | ||||
IN | recvcounts |
Целочисленный массив (длины, равной длине группы), содержащий количество элементов, принимаемых от каждого процесса (имеет значение только для корня) | ||||
IN | displs |
Целочисленный массив (длины, равной длине группы). Элемент i указывает относительное смещение в recvbuf, с которого будут помещаться приходящие от процесса i данные (имеет значение только для корня) | ||||
IN | recvtype |
Тип данных элементов буфера приема (указатель, имеет значение только для корня) | ||||
IN | root |
Ранг принимающего процесса (целое) | ||||
IN | comm |
Коммуникатор (указатель) |
void MPI::Comm::Gatherv(const void* sendbuf, int sendcount,
const MPI::Datatype& sendtype,
void* recvbuf, const int recvcounts[],
const int displs[], const MPI::Datatype& recvtype,
int root) const = 0
Опция in-place
для интракоммуникаторов указывается передачей
MPI_IN_PLACE
в качестве значения sendbuf
для корня. В этом
случае sendcount
и sendtype
игнорируются, и предполагается,
что вклад корня в собираемый вектор осуществляется на корректном месте в
буфере приема.
Если comm
- интеркоммуникатор, то вызов затрагивает все процессы в
интеркоммуникаторе, но корневой процесс будет определять одна группа
(группа A
). Всем процессам в другой группе (группе B
) будут
переданы одинаковые значения в аргументе root
, который является
номером корня в группе A
. Корень получит значение MPI_ROOT
в root
. Все другие процессы из группы A
получат значение
MPI_PROC_NULL
в root
. Данные собираются от всех процессов
из группы B
и передаются корню. Аргументы буферов передачи
процессов из группы B
должны быть совместимы с аргументами буфера
приема корня.