Разделы презентаций


Функция приема сообщения int MPI_Recv

Содержание

Требования к приему сообщенияБуфер памяти должен быть достаточным для приема сообщения.При нехватке памяти часть сообщения будет потеряна. В коде завершения функции будет зафиксирована ошибка переполнения.Типы элементов передаваемого и принимаемого сообщения должны

Слайды и текст этой презентации

Слайд 1Функция приема сообщения
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. И.Г. Захарова, кафедра ПО

Функция приема сообщенияint MPI_Recv(void *buf, int count, MPI_Datatype type, int source, int tag, MPI_Comm comm, MPI_Status *status)buf

Слайд 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. И.Г. Захарова, кафедра ПО

Требования к приему сообщенияПараметр status позволяет определить для принятого сообщения:status.MPI_SOURCE – ранг процесса-отправителя принятого сообщения,status.MPI_TAG –тэг принятого

Слайд 4Требования к приему сообщения
Прием сообщения м.б. инициирован
до момента,
в момент,
после момента

начала отправки сообщения.
?Вызов MPI_Recv не обязан согласовываться со временем вызова

соответствующей функции MPI_Recv
Функция MPI_Recv – блокирующая для процесса-получателя, его выполнение приостанавливается до завершения работы функции ? если ожидаемое для приема сообщение будет отсутствовать, выполнение параллельной программы будет блокировано.
По завершении MPI_Recv в buf будет размещено принятое сообщение.

Лекция 12. И.Г. Захарова, кафедра ПО

Требования к приему сообщенияПрием сообщения м.б. инициировандо момента,в момент,после момента начала отправки сообщения.?Вызов MPI_Recv не обязан согласовываться

Слайд 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. И.Г. Захарова, кафедра ПО

Неблокирующие функции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

Слайд 8Параметры функций
request - определяется функцией перед завершением выполнения и

может использоваться для проверки в неблокирующей функции
int MPI_Test( MPI_Request*request, int

*flag, MPI_status*status),
request-дескриптор операции, определенный при вызове неблокирующей функции,
flag-результат проверки(true, если операция завершена),
status-результат выполнения операции (только для завершенной операции)

Лекция 12. И.Г. Захарова, кафедра ПО

Параметры функций request - определяется функцией перед завершением выполнения и может использоваться для проверки в неблокирующей функцииint

Слайд 9Пример
Условная схема вычислений и выполнения неблокирующей операции передачи сообщения:
MPI_Isend(buf, count,

type, dest, tag, comm, &request);

do
{

MPI_Test(&request,&flag,&status);
}
while(!flag);

Лекция 12. И.Г. Захарова,

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

Слайд 10Управление группами процессов и коммуникаторами
На основе групп создаются коммуникаторы
В группе

может быть
Один или несколько процессов
Все процессы
Один и тот же процесс

может принадлежать нескольким группам
Коммуникатор – объект, объединяющий
Группу процессов
Контекст – параметры, использующиеся при передаче данных

Лекция 12. И.Г. Захарова, кафедра ПО

Управление группами процессов и коммуникаторамиНа основе групп создаются коммуникаторыВ группе может бытьОдин или несколько процессовВсе процессыОдин и

Слайд 11Выполнение операций передачи данных
Парные операции – только для процессов из

одного коммуникатора.
Коллективные операции – одновременно для всех процессов коммуникатора.
Операции на

разных коммуникаторах – независимы и не влияют друг на друга ?
Создание коммуникаторов
Сужает область действия коллективных операций.
Устраняет взаимовлияние выполняемых частей программы

Лекция 12. И.Г. Захарова, кафедра ПО

Выполнение операций передачи данныхПарные операции – только для процессов из одного коммуникатора.Коллективные операции – одновременно для всех

Слайд 12Управление группами
Группа создается только из уже существующих групп.
Исходной м.б. группа,

связанная с коммуникатором по умолчанию – MPI_COMM_WORLD.
Для каждого процесса определен

коммуникатор MPI_COMM_SELF, включающий этот процесс.
Можно использовать пустую группу MPI_GROUP_EMPTY

Лекция 12. И.Г. Захарова, кафедра ПО

Управление группамиГруппа создается только из уже существующих групп.Исходной м.б. группа, связанная с коммуникатором по умолчанию – MPI_COMM_WORLD.Для

Слайд 13Получение группы, связанной с существующим коммуникатором:
int MPI_Comm_group(MPI_Comm comm, MPI_Group *group)
comm

– коммуникатор,
group – группа, связанная с коммуникатором.

Лекция 12. И.Г. Захарова,

кафедра ПО
Получение группы, связанной с существующим коммуникатором:int MPI_Comm_group(MPI_Comm comm, MPI_Group *group)comm – коммуникатор,group – группа, связанная с коммуникатором.Лекция

