Данная функция выполняет коллективную операцию во всех процессах группы и помещает результат в процесс с рангом root.
Формат вызова: MPI_Reduce (&sendbuf, &recvbuf, count, datatype, op, root, comm)
Встроенных коллективных операций в MPI насчитывается 12:
• MPI_MAX и MPI_MIN - поэлементные максимум и минимум
• MPI_SUM - сумма векторов
• MPI_PROD - произведение векторов
• MPI_LAND, MPI_BAND, MPI_LOR, MPI_BOR, MPI_LXOR, MPI_BXOR - логические и двоичные (бинарные) операции И, ИЛИ, исключающее ИЛИ
• MPI_MAXLOC, MPI_MINLOC - поиск индекса процесса с максимумом/минимумом
значения и самого этого значения. Эти функции могут работать только со следующими типами данных (и только ними):
• MPI_MAX, MPI_MIN - целые и вещественные
• MPI_SUM, MPI_PROD - целые, вещественные (комплексные - для Фортрана)
• MPI_LAND, MPI_LOR, MPI_LXOR - целые
• MPI_BAND, MPI_BOR, MPI_BXOR - целые и типа MPI_BYTE
• MPI_MAXLOC, MPI_MINLOC – вещественные
MPI_Allreduce
Применяет коллективную операцию и рассылает результат всем процессам в группе. Формат вызова: MPI_Allreduce (&sendbuf, &recvbuf, count, datatype, op, comm)
MPI_Reduce_scatter
Функция применяет вначале коллективную операцию к векторам всех процессов в группе, а затем результирующий вектор разбивается на непересекающиеся сегменты, которые распределяются по процессам. Данная операция эквивалентна вызову функции MPI_Reduce, за которым производится вызов MPI_Scatter. Формат вызова: MPI_Reduce_scatter (&sendbuf, &recvbuf, recvcount, datatype, op, comm)