next up previous contents
Next: Рассылка Up: Операции, которые пересылают данные Previous: Широковещательная передача   Contents

Сбор


------------------------------------------------------------------ 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 должны быть совместимы с аргументами буфера приема корня.


next up previous contents
Next: Рассылка Up: Операции, которые пересылают данные Previous: Широковещательная передача   Contents
Alex Otwagin 2002-12-10