Прототип системы автоматического распараллеливания “Parus.”

реклама
Московский Государственный Университет им.
М.В. Ломоносова, факультет ВМиК
Прототип системы
автоматического распараллеливания
“Parus”
Докладчик: Алексей Сальников
salnikov@angel.cs.msu.su
Цели проекта
Выяснить возможность
программирования в терминах
графов.
Разработать набор программных
утилит, для этой цели.
Исследовать возможность
автоматического распараллеливания.
Предлагаемый подход
По программе на языке C
строится граф алгоритма.
for(i=0i<10;i++)
{
…
По графу и данным о
производительности
процессоров и сети
строится расписание.
Граф преобразуется в
программу с MPI вызовами.
Полученная программа
выполняется на
процессорах.
Программа
на
MPI
Предлагаемый подход
Человек пишет программу в
терминах графа
изначально.
По графу и данным о
производительности
процессоров и сети
строится расписание.
Граф преобразуется в
программу с MPI вызовами.
Полученная программа
выполняется на
процессорах.
Программа
на
MPI
Компоненты и связи
C программа
parser
network_test
Граф
алгоритма
Исходные
коды узлов
графа
graph2c++
graph2sch
Исходные коды ядра
инструментальной
системы
Расписание
compiler
Многопроцессорная
система
Результаты
работы
программы.
Скорости
передачи
данных
processor_test
Производите
льность
процессоров
viewer
parser – по C программе строит граф алгоритма.
graph2c++ – по графу алгоритма строит программу на C++ с MPI
вызовами.
graph2sch – по графу алгоритма и результатам тестов строит
статическое расписание выполнения программы на многопроцессорной
системе.
network_test – производит тестирование коммуникаций в
многопроцессорной системе.
processor_test – производит тестирование процессоров в
многопроцессорной системе.
viewer – отображает граф алгоритма на мониторе компьютера.
compiler – обычный компилятор MPI с помощью которого
компилируется программа.
Автоматическое получение графа
алгоритма.
source
Анализатор
Граф
Пример 1
Текст исходной программы
for(a=0; a<4; a++)
d[a] = a*a;
b = 1;
a = b+2;
c = d[2]*b/a;
Пример 1
Визуальное представление графа
d[0]=0;
d[1]=1;
d[2]=4;
a=b+1;
c=d[2]*b/a;
d[3]=9;
b=1;
Понятие графа алгоритма.
Граф алгоритма - ориентированный, с пометками на
дугах и вершинах. Направление дуги задает порядок
следования операторов, метка - передаваемые
данные.
Граф алгоритма - сильно ацикличен:
Отсутствуют дуги между вершинами одного яруса
Отсутствуют дуги “снизу-вверх” - от вершин яруса
с большим номером к вершинам яруса с меньшим
номером.
Ярусы нумеруются по возрастанию. Метки
(операторы) вершин, расположенных в одном ярусе
могут быть выполнены одновременно.
при отображении на
мультипроцессор.
Узел графа сложный, в вычислительном смысле, набор
операторов.
Операторы узла графа явно обращаются только к
локальной памяти процессора многопроцессорной
системы.
Операторы узла графа, выполняются только в тот момент
времени, когда получены все данные, входящие в вершину
графа по дугам графа.
Данные по дугам могут приходить в произвольном
порядке, асинхронно.
Типы информационных зависимостей
Прямая зависимость по данным
«out-in»
Обратная зависимость по данным
«in-out»
Зависимость по выходам
«out-out»
Прямая информационная зависимость
Самый простой и очевидный тип зависимости
между операторами: первый меняет данные,
второй - читает измененные данные.
Меняем «a»
a = 1;
«a»
Читаем «a»
b=a+1;
Обратная информационная зависимость
Первый читает данные, второй - меняет данные.
Очевидно, порядок менять нельзя - изменится
результат. Передача данных не происходит.
Читаем «a»
b=a+1;
«»
Меняем «a»
a = 1;
Зависимость по выходам
Это тип зависимости возникает при повторном
изменении данных.
Последовательный
вариант
a = 1;
a=1
a = 1;
a=2
a=2;
Параллельный
вариант
a = 2;
aa =
= 2?
Зависимость по выходам без передачи данных
Подобный тип зависимости может вызывать
передачу данных, однако не всегда.
Присваиваем 1
a = 1;
Нет передачи
Присваиваем 2
a=2;
Узел графа алгоритма
head – код содержит описания
переменных и начальную
инициализацию данных
необходимых узлу.
Время
head
body – код выполняемый после
получения всех необходимых
данных.
tail – код содержит действия по
подчистке памяти и
утилизации данных.
Приём данных
по рёбрам
body
Упаковка
данных для
передачи
tail
Граф алгоритма и переменные программы.
Все переменные, общие для различных узлов графа,
должны быть описаны глобально.
В специальном узле графа (root) должна быть описана
та часть программы, которая должна быть
выполнена на всех процессорах до вызова узлов
графа алгоритма.
В специальном узле графа алгоритма (tail) должна
быть описана та часть программы, которая должна
быть выполнена перед завершением программы.
Переменные необходимые только данному узлу
графа должны быть описаны в поле (head) узла графа
алгоритма.
Расписание исполнения
графа алгоритма.
Описание Расписания
Список элементов
si=(Ti, Pi, ti), где:
Ti – задача, описанная в
вершине графа.
Pi – процессор,
исполняющий задачу Ti
ti – время старта задачи Ti.
Требования к рассписанию.
Расписание должно быть допустимым
1)
2)
2 узла графа не могут быть одновременно
вызваны на одном процессоре,
должен соблюдаться порядок приёма и
передачи данных.
Расписание должно быть минимальным
(или близким к минимальному)
1)
быть таким, что программа построенная
по графу выполнится за минимальное
время.
Процесс исполнения графа
алгоритма на
многопроцессороной
системе.
Функции управляющего
процессора.
Определяет какие узлы графа на каком
процессоре вызвать.
Определяет по каким рёбрам графа пора
вести передачу данных, а по каким нет.
Определяет закончена ли передача данных
по тому или иному ребру и посылает
сигнал об освобождении буферов памяти.
Функции остальных процессоров.
Инициализируют передачу данных другим
процессорам по команде от управляющего
процессора.
Вызывают узел графа.
В узле графа принимают данные по ребрам от
других узлов графа на других процессорах.
Выполняют код узла.
Накапливают в памяти выработанные данные
необходимые другим узлам графа.
Узлы графа.
Рёбра графа
Расписание
процессорами.
Processor 0
Processor 1
Processor 2
NODE_CLE AN
Regime (NODE)
NODE_ QUESTION (0)
NODE_CLE AN
Regime (NODE)
NODE_ QUESTION (1)
NODE_CLE AN
Regime (EDGE)
Edges_send (E=1,P=2)
Regime (NODE)
NODE_ QUESTION (2)
DATA (E=1)
RECV_INFO
RECV_INFO
EDGES_PLACE
Recv_edge_finished (E=1)
NODE_CLE AN
Regime (EDGE)
Edges_send (E=2,P=1)
EDGES_PLACE
DATA (E=2)
Recv_edge_finished (E=2)
NODE_CLE AN
Regime (STOP)
Regime (STOP)
Тестирование
многопроцессорной
системы.
Тесты производительности
процессоров и сети.
Производительность процессора
проверяется на неоднократном
локальном перемножении матриц
фиксированной размерности.
Производительность сети измеряется
на обменах типа точка - точка в 4-х
различных режимах:
Режимы тестирования сети
Замер времени
блокированного приёма
сообщения.
Замер времени между
посылкой и приёмом
сообщения той же длинны,
отправляемого процессором
по приёму первого.
Processor
i
Processor
j
Processor
i
Processor
j
Замер времени в случае
одновременной передачи
сообщений навстречу друг
другу.
Замер времени между
инициализацией приёма и
приёмом сообщения от
процессора в случае общения
всех со всеми.
Processor
i
Processor
k
Processor
j
Processor
l
Представление результатов тестов.
Производительность процессоров
представляется в виде вектора.
Производительность сети
представляется в виде набора матриц
по длинам сообщений, где элемент
матрицы – среднестатистическое время
передачи сообщения между
процессорами.
Результаты
Результаты
Разработана структура и набор программных
утилит.
Проведены некоторые элементарные тесты
показывающие работоспособность системы в
целом.
Выявлен ряд существенных недостатков,
которые помогли определить стратегию
развития системы в будующем.
Пример 2 (поиск минимума в wav файле)
Пример 2 (поиск минимума в wav файле)
Перспективы и пути
развития.
Что предполагается сделать в будущем.
Изменить узел графа алгоритма, с целью борьбы с
детерменизмом.
Усовершенствовать редактор графа алгоритма, с
целью предоставления возможности редактирования
графа через графический интерфейс.
Подключение всей системы в целом как узла GRID
(Подключение авторизации, и набора эталонных задач).
Добавить циклы и условное ветвление.
Добавить перепланировщик графа, который будет
учитывать особенности архитектуры.
Узел графа алгоритма (в будущем. )
code – код содержит описания
переменных и начальную
инициализацию данных
необходимых узлу, обработку
данных, утилизацию данных
если они больше не нужны.
Data change block – код
связанный с получением или
передачей данных.
Генерируется автоматически .
Время
code
Data
change
block
code
Data
change
block
code
Data
change
block
Авторы приносят благодарности члену
корреспонденту РАН, профессору
Льву Николаевичу Королёву и доктору физ.
мат. наук, доценту Нине Николаевне
Поповой за консультации при создании
данной системы.
Данная работа выполняется в рамках
студенческой лаборатории Intel МГУ.
При поддержке гранта РФФИ 02-07-90130 и
гранта РФФИ 02-07-06104.
Спасибо за внимание
salnikov@angel.cs.msu.su
Скачать