Слайд 14Создание новой группы на основе существующей (1)
int MPI_Group_incl(MPI_Group oldgroup,int n,int

*ranks,MPI_Group *newgroup)
oldgroup – существующая группа,
newgroup – созданная группа,
n –

количество элементов в массиве ranks ,
ranks – массив, хранящий ранги процессов, вошедших в новую группу.

Лекция 12. И.Г. Захарова, кафедра ПО

Создание новой группы на основе существующей (1)int MPI_Group_incl(MPI_Group oldgroup,int n,int *ranks,MPI_Group *newgroup)oldgroup – существующая группа,newgroup – созданная

Слайд 15Создание новой группы на основе существующей (2)
int MPI_Group_excl(MPI_Group oldgroup,int n,int

*ranks,MPI_Group *newgroup)
oldgroup – существующая группа,
newgroup – созданная группа,
n –

количество элементов в массиве ranks ,
ranks – массив, хранящий ранги процессов, которые будут исключены из новой группы.

Лекция 12. И.Г. Захарова, кафедра ПО

Создание новой группы на основе существующей (2)int MPI_Group_excl(MPI_Group oldgroup,int n,int *ranks,MPI_Group *newgroup)oldgroup – существующая группа,newgroup – созданная

Слайд 16Пример: создание двух непересекающихся групп

size1=size/2;
for(i=1; i

group1);
MPI_Group_excl(group, size1, ranks, group2);
Лекция 12. И.Г. Захарова, кафедра ПО

