Технология разработки распределенных параллельных программ с помощью

advertisement
Технология разработки
распределенных
параллельных программ с
помощью
Cluster OpenMP
На примере библиотеки алгоритмов обработки вероятностных сетей
Probabalistic Network Library (PNL)
Отчет за период с 01.07.06 по 30.09.06
Нижегородский Государственный университет им. Н.И. Лобачевского
1/29
Исполнители
Кураторы:
• Сысоев Александр (ННГУ)
• Тананакин Андрей (Intel)
Участники:
• Камаев Андрей (ITLab)
• Коваленко Александр (ITLab)
• Лабутина Анна (ННГУ)
• Сиднев Алексей (ITLab)
Нижегородский Государственный университет им. Н.И. Лобачевского
2/29
Содержание
•
•
•
•
•
•
•
•
3/29
Цели проекта
Введение
Технологии создания параллельных программ
Технология Cluster OpenMP
Использование Cluster OpenMP для
распараллеливания алгоритмов вывода и
обучения (PNL)
Оптимизация Cluster OpenMP реализаций
параллельных алгоритмов вывода и обучения
Заключение
Литература
Нижегородский Государственный университет им. Н.И. Лобачевского
4/29
Цели проекта
Нижегородский Государственный университет им. Н.И. Лобачевского
Цели проекта
5/29
• Используя
реализацию
PNL
под
OpenMP,
распараллелить алгоритмы библиотеки PNL с
помощью Cluster OpenMP на Linux EM64T.
• Сравнить производительность параллельных версий
алгоритмов на основе Cluster OpenMP с версиями на
основе MPI и OpenMP
• Собрать
статистику,
характеризующую
процесс
внедрения в программный код указанных алгоритмов
библиотеки PNL c поддержкой Cluster OpenMP
• В работе над алгоритмами библиотеки применить
Intel® Thread Checker и Intel® Thread Profiler, собрать
и оформить отзывы по из использованию
• Опубликовать результаты на www.sourceforge.net
Нижегородский Государственный университет им. Н.И. Лобачевского
6/29
Введение
Нижегородский Государственный университет им. Н.И. Лобачевского
Введение
7/29
• Какие средства необходимы программисту для
создания параллельной программы?
– Процессы
– Потоки
– Инструменты передачи данных через сеть
• Поддержка со стороны операционной системы
• Инструменты параллельного
программирования
– Отладчики, сборщики трасс, «предсказатели
эффективности»
– Технологии
Нижегородский Государственный университет им. Н.И. Лобачевского
8/29
Технологии создания
параллельных программ
Нижегородский Государственный университет им. Н.И. Лобачевского
9/29
Технологии создания параллельных программ
Многопоточное программирование – Наиболее
общий способ создания параллельных
программ для систем с общей памятью.
Функциональны параллелизм = написание
различных потоковых функций.
Параллелизм по данным = общее виртуальное
адресное пространство процесса.
Необходима синхронизация и преодоление
возможных проблем: взаимной блокировки,
тупиков, гонок данных,…
Нижегородский Государственный университет им. Н.И. Лобачевского
10/29
Технологии создания параллельных программ
OpenMP – это технология, которая позволяет
переложить реализацию решений
типовых проблем многопоточного
программирования на компилятор. К
достоинствам этой технологии можно
отнести простоту использования,
гибкость и возможность повторного
использования программ.
Нижегородский Государственный университет им. Н.И. Лобачевского
11/29
Технологии создания параллельных программ
MPI – предоставляет механизм построения
параллельных программ в модели обмена
сообщениями, характерной для разработки в
кластерных системах. Стандарт
специфицирует набор функций и вводит
определенный уровень абстракций на основе
сообщений, типов, групп и коммуникаторов,
виртуальных топологий. К достоинствам этой
технологии можно отнести переносимость и
повышение эффективности параллельных
программ.
Нижегородский Государственный университет им. Н.И. Лобачевского
12/29
Технология Cluster OpenMP
Нижегородский Государственный университет им. Н.И. Лобачевского
13/29
Технология Cluster OpenMP
• В 2006 году в Intel® C++ Compiler 9.1 появилась
поддержка Cluster OpenMP
• Технология Cluster OpenMP поддерживает выполнение
OpenMP программ на нескольких вычислительных
узлах, соединенных сетью.
В этом случае узлы не обладают общей (shared)
памятью (как в OpenMP), это решается
программным путем в библиотеке – "распределенная
общая память” (distributed shared memory).
Нижегородский Государственный университет им. Н.И. Лобачевского
14/29
Технология Cluster OpenMP
Особенности имитации в Cluster OpenMP
Имитация памяти
• нужно синхронизировать данные между узлами при
чтении/записи
Программист должен уменьшать число разделяемых данных!
Имитация единого пространство потоков
• на самом деле на узлах выполняется несколько
процессов
Явным образом определяем число процессов и число потоков на
каждом процессе в ini файле
Нижегородский Государственный университет им. Н.И. Лобачевского
15/29
Технология Cluster OpenMP
Написание программ на Cluster OpenMP
Аналогично OpenMP:
• использование директив (простота программирования)
• гибкость
• …
Особенности:
• нужно явно определять какие данные должны быть в
разделяемой памяти
Нижегородский Государственный университет им. Н.И. Лобачевского
16/29
Технология Cluster OpenMP
Когда можно использовать Cluster OpenMP
• имеется хорошо ускорение на распараллеленной
OpenMP программе
• невысокие требования к синхронизации данных
Нижегородский Государственный университет им. Н.И. Лобачевского
17/29
Технология Cluster OpenMP
Нужно заметить…
• Если Cluster OpenMP программу на SMP машине она
будет работать как OpenMP (нужно это указать в ini
файле)
• Cluster OpenMP поддерживается пока только на
EM64T машинах (Linux)
Нижегородский Государственный университет им. Н.И. Лобачевского
18/29
Использование Cluster OpenMP
для распараллеливания
алгоритмов вывода и обучения
библиотеки обработки
вероятностных сетей Probabilistic
Network Library (PNL)
Нижегородский Государственный университет им. Н.И. Лобачевского
19/29
Цели и задачи портирования
Цель
портирования
–
получить
эффективные
реализации алгоритмов с использованием новой
технологии.
Первый этап:
• Gibbs Sampling Inference Engine
• EM Learning
Второй этап:
• Loopy Belief Propagation (Pearl)
• Junction Tree Inference Engine
Нижегородский Государственный университет им. Н.И. Лобачевского
20/29
Портирование
на первом этапе проекта
Gibbs Sampling Inference Engine
EM Learning
Нижегородский Государственный университет им. Н.И. Лобачевского
21/29
Шаг1: Перенос на Linux EM64T
• Сборка под Linux – успешно
• Сборка MPI версии – проблемы с компиляцией
• Соответствие результатов
– Собраны дампы всех существующих версий
– В Windows (32b) и Linux (64b) rand() работает по-разному
• Особенности существующей реализации
– Исправлен порядок загрузки и генерации наблюдений в MPI
версии теста для EM Learning
– Отключена
(при
помощи
препроцессора)
установка
максимального числа потоков для расчетов
Нижегородский Государственный университет им. Н.И. Лобачевского
22/29
Шаг2: Перенос на CLOMP
Следование концепции User’s Guide
– Библиотека скомпилировалась, но тесты завершались
ошибкой сегментирования
– Поддержка со
стороны
компилятора
(использование
рекомендуемых ключей) не позволила получить ожидаемых
результатов
– Использование решений для контейнеров STL и иерархий
наследования не удалось из-за проблем с компиляцией
Необходим
собственные решения
анализ
библиотеки
Нижегородский Государственный университет им. Н.И. Лобачевского
и
23/29
Шаг2: Перенос на CLOMP
Наше решение:
Концепция Cluster OpenMP несколько отличается от
модели OpenMP, поэтому мы решили их максимально
сблизить:
реализация выделения динамической
памяти только в sharable области
Но на этом портирование не закончилось
Нижегородский Государственный университет им. Н.И. Лобачевского
24/29
Шаг2: Перенос на CLOMP
– Теперь вызовы new в конструкторах глобальных не-sharable
объектов приводят к ошибкам сегментирования
Как найти такие объекты?
– Изменение семантики API
• omp_get_num_procs возвращает «странное» значение
• omp_set_num_threads стал небезопасным вызовом
– Проблемы с компиляцией параллельной секции
(компилятор перестал распараллеливать одну из секций)
Нижегородский Государственный университет им. Н.И. Лобачевского
25/29
Результаты портирования
Цель была достигнута:
– Портирование прошло успешно
• Тестовые приложения стабильно работают
• Результаты работы алгоритмов корректны
– Относительное ускорение максимально
(для Gibbs Sampling – линейно)
Но результат не идеален:
– MPI версия всегда на 30% быстрее
Нижегородский Государственный университет им. Н.И. Лобачевского
26/29
Портирование
на втором этапе проекта
Loopy Belief Propagation
Junction Tree Inference Engine
Нижегородский Государственный университет им. Н.И. Лобачевского
27/29
Шаг1: Перенос на Linux EM64T
• Были использованы знания с первого этапа
→ не возникло технических проблем
• В Junction Tree выявлены ошибки распределения
вычислительной нагрузки в OpenMP версии
→ внесены поправки в алгоритм
Нижегородский Государственный университет им. Н.И. Лобачевского
28/29
Шаг2: Перенос на CLOMP
Следование концепции User’s Guide
На этом этапе мы использовали более свежую версию
компилятора, и Intel Threading Tools
→ помощь от компилятора была более содержательной, но
столь же недостаточной
Собственная концепция:
В качестве общей идеи использовали подход, найденный на
первом этапе проекта – глобальная перегрузка new/delete.
Новая проблема:
• Некорректная работа со ссылками в параллельном регионе
→
мы заменили ссылки на указатели
Нижегородский Государственный университет им. Н.И. Лобачевского
29/29
Результаты портирования
Основная цель была достигнута:
– Портирование прошло успешно
• Тестовые приложения стабильно работают
• Результаты работы алгоритмов корректны
Но результат требует оптимизации:
– Вместо ускорения мы получили линейное ЗАМЕДЛЕНИЕ
Нижегородский Государственный университет им. Н.И. Лобачевского
30/29
Оптимизация Cluster
OpenMP реализаций
параллельных алгоритмов
вывода и обучения
Нижегородский Государственный университет им. Н.И. Лобачевского
31/29
Оптимизация CLOMP-версий алгоритмов PNL
После первого этапа работы на 2-х из 4-х алгоритмов не
удалось получить ускорение (JTree и Pearl).
Новая задача – оптимизация алгоритмов.
Нижегородский Государственный университет им. Н.И. Лобачевского
32/29
Оптимизация CLOMP-версий алгоритмов PNL
Intel предложил использовать инструменты Intel® Thread
Checker и Intel® Thread Profiler.
Для чего?
Intel® Thread Checker должен показать ошибки в коде.
Под Linux инструментация не прошла. Под Windows прошла только
бинарная инструментация, где найдено 3 ошибки (2 «гонки
данных» – JTree; ошибка «чтения/записи»– Pearl)
Intel® Thread Profiler должен помочь найти причины
замедления.
При замедлении в 2,5 раза Profiler предсказывал линейное ускорение!
Нижегородский Государственный университет им. Н.И. Лобачевского
33/29
Оптимизация CLOMP-версий алгоритмов PNL
Причины замедления
• выравнивание
данных
(OMP
–
16
байт,
CLOMP – 8 байт);
• медленная работа функций выделения/удаления
памяти;
• много лишних sharable данных, поэтому много
пересылок.
Нижегородский Государственный университет им. Н.И. Лобачевского
34/29
Оптимизация CLOMP-версий алгоритмов PNL
Оптимизация
Для решения задачи оптимизации было предложено
использовать MPI реализацию.
Почему?
Такая реализация
пересылок.
использует
минимальное
число
Это позволяет и
в Cluster OpenMP реализации
использовать меньше sharable данных!
Нижегородский Государственный университет им. Н.И. Лобачевского
35/29
Оптимизация CLOMP-версий алгоритмов PNL
Как этого добиться?
• была переписана реализация MPI API под Cluster
OpenMP;
• в параллельную секцию был помещен весь код
тестового приложения;
Нижегородский Государственный университет им. Н.И. Лобачевского
36/29
Оптимизация CLOMP-версий алгоритмов PNL
Pearl
0,35
0,3
time
0,25
0,2
0,15
0,1
0,05
0
MPI
CLOMP
MPI to CLOMP
MPI to CLOMP-opt
Нижегородский Государственный университет им. Н.И. Лобачевского
37/29
Оптимизация CLOMP-версий алгоритмов PNL
EMLearn
4
3,5
speedup
3
2,5
2
1,5
1
0,5
0
2
3
MPI
CLOMP
4
MPI to CLOMP
Нижегородский Государственный университет им. Н.И. Лобачевского
38/29
Оптимизация CLOMP-версий алгоритмов PNL
EMLearn
8
7
6
time
5
4
3
2
1
0
1
2
MPI
3
CLOMP
4
MPI to CLOMP
Нижегородский Государственный университет им. Н.И. Лобачевского
39/29
Заключение
Нижегородский Государственный университет им. Н.И. Лобачевского
Заключение
•
•
•
40/29
Получен положительный опыт использования новой
технологии разработки параллельных программ для
систем с распределенной памятью Cluster OpenMP.
В ходе исследований последовательность
портирования OpenMP программ на Cluster
OpenMPопробована на примере библиотеки
обработки вероятностных сетей Probabilistic Network
Library и дополнена новыми пунктами.
Разработана и практически опробована на алгоритмах
PNL последовательность действий по портированию
MPI вер-сий параллельных программ на Cluster
OpenMP. Получены сравнительные оценки затрат на
портирование с OpenMP и MPI (только на примере
библиотеки PNL).
Нижегородский Государственный университет им. Н.И. Лобачевского
Заключение
•
41/29
Направление дальнейших исследований в
рамках описанной в настоящей работе темы сравнение эффективности трех технологий
создания параллельных программ: OpenMP,
MPI и Cluster OpenMP.
– с точки зрения накладных расходов,
которые привносит использование
выбранной технологии,
– с точки зрения эффективности и
масштабируемости готовых параллельных
версий.
Нижегородский Государственный университет им. Н.И. Лобачевского
Литература
•
•
•
•
•
42/29
Belov S.A., Gergel V.P., Sysoyev A.V. Scalable parallel
inference algorithms in probabilistic networks //
Preproceedings of UK-Russia Workshop on Proactive
Computing, N. Novgorod, 2005, P. 5 – 10.
Cluster OpenMP User’s Guide Version 9.1:
http://developer.intel.com.
Gergel V.P. Teaching Course: CS338. Introduction to
Parallel Programming:
http://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594.
Официальный форум MPI: http://www.mpi-forum.org.
Официальный сайт OpenMP: http://www.openmp.org.
Нижегородский Государственный университет им. Н.И. Лобачевского
43/29
Вопросы?
Нижегородский Государственный университет им. Н.И. Лобачевского
Download