ВКР: Отладка эффективности OpenMP-программ
Описание
Московский государственный университет им. М. В. Ломоносова
Факультет вычислительной математики и кибернетики
Кафедра системного программирования
Дипломная работа
Отладка эффективности OpenMP-программ
Научный руководитель
профессор, д.ф.-м. н.
Крюков Виктор Алексеевич
Содержание
2. Обзор существующих решений. 7
3. Сбор данных и анализ эффективности. 15
3.1. Используемые термины.. 16
3.5. Соглашение об именовании файлов. 20
3.7. Анализ MPI/OpenMP и DVM/OpenMP программ.. 22
3.8. Получение читаемой трассы.. 22
3.9. Указания для правильной расстановки интервалов. 22
5. Замедление проинструментированных программ и расчет требуемых ресурсов. 26
Приложение А. Описание используемых функций инструментации и контекстных строк. 30
Приложение Б. Формат промежуточной трассы.. 32
Приложение В. Формат протокола анализатора. 33
Приложение Г. Формат читаемой трассы.. 34
Приложение Д. Ключи анализатора. 35
Приложение Е. Пример работы трассировщика и анализатора. 36
Аннотация.
Целью данной дипломной работы является создание набора инструментов для анализа и отладки эффективности программ в гибридной модели DVM/OpenMP и MPI/OpenMP. Выдаваемые характеристики эффективности должны соответствовать характеристикам анализатора эффективности системы DVM.
Практическим результатом дипломной работы является разработка трассировщика и анализатора эффективности OpenMP-программ.
Введение
В современных условиях необходимость обработки все больших и больших объемов информации постоянно ставит перед программистами задачи повышения производительности разрабатываемых ими систем. Поскольку сейчас широкое распространение получили многоядерные процессоры, практически в любой системе используются SMP-элементы [14]. Стандартом программирования для компьютеров с SMP архитектурой стал OpenMP [4]. Применение MPI в рамках данной архитектуры не очень эффективно ввиду использования сообщений как единственного средства взаимодействия между процессами
За счет идеи "инкрементального распараллеливания" OpenMP идеально подходит для разработчиков, желающих быстро распараллелить свои вычислительные программы с большими параллельными циклами. Разработчик не создает новую параллельную программу, а просто добавляет в текст последовательной программы OpenMP-директивы.
Стоит отметить некоторые особенности OpenMP-программ:
- OpenMP - достаточно гибкий механизм, предоставляющий разработчику большие возможности контроля над поведением параллельного приложения.
- OpenMP-программа на однопроцессорной платформе может быть использована в качестве последовательной программы, т.е. нет необходимости поддерживать последовательную и параллельную версии. Директивы OpenMP игнорируются последовательным компилятором, а для вызова процедур OpenMP могут быть подставлены заглушки (stubs), текст которых приведен в спецификациях.
- Одним из достоинств OpenMP его разработчики считают поддержку так называемых "orphan" (оторванных) директив, то есть директивы синхронизации и распределения работы могут не входить непосредственно в лексический контекст параллельной области.
Пользователь разрабатывает параллельную программу для ускорения решения существующих задач, для возможности решения тех задач, которые из-за ограничений по времени или памяти не может решать сегодня.
Его может интересовать возможность решения вообще, время решения. Если думать о масштабировании (решении больших задач на большем числе процессоров), то его интересует коэффициент эффективности. Когда эти характеристики его не устраивают, он вынужден анализировать и отлаживать эффективность.
Для анализа эффективности программ обычно используется трассировка программ. Для целей трассировки в исследуемую программу встраиваются "профилировочные" вызовы, которые фиксируют наступление определенных событий или продолжительность интервалов, и фиксируют эту информацию в журнале трассировки, передают ее онлайн-анализатору или просто модифицируют собираемую статистику.
Существуют общие проблемы всех средств трассировки:
- Формат трасс не унифицирован.
- Сбор информации - слабые возможности настройки фильтров событий (какие события и какую информацию включать в трассы). Размер трассы может оказаться неприемлемо большим.
- Не учитывается эффект замера - средство трассировки может достаточно сильно изменять поведение программы.
Центральная идея ускорения последовательных приложений достаточно проста. Необходимо выявить участки кода, в которых приложение проводит основную часть времени и оптимизировать их. Известен эвристический закон "10/90", утверждающий, что приложение проводит 90% времени работы в 10% кода. Таким образом, за счет оптимизации именно этих 10% кода можно добиться значительного повышения производительности. Как раз для поиска таких узких мест используются специальные средства, называемые профилировщиками.
Под понятием профилирование обычно понимается процесс анализа производительности приложения и учета потребляемых им ресурсов. Тем самым, профилировщик - это инструмент, при помощи которого осуществляется профилирование.
Профилировщики исследуют поведение программы в процессе ее выполнения. В частности, собирается такая информация, как частота вызовов функций, продолжительность их работы, число потоков, время ожидания - любая информация, способная помочь при оптимизации производительности. В числе приемов, используемых профилировщиками для сбора информации - инструментация кода, аппаратные прерывания, внедрение счетчиков производительности и многие другие. Выходной информацией профилировщика является трасса - список событий, произошедших в приложении. После получения трассы профилировщик обрабатывает собранную информацию и строит профиль (протокол) приложения - статистическую сводку о работе приложения.
1. Постановка задачи
Задача заключается в разработке инструментов для анализа и отладки эффективности OpenMP-программ и программ использующих гибридные модели MPI/OpenMP и DVM/OpenMP. Использовать доступные инструменты (ITP и др.) на узлах кластера проблематично. Кроме этого планируется объединение существующих в DVM-системе средств отладки эффективности DVM и MPI со средствами отладки эффективности OpenMP. Поэтому необходимо разработать средства для отладки OpenMP-программ совместимые на уровне выдаваемых характеристик с DVM-системой.
В имеющихся в DVM-системе средствах отладки эффективности DVM и MPI были
использованы два метода сбора характеристик - накопление статистики (для DVM‑программ) и накопление трассы (для MPI-программ). При первом подходе не требуется дополнительного дискового пространства, но при этом нет такой детальности, как при накоплении полной трассы.
Для реализации решено использовать сокращенную трассу со статистикой, в которой отражаются события, но для повторяющихся событий статистика вычисляется во время выполнения программы, что существенно сокращает размер трассы.
2. Обзор существующих решений
Существует 2 основных подхода к анализу программ – sample-based profiling (sampling) и instrumentation-based profiling.
Самплинг – код программы не меняется. Производится сбор образцов (samples) – это может быть стек вызовов, аппаратные счетчики производительности, системные вызовы, промахи кеша и др. Sampling не позволяет анализировать конкретные события в программе. Существует много инструментов для семплинга, например, Visual Studio Team Suite Profilers, CLRProfiler, PerfMon, ETWB, OProfile [11], XProf, но в данном обзоре средства для sample-based profiling не рассматриваются.
Второй подход подразумевает вставку в программу (исходный код или непосредственно в скомпилированный файл) особых вызовов функций, соответствующих каким-либо событиям программы (вызовам функций и т.п.). С помощью instrumentation-based profiling можно производить измерения интересующих событий в программе. К недостаткам можно отнести влияние встроенных в программу вызовов на производительность.
В данном обзоре рассмотрены наиболее популярные инструменты для анализа и отладки эффективности OpenMP-программ, а также гибридных MPI/OpenMP программ, основанных на instrumentation-based profiling. Все они ориентированы на инструментацию программы и работу с полученной трассой. Среди них есть как проприетарные (например, Intel Thread Profiler или PGPROF) так и open source проекты (например, ompP). Также рассмотрен анализатор системы DVM.
Файлы условия, демо
Характеристики ВКР
Список файлов
