Delphi - сбориник статей


Функции коллективного обмена.


Коллективный обмен данными затрагивает не два процесса, а все процессы внутри коммуникатора.

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



Содержание раздела