Функции коллективного обмена.
Коллективный обмен данными затрагивает не два процесса, а все процессы внутри коммуникатора.
Простейшими (и наиболее часто используемыми) разновидностями такого вида взаимодействия процессов являются рассылка MPI_Bcast и коллективный сбор данных MPI_Reduce. function MPI_Bcast( buff : pointer; count : longint; datatype : MPI_Datatype; root : longint; comm : MPI_Comm) : longint;
| buf | — адрес первого элемента буфера передачи |
| count | — максимальное количество принимаемых элементов в буфере |
| datatype | — MPI-тип этих элементов |
| root | — ранг источника рассылки |
| comm | — коммуникатор |
Функция MPI_Bcast реализует "широковещательную передачу". Один процесс ( главный или root процесс) рассылает всем (и себе, в том числе) сообщение длины count, а остальные получают это сообщение. function MPI_Reduce( buf : pointer; result : pointer; count : longint; datatype : MPI_Datatype; operation : MPI_Op; root : longint; comm : MPI_Comm) : longint;
| buf | — адрес первого элемента буфера передачи |
| count | — количество элементов в буфере передачи |
| datatype | — MPI-тип этих элементов |
| operation | — операция приведения |
| root | — ранг главного процесса |
| comm | — коммуникатор |
Функция MPI_Reduce выполняет операцию приведения над массивов данных buf, полученным от всех процессов, и пересылает результат в result одному процессу (ранг которого определен параметром root).
Как и функция MPI_Bcast, эта функция должна вызываться всеми процессами в заданном коммуникаторе, и аргументы count, datatype и operation должны совпадать.
Имеется 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 | индекс минимального элемента |