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

       

Функции двухточечного обмена.


Блокирующая передача (прием) — означает, что программа приостанавливает свое выполнение, до тех пор, пока передача (прием) не завершится. Это гарантирует именно тот порядок выполнения операций передачи (приема), который задан в программе.

Блокирующая передача осуществляется с помощью функции MPI_Send. function MPI_Send( buf : pointer; count : longint; datatype : MPI_Datatype; destination : longint; tag : longint; comm : MPI_Comm) : longint;

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



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

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

MPI_CHAR shortint1
MPI_SHORT smallint2
MPI_INT longint4
MPI_LONG longint4
MPI_UNSIGNED_CHAR byte1
MPI_UNSIGNED_SHORT word2
MPI_UNSIGNED longword4
MPI_UNSIGNED_LONG longword4
MPI_FLOAT single4
MPI_DOUBLE double8
MPI_LONG_DOUBLE double8
MPI_BYTE untyped data1
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.



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