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

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 14.10.2010
Размер файла 2,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

- 50 -

Содержание

Введение

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

1.1 Краткий обзор существующих моделей

1.2 Модель параллелизма DVM

Глава 2. Сложности отладки DVM-программ. Постановка задачи

Глава 3. Описание графической оболочки

3.1 Описание возможностей

3.2 Отладка эффективности DVM-программ

3.3 Функциональная отладка DVM-программ

3.4 Анализ системной трассировки

Заключение

Литература

Приложение 1. Форма выдачи характеристик производительности

Приложение 2. Структура файла функциональной трассировки

Приложение 3. Команды DVM-системы

Приложение 4. Пример преобразования системной трассировки

Введение

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

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

Вычислительные программы для последовательных ЭВМ традиционно создавались на языках Фортран и Си. Для многопроцессорных ЭВМ с распределенной памятью и сетей ЭВМ такие программы в настоящее время, как правило, создаются на языках Фортран и Си, расширенных библиотеками передачи сообщений. Но программирование с использованием таких языков сопряжено с множеством сложностей. Поэтому возникает необходимость использовать другую модель. Такими языками и являются языки C-DVM и Fortran-DVM (в дальнейшем F-DVM), предназначенные для разработки мобильных и эффективных параллельных программ для ЭВМ различной архитектуры. Эти языки предоставляют возможность написать программу, которая может одновременно рассматриваться и как последовательная, и как параллельная. Параллельная программа представляет собой обычную последовательную программу, в которую вставлены DVM-указания, определяющие ее параллельное выполнение. DVM-указания прозрачны для стандартных компиляторов, поэтому DVM-программа обрабатывается ими как обычная последовательная программа.

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

1.1 Краткий обзор существующих моделей

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

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

На сегодняшний день модель передачи сообщений является наиболее широко используемой моделью параллельного программирования. Программы этой модели создают множество процессов, с каждым из которых ассоциированы локальные данные. Каждый процесс идентифицируется уникальным именем. Процессы взаимодействуют, посылая и получая сообщения [4]. Модель передачи сообщений не накладывает ограничений ни на динамическое создание процессов, ни на выполнение нескольких процессов одним процессором, ни на использование разных программ для разных процессов. Формальные описания систем обмена сообщениями не рассматривают вопросы, связанные с манипулированием процессами. Однако, при реализации таких систем приходится принимать какое-либо решение в этом отношении. На практике сложилось так, что большинство систем обмена сообщениями при запуске параллельной программы создает фиксированное число идентичных процессов и не позволяет создавать и разрушать процессы в течение работы программы. В таких системах каждый процесс выполняет одну и ту же программу (параметризованную относительно идентификатора либо процесса, либо процессора), но работает с разными данными, поэтому о таких системах говорят, что они реализуют SPMD (single program multiple data - одна программа много данных) модель программирования. SPMD модель приемлема и достаточно удобна для широкого диапазона приложений параллельного программирования, но она затрудняет разработку некоторых типов параллельных алгоритмов [6].

* Модель с общей памятью. В модели с общей памятью процессы разделяют общее адресное пространство. Так как нет ограничений на использование общих данных, то программист должен явно специфицировать общие данные и упорядочивать доступ к ним с помощью средств синхронизации. В языках высокого уровня логически независимые нити (threads Нить - это легковесный процесс, имеющий с другими нитями общие ресурсы, в том числе общую оперативную память. С концептуальной точки зрения нить существует внутри процесса, являясь более мелкой единицей управления программой [13].) вычислений определяются на уровне функциональных задач или витков цикла. Обобщение и стандартизация моделей с общей памятью привели к созданию стандарта OpenMP [1]. В OpenMP за основу берется последовательная программа, а для создания ее параллельной версии пользователю предоставляется набор директив, процедур и переменных окружения. Стандарт OpenMP разработан для языков Фортран, С и С++ [3].

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

