
Параллельное программирование (лекции) / lec11
.pptx
21
Функция приема сообщения
int MPI_Recv(void *buf, int count, MPI_Datatype type, int source, int tag, MPI_Comm comm, MPI_Status *status)
buf – буфер для приема сообщения,
count – количество элементов в сообщении, type – тип элементов сообщения,
source– ранг процесса, от которого д.б. выполнен прием сообщения,
tag– тэг сообщения, которое д.б. принято процессом, comm - коммуникатор, в рамках которого выполняется
операция,
status - указатель на переменную с результатами выполнения операции приема.
Лекция 11. И.Г. Захарова, кафедра ПО

22
Требования к приему сообщения
•Буфер памяти должен быть достаточным для приема сообщения.
•При нехватке памяти часть сообщения будет потеряна. В коде завершения функции будет зафиксирована ошибка переполнения.
•Типы элементов передаваемого и принимаемого сообщения должны совпадать.
•Для приема сообщения
▫от любого процесса-отправителя параметру source устанавливается значение MPI_ANY_SOURCE,
▫с любым тэгом параметру tag устанавливается
значение MPI_ANY_TAG. |
«джокеры» |
Лекция 11. И.Г. Захарова, кафедра ПО

23
Требования к приему сообщения
•Параметр status позволяет определить для принятого сообщения:
▫ status.MPI_SOURCE – ранг процесса-отправителя принятого сообщения,
▫status.MPI_TAG –тэг принятого сообщения.
•Функция
MPI_Get_count(MPI_Status*status,
MPI_Datatypetype, int *count)
возвращает в переменной count количество элементов типа type в принятом сообщении.
Лекция 11. И.Г. Захарова, кафедра ПО

24
Требования к приему сообщения
•Прием сообщения м.б. инициирован
▫до момента,
▫в момент,
▫после момента начала отправки сообщения.
Вызов MPI_Recv не обязан согласовываться
со временем вызова соответствующей функции
MPI_Recv
•Функция MPI_Recv – блокирующая для процесса-
получателя, его выполнение приостанавливается до завершения работы функции если ожидаемое для
приема сообщение будет отсутствовать, выполнение
параллельной программы будет блокировано.
•По завершении MPI_Recv в buf будет размещено
принятое сообщение.
Лекция 11. И.Г. Захарова, кафедра ПО

25
Неблокирующее выполнение передачи данных
•Блокирующие функции - приостанавливают выполнение процессов (например, вычислений) до момента завершения работы вызванных функций.
•Все рассмотренные функции для парных
операций передачи и приема являются
блокирующими.
•Если вычисления (др. операции) не зависят от передаваемых данных, то блокировка не нужна.
Лекция 11. И.Г. Захарова, кафедра ПО

26
Неблокирующее выполнение передачи данных
•Неблокирующие функции обмена данными выполняются без блокировки процессов для совмещения процессов передачи сообщений и вычислений.
•Минус – более сложны для использования.
•Плюс – могут уменьшить потери эффективности параллельных вычислений из-за медленных коммуникационных операций.
Лекция 11. И.Г. Захарова, кафедра ПО

27
Неблокирующие функции
int MPI_Isend(void*buf, int count, MPI_Datatypetype, int dest,int tag, MPI_Commcomm, MPI_Request*request);
int MPI_Issend(void*buf, int count, MPI_Datatypetype, int dest,int tag, MPI_Commcomm, MPI_Request*request);
int MPI_Ibsend(void*buf, int count, MPI_Datatypetype, int dest,int tag, MPI_Commcomm, MPI_Request*request);
int MPI_Irsend(void*buf, int count, MPI_Datatypetype, int dest, int tag, MPI_Commcomm, MPI_Request*request);
int MPI_Irecv(void*buf, int count, MPI_Datatypetype, int source, int tag, MPI_Commcomm, MPI_Request*request);
Лекция 11. И.Г. Захарова, кафедра ПО

28
Параметры функций
request - определяется функцией перед
завершением выполнения и может использоваться для проверки в неблокирующей
функции
int MPI_Test( MPI_Request*request, int *flag, MPI_status*status),
request-дескриптор операции, определенный при вызове неблокирующей функции,
flag-результат проверки(true, если операция завершена),
status-результат выполнения операции (только для завершенной операции)
Лекция 11. И.Г. Захарова, кафедра ПО

29
Пример
Условная схема вычислений и выполнения неблокирующей операции передачи сообщения:
MPI_Isend(buf, count, type, dest, tag, comm, &request);
…
do
{
…
MPI_Test(&request,&flag,&status);
}
while(!flag);
Лекция 11. И.Г. Захарова, кафедра ПО