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

comm : MPI_Comm) : longint;

Осуществляет передачу count элементов указанного типа процессу под номером destination.

buf — адрес первого элемента в буфере передачи
count — количество передаваемых элементов в буфере
datatype — MPI-тип этих элементов
destination — ранг процесса-получателя (принимает значения от нуля до n-1, где n — полное число процессов)
tag — тег сообщения
comm — коммуникатор

В качестве MPI-типа следует указать один из нижеперечисленных типов. Большинству базовых типов паскаля соответствует свой MPI-тип. Все они перечислены в следующей таблице. Последний столбец указывает на число байт, требуемых для хранения одной переменной соответствующего типа.

MPI_CHAR shortint 1
MPI_SHORT smallint 2
MPI_INT longint 4
MPI_LONG longint 4
MPI_UNSIGNED_CHAR byte 1
MPI_UNSIGNED_SHORT word 2
MPI_UNSIGNED longword 4
MPI_UNSIGNED_LONG longword 4
MPI_FLOAT single 4
MPI_DOUBLE double 8
MPI_LONG_DOUBLE double 8
MPI_BYTE untyped data 1
MPI_PACKED составной тип -

Переменная tag — вспомогательная целочисленная переменная.

MPI-тип MPI_PACKED используется при передаче данных производных типов (сконструированных из базовых типов). Их рассмотрение выходит за рамки данной статьи.

Функция MPI_Recv реализует блокирующий прием данных.

function MPI_Recv( buf : pointer;

count : longint;

datatype : MPI_Datatype;

source : longint;

tag : longint;

comm : MPI_Comm;

var status : MPI_Status) : longint;

buf — начальный адрес буфера приема
count — максимальное количество принимаемых элементов в буфере
datatype — MPI-тип этих элементов
source — ранг источника
tag — тег сообщения
comm — коммуникатор
status — статус обмена

Эта функция осуществляет запрос на получение данных. При ее вызове процесс будет ожидать поступления данных от процесса под номером source. Если таковой не последует, то это приведет к повисанию программы (тупик). Так что при использовании этих функций следует проявлять бдительность.

Число принятых элементов может быть меньше значения переменной count. Если же посылаемые данные имеют больший размер, то будет выведено предупреждение об обрывании передачи.

Возвращаемая переменная status содержит информацию о передаче. Например, ее можно использовать, чтобы определить фактическое количество принятых элементов. Для этого используется функция MPI_Get_count

function MPI_Get_count(var status : MPI_Status;

datatype : MPI_Datatype;

var count : longint) : longint;

Число фактически принятых элементов — в возвращаемой переменной count.

Использование функций двухточечного обмена.

В следующем примере вычисление значений элементов массива "разводится" по двум процессам

uses mpi;

const num = 10;

var

teg, numprocs, myid : longint;

i : longint;

status : MPI_Status;

z, x : double;

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