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

Категория: Образование
Нажмите для полного просмотра!
Функция приема сообщения int MPI_Recv, слайд №1 Функция приема сообщения int MPI_Recv, слайд №2 Функция приема сообщения int MPI_Recv, слайд №3 Функция приема сообщения int MPI_Recv, слайд №4 Функция приема сообщения int MPI_Recv, слайд №5 Функция приема сообщения int MPI_Recv, слайд №6 Функция приема сообщения int MPI_Recv, слайд №7 Функция приема сообщения int MPI_Recv, слайд №8 Функция приема сообщения int MPI_Recv, слайд №9 Функция приема сообщения int MPI_Recv, слайд №10 Функция приема сообщения int MPI_Recv, слайд №11 Функция приема сообщения int MPI_Recv, слайд №12 Функция приема сообщения int MPI_Recv, слайд №13 Функция приема сообщения int MPI_Recv, слайд №14 Функция приема сообщения int MPI_Recv, слайд №15 Функция приема сообщения int MPI_Recv, слайд №16 Функция приема сообщения int MPI_Recv, слайд №17 Функция приема сообщения int MPI_Recv, слайд №18 Функция приема сообщения int MPI_Recv, слайд №19 Функция приема сообщения int MPI_Recv, слайд №20 Функция приема сообщения int MPI_Recv, слайд №21 Функция приема сообщения int MPI_Recv, слайд №22 Функция приема сообщения int MPI_Recv, слайд №23 Функция приема сообщения int MPI_Recv, слайд №24 Функция приема сообщения int MPI_Recv, слайд №25 Функция приема сообщения int MPI_Recv, слайд №26 Функция приема сообщения int MPI_Recv, слайд №27 Функция приема сообщения int MPI_Recv, слайд №28 Функция приема сообщения int MPI_Recv, слайд №29

Содержание

Вы можете ознакомиться и скачать презентацию на тему Функция приема сообщения int MPI_Recv. Доклад-сообщение содержит 29 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

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


Слайд 1


Функция приема сообщения int MPI_Recv(void *buf, int count, MPI_Datatype type, int source, int tag, MPI_Comm comm, MPI_Status *status) buf – буфер...
Описание слайда:
Функция приема сообщения 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 - указатель на переменную с результатами выполнения операции приема.

Слайд 2


Требования к приему сообщения Буфер памяти должен быть достаточным для приема сообщения. При нехватке памяти часть сообщения будет потеряна. В коде...
Описание слайда:
Требования к приему сообщения Буфер памяти должен быть достаточным для приема сообщения. При нехватке памяти часть сообщения будет потеряна. В коде завершения функции будет зафиксирована ошибка переполнения. Типы элементов передаваемого и принимаемого сообщения должны совпадать. Для приема сообщения от любого процесса-отправителя параметру source устанавливается значение MPI_ANY_SOURCE, с любым тэгом параметру tag устанавливается значение MPI_ANY_TAG.

Слайд 3


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

Слайд 4


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

Слайд 5


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

Слайд 6


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

Слайд 7


Неблокирующие функции int MPI_Isend(void*buf, int count, MPI_Datatypetype, int dest,int tag, MPI_Commcomm, MPI_Request*request); int...
Описание слайда:
Неблокирующие функции 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);

Слайд 8


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

Слайд 9


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

Слайд 10


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

Слайд 11


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

Слайд 12


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

Слайд 13


Получение группы, связанной с существующим коммуникатором: int MPI_Comm_group(MPI_Comm comm, MPI_Group *group) comm – коммуникатор, group – группа,...
Описание слайда:
Получение группы, связанной с существующим коммуникатором: 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 – существующая...
Описание слайда:
Создание новой группы на основе существующей (1) int MPI_Group_incl(MPI_Group oldgroup,int n,int *ranks,MPI_Group *newgroup) oldgroup – существующая группа, newgroup – созданная группа, n – количество элементов в массиве ranks , ranks – массив, хранящий ранги процессов, вошедших в новую группу.

Слайд 15


Создание новой группы на основе существующей (2) int MPI_Group_excl(MPI_Group oldgroup,int n,int *ranks,MPI_Group *newgroup) oldgroup – существующая...
Описание слайда:
Создание новой группы на основе существующей (2) int MPI_Group_excl(MPI_Group oldgroup,int n,int *ranks,MPI_Group *newgroup) oldgroup – существующая группа, newgroup – созданная группа, n – количество элементов в массиве ranks , ranks – массив, хранящий ранги процессов, которые будут исключены из новой группы.

Слайд 16


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

Слайд 17


Операции над группами На основе существующих групп group1 и group2 может быть создана новая группа newgroup Объединение: int...
Описание слайда:
Операции над группами На основе существующих групп 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);

Слайд 18


Пример В группу gr1 входят процессы 0, 1, 2, 4, 5 В группу gr2 - процессы 0, 2, 3 Нумерация задана в группе, соответствующей MPI_COMM_WORLD После...
Описание слайда:
Пример В группу 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 Порядок нумерации процессов в новых группах соответствует порядку их перечисления

Слайд 19


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

Слайд 20


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

Слайд 21


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

Слайд 22


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

Слайд 23


Операция – коллективная  Операция – коллективная  Вызов функции MPI_Comm_split должен быть выполнен в каждом процессе коммуникатора oldcom....
Описание слайда:
Операция – коллективная  Операция – коллективная  Вызов функции MPI_Comm_split должен быть выполнен в каждом процессе коммуникатора oldcom. Процессы разделяются на непересекающиеся группы с одинаковыми значениями параметра split. На основе сформированных групп создается набор коммуникаторов. Порядок нумерации процессов соответствует порядку значений параметра key (процесс с бОльшим значением параметра key будет иметь бОльший ранг).

Слайд 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,...
Описание слайда:
Пример 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) – второй коммуникатор. И т.д.

Слайд 25


Виртуальные топологии Под топологией вычислительной системы понимают структуру узлов сети и линий связи между этими узлами. Топология может быть...
Описание слайда:
Виртуальные топологии Под топологией вычислительной системы понимают структуру узлов сети и линий связи между этими узлами. Топология может быть представлена в виде графа, в котором вершины есть процессоры (процессы) системы, дуги соответствуют имеющимся линиям (каналам) связи.

Слайд 26


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

Слайд 27


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

Слайд 28


Пример
Описание слайда:
Пример

Слайд 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); ...



Похожие презентации
Mypresentation.ru
Загрузить презентацию