------------------------------------------------------------------
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
игнорируются, и корень не
''посылает'' данные сам себе. Предполагается, что вектор рассылки по
прежнему содержит сегментов, где - размер группы; корневой
сегмент, который корень должен ''посылать'' себе, не перемещается.
Если 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 | Целочисленный массив (длины, равной длине группы). Элемент указывает относительное смещение в recvbuf, с которого будут посылаться данные процессу | ||||
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
игнорируются, и корень не
''посылает'' данные сам себе. Предполагается, что вектор рассылки по
прежнему содержит сегментов, где - размер группы; корневой
сегмент, который корень должен ''посылать'' себе, не перемещается.
Если comm
- интеркоммуникатор, то вызов затрагивает все процессы в
интеркоммуникаторе, но с одной группой (группа A
), определяющей
корневой процесс. Всем процессам в другой группе (группе B
) будут
переданы одинаковые значения в аргументе root
, который является
номером корня в группе A
. Корень получит значение MPI_ROOT
в root
. Все другие процессы из группы A
получат значение
MPI_PROC_NULL
в root
. Данные рассылаются от корня всем
процессам в группе B
. Аргументы буферов передачи процессов из
группы B
должны быть совместимы с аргументами буфера приема корня.