Пример:  создание двух непересекающихся групп …size1=size/2;for(i=1; i

Слайд 17Операции над группами
На основе существующих групп group1 и group2 может

быть создана новая группа newgroup
Объединение:
int MPI_Group_union(MPI_Group group1, MPI_Group group2,MPI_Group

*newgroup);
Пересечение:
int MPI_Group_intersection( MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);
Разность:
int MPI_Group_difference( MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);

Лекция 12. И.Г. Захарова, кафедра ПО

Операции над группамиНа основе существующих групп group1 и group2 может быть создана новая группа newgroup Объединение:int MPI_Group_union(MPI_Group

Слайд 18Пример
В группу gr1 входят процессы 0, 1, 2, 4, 5
В

группу gr2 - процессы 0, 2, 3
Нумерация задана в

группе, соответствующей MPI_COMM_WORLD
После вызовов
MPI_Group_intersection(gr1, gr2, *newgr1);
MPI_Group_union(gr1, gr2, *newgr2);
MPI_Group_difference(gr1, gr2, *newgr3);
В группе newgr1 процессы 0, 2
В группе newgr2 процессы 0, 1, 2, 4, 5, 3
В группе newgr3 процессы 1, 4, 5
Порядок нумерации процессов в новых группах соответствует порядку их перечисления

Лекция 12. И.Г. Захарова, кафедра ПО

ПримерВ группу gr1 входят процессы 0, 1, 2, 4, 5В группу gr2 - процессы 0, 2, 3

Слайд 19Получение информации о группе
Количество процессов в группе:
int MPI_Group_size(MPI_Group group, int

*size)
group – группа,
size– количество процессов.
Ранг текущего процесса в группе:
int MPI_Group_rank(MPI_Group

group, int *rank)
group – группа,
rank– ранг процесса в группе.

Лекция 12. И.Г. Захарова, кафедра ПО

Получение информации о группеКоличество процессов в группе:int MPI_Group_size(MPI_Group group, int *size)group – группа,size– количество процессов.Ранг текущего процесса

Слайд 20Удаление группы
После завершения использования группы ее надо удалить с помощью

функции:
int MPI_Group_free(MPI_Group group)
group – группа.

Удаление группы не затрагивает коммуникаторы, в

которых она используется.

Лекция 12. И.Г. Захарова, кафедра ПО

Удаление группыПосле завершения использования группы ее надо удалить с помощью функции:int MPI_Group_free(MPI_Group group)group – группа.Удаление группы не

Слайд 21Операции над коммуникаторами
Создание нового коммуникатора
путем дублирования имеющегося:
int MPI_Comm_dup(MPI_Comm oldcom, MPI_Comm

*newcom);
из подмножества процессов (группы) имеющегося:
int MPI_Comm_create(MPI_Comm oldcom, MPI_Group group,

MPI_Comm *newcom);
Операция создания коммуникаторов является коллективной ? должна выполняться всеми процессами исходного коммуникатора

Лекция 12. И.Г. Захарова, кафедра ПО

Операции над коммуникаторамиСоздание нового коммуникаторапутем дублирования имеющегося:int MPI_Comm_dup(MPI_Comm oldcom, MPI_Comm *newcom);из подмножества процессов (группы) имеющегося: int MPI_Comm_create(MPI_Comm

Слайд 22Операции над коммуникаторами
Одновременное создание нескольких новых коммуникаторов:
int MPI_Comm_split(MPI_Comm oldcom, int

split, int key, MPI_Comm *newcom);
split– в один коммуникатор попадают процессы

с одним значением этого параметра,
key– процессы с бОльшим значением параметра получат бОльший ранг в группе (при равных значениях порядок выбирает система)
Удаление коммуникатора:
int MPI_Comm_free(MPI_Comm *com);

Лекция 12. И.Г. Захарова, кафедра ПО

Операции над коммуникаторамиОдновременное создание нескольких новых коммуникаторов:int MPI_Comm_split(MPI_Comm oldcom, int split, int key, MPI_Comm *newcom);split– в один

Слайд 23Операция – коллективная ?
Вызов функции MPI_Comm_split должен быть выполнен в

каждом процессе коммуникатора oldcom.
Процессы разделяются на непересекающиеся группы с одинаковыми

значениями параметра split.
На основе сформированных групп создается набор коммуникаторов.
Порядок нумерации процессов соответствует порядку значений параметра key (процесс с бОльшим значением параметра key будет иметь бОльший ранг).

Лекция 12. И.Г. Захарова, кафедра ПО

Операция – коллективная ?Вызов функции MPI_Comm_split должен быть выполнен в каждом процессе коммуникатора oldcom.Процессы разделяются на непересекающиеся

Слайд 24Пример
MPI_Comm comm;
int rank, row;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
row = rank / q;
MPI_Comm_split(MPI_COMM_WORLD, row,

rank, &comm);
При q=3, общем числе процессов = 9 получим:
Процессы с

рангами (0, 1, 2) – первый коммуникатор.
Процессы с рангами (3, 4, 5) – второй коммуникатор.
И т.д.

Лекция 12. И.Г. Захарова, кафедра ПО

ПримерMPI_Comm comm;int rank, row;MPI_Comm_rank(MPI_COMM_WORLD, &rank);row = rank / q;MPI_Comm_split(MPI_COMM_WORLD, row, rank, &comm);При q=3, общем числе процессов =

Слайд 25Виртуальные топологии
Под топологией вычислительной системы понимают структуру узлов сети и

линий связи между этими узлами.
Топология может быть представлена в

виде графа, в котором
вершины есть процессоры (процессы) системы,
дуги соответствуют имеющимся линиям (каналам) связи.

Лекция 12. И.Г. Захарова, кафедра ПО

Виртуальные топологииПод топологией вычислительной системы понимают структуру узлов сети и линий связи между этими узлами. Топология может

Слайд 26Парные операции передачи данных могут быть выполнены между любыми процессами

коммуникатора.
В коллективной операции принимают участие все процессы коммуникатора.
Следовательно,

логическая топология линий связи между процессами в параллельной программе имеет структуру полного графа.
Можно организовать логическое представление любой необходимой виртуальной топологии независимо от физической сети - с помощью дополнительной адресации процессов.


Лекция 12. И.Г. Захарова, кафедра ПО

Парные операции передачи данных могут быть выполнены между любыми процессами коммуникатора. В коллективной операции принимают участие все

Слайд 27Пример - топология некоторого графа
Функция для создания коммуникатора с топологией

типа граф:
int MPI_Graph_create(MPI_Comm oldcomm, int nnodes, int *index, int

*edges, int reorder, MPI_Comm* graphcomm)
oldcomm-исходныйкоммуникатор,
nnodes-количество вершин графа,
index-количество исходящих дуг для каждой вершины,
edges-последовательный список дуг графа,
reorder-параметр допустимости изменения нумерации процессов,
graphcomm–создаваемый коммуникатор с топологией типа граф.
Операция создания топологии является коллективной и должна выполняться всеми процессами исходного коммуникатора

Лекция 12. И.Г. Захарова, кафедра ПО

Пример - топология некоторого графаФункция для создания коммуникатора с топологией типа граф: int MPI_Graph_create(MPI_Comm oldcomm, int nnodes,

Слайд 28Пример
Лекция 12. И.Г. Захарова, кафедра ПО

ПримерЛекция 12. И.Г. Захарова, кафедра ПО

Слайд 29Для создания топологии с графом данного вида необходимо добавить в

программу код:
...
int index[] = { 4,1,1,1,1 };
int edges[] =

{ 1,2,3,4,0,0,0,0 };
MPI_CommStarComm;
MPI_Graph_create(MPI_COMM_WORLD, 5, index, edges, 1,&StarComm);
...

Лекция 12. И.Г. Захарова, кафедра ПО

Для создания топологии с графом данного вида необходимо добавить в программу код: ...int index[] = { 4,1,1,1,1

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика