ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
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
.
Коллективные взаимодействия процессов
В операциях коллективного взаимодействия процессов участвуют все процес-
сы коммуникатора. Соответствующая процедура должна быть вызвана каждым
1...,47,48,49,50,51,52,53,54,55,56 58,59,60,61,62,63,64,65,66,67,...180