44323

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

Дипломная

Информатика, кибернетика и программирование

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

Русский

2013-11-11

1.98 MB

2 чел.

Московский Государственный Университет им. М. В. Ломоносова

Факультет Вычислительной Математики и Кибернетики

Кафедра Системного Программирования

ДИПЛОМНАЯ РАБОТА

Выполнила:

Кулешова Мария Игоревна

группа 527

Научный руководитель:

профессор, д. ф.-м. наук

Крюков Виктор Алексеевич

Диалоговая оболочка для отладки

DVM-программ

Москва

2004


Содержание

Введение 3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение 29

Литература 31

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

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

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

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


Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

Интерфейсы отличаются по способу доступа к командным файлам программ [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 - Анализ системной трассировки

Отладка эффективности 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-программе, на которой начинается интервал и его уровень 4. Всего в окне помещается информация о девяти файлах. Для того чтобы стереть выведенную информацию и начать работу с начала достаточно нажать кнопку Clear.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1.  Ошибки в последовательной программе.
  2.  Синтаксические ошибки в DVM-указаниях (неправильная запись оператора, отсутствие скобки и т.д.), а также нарушение статической семантики.
  3.  Неправильная последовательность выполнения DVM-указаний или неправильные параметры DVM-указаний.
  4.  Неправильное выполнение вычислений из-за некорректности DVM-указаний и ошибок, не проявляющихся при последовательном выполнении программы.
  5.  Аварийное завершение параллельного выполнения программы (зацикливания, зависания) из-за некорректности DVM-указаний и ошибок, не проявляющихся при последовательном выполнении программы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1.  Использование в параллельном цикле или после выхода из него приватных переменных без их предварительной инициализации.
  2.  Запись в переменные, доступные только на чтение.
  3.  Использование редукционных переменных после запуска асинхронной редукции, но до ее завершения.
  4.  Необъявленный доступ к нелокальным элементам распределенного массива.
  5.  Запись в теневые грани массива.
  6.  Чтение теневых элементов массива до завершения операции их обновления.
  7.  Модификация нелокального элемента распределенного массива в последовательной части программы.
  8.  Выход за пределы распределенного массива.
  9.  Запись в буфер удаленного доступа.

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

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

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

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

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

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

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

  •  при конвертации программы опциями C-DVM и F-DVM конверторов;
  •  при выполнении программы с помощью параметров трассировки;
  •  при выполнении программы с помощью конфигурационного файла трассировки.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Структуру накапливаемых файлов трассировки в приложении6.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Заключение

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

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

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

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

Оболочка реализована на языке программирования Visual С++ 6.0 с использованием каркаса приложений Microsoft Foundation Class Library (MFC) в среде Microsoft Visual Studio 6.0. Программа состоит из 20 файлов  с исходным кодом, 22 заголовочных файла и файлов ресурсов, содержащих 22 класса. Всего исходный код занимает порядка 7500 строк, в откомпилированном виде занимает 352KБ.

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


Литература

  1.  Описание DVM-системы: http://www.keldysh.ru.
  2.  Н.А.Коновалов, В.А.Крюков, А.А.Погребцов, Ю.Л.Сазанов. “C-DVM – язык разработки мобильных параллельных программ”, Препринт ИПМ им. М.В.Келдыша РАН, №86, Москва, 1997 г.
  3.  В.В.Воеводин, Вл.В.Воеводин "Параллельные вычисления", БХВ-Петербург, 2002 г.
  4.  MPI: A Message-Passing Interface Standard. http://www.mpi-forum.org
  5.  OpenMP Consortium. http://www.openmp.org
  6.  Модели параллельного программирования. http://www.ccas.ru
  7.  Материалы сайта http://www.parallel.ru.
  8.  Robert Hood and Gabriele Jost, “Support for debugging automatically parallelized programs”, MRJ Technology Solutions – Numerical Aerospace Simulation Division, NASA Ames Research Center, Processing of the Fourth International Workshop on Automated Debugging, August, 2000, Munich.
  9.  P. Kacsuk, “Systematic debugging of parallel programs based on collective breakpoints”, Hungarian Academy of Sciences, OMFB project WINPAR-DEBUGGER No. E151, 2003.
  10.  Jeffrey S. Vetter and Bronis R. de Supinski, “Dynamic software testing of MPI applications with umpire”, Center for Applied Scientific Computing, 0-7803-9802/2000/$10.00 © 2000 IEEE.
  11.  Robert Hood and Gabriele Jost, “A debugger for computational grid applications”, MRJ Technology Solutions – Numerical Aerospace Simulation Division, NASA Ames Research Center, 0-7695-0556-2/00$10.00 © 2000 IEEE.
  12.  Mark E. Crovella and Thomas J. LeBlanc. Performance debugging using parallel performance predicates. In Proceedings of the 3rd ACM/ONR Workshop on Parallel and Distributed Debugging, pages 140-150, May 1993.
  13.  Марк Митчел, Джеффри Оулдем, Алекс Самьюэл. “Программирование для Linux. Профессиональный подход”. Вильямс. Москва - Санкт-Петербург - Киев, 2002.
  14.  Дэвид Дж. Круглински, Скотт Уингоу, Джордж Шеферд. “Программирование на Microsoft Visual С++ 6.0”. Русская редакция. Питер. Санкт-Петербург - Москва - Харьков - Минск, 2001 г.
  15.  М. Львовский. Статья “Понятие о программном обеспечении (Software). Понятие об интерфейсе. Типы интерфейсов.http://markbook.chat.ru


Приложение 1.

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


Приложение 2.

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

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

Формат заголовка аналогичен формату конфигурационного файла и имеет следующий вид:

MODE = <NONE | MINIMAL | MODIFY | FULL>, [EMPTYITER]
# Begin trace header. Don't modify these records
<SL | PL | TR> <
номер конструкции> (<номер объемлющей конструкции>) [<ранг цикла>] {<имя файла>, <номер строки>} = <NONE | MINIMAL | MODIFY | FULL>, (<измерение>:<первый виток>, < последний виток>, <шаг >), …
EL: <
номер конструкции>

<SL | PL | TR> <номер конструкции> (<номер объемлющей конструкции>) [<ранг цикла>] {<имя файла>, <номер строки>} = <NONE | MINIMAL | MODIFY | FULL>, (<измерение>:<первый виток>, < последний виток>, <шаг >), …
EL: <номер конструкции>

END_HEADER
# End trace header

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

После заголовка, в файле трассировки идут записи следующих типов и форматов:

  •  Чтение переменной:
    RD: [<тип переменной>] <имя переменной> = <значение>; {<файл>, <строка>}
  •  Начало оператора присваивания нового значения переменной:
    BW: [<тип переменной>] <имя переменной> ; {<файл>, <строка>}
  •  Запись нового значения переменной:
    AW: [<тип переменной>] < имя переменной > = <значение>; {<файл>, <строка>}
  •  Чтение редукционной переменной:
    RV_RD: [<тип переменной >] < имя переменной > = < значение >; {< файл>, <строка >}
  •  Начало оператора присваивания нового значения редукционной переменной:
    RV_BW: [<тип переменной >] < имя переменной >; {< файл>, <строка >}
  •  Запись нового значения редукционной переменной:
    RV_AW: [<тип переменной>] <имя переменной> = <значение>; {<файл>, <строка>}
  •  Результат вычисления редукции:
    RV: [<тип переменной >] <значение>; {< файл>, <строка >}
  •  Завершение блока собственных вычислений в последовательной части программы:
    SKP: {< файл>, <строка >}
  •  Начало параллельного цикла:
    PL: <номер конструкции> (<номер объемлющей конструкции>) [<ранг цикла>] ; {<файл>, <строка>}
  •  Начало последовательного цикла:
    SL: <номер конструкции> (<номер объемлющей конструкции>) [<ранг цикла (всегда равен единице)>] ; {<файл>, <строка>}
  •  Начало области параллельных задач:
    TR: <номер конструкции> (<номер объемлющей конструкции>) [<ранг области (всегда равен единице)>] ; {<файл>, <строка>}
  •  Начало витка или параллельной задачи:
    IT: <абсолютный индекс витка (вычисляется из значений всех индексных переменных цикла) или номер задачи>, (<значение индексной переменной 1>,< значение индексной переменной 2>,…).
  •  Завершение параллельного или последовательного цикла или области задач:
    EL: <номер конструкции>; {<файл>, <строка>}

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


Приложение 3.

Команды DVM-системы, используемые оболочкой при функциональной отладке

  1.  Команда получения отладочного последовательного варианта DVM-программ (с подключением динамического отладчика для сбора эталонной трассировки).

dvm csdeb [<опции C-DVM конвертора>] <имя_C-DVM-программы>

Результат работы: готовая программа (выполняемый файл <имя_DVM-программы>_s).

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

dvm cpdeb [<опции C-DVM конвертора>] <имя_C-DVM-программы>

Результат работы: готовая программа (выполняемый файл <имя_DVM-программы>_p).

  1.  Команда запуска отладочного параллельного варианта DVM-программ, осуществляющего динамический контроль DVM-указаний.

dvm err <имя_DVM-программы>

Результат работы: ошибки, обнаруженные в DVM-указаниях (при их наличии).

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

dvm trc <имя_DVM-программы>

Результат работы: файл с накопленной трассировкой или при наличии ошибок сбора трассировки – сообщения об ошибках.

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

dvm red <имя_DVM-программы>

Результат работы: ошибки, обнаруженные в процессе сравнения трассировок (при их наличии).

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

dvm dif [матрица процессоров] [<опции_кластера >] <имя_DVM-программы>

Результат работы: ошибки, обнаруженные в процессе сравнения трассировок (при их наличии).

  1.  Команда запуска отладочного параллельного варианта DVM-программ, осуществляющая накопление трассировки на нескольких процессорах.

dvm ptrc [матрица процессоров] [<опции_кластера >] <имя_DVM-программы>

Результат работы: файлы с накопленной трассировкой или при наличии ошибок сбора трассировки – сообщения об ошибках.

  1.  Команда запуска DVM-программы, осуществляющая накопление трассировки для предиктора.

dvm runpred <имя_DVM-программы>

Результат работы: файл <имя_DVM-программы>.ptr с накопленной трассировкой.

  1.  Команды комплексного прогона одной программы последовательно через все шаги отладки.

dvm ctest [матрица процессоров] <имя_DVM-программы>

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


Приложение 4.

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

Фрагмент системной трассировки

RTS VERSION = 2841

syspar   file version = 2841 (min vers = 2841)

sysdebug file version = 2841 (min vers = 2841)

systrace file version = 2841 (min vers = 2841)

trcevent file version = 2841 (min vers = 2841)

usrdebug file version = 2841 (min vers = 2841)

statist  file version = 2841 (min vers = 2841)

     ProcCount=1;      PSRank=3;      PSSize= 1 1 1;

    VProcCount=0;

    MasterProc=0(0);   IOProc=0(0);   CentralProc=0(0);   MeanProcPower=0.016001;

     

    IntProcNumber  ExtProcNumber  ProcIdent  ProcWeight

          0              0            0        1.00

     

    CoordWeight[0]= 1.00(1.00)  

    CoordWeight[1]= 1.00(1.00)  

    CoordWeight[2]= 1.00(1.00)  

     

    MaxMsgLength  MsgBufLength  MsgBuf1Length  MaxMsgSendNumber  ChanNumber  Dupl

              0             0             0                0           0       0

                                                           0

     

    MPS=MPI;  Non-standard run;

     

Tm=0.000000  Tirecv=0.000001  Twrecv=0.000001

ret_dvm_Init               TIME=0.23400000 LINE=25     FILE=jac1.cdv

 

call_getam_                TIME=0.00000100 LINE=20     FILE=jac1.cdv

ret_getam_                 TIME=0.00000100 LINE=20     FILE=jac1.cdv

AMRef=573be0;

call_crtamv_               TIME=0.00000100 LINE=20     FILE=jac1.cdv

AMRefPtr=567a60; AMRef=573be0; Rank=2; StaticSign=0;

SizeArray[0]=25; SizeArray[1]=25;  

 

ret_crtamv_                TIME=0.00000100 LINE=20     FILE=jac1.cdv

AMViewRef=a32320;

call_distr_                TIME=0.00000100 LINE=20     FILE=jac1.cdv

AMViewRefPtr=5678c4; AMViewRef=a32320; PSRefPtr=NULL; PSRef=0; ParamCount=2;

     AxisArray[0]=1;       AxisArray[1]=2;  

DistrParamArray[0]=0; DistrParamArray[1]=0;  

 

ret_distr_                 TIME=0.00000100 LINE=20     FILE=jac1.cdv

IsLocal=1;

call_crtda_                TIME=0.00000100 LINE=20     FILE=jac1.cdv

ArrayHeader=566e88; ExtHdrSign=0; BasePtr=0; Rank=2; TypeSize=8; StaticSign=0; ReDistrSign=3;

SizeArray[0]=25; SizeArray[1]=25;  

LowShdWidthArray[0]=1; LowShdWidthArray[1]=1;  

HiShdWidthArray[0]=1;  HiShdWidthArray[1]=1;  

 

ret_crtda_                 TIME=0.00000100 LINE=20     FILE=jac1.cdv

ArrayHandlePtr=a33e00;

call_align_                TIME=0.00000100 LINE=20     FILE=jac1.cdv

ArrayHeader=566e88; ArrayHandlePtr=a33e00; PatternRefPtr=5678c4; PatternRef=a32320 (AMView);

AxisArray[0]=1;  AxisArray[1]=2;  

CoeffArray[0]=1; CoeffArray[1]=1;  

ConstArray[0]=0; ConstArray[1]=0;  

 

DArr->ArrBlock.ALoc.Ptr0=f41fa0  DArr->ArrBlock.ALoc.Ptr=f41fa0  Size=5016

ret_align_                 TIME=0.00000100 LINE=20     FILE=jac1.cdv

IsLocal=1

call_crtda_                TIME=0.00000100 LINE=21     FILE=jac1.cdv

ArrayHeader=566e94; ExtHdrSign=0; BasePtr=0; Rank=2; TypeSize=8; StaticSign=0; ReDistrSign=2;

SizeArray[0]=25; SizeArray[1]=25;  

LowShdWidthArray[0]=1; LowShdWidthArray[1]=1;  

HiShdWidthArray[0]=1;  HiShdWidthArray[1]=1;  

 

ret_crtda_                 TIME=0.00000100 LINE=21     FILE=jac1.cdv

ArrayHandlePtr=a334c0;

call_align_                TIME=0.00000100 LINE=21     FILE=jac1.cdv

ArrayHeader=566e94; ArrayHandlePtr=a334c0; PatternRefPtr=566e88; PatternRef=a33e00 (DisArray);

AxisArray[0]=1;  AxisArray[1]=2;  

CoeffArray[0]=1; CoeffArray[1]=1;  

ConstArray[0]=0; ConstArray[1]=0;  

 

DArr->ArrBlock.ALoc.Ptr0=f43348  DArr->ArrBlock.ALoc.Ptr=f43348  Size=5016

ret_align_                 TIME=0.00000100 LINE=21     FILE=jac1.cdv

IsLocal=1

call_dvm_void_printf       TIME=0.00000100 LINE=21     FILE=jac1.cdv

Format=JAC1 STARTED

ret_dvm_void_printf        TIME=0.01500100 LINE=21     FILE=jac1.cdv

 

call_crtpl_                TIME=0.00000100 LINE=29     FILE=jac1.cdv

Rank=2;

ret_crtpl_                 TIME=0.00000100 LINE=29     FILE=jac1.cdv

LoopRef=a33080;

call_mappl_                TIME=0.00000100 LINE=29     FILE=jac1.cdv

LoopRefPtr=12ff24; LoopRef=a33080; PatternRefPtr=566e88; PatternRef=a33e00 (DisArray);

      AxisArray[0]=1;        AxisArray[1]=2;  

     CoeffArray[0]=1;       CoeffArray[1]=1;  

     ConstArray[0]=0;       ConstArray[1]=0;  

LoopVarAddrArray[0]=0; LoopVarAddrArray[1]=0;  

LoopVarTypeArray[0]=1; LoopVarTypeArray[1]=1;  

InInitIndexArray[0]=0; InInitIndexArray[1]=0;  

InLastIndexArray[0]=24; InLastIndexArray[1]=24;  

    InStepArray[0]=1;      InStepArray[1]=1;  

 

ret_mappl_                 TIME=0.01600100 LINE=29     FILE=jac1.cdv

Фрагмент преобразованной трассировки

dvm_Init                                     TIME=0.23400000 LINE=25     FILE=jac1.cdv

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

getam_                                       TIME=0.00000100 LINE=20     FILE=jac1.cdv

Опрос ссылки на текущую абстрактную машину...

crtamv_                                      TIME=0.00000100 LINE=20     FILE=jac1.cdv

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

distr_                                       TIME=0.00000100 LINE=20     FILE=jac1.cdv

Распределение ресурсов между процессорами...

crtda_                                       TIME=0.00000100 LINE=20     FILE=jac1.cdv

Выделение памяти для элементов распределённого массива...

align_                                       TIME=0.00000100 LINE=20     FILE=jac1.cdv

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

crtda_                                       TIME=0.00000100 LINE=21     FILE=jac1.cdv

Выделение памяти для элементов распределённого массива...

align_                                       TIME=0.00000100 LINE=21     FILE=jac1.cdv

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

dvm_void_printf                              TIME=0.01500100 LINE=21     FILE=jac1.cdv

Печать в стандартный выходной поток...

crtpl_                                       TIME=0.00000100 LINE=29     FILE=jac1.cdv

Создание параллельного цикла, определение его начала...

mappl_                                       TIME=0.01600100 LINE=29     FILE=jac1.cdv

Отображение витков параллельного цикла на процессоры...

1 Нить - это легковесный процесс, имеющий с другими нитями общие ресурсы, в том числе общую оперативную память. С концептуальной точки зрения нить существует внутри процесса, являясь более мелкой единицей управления программой [13].

2 Правило собственных вычислений -  каждый процессор выполняет только вычисления собственных данных, т.е. данных, распределенных на этот процессор [1].

3 См. страницу 21.

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

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

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

7 См. Приложение 3. Команды DVM-системы (стр. 35 )

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


 

А также другие работы, которые могут Вас заинтересовать

80421. ОРГАНІЗАЦІЯ ТА ОБЛІК РОЗРАХУНКІВ З ОПЛАТИ ПРАЦІ (НА МАТЕРІАЛАХ СІЛЬСЬКОГОСПОДАРСЬКИХ ПІДПРИЄМСТВ БЕРЕЗАНСЬКОГО РАЙОНУ) 1.56 MB
  Актуальність даного питання посилюється ще й тим, що в сучасних умовах здійснюється адаптація існуючої системи обліку та організації праці відповідно до міжнародних стандартів, впроваджуються нові методики організації обліку оплати праці на підприємствах.
80422. Развитие интеллектуальных умений при обучении математике (на примере умений анализировать, синтезировать, алгоритмизировать) 526 KB
  Чтобы учащиеся могли глубже осознать междисциплинарные связи, понять возможность переноса результатов с одного учебного предмета на другой, у них не должно создаваться впечатления, будто каждый предмет призван решать свои, отдельные от других дисциплин, задачи.
80423. Разработка алгоритма изготовления детали «Втулка-регулирующая» 862 KB
  Простейшие токарные станки были известны еще в глубокой древности. Эти станки были весьма примитивны по конструкции: заготовка вращалась от ножного привода, а режущий инструмент приходилось держать в руках. Работа на таких станках была непроизводительной, утомительной и неточной.
80424. Проектирование высокоскоростной корпоративной сети на базе технологии СЦИ 2.27 MB
  Данная дипломная работа заключается в разработке схемы проектирования и технической реализации корпоративной сети связи, на основе технологии СЦИ, с целью создания каналов связи высокого качества между 11-ми объектами, расположенными на территории Волгоградской области.
80425. Разработка финансовой модели проекта птичника на ЗАО «Агрофирма Боровская» 859 KB
  Необходимость существенного повышения уровня и качества жизни населения выдвигает в качестве неотложной задачи ускорение формирования нового агропромышленного производства на основе модернизации и ускоренного развития инновационных процессов, совокупности последовательно осуществляемых...
80426. СОЗДАНИЕ МОБИЛЬНОГО ИНФОРМАЦИОННОГО РЕСУРСА 143 KB
  В рамках данной дипломной работы будет описан процесс создания мобильной версии информационного ресурса Яковлевской центральной детской библиотеки в городе Строитель ориентированной в частности на учащихся средних школ Яковлевского района Белгородской области.
80427. Принцип разделения властей и его реализация к Конституции Российской федерации 1993-го года 127 KB
  Суть данного принципа заключается в том, чтобы не допустить узурпации власти в руках главы одной ветви власти, чтобы размеренно, путём системы сдержек и противовесов, одна ветвь власти влияла на другую, контролировала и выявляла недостатки в управлении, взаимодействовала, чтобы один орган не оказался таком положении...
80429. Финансово-правовое стимулирование инвестиционной деятельности в субъекте Российской Федерации (на примере Томской области) 43.13 KB
  Как известно, рыночная экономика функционирует по принципу естественного отбора. Но уровень развития производственной, иной хозяйственной деятельности на соответствующей территории едва ли можно назвать исключительно частным делом – ведь от этого зависит уровень жизни проживающих в этой местности граждан.