Диалоговая оболочка отладчика MPI-программ

Содержание



1. Введение 

2. Модели параллельного программирования 

2.1 Модель передачи сообщений MPI 

2.2 Другие модели 

3. Отладка параллельных программ 

3.1 Обзор методик отладки 

3.2 Обзор существующих средств отладки 

3.3.1 LockInt (Sun) 

3.3.2 MAD EMU и ATTEMPT (Johannes Kepler University Linz) 

3.3.3 Total View (Etnus LLC), Prism(Sun), p2d2(NAS Ames), Ladebug(Compaq), GDB(GNU), DBX(Sun) 

3.3.4 Assure(Intel), DVM debugger(KIAM RAS), UMPIRE (LLNL) 

3.3.5 DejaVu (IBM) 

3.3.6 Guard( Monash University ), DVM debugger(KIAM RAS), NASA/Ames support for debugging automatically parallelized programs 

3.3.7 HOWCOME demonstrator, DD.py ( Saarland University ) 

4. Пользовательский интерфейс 

4.1 Создание интерфейса 

4.2 Современные подходы к созданию пользовательского интерфейса 

5. Диалоговая оболочка отладчика MPI-программ. 

5.1 Постановка задачи 

5.2 Общая схема использования 

5.3 Входная информация 

5.4 Основные объекты визуализации 

5.5 Основные функции визуализатора 

5.6 Общая схема визуализации 

5.7 Окно состояния задачи (Task state) 

5.8 Окно обобщенных ошибок (Error location) 

5.9 Окно топологии процессоров (Topology control) 

5.10 Окно конкретных ошибок (Errors list) 

5.11 Окно событий (Event line) 

5.12 Окно просмотра стека и исходных текстов (Text control) 

5.13 Окно просмотра трасс (Trace control) 

Заключение 

Литература 



	
Введение



Существуют сверхсложные вычислительные задачи, для решения которых требуется применение суперкомпьютеров. Такие задачи называют grand challenges.

Grand challenges - это фундаментальные научные или инженерные задачи с широкой областью применения, эффективное решение которых возможно только с использованием мощных (суперкомпьютерных) вычислительных ресурсов [1].

Вот лишь некоторые области, где возникают задачи подобного рода:

	Предсказания погоды, климата и глобальных изменений в атмосфере

	Науки о материалах

	Построение полупроводниковых приборов

	Сверхпроводимость

	Структурная биология

	Разработка фармацевтических препаратов

	Генетика человека

	Квантовая хромодинамика

	Астрономия

	Транспортные задачи

	Гидро- и газодинамика

	Управляемый термоядерный синтез

	Эффективность систем сгорания топлива

	Разведка нефти и газа

	Вычислительные задачи наук о мировом океане

	Распознавание и синтез речи

	Распознавание изображений

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

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

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

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

	Возрастает сложность программирования, а, следовательно, возрастает и вероятность совершения ошибок;

	Появляются новые виды ошибок, специфичные для параллельных программ: взаимная блокировка (deadlock), условия гонок (race conditions), и другие.

Эти ошибки сложны для обнаружения и вызывают недетерминированное поведение программы.

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

Данная работа посвящена созданию диалоговой оболочки разрабатываемого в ИПМ им. Келдыша РАН отладчика MPI-программ, который войдет в состав системы автоматизации разработки параллельных программ (DVM-системы). В ней рассмотрены основные подходы к параллельному программированию и к отладке параллельных программ. Приведены примеры уже существующих средств визуализации. Описаны теоретические и практические вопросы и задачи, связанные с разработкой средств визуализации. Приводится описание реализованного прототипа, результаты его тестирования и рекомендации к применению.




2. Модели параллельного программирования



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

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



2.1 Модель передачи сообщений MPI



