Содержание
- 2. Лекция 6 2008 Аннотация В лекции рассматриваются средства организации групп процессов и соответствующих им коммуникаторов. Речь
- 3. План лекции 2008 Группы процессов и коммуникаторы Интракоммуникаторы. Управление группами процессов. Управление коммуникаторами. Интеркоммуникаторы и организация
- 4. Группы процессов и коммуникаторы 2008
- 5. Группы процессов и коммуникаторы 2008 В MPI имеются средства создания и преобразования коммуникаторов, которые дают возможность
- 6. Группы процессов и коммуникаторы 2008 Новый коммуникатор можно передать в качестве аргумента библиотечной подпрограмме, как в
- 7. Группы процессов и коммуникаторы 2008 Группы процессов Группой называют упорядоченное множество процессов. Каждому процессу в группе
- 8. Группы процессов и коммуникаторы 2008 Коммуникаторы Коммуникаторы бывают двух типов: интракоммуникаторы ⎯ для операций внутри одной
- 9. Группы процессов и коммуникаторы 2008 MPI поддерживает обмены между двумя непересекающимися группами процессов. Если параллельная программа
- 10. Группы процессов и коммуникаторы 2008 В контексте, связанном с интеркоммуникатором, передача сообщения в локальной группе всегда
- 11. Группы процессов и коммуникаторы 2008 Конструкторы интеркоммуникаторов являются блокирующими операциями. Во избежание тупиковых ситуаций локальная и
- 12. Группы процессов и коммуникаторы 2008 Интеробмен характеризуется следующими свойствами: синтаксис двухточечных обменов одинаков в операциях обмена
- 13. Создание групп процессов 2008
- 14. Создание групп процессов 2008 Создание групп процессов Созданию нового коммуникатора предшествует создание соответствующей группы процессов. Операции
- 15. Создание групп процессов 2008 пересечение ⎯ в новую группу включаются все процессы, принадлежащие двум группам одновременно.
- 16. Создание групп процессов 2008 разность ⎯ в новую группу включаются все процессы первой группы, не входящие
- 17. 2008 Новую группу можно создать только из уже существующих групп. Базовая группа, из которой формируются все
- 18. 2008 Подпрограмма MPI_Group_incl создает новую группу newgroup из n процессов, входящих в группу oldgroup. Ранги этих
- 19. 2008 Подпрограмма MPI_Group_excl создает группу newgroup, исключая из исходной группы (group) процессы с рангами ranks[0], …,
- 20. 2008 Подпрограмма MPI_Group_range_incl создает группу newgroup из группы group, добавляя в нее n процессов, ранг которых
- 21. 2008 Подпрограмма MPI_Group_range_excl создает группу newgroup из группы group, исключая из нее n процессов, ранг которых
- 22. 2008 Подпрограмма MPI_Group_difference создает новую группу (newgroup) из разности двух групп (group1) и (group2): int MPI_Group_difference(MPI_Group
- 23. 2008 Подпрограмма MPI_Group_union создает группу (newgroup), объединяя группы group1 и group2: int MPI_Group_union(MPI_Group group1, MPI_Group group2,
- 24. 2008 Деструктор группы Вызов подпрограммы MPI_Group_free уничтожает группу group: int MPI_Group_free(MPI_Group *group) MPI_Group_free(group, ierr) Создание групп
- 25. 2008 Получение информации о группе Для определения количества процессов (size) в группе (group) используется подпрограмма MPI_Group_size:
- 26. 2008 Подпрограмма MPI_Group_rank возвращает ранг (rank) процесса в группе group: int MPI_Group_rank(MPI_Group group, int *rank) MPI_Group_rank(group,
- 27. 2008 Процесс может входить в несколько групп. Подпрограмма MPI_Group_translate_ranks преобразует ранг процесса в одной группе в
- 28. 2008 Подпрограмма MPI_Group_compare используется для сравнения групп group1 и group2: int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int
- 29. 2008 Управление коммуникаторами
- 30. 2008 Создание коммуникатора ⎯ коллективная операция и соответствующая подпрограмма должна вызываться всеми процессами коммуникатора. Подпрограмма MPI_Comm_dup
- 31. 2008 Подпрограмма MPI_Comm_create создает новый коммуникатор (newcomm) из подмножества процессов (group) другого коммуникатора (oldcomm): int MPI_Comm_create(MPI_Comm
- 32. 2008 Пример создания коммуникатора #include "mpi.h" #include int main(int argc,char *argv[]) { char message[24]; MPI_Group MPI_GROUP_WORLD;
- 33. 2008 printf("New group contains processes:"); q = size — 1; process_ranks = (int*) malloc(q*sizeof(int)); for (proc
- 34. 2008 if (rank_in_group == 0) { strcpy(message, "Hi, Parallel Programmer!"); MPI_Bcast(&message, 25, MPI_BYTE, 0, fcomm); printf("0
- 35. 2008 Эта программа работает следующим образом. Пусть в коммуникатор MPI_COMM_WORLD входят p процессов. Сначала создается список
- 36. 2008 Управление коммуникаторами
- 37. 2008 Управление коммуникаторами
- 38. 2008 Подпрограмма MPI_Comm_split позволяет создать несколько коммуникаторов сразу: int MPI_Comm_split(MPI_Comm oldcomm, int split, int rank, MPI_Comm*
- 39. 2008 Если процессы A и B вызывают MPI_Comm_split с одинаковым значением split, а аргумент rank, переданный
- 40. 2008 В следующем примере создаются три новых коммуникатора (если исходный коммуникатор comm содержит не менее трех
- 41. 2008 В следующем примере процессы разбиваются на две группы. Одна содержит процессы с чётными рангами, а
- 42. 2008 Neven = (p + 1)/2; Nodd = p - Neven; members[0] = 2; members[1] =
- 43. 2008 MPI_Barrier(MPI_COMM_WORLD); MPI_Group_rank(even_group, &even_rank); MPI_Group_rank( odd_group, &odd_rank); printf("%8d %8d %8d\n",num, even_rank, odd_rank); MPI_Finalize(); } Управление коммуникаторами
- 44. 2008 Результат выполнения: Управление коммуникаторами
- 45. 2008 Подпрограмма MPI_Comm_free помечает коммуникатор comm для удаления: int MPI_Comm_free(MPI_Comm *comm) MPI_Comm_free(comm, ierr) Обмены, связанные с
- 46. 2008 Сравнение двух коммуникаторов (comm1) и (comm2) выполняется подпрограммой MPI_Comm_compare: int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int
- 47. 2008 К числу операций управления коммуникаторами можно отнести операции MPI_Comm_size и MPI_Comm_rank. Они позволяют, в частности,
- 48. 2008 С помощью подпрограммы MPI_Comm_set_name можно присвоить коммуникатору comm строковое имя name: int MPI_Comm_set_name(MPI_Comm com, char
- 49. 2008 Две области взаимодействия можно объединить в одну. Подпрограмма MPI_Intercomm_merge создает интракоммуникатор newcomm из интеркоммуникатора oldcomm:
- 50. 2008 Доступ к удаленной группе, связанной с интеркоммуникатором comm, можно получить, обратившись к подпрограмме: int MPI_Comm_remote_group(MPI_Comm
- 51. 2008 Подпрограмма MPI_Comm_remote_size определяет размер удаленной группы, связанной с интеркоммуникатором comm: int MPI_Comm_remote_size(MPI_Comm comm, int *size)
- 52. Операции обмена между группами процессов 2008
- 53. Интеробмены 2008 При выполнении интеробмена процессу-источнику сообщения указывается ранг адресата относительно удаленной группы, а процессу-получателю —
- 54. 2008 Интеробмен возможен, только если создан соответствующий интеркоммуникатор, а это можно сделать с помощью подпрограммы: int
- 55. 2008 Выходной параметр ⎯ интеркоммуникатор (new_intercomm). «Джокеры» в качестве параметров использовать нельзя. Вызов этой подпрограммы должен
- 56. 2008 Пример создания интеркоммуникаторов #include "mpi.h" #include int main(int argc,char *argv[]) { int counter, message, myid,
- 57. 2008 if(!color) { remote_leader_rank = server; } else { remote_leader_rank = 0; } MPI_Intercomm_create(splitcomm, 0, oldcommdup,
- 58. 2008 else{ counter = myid; MPI_Send(&counter, 1, MPI_INT, 0, 0, inter_comm); printf("Process rank %i send %i\n",
- 59. 2008 В этой программе процессы делятся на две группы: первая состоит из одного процесса (процесс с
- 60. 2008 Интеробмены
- 61. 2008 В этой лекции мы рассмотрели: способы создания групп процессов; способы создания коммуникаторов; особенности использования интра-
- 62. 2008 Задания для самостоятельной работы Решения следует высылать по электронной почте: parallel-g112@yandex.ru
- 63. 2008 Задания для самостоятельной работы Напишите параллельную программу, в которой создаются N групп процессов, и обмен
- 65. Скачать презентацию