Функции коллективного обмена.
Коллективный обмен данными затрагивает не два процесса, а все процессы внутри коммуникатора.
Простейшими (и наиболее часто используемыми) разновидностями такого вида взаимодействия процессов являются рассылка 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 | индекс минимального элемента |