1e3e5d185aae3884aa40b4e37176aba3.ppt
- Количество слайдов: 43
Технология разработки распределенных параллельных программ с помощью Cluster Open. MP На примере библиотеки алгоритмов обработки вероятностных сетей Probabalistic Network Library (PNL) Отчет за период с 01. 07. 06 по 30. 09. 06 Нижегородский Государственный университет им. Н. И. Лобачевского
Исполнители Кураторы: • Сысоев Александр (ННГУ) • Тананакин Андрей (Intel) Участники: • Камаев Андрей (ITLab) • Коваленко Александр (ITLab) • Лабутина Анна (ННГУ) • Сиднев Алексей (ITLab) Нижегородский Государственный университет им. Н. И. Лобачевского 2
Содержание • • Цели проекта Введение Технологии создания параллельных программ Технология Cluster Open. MP Использование Cluster Open. MP для распараллеливания алгоритмов вывода и обучения (PNL) Оптимизация Cluster Open. MP реализаций параллельных алгоритмов вывода и обучения Заключение Литература Нижегородский Государственный университет им. Н. И. Лобачевского 3
4 Цели проекта Нижегородский Государственный университет им. Н. И. Лобачевского
Цели проекта 5 • Используя реализацию PNL под Open. MP, распараллелить алгоритмы библиотеки PNL с помощью Cluster Open. MP на Linux EM 64 T. • Сравнить производительность параллельных версий алгоритмов на основе Cluster Open. MP с версиями на основе MPI и Open. MP • Собрать статистику, характеризующую процесс внедрения в программный код указанных алгоритмов библиотеки PNL c поддержкой Cluster Open. MP • В работе над алгоритмами библиотеки применить Intel® Thread Checker и Intel® Thread Profiler, собрать и оформить отзывы по из использованию • Опубликовать результаты на www. sourceforge. net Нижегородский Государственный университет им. Н. И. Лобачевского
6/29 Введение Нижегородский Государственный университет им. Н. И. Лобачевского
Введение 7 • Какие средства необходимы программисту для создания параллельной программы? – Процессы – Потоки – Инструменты передачи данных через сеть • Поддержка со стороны операционной системы • Инструменты параллельного программирования – Отладчики, сборщики трасс, «предсказатели эффективности» – Технологии Нижегородский Государственный университет им. Н. И. Лобачевского
8/29 Технологии создания параллельных программ Нижегородский Государственный университет им. Н. И. Лобачевского
9/29 Технологии создания параллельных программ Многопоточное программирование – Наиболее общий способ создания параллельных программ для систем с общей памятью. Функциональны параллелизм = написание различных потоковых функций. Параллелизм по данным = общее виртуальное адресное пространство процесса. Необходима синхронизация и преодоление возможных проблем: взаимной блокировки, тупиков, гонок данных, … Нижегородский Государственный университет им. Н. И. Лобачевского
10/29 Технологии создания параллельных программ Open. MP – это технология, которая позволяет переложить реализацию решений типовых проблем многопоточного программирования на компилятор. К достоинствам этой технологии можно отнести простоту использования, гибкость и возможность повторного использования программ. Нижегородский Государственный университет им. Н. И. Лобачевского
11/29 Технологии создания параллельных программ MPI – предоставляет механизм построения параллельных программ в модели обмена сообщениями, характерной для разработки в кластерных системах. Стандарт специфицирует набор функций и вводит определенный уровень абстракций на основе сообщений, типов, групп и коммуникаторов, виртуальных топологий. К достоинствам этой технологии можно отнести переносимость и повышение эффективности параллельных программ. Нижегородский Государственный университет им. Н. И. Лобачевского
12/29 Технология Cluster Open. MP Нижегородский Государственный университет им. Н. И. Лобачевского
13/29 Технология Cluster Open. MP • В 2006 году в Intel® C++ Compiler 9. 1 появилась поддержка Cluster Open. MP • Технология Cluster Open. MP поддерживает выполнение Open. MP программ на нескольких вычислительных узлах, соединенных сетью. В этом случае узлы не обладают общей (shared) памятью (как в Open. MP), это решается программным путем в библиотеке – "распределенная общая память” (distributed shared memory). Нижегородский Государственный университет им. Н. И. Лобачевского
14/29 Технология Cluster Open. MP Особенности имитации в Cluster Open. MP Имитация памяти • нужно синхронизировать данные между узлами при чтении/записи Программист должен уменьшать число разделяемых данных! Имитация единого пространство потоков • на самом деле на узлах выполняется несколько процессов Явным образом определяем число процессов и число потоков на каждом процессе в ini файле Нижегородский Государственный университет им. Н. И. Лобачевского
15/29 Технология Cluster Open. MP Написание программ на Cluster Open. MP Аналогично Open. MP: • использование директив (простота программирования) • гибкость • … Особенности: • нужно явно определять какие данные должны быть в разделяемой памяти Нижегородский Государственный университет им. Н. И. Лобачевского
16/29 Технология Cluster Open. MP Когда можно использовать Cluster Open. MP • имеется хорошо ускорение на распараллеленной Open. MP программе • невысокие требования к синхронизации данных Нижегородский Государственный университет им. Н. И. Лобачевского
17/29 Технология Cluster Open. MP Нужно заметить… • Если Cluster Open. MP программу на SMP машине она будет работать как Open. MP (нужно это указать в ini файле) • Cluster Open. MP поддерживается пока только на EM 64 T машинах (Linux) Нижегородский Государственный университет им. Н. И. Лобачевского
18/29 Использование Cluster Open. MP для распараллеливания алгоритмов вывода и обучения библиотеки обработки вероятностных сетей 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 EM 64 T • Сборка под Linux – успешно • Сборка MPI версии – проблемы с компиляцией • Соответствие результатов – Собраны дампы всех существующих версий – В Windows (32 b) и Linux (64 b) rand() работает по-разному • Особенности существующей реализации – Исправлен порядок загрузки и генерации наблюдений в MPI версии теста для EM Learning – Отключена (при помощи препроцессора) установка максимального числа потоков для расчетов Нижегородский Государственный университет им. Н. И. Лобачевского
22/29 Шаг 2: Перенос на CLOMP Следование концепции User’s Guide – Библиотека скомпилировалась, но тесты завершались ошибкой сегментирования – Поддержка со стороны компилятора (использование рекомендуемых ключей) не позволила получить ожидаемых результатов – Использование решений для контейнеров STL и иерархий наследования не удалось из-за проблем с компиляцией Необходим анализ библиотеки и собственные решения Нижегородский Государственный университет им. Н. И. Лобачевского
23/29 Шаг 2: Перенос на CLOMP Наше решение: Концепция Cluster Open. MP несколько отличается от модели Open. MP, поэтому мы решили их максимально сблизить: реализация выделения динамической памяти только в 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 EM 64 T • Были использованы знания с первого этапа → не возникло технических проблем • В Junction Tree выявлены ошибки распределения вычислительной нагрузки в Open. MP версии → внесены поправки в алгоритм Нижегородский Государственный университет им. Н. И. Лобачевского
28/29 Шаг 2: Перенос на CLOMP Следование концепции User’s Guide На этом этапе мы использовали более свежую версию компилятора, и Intel Threading Tools → помощь от компилятора была более содержательной, но столь же недостаточной Собственная концепция: В качестве общей идеи использовали подход, найденный на первом этапе проекта – глобальная перегрузка new/delete. Новая проблема: • Некорректная работа со ссылками в параллельном регионе → мы заменили ссылки на указатели Нижегородский Государственный университет им. Н. И. Лобачевского
29/29 Результаты портирования Основная цель была достигнута: – Портирование прошло успешно • Тестовые приложения стабильно работают • Результаты работы алгоритмов корректны Но результат требует оптимизации: – Вместо ускорения мы получили линейное ЗАМЕДЛЕНИЕ Нижегородский Государственный университет им. Н. И. Лобачевского
30/29 Оптимизация Cluster Open. MP реализаций параллельных алгоритмов вывода и обучения Нижегородский Государственный университет им. Н. И. Лобачевского
31/29 Оптимизация CLOMP-версий алгоритмов PNL После первого этапа работы на 2 -х из 4 -х алгоритмов не удалось получить ускорение (JTree и Pearl). Новая задача – оптимизация алгоритмов. Нижегородский Государственный университет им. Н. И. Лобачевского
32/29 Оптимизация CLOMP-версий алгоритмов PNL Intel предложил использовать инструменты Intel® Thread Checker и Intel® Thread Profiler. Для чего? d e k с lu Intel® Thread Checker должен показать ошибки в коде. Под Linux инструментация не прошла. Под Windows прошла только бинарная инструментация, где найдено 3 ошибки (2 «гонки данных» – JTree; ошибка «чтения/записи» – Pearl) P Intel® Thread Profiler должен помочь найти причины замедления. При замедлении в 2, 5 раза Profiler предсказывал линейное ускорение! Нижегородский Государственный университет им. Н. И. Лобачевского
33/29 Оптимизация CLOMP-версий алгоритмов PNL Причины замедления • выравнивание данных (OMP – 16 байт, CLOMP – 8 байт); • медленная работа функций выделения/удаления памяти; • много лишних sharable данных, поэтому много пересылок. Нижегородский Государственный университет им. Н. И. Лобачевского
34/29 Оптимизация CLOMP-версий алгоритмов PNL Оптимизация Для решения задачи оптимизации было предложено использовать MPI реализацию. Почему? Такая реализация использует минимальное число пересылок. Это позволяет и в Cluster Open. MP реализации использовать меньше sharable данных! Нижегородский Государственный университет им. Н. И. Лобачевского
35/29 Оптимизация CLOMP-версий алгоритмов PNL Как этого добиться? • была переписана реализация MPI API под Cluster Open. MP; • в параллельную секцию был помещен весь код тестового приложения; Нижегородский Государственный университет им. Н. И. Лобачевского
36/29 Оптимизация CLOMP-версий алгоритмов PNL Нижегородский Государственный университет им. Н. И. Лобачевского
37/29 Оптимизация CLOMP-версий алгоритмов PNL Нижегородский Государственный университет им. Н. И. Лобачевского
38/29 Оптимизация CLOMP-версий алгоритмов PNL Нижегородский Государственный университет им. Н. И. Лобачевского
39/29 Заключение Нижегородский Государственный университет им. Н. И. Лобачевского
Заключение • • • 40/29 Получен положительный опыт использования новой технологии разработки параллельных программ для систем с распределенной памятью Cluster Open. MP. В ходе исследований последовательность портирования Open. MP программ на Cluster Open. MPопробована на примере библиотеки обработки вероятностных сетей Probabilistic Network Library и дополнена новыми пунктами. Разработана и практически опробована на алгоритмах PNL последовательность действий по портированию MPI вер-сий параллельных программ на Cluster Open. MP. Получены сравнительные оценки затрат на портирование с Open. MP и MPI (только на примере библиотеки PNL). Нижегородский Государственный университет им. Н. И. Лобачевского
Заключение • 41/29 Направление дальнейших исследований в рамках описанной в настоящей работе темы сравнение эффективности трех технологий создания параллельных программ: Open. MP, MPI и Cluster Open. MP. – с точки зрения накладных расходов, которые привносит использование выбранной технологии, – с точки зрения эффективности и масштабируемости готовых параллельных версий. Нижегородский Государственный университет им. Н. И. Лобачевского
Литература • • • 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 Open. MP User’s Guide Version 9. 1: http: //developer. intel. com. Gergel V. P. Teaching Course: CS 338. Introduction to Parallel Programming: http: //www. msdnaacr. net/curriculum/pfv. aspx? ID=6594. Официальный форум MPI: http: //www. mpi-forum. org. Официальный сайт Open. MP: http: //www. openmp. org. Нижегородский Государственный университет им. Н. И. Лобачевского
43/29 Вопросы? Нижегородский Государственный университет им. Н. И. Лобачевского
1e3e5d185aae3884aa40b4e37176aba3.ppt