Введение в практику разработки параллельных программ в стандарте MPI. Баканов В.М - 25 стр.

UptoLike

Составители: 

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

int
MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int msgtag,
         MPI_Comm comm, MPI_Status *status);

  • buf    - адрес начала буфера приема сообщения (возвращаемое значение)
  •    count - максимальное число элементов в принимаемом сообщении
  •    datatype - тип элементов принимаемого сообщения
  •    source - номер процесса-отправителя
  •    msgtag - идентификатор принимаемого сообщения
  •    comm - идентификатор группы
  •    status - параметры принятого сообщения (возвращаемое значение)

  Функция MPI_Recv осуществляет прием сообщения с идентификатором
msgtag от процесса source с блокировкой (блокировка гарантирует, что после
возврата из подпрограммы все элементы сообщения приняты и расположены
в буфере buf). Число элементов в принимаемом сообщении не должно пре-
восходить значения count (если число принятых элементов меньше count, то
гарантируется, что в буфере buf изменятся только элементы, соответствую-
щие элементам принятого сообщения). Если процесс посылает два сообще-
ния другому процессу и оба эти сообщения соответствуют одному и тому же
вызову MPI_Recv, первым будет принято то сообщение, которое было от-
правлено раньше.
  Т.о. с помощью пары функций MPI_Send/MPI_Recv осуществляется надеж-
ная (но не слишком эффективная) передача данных между процессами. Од-
нако в некоторых случаях (например, когда принимающая сторона ожидает
приема сообщений, но априори не знает длины и типа их) удобно использо-
вать блокирующую функцию MPI_Probe, позволяющую определить характе-
ристики сообщения до того, как оно будет помещено в приемный пользова-
тельский буфер (гарантируется, что следующая вызванная функция MPI_Recv
прочитает именно протестированное MPI_Probe сообщение):

int
MPI_Probe( int source, int msgtag, MPI_Comm comm, MPI_Status *status);

   •    source - номер процесса-отправителя (или MPI_ANY_SOURCE)
   •    msgtag - идентификатор ожидаемого сообщения (или MPI_ANY_TAG)
   •    comm - идентификатор группы
   •    status - параметры обнаруженного сообщения (возвращаемое значение)

  В структуре status (тип MPI_Status) содержится информация о сообщении –
его идентификатор (поле MPI_TAG), идентификатор процесса-отправителя

                                           - 25 -