научная статья по теме ДИАЛОГОВАЯ ОТЛАДКА ПАРАЛЛЕЛЬНЫХ ПРОГРАММ: РАСПРЕДЕЛЕННАЯ СХЕМА ВЗАИМОДЕЙСТВУЮЩИХ КОМПОНЕНТОВ Математика

Текст научной статьи на тему «ДИАЛОГОВАЯ ОТЛАДКА ПАРАЛЛЕЛЬНЫХ ПРОГРАММ: РАСПРЕДЕЛЕННАЯ СХЕМА ВЗАИМОДЕЙСТВУЮЩИХ КОМПОНЕНТОВ»

ПРОГРАММИРОВАНИЕ, 2008, № 3, с. 42-49

ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ -

УДК 681.3.06

ДИАЛОГОВАЯ ОТЛАДКА ПАРАЛЛЕЛЬНЫХ ПРОГРАММ:

РАСПРЕДЕЛЕННАЯ СХЕМА ВЗАИМОДЕЙСТВУЮЩИХ КОМПОНЕНТОВ

© 2008 г. А. Б. Бугеря

Институт системного программирования РАН 109004 Москва, ул. Б. Коммунистическая, 25 E-mail: Alexander.Bugerya@ispras.ru Поступила в редакцию 27.06.2007 г.

В статье предложена общая схема организации распределенного диалогового отладчика параллельных программ и рассказано о практике применения данной схемы при создании отладчика для программ на языке НОРМА и для создания системы исследования МР1-программ.

1. ВВЕДЕНИЕ

Разработка параллельных программ становится все более актуальной с распространением многопроцессорных, многоядерных и кластерных технологий, поскольку создатели программ хотят максимально полно использовать возможности современной аппаратуры. Высокая сложность разработки параллельных программ, часто не позволяющая эффективно использовать возможности высокопроизводительных компьютеров, является общепризнанным фактом. В настоящее время ведутся интенсивные исследования в области автоматизации разработки параллельных программ, в частности, в области создания инструментов для отладки и исследования параллельных программ. Цели применения этих инструментов могут быть различными. Это в первую очередь поиск ошибок в программе, в том числе и таких специфических для параллельных программ, как ошибки при передаче сообщений, ошибки синхронизации, ошибки доступа к общим ресурсам и т.д. Но и затем, после того как программа начала работать, и работать правильно, отладка программы на этом обычно не заканчивается. Сразу возникает вопрос: а насколько эффективно она работает? Равномерно ли распределена вычислительная нагрузка? Для того, чтобы ответить на эти и другие подобные вопросы, применяют специальные инструменты исследования параллельных программ.

Параллельные алгоритмы и программы, как правило, сложнее последовательных. Параллельные программы и отлаживать сложнее. Кроме того, в них возможны и нетипичные для последовательных программ ошибки, вызываемые некорректной синхронизацией процессов или нитей и некорректным использованием средств, обеспечивающих параллелизм. Существенно усложняет отладку параллельных программ их недетерминированное поведение, поскольку оно затрудняет использование привычного приема постепенной локализации ошибок посредством многократных запусков программы под управлением отладчика. С одной стороны, сложность создания хороших средств отладки и исследования параллельных программ является следствием проблем разработки параллельных программ, а с другой стороны, отладчик параллельных программ представляет собой также параллельную программу, которая должна взаимодействовать с отлаживаемой, также параллельной, что еще больше усложняет проблему.

При диалоговой отладке и исследовании параллельных программ особенно актуальна проблема визуализации получаемых результатов. В отличие от простой последовательной программы, где имеется одна текущая точка выполнения программы, а у переменной - одно значение, в параллельной программе точек выполнения может быть много, сотни или даже тысячи.

Значений у переменной также может быть много - у каждого процесса свое. Перед создателями средств отладки и исследования параллельных программ встает нелегкая задача: с одной стороны, представить всю имеющуюся информацию и предоставить средства управления ею в удобном, понятном для пользователя виде, а с другой стороны - дать пользователю исчерпывающую, полную картину поведения исследуемой программы.

Еще одним характерным отличием процесса отладки и исследования параллельной программы от аналогичных действий с последовательной программой является то, что в типичном случае параллельная программа выполняется на удаленном вычислительном комплексе. Пользователь имеет возможность войти (чаще всего по ЯЯН с интерфейсом командной строки) на управляющую хост-машину удаленного вычислительного комплекса, скомпилировать свою распределенную программу, подготовить файлы данных и запустить программу на выполнение. Программа выполняется на вычислительных узлах комплекса, к которым пользователь доступа уже не имеет. Поэтому влиять на ход выполнения отдельных процессов своей программы пользователь уже не может, в отличие от отладки последовательной программы, выполняемой в типичном случае на компьютере, за которым сидит пользователь. Также из-за того, что исследуемая параллельная программа выполняется на удаленном комплексе, возникает проблема передачи собранной информации о программе на компьютер пользователя - в некоторых случаях объем этой информации может быть достаточно большим.