* Модель параллелизма по данным. В модели параллелизма по данным отсутствует понятие процесса и, как следствие, явная передача сообщений или явная синхронизация. В этой модели данные последовательной программы распределяются по узлам (процессорам) вычислительной системы. Последовательная программа преобразуется компилятором либо в модель передачи сообщений, либо в модель с общей памятью. При этом вычисления распределяются по правилу собственных вычислений Правило собственных вычислений - каждый процессор выполняет только вычисления собственных данных, т.е. данных, распределенных на этот процессор [1]..

Модель параллелизма по данным также является часто используемой моделью параллельного программирования. Название модели происходит оттого, что она эксплуатирует параллелизм, который заключается в применении одной и той же операции к множеству элементов структур данных. Например, "умножить все элементы массива M на значение x" или "снизить цену автомобилей со сроком эксплуатации более 5-ти лет". Программа с параллелизмом данных состоит из последовательностей подобных операций. Поскольку операции над каждым элементом данных можно рассматривать как независимые процессы, то степень детализации таких вычислений очень велика, а понятие "локальности" (распределения по процессам) данных отсутствует. Следовательно, компиляторы языков с параллелизмом данных часто требуют, чтобы программист предоставил информацию относительно того, как данные должны быть распределены между процессорами, другими словами, как программа должны быть разбита на процессы[6].

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

1.2 Модель параллелизма DVM

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

- распределить вычисления и данные

- организовать доступ к удаленным данным.

В отличие от многопроцессорных ЭВМ с общей памятью, на которых не требуется распределять данные, а распределение вычислений осуществляется, как правило, посредством динамического распределения между процессорами витков каждого параллельного цикла (независимо от распределения витков других циклов), на системах с распределенной памятью требуется произвести согласованное распределение вычислений и данных. Несогласованность распределения вычислений и данных приведет к тому, что параллельная программа будет выполняться гораздо медленнее последовательной. Такое согласованное распределение требует тщательного анализа и проектирования алгоритмов всей программы. Если на системе с общей памятью распараллелить один цикл, занимающий 90% времени решения задачи, то можно рассчитывать на почти десятикратное ускорение программы. На системе с распределенной памятью распараллеливание этого цикла без учета “интересов” других циклов может вызвать не ускорение, а замедление программы.

На первом этапе написания программы определяются массивы, которые могут быть распределены между процессорами (распределенные данные). Распределение данных в языке С-DVM осуществляется путем “разрезания” некоторых массивов на части и размещения этих частей на разных процессорах. Такое “разрезание” осуществляется путем разделения какого-то измерения массива на примерно равные по длине отрезки. При этом многопроцессорная система из N процессоров, на которой будет выполняться параллельная программа, может рассматриваться не только как линейка процессоров, но и как многомерная решетка (или матрица) процессоров, например, как двумерная решетка размера N1 на N2 (N1 * N2 = N). В этом случае одно из измерений массива может быть разделено на N1 отрезков, а другое - на N2 отрезков. В результате массив будет разрезан на N частей (секций массива), каждая из которых будет отображена на соответствующий процессор двумерной решетки. Такие массивы называются распределенными массивами. Остальные переменные (как массивы, так и скаляры) называются размноженными и отображаются по одному экземпляру на каждый процессор (размноженные данные). Распределение данных определяет множество локальных или собственных переменных для каждого процессора. При вычислении значения собственной переменной процессору могут потребоваться как значения собственных переменных, так и значения несобственных (удаленных) переменных. Все удаленные переменные должны быть указаны в директивах доступа к удаленным данным.

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

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

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

Глава 2. Сложности отладки DVM-программ. Постановка задачи

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

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

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

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

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

Графический интерфейс отладки эффективности должен предоставлять возможность исследования, сравнения и анализа как реальных характеристик эффективности параллельного выполнения программы, так и прогнозируемых. Для этого необходимо привести реальные данные, полученные визуализатором производительности (текстовый файл), и прогнозируемые предиктором (html-файл) к единому формату и предоставить возможность увидеть эти характеристики одновременно. А так же необходимо предоставить различные возможности для работы с характеристиками программы или её частей (интервалов): отображение характеристик как в графическом, так и в численном виде, поиск участков программы, на которых произошли основные потери времени, возможность автоматизированного анализа производительности и выявления участков основной потери эффективности параллельной программы.

