Курсовая работа: Диалоговая оболочка отладчика MPI-программ
Существует ряд различных походов к отладке параллельных программ. Однако при всех этих подходах важную роль играет диалоговая оболочка отладчика, обеспечивающая для пользователя удобный графический интерфейс. Особенно важным становится такой интерфейс при отладке программ на большом числе процессоров (десятки и сотни).
Данная работа посвящена созданию диалоговой оболочки разрабатываемого в ИПМ им. Келдыша РАН отладчика MPI-программ, который войдет в состав системы автоматизации разработки параллельных программ (DVM-системы). В ней рассмотрены основные подходы к параллельному программированию и к отладке параллельных программ. Приведены примеры уже существующих средств визуализации. Описаны теоретические и практические вопросы и задачи, связанные с разработкой средств визуализации. Приводится описание реализованного прототипа, результаты его тестирования и рекомендации к применению.
2. Модели параллельного программирования
Параллельные программы выполняются не многопроцессорных ЭВМ, поэтому необходимы механизмы для взаимодействия процессоров между собой. Существуют две основных модели такого взаимодействия: через общую память, либо посредством передачи сообщений. Обе это модели являются низкоуровневыми и поэтому крайне неудобны и непривычны для программистов, разрабатывающих параллельные программы.
Системы автоматического распараллеливания могут вполне успешно использоваться на мультипроцессорах, в то же время их использования на распределенных системах существенно затруднено.
2.1 Модель передачи сообщений MPI
В модели передачи сообщений параллельная программа выполняется на множестве процессов, каждый из которых имеет свое собственное адресное пространство. Обмен данными и синхронизация между процессами производится посредством передачи сообщений. В 1993 году был разработан стандарт передачи сообщений MPI (MessagePassingInterface) [2]. Внедрение этого стандарта позволило увеличить возможность переносимости программ, разрабатываемых в рамках разных подходов, с использованием модели передачи сообщений.
Достоинства MPI :
· Возможность использования в языках Фортран, Си, Си++;
· Предоставление возможностей для совмещения обменов сообщениями и вычислений;
· Предоставление режимов передачи сообщений, позволяющих избежать излишнего копирования информации для буферизации;
· Широкий набор коллективных операций (например, широковещательная рассылка информации, сбор информации с разных процессоров), допускающих гораздо более эффективную реализацию, чем использование соответствующей последовательности пересылок точка-точка;
· Широкий набор редукционных операций (например, суммирование расположенных на разных процессорах данных, или нахождение их максимальных или минимальных значений), не только упрощающих работу программиста, но и допускающих гораздо более эффективную реализацию, чем это может сделать прикладной программист, не имеющий информации о характеристиках коммуникационной системы;
· Удобные средства именования адресатов сообщений, упрощающие разработку стандартных программ или разделение программы на функциональные блоки;
· Возможность задания типа передаваемой информации, что позволяет обеспечить ее автоматическое преобразование в случае различий в представлении данных на разных узлах системы.
Тем не менее, интерфейс библиотеки MPI получился достаточно громоздким, не только для использования программистом, но и для реализации. В настоящее время не существует реализаций MPI, в которых в полной мере обеспечивается совмещение обменов с вычислениями.
В 1997 году появился стандарт MPI-2 [2]. На сегодняшний день существует, хотя и не полная, реализация стандарта MPI-2. Он предусматривает развитие в следующих направлениях:
· Динамическое создание и уничтожение процессов;
· Односторонние коммуникации и средства синхронизации для организации взаимодействия процессов через общую память (для эффективной работы на системах с непосредственным доступом процессоров к памяти других процессоров);
· Параллельные операции ввода-вывода (для эффективного использования существующих возможностей параллельного доступа многих процессоров к различным дисковым устройствам).
2.2 Другие модели
Модель неструктурированных нитей. Программа представляется как совокупность нитей (threads), способных выполняться параллельно и имеющих общее адресное пространство. Имеющиеся средства синхронизации нитей позволяют организовывать доступ к общим ресурсам. Многие системы программирования поддерживают эту модель: Win32 threads, POSIXthreads, Javathreads.
Модель параллелизма по данным. Основным её представителем является язык HPF [3]. В этой модели программист самостоятельно распределяет данные последовательной программы по процессорам. Далее последовательная программа преобразуется компилятором в параллельную, выполняющуюся либо в модели передачи сообщений, либо в модели с общей памятью. При этом каждый процессор производит вычисления только над теми данными, которые на него распределены.
Модель параллелизма по управлению. Эта модель возникла в применении к мультипроцессорам. Вместо терминов нитей предлагалось использовать специальные конструкции – параллельные циклы и параллельные секции. Создание, уничтожение нитей, распределение на них витков параллельных циклов или параллельных секций – всё это брал на себя компилятор. Стандартом для этой модели сейчас является интерфейс OpenMP [4].
Гибридная модель параллелизма по управлению с передачей сообщений . Программа представляет собой систему взаимодействующих MPI – процессов, каждый из которых программируется на OpenMP.
Модель параллелизма по данным и управлению – DVM (Distributed Virtual Machine, Distributed Virtual Memory)[5]. Эта модель была разработана в Институте прикладной математики им. М. В. Келдыша РАН.
3. Отладка параллельных программ
3.1 Обзор методик отладки
В настоящее время можно выделить следующие методики отладки параллельных программ:
· Методика статической отладки. Для отладки программы не используются процессы ее выполнения;
· Методика анализа отладочной информации после завершения выполнения программы (post-mortem анализ) [8] позволяет минимизировать эффект вмешательства для систем с распределенной памятью;
· Интерактивная отладка. Обычный способ отладки последовательных программ – установка точек останова, выполнение программы (процесса (процессов), нити (нитей)) до точки останова, анализ состояния программы в точке останова и т.д.;
· Динамический контроль. В процессе выполнения программы средство отладки производит действия по локализации ошибок;
· Методика record & replay. Эта методика предназначена для локализации трудновоспроизводимых ошибок. Отладка программы состоит из сбора информации, необходимой для последующего детерминированного воспроизведения ее выполнения и повторных детерминированных запусков этой программы с использованием собранной информации. При повторных запусках можно использовать инструментарий интерактивной отладки – точки останова, точки контроля данных, и т.п.;