Параллельные вычисления в ИММ УрО РАН
 
 

Открытая платформа отладки параллельных программ

А.С.Игумнов, ИММ УрО РАН

Работа выполнена при подержке гранта РФФИ 01-07-90215

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

Просмотрев обзоры отладчиков для параллельных программ, например [1], можно придти к неутешительному выводу. В списке присутствует очень немного параллельных отладчиков общего назначения. Чаще всего упоминается распространяемый на коммерческой основе TotalView [2] и разработанный в NASA P2D2, который в настоящий момент недоступен для использования сторонними организациями. Кроме этих двух отладчиков можно найти специализированные отладочные программы, такие как, средства визуализации очередей сообщений MPI в реальном времени MQM [4] и средство визуализации сложных структур данных GUARD [5] использующее отладочные механизмы для доступа к оперативной памяти процессов. Таким образом, на настоящий момент, не существует свободно доступного отладчика параллельных программ, который бы можно было модифицировать под конкретные потребности программиста.

Все перечисленные выше отладчики используют двухзвенную структуру. В качестве клиентов выступают последовательные отладчики с интерфейсом командной строки, такие как gdb, которые взаимодействуют с сервером отладки, реализующим ту или иную степень агрегации данных и интерфейс пользователя. Сервер TotalView предлагает также програмный интерфейс на языке TCL для написания отладочных скриптов.

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

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

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

При программировании сервера отладки, программисту должны быть доступны объекты следующих типов:

  1. Управяющие объекты, позволяющие манипулировать процессами или группами процессов
  2. Условия по достижению которых происходит событие.
  3. Обработчики событий, которые взаимодействуют с управляющими объектами или с программами реализующими пользовательский интерфейс
  4. Объекты-данные, позволяющие получить доступ к структурам данных, возможно размещенным в памяти нескольких процессов. Задачей объектов-данных является агрегация данных и их представление в некоторм стандартном виде, например в формате XDR.

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

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

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

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

В настоящий момент, в ИММ УрО РАН идет работа по созданию макетной реализации сервера отладки для проверки вышеизложенных концепций.

Ссылки

  1. Parallel Tools Library (PTLib) http://rib.cs.utk.edu/cgi-bin/catalog.pl?rh=223&term=1!1
  2. TotalView http://www.etnus.com/Products/TotalView/index.html
  3. P2D2 http://www.nas.nasa.gov/Groups/Tools/Projects/P2D2/
  4. Message Queue Manager http://www.cs.orst.edu/~pancake/ptools/mqm/
  5. Griffith University Relative Debugger (GUARD) http://www.dgs.monash.edu.au/~greg/guard.html
  6. GuardSoft http://sourceforge.net/projects/guardsoft