Графический интерфейс функциональной отладки должен предоставлять возможность пользователю запускать отладчик, встроенный в DVM-систему. В случае обнаружения ошибок должна предоставляться возможность пошаговой отладки, в соответствии с существующей методикой отладки DVM-программ См. страницу 21.. В процессе пошаговой отладки должна предоставляться возможность исследования файлов эталонной трассы, трасс, полученных при работе программы на реальной параллельной машине и исходного текста программы. Например, должна предоставляться возможность быстрого поиска в исходном файле места, соответствующего указанному месту в эталонной трассе. И наоборот. Должна предоставляться возможность быстрого поиска мест расхождений в трассах.

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

Глава3. Описание графической оболочки

3.1 Описание возможностей

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

Интерфейсы отличаются по способу доступа к командным файлам программ [15]:

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

· Графический однооконный интерфейс. Данный интерфейс является основным для всех видов программных оболочек. Пример: Norton Commander и “нортонообразные” оболочки (DOS Navigator, Windows Commander, Disk Commander). Такой интерфейс весьма удобен при работе с файлами, поскольку обеспечивает высокую скорость выполнения операций

· Графический многооконный интерфейс. Все операции производятся, как правило, мышью. Это наиболее удобный и перспективный интерфейс, особенно при работе с программами. Этот интерфейс является стандартным для программ операционной системы Windows.

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

Графическая оболочка отладки DVM-программ реализует диалоговый интерфейс как наиболее удовлетворяющий условиям поставленной задачи. Программа реализована на языке программирования Visual С++ 6.0 с использованием каркаса приложений Microsoft Foundation Class Library (MFC) в среде Microsoft Visual Studio 6.0. Поскольку для большинства пользователей работа с операционными системами семейства Windows более привычна, и отладка программ, как функциональная, так и эффективности, может проводиться на тестовых данных в этой же среде, то язык и среда программирования были выбраны таким образом, чтобы интерфейс графической оболочки был наиболее приближен к привычному интерфейсу Windows.

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

- средства для отладки эффективности;

- средства для функциональной отладки;

- средства анализа системной трассировки.

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

Performance debugging - Отладка эффективности

Functional debugging - Функциональная отладка

System trace analyzer - Анализ системной трассировки

3.2 Отладка эффективности DVM-программ

Средства DVM-системы

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

· степенью распараллеливания программы - долей параллельных вычислений в общем объеме вычислений;

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

· временем, необходимым для выполнения межпроцессорных обменов;

· степенью совмещения межпроцессорных обменов с вычислениями.

· эффективностью выполнения вычислений на каждом процессоре

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

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

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

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

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

Возможности графической оболочки

Разработанная графическая оболочка предоставляет следующие возможности:

· демонстрация характеристик производительности DVM-программы

· иллюстрация времени работы решетки процессоров в процессе выполнения параллельной программы согласно используемой программой топологии

· автоматизированный анализ производительности DVM-программ по предоставленным характеристикам.

Демонстрация характеристик производительности DVM-программы

Данная оболочка работает с файлами, созданными различными инструментальными средствами DVM-системы. Это и файлы статистики, созданные визуализатором производительности, и html-файлы, созданные предсказателем производительности (предиктором). Информация, предоставляемая оболочкой, аналогична той, что предоставляют эти средства:

1. Коэффициент эффективности (Parallelism efficiency) равен отношению полезного времени к общему времени использования процессоров.

2. Время выполнения (Execution time).

3. Общее время использования процессоров (Total time) - произведение времени выполнения (Execution time) на число используемых процессоров (Processors).

4. Полезное время (Productive time)

5. Потерянное время (Lost time).

6. Недостаточный параллелизм (Insufficient parallelism).

7. Коммуникации (Communication).

8. Простои (Idle time).

9. Разбалансировка (Load Imbalance).

10. Потенциальные потери из-за синхронизации (Synchronization).

11. Потенциальные потери из-за разброса времен (Time variation).

12. Время перекрытия (Overlap).

13. Число используемых процессоров (Processors).

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