2. ИЗВЕСТНЫЕ ПОДХОДЫ К ОТЛАДКЕ И ИССЛЕДОВАНИЮ ПАРАЛЛЕЛЬНЫХ ПРОГРАММ

Известные подходы к отладке и исследованию параллельных программ можно разделить на три основных направления: автоматический контроль корректности выполнения программы, сравнительная отладка (сравнение выполнения программы при ее различных запусках), и диалоговая отладка в процессе реального выполнения параллельной программы посредством задания точек останова, пошагового выполнения программы и инспектирования значений указанных переменных. Автоматический

контроль корректности и сравнительная отладка могут осуществляться либо посредством анализа трасс, собранных при выполнении параллельной программы, либо без использования трасс - динамически в процессе реального выполнения параллельной программы. В качестве примера средств автоматического контроля корректности можно привести Intel Message Checker [1], MPI-отладчик DVM-системы [2], HP Visual Threads [3], Intel Thread Checker [4]. Возможность сравнительной отладки есть в DVM-системе [5]. Диалоговая отладка реализована в таких системах, как TotalView [6], TDB [7], P2D2 [8], DDBG [9]).

Автоматический контроль корректности программы - проверка в процессе ее выполнения дополнительных условий корректности. Эта проверка может производиться как по трассе, так и в процессе выполнения программы. Условиями корректности параллельных программ являются корректность обращений к библиотекам, обеспечивающим параллелизм и обмен сообщениями, корректная синхронизация процессов и нитей при использовании общих данных и прочее. Проверка корректности не требует участия пользователя, все производится автоматически. Этот контроль позволяет обнаруживать неверные спецификации параллелизма, реальные и потенциальные дедлоки, некорректный доступ к общим данным, некорректность параметров или неправильную последовательность обращений к библиотекам, обеспечивающим параллелизм, выход за границы массивов, чтение неинициализированных переменных и другие ошибки. Преимуществами автоматического контроля корректности являются его полная автоматизация, качество отладочных диагностик (пользователю сообщается не только ошибочный оператор, но и тип ошибки) и возможность обнаружения широкого спектра ошибок. Однако отсутствие диагностик об ошибках при анализе корректности программы не гарантирует правильности ее работы, поскольку ограниченность ресурсов может не позволять производить все желаемые проверки, кроме того, некоторые ошибки могут не проявляться в условиях проведения анализа.

В тех случаях, когда у пользователя есть две версии программы, одна из которых работает верно (эталонная), а другая - нет (отлаживаемая), работающую версию можно взять за фор-

мальную спецификацию неработающей. Идея сравнительной отладки как раз и заключается в сравнении работы двух версий программ, сравниваются значения переменных в определенных контролируемых точках выполнения программ. Данные для сравнения можно брать как из выполняющихся программ, так и из трасс, полученных при их выполнении. Сравнение производится с заданной точностью, при выходе за ее пределы выдается соответствующая диагностика. При отладке параллельных программ в качестве эталонной обычно используют последовательную программу, которую часто можно отладить стандартными средствами, однако за эталон можно брать и параллельную программу. Сравнительная отладка позволяет обнаруживать различия, вызванные изменениями программы, например, распараллеливанием, а также различия, возникающие при переносе программ с одной платформы или конфигурации процессоров на другую. Заметим, что сравнительная отладка невозможна при недетерминированном поведении параллельных программ.

Диалоговая отладка предоставляет возможность пользователю на любом этапе выполнения программы указывать, какие именно переменные, какие участки выполнения программы, какие именно обмены данными или точки синхронизации необходимо инспектировать, при этом данные о выполнении определенного участка кода анализируются пользователем сразу после выполнения этого участка кода, и имеется возможность оперативно скорректировать дальнейший ход отладки (поставить дополнительные точки останова, просмотреть значения еще каких-либо переменных и так далее).

При отладке по трассе в процессе выполнения программы во внешнем файле сохраняется разнообразная информация о ходе выполнения каждого процесса исследуемой программы. Это может быть порядок и время вызова функций, в том числе МР1-функций, параметры их вызовов, значения переменных. Пользователю может предоставляться возможность указать, какого рода события его интересуют, а какого - нет, и сохранять только требуемое. В процессе поиска ошибок в силу большого объема и неструктурированности данных использовать только трассировщик на задачах больших, чем тестовые, представляется достаточно уто-

мительной задачей. С этой стороны диалоговая отладка или динамическая в процессе выполнения программы выглядит предпочтительней.

Однако при дальнейшей отладке программы, когда рассматриваются вопросы ее эффективности, использования памяти, вычислительных ресурсов и т.п., отладка по трассе представляется более предпочтительной. Во-первых, при анализе временных характеристик или динамического поведения одних компонентов программы относительно других необходимо минимальное вмешательство в работу исследуемой программы. Во-вторых, такого рода иссле

Для дальнейшего прочтения статьи необходимо приобрести полный текст. Статьи высылаются в формате PDF на указанную при оплате почту. Время доставки составляет менее 10 минут. Стоимость одной статьи — 150 рублей.

Показать целиком