Лого cs.karelia.ru Кафедра ИМО
Курсовая работа
Введение
Общие процедуры MPI
Передача сообщений
Прием сообщений
Пример
Источники

Valid HTML 4.01!


Прием сообщений между отдельными процессами

Прием сообщений с блокировкой

int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int msgtag, MPI_Comm comm, MPI_Status *status)
.OUT buf - адрес начала буфера приема сообщения
.count - максимальное число элементов в принимаемом сообщении
.datatype - тип элементов принимаемого сообщения
.source - номер процесса-отправителя
.msgtag - идентификатор принимаемого сообщения
.comm - идентификатор группы
.OUT status - параметры принятого сообщения
Прием сообщения с идентификатором msgtag от процесса source с блокировкой. Число элементов в принимаемом сообщении не должно превосходить значения count. Если число принятых элементов меньше значения count, то гарантируется, что в буфере buf изменятся только элементы, соответствующие элементам принятого сообщения. Если нужно узнать точное число элементов в сообщении, то можно воспользоваться подпрограммой MPI_Probe. Блокировка гарантирует, что после возврата из подпрограммы все элементы сообщения приняты и расположены в буфере buf.
В качестве номера процесса-отправителя можно указать предопределенную константу MPI_ANY_SOURCE - признак того, что подходит сообщение от любого процесса. В качестве идентификатора принимаемого сообщения можно указать константу MPI_ANY_TAG - признак того, что подходит сообщение с любым идентификатором. Если процесс посылает два сообщения другому процессу и оба эти сообщения соответствуют одному и тому же вызову MPI_Recv, то первым будет принято то сообщение, которое было отправлено раньше.


int MPI_Get_count( MPI_Status *status, MPI_Datatype datatype, int *count)
.status - параметры принятого сообщения
.datatype - тип элементов принятого сообщения
.OUT count - число элементов сообщения
По значению параметра status данная подпрограмма определяет число уже принятых (после обращения к MPI_Recv) или принимаемых (после обращения к MPI_Probe или MPI_Iprobe) элементов сообщения типа datatype.


int MPI_Probe( int source, int msgtag, MPI_Comm comm, MPI_Status *status)
.source - номер процесса-отправителя или MPI_ANY_SOURCE
.msgtag - идентификатор ожидаемого сообщения или MPI_ANY_TAG
.comm - идентификатор группы
.OUT status - параметры обнаруженного сообщения
Получение информации о структуре ожидаемого сообщения с блокировкой. Возврата из подпрограммы не произойдет до тех пор, пока сообщение с подходящим идентификатором и номером процесса-отправителя не будет доступно для получения. Атрибуты доступного сообщения можно определить обычным образом с помощью параметра status. Следует обратить внимание, что подпрограмма определяет только факт прихода сообщения, но реально его не принимает.