магПП2013 / lec12ПП
.pptx1
Функция приема сообщения
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 - указатель на переменную с результатами выполнения операции приема.
Лекция 12. И.Г. Захарова, кафедра ПО
2
Требования к приему сообщения
•Буфер памяти должен быть достаточным для приема сообщения.
•При нехватке памяти часть сообщения будет потеряна. В коде завершения функции будет зафиксирована ошибка переполнения.
•Типы элементов передаваемого и принимаемого сообщения должны совпадать.
•Для приема сообщения
▫от любого процесса-отправителя параметру source устанавливается значение MPI_ANY_SOURCE,
▫с любым тэгом параметру tag устанавливается
значение MPI_ANY_TAG. |
«джокеры» |
Лекция 12. И.Г. Захарова, кафедра ПО
3
Требования к приему сообщения
•Параметр status позволяет определить для принятого сообщения:
▫ status.MPI_SOURCE – ранг процесса-отправителя принятого сообщения,
▫status.MPI_TAG –тэг принятого сообщения.
•Функция
MPI_Get_count(MPI_Status*status,
MPI_Datatypetype, int *count)
возвращает в переменной count количество элементов типа type в принятом сообщении.
Лекция 12. И.Г. Захарова, кафедра ПО
4
Требования к приему сообщения
•Прием сообщения м.б. инициирован
▫до момента,
▫в момент,
▫после момента начала отправки сообщения.
Вызов MPI_Recv не обязан согласовываться
со временем вызова соответствующей функции
MPI_Recv
•Функция MPI_Recv – блокирующая для процесса-
получателя, его выполнение приостанавливается до завершения работы функции если ожидаемое для
приема сообщение будет отсутствовать, выполнение
параллельной программы будет блокировано.
•По завершении MPI_Recv в buf будет размещено
принятое сообщение.
Лекция 12. И.Г. Захарова, кафедра ПО
5
Неблокирующее выполнение передачи данных
•Блокирующие функции - приостанавливают выполнение процессов (например, вычислений) до момента завершения работы вызванных функций.
•Все рассмотренные функции для парных
операций передачи и приема являются
блокирующими.
•Если вычисления (др. операции) не зависят от передаваемых данных, то блокировка не нужна.
Лекция 12. И.Г. Захарова, кафедра ПО
6
Неблокирующее выполнение передачи данных
•Неблокирующие функции обмена данными выполняются без блокировки процессов для совмещения процессов передачи сообщений и вычислений.
•Минус – более сложны для использования.
•Плюс – могут уменьшить потери эффективности параллельных вычислений из-за медленных коммуникационных операций.
Лекция 12. И.Г. Захарова, кафедра ПО
7
Неблокирующие функции
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);
Лекция 12. И.Г. Захарова, кафедра ПО
8
Параметры функций
request - определяется функцией перед
завершением выполнения и может использоваться для проверки в неблокирующей
функции
int MPI_Test( MPI_Request*request, int *flag, MPI_status*status),
request-дескриптор операции, определенный при вызове неблокирующей функции,
flag-результат проверки(true, если операция завершена),
status-результат выполнения операции (только для завершенной операции)
Лекция 12. И.Г. Захарова, кафедра ПО
9
Пример
Условная схема вычислений и выполнения неблокирующей операции передачи сообщения:
MPI_Isend(buf, count, type, dest, tag, comm, &request);
…
do
{
…
MPI_Test(&request,&flag,&status);
}
while(!flag);
Лекция 12. И.Г. Захарова, кафедра ПО
10
Управление группами процессов и коммуникаторами
•На основе групп создаются
коммуникаторы
•В группе может быть
▫Один или несколько процессов
▫Все процессы
•Один и тот же процесс может принадлежать
нескольким группам
•Коммуникатор – объект, объединяющий
▫Группу процессов
▫Контекст – параметры, использующиеся при передаче данных
Лекция 12. И.Г. Захарова, кафедра ПО