Содержание
- 2. Требования к приему сообщения Буфер памяти должен быть достаточным для приема сообщения. При нехватке памяти часть
- 3. Требования к приему сообщения Параметр status позволяет определить для принятого сообщения: status.MPI_SOURCE – ранг процесса-отправителя принятого
- 4. Требования к приему сообщения Прием сообщения м.б. инициирован до момента, в момент, после момента начала отправки
- 5. Неблокирующее выполнение передачи данных Блокирующие функции - приостанавливают выполнение процессов (например, вычислений) до момента завершения работы
- 6. Неблокирующее выполнение передачи данных Неблокирующие функции обмена данными выполняются без блокировки процессов для совмещения процессов передачи
- 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,
- 8. Параметры функций request - определяется функцией перед завершением выполнения и может использоваться для проверки в неблокирующей
- 9. Пример Условная схема вычислений и выполнения неблокирующей операции передачи сообщения: MPI_Isend(buf, count, type, dest, tag, comm,
- 10. Управление группами процессов и коммуникаторами На основе групп создаются коммуникаторы В группе может быть Один или
- 11. Выполнение операций передачи данных Парные операции – только для процессов из одного коммуникатора. Коллективные операции –
- 12. Управление группами Группа создается только из уже существующих групп. Исходной м.б. группа, связанная с коммуникатором по
- 13. Получение группы, связанной с существующим коммуникатором: 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 – существующая
- 15. Создание новой группы на основе существующей (2) int MPI_Group_excl(MPI_Group oldgroup,int n,int *ranks,MPI_Group *newgroup) oldgroup – существующая
- 16. Пример: создание двух непересекающихся групп … size1=size/2; for(i=1; i { ranks[i]=i-1; } MPI_Group_incl(group, size1, ranks, group1);
- 17. Операции над группами На основе существующих групп group1 и group2 может быть создана новая группа newgroup
- 18. Пример В группу gr1 входят процессы 0, 1, 2, 4, 5 В группу gr2 - процессы
- 19. Получение информации о группе Количество процессов в группе: int MPI_Group_size(MPI_Group group, int *size) group – группа,
- 20. Удаление группы После завершения использования группы ее надо удалить с помощью функции: int MPI_Group_free(MPI_Group group) group
- 21. Операции над коммуникаторами Создание нового коммуникатора путем дублирования имеющегося: int MPI_Comm_dup(MPI_Comm oldcom, MPI_Comm *newcom); из подмножества
- 22. Операции над коммуникаторами Одновременное создание нескольких новых коммуникаторов: int MPI_Comm_split(MPI_Comm oldcom, int split, int key, MPI_Comm
- 23. Операция – коллективная ? Вызов функции 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,
- 25. Виртуальные топологии Под топологией вычислительной системы понимают структуру узлов сети и линий связи между этими узлами.
- 26. Парные операции передачи данных могут быть выполнены между любыми процессами коммуникатора. В коллективной операции принимают участие
- 27. Пример - топология некоторого графа Функция для создания коммуникатора с топологией типа граф: int MPI_Graph_create(MPI_Comm oldcomm,
- 28. Пример Лекция 12. И.Г. Захарова, кафедра ПО
- 30. Скачать презентацию