ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
55
int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int
source, int msgtag, MPI_Comm comm, MPI_Request *request)
•
OUT
buf
- адрес начала буфера приема сообщения;
•
count
- максимальное число элементов в принимаемом сообщении;
•
datatype
- тип элементов принимаемого сообщения;
•
source
- номер процесса-отправителя;
•
msgtag
- идентификатор принимаемого сообщения;
•
comm
- идентификатор группы;
•
OUT
request
- идентификатор асинхронного приема сообщения.
Прием сообщения, аналогичный
MPI_Recv
, однако возврат из подпрограммы
происходит сразу после инициализации процесса приема без ожидания получения
сообщения в буфере
buf.
Окончание процесса приема можно определить с помощью
параметра
request
и процедур
MPI_Wait
и
MPI_Test
.
int MPI_Wait( MPI_Request *request, MPI_Status *status)
•
request
- идентификатор асинхронного приема или передачи;
•
OUT
status
- параметры сообщения.
Ожидание завершения асинхронных процедур
MPI_Isend
или
MPI_Irecv
,
ассоциированных с идентификатором
request.
В случае приема атрибуты и длину
полученного сообщения можно определить обычным образом с помощью параметра
status.
int MPI_Test( MPI_Request *request, int *flag, MPI_Status
*status)
•
request
- идентификатор асинхронного приема или передачи;
•
OUT
flag
- признак завершенности операции обмена;
•
OUT
status
- параметры сообщения.
Проверка завершенности асинхронных процедур
MPI_Isend
или
MPI_Irecv,
ассоциированных с идентификатором
request
. В параметре
flag
возвращает значение
1, если соответствующая операция завершена, и значение 0 в противном случае.
Если завершена процедура приема, то атрибуты и длину полученного сообщения
можно определить обычным образом с помощью параметра
status
.
Коллективные взаимодействия процессов
В операциях коллективного взаимодействия процессов участвуют все процес-
сы коммуникатора. Соответствующая процедура должна быть вызвана каждым