В модели передачи сообщений параллельная программа выполняется на множестве процессов, каждый из которых имеет свое собственное адресное пространство. Обмен данными и синхронизация между процессами производится посредством передачи сообщений. В 1993 году был разработан стандарт передачи сообщений MPI (Message Passing Interface) [2]. Внедрение этого стандарта позволило увеличить возможность переносимости программ, разрабатываемых в рамках разных подходов, с использованием модели передачи сообщений.

Достоинства MPI:

	Возможность использования в языках Фортран, Си, Си++;

	Предоставление возможностей для совмещения обменов сообщениями и вычислений;

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

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

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

	Удобные средства именования адресатов сообщений, упрощающие разработку стандартных программ или разделение программы на функциональные блоки;

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

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

В 1997 году появился стандарт MPI-2 [2]. На сегодняшний день существует, хотя и не полная, реализация стандарта MPI-2. Он предусматривает развитие в следующих направлениях:

	Динамическое создание и уничтожение процессов;

	Односторонние коммуникации и средства синхронизации для организации взаимодействия процессов через общую память (для эффективной работы на системах с непосредственным доступом процессоров к памяти других процессоров);

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


2.2 Другие модели



Модель неструктурированных нитей. Программа представляется как совокупность нитей (threads), способных выполняться параллельно и имеющих общее адресное пространство. Имеющиеся средства синхронизации нитей позволяют организовывать доступ к общим ресурсам. Многие системы программирования поддерживают эту модель: Win32 threads, POSIX threads, Java threads.

Модель параллелизма по данным. Основным её представителем является язык HPF [3]. В этой модели программист самостоятельно распределяет данные последовательной программы по процессорам. Далее последовательная программа преобразуется компилятором в параллельную, выполняющуюся либо в модели передачи сообщений, либо в модели с общей памятью. При этом каждый процессор производит вычисления только над теми данными, которые на него распределены.

Модель параллелизма по управлению. Эта модель возникла в применении к мультипроцессорам. Вместо терминов нитей предлагалось использовать специальные конструкции – параллельные циклы и параллельные секции. Создание, уничтожение нитей, распределение на них витков параллельных циклов или параллельных секций – всё это брал на себя компилятор. Стандартом для этой модели сейчас является интерфейс OpenMP [4].

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

Модель параллелизма по данным и управлению – DVM (Distributed Virtual Machine, Distributed Virtual Memory) [5]. Эта модель была разработана в Институте прикладной математики им. М. В. Келдыша РАН.




3. Отладка параллельных программ



3.1 Обзор методик отладки



В настоящее время можно выделить следующие методики отладки параллельных программ:

	Методика статической отладки. Для отладки программы не используются процессы ее выполнения;

	Методика анализа отладочной информации после завершения выполнения программы (post-mortem анализ) [8] позволяет минимизировать эффект вмешательства для систем с распределенной памятью;

	Интерактивная отладка. Обычный способ отладки последовательных программ – установка точек останова, выполнение программы (процесса (процессов), нити (нитей)) до точки останова, анализ состояния программы в точке останова и т.д.;

	Динамический контроль. В процессе выполнения программы средство отладки производит действия по локализации ошибок;

	Методика record & replay. Эта методика предназначена для локализации трудновоспроизводимых ошибок. Отладка программы состоит из сбора информации, необходимой для последующего детерминированного воспроизведения ее выполнения и повторных детерминированных запусков этой программы с использованием собранной информации. При повторных запусках можно использовать инструментарий интерактивной отладки – точки останова, точки контроля данных, и т.п.;

	Сравнительная отладка [12]. Поиск ошибок в программе при помощи сравнения даны ее выполнения с некоторыми эталонными данными. В качестве эталонных данных могут выступать, например, данные последовательного выполнения отлаживаемой программы.

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

Отладка параллельных программ осложняется (в большей степени, чем отладка последовательных программ) так называемым эффектом вмешательства (probe effect): отлаживаемая программа может вести себя по-разному при её запуске с отладочным средством и без него. Таким образом, отладочное средство может маскировать некоторые ошибки или, наоборот, способствовать их проявлению.

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

Отладчик, для которого реализуется визуализатор, описываемый в данной работе, реализует два метода отладки: post-mortem анализ и сравнительная отладка.



3.2 Обзор существующих средств отладки



3.2.1 LockInt (Sun)

	Метод отладки: статическая отладка.

	Эффект вмешательства: отсутствует.

	Гибкость: отсутствует (не использует процессы выполнения программы).

	Удобство использования и простота изучения: пользователю необходимо указать, какие блокировки, за какие разделяемые переменные отвечают. Обучиться использовать просто.

	Языки программирования и операционные системы: Sun WorkShop ANSI C с Pthreads на ОС Solaris.

	Использование ресурсов: не требует выполнения на параллельной ЭВМ, т.к. процессы выполнения программы не используются.

	Локализация ошибок: ошибки синхронизации (дедлоки и условия гонок) ищутся по спецкомментариям пользователя и исходному коду. Возможен пропуск ошибок, в случае нехватки информации от пользователя.

	Успешность на рынке: входит в SunTM ONEStudio 7. Использовался для отладки программы, вычисляющей множество Мандельброта [15].



3.2.2 MAD EMU и ATTEMPT (Johannes Kepler University Linz)

	Метод отладки: post-mortem анализ.

	Эффект вмешательства: имеется, в связи с сохранением трассировки. Для многопоточных приложений может быть очень сильным.

	Гибкость: отсутствует, (анализ происходит после завершения выполнения программы).

	Удобство использования и простота изучения: сбор и анализ информации происходит автоматически. Возможны визуализация и анализ производительности. Обучиться использовать просто.

	Языки программирования и операционные системы: работает с интерфейсом MPI. Поддержки языков программирования нет.

	Использование ресурсов: трассировка может достигать больших размеров.

	Локализация ошибок: класс ошибок определён и ограничен (изолированный send/receive, различная длина событий-сообщений при посылке/приёме, ...)

	Успешность на рынке: информации об использовании MAD за пределами Johannes Kepler University Linz не имеется.




3.2.3 Total View (Etnus LLC), Prism(Sun), p2d2(NAS Ames), Ladebug(Compaq), GDB(GNU), DBX(Sun)

	Метод отладки: интерактивная отладка.

	Эффект вмешательства: имеется. Остановка нитей/процессов нарушает стандартное расписание их выполнения.

	Гибкость: максимальна по определению.

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

	Языки программирования и операционные системы: Поддержка традиционных языков программирования и их параллельных расширений не представляет проблем. Наиболее развитые средства параллельной отладки разработаны для ОС Unix..

	Использование ресурсов: ресурсы ЭВМ используются эффективно, может потребовать много усилий со стороны человека.

	Локализация ошибок: класс ошибок достаточно широк, но их локализация сильно зависит от умения программиста.

	Успешность на рынке: широко используются. Total View и PDBX(IBM) используются на ASCI White.



3.2.4 Assure(Intel), DVM debugger(KIAM RAS), UMPIRE (LLNL)

	Метод отладки: динамический контроль.

	Эффект вмешательства: имеется, в процессе работы отладчик сохраняет данные и выполняет операции по идентификации ошибок.

	Гибкость: возможна, если после обнаружения ошибки отладчик переходит в интерактивный режим.

	Удобство использования и простота изучения: отладка полностью автоматическая. Обучиться использовать просто.

	Языки программирования и операционные системы: поддержка традиционных языков программирования, их параллельных расширений, операционных систем не представляет проблем.

	Использование ресурсов: отладка больших приложений может требовать больших объемов оперативной памяти и времени.

	Локализация ошибок: класс ошибок ограничен.

	Успешность на рынке: Assure встраивается в VTune Environment.

Выходят новые версии системы DVM, доступна в исходных кодах.

Umpire используется на ASCI White.



3.2.5 DejaVu (IBM)

	Метод отладки: record & replay

	Эффект вмешательства: имеется, при сохранении последовательности событий в программе.

	Гибкость: возможна, на втором этапе (replay).

	Удобство использования и простота изучения: отладка полностью автоматическая. Обучиться использовать просто.

	Языки программирования и операционные системы: реализован прототипный отладчик для многопоточных приложений написанных на Java.

	Использование ресурсов: требуется как минимум два прогона.

	Локализация ошибок: полезен для локализации трудновоспроизводимых ошибок.

	Успешность на рынке: примеры успешного использования можно найти в [16].



3.2.6 Guard (Monash University), DVM debugger (KIAM RAS), NASA/Ames support for debugging automatically parallelized programs

	Метод отладки: сравнительная отладка.

	Эффект вмешательства: имеется, при сравнении данных, нарушается планирование выполнения процессов/нитей.

	Гибкость: возможна, в случае реализации интерактивного метода отладки.

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

	Языки программирования и операционные системы: проблем с поддержкой традиционных языков программирования, их параллельных расширений и операционных систем не выявлено.

	Использование ресурсов: возможно использование трассировки вместо выполнение программы.

	Локализация ошибок: класс локализуемых ошибок широк, возможны трудности с локализацией трудновоспроизводимых ошибок - дедлоков и эффектов состязаний - не при каждом запуске могут проявиться.

	Успешность на рынке: Guard, DVM - некоммерческие разработки. Прототипная поддержка для отладки полуавтоматически распараллеленных программ, разработана в NASA/Ames.



3.2.7 HOWCOME demonstrator, DD.py (Saarland University)

	Метод отладки: дельта отладка.

	Эффект вмешательства: отсутствует в случае перебора входных данных и строк исходного кода. Имеется при переборе возможностей планировки процессов/нитей.

	Гибкость: отсутствует.

	Удобство использования и простота изучения: пользователю достаточно указать параметры перебора. Обучиться использовать просто.

	Языки программирования и операционные системы: могут возникнуть проблемы с перебором планировки процессов.

	Использование ресурсов: неэффективно по времени - многократные запуски и/или перекомпиляция.

	Локализация ошибок: реально локализовать некоторые ошибки может быть сложно (например, из-за больших временных затрат)

методика не позволяет локализовать трудновоспроизводимые ошибки.

	Успешность на рынке: средства доступны для использования в Интернете.




4. Пользовательский интерфейс



В понятие пользовательского интерфейса (ПИ) входит не только, способ визуализации данных (трехмерные, анимированные изображения), но и способы взаимодействия пользователя с системой. Дизайн имеет подчиненное положение, его главная цель – облегчить использование системы [11].



4.1 Создание интерфейса



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

Рассмотрим кратко этапы разработки пользовательского интерфейса.

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

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

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

Эта идея принадлежит психологу Гибсону [10]. Он утверждает, что восприятие человека основано на мотивации. То есть внимание человека в конкретный момент будет обращено именно на те окружающие его предметы, в которых у него на данный момент существует потребность.

Понятия среды и понятие метафоры близко связаны. Правильно разработанная интерфейсная среда позволяет пользователю быстрее освоить работу с интерфейсом. Выбранная метафора может продиктовать все изобразительные решения дизайна интерфейса.



4.2 Современные подходы к созданию пользовательского интерфейса



Важный принцип построения дизайна интерфейса – баланс между интерактивными возможностями программы и сложностью ее изобразительного ряда.

Во всех центрах, известных разработкой новых интерфейсов (XEROX PARC, MIT Media Lab, Apple Computer, Carnegie Mellon University), разрабатываются концепции дизайна интерфейсов, использующие возможности анимации.

Две анимированные среды интерфейса разработаны в фирме XEROX PARC, в которой была разработана идея оконного интерфейса. Авторство идеи оконного интерфейса принадлежит Стюарду Карду. Обе модели разработаны для отображения файловой системы. Рассмотрим эти модели.

	«Конические деревья». Система директорий отображается при помощи системы пирамид, с учетом иерархии. Файлы директории отображаются в виде трехмерного кольца под соответствующей пирамидой. Выбор файлов осуществляется «поворотом» кольца, идущим в режиме анимации.

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

Достоинства анимационного интерфейса:

	Анимация за счет увеличения времени перехода от одного изображения к другому, существенно сокращает время осознания нового изображения на экране.

	Динамические визуальные сигналы – предоставление пользователю дополнительной информации о работе программы.

К функциональному и интерфейсному уровням программы добавляется новый – визуальный.

Использование трехмерной графики, распознавания речи, жестов, позволяет создавать принципиально новые пользовательские интерфейсы.




5. Диалоговая оболочка отладчика MPI-программ



5.1 Постановка задачи



Целью данной дипломной работы является создание диалоговой оболочки отладчика MPI-программ для DVM-системы.

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

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

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



5.2 Общая схема использования



MPI-отладчик DVM-системы состоит из следующих компонентов:

	Трассировщик

	Анализатор трасс (одного запуска или двух запусков)

	Визуализатор, обеспечивающий графический интерфейс пользователя

Первые два компонента работают на параллельной машине, а визуализатор – на рабочей станции.

Запуск визуализатора осуществляется из командной строки

vismpi



5.3 Входная информация



На вход визуализатору в процессе работы подается следующая информация, представляемая в соответствующих файлах или посредством интерфейса с отладчиком:

	Исходные тексты программы

	Протокол анализатора

	Трассы одного запуска программы

Интерфейс с отладчиком реализуется в виде набора функций доступа к данным и определяется в отдельном документе (описание функций и описание структур данных, поставляемых этими функциями).

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



5.4 Основные объекты визуализации



Визуализатор обеспечивает графическое и текстовое представление следующих основных объектов визуализации:

1. Итоговое состояние задачи.

2. Обнаруженные ошибки и предупреждения.

3. Результаты трассировки MPI-функций (трассы).

4. Тексты исходной программы.

Инструкция по текущей версии визуализатора приведена в документе “Инструкция для пользователя визуализатора отладчика MPI-программ VisMPI”.



5.5 Основные функции визуализатора



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

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

Основные окна:

окно итогового состояния задачи (Task state)

окно обобщенных ошибок (Error location)

окно конкретных ошибок и предупреждений (Errors list)

окно событий (Event line)

окно трасс (Trace control)

окно стека и исходных текстов(Text control)

Дополнительные окна:

окно топологии (Topology control)

диалоговые окна

задание топологии визуализации (matrix)

просмотр комментариев к ошибкам (Comments)

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

Подробнее основные и дополнительные окна и способы работы с ними описаны ниже.

2. Обеспечение навигации внутри окон. Вертикальная и горизонтальная прокрутка, переходы по связанным событиям.

3. Обеспечение навигации между окнами. Навигация по связанным объектам из разных окон (например, ошибка –> событие в трассе, где она обнаружена –> строка текста программы, соответствующая событию в трассе). Циклическая навигация по взаимосвязанным объектам, относящимся к одной сложной ошибке (например, пара операций точка-точка с несовпадающими контрольными суммами передаваемых данных, последовательность deadlock-событий). Навигация по группе событий определенной пользователем (все или несколько ошибок одного типа, указанных пользователем типов). Возможность перехода к строке текста исходной программы всегда, когда оператор из этой строки связан с представленным событием (кроме интегральных характеристик, подобных общему числу ошибок).

4. Доступ (через интерфейс с отладчиком) к информации о состоянии задачи и процессов, к информации об ошибках, к трассам. Привязка к текстам исходной программы.

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



5.6 Общая схема визуализации



После запуска программы открывается главное окно. Главное окно содержит меню, и панель инструментов. Кнопки на панели инструментов позволяют открыть трассу для чтения и закрыть программу. Меню содержит следующие пункты:

	Меню файла (File)

	Меню событий (Events)

	Меню состояния задачи (Task state)

	Меню справки (Help)

В меню файла можно открыть файл трассы для чтения и закрыть программу. Меню событий позволяет открыть окна трассы (Event line) и окно конкретных ошибок и предупреждений (Errors list). Через меню состояния задачи можно вызвать окно состояния задачи (Task state) и окно обобщенных ошибок (Error location).



5.7 Окно состояния задачи (Task state)



Основное окно Task state представляет в виде текстовой таблицы итоговое состояние задачи, определяемое итоговыми параметрами (Рис. 1):

- число завершенных процессов с неизвестным статусом (unknown status),

- число снятых процессов (aborted),

- число аварийно завершенных процессов (abend),

- число нормально завершенных (normal termination) процессов,

- общее число обнаруженных ошибок (error number)

- общее число обнаруженных предупреждений (warning number)

- общее число зависших операций посылки (pending send number),

- общее число зависших операций приема (pending receive number),

- общее число выполненных операций посылки (send number),

- общее число выполненных операций приема (receive number),

- общее число выполненных коллективных операций (GOP number).






Рис 1. Окно Task state.



Окно Task state содержит управляющие кнопки:

- Show topology – открытие окна детальной визуализации итогового состояния задачи по процессорам,

Нажатие кнопки Show topology приводит к показу в виде матрицы процессоров распределения помеченных итоговых параметров (Topology control). Сначала выводится диалоговое окно задание размера матрицы для визуализации (matrix) (Рис 2.). Это сделано в связи тем, что информации о конкретной топологии процессоров в трассе не хранится, поэтому для отображения выбирается топология решетки, где число столбцов задает сам пользователь. Подробнее окно Topology control описано ниже.





Рис 2. Окно Matrix.




5.8 Окно обобщенных ошибок (Error location)



Информация об ошибках представляется в виде текстовой таблицы, содержащей для каждой ошибки строку:

<название типа ошибки> <список различающихся ссылок на исходные коды для ошибок данного типа>

В каждой строке представляются обобщенные ошибки данного типа (Рис 3.).





Рис 3. Окно Error location.



Обобщаются (объединяются для показа) все ошибки, которые порождены одним и тем же оператором исходной программы (имеющие одну и ту же ссылку на исходные коды).

В списке ссылок на исходные коды могут быть помечены один или несколько элементов и осуществлен, при нажатии кнопки Show source, переход к окну (окнам) стека вызовов и исходного текста (Text control) программы. В окне (окнах) исходного текста показывается строка исходной программы, соответствующая помеченной ссылке в исходный код. Таким образом, пользователь может просмотреть для каждого типа ошибки все места в программе, где такие ошибки были обнаружены. При этом не требуется доступ к трассам.




5.9 Окно топологии процессоров (Topology control)



Окно топологии отображает топологию процессоров. Процессоры раскрашиваются в соответствии с итоговым состоянием задачи. Справа располагается легенда, где объясняется значение цветов и указываются значения параметров, соответствующих данному цвету (Рис 4).





Рис 4. Окно Topology control.



По двойному щелчку мыши на изображении процессора вызывается окно просмотра стека и исходных текстов (Text control) для последней ссылки в исходные тексты для данного процессора.



5.10 Окно конкретных ошибок (Errors list)



Информация об ошибках представляется в виде текстовой таблицы, содержащей для каждой ошибки строку (Рис 5):

<название типа ошибки> <список ссылок (времен) ошибочных событий в трассе >






Рис 5. Окно Errors list.



В строке таблицы с конкретными ошибками содержится упорядоченный по времени (в рамках строки) список ошибок данного типа. Значение элемента списка – время возникновения ошибки. Все строки упорядочены по временам их первых (самых ранних) ошибок.

В списке ссылок (времен) могут быть помечены один или несколько элементов и осуществлен переход к другим окнам, представляющим дополнительную информацию о конкретной ошибке. Для этой цели используются кнопки Show Errors, Show Event Line, Show Comments.

При нажатии кнопки Show Comments открывается дополнительное окно Comments (Рис 6), в котором приводится текст комментария об ошибке. Комментарий формируется отладчиком и предоставляется визуализатору при помощи интерфейса.






Рис 6. Окно Comments.



При нажатии кнопки Show Event Line осуществляется открытие окна событий Event line. Окно Event line должно открываться со сдвигом к первому отмеченному в списке конкретных ошибок событию (первому по времени событию, если указано несколько).

При нажатии кнопки Show Event Line визуализатору требуется доступ к трассам.

При нажатии кнопки Show Errors осуществляется открытие окна (окон) трасс (Trace control) и показывается соответствующее событие (строка) трассы, а также для каждого события трассы открывается окно (окна) стека и исходного текста (Text control) программы. Для ошибочного события каждой трассы показывается соответствующее окно с ошибочной строкой программы. Для одной отмеченной в окне Errors list ошибки могут показываться трассы нескольких процессоров, если ошибочная ситуация связана с несколькими процессорами.

При нажатии кнопки Show Errors визуализатору требуется доступ к трассам.




5.11 Окно событий (Event line)



Другая форма визуализации ошибок – окно Event line, в котором графически представлены события программы по процессорам с выделением ошибочных событий.

В этом окне для каждого процессора представлены в виде линеек окрашенных простейших геометрических фигур события трассы, упорядоченные по времени. Для каждого процессора изображается своя линейка. Таким образом, информация в этом окне – двумерный графический объект с координатами (номер процессора, время события).

Изображения событий “синхронизируются” (выравниваются слева) по коллективным операциям – у этих событий в линейках разных процессоров одинаковые координаты “время события”. Ошибочные события окрашиваются в различные оттенки красного, с учетом типа зафиксированной ошибки. Остальные события окрашиваются цветами, отличными от красного, чтобы упростить понимание типа операции (Рис 7).





Рис 7. Окно Event line.



Управление внутри окна: масштабирование, прокрутка горизонтальная и вертикальная. Вывод при наведении курсора на событие текстового комментария про это событие (диагностика ошибки, время в трассе для правильных событий).

Масштабирование осуществляется при помощи панели инструментов, возможно масштабирование сразу по двум измерениям и по каждому в отдельности, с заданием коэффициента растяжения (сжатия).

Навигация между окнами: при двойном “нажатии” кнопкой мыши на изображенное событие –переход к окну Trace control, причем в списке событий трассы текущим выделено событие, соответствующее нажатому изображению.



5.12 Окно просмотра стека и исходных текстов (Text control)



Окно показа стека и текстов разделяется на две части: просмотр стека (Stack view) и просмотр текса (Source view). В окне Stack view представлен стек вызовов в виде списка строк формата <номер> <имя файла> <стока кода> <наличие файла> (Рис 8), где <имя файла> - имя исходного файла, <строка кода> - номер строки в исходном тексте, помогающий локализовать ошибку, <наличие файла> - указание существования файла (файл может не существовать). Последний вызов расположен под первым номером, первый вызов стоит последним в списке.





Рис 8. Окно Text control.




Второе окно Source view отображает исходные тексты программы, и представляет собой набор закладок (Tab pane), где каждому файлу соответствует одна закладка.

Управление:

При выборе строки в окне стека, в окне Source view отображается исходный текст соответствующий данному вызову.

Возможен выбор режимов просмотра, через меню Actions:

	Показать/спрятать стек

	Показать/спрятать исходный код

	Показать строку кода (прокрутить окно исходного текста к выделенной строке)



5.13 Окно просмотра трасс (Trace control)



Окно Trace control состоит из двух частей (окон): окно трассы Trace view и окно Text control (Рис 9).

В окне Trace view представляются в текстовом виде события трассы, упорядоченные по времени. События, определенные отладчиком как ошибочные, имеют соответствующие пометки в поле признака ошибки, а также снабжаются текстовыми сообщениями об ошибках. 

Каждому событию соответствует срока формата

<номер события> <вызов/возврат> <имя функции> <время события> <имя файла> <ссылка на исходные коды> <признак ошибки> <название ошибки> <текст ошибки>

