Статья: Распределенные вычисления на FreePascal под Windows

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

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

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

Использование коллективных функций ( вычисление числа π).

Следующая программа демонстрирует вычисление определенного интеграла.

uses mpi;

// паскаль версия файла cpi.c из дистрибутива MPICH

var i, n, numprocs, myid : longint;

teg : longint;

status : MPI_Status;

startwtime, endwtime : double;

mypi, pimy, h, sum, x : double;

К-во Просмотров: 401
Бесплатно скачать Статья: Распределенные вычисления на FreePascal под Windows