The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа
next up previous contents
Next: Другие операции Up: Расширенные коллективные операции Previous: ''All'' формы и ''all-to-all''   Contents

Редукции


------------------------------------------------------------------
MPI_REDUCE(sendbuf, recvbuf, count, datatype, op, root, comm)
------------------------------------------------------------------

IN sendbuf Адрес буфера передачи (по выбору)        
OUT recvbuf Адрес буфера приема (по выбору, имеет значение только для корня)        
IN count Количество элементов в буфере передачи (целое)        
IN datatype Тип данных элементов буфера передачи (указатель)        
IN op Операция редукции (указатель)        
IN root Ранг корневого процесса (целое)        
IN comm Коммуникатор (указатель)        

void MPI::Comm::Reduce(const void* sendbuf, void* recvbuf,
                       int count, const MPI::Datatype& datatype,
                       const MPI::Op& op, int root) const = 0

Опция in-place для интракоммуникаторов указывается передачей MPI_IN_PLACE в качестве значения аргумента sendbuf для корня. В этом случае входные данные берутся в корне из буфера приема, где они будут замещены выходными данными.

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


------------------------------------------------------------------
MPI_ALLREDUCE(sendbuf, recvbuf, count, datatype, op, comm)
------------------------------------------------------------------

IN sendbuf Стартовый адрес буфера передачи (по выбору)        
OUT recvbuf Стартовый адрес буфера приема (по выбору)        
IN count Количество элементов в буфере передачи (целое)        
IN datatype Тип данных элементов буфера передачи (указатель)        
IN op Операция (указатель)        
IN comm Коммуникатор (указатель)        

void MPI::Comm::Allreduce(const void* sendbuf,
                          void* recvbuf, int count,
                          const MPI::Datatype& datatype,
                          const MPI::Op& op) const = 0

Опция in-place для интракоммуникаторов указывается передачей MPI_IN_PLACE в качестве значения аргумента sendbuf для корня. В этом случае, входные данные берутся каждым процессом из буфера приема, где они будут замещены выходными данными.

Если comm - интеркоммуникатор, то результат редукции данных, предоставляемых процессами из группы A, сохраняется в каждом процессе из группы B, и наоборот. Для обеих групп должно обеспечиваться равенство значений count.


------------------------------------------------------------------
MPI_REDUCE_SCATTER(sendbuf, recvbuf, recvcounts,
                   datatype, op, comm)
------------------------------------------------------------------

IN sendbuf Стартовый адрес буфера передачи (по выбору)        
OUT recvbuf Стартовый адрес буфера приема (по выбору)        
IN recvcounts Целочисленный массив, указывающий количество элементов в результате, распределяемом каждому процессу. Массив должен быть одинаков в каждом из вызывающих процессов        
IN datatype Тип данных элементов входного буфера (указатель)        
IN op Операция (указатель)        
IN comm Коммуникатор (указатель)        

void MPI::Comm::Reduce_scatter(const void* sendbuf,
                               void* recvbuf, int recvcounts[],
                               const MPI::Datatype& datatype,
                               const MPI::Op& op) const = 0

Опция in-place для интракоммуникаторов указывается передачей MPI_IN_PLACE в качестве значения аргумента sendbuf. В этом случае, входные данные берутся с вершины буфера приема. Заметим, что область, занимаемая входными данными, может быть длиннее либо короче, чем выходные данные.

Если comm - интеркоммуникатор, то результат редукции данных, предоставляемых процессами из группы A, рассылается процессам из группы B, и наоборот. В пределах каждой группы все процессы обеспечивают одинаковые аргументы recvcounts, и общее число элементов recvcounts должно быть равным для двух групп.

Объяснение: Последнее ограничение необходимо для того, чтобы длина буфера передачи могла быть установлена сложением локальных recvcounts элементов. Иначе для коммуникаций необходимо вычислять, сколько элементов редуцируется. []


next up previous contents
Next: Другие операции Up: Расширенные коллективные операции Previous: ''All'' формы и ''all-to-all''   Contents
Alex Otwagin 2002-12-10



Спонсоры:
Слёрм
Inferno Solutions
Hosting by Ihor
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2019 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру