Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
32
Добавлен:
19.04.2015
Размер:
312.71 Кб
Скачать

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

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

23

Операция – коллективная

Вызов функции MPI_Comm_split должен быть выполнен в каждом процессе коммуникатора oldcom.

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

На основе сформированных групп создается набор коммуникаторов.

Порядок нумерации процессов соответствует

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

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

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

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

28

Пример

Лекция 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. И.Г. Захарова, кафедра ПО

Соседние файлы в папке Параллельное программирование (лекции)