Где <вызов/возврата>- признак вызова или возврата из функции

<ссылка на исходные коды> - ссылка на текст программы, где происходит обращение к функции или возврат из нее

<признак ошибки> - может отсутствовать, либо указывать на наличие ошибки или предупреждения

Каждому событию соответствует ссылка на исходные коды или неопределенная ссылка. При смене строки в окне Trace view обновляется содержимое окна Text control, в нем выводится стек и исходные тексты, соответствующие ссылке в текущем событии из окна Trace view.





Рис 9. Окно Trace control.



Управление:

В окне Trace control через меню Actions возможны следующие действия:

	Полный/сокращенный просмотр стека. Установка (снятие) данного режима позволяет показывать (прятать) окно Stack view в окне Text control. При отключении стека показывается последнее событие в стеке вызовов, а точнее исходный текст, соответствующий этому событию.

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

	Показать/спрятать окно Trace view. Позволяет пользователю подробнее рассмотреть интересующие его исходные коды.

	Найти первую ошибку. Находит в списке событий первое событие с признаком ошибки и делает его текущим.

	Найти первую ошибку или предупреждение. Находит в списке событий первое событие с признаком ошибки или предупреждения и делает его текущим.

	Найти следующую ошибку. Находит следующее событие с признаком ошибки и делает его текущим.

	Найти следующую ошибку или предупреждение. Находит следующее событие с признаком ошибки или предупреждения и делает его текущим.

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




Заключение



В ходе работы были изучены модели параллельного программирования, методики и средства отладки параллельных программ, методики создания пользовательского интерфейса. Изучена графическая библиотека Qt [13], которая была выбрана как база для реализации из-за того, что она обеспечивает работу приложения в двух операционных средах – UNIX и Windows. Изучено программное средство Qt Designer. Проанализированы вопросы визуализации отладочной информации, способов точной локализации и представления ошибок.

Была разработана, спроектирована и реализована диалоговая оболочка MPI-отладчика. Язык реализации C++ (объем программы 12700 сток), платформа Linux, графическая библиотека Qt 3.2. Определен набор функций, необходимый для быстрой и точной локализации ошибок. Предложены новые способы визуализации трассировки, например Event line (сравните с Time line, используемой в большинстве существующих средств отладки). Реализован пользовательский интерфейс, который был опробирован при отработке MPI-отладчика на тестах и реальных приложениях.

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




Литература



	MPI: A Message-Passing Interface Standard. http://www.mpi-forum.org/docs /docs.html

	High Performance Fortran language specification // High Performance Fortran Forum. Scientific Programming. – 1993. – Vol. 2. – Р.1-170.

	OpenMP Consortium. http://www.openmp.org

	Документация к системе DVM. http://www.keldysh.ru/pages/dvm

	NASA http://science.nas.nasa.gov/Software/AIMS/manual

	Описание программных средств отладки Vampir и VampirTrace http://www.pallas.com/e/products/vampir

	Гибсон Ф. "Экологический подход к психологии восприятия"

	Донской М. Пользовательский интерфейс. PC Magazine – Russian Edition © СК Пресс.

	Parallel Relative Debugging for Distributed Memory Applications. Gregory R. Watson and David Abramson. School of Computer Science and Software Engineering Monash University.

	Qt library documentation http://www.trolltech.com

	High Performance Cluster Computing: Architectures and Systems, Vol. 1. Edited by Rajkumar Buyya. School of Computer Science and Software Engineering Monash University.

	Solaris 7 Software Developer Collection. Multithreaded Programming Guide. Tools for Enhancing MT Programs. http://docs.sun.com/db/doc/805-5080/6 j4q7emhk?q=Locklint&a=view

	Isolating Failure-Inducing Thread Schedules. International Symposium on Software Testing and Analysis (ISSTA2002), Via di Ripetta, Rome Italy, July 22-24, 2002. http://www.research.ibm.com/dejavu/choi-zeller.pdf