Для вывода информации какого-либо файла достаточно нажать на кнопку File и в поле появившегося окна ввести имя исследуемого файла или выбрать файл с помощью стандартного окна открытия файла, нажав кнопку Browse. Теперь можно исследовать информацию, используя возможности оболочки или выбрать следующий файл. Выбранный последним файл будем называть текущим. Его информация записана последней. При выборе файла выводится информация об интервале, соответствующем всей программе. Нажимая кнопки Next и Previous, просматриваются все интервалы. Об интервале выводится следующая информация: номер строки в DVM-программе, на которой начинается интервал и его уровень См. Приложение 1. Форма выдачи характеристик производительности (стр. 32). Всего в окне помещается информация о девяти файлах. Для того чтобы стереть выведенную информацию и начать работу с начала достаточно нажать кнопку Clear.

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

Иллюстрация топологии решетки процессоров

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

Для того чтобы посмотреть иллюстрацию топологии решетки процессоров текущего файла достаточно нажать на кнопку Performance time of processors. Если исследуется линейка процессоров или матрица, то в открывшемся окне отобразится время работы каждого процессора согласно его расположению в линейке или матрице. Если же рассматриваемая решетка трехмерная, то в открывшемся окне отобразится только матрица процессоров с временами выполнения первого слоя. Нажимая на кнопку Next Dim, просматриваются все слои решетки.

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

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

Для начала анализа производительности DVM-программы на основе текущего файла достаточно нажать кнопку Start performance debugging.

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

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

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

3.3 Функциональная отладка DVM-программ

Средства DVM-системы

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

В общем случае можно выделить следующие пять классов ошибок:

Ошибки в последовательной программе.

Синтаксические ошибки в DVM-указаниях (неправильная запись оператора, отсутствие скобки и т.д.), а также нарушение статической семантики.

Неправильная последовательность выполнения DVM-указаний или неправильные параметры DVM-указаний.

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

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

Ошибки первого класса диагностируются:

стандартными компиляторами с языков С или Fortran при компиляции в режиме игнорирования DVM-указаний;

средствами отладки, принятыми для обычных последовательных программ.

Ошибки второго класса диагностируются при конвертации C-DVM или F-DVM программ.

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

Ошибки четвертого класса выявляются DVM-отладчиком при:

запуске DVM-программы на одном процессоре в режиме динамического контроля;

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

Ошибки пятого класса могут быть выявлены при:

анализе трассировки вычислений при параллельном выполнении программы;

анализе накопленной системной трассировки трассировки вызовов функций Lib-DVM;

В этом разделе мы будем рассматривать ошибки четвертого класса и методы их выявления.

Динамический контроль DVM-указанийДинамический контроль DVM-указаний

Динамический контроль DVM-указаний позволяет проверить корректность распараллеливания программы посредством DVM-указаний, и основан на моделировании параллельного выполнения DVM-программы во время ее последовательного выполнения на одном процессоре. Для динамического контроля программы ее следует сначала скомпилировать в режиме получения отладочного варианта параллельной программы.

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

Динамический контроль позволяет выявлять ошибки следующих типов:

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

Использование в параллельном цикле или после выхода из него приватных переменных без их предварительной инициализации.

Запись в переменные, доступные только на чтение.

Использование редукционных переменных после запуска асинхронной редукции, но до ее завершения.

Необъявленный доступ к нелокальным элементам распределенного массива.

Запись в теневые грани массива.

Чтение теневых элементов массива до завершения операции их обновления.

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

Выход за пределы распределенного массива.

Запись в буфер удаленного доступа.

Сравнение результатов выполнения

Отсутствие ошибок при динамическом контроле не гарантирует правильной работы параллельной программы по следующим причинам:

динамический контроль не проверяет правильность описания редукционных операций;

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

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

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

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

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

Степенью подробности (а значит и объемом) трассировки можно управлять:

при конвертации программы опциями C-DVM и F-DVM конверторов;

при выполнении программы с помощью параметров трассировки;

при выполнении программы с помощью конфигурационного файла трассировки.

Возможности графической оболочки

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

Методика фунциональной отладки DVM-программ

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

· Отладка обычной последовательной программы

