next up previous contents
Next: ''All'' формы и ''all-to-all'' Up: Операции, которые пересылают данные Previous: Сбор   Contents

Рассылка


------------------------------------------------------------------ MPI_SCATTER(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::Scatter(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 игнорируются, и корень не ''посылает'' данные сам себе. Предполагается, что вектор рассылки по прежнему содержит $n$ сегментов, где $n$ - размер группы; корневой сегмент, который корень должен ''посылать'' себе, не перемещается.

Если comm - интеркоммуникатор, то вызов затрагивает все процессы в интеркоммуникаторе, но с одной группой (группа A), определяющей корневой процесс. Всем процессам в другой группе (группе B) будут переданы одинаковые значения в аргументе root, который является номером корня в группе A. Корень получит значение MPI_ROOT в root. Все другие процессы из группы A получат значение MPI_PROC_NULL в root. Данные рассылаются от корня всем процессам в группе B. Аргументы буферов передачи процессов из группы B должны быть совместимы с аргументами буфера приема корня.


------------------------------------------------------------------ MPI_SCATTERV(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm) ------------------------------------------------------------------

IN sendbuf Стартовый адрес буфера передачи (по выбору, имеет значение только для корня)        
IN sendcounts Целочисленный массив (длины, равной длине группы), указывающий количество элементов для передачи каждому процессу        
IN displs Целочисленный массив (длины, равной длине группы). Элемент $i$ указывает относительное смещение в recvbuf, с которого будут посылаться данные процессу $i$        
IN sendtype Тип данных элементов буфера передачи (указатель)        
OUT recvbuf Адрес буфера приема (по выбору)        
IN recvcount Количество элементов в буфере приема (целое)        
IN recvtype Тип данных элементов буфера приема (указатель)        
IN root Ранг передающего процесса (целое)        
IN comm Коммуникатор (указатель)        

void MPI::Comm::Scatterv(const void* sendbuf, const int sendcounts[], const int displs[], const MPI::Datatype& sendtype, void* recvbuf, int recvcount, const MPI::Datatype& recvtype, int root) const = 0

Опция in-place для интракоммуникаторов указывается передачей MPI_IN_PLACE в качестве значения sendbuf для корня. В этом случае sendcount и sendtype игнорируются, и корень не ''посылает'' данные сам себе. Предполагается, что вектор рассылки по прежнему содержит $n$ сегментов, где $n$ - размер группы; корневой сегмент, который корень должен ''посылать'' себе, не перемещается.

Если comm - интеркоммуникатор, то вызов затрагивает все процессы в интеркоммуникаторе, но с одной группой (группа A), определяющей корневой процесс. Всем процессам в другой группе (группе B) будут переданы одинаковые значения в аргументе root, который является номером корня в группе A. Корень получит значение MPI_ROOT в root. Все другие процессы из группы A получат значение MPI_PROC_NULL в root. Данные рассылаются от корня всем процессам в группе B. Аргументы буферов передачи процессов из группы B должны быть совместимы с аргументами буфера приема корня.


next up previous contents
Next: ''All'' формы и ''all-to-all'' Up: Операции, которые пересылают данные Previous: Сбор   Contents
Alex Otwagin 2002-12-10