| |
------------------------------------------------------------------ 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 элементов.
Иначе для коммуникаций необходимо вычислять, сколько элементов
редуцируется. []
|
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |