Параллельное программирование (лекции) / lec13ПП
.pptx1
Виртуальные топологии
•Под топологией вычислительной системы понимают структуру узлов сети и линий связи между этими узлами.
•Топология может быть представлена в виде графа, в котором
▫вершины есть процессоры (процессы) системы,
▫дуги соответствуют имеющимся линиям (каналам) связи.
Лекция 13. И.Г. Захарова, кафедра ПО
2
•Парные операции передачи данных могут быть выполнены между любыми процессами коммуникатора.
•В коллективной операции принимают участие все процессы коммуникатора.
•Следовательно,
логическая топология линий связи между процессами в параллельной программе имеет структуру полного графа.
•Можно организовать логическое представление любой необходимой виртуальной топологии независимо от физической сети - с помощью дополнительной адресации процессов.
Лекция 13. И.Г. Захарова, кафедра ПО
3
Пример - топология некоторого графа
•Функция для создания коммуникатора с топологией типа граф:
int MPI_Graph_create(MPI_Comm oldcomm, int nnodes, int *index, int *edges, int reorder, MPI_Comm* graphcomm)
oldcomm-исходныйкоммуникатор, nnodes-количество вершин графа,
index-количество исходящих дуг для каждой вершины, edges-последовательный список дуг графа,
reorder-параметр допустимости изменения нумерации процессов,
graphcomm–создаваемый коммуникатор с топологией типа граф.
•Операция создания топологии является коллективной и должна выполняться всеми процессами исходного коммуникатора
Лекция 13. И.Г. Захарова, кафедра ПО
4
Пример
Лекция 13. И.Г. Захарова, кафедра ПО
5
Для создания топологии с графом данного вида необходимо добавить в программу код:
...
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);
...
Лекция 13. И.Г. Захарова, кафедра ПО
6
Производные типы данных
•Для передачи сообщений м.б. недостаточно базовых типов.
•При использовании функций передачи
данных предполагали, что сообщения - некоторый непрерывный
вектор элементов базового типа MPI.
•B общем случае данные могут располагаться в памяти не рядом и состоять из разнотипных значений.
Лекция 13. И.Г. Захарова, кафедра ПО
7
Производные типы данных
Возможные варианты:
•Разрозненные данные могут быть
▫переданы с использованием нескольких
сообщений (накопление латентности операций
передачи данных из-за роста их числа).
▫предварительно упакованы в формат
непрерывного вектора (лишние операции копирования данных).
Лекция 13. И.Г. Захарова, кафедра ПО
8
Общий случай
•Описание производного типа включает:
▫Описание набора значений предусмотренного в MPI типа,
▫Описание расположения значений (могут не располагаться непрерывно по памяти).
•Основа –
▫карта типа:
TypeMap = {(type0,disp0), (type1,disp1), …}
▫сигнатура типа:
TypeSignature = {type0, type1, …}
Лекция 13. И.Г. Захарова, кафедра ПО
9
Интерпретация
•Производный тип MPI - скрытый объект, который специфицирует:
▫последовательность базовых типов,
▫последовательность смещений.
•Последовательность таких пар определяется как отображение (карта) типа.
•Использование производного типа в функциях обмена сообщениями – трафарет для интерпретации данных, наложенный на область памяти, которая содержит передаваемое или принятое сообщение.
Лекция 13. И.Г. Захарова, кафедра ПО
10
Пример
•Пусть в сообщение должны входить значения переменных:
double a; // адрес 24 double b; // адрес 40 int n; // адрес 48
•Тогда производный тип для описания данных должен иметь карту типа вида:
{(MPI_DOUBLE,0),(MPI_DOUBLE,16),
(MPI_INT,24)}
Лекция 13. И.Г. Захарова, кафедра ПО