DVM-программа отлаживается на рабочей станции как обычная последовательная программа на языке C или Fortran c использованием обычных компиляторов и средств отладки. DVM-указания при этом игнорируются.

· Получение отладочных вариантов DVM-программы для последовательного и параллельного выполнения

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

· Выполнение программы в режиме динамического контроля DVM-указаний

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

· Накопление эталонного файла трассировки DVM-программы

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

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

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

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

· Сравнение трассировки параллельного выполнения с эталонной

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

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

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

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

· Накопление трассировки параллельной программы

В случае обнаружения ошибок при накоплении трассировки выдается диагностика о наличии таких ошибок. Этот поток может быть направлен либо на экран, либо в файл. Сообщения о типе ошибки, строке исходного текста и номерах итераций всех объемлющих циклов так же можно направить либо на экран, либо в файл. Трассировка накапливается для каждого процессора в отдельном файле, например с именами: 0.trd, 1.trd, 2.trd и т.д.

Структуру накапливаемых файлов трассировки в приложении См. Приложение 2. Структура файла функциональной трассировки (стр. 33 ).

· Параллельное выполнение с реальными данными

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

Реализация методики в рамках графической оболочки

Разработанная графическая оболочка работает с исходными файлами DVM-программ. Для вывода информации какого-либо файла достаточно нажать на кнопку File и выбрать файл с помощью стандартного окна открытия файла. Вследствие этих действий в окне появится текст выбранного файла. О файле выводится следующая информация: имя файла и номер текущей строки. Теперь можно исследовать этот файл, используя возможности графической оболочки. Например, можно перемещаться по файлу, используя клавиши “Insert” и “Delete” в качестве стрелок. Позднее, когда поле файла трассировки будет непустым, появится возможность сопоставлять строчке исходного файла соответствующую строчку файла трассировки, используя кнопку “Update trace”. Кроме того, при перемещении по файлу трассировки происходит соответствующее перемещение по исходному файлу.

Для того, чтобы начать функциональную отладку необходимо нажать на кнопку “Debug”. Вследствие этого запускается отладчик DVM-системы, который последовательно делает все шаги методики функциональной отладки. Команды DVM-системы, используемые для реализации методики описаны в приложении См. Приложение 3. Команды DVM-системы (стр. 35 ).

Если ошибок нет, то выдается окно с сообщением об этом. В противном случае предлагается провести отладку по шагам, анализируя ошибки на каждом шаге.

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

На шаге сравнения трасс накапливается трассировка параллельной программы на каждом процессоре, на которых выполняется программа, и появляется возможность сравнения этих трассировок с эталонной. Трассировка накапливается в файлах 0.trd, 1.trd и т.д. В связи с этим возникает необходимость решить проблему именования файла эталонной трассировки, называемого 0.trd.

3.4 Анализ системной трассировки

Средства накопления системной трассировки в DVM-системе

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

Системная трассировка (трассировка вызовов функций системы поддержки) используется для отладки DVM-программ, самой системы поддержки, а также служит входной информацией для предиктора. Трассировка содержит информацию о вызываемых функциях и их параметрах, а также сведения о функционировании внутренних механизмов системы поддержки. Она может накапливаться в буфере, либо выводиться непосредственно в файл. Накопленная в буфере трассировка выгружается в файл при завершении выполнения программы. Системная трассировка позволяет проследить последовательность вызовов функций и их времена выполнения. Имеется два основных способа сбора системной трассировки:

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

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

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

Файл системной трассировки имеет следующую структуру:

· событие обращения к функции имеет имя call_<имя функции> ,

· событие возврата из функции имеет имя ret_<имя функции> .

Состав накапливаемой при трассировке информации определяется режимом трассировки. При кратком режиме выводится:

· имя события;

· время, прошедшее с предыдущего события;

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

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

Возможности графической оболочки

Разработанная графическая оболочка позволяет пользователю создавать и исследовать системные трассировки DVM-программ. Для вывода информации какого-либо файла достаточно нажать на кнопку File и выбрать файл с помощью стандартного окна открытия файла. Вследствие этих действий запустится команда запуска DVM-программы, осуществляющая накопление системной трассировки. В окне появится текст трассировки выбранного файла. О файле выводится следующая информация: имя и номер текущей строки. Теперь можно исследовать этот файл, используя возможности графической оболочки. Например, можно перемещаться по файлу, трассировки используя стрелки, кнопки поля Edit, а также соответствующие клавиши на клавиатуре.

Для того, чтобы появилась возможность исследовать и сравнивать файл трассировки с исходным файлом необходимо поставить галочку в поле “Show resource file”. Появится окно с исходным файлом, по которому можно перемещаться, используя стрелки. При перемещении по файлу трасс происходит соответствующее перемещение по исходному файлу. Кроме того, существует возможность сопоставлять строчке исходного файла соответствующую строчку файла трассировки, используя кнопку “Update trace”.

Поскольку структура файла трассировки не является очевидной для пользователя DVM-системы, то появилась необходимость преобразования файла системной трассы в более удобный вид. В связи с этим, графическая оболочка предоставляет возможность использовать файл системной трассы в удобном пользователю виде. Для этого необходимо в выпадающем меню вместо пункта “System trace”выбрать пункт “User trace”. Пример преобразования системной трассировки к удобному виду в приложении См. Приложение 4. Пример преобразования системной трассировки (стр. 37). Теперь появилась возможность сопоставлять между собой файл трассировки и файл с исходным текстом программы. То есть по строке файла трассировке находить соответствующую строку в исходном файле и наоборот.

Заключение

В рамках данной дипломной работы была разработана графическая оболочка для отладки DVM-программ.

Разработанная оболочка удовлетворяет следующим предъявленным к ней требованиям:

· обеспечивает привычный большинству пользователей интерфейс операционных систем семейства Windows;

· поддерживает как функциональную отладку DVM-программ, так и отладку эффективности.

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


Подобные документы

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

    дипломная работа [767,2 K], добавлен 14.10.2010

  • Изучение составляющих этапов разработки программ, процесса их тестирования, отладки и документирования в контексте курса обучения начинающих программистов. Теоретический анализ постановки задачи и модели программы, создания текста, семантической отладки.

    курсовая работа [29,2 K], добавлен 28.11.2010

  • Отладка - процесс обнаружения, устранения синтаксических и семантических ошибок. Точки отслеживания (трассировки). Выполнение отладки в режиме останова. Мониторинг содержимого переменных. Пошаговое выполнение кода. Разработка тестов для отладки программы.

    презентация [743,6 K], добавлен 09.12.2013

  • Модели параллельного программирования; отладка параллельных программ. Реализация экспериментальной версии системы сравнительной отладки Fortran-OpenMP программ: получение, сбор и запись трассы, инструментарий программ, используемый формат файлов трассы.

    дипломная работа [92,8 K], добавлен 17.10.2013

  • Основные виды загрузки. Приемы работы в ТР: процесс отладки. Команды редактирования отладки программ с помощью командного меню Pascal. Составление программы с использованием простых операторов ввода, вывода. Сравнения с текстовыми и числовыми условиями.

    отчет по практике [134,7 K], добавлен 02.09.2010

  • Средства интегрированной среды Microsoft Visual Studio, предоставляемые программисту для реализации программ на языке С++. Особенности стиля написания программ. Типовые приемы и методы создания и отладки программ. Листинги программ и их тестирование.

    лабораторная работа [814,3 K], добавлен 26.05.2013

  • Решение задач прикладного программирования. Оформление разработанных алгоритмов в виде графических схем. Написание программ с использованием подпрограмм, их отладка. Блок-схемы и листинг программ. Наборы тестов для отладки разработанных программ.

    курсовая работа [575,8 K], добавлен 06.12.2013

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

    курсовая работа [303,4 K], добавлен 19.01.2016

  • Основные направления развития параллелизма, модели параллельного программирования. Автоматические средства разработки параллельного ПО, анализ последовательной программы. Разработка системы автоматического распараллеливания программ на языке Fortran77.

    дипломная работа [57,7 K], добавлен 14.10.2010

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

    курсовая работа [1,1 M], добавлен 22.11.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.